From 1580e0e83b83bab18e29719ea64da83c7af5d002 Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Thu, 13 Oct 2022 15:10:11 +0300 Subject: [PATCH] Channel.attachments --- iris-lib/dist/Channel.d.ts | 1 + iris-lib/dist/iris.cjs.development.js.map | 2 +- iris-lib/dist/iris.cjs.production.min.js.map | 2 +- iris-lib/dist/iris.esm.js.map | 2 +- iris-lib/dist/iris.umd.development.js.map | 2 +- iris-lib/dist/iris.umd.production.min.js.map | 2 +- iris-lib/src/Channel.ts | 1 + src/js/views/settings/{PeerSettings.tsx => PeerSettings.jsx} | 4 ++-- 8 files changed, 9 insertions(+), 7 deletions(-) rename src/js/views/settings/{PeerSettings.tsx => PeerSettings.jsx} (99%) diff --git a/iris-lib/dist/Channel.d.ts b/iris-lib/dist/Channel.d.ts index aba191fc..5919cf59 100644 --- a/iris-lib/dist/Channel.d.ts +++ b/iris-lib/dist/Channel.d.ts @@ -85,6 +85,7 @@ declare class Channel { latest: any; uuid: any; name: any; + attachments: any; theirSecretUuids: {}; theirGroupSecrets: {}; secrets: {}; diff --git a/iris-lib/dist/iris.cjs.development.js.map b/iris-lib/dist/iris.cjs.development.js.map index e611f7b5..a8f0bab2 100644 --- a/iris-lib/dist/iris.cjs.development.js.map +++ b/iris-lib/dist/iris.cjs.development.js.map @@ -1 +1 @@ -{"version":3,"file":"iris.cjs.development.js","sources":["../src/lodash.ts","../src/util.ts","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../src/electron.ts","../src/session.ts","../src/static.ts","../src/Key.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":["// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["throttle","func","limit","inThrottle","args","arguments","context","apply","setTimeout","debounce","inDebounce","clearTimeout","sample","arr","Math","floor","random","length","sampleSize","size","shuffled","slice","i","min","temp","index","defer","once","called","omit","obj","keys","newObj","Object","forEach","key","includes","defaults","undefined","pickBy","predicate","isNode","prototype","toString","call","global","process","e","userAgent","navigator","toLowerCase","isElectron","indexOf","isMobile","check","a","test","substr","vendor","gunAsAnotherUser","gun","f","gun2","Gun","radisk","peers","_","opt","user","auth","values","back","peer","on","gunOnceDefined","node","Promise","resolve","val","_k","_a","eve","off","animals","adjectives","getHash","str","format","SEA","work","name","hash","Error","base64ToHex","capitalize","s","charAt","toUpperCase","generateName","raw","atob","result","hex","charCodeAt","getCaret","el","selectionStart","document","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","injectCss","elementId","getElementById","sheet","createElement","id","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sPageURL","window","location","search","substring","sURLVariables","split","sParameterName","decodeURIComponent","formatTime","date","t","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","now","nowStr","Date","toLocaleDateString","dayDifference","round","weekday","getProfileLink","pub","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","delay","ELECTRON_GUN_URL","maxConnectedPeers","DEFAULT_PEERS","loc","host","is_localhost_but_not_dev","startsWith","hostname","endsWith","url","enabled","urlRegex","known","add","from","k","visibility","secret","Session","getKey","epub","encrypt","encryptedUrl","encryptedUrlHash","publicState","get","put","lastSeen","toISOString","connect","save","remove","disconnect","peerFromGun","localStorage","setItem","JSON","stringify","getSaved","p","getItem","parse","util","reset","isMixedContent","disable","protocol","connectToLocalElectron","max","push","checkGunPeerCount","peersFromGun","connectedPeers","filter","wire","constructor","console","log","readyState","bufferedAmount","unconnectedPeers","addedToGun","map","mixedContent","String","init","setInterval","opts","myOpts","assign","retry","Infinity","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","uuid","Attribute","b","value","guessTypeOf","getUuid","replace","getUniqueIdValidators","isUniqueType","match","equals","uri","currentUser","session","DEFAULT_PERMISSIONS","read","write","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","Array","isArray","o","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","then","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","decrypt","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","block","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","getOurSecretChannelId","pair","getTheirSecretChannelId","getChannels","listenToChatLinks","keypair","getMyChatLinks","seen","handleChannel","ourSecretChannelId","encryptedChatId","chatId","getMessages","theirSecretChannelId","data","messageReceived","userState","selfAuthored","messages","decrypted","info","getLatestMsg","callbackIfLatest","msg","latest","time","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","theirMsgsLastSeenTime","removeParticipant","permissions","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","send","trim","putGroup","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","v","hasWritePermission","hasOwnProperty","subscription","theirSecretUuid","_b","setTyping","isTyping","timeout","setTypingTimeout","getTyping","typing","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","chatLinks","chatLinkSubscriptions","links","link","channels","formatChatLink","encPub","requestId","createChatLink","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","close","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","getActivity","status","isActive","undelivered","querySelectorAll","getAttribute","lastActive","c","unseen","indicator","msgEl","parentElement","msgClass","msgContent","seenIndicator","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","state","timerUpdate","pubKey","activityDate","getTime","isOnline","enc","removeGroupChatLink","removePrivateChatLink","deleteChannel","deleteGroup","Map","publicKey","set","LOCALFORAGE_NULL","notInLocalForage","Set","localForage","config","driver","LOCALSTORAGE","INDEXEDDB","WEBSQL","Node","loaded","loadLocalForage","removeItem","has","newResult","all","on_subscriptions","map_subscriptions","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","lastIndexOf","counter","child","local","blockedUsers","isBlocked","_v","cache","callbacks","groupName","path","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","reduce","sum","_cached_map","cached","cacheKey","myEvent","x","item","cb","_cached_on","_cached_count","count","pop","_cached_fn","fn","callbackId","myCallbacks","NOTIFICATION_SERVICE_URL","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","privateState","notificationSetting","getMyName","shouldDesktopNotify","shouldAudioNotify","title","participantProfiles","desktopNotification","icon","silent","onclick","changeUnseenNotificationCount","changeChatUnseenMsgsCount","change","chat","chatNode","publicVapidKey","urlBase64ToUint8Array","base64String","padding","repeat","base64","rawData","outputArray","Uint8Array","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","error","subscribeToWebPush","serviceWorker","ready","getRegistration","active","postMessage","getSubscription","sub","addWebPushSubscriptionsToChats","channelIds","removeSubscription","saveToGun","myKey","getWebPushSubscriptions","getEpub","getNotificationText","notification","profile","action","eventText","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","target","sendIrisNotification","recipient","sendWebPushNotification","shouldWebPush","subscriptions","payload","endpoint","fetch","method","headers","changeChatUnseenCount","electron","file","multicast","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","shift","includeScore","includeMatches","threshold","Fuse","leading","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","l","autofollow","logOut","unsubscribe","clear","localforage","href","r1","indexedDB","deleteDatabase","r2","r1done","r2done","onerror","onsuccess","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","d","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","matches","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","reject","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","privKeyFile","existsSync","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","sign","sig","verify","errorMsg","ValidationError","SignedMessage","signedData","_validate","_getArray","authorOrRecipient","j","elementValue","_getIterable","Symbol","iterator","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","signerKeyHash","attr","timestamp","isNaN","rating","maxRating","minRating","isPositive","isNegative","isNeutral","create","signingKey","m","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","serialize","deserialize","setReaction","reaction","rootContact","staticState"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iris.cjs.development.js","sources":["../src/lodash.ts","../src/util.ts","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../src/electron.ts","../src/session.ts","../src/static.ts","../src/Key.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":["// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n attachments: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["throttle","func","limit","inThrottle","args","arguments","context","apply","setTimeout","debounce","inDebounce","clearTimeout","sample","arr","Math","floor","random","length","sampleSize","size","shuffled","slice","i","min","temp","index","defer","once","called","omit","obj","keys","newObj","Object","forEach","key","includes","defaults","undefined","pickBy","predicate","isNode","prototype","toString","call","global","process","e","userAgent","navigator","toLowerCase","isElectron","indexOf","isMobile","check","a","test","substr","vendor","gunAsAnotherUser","gun","f","gun2","Gun","radisk","peers","_","opt","user","auth","values","back","peer","on","gunOnceDefined","node","Promise","resolve","val","_k","_a","eve","off","animals","adjectives","getHash","str","format","SEA","work","name","hash","Error","base64ToHex","capitalize","s","charAt","toUpperCase","generateName","raw","atob","result","hex","charCodeAt","getCaret","el","selectionStart","document","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","injectCss","elementId","getElementById","sheet","createElement","id","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sPageURL","window","location","search","substring","sURLVariables","split","sParameterName","decodeURIComponent","formatTime","date","t","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","now","nowStr","Date","toLocaleDateString","dayDifference","round","weekday","getProfileLink","pub","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","delay","ELECTRON_GUN_URL","maxConnectedPeers","DEFAULT_PEERS","loc","host","is_localhost_but_not_dev","startsWith","hostname","endsWith","url","enabled","urlRegex","known","add","from","k","visibility","secret","Session","getKey","epub","encrypt","encryptedUrl","encryptedUrlHash","publicState","get","put","lastSeen","toISOString","connect","save","remove","disconnect","peerFromGun","localStorage","setItem","JSON","stringify","getSaved","p","getItem","parse","util","reset","isMixedContent","disable","protocol","connectToLocalElectron","max","push","checkGunPeerCount","peersFromGun","connectedPeers","filter","wire","constructor","console","log","readyState","bufferedAmount","unconnectedPeers","addedToGun","map","mixedContent","String","init","setInterval","opts","myOpts","assign","retry","Infinity","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","uuid","Attribute","b","value","guessTypeOf","getUuid","replace","getUniqueIdValidators","isUniqueType","match","equals","uri","currentUser","session","DEFAULT_PERMISSIONS","read","write","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","Array","isArray","o","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","then","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","decrypt","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","block","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","getOurSecretChannelId","pair","getTheirSecretChannelId","getChannels","listenToChatLinks","keypair","getMyChatLinks","seen","handleChannel","ourSecretChannelId","encryptedChatId","chatId","getMessages","theirSecretChannelId","data","messageReceived","userState","selfAuthored","messages","decrypted","info","getLatestMsg","callbackIfLatest","msg","latest","time","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","theirMsgsLastSeenTime","removeParticipant","permissions","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","send","trim","putGroup","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","v","hasWritePermission","hasOwnProperty","subscription","theirSecretUuid","_b","setTyping","isTyping","timeout","setTypingTimeout","getTyping","typing","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","chatLinks","chatLinkSubscriptions","links","link","channels","formatChatLink","encPub","requestId","createChatLink","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","close","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","getActivity","status","isActive","undelivered","querySelectorAll","getAttribute","lastActive","c","unseen","indicator","msgEl","parentElement","msgClass","msgContent","seenIndicator","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","state","timerUpdate","pubKey","activityDate","getTime","isOnline","enc","removeGroupChatLink","removePrivateChatLink","deleteChannel","deleteGroup","Map","publicKey","set","LOCALFORAGE_NULL","notInLocalForage","Set","localForage","config","driver","LOCALSTORAGE","INDEXEDDB","WEBSQL","Node","loaded","loadLocalForage","removeItem","has","newResult","all","on_subscriptions","map_subscriptions","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","lastIndexOf","counter","child","local","blockedUsers","isBlocked","_v","cache","callbacks","groupName","path","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","reduce","sum","_cached_map","cached","cacheKey","myEvent","x","item","cb","_cached_on","_cached_count","count","pop","_cached_fn","fn","callbackId","myCallbacks","NOTIFICATION_SERVICE_URL","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","privateState","notificationSetting","getMyName","shouldDesktopNotify","shouldAudioNotify","title","participantProfiles","desktopNotification","icon","silent","onclick","changeUnseenNotificationCount","changeChatUnseenMsgsCount","change","chat","chatNode","publicVapidKey","urlBase64ToUint8Array","base64String","padding","repeat","base64","rawData","outputArray","Uint8Array","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","error","subscribeToWebPush","serviceWorker","ready","getRegistration","active","postMessage","getSubscription","sub","addWebPushSubscriptionsToChats","channelIds","removeSubscription","saveToGun","myKey","getWebPushSubscriptions","getEpub","getNotificationText","notification","profile","action","eventText","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","target","sendIrisNotification","recipient","sendWebPushNotification","shouldWebPush","subscriptions","payload","endpoint","fetch","method","headers","changeChatUnseenCount","electron","file","multicast","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","shift","includeScore","includeMatches","threshold","Fuse","leading","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","l","autofollow","logOut","unsubscribe","clear","localforage","href","r1","indexedDB","deleteDatabase","r2","r1done","r2done","onerror","onsuccess","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","d","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","matches","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","reject","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","privKeyFile","existsSync","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","sign","sig","verify","errorMsg","ValidationError","SignedMessage","signedData","_validate","_getArray","authorOrRecipient","j","elementValue","_getIterable","Symbol","iterator","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","signerKeyHash","attr","timestamp","isNaN","rating","maxRating","minRating","isPositive","isNegative","isNeutral","create","signingKey","m","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","serialize","deserialize","setReaction","reaction","rootContact","staticState"],"mappings":"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"} \ No newline at end of file diff --git a/iris-lib/dist/iris.cjs.production.min.js.map b/iris-lib/dist/iris.cjs.production.min.js.map index 65210515..32626dba 100644 --- a/iris-lib/dist/iris.cjs.production.min.js.map +++ b/iris-lib/dist/iris.cjs.production.min.js.map @@ -1 +1 @@ -{"version":3,"file":"iris.cjs.production.min.js","sources":["../src/lodash.ts","../src/util.ts","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../src/session.ts","../src/Key.ts","../src/electron.ts","../src/static.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":["// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["func","limit","inThrottle","args","arguments","context","this","apply","setTimeout","inDebounce","clearTimeout","arr","Math","floor","random","length","obj","keys","newObj","Object","forEach","key","includes","isNode","prototype","toString","call","global","process","e","userAgent","navigator","toLowerCase","isElectron","indexOf","animals","adjectives","gunOnceDefined","node","Promise","resolve","on","val","_k","_a","eve","undefined","off","gunAsAnotherUser","gun","f","gun2","Gun","radisk","peers","_","opt","user","auth","values","back","peer","getHash","str","format","_context","SEA","work","name","hash","Error","_this","base64ToHex","capitalize","s","charAt","toUpperCase","slice","generateName","raw","atob","result","i","hex","charCodeAt","getCaret","el","selectionStart","document","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","injectCss","getElementById","sheet","createElement","id","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sParameterName","sURLVariables","window","location","search","substring","split","decodeURIComponent","formatTime","date","t","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","now","nowStr","Date","toLocaleDateString","dayDifference","round","weekday","getProfileLink","pub","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","isMobile","a","check","vendor","test","substr","throttle","debounce","delay","sample","sampleSize","size","temp","index","shuffled","min","defer","once","called","omit","ELECTRON_GUN_URL","DEFAULT_PEERS","https://gun-rs.iris.to/gun","https://gun-us.herokuapp.com/gun","loc","host","is_localhost_but_not_dev","startsWith","hostname","endsWith","url","enabled","urlRegex","known","add","from","k","visibility","secret","Session","getKey","epub","encrypt","encryptedUrl","encryptedUrlHash","publicState","get","put","lastSeen","toISOString","connect","save","remove","disconnect","peerFromGun","localStorage","setItem","JSON","stringify","getSaved","p","getItem","parse","util","defaults","reset","isMixedContent","disable","protocol","predicate","connectToLocalElectron","max","maxConnectedPeers","_this2","push","checkGunPeerCount","peersFromGun","connectedPeers","filter","wire","constructor","console","log","readyState","bufferedAmount","unconnectedPeers","addedToGun","map","_this3","String","init","setInterval","_this4","opts","myOpts","assign","retry","Infinity","currentUser","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","uuid","Attribute","b","value","guessTypeOf","getUuid","replace","getUniqueIdValidators","isUniqueType","_proto","match","equals","uri","session","DEFAULT_PERMISSIONS","read","write","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","Array","isArray","o","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","then","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","decrypt","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","block","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","_context4","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","_context5","getOurSecretChannelId","pair","_context6","getTheirSecretChannelId","_context7","getChannels","listenToChatLinks","keypair","_context9","getMyChatLinks","seen","handleChannel","ourSecretChannelId","_context8","encryptedChatId","chatId","_context10","_context11","getMessages","_context12","_this5","theirSecretChannelId","data","messageReceived","userState","_context13","selfAuthored","messages","_context14","decrypted","info","getLatestMsg","callbackIfLatest","msg","_this6","latest","time","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","_this7","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","_this8","theirMsgsLastSeenTime","removeParticipant","permissions","_context21","_this9","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","send","_context22","trim","_context23","putGroup","_context25","_context26","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","_context33","_loop","_context32","_this10","_context31","v","_context35","_context34","hasWritePermission","_context38","_this11","_context37","_context40","hasOwnProperty","_context39","_this12","subscription","_context42","theirSecretUuid","_b","_this13","_context41","_context44","_context43","_this14","setTyping","isTyping","timeout","setTypingTimeout","_this15","getTyping","typing","_this16","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","_opts","_context46","chatLinks","chatLinkSubscriptions","links","link","channels","formatChatLink","_this17","encPub","requestId","_context45","createChatLink","_context47","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","close","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","_this18","getActivity","status","isActive","querySelectorAll","getAttribute","lastActive","c","indicator","msgEl","parentElement","msgClass","msgContent","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","state","timerUpdate","pubKey","activityDate","getTime","isOnline","enc","_context48","_context51","_context50","_context49","removeGroupChatLink","removePrivateChatLink","deleteChannel","_context52","deleteGroup","_context53","Map","publicKey","set","notInLocalForage","Set","localForage","config","driver","LOCALSTORAGE","INDEXEDDB","WEBSQL","local","Node","loaded","loadLocalForage","removeItem","has","_context3","newResult","all","_context2","on_subscriptions","_loop3","map_subscriptions","_loop2","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","lastIndexOf","counter","blockedUsers","isBlocked","_v","cache","callbacks","groupName","path","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","reduce","sum","_cached_map","cached","cacheKey","myEvent","item","x","cb","_cached_on","_cached_count","pop","count","_cached_fn","fn","callbackId","myCallbacks","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","publicVapidKey","urlBase64ToUint8Array","base64String","base64","repeat","rawData","outputArray","Uint8Array","_subscribe","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","error","_subscribeToWebPush","serviceWorker","ready","getRegistration","active","postMessage","getSubscription","sub","addWebPushSubscriptionsToChats","channelIds","privateState","_addWebPushSubscription","saveToGun","myKey","_getWebPushSubscriptions","getEpub","getNotificationText","_getNotificationText","notification","profile","action","changeUnseenNotificationCount","change","_sendIrisNotification","recipient","_sendWebPushNotification","subscriptions","title","payload","endpoint","fetch","method","headers","content-type","_ret","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","notificationSetting","getMyName","participantProfiles","icon","silent","onclick","sendWebPushNotification","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","target","sendIrisNotification","changeChatUnseenCount","chat","chatNode","unseen","subscribeToWebPush","getWebPushSubscriptions","removeSubscription","electron","file","multicast","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","shift","Fuse","includeScore","includeMatches","threshold","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","l","autofollow","logOut","_reg$active","unsubscribe","clear","localforage","href","r1","indexedDB","deleteDatabase","r2","r1done","r2done","onerror","onsuccess","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","d","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","matches","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","reject","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","existsSync","privKeyFile","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","sign","verify","errorMsg","ValidationError","SignedMessage","signedData","sig","_validate","_getArray","authorOrRecipient","j","_getIterable","Symbol","iterator","elementValue","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","attr","signerKeyHash","timestamp","isNaN","rating","maxRating","minRating","isPositive","isNegative","isNeutral","create","signingKey","m","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","serialize","deserialize","setReaction","reaction","rootContact","public","private","static","staticState"],"mappings":"y8RACA,MACY,SAACA,EAAgBC,GACzB,IAAIC,EACJ,OAAO,WACL,IAAMC,EAAOC,UACPC,EAAUC,KACXJ,IACHF,EAAKO,MAAMF,EAASF,GACpBD,GAAa,EACbM,YAAW,WAAA,OAAMN,GAAa,IAAOD,QAIjC,SAACD,EAAgBC,GACzB,IAAIQ,EACJ,OAAO,WACL,IAAMN,EAAOC,UACPC,EAAUC,KAChBI,aAAaD,GACbA,EAAaD,YAAW,WAAA,OAAMR,EAAKO,MAAMF,EAASF,KAAOF,OAGrD,SAACU,GAAU,OAAKA,EAAIC,KAAKC,MAAMD,KAAKE,SAAWH,EAAII,YA0BrD,SAACC,EAAUC,GACf,IAAMC,EAAS,GAMf,OALAC,OAAOF,KAAKD,GAAKI,SAAQ,SAAAC,GAClBJ,EAAKK,SAASD,KACjBH,EAAOG,GAAOL,EAAIK,OAGfH,GC/CPK,GAAS,EACb,IACEA,uBAASJ,OAAOK,UAAUC,SAASC,KAAKC,OAAOC,SAC/C,MAAOC,IAET,IAAMC,GAAaP,GAAUQ,WAAaA,UAAUD,WAAaC,UAAUD,UAAUE,cAC/EC,EAAcH,GAAaA,EAAUI,QAAQ,eAAiB,EAmC9DC,EAAU,CACd,UACA,UACA,MACA,SACA,MACA,SACA,OACA,QACA,MACA,SACA,WACA,WACA,YACA,YACA,SACA,YACA,WACA,YACA,aACA,MACA,WACA,WACA,UACA,MACA,QACA,YACA,MACA,SACA,SACA,YACA,WACA,YACA,WACA,OACA,MACA,OACA,SACA,SACA,MACA,SACA,OACA,QACA,YACA,MACA,OACA,SACA,WACA,SACA,QACA,QACA,MACA,YACA,UACA,QACA,QACA,WACA,WACA,UACA,OACA,MACA,WACA,cACA,UACA,SACA,YACA,aACA,YACA,UACA,YACA,UACA,aACA,aACA,WACA,OACA,YACA,QACA,YACA,MACA,SACA,cACA,QACA,SACA,MACA,SACA,OACA,QACA,UACA,WACA,UACA,YACA,OACA,SACA,SACA,YACA,OACA,QACA,WACA,MACA,UACA,SACA,WACA,OACA,YACA,SACA,OACA,QACA,YACA,SACA,UACA,MACA,QACA,WACA,MACA,MACA,SACA,SACA,SACA,QACA,UACA,OACA,WACA,OACA,MACA,aACA,OACA,MACA,OACA,WACA,YACA,UACA,QACA,SACA,SACA,UACA,OACA,WACA,QACA,SACA,UACA,cACA,SACA,OACA,UACA,aACA,OACA,QACA,UACA,UACA,UACA,OACA,UACA,OACA,WACA,QACA,UACA,eACA,WACA,SACA,QACA,WACA,cACA,QACA,SACA,SACA,SACA,SACA,MACA,YACA,aACA,WACA,aACA,OACA,OACA,QACA,MACA,QACA,UACA,UACA,WACA,OACA,QACA,UACA,QACA,UACA,SACA,SACA,OACA,SACA,QACA,UACA,SACA,OACA,QACA,WACA,OACA,QACA,WACA,SACA,SACA,UACA,WACA,SACA,WACA,SACA,YACA,SACA,WACA,aACA,UACA,OACA,SACA,OACA,cACA,OACA,UACA,WACA,SACA,QACA,WACA,OACA,QACA,OACA,SACA,UACA,OACA,cACA,SACA,UACA,UACA,YACA,OACA,UACA,QACA,MACA,KACA,QACA,UACA,WACA,SACA,aACA,YACA,UACA,UACA,UACA,UACA,QACA,WACA,MACA,SACA,OACA,WACA,UACA,YACA,WACA,OACA,YACA,WACA,SACA,QACA,UACA,YACA,SACA,OACA,SACA,QACA,SACA,SACA,SACA,UACA,MACA,cACA,QACA,WACA,UACA,aACA,aACA,SACA,OACA,UACA,YACA,WACA,aACA,SACA,UACA,UACA,WACA,WACA,QACA,QACA,QACA,SACA,WACA,aACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,OACA,UACA,SACA,YACA,QACA,WACA,WACA,WACA,QACA,QACA,WACA,UACA,OACA,QACA,YACA,YACA,OACA,QACA,QACA,YACA,UACA,UACA,OACA,SACA,OACA,QACA,SACA,OACA,WACA,SACA,QACA,OACA,SACA,SACA,gBACA,QACA,SACA,QACA,OACA,UACA,UACA,SACA,OACA,UACA,SACA,QACA,UACA,YACA,UACA,aACA,WACA,OACA,YACA,SACA,aACA,OACA,OACA,UACA,MACA,QACA,SACA,MACA,SACA,UACA,MACA,SACA,SACA,QACA,WACA,QACA,QACA,MACA,QACA,QACA,MACA,WAGIC,EAAa,CACjB,UACA,MACA,WACA,MACA,QACA,WACA,QACA,OACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,OACA,QACA,QACA,OACA,OACA,UACA,SACA,SACA,QACA,SACA,OACA,OACA,SACA,UACA,SACA,QACA,UACA,OACA,QACA,MACA,QACA,SACA,QACA,SACA,MACA,QACA,SACA,UACA,SACA,OACA,OACA,OACA,SACA,MACA,SACA,QACA,UACA,SACA,SACA,QACA,WACA,OACA,UACA,QACA,QACA,OACA,OACA,OACA,SACA,MACA,QACA,QACA,QACA,OACA,QACA,QACA,WACA,QACA,MACA,QACA,QACA,OACA,WACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,OACA,UACA,UACA,OACA,QACA,UACA,QACA,QACA,WACA,aACA,SACA,SACA,OACA,YACA,aACA,YACA,aACA,SACA,YACA,QACA,QACA,OACA,SACA,QACA,OACA,QACA,QACA,SACA,SACA,QACA,YACA,QACA,UACA,aACA,QACA,SACA,SACA,OACA,MACA,MACA,QACA,SACA,UACA,UACA,QACA,QACA,YACA,SACA,QACA,QACA,YACA,QACA,QACA,WACA,SACA,OACA,QACA,SACA,SACA,SACA,QACA,SACA,OACA,MACA,SACA,SACA,QACA,UACA,UACA,WACA,UACA,QACA,MACA,aACA,QACA,YACA,YACA,WACA,SACA,QACA,YACA,WACA,UACA,YACA,YACA,YACA,QACA,cACA,UACA,OACA,SACA,UACA,UACA,aACA,WACA,WACA,WACA,SACA,OACA,MACA,UACA,SACA,aACA,UACA,UACA,YACA,aACA,UACA,YACA,QACA,WACA,UACA,OACA,QACA,WACA,cACA,QACA,WACA,QACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,OACA,WACA,WACA,cACA,cACA,aACA,aACA,aACA,QACA,SACA,aACA,cACA,YACA,eACA,UACA,YACA,OACA,WACA,YACA,OACA,WACA,QACA,SACA,WACA,OACA,QACA,UACA,UACA,YACA,QACA,SACA,OACA,SACA,SACA,QACA,WACA,UACA,WACA,QACA,WACA,QACA,UACA,WACA,aACA,aACA,aACA,YACA,QACA,YACA,UACA,OACA,QACA,OACA,MACA,MACA,QACA,OACA,QACA,YACA,QACA,QACA,SACA,YACA,OACA,QACA,WACA,UACA,QACA,QACA,WACA,MACA,SACA,YACA,OACA,OACA,UACA,OACA,MACA,MACA,SACA,YACA,MACA,OACA,OACA,QACA,QACA,WACA,OACA,SACA,OACA,QACA,aACA,gBACA,UACA,YACA,UACA,OACA,QACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,UACA,QACA,SACA,YACA,SACA,WACA,OACA,UACA,OACA,YACA,OACA,UACA,SACA,SACA,YACA,WACA,UACA,QACA,OACA,UACA,QACA,UACA,QACA,UACA,aACA,OACA,SACA,WACA,YACA,cACA,aACA,SACA,UACA,WACA,SACA,UACA,SACA,SACA,QACA,QACA,QACA,MACA,SACA,UACA,WACA,QACA,QACA,cACA,aACA,QACA,OACA,WACA,cACA,MACA,SACA,QACA,WACA,WACA,aACA,QACA,MACA,UACA,QACA,eACA,SACA,OACA,OACA,QACA,QACA,SACA,YACA,UACA,cACA,WACA,SACA,cACA,OACA,cACA,eACA,WACA,WACA,MACA,WACA,cACA,WACA,UACA,OACA,QACA,OACA,OACA,aACA,OACA,YACA,YACA,QACA,UACA,UACA,SACA,gBACA,WACA,SACA,UACA,SACA,WACA,OACA,OACA,aACA,OACA,WACA,YACA,WACA,WACA,MACA,QACA,UACA,MACA,aACA,SACA,WACA,UACA,WACA,aACA,QACA,OACA,SACA,QACA,SACA,QACA,WACA,SACA,SACA,YACA,WACA,QACA,UACA,WACA,YACA,QACA,OACA,YACA,WACA,YACA,QACA,OACA,SACA,WACA,SACA,QACA,QACA,SACA,UACA,eACA,SACA,QACA,MACA,SACA,QACA,UACA,cACA,SACA,UACA,UACA,aACA,YACA,WACA,QACA,WACA,UACA,UACA,SACA,SACA,aACA,UACA,aACA,aACA,UACA,UACA,MACA,QACA,YACA,cACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,UACA,OACA,OACA,MACA,aACA,OACA,QACA,WACA,aACA,OACA,QACA,QACA,QACA,UACA,SACA,UACA,WACA,QACA,WACA,OACA,OACA,SACA,WACA,UACA,QACA,UACA,QACA,aACA,WACA,QACA,QACA,cACA,OACA,UACA,UACA,OACA,WACA,UACA,QACA,YACA,QACA,UACA,SACA,OACA,WACA,OACA,YACA,QACA,WACA,WACA,QACA,QACA,UACA,SACA,MACA,YACA,WACA,YACA,OACA,QACA,cACA,MACA,UACA,QACA,OACA,WACA,eACA,QACA,OACA,OACA,QACA,UACA,SACA,YACA,gBACA,UACA,UACA,aACA,QACA,QACA,SACA,QACA,WACA,OACA,SACA,UACA,MACA,QACA,OACA,YACA,OACA,YACA,eACA,UACA,UACA,UACA,YACA,QACA,YACA,cACA,UACA,WACA,WACA,eACA,UACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,YACA,UACA,OACA,OACA,SACA,SACA,UACA,OACA,YACA,QACA,YACA,OACA,MACA,cACA,QACA,UACA,UACA,aACA,YACA,SACA,OACA,SACA,YACA,MACA,SACA,QACA,WACA,QACA,QACA,iBACA,SACA,aACA,gBACA,aACA,QACA,QACA,OACA,OACA,YACA,UACA,WACA,aACA,SACA,WACA,OACA,UACA,WACA,aACA,UACA,WACA,UACA,WACA,UACA,WACA,UACA,YACA,MACA,YACA,aACA,YACA,WACA,QACA,WACA,WACA,WACA,MACA,UACA,QACA,WACA,aACA,UACA,UACA,QACA,SACA,iBACA,YACA,YACA,aACA,YACA,OACA,SACA,WACA,SACA,cACA,cACA,OACA,SACA,WACA,UACA,SACA,aACA,UACA,cACA,gBACA,QACA,UACA,WACA,UACA,QACA,QACA,cACA,UACA,UACA,SACA,SACA,OACA,QACA,MACA,QACA,WACA,QACA,gBACA,UACA,aACA,aACA,SACA,WACA,WACA,WACA,QACA,aACA,UACA,OACA,QACA,aACA,QACA,WACA,OACA,WACA,YACA,QACA,aACA,UACA,YACA,SACA,YACA,SACA,SACA,UACA,aACA,eACA,YACA,QACA,WACA,WACA,OACA,WACA,SACA,aACA,YACA,WACA,MACA,gBACA,SACA,aACA,UACA,QACA,gBACA,SACA,WACA,aACA,SACA,WACA,SACA,OACA,WACA,WACA,aACA,WACA,eACA,YACA,UACA,WACA,WACA,aACA,YACA,UACA,OACA,WACA,SACA,QACA,QACA,aACA,QACA,SACA,QACA,YACA,OACA,WACA,SACA,SACA,WACA,SACA,UACA,OACA,WACA,WACA,QACA,SACA,QACA,aACA,YACA,eACA,WACA,cACA,YACA,SACA,eACA,gBACA,WACA,cACA,UACA,YACA,WACA,cACA,YACA,WACA,WACA,YACA,SACA,cACA,aACA,SACA,QACA,eACA,aACA,UACA,WACA,QACA,YACA,cACA,aACA,cACA,SACA,YACA,aACA,aACA,aACA,SACA,aACA,SACA,gBACA,QACA,WACA,aACA,QACA,aACA,kBACA,WACA,UACA,cACA,UACA,WACA,SACA,aACA,QACA,UACA,WACA,QACA,aACA,cACA,UACA,cACA,SACA,WACA,QACA,OACA,QACA,WACA,aACA,UACA,aACA,aACA,YACA,OACA,SACA,gBACA,UACA,aACA,cACA,SACA,SACA,cACA,OACA,UACA,OACA,aACA,QACA,OACA,QACA,SACA,SACA,UACA,SACA,UACA,QACA,SACA,WACA,QACA,YACA,SACA,WACA,SACA,UACA,cACA,WACA,UACA,YACA,WACA,QACA,WACA,OACA,eACA,YACA,cACA,cACA,aACA,WACA,cACA,OACA,QACA,WACA,SACA,WACA,iBACA,UACA,aACA,UACA,YACA,WACA,QACA,aACA,UACA,UACA,MACA,WACA,YACA,cACA,cACA,eACA,cACA,YACA,WACA,UACA,cACA,gBACA,OACA,WACA,UACA,WACA,aACA,aACA,UACA,YACA,aACA,QACA,UACA,WACA,QACA,eACA,OACA,UACA,SACA,cACA,cACA,WACA,QACA,UACA,WACA,QACA,UACA,UACA,SACA,UACA,WACA,UACA,SACA,WACA,YACA,OACA,WACA,SACA,aACA,cACA,YACA,OACA,UACA,QACA,QACA,YACA,SACA,QACA,UACA,MACA,aACA,YACA,UACA,QACA,SACA,aACA,SACA,UACA,YACA,WACA,iBACA,eACA,WACA,QACA,UACA,QACA,UACA,WACA,QACA,QACA,WACA,WACA,QACA,WACA,OACA,UACA,gBACA,UACA,UACA,aACA,UACA,SACA,cACA,gBACA,eACA,aACA,aACA,QACA,WACA,UACA,SACA,UACA,SACA,OACA,UACA,aACA,eACA,QACA,YACA,WACA,aACA,eACA,OACA,aACA,UACA,UACA,aACA,QACA,QACA,WACA,gBACA,WACA,QACA,eACA,WACA,aACA,UACA,aACA,YACA,UACA,SACA,cACA,UACA,WACA,UACA,YACA,UACA,SACA,UACA,UACA,WACA,cACA,WACA,gBACA,aACA,QACA,WACA,YACA,aACA,SACA,SACA,YACA,WACA,SACA,SACA,SACA,eACA,QACA,aACA,YACA,OACA,YACA,SACA,QACA,UACA,YACA,aACA,WACA,eACA,gBACA,SACA,aACA,QACA,WACA,SACA,gBACA,SACA,aACA,UACA,QACA,SACA,cACA,aACA,aACA,eACA,WACA,YACA,UACA,aACA,UACA,WACA,UACA,QACA,SACA,YACA,WACA,OACA,WACA,UACA,OACA,UACA,YACA,cACA,aACA,SACA,YACA,aACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,UACA,UACA,SACA,cACA,YACA,YACA,WACA,SACA,UACA,SACA,YACA,UACA,cACA,SACA,aACA,MACA,WACA,OACA,KACA,WACA,aACA,UACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,aACA,YACA,eACA,cACA,WACA,OACA,aACA,SACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,SACA,MACA,QACA,WACA,aACA,YACA,WACA,WACA,QACA,YACA,UACA,eACA,WACA,WACA,eACA,aACA,UACA,QACA,UACA,UACA,WACA,aACA,SACA,UACA,SACA,UACA,SACA,SACA,UACA,eACA,YACA,UACA,YACA,SACA,cACA,YACA,WACA,aACA,SACA,UACA,YACA,iBACA,QACA,SACA,WACA,cACA,QACA,OACA,WACA,cACA,aACA,aACA,aACA,YACA,QACA,aACA,QACA,SACA,YACA,OACA,UACA,WACA,SACA,YACA,QACA,UACA,OACA,YACA,YACA,WACA,OACA,SACA,UACA,UACA,WACA,YACA,aACA,WACA,cACA,SACA,OACA,cACA,OACA,WACA,UACA,OACA,OACA,MACA,SACA,QACA,OACA,eACA,YACA,OACA,QACA,WACA,QACA,UACA,YACA,SACA,SACA,WACA,SACA,QACA,QACA,SACA,WACA,UACA,OACA,OACA,OACA,WACA,OACA,UACA,QACA,SACA,YACA,WACA,WACA,YACA,SACA,QACA,QACA,aACA,QACA,QACA,SACA,SACA,QACA,SACA,YACA,WACA,SACA,UACA,OACA,YACA,UACA,MACA,SACA,YACA,MACA,QACA,OACA,SACA,SACA,QACA,QACA,OACA,MACA,QACA,WACA,QACA,QACA,QACA,WACA,WACA,SACA,WACA,QACA,WACA,QACA,UACA,QACA,OACA,OACA,OACA,cACA,UACA,OACA,SACA,QACA,QACA,MACA,OACA,OACA,QACA,aACA,MACA,SACA,WACA,SACA,WACA,UACA,SACA,SACA,QACA,QACA,WACA,QACA,OACA,QACA,MACA,UACA,SACA,QACA,MACA,QACA,UACA,QACA,QACA,SACA,UACA,UACA,SACA,OACA,OACA,OACA,MACA,SACA,QACA,SACA,QACA,OACA,UACA,OACA,SACA,WACA,YACA,SACA,QACA,UAGa,CACbC,eAryDF,SAAwBC,GACtB,OAAO,IAAIC,SAAQ,SAAAC,GACjBF,EAAKG,IAAG,SAACC,EAAUC,EAASC,EAASC,QACvBC,IAARJ,IACFG,EAAIE,MACJP,EAAQE,WAiyDdM,iBArzDF,SAA0BC,EAAU5B,EAAU6B,GAC5C,IAAMC,EAAO,IAAIC,EAAI,CAACC,QAAQ,EAAOC,MAAOnC,OAAOF,KAAKgC,EAAIM,EAAEC,IAAIF,SAC5DG,EAAON,EAAKM,OAUlB,OATAA,EAAKC,KAAKrC,GACVb,YAAW,WAEKW,OAAOwC,OAAOR,EAAKS,KAAK,cAChCxC,SAAQ,SAAAyC,GAEZV,EAAKV,GAAG,MAAOoB,QAEhB,KACIX,EAAEO,IA0yDHK,iBAASC,EAAaC,qHAAM,YAANA,IAAAA,YACrBD,GAAGE,SAAA,MAAA,8BACCnB,GAAS,OAAA,OAAAmB,SAECb,EAAIc,IAAIC,KAAKJ,OAAKjB,OAAWA,EAAW,CAACsB,iBAAiB,OAAnE,GAAJC,UACGJ,SAAA,MAAA,MACD,IAAIK,iCAAiCP,GAAM,OAAA,KAE/CM,EAAKtD,OAAS,KAAEkD,UAAA,MAAA,MACZ,IAAIK,6EAA6ED,uDAAwD,QAAA,WAE7IL,GAAgBC,UAAA,MAAA,yBACXM,EAAKC,YAAYH,IAAK,QAAA,yBAExBA,GAAI,QAAA,UAAA,6BAGbI,oBAAWC,GACT,OAAOA,EAAEC,OAAO,GAAGC,cAAgBF,EAAEG,MAAM,IAG7CC,wBACE,OAAUxE,KAAKmE,WAAWlB,EAASnB,QAAiB9B,KAAKmE,WAAWlB,EAASpB,KAG/EqC,qBAAYT,GAGV,IAFA,IAAMgB,EAAMC,KAAKjB,GACbkB,EAAS,GACJC,EAAI,EAAGA,EAAIH,EAAIhE,OAAQmE,IAAK,CACnC,IAAMC,EAAMJ,EAAIK,WAAWF,GAAGzD,SAAS,IACvCwD,GAA0B,IAAfE,EAAIpE,OAAeoE,MAAWA,EAE3C,OAAOF,GAGTI,kBAASC,GACP,GAAIA,EAAGC,eACL,OAAOD,EAAGC,eAEV,GAAIC,SAASC,UAAW,CACtBH,EAAGI,QAEH,IAAMC,EAAIH,SAASC,UAAUG,cAC7B,GAAU,OAAND,EACF,OAAO,EAGT,IAAME,EAAKP,EAAGQ,kBAAmBC,EAAKF,EAAGG,YAGzC,OAFAH,EAAGI,eAAeN,EAAEO,eACpBH,EAAGI,YAAY,aAAcN,GACtBE,EAAGK,KAAKrF,OAGnB,OAAO,GAGTsF,qBAEE,IAAIb,SAASc,4BAAb,CAGA,IAAMC,EAAQf,SAASgB,uBACvBD,EAAME,eACNF,EAAMG,+nRA+WNlB,SAASmB,KAAKC,QAAQL,KAGxBM,yBAAgBC,EAAgBC,GAC9B,IAEIC,EAAgB9B,EADd+B,GADWF,GAAWG,OAAOC,SAASC,OAAOC,UAAU,IAC9BC,MAAM,KAGrC,IAAKpC,EAAI,EAAGA,EAAI+B,EAAclG,OAAQmE,IAEpC,IADA8B,EAAiBC,EAAc/B,GAAGoC,MAAM,MACrB,KAAOR,EACxB,YAA6BhE,IAAtBkE,EAAe,IAA0BO,mBAAmBP,EAAe,KAMxFQ,oBAAWC,GAET,IAAMC,EAASD,EAAKE,wBAAmB7E,EAAW,CAAC8E,UAAW,UACxDlD,EAAIgD,EAAEJ,MAAM,KAClB,OAAiB,IAAb5C,EAAE3D,OACM2D,EAAE,OAAQA,EAAE,GAAMA,EAAE,GAAGG,MAAM,GAElC6C,GAGTG,oBAAWJ,GACT,IAAMC,EAAID,EAAKK,oBAAehF,EAAW,CAACiF,UAAW,QAASH,UAAW,UACnElD,EAAIgD,EAAEJ,MAAM,KAClB,OAAiB,IAAb5C,EAAE3D,OACM2D,EAAE,OAAQA,EAAE,GAAMA,EAAE,GAAGG,MAAM,GAElC6C,GAGTM,6BAAoBP,EAAYQ,EAAiBC,EAAYC,GAM3D,GALKD,IAGHC,GAFAD,EAAM,IAAIE,MAEGC,mBAAmB,CAACN,UAAW,WAE1CE,IAAYE,EACd,MAAO,QAET,IAAMG,EAAgB1H,KAAK2H,OAAOL,EAAMT,UACxC,OAAsB,IAAlBa,EACK,QAEa,IAAlBA,EACK,YAELA,GAAiB,EACZb,EAAKY,wBAAmBvF,EAAW,CAAC0F,QAAS,SAE/CP,GAGTQ,wBAAeC,GACb,OAAUxB,OAAOC,SAASwB,qBAAoBC,mBAAmBF,IAGnEG,wBAAenE,EAAW3D,GACxB,gBADwBA,IAAAA,EAAS,IAC1B2D,EAAE3D,OAASA,EAAY2D,EAAEG,MAAM,EAAG9D,SAAe2D,GAG1D8B,uBAAcsC,EAAcC,EAAcC,GACxC,IAAM1D,EAAKE,SAASgB,cAAcsC,GAOlC,OANIC,GACFzD,EAAG2D,aAAa,QAASF,GAEvBC,GACFA,EAAOE,YAAY5D,GAEdA,GAGT/D,OAAAA,EACAU,WAAAA,EACAkH,UA1zEgB5H,GAAW,WAC3B,GAAIU,EAAc,OAAO,EACzB,IACUmH,EADNC,GAAQ,EAEZ,OADUD,EAA87DrH,UAAUD,WAAaC,UAAUuH,QAAU,IAAj+D,2TAA2TC,KAAKH,IAAM,0kDAA0kDG,KAAKH,EAAEI,OAAO,EAAG,OAAKH,GAAQ,GACz7DA,EAJoB,GA4zE3BI,SAAU,SAACzJ,EAAgBC,GACzB,IAAIC,EACJ,OAAO,WACL,IAAMC,EAAOC,UACPC,EAAUC,KACXJ,IACHF,EAAKO,MAAMF,EAASF,GACpBD,GAAa,EACbM,YAAW,WAAA,OAAMN,GAAa,IAAOD,MAI3CyJ,SAAU,SAAC1J,EAAgB2J,GACzB,IAAIlJ,EACJ,OAAO,WACL,IAAMJ,EAAUC,KACVH,EAAOC,UACbM,aAAaD,GACbA,EAAaD,YAAW,WAAA,OAAMR,EAAKO,MAAMF,EAASF,KAAOwJ,KAG7DC,OAAQ,SAACjJ,GAAU,OAAKA,EAAIC,KAAKC,MAAMD,KAAKE,SAAWH,EAAII,UAC3D8I,WAAY,SAAClJ,EAAYmJ,GAMvB,IALA,IAGIC,EACAC,EAJEC,EAAWtJ,EAAIkE,MAAM,GACvBK,EAAIvE,EAAII,OACRmJ,EAAMhF,EAAI4E,EAGP5E,KAAMgF,GAEXH,EAAOE,EADPD,EAAQpJ,KAAKC,OAAOqE,EAAI,GAAKtE,KAAKE,WAElCmJ,EAASD,GAASC,EAAS/E,GAC3B+E,EAAS/E,GAAK6E,EAEhB,OAAOE,EAASpF,MAAMqF,IAExBC,MAAO,SAACnK,GAAc,OAAKQ,WAAWR,EAAM,IAC5CoK,KAAM,SAACpK,GACL,IAAIqK,GAAS,EACb,OAAO,WACDA,IAGJA,GAAS,EACTrK,EAAKO,MAAMD,KAAMF,cAGrBkK,KAAM,SAACtJ,EAAUC,GACf,IAAMC,EAAS,GAMf,OALAC,OAAOF,KAAKD,GAAKI,SAAQ,SAAAC,GAClBJ,EAAKK,SAASD,KACjBH,EAAOG,GAAOL,EAAIK,OAGfH,IC73ELqJ,EAAmB,4BAcnBC,EAAuB,CAC3BC,6BAA8B,GAC9BC,mCAAoC,IAGhCC,EAAMzD,OAAOC,SACbyD,EAAOD,EAAIC,KACXC,EAA2BD,EAAKE,WAAW,cAAyB,mBAATF,GAC7DD,EAAII,SAASC,SAAS,kBAAoBH,KAC5C1J,OAAOF,KAAKuJ,GAAepJ,SAAQ,SAAA6J,GAAG,OAAIT,EAAcS,GAAKC,SAAU,KACvEV,EAAiBG,EAAIhC,eAAgB,CAACuC,SAAS,IAGjD,ICxBIvJ,EDwBEwJ,EAAW,gEAKF,CACbC,MAAO,GAGDC,aAAIxH,+HACJA,EAAKoH,KAAQE,EAAS5B,KAAK1F,EAAKoH,MAAIhH,SAAA,MAAA,MAChC,IAAIK,qBAAqBT,EAAKoH,KAAM,OAWe,GARvDpH,EAAKyH,MACPnK,OAAOF,KAAKsD,EAAK6G,OAAOhK,SAAQ,SAAAmK,GAC1BhH,EAAK6G,MAAMG,GAAGD,OAASzH,EAAKyH,aACvB/G,EAAK6G,MAAMG,MAKxBhH,EAAK6G,MADCH,EAAMpH,EAAKoH,KAAO,IACN1G,EAAK6G,MAAMH,IAAQ1H,EAAOM,EAAM,CAAC,QAC3B,WAApBA,EAAK2H,YAAuBvH,UAAA,MAAA,OAAAA,SAEXb,EAAIc,IAAIuH,OAAOC,GAAQC,SAASC,KAAMF,GAAQC,UAAS,OAAA,GAAA1H,kBAAAA,UAAA,MAAAA,KAAI,GAAE,QAAtE,OAANwH,OAAMxH,UACeb,EAAIc,IAAI2H,QAAQhI,EAAKoH,IAAKQ,GAAO,QAA1C,OAAZK,SAAY7H,UACab,EAAIc,IAAIC,KAAK2H,EAAc,KAAM,KAAM,CAAC1H,KAAM,YAAW,QAAlF2H,SACJC,IAAcvI,OAAOwI,IAAI,SAASA,IAAIF,GAAkBG,IAAI,CAACjB,IAAKpH,EAAKoH,IAAKkB,UAAU,IAAI/D,MAAOgE,gBAAgB,SAE9F,IAAjBvI,EAAKqH,QACPrH,EAAKoH,KAAO1G,EAAK8H,QAAQxI,EAAKoH,KAE9B1G,EAAK+H,OACN,QAAA,UAAA,6BAIHC,gBAAOtB,UACE3K,KAAK8K,MAAMH,GAClB3K,KAAKgM,QAIPE,oBAAWC,GACTT,IAAcvJ,GAAG,MAAOgK,GACxBA,EAAYxB,IAAM,IAGpBqB,gBACEI,aAAaC,QAAQ,WAAYC,KAAKC,UAAUvM,KAAK8K,SAGvD0B,oBACE,IAAIC,EAASL,aAAaM,QAAQ,YAUlC,OARED,EADEA,GAAW,cAANA,EACHH,KAAKK,MAAMF,GAEXvC,EAEF0C,EAAKjL,aACP8K,EAAExC,GAAoB,IAExBpJ,OAAOF,KAAK8L,GAAG3L,SAAQ,SAAAmK,GAAC,OFtCfvK,EEsC8B+L,EAAExB,GFtCtB4B,EEsC0B,CAACjC,SAAS,GFrCvD/J,OAAOF,KAAKkM,GAAU/L,SAAQ,SAAAC,QACXyB,IAAb9B,EAAIK,KACNL,EAAIK,GAAO8L,EAAS9L,OAGjBL,EANC,IAACA,EAAUmM,KEuCZJ,GAITK,iBACEV,aAAaC,QAAQ,WAAY,IACjCrM,KAAK8K,MAAQ9K,KAAKwM,YAIpBT,iBAAQpB,GACF3K,KAAK+M,eAAepC,KACpB3K,KAAK8K,MAAMH,IACb3K,KAAK8K,MAAMH,GAAKC,SAAU,EAC1Bc,IAAcxI,IAAI,CAACF,MAAO,CAAC2H,KAC3B3K,KAAKgM,QAELhM,KAAK+K,IAAI,CAACJ,IAAAA,MAKdqC,iBAAQrC,EAAawB,GACnBnM,KAAK8K,MAAMH,GAAKC,SAAU,EACtBuB,GACFnM,KAAKkM,WAAWC,GAElBnM,KAAKgM,QAGPe,wBAAepC,GACb,MAAoC,WAA7B/D,OAAOC,SAASoG,UAAmD,IAAzBtC,EAAI/I,QAAQ,UAG/DpB,sBFjESE,EAAUwM,EACXtM,SEiEAuM,EAAyBP,EAAKjL,YAAc3B,KAAK8K,MAAMb,KAA8D,IAAzCjK,KAAK8K,MAAMb,GAAkBW,QACzGrB,EAAa4D,EAAyB7M,KAAK8M,IAAIC,EAAuB,GA9HxD,EA+Hd/D,EF9GI,SAACjJ,EAAYmJ,GAMvB,IALA,IAGIC,EACAC,EAJEC,EAAWtJ,EAAIkE,MAAM,GACvBK,EAAIvE,EAAII,OACRmJ,EAAMhF,EAAI4E,EAGP5E,KAAMgF,GAEXH,EAAOE,EADPD,EAAQpJ,KAAKC,OAAOqE,EAAI,GAAKtE,KAAKE,WAElCmJ,EAASD,GAASC,EAAS/E,GAC3B+E,EAAS/E,GAAK6E,EAEhB,OAAOE,EAASpF,MAAMqF,GEkGP3G,CACbpC,OAAOF,MFrEFD,EEsEMV,KAAK8K,MFtEDoC,EEsEQ,SAAC3J,EAAWoH,GAC/B,OAAQ2C,EAAKP,eAAepC,IAAQpH,EAAKqH,WAAagC,EAAKjL,YAAcgJ,IAAQV,IFtEjFrJ,EAAS,GACfC,OAAOF,KAAKD,GAAKI,SAAQ,SAAAC,GACnBmM,EAAUxM,EAAIK,MAChBH,EAAOG,GAAOL,EAAIK,OAGfH,IEkEF2I,GAKL,OAHID,GAAU6D,GACZ7D,EAAOiE,KAAKtD,GAEPX,GAGTkE,wCACMC,EAAe/B,IAAcpI,KAAK,aAClCoK,EAAiB7M,OAAOwC,OAAOoK,GAAcE,QAAO,SAACpK,GAIvD,OAHIA,GAAQA,EAAKqK,MAAuC,cAA/BrK,EAAKqK,KAAKC,YAAY/J,MAC7CgK,QAAQC,IAAI,cAAexK,GAEtBA,GAAQA,EAAKqK,MAAiC,IAAzBrK,EAAKqK,KAAKI,YAAkD,IAA7BzK,EAAKqK,KAAKK,gBAAuD,cAA/B1K,EAAKqK,KAAKC,YAAY/J,QAErH,GAAI4J,EAAejN,OApJC,EAoJ2B,CAC7C,IAAIyN,EAAmBrN,OAAOF,KAAKX,KAAK8K,OAAO6C,QAAO,SAAAhD,GACpD,IAAIwD,EAAatN,OAAOwC,OAAOoK,GAAcW,KAAI,SAAC7K,GAAQ,OAAKA,EAAKoH,OAAK/I,QAAQ+I,IAAQ,EACrFC,EAAUyD,EAAKvD,MAAMH,GAAKC,QAE9B,QADmD,WAA7BhE,OAAOC,SAASoG,UAAmD,IAAzBtC,EAAI/I,QAAQ,WACpDgJ,IAAYuD,KAEtC,GAAID,EAAiBzN,OAAQ,CAC3B,IAAM6I,EAASgF,OAAOrL,EAASiL,IAC/BlO,KAAK+L,QAAQzC,IAGboE,EAAejN,OAhKC,GAiKlBT,KAAKkM,WAAWjJ,EAASyK,KAI7Ba,2BACEvO,KAAK8K,MAAQ9K,KAAKwM,WAMlBgC,aAAY,WAAA,OAAMC,EAAKjB,sBAAqB,OCxKhD,WAAwBkB,GACtB,YADsBA,IAAAA,EAAY,KAC7BrN,EAAQ,CACX,IAAMsN,EAAS9N,OAAO+N,OAAO,CAAE5L,MAAQ0L,EAAK1L,OAASA,EAAMxC,SAAW4L,cAAc,EAAOyC,MAAMC,UAAYJ,GACzGA,EAAK1L,OACP0L,EAAK1L,MAAMlC,SAAQ,SAAC6J,GAAW,OAAK3H,EAAM+H,IAAI,CAACJ,IAAAA,OAEjD3H,EAAMuL,OACNlN,EAAS,IAAIyB,EAAI6L,GAEnB,OAAOtN,EChBT,ICDI0N,EDCEC,EAAuB,CAC3BC,MAAO,qFACPC,QAAS,oCACTC,gBAAiB,oCACjBC,GAAI,sFACJC,KAAM,uCACNC,gBAAiB,KACjBC,UAAW,KACXC,cAAe,KACfC,IAAK,WACLC,MAAO,WACPC,MAAO,KACPhF,IAAK,oFACLiF,QAAS,qFACTC,KAAM,oEAKFC,aACJ,WAAYhH,EAAGiH,GACb,oBAAWjH,EAAgB,CACzB,oBAAWA,EAAEkH,MAAsB,MAAM,IAAIhM,mDAAmD8E,EAAEkH,WAAU1D,KAAKC,UAAUzD,EAAEkH,QAC7H,oBAAWlH,EAAEN,KAAqB,MAAM,IAAIxE,kDAAkD8E,EAAEN,UAAS8D,KAAKC,UAAUzD,EAAEN,OAC1HuH,EAAIjH,EAAEkH,MACNlH,EAAIA,EAAEN,KAER,oBAAWM,EAAkB,MAAM,IAAI9E,kDAAkD8E,OAAMwD,KAAKC,UAAUzD,IAC9G,IAAKA,EAAErI,OAAU,MAAM,IAAIuD,qCAC3B,GAAI+L,EAAG,CACL,oBAAWA,EAAkB,MAAM,IAAI/L,uDAAuD+L,OAAMzD,KAAKC,UAAUwD,IACnH,IAAKA,EAAEtP,OAAU,MAAM,IAAIuD,sCAC3BhE,KAAKwI,KAAOM,EACZ9I,KAAKgQ,MAAQD,MACR,CACL/P,KAAKgQ,MAAQlH,EACb,IAAM1B,EAAI0I,EAAUG,YAAYjQ,KAAKgQ,OACrC,IAAI5I,EAGF,MAAM,IAAIpD,gEAFVhE,KAAKwI,KAAOpB,GAKjB0I,EAEMI,QAAP,WAEE,OAAO,IAAIJ,SADD,SAAJC,EAAIjH,GAAC,OAAIA,GAAKA,EAAoB,GAAhBxI,KAAKE,UAAiBsI,EAAI,GAAG3H,SAAS,KAAO,CAAC,MAAQ,KAAO,KAAO,KAAO,MAAMgP,QAAQ,SAAUJ,GAC9FA,KAC9BD,EAEMM,sBAAP,WACE,OAAOpB,GACRc,EAEMO,aAAP,SAAoB7H,GAClB,OAAO3H,OAAOF,KAAKqO,GAAsBpN,QAAQ4G,IAAS,GAC3D,kBAwBA,OAxBA8H,EAEDD,aAAA,WACE,OAAOP,EAAUO,aAAarQ,KAAKwI,OACpCsH,EAEMG,YAAP,SAAmBD,GACjB,IAAK,IAAMjP,KAAOiO,EAChB,GAAIgB,EAAMO,MAAMvB,EAAqBjO,IACnC,OAAOA,GAGZ+O,EAEMU,OAAP,SAAc1H,EAAGiH,GACf,OAAOjH,EAAE0H,OAAOT,IACjBO,EAEDE,OAAA,SAAO1H,GACL,OAAOA,GAAK9I,KAAKwI,OAASM,EAAEN,MAAQxI,KAAKgQ,QAAUlH,EAAEkH,OACtDM,EAEDG,IAAA,WACE,OAAUnI,mBAAmBtI,KAAKgQ,WAAU1H,mBAAmBtI,KAAKwI,YCzExE,WAAwBJ,GAKtB,OAJK2G,IACHA,EAAcrD,IAAcvI,QAChBC,KAAKsN,GAAQrF,UAEpBjD,EAAMsD,IAAcvI,KAAKiF,GAAO2G,ECHzC,IAAM4B,EAAsB,CAACC,MAAM,EAAMC,OAAO,EAAMC,OAAO,GA8EvDC,aAyBJ,WAAYC,cAOV,GApBFhR,sBAAmB,GACnBA,uBAAoB,GACpBA,aAAU,GACVA,yBAAsB,GACtBA,2BAAwB,GACxBA,cAAW,GACXA,eAAY,GACZA,wBAAqB,GACrBA,yBAAsB,GACtBA,8BAA2B,GAKzBA,KAAKiR,cAAgBD,EAAQC,cAEzBD,EAAQE,UACVlR,KAAKmR,YAAYH,oBAGRA,EAAQI,aACjBpR,KAAKqR,eAAeL,EAAQI,aAAcJ,EAAQhF,WAC7C,GAAIsF,MAAMC,QAAQP,EAAQI,cAAe,CAC9C,IAAMI,EAAI,GACVR,EAAQI,aAAatQ,SAAQ,SAAA2L,GAAC,OAAI+E,EAAE/E,GAAK5L,OAAO+N,OAAO,GAAI+B,MAC3DK,EAAQI,aAAeI,mBAEdR,EAAQI,eACJvQ,OAAOF,KAAKqQ,EAAQI,cAC5BtQ,SAAQ,SAAAmK,GACPA,IAAMyF,GAAQrF,SAASjD,KACzBnE,EAAKoN,eAAepG,EAAG+F,EAAQhF,KAAMnL,OAAO+N,OAAO,GAAI+B,EAAqBK,EAAQI,aAAanG,QAGrG+F,EAAQI,aAAaV,GAAQrF,SAASjD,KAAO4I,EAAQI,aAAaV,GAAQrF,SAASjD,MAAQvH,OAAO+N,OAAO,GAAI+B,GACzGK,EAAQnB,MACV7P,KAAK6P,KAAOmB,EAAQnB,KACpB7P,KAAK8D,KAAOkN,EAAQlN,OAEpBkN,EAAQnB,KAAOC,EAAUI,UAAUF,MACnChQ,KAAK6P,KAAOmB,EAAQnB,KACpBmB,EAAQI,aAAaV,GAAQrF,SAASjD,KAAK0I,OAAQ,EACnDE,EAAQI,aAAaV,GAAQrF,SAASjD,KAAKqJ,SAAU,GAEvDzR,KAAK0R,aAAa,CAACC,WAAW,KAEhC3R,KAAKoR,aAAeJ,EAAQI,aACxBJ,EAAQnB,OAKV7P,KAAK4R,cAAc5R,KAAK6P,KAAQ7P,KAAK6R,oBACrC7R,KAAK8R,kBAAkBC,MAAK,SAAA3N,GAC1BH,EAAK2N,UAAU3N,EAAK4L,KAAMzL,MAE5BpE,KAAKgS,cAAchS,KAAK6P,MAAM,SAACzL,EAAG6G,EAAGD,GACnC/G,EAAKgO,iBAAiBjH,GAAQ5G,KAEhCpE,KAAKgS,kBAAkBhS,KAAK6P,MAAQ,SAACzL,EAAG6G,EAAGD,GACzC/G,EAAKiO,kBAAkBlH,GAAQ5G,MAInCpE,KAAKmS,wBAAwB,SAACf,EAAcnG,EAAGD,GAG7C,IAFA,IAAIoH,GAAW,EACTzR,EAAOE,OAAOF,KAAKsD,EAAKmN,cACrBxM,EAAI,EAAGA,EAAIjE,EAAKF,OAAQmE,IAC/B,GAAIX,EAAKmN,aAAazQ,EAAKiE,IAAIkM,OAAS7M,EAAKmN,aAAazQ,EAAKiE,IAAIyN,QAAS,CAC1ED,GAAW,EACX,MAMJ,GAHKA,GACHzR,EAAKG,SAAQ,SAAAmK,GAAC,OAAIhH,EAAKmN,aAAanG,GAAG6F,OAAQ,KAE7C7M,EAAKmN,aAAapG,KAAU/G,EAAKmN,aAAapG,GAAM8F,OAAS7M,EAAKmN,aAAapG,GAAMqH,2BAC5EjB,EAA2B,CACpC,GAAI9E,KAAKC,UAAUtI,EAAKmN,gBAAkB9E,KAAKC,UAAU6E,GAAiB,OAC1EnN,EAAKmN,aAAeA,SACbnN,EAAKmN,aAAapG,GAAMqH,QAC/BxR,OAAOF,KAAKyQ,GAActQ,SAAQ,SAAAmK,GAC5BA,IAAMyF,GAAQrF,SAASjD,KACzBnE,EAAKoN,eAAepG,GAAG,EAAMpK,OAAO+N,OAAO,GAAI+B,EAAqBS,EAAanG,KAAK,MAG1FhH,EAAKqO,sBACLtB,EAAQuB,OAAQ,MAIjBvB,EAAQuB,YAA2B/P,IAAjBwO,EAAQhF,OAAuC,IAAjBgF,EAAQhF,MAC3DhM,KAAKgM,OAER,kBA2gCA,OA3gCAsE,EAEDa,YAAA,SAAYH,GACV,IAAM5M,EAAI4M,EAAQE,SAASlK,MAAM,KACjC,GAAiB,IAAb5C,EAAE3D,OAAc,CAClB,IAAM+R,EAAW5F,EAAKrG,gBAAgB,WAAYnC,EAAE,IAC9CqO,EAAY7F,EAAKrG,gBAAgB,YAAanC,EAAE,IAChDiO,EAAUzF,EAAKrG,gBAAgB,UAAWnC,EAAE,IAC5CgE,EAAMiK,GAAWG,EAQvB,GAPIA,EACFxB,EAAQI,aAAehJ,EACdqK,GAAaJ,GAAWA,IAAY3B,GAAQrF,SAASjD,MAC9D4I,EAAQnB,KAAO4C,EACfzB,EAAQI,aAAe,GACvBJ,EAAQI,aAAaiB,GAAWxR,OAAO+N,OAAO,CAACyD,SAAS,GAAO1B,IAE7DvI,IAAQsI,GAAQrF,SAASjD,IAAK,CAChC,IAAMsK,EAAe9F,EAAKrG,gBAAgB,IAAKnC,EAAE,IAC3CuO,EAAS/F,EAAKrG,gBAAgB,IAAKnC,EAAE,IACvCsO,GAAgBC,IAClB3S,KAAKgM,OACLgF,EAAQuB,OAAQ,EAChB7G,IAAcvI,KAAKiF,GAAKuD,IAAI,aAAaA,IAAIgH,GAAQhH,IAAI,sBAAsBxJ,cAAE,kBAAC,WAAMyQ,GAAS,UAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAjP,SACvEb,EAAIc,IAAIiP,QAAQD,EAAWF,GAAa,OAAjD,OAATI,SAASnP,SACoBb,EAAIc,IAAI2H,QAAQmF,GAAQrF,SAASjD,IAAKsK,GAAa,OAA5D,OAApBK,SAAoBpP,SACKiJ,EAAKpJ,QAAQuP,GAAqB,OAA3DC,SACNpG,EAAKlK,iBAAiBgJ,IAAeoH,GAAW,SAAA3P,GAC9CA,EAAKwI,IAAI,gBAAgBA,IAAIqH,EAAiBzO,MAAM,EAAG,KAAKqH,IAAImH,MAC/D,QAAA,UAAA,0BACJ,mBAAA,wCAIRzC,EAED2C,mBAAA,SAAmB7K,cACjB,OAAO,IAAInG,SAAQ,SAAAC,GACZoL,EAAK2E,iBAAiB7J,GAMzBlG,EAAQoL,EAAK2E,iBAAiB7J,IAL9BkF,EAAK0E,cAAc1E,EAAKuC,MAAM,SAAAzL,GAC5BkJ,EAAK2E,iBAAiB7J,GAAOhE,EAC7BlC,EAAQoL,EAAK2E,iBAAiB7J,MAC7BA,OAKRkI,EAED4C,oBAAA,SAAoB9K,cAClB,OAAIA,IAAQsI,GAAQrF,SAASjD,IAAcpI,KAAK6R,mBACzC,IAAI5P,SAAQ,SAAAC,GACZmM,EAAK6D,kBAAkB9J,GAM1BlG,EAAQmM,EAAK6D,kBAAkB9J,IAL/BiG,EAAK2D,kBAAkB3D,EAAKwB,MAAQ,SAAAzL,GAClCiK,EAAK6D,kBAAkB9J,GAAOhE,EAC9BlC,EAAQmM,EAAK6D,kBAAkB9J,MAC9BA,OAKRkI,EAED6C,oBAAA,WACEnT,KAAKiR,cAAgBnO,EAAIc,IAAIpD,OAAO,IAAIW,SAAS,UAEjDnB,KAAK4R,cAAc5R,KAAK6P,KAAQ7P,KAAKiR,gBAGvCX,EAKM8C,KAAI,WAAA,kBAAV,WAAWC,GAAW,6BAAA,OAAA,sBAAA,OACpB3H,IAAcvI,KAAKkQ,GAAa1H,IAAI3L,KAAKiS,iBAAiBoB,IAAc5Q,MACxE,OAAA,UAAA,+BACD,OAAA,YAAA,gCAHS,GAKV6N,EAKMgD,MAAK,WAAA,kBAAX,WAAYD,GAAW,6BAAA,OAAA,sBAAA,OACrBrT,KAAKoT,KAAKC,GACVrT,KAAK4R,UAAU5R,KAAK6P,KAAM,MAC1B7P,KAAK4R,cAAc5R,KAAK6P,KAAQ,aACzB7P,KAAKuT,QAAQF,UACbrT,KAAKwT,oBAAoBH,UACzBrT,KAAKyT,sBAAsBJ,GAClCrT,KAAKmT,sBAAsB,OAAA,UAAA,+BAC5B,OAAA,YAAA,gCARU,GAQV7C,EAEKwB,2BAAe,kBAArB,aAAA,QAAA,6BAAA,OAAA,sBAAA,OAAA,GACO9R,KAAK0T,cAAYC,UAAA,MAAA,OAAAA,SACG7Q,EAAIc,IAAIuH,OAAOuF,GAAQrF,SAASC,KAAMoF,GAAQrF,UAAS,OAAhE,OAARuI,SAAQD,SACa/G,EAAKpJ,QAAQoQ,GAAS,OAA/B,OAAZC,SAAYF,SACQ/G,EAAKpJ,QAAQqQ,EAAe7T,KAAK6P,MAAK,OAAhE7P,KAAK0T,oBAAY,QAAA,yBAEZ1T,KAAK0T,cAAY,QAAA,UAAA,+BACzB,OAAA,WAAA,mCAEDpD,EAGAwD,uBAAA,WACE,OAAOjT,OAAOF,KAAKX,KAAKuT,UAG1BjD,EAGAyD,gBAAA,SAAgBC,GACVhU,KAAKiU,0BACPjU,KAAKiU,4BAELjU,KAAKiU,0BAA4B,EAEnCjU,KAAKkU,yBAAyBlU,KAAKiU,2BAA6BD,EAC5DhU,KAAKoR,cACP4C,EAAShU,KAAKoR,eAEjBd,EAEDgC,oBAAA,sBACEzR,OAAOF,KAAKX,KAAKkU,0BAA0BpT,SAAQ,SAAAqF,GACjDsI,EAAKyF,yBAAyB/N,GAAIsI,EAAK2C,kBAI3Cd,EAGA6D,MAAA,WACE,OAAOnU,KAAK6P,MAAQ7P,KAAK8T,yBAAyB,IACnDxD,EAEK8D,qBAAS,kBAAf,WAAgBhM,GAAG,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACZpI,KAAKuT,QAAQnL,IAAIiM,SAAA,MAAA,OAAAA,SACDzH,EAAK7K,eAAe2J,IAAcvI,KAAKiF,GAAKuD,aAAY,OAAjE,OAAJL,SAAI+I,SACgBvR,EAAIc,IAAIuH,OAAOG,EAAMoF,GAAQrF,UAAS,OAAhErL,KAAKuT,QAAQnL,UAAI,OAAA,yBAEZpI,KAAKuT,QAAQnL,IAAI,OAAA,UAAA,+BACzB,OAAA,YAAA,mCAED2I,EAGauD,sBAAqB,WAAA,kBAAlC,WAAmClM,EAAKmM,GAAI,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAC,SACvB5H,EAAK7K,eAAe2J,IAAcvI,KAAKiF,GAAKuD,aAAY,OAAjE,OAAJL,SAAIkJ,SACW1R,EAAIc,IAAIuH,OAAOG,EAAMiJ,GAAK,OAAnC,yBACL3H,EAAKpJ,eAAiB4E,IAAI,OAAA,UAAA,0BAClC,OAAA,cAAA,gCAJiC,GAMlC2I,EAGa0D,wBAAuB,WAAA,kBAApC,WAAqCrM,EAAKmM,GAAI,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAG,SACzB9H,EAAK7K,eAAe2J,IAAcvI,KAAKiF,GAAKuD,aAAY,OAAjE,OAAJL,SAAIoJ,SACW5R,EAAIc,IAAIuH,OAAOG,EAAMiJ,GAAK,OAAnC,yBACL3H,EAAKpJ,eAAiB+Q,EAAKnM,MAAI,OAAA,UAAA,0BACvC,OAAA,cAAA,gCAJmC,GAMpC2I,EAKa4D,YAAW,WAAA,kBAAxB,WAAyBX,EAAUY,GAAiB,YAAA,6BAAA,OAAA,sBAAA,OAClB,gBADCA,IAAAA,GAAoB,GAC/CC,EAAUnE,GAAQrF,SAAQyJ,SACThS,EAAIc,IAAIuH,OAAO0J,EAAQvJ,KAAMuJ,GAAQ,OAAtDjB,SACFgB,GACF7D,EAAQgE,oBAAgBvS,OAAWA,GAAW,GAE1CwS,EAAO,GAEPC,aAAa,kBAAG,WAAOjF,EAAOkF,GAAkB,QAAA,6BAAA,OAAA,sBAAA,OAAA,IAChDlF,GAAUgF,EAAKE,IAAmBC,UAAA,MACJ,GAAhCH,EAAKE,IAAsB,IACvBA,EAAmBzU,OAAS,KAAE0U,SAAA,MACoC,OAApEzJ,IAAcvI,OAAOwI,aAAaA,IAAIuJ,GAAoBtJ,IAAI,yBAAM,OAAA,OAAAuJ,SAGxCvI,EAAK7K,eAAe2J,IAAcvI,OAAOwI,aAAaA,IAAIuJ,GAAoBvJ,YAAW,OAAlG,OAAfyJ,SAAeD,UACArS,EAAIc,IAAIiP,QAAQuC,EAAiBxB,GAAS,QAAnD,GAANyB,UACKF,UAAA,MAAA,0BAAA,QAGPE,EAAOjN,sBAAciN,EACvBrB,EAAS,IAAIjD,EAAQ,CACnBhQ,IAAK8T,EACLzD,aAAciE,EAAOjN,KAAOiN,EAC5BrJ,MAAM,KAECqJ,EAAOxF,MAAQwF,EAAOjE,cAAgBiE,EAAOpE,eACtD+C,EAAS,IAAIjD,EAAQ,CACnBhQ,IAAK8T,EACLzD,aAAciE,EAAOjE,aACrBvB,KAAMwF,EAAOxF,KACboB,cAAeoE,EAAOpE,cACtBjF,MAAM,KAET,QAAA,UAAA,0BAEJ,qBA5BkB,mCA8BnBN,IAAcvI,OAAOwI,aAAayC,MAAMjM,GAAG8S,GAAe,OAAA,UAAA,0BAC3D,OAAA,cAAA,gCAvCuB,GAuCvB3E,EAEDuB,iBAAA,WAIE,OAHK7R,KAAKiR,eACRjR,KAAKmT,sBAEAnT,KAAKiR,eACbX,EAEKgE,iCAAqB,kBAA3B,WAA4BlM,GAAG,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACxBpI,KAAKwT,oBAAoBpL,IAAIkN,SAAA,MAAA,OAAAA,SACXtV,KAAKoU,UAAUhM,GAAI,OAA5B,OAAN+C,SAAMmK,SAC0B1I,EAAKpJ,QAAQ2H,EAAS/C,GAAI,OAAhEpI,KAAKwT,oBAAoBpL,UAAI,OAAA,yBAExBpI,KAAKwT,oBAAoBpL,IAAI,OAAA,UAAA,+BACrC,OAAA,YAAA,mCAAAkI,EAEKmE,mCAAuB,kBAA7B,WAA8BrM,GAAG,MAAA,6BAAA,OAAA,sBAAA,OAAA,GAC1BpI,KAAKyT,sBAAsBrL,IAAImN,SAAA,MAAA,OAAAA,SACbvV,KAAKoU,UAAUhM,GAAI,OAA5B,OAAN+C,SAAMoK,SAC4B3I,EAAKpJ,QAAQ2H,EAASuF,GAAQrF,SAASjD,KAAI,OAAnFpI,KAAKyT,sBAAsBrL,UAAI,OAAA,yBAE1BpI,KAAKyT,sBAAsBrL,IAAI,OAAA,UAAA,+BACvC,OAAA,YAAA,mCAEDkI,EAGMkF,YAAW,WAAA,kBAAjB,WAAkBxB,GAAQ,aAAA,6BAAA,OAAA,sBAAA,OAiBrB,GAhBHhU,KAAK8T,yBAAyBhT,mBAAO,kBAAC,WAAMsH,GAAG,QAAA,6BAAA,OAAA,sBAAA,OAAA,GACzCA,IAAQsI,GAAQrF,SAASjD,KAAGqN,UAAA,MAAA,IAG1BC,EAAK7F,MAAI4F,SAAA,MAAA,OAAAA,SACkBC,EAAKzC,mBAAmB7K,GAAI,OAAzDuN,SAAoBF,UAAA,MAAA,OAAA,OAAAA,SAESC,EAAKjB,wBAAwBrM,GAAI,OAA9DuN,SAAoB,QAEtBjK,IAAcvI,KAAKiF,GAAKuD,aAAaA,IAAIgK,GAAsBhK,YAAYyC,MAAMtE,MAAK,SAAC8L,EAAM7U,GAAS2U,EAAKG,gBAAgB7B,EAAU4B,EAAMF,EAAK7F,MAAQzH,GAAK,EAAOrH,EAAKqH,MAAQ,QAAA,GAE9KsN,EAAK7F,MAAI4F,UAAA,MAAA,OAAAA,UAEqBC,EAAKpB,sBAAsBlM,GAAI,QAA1D8M,SACNY,IAAYnK,aAAaA,IAAIuJ,GAAoBvJ,YAAYyC,MAAMtE,MAAK,SAAC8L,EAAM7U,GAAS2U,EAAKG,gBAAgB7B,EAAU4B,EAAMxN,GAAK,EAAMrH,EAAK2P,GAAQrF,SAASjD,QAAQ,QAAA,UAAA,0BAEzK,mBAAA,qCACGpI,KAAK6P,MAAIkG,SAAA,MAAA,OAAAA,SAEgB/V,KAAK8R,kBAAiB,OAA3C4B,SACNoC,IAAYnK,aAAaA,IAAI+H,GAAc/H,YAAYyC,MAAMtE,MAAK,SAAC8L,EAAM7U,GAAS2U,EAAKG,gBAAgB7B,EAAU4B,EAAMF,EAAK7F,MAAM,EAAM9O,EAAK2P,GAAQrF,SAASjD,QAAQ,OAAA,UAAA,+BAEzK,OAAA,YAAA,gCAvBgB,GAuBhBkI,EAEKuF,2BAAe,kBAArB,WAAsB7B,EAAU4B,EAAMnD,EAAWuD,EAAcjV,EAAKiK,GAAI,UAAA,6BAAA,OAAA,sBAAA,OAAA,IAClEhL,KAAKiW,SAASlV,IAAS6U,GAAIM,SAAA,MAAA,0BAAA,OAAA,IAGhBlW,KAAK6P,MAAIqG,SAAA,MAAA,OAAAA,SAAUlW,KAAKkT,oBAAoBlI,GAAK,OAAAkL,YAAAA,UAAA,MAAA,OAAA,OAAAA,UAAWlW,KAAKoU,UAAU3B,GAAU,QAAAyD,YAAA,QAAxF,OAAN/K,OAAM+K,UACYpT,EAAIc,IAAIiP,QAAQ+C,EAAMzK,GAAO,QAAtC,oBAATgL,WAC2BD,UAAA,MAAA,0BAAA,QAG3BE,EAAO,CAACJ,aAAAA,EAAcvD,UAAAA,EAAWzH,KAAAA,GACvChL,KAAKiW,SAASlV,GAAOoV,EACrBnC,EAASmC,EAAWC,GAAM,QAAA,UAAA,+BAC3B,OAAA,sBAAA,mCAED9F,EAGM+F,aAAY,WAAA,kBAAlB,WAAmBrC,GAAQ,aAAA,6BAAA,OAAA,sBAAA,OACnBsC,aAAgB,kBAAG,WAAOC,EAAKH,GAAI,6BAAA,OAAA,sBAAA,OAClCI,EAAKC,yBAIUD,EAAKC,OAAOC,KAAoBF,EAAKC,OAAOC,KAAOF,EAAKC,OAAOC,KAAK5K,eAC9EyK,EAAIG,OACVF,EAAKC,OAASF,EACdvC,EAASuC,EAAKH,KANhBI,EAAKC,OAASF,EACdvC,EAASuC,EAAKH,IAOf,OAAA,UAAA,0BACF,qBAXqB,mCAYtBpW,KAAK2W,KAAK,aAAa,SAAAJ,GAAG,OAAID,EAAiBC,EAAK,CAACP,cAAc,EAAMhL,KAAM0F,GAAQrF,SAASjD,SAChGpI,KAAKmS,QAAQ,aAAa,SAACoE,EAAKtL,EAAGD,GAAI,OAAKsL,EAAiBC,EAAK,CAACP,cAAc,EAAOhL,KAAAA,OAAQ,OAAA,UAAA,+BACjG,OAAA,YAAA,gCAfiB,GAiBlBsF,EAIMsG,sBAAqB,WAAA,kBAA3B,WAA4BF,GAAa,6BAAA,OAAA,sBAAA,OACC,OAAxCA,EAAOA,IAAQ,IAAI5O,MAAOgE,gCACnB9L,KAAK4L,uBAAwB8K,IAAK,OAAA,UAAA,+BAC1C,OAAA,YAAA,gCAH0B,GAK3BpG,EAGMuG,sBAAqB,WAAA,kBAA3B,WAA4B7C,GAAQ,WAAA,6BAAA,OAAA,sBAAA,OAClChU,KAAK2W,yBAAyB,SAAAD,GAC5BI,EAAKC,mBAAqBL,EACtB1C,GACFA,EAAS8C,EAAKC,uBAEf,OAAA,UAAA,+BACJ,OAAA,YAAA,gCAP0B,GAS3BzG,EAGM0G,yBAAwB,WAAA,kBAA9B,WAA+BhD,GAAQ,WAAA,6BAAA,OAAA,sBAAA,OACrChU,KAAKmS,4BAA4B,SAAAuE,GAC/BO,EAAKC,sBAAwBR,EACzB1C,GACFA,EAASiD,EAAKC,0BAEf,OAAA,UAAA,+BACJ,OAAA,YAAA,gCAP6B,GAO7B5G,EAEK6G,6BAAiB,kBAAvB,WAAwB/O,GAAG,6BAAA,OAAA,sBAAA,OACzBpI,KAAKqR,eAAejJ,GAAK,EAAM,CAACwI,MAAM,EAAOC,OAAO,IAAQ,OAAA,UAAA,+BAC7D,OAAA,YAAA,mCAEDP,EAIMe,eAAc,WAAA,kBAApB,WAAqBjJ,EAAa4D,EAAaoL,EAAmBzF,GAAmB,eAAA,6BAAA,OAAA,sBAAA,OAAxC,YAAX3F,IAAAA,GAAO,IACnChM,KAAK6P,MAAIwH,SAAA,MAAA,0BAAA,OAKZ,QAFmB7U,IAAhB4U,IACFA,EAAczG,IAEZ3Q,KAAKuT,QAAQnL,IAAQkE,KAAKC,UAAUvM,KAAKuT,QAAQnL,MAAUkE,KAAKC,UAAU6K,IAAYC,SAAA,MAAA,0BAAA,OAItE,OADpBrX,KAAKuT,QAAQnL,GAAO,KACpBpI,KAAKoU,UAAUhM,GAAKiP,UACarX,KAAKsU,sBAAsBlM,GAAI,QAAxC,GAAlB8M,UACFlJ,GAAIqL,UAAA,MAAA,OAAAA,UAEiBvU,EAAIc,IAAIuH,OAAOuF,GAAQrF,SAASC,KAAMoF,GAAQrF,UAAS,QACV,OAD9DuI,SAAQyD,KACd3L,IAAcvI,OAAOwI,aAAaA,IAAIuJ,GAAoBvJ,WAAU0L,UAAWvU,EAAIc,IAAI2H,QAAQ,CAACnD,IAAAA,GAAMwL,GAAS,QAAAyD,YAAAA,KAA1CzL,oBAAG,QAEtE5L,KAAK6P,OACP7P,KAAKoR,aAAahJ,GAAOgP,EACrBpL,IACFhM,KAAK4R,cAAc5R,KAAK6P,KAAQ7P,KAAK6R,oBACrC7R,KAAK8R,kBAAkBC,MAAK,SAAA3N,GAC1BkT,EAAK1F,UAAU0F,EAAKzH,KAAMzL,MAE5BpE,KAAKgS,cAAchS,KAAK6P,MAAM,SAACzL,EAAG6G,EAAGD,GACnCsM,EAAKrF,iBAAiBjH,GAAQ5G,KAEhCpE,KAAKgS,kBAAkBhS,KAAK6P,MAAQ,SAACzL,EAAG6G,EAAGD,GACzCsM,EAAKpF,kBAAkBlH,GAAQ5G,KAEjCpE,KAAKgM,SAGL2F,IACF9Q,OAAOwC,OAAOrD,KAAKuX,qBAAqBzW,SAAQ,SAAAT,GAC9CA,EAAIS,SAAQ,SAAA0Q,GACLA,EAAExG,MAAQwG,EAAExG,OAAS5C,GACxBkP,EAAKE,uBAAuBpP,EAAKoJ,EAAEzQ,IAAKyQ,EAAEwC,gBAIhDnT,OAAOwC,OAAOrD,KAAKyX,oBAAoB3W,SAAQ,SAAAT,GAC7CA,EAAIS,SAAQ,SAAA0Q,GACNA,EAAExG,MAAQwG,EAAExG,OAAS5C,IACrBgP,EAAYvG,MACdyG,EAAKI,sBAAsBtP,EAAKoJ,EAAEzQ,IAAKyQ,EAAEwC,UAEzCxC,EAAEmG,OAASnG,EAAEmG,MAAMlV,cAI1B,QAAA,UAAA,+BACF,OAAA,kBAAA,gCArDmB,GAuDpB6N,EAIMsH,KAAI,WAAA,kBAAV,WAAWrB,GAAG,gBAAA,6BAAA,OAAA,sBAAA,OAAA,oBACDA,GAAgBsB,SAAA,MACR,GACE,KADnBtB,EAAMA,EAAIuB,QACFrX,QAAYoX,SAAA,MAAA,0BAAA,OAGpBtB,EAAM,CACJG,MAAO,IAAI5O,MAAQgE,cACnBhG,KAAMyQ,GACNsB,UAAA,MAAA,OAAA,oBACctB,GAAgBsB,UAAA,MAChCtB,EAAIG,KAAOH,EAAIG,OAAS,IAAI5O,MAAQgE,cAAc+L,UAAA,MAAA,QAAA,MAE5C,IAAI7T,iDAAgD,QAAA,IAGxDhE,KAAK6P,MAAIgI,UAAA,MAAA,OAAAA,UACa/U,EAAIc,IAAI2H,QAAQe,KAAKC,UAAUgK,GAAMvW,KAAK6R,oBAAmB,QAAtE,OAATe,SAASiF,UACY7X,KAAK8R,kBAAiB,QAA3C4B,SACNoC,IAAYnK,aAAaA,IAAI+H,GAAc/H,YAAYA,OAAO4K,EAAIG,MAAQ9K,IAAIgH,GAC9EkD,IAAYnK,aAAaA,IAAI+H,GAAc/H,iBAAiBC,IAAIgH,GAAWiF,UAAA,MAAA,QAErElX,EAAOX,KAAK8T,yBACTlP,EAAI,EAAC,QAAA,KAACA,EAAIjE,EAAKF,SAAMoX,UAAA,MAC+B,OAD/BA,KACJ/U,EAAIc,IAAGiU,KAASvL,KAAKC,UAAUgK,GAAIsB,UAAS7X,KAAKoU,UAAUzT,EAAKiE,IAAG,QAAA,OAAAiT,YAAAA,eAA3DtM,6BAAO,QAAxB,OAATqH,SAASiF,UACkB7X,KAAKsU,sBAAsB3T,EAAKiE,IAAG,QAA9DsQ,SACNY,IAAYnK,aAAaA,IAAIuJ,GAAoBvJ,YAAYA,OAAO4K,EAAIG,MAAQ9K,IAAIgH,GACpFkD,IAAYnK,aAAaA,IAAIuJ,GAAoBvJ,iBAAiBC,IAAIgH,GAAW,QAJpDhO,IAAGiT,UAAA,MAAA,QAAA,UAAA,+BAOrC,OAAA,YAAA,gCA9BS,GAgCVvH,EAGMtE,KAAI,WAAA,kBAAV,aAAA,cAAA,6BAAA,OAAA,sBAAA,OAAA,IACMhM,KAAK6P,MAAIkI,UAAA,MAAA,OAAAA,SACgB/X,KAAK8R,kBAAiB,OAEJ,OAFvC4B,SACNoC,IAAYnK,aAAaA,IAAI+H,GAAc/H,IAAI,QAAQA,IAAI,KAAKC,IAAI,MACpE5L,KAAK4L,mBAAoB5L,KAAKoR,cAAe2G,SACtBjV,EAAIc,IAAIuH,OAAOuF,GAAQrF,SAASC,KAAMoF,GAAQrF,UAAS,OACzB,OAD/CuI,SAAQmE,KACdjC,IAAYnK,aAAaA,IAAI+H,GAAc/H,WAAUoM,UAAWjV,EAAIc,IAAI2H,QAAQ,CAC9EsE,KAAM7P,KAAK6P,KACXoB,cAAejR,KAAK6R,mBACpBT,aAAcpR,KAAKoR,cAClBwC,GAAS,QAAAmE,YAAAA,KAJ0CnM,oBAKtD5L,KAAKsS,sBAAsByF,UAAA,MAAA,QAErBpX,EAAOX,KAAK8T,yBACTlP,EAAI,EAAC,QAAA,KAACA,EAAIjE,EAAKF,SAAMsX,UAAA,MAAA,OAAAA,UACK/X,KAAKsU,sBAAsB3T,EAAKiE,IAAG,QAA9DsQ,SACNY,IAAYnK,aAAaA,IAAIuJ,GAAoBvJ,IAAI,QAAQA,IAAI,KAAKC,IAAI,MAAM,QAFnDhH,IAAGmT,UAAA,MAAA,QAAA,UAAA,+BAKrC,OAAA,WAAA,gCAnBS,GAqBVzH,EAKM1E,IAAG,WAAA,kBAAT,WAAU7K,EAAKiP,GAAK,6BAAA,OAAA,sBAAA,OAAA,0BACVhQ,KAAK6P,KAAO7P,KAAKgY,SAAWhY,KAAK4R,WAAWxQ,KAAKpB,KAAMe,EAAKiP,IAAM,OAAA,UAAA,+BAC3E,OAAA,cAAA,gCAFQ,GAERM,EAEK0H,oBAAQ,kBAAd,WAAejX,EAAKiP,GAAK,QAAA,6BAAA,OAAA,sBAAA,OAAA,YACnBjP,GAAckX,SAAA,MAAA,MAAU,IAAIjU,6EAA4E,OAAA,OAAAiU,SACpFnV,EAAIc,IAAI2H,QAAQe,KAAKC,UAAUyD,GAAQhQ,KAAK6R,oBAAmB,OAAxE,OAATe,SAASqF,SACYjY,KAAK8R,kBAAiB,OAA3C4B,SACNoC,IAAYnK,aAAaA,IAAI+H,GAAc/H,IAAI5K,GAAK6K,IAAIgH,GAAW,OAAA,UAAA,+BACpE,OAAA,cAAA,mCAAAtC,EAEKsB,qBAAS,kBAAf,WAAgB7Q,EAAKiP,GAAK,YAAA,6BAAA,OAAA,sBAAA,OAAA,YACpBjP,GAAcmX,SAAA,MAAA,MAAU,IAAIlU,6EAA4E,OACtGrD,EAAOX,KAAK8T,yBACTlP,EAAI,EAAC,OAAA,KAACA,EAAIjE,EAAKF,SAAMyX,UAAA,MACiC,OADjCA,KACJpV,EAAIc,IAAGsU,KAAS5L,KAAKC,UAAUyD,GAAMkI,SAASlY,KAAKoU,UAAUzT,EAAKiE,IAAG,OAAA,OAAAsT,YAAAA,eAA7D3M,6BAAO,QAAxB,OAATqH,SAASsF,UACkBlY,KAAKsU,sBAAsB3T,EAAKiE,IAAG,QAA9DsQ,SACNY,IAAYnK,aAAaA,IAAIuJ,GAAoBvJ,IAAI5K,GAAK6K,IAAIgH,GAAW,QAH5ChO,IAAGsT,SAAA,MAAA,QAAA,UAAA,+BAKnC,OAAA,cAAA,mCAED5H,EAMMnO,GAAE,WAAA,kBAAR,WAASpB,EAAaiT,EAAoBhJ,GAAa,6BAAA,OAAA,sBAAA,OAAA,0BAC7ChL,KAAK6P,KAAO7P,KAAKmY,QAAUnY,KAAKoY,UAAUhX,KAAKpB,KAAMe,EAAKiT,EAAUhJ,IAAK,OAAA,UAAA,+BAClF,OAAA,gBAAA,gCAFO,GAEPsF,EAEK8H,oBAAQ,kBAAd,WAAerX,EAAaiT,EAAoBhJ,GAAa,6BAAA,OAAA,sBAAA,OACtDA,UAAQA,GAAiBA,IAAS0F,GAAQrF,SAASjD,KACtDpI,KAAK2W,KAAK5V,GAAK,SAACqB,GAAQ,OAAK4R,EAAS5R,EAAKsO,GAAQrF,SAASjD,UAEzD4C,UAASA,GAAiBA,IAAS0F,GAAQrF,SAASjD,MACvDpI,KAAKmS,QAAQpR,GAAK,SAACqB,EAAU6I,EAAW7C,GAAW,OAAK4L,EAAS5R,EAAKgG,MACvE,OAAA,UAAA,+BACF,OAAA,gBAAA,mCAAAkI,EAEK6H,mBAAO,kBAAb,WAAcpX,EAAaiT,EAAoBhJ,GAAa,6BAAA,OAAA,sBAAA,OACrDA,UAAQA,GAAiBA,IAAS0F,GAAQrF,SAASjD,KACtDpI,KAAKqY,UAAUtX,GAAK,SAAAqB,GAAG,OAAI4R,EAAS5R,EAAKsO,GAAQrF,SAASjD,UAEvD4C,UAASA,GAAiBA,IAAS0F,GAAQrF,SAASjD,MACvDpI,KAAKsY,aAAavX,GAAK,SAACqB,EAAK6I,EAAG7C,GAAG,OAAK4L,EAAS5R,EAAKgG,MACvD,OAAA,UAAA,+BACF,OAAA,gBAAA,mCAAAkI,EAEKqG,gBAAI,kBAAV,WAAW5V,EAAaiT,GAAkB,6BAAA,OAAA,sBAAA,OAAA,0BAChChU,KAAK6P,KAAO7P,KAAKqY,UAAYrY,KAAKuY,YAAYnX,KAAKpB,KAAMe,EAAKiT,IAAS,OAAA,UAAA,+BAChF,OAAA,cAAA,mCAAA1D,EAEKiI,sBAAU,kBAAhB,WAAiBxX,EAAaiT,GAAkB,iBAAA,6BAAA,OAAA,sBAAA,OAAA,GACtB,mBAAbA,GAAuBwE,SAAA,MAAA,MAC1B,IAAIxU,sDAAsDgQ,GAAW,OAEvErT,EAAOX,KAAK8T,yBAAwB2E,uBACjC7T,GAAC,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAA8T,SACyBC,EAAKrE,sBAAsB3T,EAAKiE,IAAG,OAMjE,OANGsQ,SACNxJ,IAAcvI,OAAOwI,aAAaA,IAAIuJ,GAAoBvJ,IAAI5K,GAAKoB,cAAE,kBAAC,WAAOyT,GAAS,MAAA,6BAAA,OAAA,sBAAA,OACxC,OADwCgD,KAC5D9V,EAAIc,IAAGgV,KAAShD,EAAIgD,SAASD,EAAKvE,UAAUzT,EAAKiE,IAAG,OAAA,OAAAgU,YAAAA,cAA5C/F,6BAAO,QAAjCsD,WAEJnC,WAAgBmC,EAAU0C,EAAoB1C,EAAU0C,EAAI1C,EAAWpV,GACxE,OAAA,UAAA,0BACF,mBAAA,+DAAE,OAAA,UAAA,yBAPI6D,EAAI,EAAC,OAAA,KAACA,EAAIjE,EAAKF,SAAM+X,UAAA,MAAA,yBAArB5T,WAAC,OAAA,mBAAA4T,UAAA,MAAA,4BAAA,QAAqB5T,IAAG4T,SAAA,MAAA,QAAA,UAAA,+BAUnC,OAAA,cAAA,mCAAAlI,EAEK+H,qBAAS,kBAAf,WAAgBtX,EAAKiT,GAAQ,QAAA,6BAAA,OAAA,sBAAA,OAAA,GACH,mBAAbA,GAAuB8E,SAAA,MAAA,MAC1B,IAAI9U,sDAAsDgQ,GAAW,OAAA,OAAA8E,SAElD9Y,KAAK8R,kBAAiB,OAA/B,OAAZ4B,SAAYoF,SACK9Y,KAAK6R,mBAAkB,OAAxC+B,SACNlI,IAAcvI,OAAOwI,aAAaA,IAAI+H,GAAc/H,IAAI5K,GAAKoB,cAAE,kBAAC,WAAMyT,GAAI,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAmD,SAChDjW,EAAIc,IAAIiP,QAAQ+C,EAAMhC,GAAS,QAAjDuC,WAEJnC,WAAgBmC,EAAU0C,EAAoB1C,EAAU0C,EAAI1C,EAAWpV,EAAK2P,GAAQrF,SAASjD,KAC9F,OAAA,UAAA,0BACF,mBAAA,oCAAE,OAAA,UAAA,+BACJ,OAAA,cAAA,mCAAAkI,EAEK6B,mBAAO,kBAAb,WAAcpR,EAAaiT,EAAoBhJ,GAAY,6BAAA,OAAA,sBAAA,OAAA,0BACjDhL,KAAK6P,KAAO7P,KAAKsY,aAAetY,KAAKgS,eAAe5Q,KAAKpB,KAAMe,EAAKiT,EAAUhJ,IAAK,OAAA,UAAA,+BAC5F,OAAA,gBAAA,mCAAAsF,EAEKkH,kCAAsB,kBAA5B,WAA6BzW,EAAaiT,EAAoB5L,GAAW,aAAA,6BAAA,OAAA,sBAAA,OAAA,GAClEpI,KAAKgZ,mBAAmB5Q,IAAI6Q,SAAA,MAAA,0BAAA,OAAA,OAAAA,SACEjZ,KAAKyU,wBAAwBrM,GAAI,OAA9DuN,SACNjK,IAAcvI,KAAKiF,GAAKuD,aAAaA,IAAIgK,GAAsBhK,IAAI5K,GAAKoB,cAAE,kBAAC,WAAOyT,GAAS,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACpFsD,EAAKF,mBAAmB5Q,IAAI+Q,SAAA,MAAA,0BAAA,OACW,OADXA,KACTrW,EAAIc,IAAGuV,KAASvD,EAAIuD,SAASD,EAAK9E,UAAUhM,GAAI,OAAA,OAAA+Q,YAAAA,cAAxCtG,6BAAO,QAAjCsD,WAEJnC,WAAgBmC,EAAU0C,EAAoB1C,EAAU0C,EAAI1C,EAAWpV,EAAKqH,GAC7E,QAAA,UAAA,0BACF,mBAAA,oCAAE,OAAA,UAAA,+BACJ,OAAA,gBAAA,mCAAAkI,EAEK0B,yBAAa,kBAAnB,WAAoBjR,EAAaiT,EAAoBhJ,GAAY,WAAA,6BAAA,OAAA,sBAAA,OAAA,GACvC,mBAAbgJ,GAAuBoF,SAAA,MAAA,MAC1B,IAAIpV,yDAAyDgQ,GAAW,OAE3EnT,OAAOK,UAAUmY,eAAejY,KAAKpB,KAAKuX,oBAAqBxW,KAClEf,KAAKuX,oBAAoBxW,GAAO,IAElCf,KAAKuX,oBAAoBxW,GAAKwM,KAAK,CAACxM,IAAAA,EAAKiT,SAAAA,EAAUhJ,KAAAA,IAC9BhL,KAAK8T,yBACbhT,mBAAO,kBAAC,WAAMsH,GAAG,6BAAA,OAAA,sBAAA,OAAA,IACxB4C,GAAQ5C,IAAQ4C,GAAIsO,SAAA,MAAA,0BAAA,OACxBC,EAAK/B,uBAAuBpP,EAAKrH,EAAKiT,GAAU,OAAA,UAAA,0BACjD,mBAAA,oCAAE,OAAA,UAAA,+BACJ,OAAA,gBAAA,mCAAA1D,EAED0I,mBAAA,SAAmB5Q,GACjB,OAAQpI,KAAK6P,MAAS7P,KAAKoR,cAAgBpR,KAAKoR,aAAahJ,IAAQpI,KAAKoR,aAAahJ,GAAKyI,OAC7FP,EAEKoH,iCAAqB,kBAA3B,WAA4BtP,EAAarH,EAAaiT,EAAoBwF,GAAiB,aAAA,6BAAA,OAAA,sBAAA,OAAA,GACpFxZ,KAAKgZ,mBAAmB5Q,IAAIqR,SAAA,MAAA,0BAAA,OAAA,OAAAA,SACHzZ,KAAKiT,mBAAmB7K,GAAI,OAApDsR,SACNhO,IAAcvI,KAAKiF,GAAKuD,aAAaA,IAAI+N,GAAiB/N,IAAI5K,GAAKoB,cAAE,kBAAC,WAAOyT,EAAWtT,EAASqX,EAASpY,GAAQ,MAAA,6BAAA,OAAA,sBAAA,OACnE,GAAzCiY,IAAgBA,EAAa7B,MAAQpW,GACpCqY,EAAKZ,mBAAmB5Q,IAAIyR,SAAA,MAAA,0BAAA,OACW,OADXA,KACT/W,EAAIc,IAAGiW,KAASjE,EAAIiE,SAASD,EAAK1G,oBAAoB9K,GAAI,OAAA,OAAAyR,YAAAA,eAAlDhH,6BAAO,SAAjCsD,WAEJnC,WAAgBmC,EAAU0C,EAAoB1C,EAAU0C,EAAI1C,EAAWpV,EAAKqH,GAC7E,QAAA,UAAA,0BACF,yBAAA,oCAAE,OAAA,UAAA,+BACJ,OAAA,kBAAA,mCAAAkI,EAEKgI,wBAAY,kBAAlB,WAAmBvX,EAAKiT,EAAUhJ,GAAI,aAAA,6BAAA,OAAA,sBAAA,OAAA,GACZ,mBAAbgJ,GAAuB8F,SAAA,MAAA,MAC1B,IAAI9V,yDAAyDgQ,GAAW,OAE3EnT,OAAOK,UAAUmY,eAAejY,KAAKpB,KAAKyX,mBAAoB1W,KACjEf,KAAKyX,mBAAmB1W,GAAO,IAGjCf,KAAKyX,mBAAmB1W,GAAKwM,KADvBiM,EAAe,CAACzY,IAAAA,EAAKiT,SAAAA,EAAUhJ,KAAAA,IAGrChL,KAAK+T,iBAAgB,SAAA3C,GACnBvQ,OAAOF,KAAKyQ,GAActQ,mBAAO,kBAAC,WAAMsH,GAAG,6BAAA,OAAA,sBAAA,OAAA,IACrC4C,GAAQ5C,IAAQ4C,GAAI+O,SAAA,MAAA,0BAAA,OAAA,GAClB3I,EAAahJ,IAAQgJ,EAAahJ,GAAKyI,OAAKkJ,SAAA,MAAA,0BAAA,OAClDC,EAAKtC,sBAAsBtP,EAAKrH,EAAKiT,EAAUwF,GAAc,OAAA,UAAA,0BAC9D,mBAAA,uCACA,OAAA,UAAA,+BACJ,OAAA,gBAAA,mCAEDlJ,EAGA2J,UAAA,SAAUC,EAAUC,uBAAAA,IAAAA,EAAU,GAE5BA,GAAoB,IACpBna,KAAK4L,cAFLsO,WAAkBA,GAAkCA,IAEtB,IAAIpS,MAAOgE,cAAgB,IAAIhE,KAAK,GAAGgE,eACrE1L,aAAaJ,KAAKoa,kBAClBpa,KAAKoa,iBAAmBla,YAAW,WAAA,OAAMma,EAAKzO,cAAc,KAAQuO,IAGtE7J,EAGAgK,UAAA,SAAUtG,EAAUmG,uBAAAA,IAAAA,EAAU,GAC5BA,GAAoB,IACpBna,KAAKmS,kBAAkB,SAACoI,EAAQxZ,EAAKqH,GACnC,GAAI4L,EAAU,CACZ,IAAMkG,EAAWK,GAAU,IAAIzS,KAAS,IAAIA,KAAKyS,IAAWJ,EAC5DnG,EAASkG,EAAU9R,GACnBoS,EAAKC,kBAAoBD,EAAKC,mBAAqB,GACnDra,aAAaoa,EAAKC,kBAAkBrS,IAChC8R,IACFM,EAAKC,kBAAkBrS,GAAOlI,YAAW,WAAA,OAAM8T,GAAS,EAAO5L,KAAM+R,SAM7EpJ,EAIO2J,cAAP,SAAqB1J,GAEnB,YAFmBA,IAAAA,EAAU,MAC7BA,EAAUnQ,OAAO+N,OAAO,CAAC+L,MAAO,QAAS3J,IAC5B4J,eACX,MAAM,IAAI5W,MAAM,sDAGlB,IAAI6W,EAASC,EADblO,EAAK7G,YAEL,IAAMgV,EAAMnO,EAAK1G,cAAc,MAAO,wBAAyBhB,SAAS8V,MACxED,EAAIpS,aAAa,KAAM,yBACvBoS,EAAI3U,qcAAuc4K,EAAQ2J,MACndI,EAAIE,iBAAiB,SAAS,WAC5BF,EAAIpS,aAAa,QAAS,iBACrBkS,EAKHC,EAAInS,aAAa,QAAS,KAJ1BkS,EAAU,IAAI9J,EAAQC,EAAQ4J,gBAC9BE,EAAMD,EAAQK,aACdhW,SAAS8V,KAAKpS,YAAYkS,QAOhCxK,EAOA6K,cAAA,SAAcC,GACZ,gBADYA,IAAAA,EAAU,oBAClBpb,KAAK6P,KACGuL,gBAAqBpb,KAAK6P,iBAAgBa,GAAQrF,SAASjD,IAE7DgT,eAAoBpb,KAAK8T,yBAAyB,IAG9DxD,EAGMoB,aAAY,WAAA,kBAAlB,WAAmBhD,2FAEuB,YAFvBA,IAAAA,EAAY,IACxBsF,GAD0BqH,EACM3M,GAAhCsF,SAAmBrC,IAAAA,UACxByJ,GADeA,IAAAA,UACM,mBAChBpb,KAAK6P,MAAIyL,SAAA,MAAA,MAAU,IAAItX,MAAM,2CAA0C,OACtEuX,EAAmB,GACnBC,EAAwB,GAC9Bxb,KAAKmC,GAAG,aAAa,SAACsZ,EAAYzQ,GAE3ByQ,GAA0B,iBAAVA,GACrB5a,OAAOF,KAAK8a,GAAO3a,SAAQ,SAAA6R,GACzB,IAAM+I,EAAOD,EAAM9I,GACnB,GAAa,OAAT+I,EAIF,OAHAF,EAAsB7I,IAAW6I,EAAsB7I,GAAQlQ,aACxD+Y,EAAsB7I,QAC7BqB,GAAYA,EAAS,CAAC7N,GAAIwM,EAAQhI,IAAK,QAGzC,IAAmC,IAA/B4Q,EAAU3Z,QAAQ+Q,GAAtB,CACA,IAAMgJ,EAAW,GACjBJ,EAAUhO,KAAKoF,GACf,IAAMhI,EAAMoG,EAAQ6K,eAAe,CAACR,QAAAA,EAAS/I,QAASrH,EAAMyH,UAAWoJ,EAAKhM,KAAM6C,aAAcgJ,EAAKhJ,aAAcC,OAAAA,IACnHqB,GAAYA,EAAS,CAACrJ,IAAAA,EAAKxE,GAAIwM,IAC3BhB,GACFjG,IAAcvI,KAAKuY,EAAK5I,UAAU1K,KAAKuD,IAAI,gBAAgByC,MAAMjM,cAAE,kBAAC,WAAO2Z,EAAQC,EAAWjT,EAAGvH,GAAC,MAAA,6BAAA,OAAA,sBAAA,OAAA,GAC3Fua,GAA4B,iBAAXA,KAAuBA,EAAOrb,OAAS,KAAEub,SAAA,MAAA,0BAAA,OAE/B,GADhCR,EAAsB7I,GAAUpR,EAC1B6C,EAAIkI,KAAKC,UAAUuP,IACI,IAAzBH,EAAS/Z,QAAQwC,IAAS4X,UAAA,MACX,OAAjBL,EAASpO,KAAKnJ,GAAG4X,SACClZ,EAAIc,IAAIiP,QAAQiJ,EAAQJ,EAAKhJ,cAAa,OAC5DmJ,EAAKxK,2BAAoB7O,OAAWA,GAAW,GAAM,QAAA,UAAA,0BAExD,yBAAA,2CAGJ,OAAA,UAAA,+BACJ,OAAA,YAAA,gCApCiB,GAoCjB8N,EAEK2L,0BAAc,kBAApB,WAAqBb,GAAO,kBAAA,6BAAA,OAAA,sBAAA,OAAqB,gBAA5BA,IAAAA,EAAU,oBAAkBc,SACvBpZ,EAAIc,IAAI2Q,OAAM,OACW,OAD3CzB,SACAqJ,EAAkB7P,KAAKC,UAAUuG,GAAUoJ,SACtBpZ,EAAIc,IAAIuH,OAAO2H,EAAUxH,KAAMwH,GAAU,OAAlD,OAAZJ,SAAYwJ,UACepZ,EAAIc,IAAI2H,QAAQ4Q,EAAiBzJ,GAAa,QAAvD,OAAlB0J,SAAkBF,UACEpZ,EAAIc,IAAIuH,OAAOuF,GAAQrF,SAASC,KAAMoF,GAAQrF,UAAS,QAAhE,OAAXgR,SAAWH,UACqBpZ,EAAIc,IAAI2H,QAAQ4Q,EAAiBE,GAAY,QAAtD,OAAvBC,SAAuBJ,UACVtP,EAAKpJ,QAAQ4Y,GAAmB,QAGnD,OAFAzJ,GADIA,UACYpO,MAAM,EAAG,IAEzB2X,UACMtP,EAAKlK,iBAAiBgJ,IAAeoH,GAAW,SAAA3P,GACpD,OAAOA,EAAKwI,IAAI,gBAAgBC,IAAI,CAAC9C,EAAG,IAAIiJ,UAC5C,QAI0F,OAF5F/R,KAAKub,UAAU5I,GAAU,CAACG,UAAAA,EAAWJ,aAAAA,GACrC1S,KAAK4L,IAAI,YAAa5L,KAAKub,WAC3BzF,IAAYnK,IAAI,aAAaA,IAAIgH,GAAQ/G,IAAI,CAACwQ,mBAAAA,EAAoBE,wBAAAA,sBAE3DvL,EAAQ6K,eAAe,CAACR,QAAAA,EAAS3I,UAAWzS,KAAK6P,KAAMwC,QAAS3B,GAAQrF,SAASjD,IAAKsK,aAAAA,EAAcC,OAAAA,KAAQ,QAAA,UAAA,+BACpH,OAAA,YAAA,mCAEDrC,EAGA4K,WAAA,sBACEtO,EAAK7G,YACL,IAAIwW,GAAY,EAEVC,EAAU5P,EAAK1G,cAAc,MAAO,iBACpCuW,EAAS7P,EAAK1G,cAAc,MAAO,mBAAoBsW,GACvDE,EAAW9P,EAAK1G,cAAc,OAAQ,qBAAsBuW,GAClEC,EAASC,UAAY,IACrBD,EAASzB,iBAAiB,SAAS,SAAA1Z,GACjCA,EAAEqb,kBACFJ,EAAQ7T,aAAa,QAAS,2BAC9B4T,GAAY,KAEd,IAAMM,EAAajQ,EAAK1G,cAAc,MAAO,wBAAyBuW,GAChEK,EAAkBlQ,EAAK1G,cAAc,OAAQ,wBAAyB2W,GAC5EC,EAAgB1W,UAAY,WAC5B,IAAM2W,EAASnQ,EAAK1G,cAAc,YAAQ1D,EAAWqa,GAC/CG,EAAQpQ,EAAK1G,cAAc,OAAQ,kBAAmBuW,GAC5DO,EAAM5W,UAAY,SAClB4W,EAAM/B,iBAAiB,SAAS,WAC9BuB,EAAQ7T,aAAa,QAAS,iBAC9B,IAAMsU,EAAc/X,SAASc,eAAe,yBACxCiX,GACFA,EAAYtU,aAAa,QAAS,OAGtC8T,EAAOxB,iBAAiB,SAAS,WAC3BsB,IACFC,EAAQ7T,aAAa,QAAS,iBAC9B4T,GAAY,MAIhB,IAAMtG,EAAWrJ,EAAK1G,cAAc,MAAO,qBAAsBsW,GAE3DU,EAAkBtQ,EAAK1G,cAAc,MAAO,wBAAyBsW,GAC3EU,EAAgBP,UAAY,YAC5B3c,KAAKsa,WAAU,SAAAJ,GACbgD,EAAgBvU,aAAa,iCAAkCuR,EAAW,OAAS,QAGrF,IAAMiD,EAAevQ,EAAK1G,cAAc,MAAO,0BAA2BsW,GACpEY,EAAWxQ,EAAK1G,cAAc,gBAAY1D,EAAW2a,GAG3D,GAFAC,EAASzU,aAAa,OAAQ,KAC9ByU,EAASzU,aAAa,cAAe,kBACjCiE,EAAK/D,SAAU,CACjB,IAAMwU,EAAUzQ,EAAK1G,cAAc,cAAU1D,EAAW2a,GACxDE,EAAQjX,wkBAGRiX,EAAQpC,iBAAiB,SAAS,WAChCqC,EAAK1F,KAAKwF,EAASpN,OACnBoN,EAASpN,MAAQ,GACjBsN,EAAKrD,WAAU,MAInB,IAAM7I,EAAepR,KAAK8T,yBAC1B,GAAI1C,EAAa3Q,OAAQ,CACvB,IAAM2H,EAAMgJ,EAAa,GACzB1F,IAAcvI,KAAKiF,GAAKuD,IAAI,WAAWA,IAAI,QAAQxJ,IAAG,SAAA2B,GAAI,OAAIiZ,EAAOJ,UAAY7Y,KACjFiN,EAAQwM,YAAY7R,IAAetD,GAAK,SAAAoV,GAEtCV,EAAgBnU,aAAa,iCADQ6U,EAAOC,SAAW,OAAS,KAE5CxH,EAASyH,iBAAiB,sCAClC5c,SAAQ,SAAAyV,GAClB,GAAIA,EAAIoH,aAAa,cAAgBH,EAAOI,WAAY,CACtD,IAAMC,EAAItH,EAAIoH,aAAa,SAC3BpH,EAAI5N,aAAa,QAAYkV,uBAqErC,OA/DA7d,KAAKgX,0BAAyB,SAAAN,GACbT,EAASyH,iBAAiB,wBAClC5c,SAAQ,SAAAgd,GACb,IAAMC,EAAQD,EAAUE,cAAcA,cAAcA,cACpD,GAAID,EAAMJ,aAAa,cAAgBjH,EAAM,CAC3C,IAAMuH,EAAWF,EAAMJ,aAAa,UACG,IAAnCM,EAASrc,QAAQ,cACnBmc,EAAMpV,aAAa,QAAYsV,gBAEjCH,EAAUnV,aAAa,QAAS,wBAKtC3I,KAAKwV,aAAY,SAACe,EAAKH,GACrB,IAAM8H,EAAatR,EAAK1G,cAAc,MAAO,oBAC7CgY,EAAWvB,UAAYpG,EAAIzQ,KAC3B,IAAM4Q,EAAO9J,EAAK1G,cAAc,MAAO,OAAQgY,GAC/CxH,EAAKiG,UAAY/P,EAAK1F,WAAW,IAAIY,KAAKyO,EAAIG,OAC1CN,EAAKJ,eAEepJ,EAAK1G,cAAc,OAD7BoX,EAAKpG,uBAAyBX,EAAIG,KAAO,gBAAkB,YACjBA,GACxCtQ,UAAY,8TAE5B8X,EAAW9X,UAAY8X,EAAW9X,UAAU+J,QAAQ,MAAO,UAE3D,IAAM4N,EAAQnR,EAAK1G,cAAc,OAAUkQ,EAAKJ,aAAe,MAAQ,+BACvE+H,EAAMnV,YAAYsV,GAClBH,EAAMpV,aAAa,YAAa4N,EAAIG,MACpC,IAAK,IAAI9R,EAAIqR,EAASkI,SAAS1d,OAAQmE,GAAK,EAAGA,IAC7C,GAAU,IAANA,EACFqR,EAASmI,aAAaL,EAAO9H,EAASoI,gBACjC,CACL,IAAMjX,EAAI6O,EAASkI,SAASvZ,EAAI,GAAG+Y,aAAa,aAChD,GAAIvW,GAAKA,EAAImP,EAAIG,KAAM,CACrBT,EAASkI,SAASvZ,EAAI,GAAG0Z,sBAAsB,WAAYP,GAC3D,OAIN9H,EAASsI,UAAYtI,EAASuI,gBAGhCpB,EAASnC,iBAAiB,SAAS,SAAAtD,GAGjC,GAFA5G,EAAQ0N,YAAY/S,KAAe,GACnC4R,EAAK1G,wBACiB,KAAlBe,EAAM+G,QAAgB,CACxB/G,EAAMgH,iBACN,IAAMC,EAAUxB,EAASpN,MACnB6O,EAAQjS,EAAK7H,SAASqY,GACxBzF,EAAMmH,SACR1B,EAASpN,MAAW4O,EAAQ7X,UAAU,EAAG8X,EAAQ,QAASD,EAAQ7X,UAAU8X,EAAOD,EAAQne,SAE3F2c,EAASpN,MAAQ4O,EAAQ7X,UAAU,EAAG8X,EAAQ,GAAKD,EAAQ7X,UAAU8X,EAAOD,EAAQne,QACpF6c,EAAK1F,KAAKwF,EAASpN,OACnBoN,EAASpN,MAAQ,GACjBsN,EAAKrD,WAAU,SAGjBqD,EAAKrD,YAAYmD,EAASpN,MAAMvP,WAI7B+b,GAGTzL,EAIO0N,YAAP,SAAmBM,GACjB,GAAIrT,IAAcsT,qBAAuBD,EAAzC,CACArT,IAAcsT,mBAAqBD,EACnC3e,aAAasL,IAAcuT,oBAC3B,IAAMC,EAAS,WACbxT,IAAcvI,OAAOwI,gBAAgBC,IAAI,CAAC4R,OAAQuB,EAAUrI,KAAM,IAAI5O,KAAKhF,EAAIqc,SAASrT,iBAE1FoT,IAKIH,GAJJ,SAASK,IACPF,IACAxT,IAAcuT,mBAAqB/e,WAAWkf,EAAa,KAG3DA,KAIJrO,EAMOwM,YAAP,SAAmB8B,EAAQrL,GACzB,IAAImG,EACJzO,IAAcvI,KAAKkc,GAAQ1T,gBAAgBxJ,IAAG,SAAA4c,GAC5C,GAAKA,GAAcA,EAASrI,MAAQqI,EAASvB,OAA7C,CACApd,aAAa+Z,GACb,IAAMvS,EAAM,IAAIE,KAAKhF,EAAIqc,SACnBG,EAAe,IAAIxX,KAAKiX,EAASrI,MACjC+G,EAAW6B,EAAe,IAAIxX,KAAKF,EAAI2X,UAAY,MAAcD,EAAe,IAAIxX,KAAKF,EAAI2X,UAAY,KAC/GvL,EAAS,CAACyJ,SAAAA,EAAUG,WAAYmB,EAASrI,KAAM8G,OAAQuB,EAASvB,SAC5DC,IACFtD,EAAUja,YAAW,WAAA,OAAM8T,EAAS,CAACwL,UAAU,EAAO5B,WAAYmB,EAASrI,SAAQ,WAGxF3F,EAEM6K,eAAP,gBAAuBR,IAAAA,QAAS5I,IAAAA,SAAUC,IAAAA,UAAWJ,IAAAA,QAASK,IAAAA,aAAcC,IAAAA,OACpE8M,EAAMnX,mBACZ,OAAImK,GAAaJ,EACL+I,gBAAqBqE,EAAIhN,eAAsBgN,EAAIpN,SAAcoN,EAAI/M,SAAmB+M,EAAI9M,GAE9FyI,eAAoBqE,EAAIjN,SAAeiN,EAAI/M,SAAmB+M,EAAI9M,IAG9E5B,EAGakL,eAAc,WAAA,kBAA3B,WAA4Bb,GAAO,sBAAA,6BAAA,OAAA,sBAAA,OAKjC,gBAL0BA,IAAAA,EAAU,oBAC9BjY,EAAOuI,IAAcvI,OACrBpC,EAAM2P,GAAQrF,SAGpBqU,SACwB5c,EAAIc,IAAI2Q,OAAM,OACW,OAD3CzB,SACAqJ,EAAkB7P,KAAKC,UAAUuG,GAAU4M,SACtB5c,EAAIc,IAAIuH,OAAO2H,EAAUxH,KAAMwH,GAAU,OAAlD,OAAZJ,SAAYgN,UACe5c,EAAIc,IAAI2H,QAAQ4Q,EAAiBzJ,GAAa,QAAvD,OAAlB0J,SAAkBsD,UACE5c,EAAIc,IAAIuH,OAAOpK,EAAIuK,KAAMvK,GAAI,QAAtC,OAAXsb,SAAWqD,UACqB5c,EAAIc,IAAI2H,QAAQ4Q,EAAiBE,GAAY,QAAtD,OAAvBC,SAAuBoD,UACV9S,EAAKpJ,QAAQ4Y,GAAmB,QAQkC,OAPrFzJ,GADIA,UACYpO,MAAM,EAAG,IAGzBqI,EAAKlK,iBAAiBgJ,IAAeoH,GAAW,SAAA3P,GAC9CA,EAAKwI,IAAI,gBAAgBC,IAAI,CAAC9C,EAAG,OAGnC3F,EAAKwI,IAAI,aAAaA,IAAIgH,GAAQ/G,IAAI,CAACwQ,mBAAAA,EAAoBE,wBAAAA,sBAEpDvL,EAAQ6K,eAAe,CAACR,QAAAA,EAAS5I,SAAUzR,EAAIqH,IAAKsK,aAAAA,EAAcC,OAAAA,KAAQ,QAAA,UAAA,0BAClF,OAAA,YAAA,gCAvB0B,GAyB3B5B,EAGagE,eAAc,WAAA,kBAA3B,WAA4BqG,EAA8BpH,EAAoBrC,GAAS,YAAA,6BAAA,OAAA,sBAAA,OAEpD,gBAFPyJ,IAAAA,EAAU,6BAAwCzJ,IAAAA,GAAY,GAClF5Q,EAAM2P,GAAQrF,SACdlI,EAAOuI,IAAcvI,OAAMwc,SACV7c,EAAIc,IAAIuH,OAAOpK,EAAIuK,KAAMvK,GAAI,OAA9C6S,SACA2H,EAAY,GAClBpY,EAAKwI,IAAI,aAAayC,MAAMjM,IAAG,SAACyT,EAAMjD,GACpC,GAAKiD,IAAuC,IAA/B2F,EAAU3Z,QAAQ+Q,GAA/B,CACA,IAAMgJ,EAAW,GACjBxY,EAAKwI,IAAI,aAAaA,IAAIgH,GAAQhH,IAAI,2BAA2BxJ,cAAE,kBAAC,WAAMsd,GAAG,UAAA,6BAAA,OAAA,sBAAA,OAAA,GACtEA,IAAsC,IAA/BlE,EAAU3Z,QAAQ+Q,IAAciN,SAAA,MAAA,0BAAA,OACrB,OAAvBrE,EAAUhO,KAAKoF,GAAQiN,SACC9c,EAAIc,IAAIiP,QAAQ4M,EAAK7L,GAAS,OAAvC,OAATd,SAAS8M,SACY9c,EAAIc,IAAIuH,OAAO2H,EAAUxH,KAAMwH,GAAU,OAC9DnI,EAAMoG,EAAQ6K,eAAe,CAACR,QAAAA,EAAS5I,SAAUzR,EAAIqH,IAAKsK,aAD1DA,SACwEC,OAAAA,IAC1EqB,GACFA,EAAS,CAACrJ,IAAAA,EAAKxE,GAAIwM,IAEjBhB,GACFjG,IAAcvI,KAAK2P,EAAU1K,KAAKuD,IAAI,gBAAgByC,MAAMjM,cAAE,kBAAC,WAAO2Z,EAAQC,GAAS,MAAA,6BAAA,OAAA,sBAAA,OAAA,GAChFD,GAAM+D,SAAA,MAAA,0BAAA,OACqB,GAA1Bzb,EAAIkI,KAAKC,UAAUuP,IACI,IAAzBH,EAAS/Z,QAAQwC,IAASyb,UAAA,MACX,OAAjBlE,EAASpO,KAAKnJ,GAAGyb,SACC/c,EAAIc,IAAIiP,QAAQiJ,EAAQpJ,GAAa,OACvC,IAAI3B,EAAQ,CAAChQ,IAAAA,EAAKqQ,sBAC1BpF,OAAO,QAEjBY,EAAKlK,iBAAiBgJ,IAAeoH,GAAW,SAAA3P,GAC9CA,EAAKwI,IAAI,gBAAgBA,IAAIoQ,GAAWnQ,IAAI,SAC3C,QAAA,UAAA,0BACJ,qBAAA,oCACF,QAAA,UAAA,0BACF,mBAAA,wCACA,OAAA,UAAA,0BACJ,OAAA,gBAAA,gCAlC0B,GAoC3B0E,EAGAwP,oBAAA,SAAoBnN,GAClB3S,KAAKub,UAAU5I,GAAU,KACzB3S,KAAK4L,IAAI,YAAa5L,KAAKub,WAC3B7P,IAAcvI,OAAOwI,IAAI,aAAaA,IAAIgH,GAAQ/G,IAAI,OAGxDmF,EAGOgP,sBAAP,SAA6Bhf,EAAK4R,GAChCjH,IAAcvI,OAAOC,KAAKrC,GAC1B2K,IAAcvI,OAAOwI,IAAI,aAAaA,IAAIgH,GAAQ/G,IAAI,OAGxDmF,EAGaiP,cAAa,WAAA,kBAA1B,WAA2Bjf,EAAKqH,GAAG,MAAA,6BAAA,OAAA,sBAAA,OACF,OAA/BsD,IAAcvI,OAAOC,KAAKrC,GAAKkf,SACPlP,EAAQuD,sBAAsBlM,EAAKrH,GAAI,OAAzD0R,SACN/G,IAAcvI,OAAOwI,IAAI,YAAYA,IAAI8G,GAAW7G,IAAI,MACxDF,IAAcvI,OAAOwI,IAAI,YAAYA,IAAI8G,GAAWhQ,MAAM,OAAA,UAAA,0BAC3D,OAAA,cAAA,gCALyB,GAO1BsO,EAGamP,YAAW,WAAA,kBAAxB,WAAyBnf,EAAK8O,GAAI,UAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAsQ,SACTrd,EAAIc,IAAIuH,OAAOpK,EAAIuK,KAAMvK,GAAI,OAAtC,OAAR6S,SAAQuM,SACavT,EAAKpJ,QAAQoQ,GAAS,OAA/B,OAAZC,SAAYsM,SACSvT,EAAKpJ,QAAQqQ,EAAehE,GAAK,OAAtD6D,SACNhI,IAAcvI,OAAOC,KAAKrC,GAC1B2K,IAAcvI,OAAOwI,IAAI,YAAYA,IAAI+H,GAAc9H,IAAI,MAC3DF,IAAcvI,OAAOwI,IAAI,YAAYA,IAAI+H,GAAcjR,MAAM,QAAA,UAAA,0BAC9D,OAAA,cAAA,gCAPuB,QCrsCpBkZ,EAAW,IAAIyE,eAOGC,EAA8BnP,YAA9BmP,IAAAA,EAAY3P,GAAQrF,UAC1C,IAAIwP,EAAUc,EAAShQ,IAAI0U,GAK3B,OAJKxF,IACHA,EAAU,IAAI9J,EAAQ,CAACK,aAAciP,EAAWnP,SAAAA,IAChDyK,EAAS2E,IAAID,EAAWxF,IAEnBA,ECLT,IACM0F,EAAmB,IAAIC,IAE7BC,EAAYC,OAAO,CACfC,OAAQ,CAACF,EAAYG,aAAcH,EAAYI,UAAWJ,EAAYK,UAG1E,IChBIC,EDmBiBC,aAWjB,WAAY7a,EAAiBuC,uBAAjBvC,IAAAA,EAAa,aAAIuC,IAAAA,EAAoB,MARjD1I,cAAW,IAAIogB,IACfpgB,sBAAmB,IAAIogB,IACvBpgB,uBAAoB,IAAIogB,IACxBpgB,gBAAawC,EACbxC,aAAU,EACVA,aAAS,EAQTA,qBAAkBiD,cAAW,aAAA,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACpBgB,EAAKgd,QAAMtd,SAAA,MAAA,OAAAA,SACNM,EAAKid,kBAAiB,OAE5Bjd,EAAKka,SAAS3U,MACR2U,EAAW7M,MAAMtG,KAAK/G,EAAKka,SAASxd,QAC1C8f,EAAYpU,QAAQpI,EAAKkC,GAAIgY,SACP3b,IAAfyB,EAAK+L,MACZyQ,EAAYU,WAAWld,EAAKkC,IAE5Bsa,EAAYpU,QAAQpI,EAAKkC,GAAmB,OAAflC,EAAK+L,MApCrB,uCAoCyD/L,EAAK+L,OAC9E,OAAA,UAAA,0BACF,KAEHhQ,qBAAkBiD,cAAW,aAAA,QAAA,6BAAA,OAAA,sBAAA,OAAA,IACrBsd,EAAiBa,IAAInd,EAAKkC,KAAGkb,SAAA,MAAA,8BACtB7e,GAAS,OAAA,OAAA6e,SAGDZ,EAAY/T,QAAQzI,EAAKkC,IAAG,OAArC,GAEK,QAFXxB,WAEe0c,UAAA,MACf1c,OAASnC,EACT+d,EAAiBxV,IAAI9G,EAAKkC,IAAIkb,UAAA,MAAA,QAAA,GAjDjB,yCAkDN1c,GAA2B0c,UAAA,MAClC1c,EAAS,KAAK0c,UAAA,MAAA,QAAA,IACP/P,MAAMC,QAAQ5M,IAAO0c,UAAA,MAER,OAAdC,EAAY,GAAED,UACdpf,QAAQsf,IAAI5c,EAAOyJ,eAAG,kBAAC,WAAMrN,GAAG,6BAAA,OAAA,sBAAA,OAAA,OAAAygB,SACXvd,EAAK0H,IAAI5K,GAAK+I,OAAM,OAA3CwX,EAAUvgB,UAAI,OAAA,UAAA,0BACjB,mBAAA,qCAAE,QACH4D,EAAS2c,EAAUD,UAAA,MAAA,QAGnBpd,EAAK+L,MAAQrL,EAAO,QAEL,OAAnBV,EAAKgd,QAAS,oBACPtc,GAAM,QAAA,UAAA,0BACd,KAEH3E,iBAAciD,GAAW,WACrB,qCAAYkD,OACFwR,EAAQ,CAAElV,IAAK,WAAA,OAAMwB,EAAKwd,wBAAwBtb,KACxDlC,EAAK6F,UAAe6N,GAAO,QAFF1T,EAAKwd,iCAAkBC,IAIpD,GAAIzd,EAAKyE,OAAQ,CACb,IADa,mBAAA,cACDvC,OACFwR,EAAQ,CAAElV,IAAK,WAAA,OAAMwB,EAAKyE,OAAO+Y,wBAAwBtb,KAC/DlC,EAAKyE,OAAOoB,UAAe6N,GAAO,QAFT1T,EAAKyE,OAAO+Y,iCAAkBhJ,IAI3D,IADC,mBAAA,cACWtS,OACFwR,EAAQ,CAAElV,IAAK,WAAA,OAAMwB,EAAKyE,OAAOiZ,yBAAyBxb,KAChElC,EAAK6F,UAAe6N,GAAO,QAFF1T,EAAKyE,OAAOiZ,kCAAmBC,OAKjE,IA5DC5hB,KAAKmG,GAAKA,EACVnG,KAAK0I,OAASA,EA6DlB,kBA8FC,OA9FD4H,EAMA3E,IAAA,SAAI5K,GACA,IAAM8gB,EAAW7hB,KAAKme,SAASxS,IAAI5K,GACnC,GAAI8gB,EACA,OAAOA,EAEX,IAAMC,EAAW,IAAId,EAAQhhB,KAAKmG,OAAMpF,EAAOf,MAG/C,OAFAA,KAAKme,SAASmC,IAAIvf,EAAK+gB,GACvB9hB,KAAK+hB,kBACED,GAGXxR,EAKA1E,IAAA,SAAIoE,cACA,GAAIsB,MAAMC,QAAQvB,GACd,MAAM,IAAIhM,MAAM,oCAEpB,GAAqB,iBAAVgM,GAAgC,OAAVA,EAQjChQ,KAAKme,SAAW,IAAIiC,IACpBpgB,KAAKgQ,MAAQA,EACbhQ,KAAKgiB,cACLhiB,KAAK+hB,sBAXL,CAEI,IAAK,IAAMhhB,KADXf,KAAKgQ,WAAQxN,EACKwN,EACdhQ,KAAK2L,IAAI5K,GAAK6K,IAAIoE,EAAMjP,IRtFXb,YQwFT,WAAA,OAAMoN,EAAK0U,gBRxFe,KQkG1C1R,EAOMxG,KAAI,WAAA,kBAAV,WAAWkK,EAAqB2D,EAAyBsK,GAAiB,aAAA,6BAAA,OAAA,sBAAA,OAAO,YAAxBA,IAAAA,GAAoB,IAErEjiB,KAAKme,SAAS3U,MAAI6K,SAAA,MAEN,OAAZ1P,EAAS,GAAG0P,SACNpS,QAAQsf,IAAIjQ,MAAMtG,KAAKhL,KAAKme,SAASxd,QAAQyN,eAAG,kBAAC,WAAMrN,GAAG,6BAAA,OAAA,sBAAA,OAAA,OAAA4S,SACxCtF,EAAK1C,IAAI5K,GAAK+I,UAAKtH,EAAWmV,GAAM,OAAxDhT,EAAO5D,UAAI,OAAA,UAAA,0BACd,mBAAA,qCAAE,OAAAsT,UAAA,MAAA,OAAA,QACmB7R,IAAfxC,KAAKgQ,OAAmBqE,UAAA,MAC/B1P,EAAS3E,KAAKgQ,MAAMqE,UAAA,MAAA,QAAA,OAAAA,UAELrU,KAAKkhB,kBAAiB,QAArCvc,SAAM,QAAA,QAEKnC,IAAXmC,IAAwBsd,GAAiB5N,UAAA,MAC8C,OAAvFL,GAAYA,EAASrP,EAAQ3E,KAAKmG,GAAG5B,MAAMvE,KAAKmG,GAAG+b,YAAY,KAAO,GAAI,KAAMvK,qBACzEhT,GAAM,QAAA,UAAA,+BAEpB,OAAA,gBAAA,gCAjBS,GAmBV2L,EAIAnO,GAAA,SAAG6R,cACO7N,EAAKnG,KAAKmiB,UAChBniB,KAAKyhB,iBAAiBnB,IAAIna,EAAI6N,GAE9BhU,KAAK8J,KAAKkK,EADI,CAAEvR,IAAK,WAAA,OAAMgM,EAAKgT,wBAAwBtb,MAC7B,IAG/BmK,EAKMlC,IAAG,WAAA,kBAAT,WAAU4F,GAAkB,mBAAA,6BAAA,OAAA,sBAAA,OAGsC,GAFxD7N,EAAKnG,KAAKmiB,UAChBniB,KAAK2hB,kBAAkBrB,IAAIna,EAAI6N,GACzB2D,EAAQ,CAAElV,IAAK,WAAA,OAAMiT,EAAKiM,yBAAyBxb,KACpDnG,KAAKihB,QAAMzM,SAAA,MAAA,OAAAA,SAENxU,KAAKkhB,kBAAiB,OAEhC,QAAoBlhB,KAAKme,SAAS9a,iCACxByG,KAAKkK,EAAU2D,GAAO,GAC/B,OAAA,UAAA,+BACJ,OAAA,YAAA,gCAXQ,qBCpKX,OAHKoJ,IACHA,EAAQ,IAAIC,GAEPD,ECZT,IAAIqB,EAA2C,gBAiB7C,OAdKA,IACHA,EAAe,GACfrB,IAAQpV,IAAI,SAASyC,KAAI,SAACiU,EAAoBlf,GACxCkf,IAAcD,EAAajf,KAC3Bkf,GACFD,EAAajf,GAAQkf,EACrBtB,IAAQpV,IAAI,UAAUyC,KAAI,SAACkU,EAASrX,GAClC8V,IAAQpV,IAAI,UAAUA,IAAIV,GAAGU,IAAIxI,GAAMyI,KAAI,cAGtCwW,EAAajf,QAInBif,ECfT,IAAID,EAAU,EACRI,EAAQ,IAAInC,IACZoC,EAAY,IAAIpC,IAatB,WAAwBqC,GACtB,gBADsBA,IAAAA,EAAY,YAC3B,CACL9W,aAAI+W,EAAc1O,GAChB,IAAM2O,EAAY5B,IAAQpV,IAAI,UAAUA,IAAI8W,GACtCG,EAAuC,GAC7CC,uBAAsB,WACpBF,EAAUvU,KAAI,SAAC0U,EAAkB3f,GAC/B,IAAIif,IAAejf,MACfyf,EAAQzf,IAASyf,EAAQzf,KAAU2f,KACvCF,EAAQzf,GAAQ2f,EACZA,GAAa,CACf,IAAI9gB,EAAO+gB,EAAU5f,GACjBuf,GAAiB,MAATA,IACV1gB,EAAO0gB,EAAK1b,MAAM,KAAKgc,QAAO,SAACC,EAAS7e,GAAQ,OAAK6e,EAAItX,IAAI1E,mBAAmB7C,MAAKpC,IAEvFgS,EAAShS,EAAMmB,WAMvB+f,qBAAYC,EAAsCC,EAAkBV,EAAcW,EAAgBrP,GAChG,GAAKmP,EAWH,cAAiBA,EAAO9f,yBAAU,CAAA,IAAzBigB,UACPtP,EAASsP,EAAKtT,MAAOsT,EAAKviB,IAAK,EAAGsiB,EAASC,EAAKtY,UAZvC,CACX,IAAMmY,EAAS,IAAI/C,IACnBmC,EAAMjC,IAAI8C,EAAUD,GACpBnjB,KAAK2L,IAAI+W,GAAM,SAAC1gB,EAAWgJ,GAAY,OAAKhJ,EAAKoM,KAAI,SAAC4B,EAAYjP,EAAawiB,GAE7EJ,EAAO7C,IAAIvf,EADE,CAACiP,MAAAA,EAAOjP,IAAAA,EAAKiK,KAAAA,IAE1B,cAAewX,EAAU7W,IAAIyX,GAAU/f,0BACrCmgB,WAAGxT,EAAOjP,EAAKwiB,EAAGF,EAASrY,WAYnCyY,oBAAWN,EAAsCC,EAAkBV,EAAcW,EAAgBrP,GAC/F,GAAKmP,EAWH,cAAiBA,EAAO9f,yBAAU,CAAA,IAAzBigB,UACPtP,EAASsP,EAAKtT,MAAOsT,EAAKviB,IAAK,EAAGsiB,EAASC,EAAKtY,UAZvC,CACX,IAAMmY,EAAS,IAAI/C,IACnBmC,EAAMjC,IAAI8C,EAAUD,GACpBnjB,KAAK2L,IAAI+W,GAAM,SAAC1gB,EAAWgJ,GAAY,OAAKhJ,EAAKG,IAAG,SAAC6N,EAAYjP,EAAawiB,GAE5EJ,EAAO7C,IAAItV,EADE,CAACgF,MAAAA,EAAOjP,IAAAA,EAAKiK,KAAAA,IAE1B,cAAewX,EAAU7W,IAAIyX,GAAU/f,0BACrCmgB,WAAGxT,EAAOjP,EAAKwiB,EAAGF,EAASrY,WAUnC0Y,uBAAcP,EAAsCC,EAAkBV,EAAcW,EAAgBrP,GAClG,GAAKmP,EAWHnP,EAASmP,EAAO3Z,KAAMkZ,EAAK1b,MAAM,KAAK2c,MAAO,KAAMN,OAXxC,CACX,IAAMF,EAAS,IAAI/C,IACnBmC,EAAMjC,IAAI8C,EAAUD,GACpBnjB,KAAK2L,IAAI+W,GAAM,SAAC1gB,EAAWgJ,GAAY,OAAKhJ,EAAKG,IAAG,SAAC6N,EAAYjP,GAC/DiP,EAAQmT,EAAO7C,IAAItV,GAAM,GAAQmY,SAAcnY,GAE/C,IADA,MAAM4Y,EAAQT,EAAO3Z,SACNgZ,EAAU7W,IAAIyX,GAAU/f,0BACrCmgB,WAAGI,EAAO7iB,EAAK,KAAMsiB,EAASrY,WAQtC6Y,oBAAWC,EAAYpB,EAAc1O,GACnC,IAAMoP,EAAcU,MAAMrB,MAAaC,EAEnCqB,EAAa5B,IACbK,EAAUpB,IAAIgC,GAChBZ,EAAU7W,IAAIyX,GAAU9C,IAAIyD,EAAY/P,GAExCwO,EAAUlC,IAAI8C,EAAU,IAAIhD,IAAI,CAAC,CAAC2D,EAAY/P,MAGhD,IAAMqP,EAAU,CAAC5gB,IAAK,WACpB,IAAIuhB,EAAcxB,EAAU7W,IAAIyX,GAChCY,GAAeA,SAAmBD,KAG9BZ,EAASZ,EAAM5W,IAAIyX,GAEzB,OAAQU,GACN,IAAK,MACH9jB,KAAKkjB,YAAYC,EAAQC,EAAUV,EAAMW,EAASrP,GAClD,MACF,IAAK,KACHhU,KAAKyjB,WAAWN,EAAQC,EAAUV,EAAMW,EAASrP,GACjD,MACF,IAAK,QACHhU,KAAK0jB,cAAcP,EAAQC,EAAUV,EAAMW,EAASrP,KAK1D5F,aAAIsU,EAAc1O,GAChBhU,KAAK6jB,WAAW,MAAOnB,EAAM1O,IAG/B7R,YAAGugB,EAAc1O,GACfhU,KAAK6jB,WAAW,KAAMnB,EAAM1O,IAG9B4P,eAAMlB,EAAc1O,GAClBhU,KAAK6jB,WAAW,QAASnB,EAAM1O,KCzHrC,IAEIiQ,EACAC,EAAkB,EAClBC,EAA0B,EACxBC,GAAuB,GAE7B,SAASC,KACP,OAAOzd,OAAO0d,cAA4C,YAA5BA,aAAaC,WA+D7C,IAAMC,GAAiB,0FAEvB,SAASC,GAAsBC,GAS7B,IARA,IACMC,GAAUD,EADA,IAAIE,QAAQ,EAAIF,EAAajkB,OAAS,GAAK,IAExD0P,QAAQ,KAAM,KACdA,QAAQ,KAAM,KAEX0U,EAAUje,OAAOlC,KAAKigB,GACtBG,EAAc,IAAIC,WAAWF,EAAQpkB,QAElCmE,EAAI,EAAGA,EAAIigB,EAAQpkB,SAAUmE,EACpCkgB,EAAYlgB,GAAKigB,EAAQ/f,WAAWF,GAEtC,OAAOkgB,EACR,SAEcnT,MAAS,gCAAA,cAUvB,OAVuBqT,eAAxB,WAAyBC,GAAG,6BAAA,OAAA,sBAAA,OAAA,OAAA5D,SAAAA,SAEG4D,EAAIC,YAAYvT,UAAU,CACnDwT,iBAAiB,EACjBC,qBAAsBX,GAAsBD,MAC5C,OACFa,WAAqChE,UAAA,MAAA,OAAAA,SAAAA,gBAErCvT,QAAQwX,MAAM,oCAAkC,QAAA,UAAA,8DAInB,cAQhC,OARgCC,eAAjC,aAAA,QAAA,6BAAA,OAAA,sBAAA,OACkE,GAAhEzX,QAAQC,IAAI,0BAA2BtM,UAAU+jB,eAC5CnB,MAAkC5iB,UAAU+jB,eAAa7R,SAAA,MAAA,0BAAW,GAAK,OAAA,OAAAA,SACxElS,UAAU+jB,cAAcC,MAAK,OAAA,OAAA9R,SACjBlS,UAAU+jB,cAAcE,kBAAiB,OACX,OAD1CT,UACFU,OAAOC,YAAY,CAAC7kB,IAAK2P,GAAQrF,WAAWsI,UAC9BsR,EAAIC,YAAYW,kBAAiB,SAA7CC,UACAT,GAAuBS,GAAOnU,GAAUsT,GAAK,QAAA,UAAA,iDAGrD,IAAMc,GAAiC9iB,GAAW,WAChD,IAAM5C,EAAMQ,OAAOwC,OAAO+gB,IAC1B1T,GAAQsV,WAAWllB,SAAQ,SAAA2R,GACzBwT,EAAaxT,GAAW7G,IAAI,uBAAwBvL,QAErD,KAMF,SAEcglB,QAAsB,gCAAA,cAUpC,OAVoCa,eAArC,WAAsC9hB,EAAG+hB,GAAS,YAAA,6BAAA,OAAA,sBAAA,OAClB,gBADSA,IAAAA,GAAY,GAC7CC,EAAQ1V,GAAQrF,SAAQgJ,SACPvR,EAAIc,IAAIuH,OAAOib,EAAM9a,KAAM8a,GAAM,OAA1C,OAARxS,SAAQS,SACIvR,EAAIc,IAAI2H,QAAQnH,EAAGwP,GAAS,OAArC,OAAH6L,SAAGpL,UACUzH,EAAKpJ,QAAQ8I,KAAKC,UAAUnI,IAAG,QAA5CL,SACFoiB,GACFza,IAAcvI,OAAOwI,IAAI,wBAAwBA,IAAI5H,GAAM6H,IAAI6T,GAEjE2E,GAAqBrgB,GAAQK,EAC7B2hB,KAAiC,QAAA,UAAA,iDAGG,cAQrC,OARqCM,eAAtC,aAAA,QAAA,6BAAA,OAAA,sBAAA,OACgC,OAAxBD,EAAQ1V,GAAQrF,SAAQqJ,SACP5R,EAAIc,IAAIuH,OAAOib,EAAM9a,KAAM8a,GAAM,OAAlDxS,SACNlI,IAAcvI,OAAOwI,IAAI,wBAAwByC,MAAMjM,cAAE,kBAAC,WAAMsd,GAAG,6BAAA,OAAA,sBAAA,OAAA,GAC5DA,GAAGjL,SAAA,MAAA,0BAAA,OAAA,OAAAA,SACQ1R,EAAIc,IAAIiP,QAAQ4M,EAAK7L,GAAS,OAC9CyR,WAA0B,GAAO,OAAA,UAAA,0BAClC,mBAAA,oCAAE,OAAA,UAAA,iDAGL,SAASiB,GAAQnjB,GACf,OAAO,IAAIlB,SAAQ,SAAAC,GACjBwJ,IAAcvI,KAAKA,GAAMwI,IAAI,QAAQxJ,cAAE,kBAAC,WAAOmJ,EAAKL,EAAEsY,EAAEhiB,GAAC,6BAAA,OAAA,sBAAA,OACnD+J,IACF/J,EAAEkB,MACFP,EAAQoJ,IACT,OAAA,UAAA,0BACF,yBAAA,uCAEJ,SAEcib,MAAmB,gCAAA,cAWjC,OAXiCC,eAAlC,WAAmCC,GAAY,UAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAtR,SACvBzJ,IAAcvI,KAAKsjB,EAAazb,MAAMW,IAAI,WAAW7B,OAAM,OAQpB,OAPvDhG,GADA4iB,WACmBA,EAAQ5iB,MAAS,4BAG5B,UAFR6T,EAAQ8O,EAAa9O,OAAS8O,EAAaE,QAEZ7iB,qBAClB,UAAV6T,EAAkC7T,0BACxB,YAAV6T,EAAoC7T,iCAC1B,WAAV6T,EAAmC7T,2BACxBA,+BAAiC6T,GACrC,OAAA,UAAA,iDA+ClB,SAASiP,GAA8BC,GAChCA,GAIH1C,GAA2B0C,EAC3B1C,EAA0B7jB,KAAK8M,IAAI+W,EAAyB,KAJ5DA,EAA0B,EAC1BzY,IAAcvI,OAAOwI,IAAI,yBAAyBC,KAAI,IAAI9D,MAAOgE,gBAKnEiV,IAAQpV,IAAI,2BAA2BC,IAAIuY,GAGV,cAOlC,OAPkC2C,eAAnC,WAAoCC,EAAWN,GAAY,UAAA,6BAAA,OAAA,sBAAA,OAAA,GACnDM,GAAaN,GAAY3R,SAAA,MAAA,0BAAA,OACuD,MAA1D,iBAAjB2R,IAA6BA,EAAa/P,MAAO,IAAI5O,MAAOgE,eAAegJ,SACnEwR,GAAQS,GAAU,OAA3B,OAAJzb,SAAIwJ,SACWhS,EAAIc,IAAIuH,OAAOG,EAAMoF,GAAQrF,UAAS,OAA/C,OAANF,SAAM2J,UACMhS,EAAIc,IAAI2H,QAAQkb,EAActb,GAAO,QAAjDsU,SACN/T,IAAcvI,OAAOwI,IAAI,iBAAiBA,IAAIob,GAAWnb,IAAI6T,GAAK,QAAA,UAAA,iDAG9B,cA+BrC,OA/BqCuH,eAAtC,WAAuCD,EAAWN,GAAY,UAAA,6BAAA,OAAA,sBAAA,OAIuC,GAHnG3Y,QAAQC,IAAI,mCAAoCgZ,EAAWN,GACrD5L,EAAUoL,EAAac,GACvBX,EAAQ1V,GAAQrF,SACC0b,IAAcX,EAAMhe,KAAUyS,EAAQkE,UAAYlE,EAAQkE,SAAStB,WACrE5C,EAAQuJ,sBAAoB3O,SAAA,MAAA,8CAAA,YAAA,6BAAA,OAAA,sBAAA,OACzCwR,EAAgB,GAChB7V,EAAevQ,OAAOF,KAAKka,EAAQuJ,sBAAqB3L,uBACrD7T,GAAC,UAAA,6BAAA,OAAA,sBAAA,OAC2B,OAA7ByO,EAAcjC,EAAaxM,GAAE0Q,SACduF,EAAQzG,UAAUf,GAAY,OAAvC,OAANlI,SAAMmK,SAEGxS,EAAIc,IAAI2H,QAAQkb,EAAaS,MAAO/b,GAAO,OAAA,OAAAmK,YAAAA,SAC5CxS,EAAIc,IAAI2H,QAAQkb,EAAazL,KAAM7P,GAAO,OAAAmK,YAAAA,KACjD,CAAClN,IAAKge,EAAMhe,IAAKkD,KAAM8a,EAAM9a,MAH9B6b,GACJD,WACAlM,UACAhQ,WAEF6P,EAAQuJ,qBAAqB/Q,GAAavS,SAAQ,SAAAsD,GAC5CA,GAAKA,EAAEgjB,UACTH,EAAc1Z,KAAK,CAACiM,aAAcpV,EAAG+iB,QAAAA,OAEtC,QAAA,UAAA,yBAZIviB,EAAI,EAAC,OAAA,KAAEA,EAAIwM,EAAa3Q,SAAM8U,SAAA,MAAA,yBAA9B3Q,WAAC,OAA+BA,IAAG2Q,SAAA,MAAA,OAAA,GAcf,IAAzB0R,EAAcxmB,QAAY8U,UAAA,MAAA,0BAAAsD,WAAA,QAC9BwO,MAhQ6B,kDAgQG,CAC9BC,OAAQ,OACRtM,KAAM1O,KAAKC,UAAU,CAAC0a,cAAAA,IACtBM,QAAS,CACPC,eAAgB,6BAEX,eAAU,QAAA,UAAA,mCAAA,OAAA,oBAAAC,SAAAhS,SAAA,MAAA,8BAAA,OAAA,UAAA,iDASvB,IC7QI1U,GACA2mB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GCfA7B,MFoRW,CAAC7X,KALhB,WACE0V,EAAY,IAAInc,KAChBoc,EAAkB,GAGEgE,UApQtB,SAAmB3R,EAAKH,EAAM3D,EAAW0V,GACvC,SAASC,IACP,GAAI7R,EAAI8R,QAAUpE,EAAa,OAAO,EACtC,GAAI7N,EAAKJ,aAAgB,OAAO,EAChC,GAAiC,YAA7B9Q,SAASojB,gBAAiC,OAAO,EACrD,IAAMzN,EAAUoL,EAAaxT,GAC7B,MAAoC,YAAhCoI,EAAQ0N,uBACwB,aAAhC1N,EAAQ0N,sBAAuChS,EAAIzQ,KAAK9E,SAAS0P,GAAQ8X,cAa/E,GALSJ,IAJF/D,MACE+D,IAQkB,CACzB,IAAIpN,EAAMkM,EACJrM,EAAUoL,EAAaxT,GACzBoI,EAAQhL,MACVqX,EAAQrM,EAAQ4N,oBAAoBrS,EAAKpL,MAAMlH,KAC/CkX,EAAUlX,UAASyS,EAAIzQ,OAEvBohB,EAAQ,UACRlM,EAAOzE,EAAIzQ,MAEbkV,EAAOpO,EAAKrE,eAAeyS,EAAM,IACP,IAAIsJ,aAAa4C,EAAO,CAChDwB,KAAM,0BACN1N,KAAAA,EACA2N,QAAQ,IAEUC,QAAU,WAC5BhC,IAA+B,GAC/BuB,GAAWA,IACXvhB,OAAOxB,WA6NoBmhB,oBAAAA,GAAqBsC,wBAxCrD,cAEqC,iCAsCyCjC,8BAAAA,GAA+BkC,6BAtG9G,SAAsCX,GACpC,IAAIY,EACAC,EACJtd,IAAcvI,OAAOwI,IAAI,yBAAyBxJ,IAAG,SAAA0W,GACnDkQ,EAAwBlQ,EACxB/K,QAAQC,IAAI8K,MAEdnN,IAAcvI,OAAOwI,IAAI,0BAA0BxJ,IAAG,SAAA0W,GAAC,OAAImQ,EAAyBnQ,KACpF,IAAMoQ,EAA4BhmB,GAAW,WAC3CyI,IAAcvI,OAAOwI,IAAI,0BAA0BC,KAAI,IAAI9D,MAAOgE,iBACjE,KACGod,EAAc,IAAI1I,IACxB2I,IAAQhnB,oBAAoBuO,GAAQ0Y,uBAAW,kBAAI,WAAOC,EAAuBpe,EAAGsY,EAAGhiB,EAAGyJ,GAAI,cAAA,6BAAA,OAAA,sBAAA,OAC3B,GAAzD7E,EAAK6E,EAAKzG,MAAM,EAAE,IAAM8kB,EAAsB9kB,MAAM,EAAE,KACxD2kB,EAAY9H,IAAIjb,IAAGqb,SAAA,MAAA,0BAAA,OACH,OAApB0H,EAAYne,IAAI5E,GAAIqb,SACD8E,GAAQtb,GAAK,OAAtB,OAAJM,SAAIkW,SACW1e,EAAIc,IAAIuH,OAAOG,EAAMoF,GAAQrF,UAAS,OAA/C,OAANF,SAAMqW,UACe1e,EAAIc,IAAIiP,QAAQwW,EAAuBle,GAAO,QAAvD,IAAZsb,WACuC,iBAAjBA,GAAyBjF,UAAA,MAAA,0BAAA,QAMpD,GALDyH,IACAxC,EAAazb,KAAOA,EACpB+V,IAAQpV,IAAI,iBAAiBA,IAAI8a,EAAa/P,MAAM9K,IAAI6a,KACnDsC,GAA0BA,EAAwBtC,EAAa/P,OAClEkQ,GAA8B,GAE3BoC,KAA0BA,EAAyBvC,EAAa/P,OAAI8K,UAAA,MAC/C,OAAxB1T,QAAQC,IAAI,YAAYyT,UACL+E,GAAoBE,GAAa,QAA9C3gB,SACoB,IAAIwe,aAAaxe,EAAM,CAC/C4iB,KAAM,0BACN1N,KAAMlV,EACN6iB,QAAQ,IAEUC,QAAU,WAE5BT,GAAWA,EADE1B,EAAa6C,gBAAkB7C,EAAa6C,mBAAuB7C,EAAazb,MAE7F4b,IAA+B,GAC/BhgB,OAAOxB,SACP,QAAA,UAAA,0BAEL,2BAAA,qCA6DuImkB,qBAjD3I,cAEkC,iCA+C+HC,sBAxNlK,SAAmCnU,EAAQwR,GACzC,IAAM4C,EAAOxD,EAAa5Q,GAC1B,GAAKoU,EAAL,CACA,IAAMC,EAAW3I,IAAQpV,IAAI,YAAYA,IAAI0J,GACzCwR,GACF3C,GAAmB2C,EACnB4C,EAAKE,QAAU9C,IAEf3C,GAAqCuF,EAAKE,QAAU,EACpDF,EAAKE,OAAS,GAEhBD,EAAS/d,IAAI,UAAUC,IAAI6d,EAAKE,QAChCzF,EAAkBA,GAAmB,EAAIA,EAAkB,EAC3DnD,IAAQpV,IAAI,mBAAmBC,IAAIsY,KA2M+KE,qBAAAA,GAAsBwF,mBA7KzO,WAEgC,iCA2K6NC,wBA1I7P,WAEqC,iCAwIiPC,mBA1JvR,SAA4B/lB,UACnBqgB,GAAqBrgB,GAC5B2H,IAAcvI,OAAOwI,IAAI,wBAAwBA,IAAI5H,GAAM6H,IAAI,MAC/Dma,OGjIIgE,GAAWnd,EAAKjL,WAAa,IAAImB,EAAI,CAACE,MAAO,CAAC,6BAA8BgnB,KAAM,iBAAkBC,WAAU,EAAO7d,cAAc,IAAQT,IAAI,SAAW,KFoB1Jue,GAAuB,GACvBC,GAA2B,IAAI/J,IAE/BgK,GAAiB,0FAEjBC,GAAmB,CACvBN,SAAU,CACRO,aAAa,EACbC,iBAAiB,GAEnBxJ,MAAO,CACLyJ,kBAAmB5d,EAAK/D,SACxB4hB,2BAA2B,EAC3BC,oBAAoB,EACpBrd,kBAAmBT,EAAKjL,WAAa,EAAI,OAO9B,CASb4M,cAAKyC,cACH,YADGA,IAAAA,EAAe,KACdiX,GAAJ,CACAA,IAAa,EACb,IAAI0C,EAAkBve,aAAaM,QAAQ,eACvCie,EACF3qB,KAAK4qB,MAAMte,KAAKK,MAAMge,KACS,IAAtB3Z,EAAQ6Z,UACjB7qB,KAAK8qB,eAAe9Z,GAEpBhR,KAAK+qB,iBAEP7qB,YAAW,WACT6gB,IAAQpV,IAAI,SAASyC,KAAI,WACvBnK,EAAK+mB,uBAEP/mB,EAAK+mB,uBAEPxc,aAAY,WACV,GAAIvK,EAAKgnB,UAAUxqB,OAAQ,CAEzB,IAAM2G,EAAInD,EAAKgnB,UAAUC,QACzB9jB,GAAKA,OAEN,MAGLijB,iBAAAA,GACAD,eAAAA,GAEAa,UAAW,GAEXD,kBAAmB/nB,GAAW,WAC5B,IACMI,EAASxC,OAAOwC,OAAOJ,EAAOinB,GAAiBrpB,OAAOF,KAAKyhB,OACjE4F,GAAc,IAAImD,EAAK9nB,EAFP,CAAC1C,KAAM,CAAC,QAASyqB,cAAc,EAAMC,gBAAgB,EAAMC,UAAW,KAGtFvK,IAAQpV,IAAI,sBAAsBC,KAAI,KACrC,KAEH2f,iBAAkBtoB,GAAW,SAAAgI,GACzB8V,IAAQpV,IAAI,YAAYA,IAAIV,GAAGW,IAAI,CAAC4f,eAAgBtB,GAAgBjf,GAAGugB,eAAeC,cAAevB,GAAgBjf,GAAGygB,UAAUliB,SACnI,KAEHmiB,mBAAU3X,EAAoB/I,EAAWugB,EAAwBI,GAC3D1B,GAAgBjf,IACdif,GAAgBjf,GAAGugB,eAAiBA,IACtCtB,GAAgBjf,GAAGugB,eAAiBA,GAEtCI,GAAY1B,GAAgBjf,GAAGygB,UAAU3gB,IAAI6gB,KAE7C1B,GAAgBjf,GAAK,CAAClK,IAAKkK,EAAGugB,eAAAA,EAAgBE,UAAW,IAAIlL,IAAIoL,GAAY,CAACA,KAC9E5rB,KAAKirB,UAAU1d,MAAK,WAClBpK,EAAK8H,GAAGU,IAAI,WAAWA,IAAI,QAAQxJ,IAAG,SAAC2B,GACrComB,GAAgBjf,GAAGnH,KAAOA,EAC1Bid,IAAQpV,IAAI,YAAYA,IAAIV,GAAGU,IAAI,QAAQC,IAAI9H,GAC/CkQ,GAAYA,EAAS/I,EAAGif,GAAgBjf,WAI9CjL,KAAKurB,iBAAiBtgB,GACtB+I,GAAYA,EAAS/I,EAAGif,GAAgBjf,IACxCjL,KAAKgrB,oBACLhrB,KAAK6rB,kBACL7rB,KAAK8rB,qBAGPC,sBAAa9gB,EAAWugB,EAAwBI,GAC1C1B,GAAgBjf,KAClBif,GAAgBjf,GAAGygB,iBAAiBE,GACb,IAAnBJ,GACFzK,IAAQpV,IAAI,UAAUA,IAAI,WAAWA,IAAIV,GAAGW,KAAI,GAElD5L,KAAK6rB,kBACL7rB,KAAK8rB,sBAITE,4BAAmBhY,EAAoB/I,EAAaghB,EAAcC,uBAA3BjhB,IAAAA,EAAIlK,GAAIqH,cAAK6jB,IAAAA,EAAW,YAAGC,IAAAA,EAAe,GAC/E,IAAMniB,EAASogB,GAAyBxe,IAAIV,GAC5C,KAAIlB,GAAUA,GAAUmiB,GAkBxB,OAfA/B,GAAyB7J,IAAIrV,EAAGihB,GAEhClsB,KAAK2rB,UAAU3X,EAAU/I,EAAGihB,EAAe,GAE3C/oB,EAAK8H,GAAGU,IAAI,UAAUyC,MAAMjM,IAAG,SAAC2gB,EAAsBqJ,GAChDrJ,GACFxV,EAAKqe,UAAU3X,EAAUmY,EAAaD,EAAcjhB,GAChDihB,EAAeD,GACjB3e,EAAK2d,UAAU1d,MAAK,WAAA,OAAMD,EAAK0e,mBAAmBhY,EAAUmY,EAAaF,EAAUC,EAAe,OAGpG5e,EAAKye,aAAaI,EAAaD,EAAcjhB,MAI1Cif,IAGT2B,gBAAiB5oB,GAAW,WAC1B,IAAM4V,EAAIhY,OAAOF,KAAKupB,IAAiBzpB,QAAU,EAC7CoY,IAAMiP,KACRA,GAAYjP,EACZkI,IAAQpV,IAAI,aAAaC,IAAIkc,OAE9B,KAEHgE,kBAAmB7oB,GAAW,WAC5B,IAAM4V,IAAMqR,GAAgBnpB,GAAIqH,MAAS8hB,GAAgBnpB,GAAIqH,KAAKsjB,UAAUliB,KAAO,GAC/EqP,IAAMkP,KACRA,GAAclP,EACdkI,IAAQpV,IAAI,eAAeC,IAAImc,OAEhC,KAEHqE,0BACE,OAAOpE,IAGTqE,8BACE,IAAMC,EAAc1lB,OAAOC,SAAS9C,KACpCgN,EAAQ0N,YAAYoJ,GAAc,UAClC,IAAM0E,EAAYtpB,GAAW,WAC3B,IACMwmB,EAAOxD,EADEqG,GAAeA,EAAYnc,QAAQ,aAAa,IAAIA,QAAQ,UAAU,KAEjFsZ,IAAS5B,IACX4B,EAAK7S,wBAEP7F,EAAQ0N,YAAYoJ,GAAc,UAClCznB,aAAawnB,IACbA,GAAgB1nB,YAAW,WAAA,OAAM6Q,EAAQ0N,YAAYoJ,GAAc,YAAW,OAC7E,KACH3iB,SAAS+V,iBAAiB,YAAasR,GACvCrnB,SAAS+V,iBAAiB,YAAasR,GACvCrnB,SAAS+V,iBAAiB,WAAYsR,GACtCrnB,SAAS+V,iBAAiB,oBAAoB,WAC5C,GAAiC,YAA7B/V,SAASojB,gBAA+B,CAC1CvX,EAAQ0N,YAAYoJ,GAAc,UAClC,IAAMxS,EAASxO,SAAS2lB,SAASjoB,MAAM,GAAG4L,QAAQ,QAAQ,IACpDsZ,EAAO6C,GAAerG,EAAa5Q,GACrCoU,IACFA,EAAK7S,wBACL6V,GAAcjD,sBAAsBnU,EAAQ,SAG9CtE,EAAQ0N,YAAYoJ,GAAc,aAGtC0E,IACA3lB,OAAOqU,iBAAiB,gBAAgB,WACtClK,EAAQ0N,YAAYoJ,GAAc,UAItC6E,mCACE1sB,KAAKgsB,oBAAmB,SAAC/gB,EAAWmL,GAC9BA,EAAKoV,gBAAkB,GACzBzK,IAAQpV,IAAI,UAAUA,IAAI,WAAWA,IAAIV,GAAGW,KAAI,GAElDmV,IAAQpV,IAAI,UAAUA,IAAI,YAAYA,IAAIV,GAAGW,KAAI,GAC7CX,IAAMoD,EAAK+a,aACb/a,EAAKyd,wBASXlB,eAAM3f,cACE0hB,IAAkB5rB,GACxBA,GAAMkK,EACNmB,aAAaC,QAAQ,cAAeC,KAAKC,UAAUtB,IACnD9H,IAAOC,KAAKrC,IACZoC,IAAOyI,IAAI,CAACN,KAAMvK,GAAIuK,OACtBnI,IAAOwI,IAAI,SAASC,IAAI,CAAC9C,EAAE,OAC3B3F,IAAOwI,IAAI,QAAQC,IAAI,CAAC9C,EAAE,OAC1B3F,IAAOwI,IAAI,WAAWC,IAAI,CAAC9C,EAAE,OAC7B2jB,GAAc7C,qBACd6C,GAAc5C,0BACd4C,GAAc3D,+BACd/X,EAAQgE,oBAAgBvS,GAAW,SAAC0O,GAClC6P,IAAQpV,IAAI,aAAaA,IAAIuF,EAAS/K,IAAIyF,IAAIsF,EAASvG,KACvDgd,GAAiBzW,EAASvG,OAE5B3K,KAAKqsB,qBACLtb,EAAQ4D,aAAa,SAACkJ,GAAU,OAAKpP,EAAKme,WAAW/O,MACrD1a,IAAOwI,IAAI,WAAWA,IAAI,QAAQxJ,IAAG,SAAC2B,GAChCA,GAAwB,iBAATA,IACjB4jB,GAAS5jB,MAGb2oB,GAAcle,OACdwS,IAAQpV,IAAI,YAAYC,KAAI,GAC5BmV,IAAQpV,IAAI,YAAY7B,OAAOiI,MAAK,SAAA8a,GAC7BA,OAEoCrqB,IAA9BqqB,EAASrC,uBAAkEhoB,IAAhCqqB,EAASnC,qBAC7D3J,IAAQpV,IAAI,YAAYA,IAAI,oBAAoBC,IAAIye,GAAiBtJ,MAAMyJ,kBAC3EzJ,IAAQpV,IAAI,YAAYA,IAAI,sBAAsBC,IAAIye,GAAiBtJ,MAAM2J,qBAH7E3J,IAAQpV,IAAI,YAAYC,IAAIye,GAAiBtJ,UAMjD5d,IAAOwI,IAAI,SAASyC,MAAMjM,IAAG,SAACkgB,EAAoBlf,GAChD4d,IAAQpV,IAAI,SAASA,IAAIxI,GAAMyI,IAAIyW,GAC/BA,UACK6H,GAAgB/mB,MAG3BnD,KAAK0sB,eACDC,GACF9lB,SAASimB,SAEP/C,KACFA,GAASpe,IAAI,YAAYxJ,IAAG,SAAA4nB,GAC1BhJ,IAAQpV,IAAI,YAAYA,IAAI,YAAYC,IAAIme,MAE9CA,GAASpe,IAAI,QAAQC,IAAI7K,GAAIqH,MAE/B2Y,IAAQpV,IAAI,WAAWA,IAAI,SAAS7B,OAAOiI,MAAK,SAAA8G,GACzCA,GACHkI,IAAQpV,IAAI,WAAWA,IAAI,SAASC,IAAI,eAU9Ckf,wBAAe9Z,uBAAAA,IAAAA,EAAe,IAC5B,IAAMlN,EAAOkN,EAAQlN,MAAQ8I,EAAKpI,eAElC,OADAsJ,QAAQC,IAAI,sBAAuBjK,GAC5BhB,EAAIc,IAAI2Q,OAAOxC,MAAK,SAAA9G,GACzByK,EAAKkV,MAAM3f,GACX9H,IAAOwI,IAAI,WAAWC,IAAI,CAAC9C,EAAE,OAC7B3F,IAAOwI,IAAI,WAAWA,IAAI,QAAQC,IAAI9H,GACtCid,IAAQpV,IAAI,WAAWC,IAAI,CAAC9C,EAAE,OAC9BiY,IAAQpV,IAAI,WAAWA,IAAI,SAASC,IAAI,WACxCmF,EAAQkL,iBAAiBlK,MAAK,SAAAgb,GAAC,OAAIpF,GAAiBoF,KACpD7sB,YAAW,YACkB,IAAvB8Q,EAAQgc,aACVlf,QAAQC,IAAI,gBAAiBqc,IAC7BjnB,IAAOwI,IAAI,UAAUA,IAAIye,IAAgBxe,KAAI,MAE9C,SAQDqhB,wIAIJ,GAHIlD,IACFA,GAASpe,IAAI,QAAQC,IAAI,OAGvBnK,UAAU+jB,eAAa7hB,UAAA,MAAA,OAAAA,SACPlC,UAAU+jB,cAAcE,kBAAiB,OAAlD,KAAHT,YACKA,EAAIC,aAAWvhB,UAAA,MACa,gBAArCshB,EAAIU,SAAJuH,EAAYtH,YAAY,CAAC7kB,IAAK,OAAO4C,SACnBshB,EAAIC,YAAYW,kBAAiB,OAA1C,KAAHC,WACCniB,UAAA,MAAA,OAAAA,UACciJ,EAAKpJ,QAAQ8I,KAAKC,UAAUuZ,IAAK,QACpD2G,GAAc3C,2BACdhE,EAAIqH,aAAerH,EAAIqH,cAAc,QAI3C3W,EAAKuU,iBACL3e,aAAaghB,QACbC,EAAYD,QAAQrb,MAAK,WACvBnL,OAAOC,SAAS9C,KAAO,GACvB6C,OAAOC,SAASymB,KAAO,IACvBzmB,SAASimB,YACR,QAAA,UAAA,6BAGL/B,0BACE,OAAO,IAAI9oB,SAAQ,SAAAC,GACjB,IAAMqrB,EAAK3mB,OAAO4mB,UAAUC,eAAe,WACrCC,EAAK9mB,OAAO4mB,UAAUC,eAAe,UACvCE,GAAS,EACTC,GAAS,EACP7kB,EAAQ,WACZ4kB,GAAUC,GAAU1rB,OAAQM,IAE9B+qB,EAAGM,QAAUH,EAAGG,QAAU,SAAAtsB,GAAC,OAAIuM,QAAQwX,MAAM/jB,IAE7CgsB,EAAGO,UAAY,WACbH,GAAS,EACT5kB,KAEF2kB,EAAGI,UAAY,WACbF,GAAS,EACT7kB,SAKNglB,yBACE,OAAOpG,IAAkB/a,EAAKzE,eAAepH,GAAIqH,MAOnDiD,kBAAW,OAAOtK,IAMlBqoB,qBACE,OAAOroB,IAAOA,GAAIqH,KAOpBogB,qBAAc,OAAOd,IAErBsG,UAAW,SAAC5e,GAAU,gBAAeA,eAE/B6e,wBAAepT,qIACAkG,IAAQpV,IAAI,YAAYA,IAAI,YAAYA,IAAI,YAAY7B,OAAM,QAA3EokB,WACErT,EAAQjP,KAAOiP,EAAQjP,IAAI,UAAWkL,EAAKkX,UAAUE,IAAO,OAAA,UAAA,6BAGtEC,oBAAW/lB,EAAa8I,GACtB,GAAK9I,IAAOpI,KAAKgmB,WAAW5E,IAAIhZ,GAAhC,CAGA,IAAMqhB,EAAOxD,EAAa7d,EAAK8I,GAE/B,OADAlR,KAAK4sB,WAAWnD,GACTA,IAGTmD,oBAAWnD,cACTzpB,KAAKirB,UAAU1d,MAAK,WAClB,IAAInF,EAAMqhB,EAAKtV,QACf,IAAI8C,EAAK+O,WAAW5E,IAAIhZ,GAAxB,CACA6O,EAAK+O,WAAWjb,IAAI3C,GACpB,IAAMshB,EAAW3I,IAAQpV,IAAI,YAAYA,IAAIvD,GAiD7C,GAhDAshB,EAAS/d,IAAI,cAAcxJ,IAAG,SAACiF,GACzBA,KAAOqiB,EAAK2E,YAAchnB,EAAIqiB,EAAK2E,cACrC3E,EAAK2E,WAAahnB,MAKtBsiB,EAAS/d,IAAI,yBAAyBxJ,IAAG,SAACiF,GACxC,GAAKA,EAAL,CACA,IAAMinB,EAAI,IAAIvmB,KAAKV,KACdqiB,EAAK6E,uBAAyB7E,EAAK6E,sBAAwBD,KAC9D5E,EAAK6E,sBAAwBD,OAGjC5E,EAAKpT,cAAgBoT,EAAKpT,cAAa,SAACI,EAAaL,GACnDa,EAAKsX,eAAenmB,EAAKqO,EAAQL,MAEnCqW,GAAcjD,sBAAsBphB,EAAK,GACzCqhB,EAAKlB,oBAAsB,MAC3BkB,EAAK9S,KAAK,uBAAuB,SAACvU,GAChCqnB,EAAKlB,oBAAsBnmB,KAG7BqnB,EAAKvS,sBAAwB,GAC7BuS,EAAKzS,0BAAyB,SAACN,GACzB+S,GAAQ/S,GAAQA,GAAQ+S,EAAKvS,wBAC/BuS,EAAKvS,sBAAwBR,EAC7BgT,EAAS/d,IAAI,yBAAyBC,IAAI8K,OAG9C+S,EAAK5S,uBAAsB,SAACH,GAC1B+S,EAAK+E,eAAiB,IAAI1mB,KAAK4O,GAC3B+S,EAAKhT,QAAUgT,EAAK+E,gBAAkB/E,EAAKhT,OAAOC,MACpD+V,GAAcjD,sBAAsBphB,EAAK,MAG7CqhB,EAAKvP,UAAW,EAChBuP,EAAKnP,WAAU,SAAAJ,GACbuP,EAAKvP,SAAWA,EAChB6G,IAAQpV,IAAI,YAAYA,IAAIvD,GAAKuD,IAAI,YAAYC,IAAIsO,MAEvDuP,EAAKgF,OAAS,GACd1d,EAAQwM,YAAYnV,GAAK,SAAC2W,GACpB0K,IACFC,EAAS9d,IAAI,CAAC8iB,oBAAqB3P,GAAYA,EAASnB,WAAYmB,SAAUA,GAAYA,EAAStB,UAAYsB,EAASvB,SACxHiM,EAAK1K,SAAWA,MAGhB0K,EAAK5Z,KAAM,CACb,IAAI8e,EAAa/nB,OAAOgoB,YAAchoB,OAAOgoB,WAAW,gCAAgCC,QACxFpF,EAAKhB,oBAAsB,GAC3BgB,EAAKtnB,GAAG,QAAQ,SAAA0W,GACd4Q,EAAK3lB,KAAO+U,EACZqR,GAAgBT,EAAK5Z,MAAQ,CAAC/L,KAAM+U,EAAGhJ,KAAM4Z,EAAK5Z,MAClDkR,IAAQpV,IAAI,YAAYA,IAAI8d,EAAK5Z,MAAMlE,IAAI,QAAQC,IAAIiN,MAEzD4Q,EAAKtnB,GAAG,SAAS,SAAA0W,GACfqR,GAAgBT,EAAK5Z,MAAQqa,GAAgBT,EAAK5Z,OAAS,GAC3Dqa,GAAgBT,EAAK5Z,MAAMif,MAAQjW,EACnCkI,IAAQpV,IAAI,YAAYA,IAAI8d,EAAK5Z,MAAMlE,IAAI,SAASC,IAAIiN,MAE1D4Q,EAAKtnB,GAAG,SAAS,SAAA0W,GAAC,OAAIkI,IAAQpV,IAAI,YAAYA,IAAI8d,EAAK5Z,MAAMlE,IAAI,SAASC,IAAIiN,MAC9E4Q,EAAK1V,iBAAgB,SAAA3C,GAEnB,UADOA,EAAa5O,UACQ,iBAAjB4O,EAA2B,CACpC,IAAIzQ,EAAOE,OAAOF,KAAKyQ,GACvBzQ,EAAKG,SAAQ,SAACmK,EAAGrG,GACf,IAAImqB,EAAM,IAAMzuB,KAAK8M,IAAIzM,EAAKF,OAAQ,GAAKmE,EAC3C6kB,EAAKhB,oBAAoBxd,GAAK,CAACmM,YAAahG,EAAanG,GAAI+jB,aAAcD,aAAaJ,EAAa,GAAK,UAC1GxrB,EAAK8H,GAAGU,IAAI,WAAWA,IAAI,QAAQxJ,IAAG,SAAA2B,GACpC2lB,EAAKhB,oBAAoBxd,GAAGnH,KAAOA,QAIzCid,IAAQpV,IAAI,YAAYA,IAAI8d,EAAK5Z,MAAMlE,IAAI,gBAAgBC,IAAIwF,MAEjEqY,EAAKwF,YAAc,GACnBxF,EAAK/X,aAAa,CAACsC,SAAU,gBAAErJ,IAAAA,IAAKxE,IAAAA,GAClC2H,QAAQC,IAAI,gBAAiB5H,EAAIwE,GACjC8e,EAAKwF,YAAY9oB,GAAMwE,EACvBoW,IAAQpV,IAAI,sBAAsBC,KAAI,WAGxCmV,IAAQpV,IAAI,UAAUA,IAAI,YAAYA,IAAIvD,GAAKwD,KAAI,GACnDqL,EAAK0U,UAAU,KAAMvjB,EAAK0G,UAC1B3L,EAAKiF,GAAKuD,IAAI,WAAWA,IAAI,QAAQxJ,IAAG,SAAA0W,GAAC,OAAIkI,IAAQpV,IAAI,YAAYA,IAAIvD,GAAKuD,IAAI,QAAQC,IAAIiN,MAEhG,GAAI4Q,EAAK7d,IAAK,CACZ6d,EAAKtX,QAAQ,wBAAwB,SAAC/N,EAAG6G,EAAGD,GACrCsG,MAAMC,QAAQnN,KACnBqlB,EAAKrF,qBAAuBqF,EAAKrF,sBAAwB,GACzDqF,EAAKrF,qBAAqBpZ,GAAQ5C,GAAOhE,MAE3C,IAAM/D,EAAMQ,OAAOwC,OAAOopB,GAAcrI,sBACxClkB,YAAW,WAAA,OAAMupB,EAAK7d,IAAI,uBAAwBvL,KAAM,KACxD4W,EAAKgX,eAAexE,GAEtBA,EAAKtX,QAAQ,QAAQ,SAAA/Q,GACnB2f,IAAQpV,IAAI,QAAQC,IAAI,CAACxD,IAAAA,EAAKhH,KAAAA,OAEhC2f,IAAQpV,IAAI,YAAYA,IAAIvD,GAAKwD,IAAI,CAAChB,SAAQ,SAclD2jB,wBAAelZ,EAAgBkB,EAAUH,EAAW8Y,GAClD,IAAMzF,EAAOxD,EAAa5Q,GAC1BoU,EAAK0F,WAAa1F,EAAK0F,YAAc,GACjC1F,EAAK0F,WAAW5Y,EAAIG,KAAON,EAAKpL,QACpCye,EAAK0F,WAAW5Y,EAAIG,KAAON,EAAKpL,OAAQ,EACpCoL,IACFG,EAAM1V,OAAO+N,OAAO2H,EAAKH,IAEvBG,EAAI6Y,OAENpvB,KAAKmuB,WAAW5X,EAAI6Y,OAAOjG,oCADoB5S,EAAI6Y,OAAOjG,kBAAiB9T,IAI7EkB,EAAIP,aAAeI,EAAKJ,aACxB+K,IAAQpV,IAAI,YAAYA,IAAI0J,GAAQ1J,IAAI,QAAQA,IAAI4K,EAAIG,MAAQH,EAAIvL,MAAQuL,EAAIvL,KAAKzG,MAAM,EAAG,MAAMqH,IAAIU,KAAKC,UAAUgK,IACvHA,EAAI8R,QAAU,IAAIvgB,KAAKyO,EAAIG,OACtBN,EAAKJ,cAAgBO,EAAI8R,QAAUoB,EAAK+E,iBACvC5nB,OAAOC,SAAS9C,iBAAqBsR,GAAyC,YAA7BnQ,SAASojB,gBAC5DmE,GAAcjD,sBAAsBnU,EAAQ,GACnB,WAAhBwS,IACP4B,EAAK7S,0BAGNR,EAAKJ,cAAgBO,EAAIG,KAAO+S,EAAKvS,uBACxC6J,IAAQpV,IAAI,YAAYA,IAAI0J,GAAQ1J,IAAI,yBAAyBC,IAAI2K,EAAIG,QAEtE+S,EAAK2E,YAAe7X,EAAIG,KAAO+S,EAAK2E,aACvCrN,IAAQpV,IAAI,YAAYA,IAAI0J,GAAQzJ,IAAI,CACtCwiB,WAAY7X,EAAIG,KAChBD,OAAQ,CAACC,KAAMH,EAAIG,KAAM5Q,KAAMyQ,EAAIzQ,KAAMkQ,aAAcI,EAAKJ,gBAIhEyW,GAAcvE,UAAU3R,EAAKH,EAAMf,EAAQ6Z,MAG7CG,yBAAgBjnB,cACRyV,EAAIoI,EAAa7d,GACnByV,EAAEyR,aACNzR,EAAEyR,YAAa,EACfzR,EAAErI,aAAY,SAACe,EAAKH,GAClBkB,EAAKiX,eAAenmB,EAAKmO,EAAKH,QAOlC4P,WAAY,IAAIxF,QG7iBH,CAOb7U,aAAI5H,EAAciQ,GAChB,OAAO,IAAI/R,SAAQ,SAACC,EAASqtB,GACtBxrB,GACHwrB,EAAO,oBAEW,iBAATxrB,GACTwrB,EAAO,yBAETC,IAAc7jB,IAAI,KAAKA,IAAI5H,GAAM5B,IAAG,SAAC0W,EAAQxW,EAAYotB,EAASluB,GAC5DsX,IACFtX,EAAEkB,MACFuR,GAAYA,EAAS6E,GACrB3W,EAAQ2W,WAWVjN,aAAIoE,0HACWpD,EAAKpJ,QAAQwM,GAAM,OACM,OADtCjM,SACNyrB,IAAc7jB,IAAI,KAAKA,IAAI5H,GAAM6H,IAAIoE,qBAC9BjM,GAAI,OAAA,UAAA,8BF9BT2rB,cAAG,cAmFN,OAnFMA,EACMC,wBAAY,kBAAzB,WAA0BC,EAAeC,EAAsBC,GAAQ,cAAA,6BAAA,OAAA,sBAAA,OAAvB,YAAtBF,IAAAA,gBAAeC,IAAAA,eACnCzJ,IAAKziB,SAAA,MAAA,yBACAyiB,IAAK,OAAA,IAEV0J,GAAEnsB,UAAA,MACqC,IACrCmsB,EAAGC,WADDC,EAAiBJ,MAAWC,IACJlsB,UAAA,MACtBf,EAAIktB,EAAGG,aAAaD,UAC1B5J,GAAQsJ,EAAIQ,WAAWttB,GAAGe,UAAA,MAAA,QAAA,OAAAA,UAEL+rB,EAAIS,WAAU,QAA7BC,SAENN,EAAGO,cAAcL,EAAaN,EAAIvuB,SADlCilB,GAAQA,IAASgK,IAEjBN,EAAGQ,UAAUN,EAAa,KAAK,QAAA,GAE5B5J,IAAKziB,UAAA,MAAA,MACF,IAAIK,4CAA4C4rB,MAAWC,GAAU,QAAAlsB,UAAA,MAAA,QAGxB,KAA/CF,EAAMmD,OAAOwF,aAAaM,wBACzB/I,UAAA,MACLyiB,GAAQsJ,EAAIQ,WAAWzsB,GAAKE,UAAA,MAAA,QAAA,OAAAA,UAEP+rB,EAAIS,WAAU,QAA7BC,SACNhK,GAAQA,IAASgK,EACjBxpB,OAAOwF,aAAaC,qBAAsBqjB,EAAIvuB,SAASilB,KAAQ,QAAA,GAE5DA,IAAKziB,UAAA,MAAA,MACF,IAAIK,oEAAmE,QAAA,yBAG1EoiB,IAAK,QAAA,UAAA,0BACb,OAAA,gBAAA,mCAAAsJ,EAEMa,WAAP,SAAkBX,EAAeC,GAC/B,gBADgBD,IAAAA,gBAAeC,IAAAA,cACxBH,EAAIC,aAAaC,EAASC,IAClCH,EAEYc,wBAAY,kBAAzB,WAA0BZ,EAAeC,GAAO,6BAAA,OAAA,sBAAA,OAAA,gBAAtBD,IAAAA,gBAAeC,IAAAA,cAAOrO,SAC5BkO,EAAIC,aAAaC,EAASC,GAAQ,OAA3C,gCACEznB,KAAG,OAAA,UAAA,0BACf,OAAA,cAAA,mCAAAsnB,EAEMe,aAAP,SAAoB1vB,EAAUiL,EAAa4jB,EAAeC,EAAsBC,GAE9E,YAF4B9jB,IAAAA,GAAO,YAAM4jB,IAAAA,gBAAeC,IAAAA,cACxDzJ,GAAQrlB,EACHiL,EACL,GAAIY,EAAK3L,OAAQ,CACf,IAAM+uB,EAAiBJ,MAAWC,EAClCC,EAAGO,cAAcL,EAAaN,EAAIvuB,SAASilB,KAC3C0J,EAAGQ,UAAUN,EAAa,UAE1BppB,OAAOwF,aAAaC,qBAAsBqjB,EAAIvuB,SAASilB,MAE1DsJ,EAEMvuB,SAAP,SAAgBJ,GACd,OAAOuL,KAAKC,UAAUxL,IACvB2uB,EAEMvb,MAAP,SAAapT,GACX,IAAMA,IAAOA,EAAIqH,IACf,MAAM,IAAIpE,uBAEZ,OAAOjD,EAAIqH,KAEZsnB,EAEMQ,WAAP,SAAkBzsB,GAChB,OAAO6I,KAAKK,MAAMlJ,IACnBisB,EAEMS,SAAP,WACE,OAAOrtB,EAAIc,IAAI2Q,QAChBmb,EAEYgB,gBAAI,kBAAjB,WAAkBna,EAAUhC,GAAS,6BAAA,OAAA,sBAAA,OAAA,OAAA8M,SACjBve,EAAIc,IAAI8sB,KAAKna,EAAKhC,GAAK,OAAhC,qCACK,OAAA,UAAA,0BACf,OAAA,cAAA,mCAAAmb,EAEMiB,OAAP,SAAcpa,EAAU8I,GACtB,OAAOvc,EAAIc,IAAI+sB,OAAOpa,EAAIhS,MAAM,GAAI8a,SGnFlCuR,uBAEAC,uBAAgB,aAAA,qCAAA,4FAAQ7sB,QAoCxB8sB,cAKJ,WAAYpwB,GAGV,GAFAV,KAAK+wB,WAAarwB,EAAIqwB,WACtB/wB,KAAKqf,OAAS3e,EAAI2e,OACd3e,EAAIswB,IAAK,CACX,oBAAWtwB,EAAIswB,IACb,MAAM,IAAIH,+CAEZ7wB,KAAKgxB,IAAMtwB,EAAIswB,IACfhxB,KAAKwD,UAEPxD,KAAKixB,YACNH,EAEMI,UAAP,SAAiBC,GAGf,IAFA,IAAM9wB,EAAM,GACNM,EAAOE,OAAOF,KAAKwwB,GAChBvsB,EAAI,EAAEA,EAAIjE,EAAKF,OAAOmE,IAAK,CAClC,IAAM4D,EAAO7H,EAAKiE,GACZoL,EAAQmhB,EAAkBxwB,EAAKiE,IACrC,oBAAWoL,EACT3P,EAAIkN,KAAK,IAAIuC,EAAUtH,EAAMwH,SAE7B,IAAK,IAAIohB,EAAI,EAAEA,EAAIphB,EAAMvP,OAAO2wB,IAE9B/wB,EAAIkN,KAAK,IAAIuC,EAAUtH,EADFwH,EAAMohB,KAKjC,OAAO/wB,GACRywB,EAEMO,aAAP,SAAoBF,SAClB,aACIG,OAAOC,iCAAQ,gBAAA,6BAAA,OAAA,sBAAA,OACT5wB,EAAOE,OAAOF,KAAKwwB,GAChBvsB,EAAI,EAAC,OAAA,KAACA,EAAIjE,EAAKF,SAAMkD,UAAA,MAEY,GADlC6E,EAAO7H,EAAKiE,oBACZoL,EAAQmhB,EAAkBxwB,EAAKiE,MACRjB,UAAA,MAC3B,OAD2BA,SACrB,IAAImM,EAAUtH,EAAMwH,GAAM,OAAArM,UAAA,MAAA,QAEvBytB,EAAI,EAAC,QAAA,KAACA,EAAIphB,EAAMvP,SAAMkD,UAAA,MAE7B,OADM6tB,EAAexhB,EAAMohB,GAAEztB,UACvB,IAAImM,EAAUtH,EAAMgpB,GAAa,QAFTJ,IAAGztB,UAAA,MAAA,QANRiB,IAAGjB,SAAA,MAAA,QAAA,UAAA,4BAcvC,kBAsPA,OAtPA2M,EAEDmhB,kBAAA,WACE,OAAOX,EAAcO,aAAarxB,KAAK+wB,WAAWW,SACnDphB,EAEDqhB,qBAAA,WACE,OAAOb,EAAcO,aAAarxB,KAAK+wB,WAAWhK,YACnDzW,EAEDshB,eAAA,WACE,OAAOd,EAAcI,UAAUlxB,KAAK+wB,WAAWW,SAChDphB,EAEDuhB,kBAAA,WACE,OAAO7xB,KAAK+wB,WAAWhK,UAAY+J,EAAcI,UAAUlxB,KAAK+wB,WAAWhK,WAAa,IACzFzW,EAEDwhB,eAAA,WACE,OAAO9xB,KAAKqf,QAEb/O,EAED2gB,UAAA,WACE,IAAKjxB,KAAK+wB,WAAa,MAAM,IAAIF,GAAmBD,0BACpD,oBAAW5wB,KAAK+wB,WAA0B,MAAM,IAAIF,GAAmBD,oCACvE,IAAMvC,EAAIruB,KAAK+wB,WAEf,IAAK1C,EAAE7lB,KAAO,MAAM,IAAIqoB,GAAmBD,+BAC3C,IAAKvC,EAAEqD,OAAS,MAAM,IAAIb,GAAmBD,sBAC7C,oBAAWvC,EAAEqD,OAAsB,MAAM,IAAIb,GAAmBD,6BAChE,GAAItf,MAAMC,QAAQ8c,EAAEqD,QAAU,MAAM,IAAIb,GAAmBD,mCAC3D,GAAqC,IAAjC/vB,OAAOF,KAAK0tB,EAAEqD,QAAQjxB,OAAe,MAAM,IAAIowB,GAAmBD,oBAItE,IAAK,IAAMmB,KAHP/xB,KAAKqf,SACPrf,KAAKgyB,cAAgBhyB,KAAK8xB,kBAETzD,EAAEqD,OAAQ,CAC3B,IAAMtqB,SAAWinB,EAAEqD,OAAOK,GAC1B,cAAI3qB,EAAgB,CAClB,IAAIkK,MAAMC,QAAQ8c,EAAEqD,OAAOK,IAQzB,MAAM,IAAIlB,GAAmBD,qDAA0DmB,OAAS1D,EAAEqD,OAAOK,IAPzG,IAAK,IAAIntB,EAAI,EAAEA,EAAIypB,EAAEqD,OAAOK,GAAMtxB,OAAOmE,IAAK,CAC5C,oBAAWypB,EAAEqD,OAAOK,GAAMntB,GAAkB,MAAM,IAAIisB,GAAmBD,4CAAiDmB,QAAU1D,EAAEqD,OAAOK,GAAMntB,QACnJ,GAAiC,IAA7BypB,EAAEqD,OAAOK,GAAMntB,GAAGnE,OACpB,MAAM,IAAIowB,GAAmBD,cAAmBmB,eAAiBntB,iBAOzE,aAAImtB,EAAkB,CACpB,cAAI3qB,EAAiB,MAAM,IAAIypB,GAAmBD,wCAA6CxpB,GAC/F,GAAIpH,KAAKgyB,eAAiB3D,EAAEqD,OAAOK,KAAU/xB,KAAKgyB,cAAgB,MAAM,IAAInB,GAAmBD,yEAGnG,GAAIvC,EAAEtH,UAAW,CACf,oBAAWsH,EAAEtH,UAAyB,MAAM,IAAI8J,GAAmBD,gCACnE,GAAItf,MAAMC,QAAQ8c,EAAEtH,WAAa,MAAM,IAAI8J,GAAmBD,sCAC9D,GAAwC,IAApC/vB,OAAOF,KAAK0tB,EAAEtH,WAAWtmB,OAAe,MAAM,IAAIowB,GAAmBD,uBACzE,IAAK,IAAMmB,KAAQ1D,EAAEtH,UAEnB,oBADiBsH,EAAEtH,UAAUgL,GACT,CAClB,IAAIzgB,MAAMC,QAAQ8c,EAAEtH,UAAUgL,IAQ5B,MAAM,IAAIlB,GAAmBD,wDAA6DmB,OAAS1D,EAAEtH,UAAUgL,IAP/G,IAAK,IAAIntB,EAAI,EAAEA,EAAIypB,EAAEtH,UAAUgL,GAAMtxB,OAAOmE,IAAK,CAC/C,oBAAWypB,EAAEtH,UAAUgL,GAAMntB,GAAkB,MAAM,IAAIisB,GAAmBD,+CAAoDmB,QAAU1D,EAAEtH,UAAUgL,GAAMntB,QAC5J,GAAoC,IAAhCypB,EAAEtH,UAAUgL,GAAMntB,GAAGnE,OACvB,MAAM,IAAIowB,GAAmBD,iBAAsBmB,eAAiBntB,kBAShF,IAAMypB,EAAE3X,OAAQ2X,EAAE4D,UAAa,MAAM,IAAIpB,GAAmBD,0BAE5D,IAAK9oB,KAAK6E,MAAM0hB,EAAE3X,MAAQ2X,EAAE4D,WAAa,MAAM,IAAIpB,GAAmBD,0BAEtE,cAAIvC,EAAE7lB,KAAmB,CACvB,GAAI0pB,MAAM7D,EAAE8D,QAAU,MAAM,IAAItB,GAAmBD,sBACnD,GAAIsB,MAAM7D,EAAE+D,WAAa,MAAM,IAAIvB,GAAmBD,yBACtD,GAAIsB,MAAM7D,EAAEgE,WAAa,MAAM,IAAIxB,GAAmBD,yBACtD,GAAIvC,EAAE8D,OAAS9D,EAAE+D,UAAY,MAAM,IAAIvB,GAAmBD,iCAC1D,GAAIvC,EAAE8D,OAAS9D,EAAEgE,UAAY,MAAM,IAAIxB,GAAmBD,iCAC1D,oBAAWvC,EAAEtuB,UAAyBsuB,EAAEtuB,QAAQU,OAAS,MAAM,IAAIowB,GAAmBD,iDAGxF,qBAAIvC,EAAE7lB,yBAA2B6lB,EAAE7lB,OAC7B6lB,EAAEtH,UAAUtmB,OAAS,EAAI,MAAM,IAAIowB,GAAmBD,yFAA8FvC,EAAEtH,WAG5J,OAAO,GACRzW,EAEDgiB,WAAA,WACE,iBAAOtyB,KAAK+wB,WAAWvoB,MAAqBxI,KAAK+wB,WAAWoB,QAAUnyB,KAAK+wB,WAAWqB,UAAYpyB,KAAK+wB,WAAWsB,WAAa,GAChI/hB,EAEDiiB,WAAA,WACE,iBAAOvyB,KAAK+wB,WAAWvoB,MAAqBxI,KAAK+wB,WAAWoB,QAAUnyB,KAAK+wB,WAAWqB,UAAYpyB,KAAK+wB,WAAWsB,WAAa,GAChI/hB,EAEDkiB,UAAA,WACE,iBAAOxyB,KAAK+wB,WAAWvoB,MAAqBxI,KAAK+wB,WAAWoB,UAAYnyB,KAAK+wB,WAAWqB,UAAYpyB,KAAK+wB,WAAWsB,WAAa,GAGnI/hB,EAGMogB,KAAI,WAAA,kBAAV,WAAW3vB,GAAG,6BAAA,OAAA,sBAAA,OAAA,OAAAygB,SACKkO,GAAIgB,KAAK1wB,KAAK+wB,WAAYhwB,GAAI,OACzB,OADtBf,KAAKgxB,WACLhxB,KAAKqf,OAASte,EAAIqH,IAAIoZ,SAChBxhB,KAAKwD,UAAS,OAAA,0BACb,GAAI,OAAA,UAAA,+BACZ,OAAA,YAAA,gCALS,GAOVstB,EAMa2B,OAAM,WAAA,kBAAnB,WAAoB1B,EAAY2B,GAAU,MAAA,6BAAA,OAAA,sBAAA,OAKC,IAJpC3B,EAAWW,QAAUgB,IACxB3B,EAAWW,OAAS,CAAC/hB,MAAO+f,GAAIvb,MAAMue,KAExC3B,EAAWra,KAAOqa,EAAWra,OAAS,IAAI5O,MAAQgE,cAC5C6mB,EAAI,IAAI7B,EAAc,CAACC,WAAAA,KACzB2B,GAAUrR,SAAA,MAAA,OAAAA,SACNsR,EAAEjC,KAAKgC,GAAW,OAAA,yBAEnBC,GAAC,OAAA,UAAA,0BACT,OAAA,cAAA,gCAVkB,GAUlB7B,EAEM8B,mBAAP,SAA0B7B,EAAY2B,GAEpC,OADA3B,EAAWvoB,oBACJsoB,EAAc2B,OAAO1B,EAAY2B,IACzC5B,EAEM+B,aAAP,SAAoB9B,EAAY2B,GAK9B,OAJA3B,EAAWvoB,cACXuoB,EAAWhxB,QAAUgxB,EAAWhxB,gBAChCgxB,EAAWqB,UAAYrB,EAAWqB,WAAa,GAC/CrB,EAAWsB,UAAYtB,EAAWsB,YAAc,GACzCvB,EAAc2B,OAAO1B,EAAY2B,IACzCpiB,EAEDwiB,UAAA,SAAUppB,GACR,cAAgB1J,KAAKyxB,oCAAqB,CAAA,IAA/B3oB,UACT,GAAIA,EAAEuH,eACJ,OAAO3G,EAAMqpB,YAAYjqB,KAG9BwH,EAED0iB,aAAA,SAAatpB,GACX,GAAK1J,KAAK+wB,WAAWhK,UAGrB,cAAgB/mB,KAAK2xB,uCAAwB,CAAA,IAAlC7oB,UACT,GAAIA,EAAEuH,eACJ,OAAO3G,EAAMqpB,YAAYjqB,KAK/BwH,EAGM9M,QAAO,WAAA,kBAAb,aAAA,6BAAA,OAAA,sBAAA,OAAA,IACMxD,KAAKgxB,KAAQhxB,KAAK+D,MAAI4P,SAAA,MAAA,OAAAA,SACN/G,EAAKpJ,QAAQxD,KAAKgxB,KAAI,OAAxChxB,KAAK+D,YAAI,OAAA,yBAEJ/D,KAAK+D,MAAI,OAAA,UAAA,+BACjB,OAAA,WAAA,gCALY,GAKZuM,EAED6D,MAAA,WACE,OAAOnU,KAAKwD,WACbstB,EAEYmC,mBAAO,kBAApB,WAAqBvyB,GAAG,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACjBA,EAAIswB,KAAG3c,SAAA,MAAA,MACJ,IAAIrQ,qCAAsCtD,GAAI,OAAA,GAEjDA,EAAI2e,QAAMhL,SAAA,MAAA,MACP,IAAIrQ,mCAAkC,OAIU,OADlD+sB,EAAazkB,KAAKK,MAAMjM,EAAIswB,IAAIzsB,MAAM,IAAIouB,oBAEzC,IAAI7B,EADD,CAACC,WAAAA,EAAYC,IAAKtwB,EAAIswB,IAAK3R,OAAQ3e,EAAI2e,UACtB,OAAA,UAAA,0BAC5B,OAAA,YAAA,mCAED/O,EAGMqgB,OAAM,WAAA,kBAAZ,aAAA,6BAAA,OAAA,sBAAA,OAAA,GACO3wB,KAAKqf,QAAM7K,SAAA,MAAA,MACR,IAAIqc,GAAmBD,oCAAwC,OAAA,GAElE5wB,KAAKgxB,KAAGxc,SAAA,MAAA,MACL,IAAIqc,GAAmBD,iCAAqC,OAAA,OAAApc,SAE5Ckb,GAAIiB,OAAO3wB,KAAKgxB,IAAKhxB,KAAKqf,QAAO,OAA1C,GAAfrf,KAAK+wB,kBACA/wB,KAAK+wB,YAAUvc,SAAA,MAAA,MACZ,IAAIqc,GAAmBD,yBAA6B,OAAA,IAExD5wB,KAAK+D,MAAIyQ,UAAA,MACE,OADFA,KACPxU,KAAK+D,KAAIyQ,UAAY5H,EAAKpJ,QAAQxD,KAAKgxB,KAAI,QAAA,GAAAxc,yBAAAA,UAAA,MAAA,MACvC,IAAIqc,GAAmBD,4BAAgC,QAAApc,UAAA,MAAA,QAG/DxU,KAAKwD,UAAU,QAAA,0BAEV,GAAI,QAAA,UAAA,+BACZ,OAAA,WAAA,gCAnBW,GAqBZ8M,EAGA4iB,UAAA,WACE,MAAO,CAAClC,IAAKhxB,KAAKgxB,IAAK3R,OAAQrf,KAAKqf,SACrC/O,EAEDnP,SAAA,WACE,OAAOmL,KAAKC,UAAUvM,KAAKkzB,cAG7BpC,EAGaqC,YAAW,WAAA,kBAAxB,WAAyB/uB,GAAC,6BAAA,OAAA,sBAAA,OAAA,yBACjB0sB,EAAcmC,QAAQ7uB,IAAE,OAAA,UAAA,0BAChC,OAAA,YAAA,gCAFuB,GAEvB0sB,EAEYZ,sBAAU,kBAAvB,WAAwB9rB,GAAC,6BAAA,OAAA,sBAAA,OAAA,yBAChB0sB,EAAcmC,QAAQ3mB,KAAKK,MAAMvI,KAAG,OAAA,UAAA,0BAC5C,OAAA,YAAA,mCAAA0sB,EAEYsC,uBAAW,kBAAxB,WAAyBzwB,EAAK4T,EAAK8c,GAAQ,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAve,SACtByB,EAAI/S,UAAS,OAA1BO,SACNpB,EAAIgJ,iBAAiBA,IAAI5H,GAAM6H,IAAIynB,GACnC1wB,EAAIgJ,iBAAiBA,IAAI5H,GAAM6H,IAAIynB,GACnC1wB,EAAIgJ,sBAAsBA,IAAI5H,GAAM4H,iBAAiBA,IAAI3L,KAAKszB,YAAYtjB,OAAOpE,IAAIynB,GACrF1wB,EAAIgJ,sBAAsBA,IAAI5H,GAAM4H,iBAAiBA,IAAI3L,KAAKszB,YAAYtjB,OAAOpE,IAAIynB,GAAU,OAAA,UAAA,+BAChG,OAAA,gBAAA,wDCrUY,CACbtS,MAAAA,EACA1f,OAAAA,EAEA8nB,MAAAA,EACAoK,OAAQ7nB,EACR8nB,QAASvN,EACTwN,OAAQC,GACR3J,SAAAA,GACA/mB,MAAAA,EACA0N,QAAAA,GACA9D,KAAAA,EACA6f,cAAAA,GAEA7oB,IAAKd,EAAIc,IACTd,IAAAA,EACAguB,cAAAA,GACA/f,QAAAA,EACAiQ,KAAAA"} \ No newline at end of file +{"version":3,"file":"iris.cjs.production.min.js","sources":["../src/lodash.ts","../src/util.ts","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../src/session.ts","../src/Key.ts","../src/electron.ts","../src/static.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":["// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n attachments: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["func","limit","inThrottle","args","arguments","context","this","apply","setTimeout","inDebounce","clearTimeout","arr","Math","floor","random","length","obj","keys","newObj","Object","forEach","key","includes","isNode","prototype","toString","call","global","process","e","userAgent","navigator","toLowerCase","isElectron","indexOf","animals","adjectives","gunOnceDefined","node","Promise","resolve","on","val","_k","_a","eve","undefined","off","gunAsAnotherUser","gun","f","gun2","Gun","radisk","peers","_","opt","user","auth","values","back","peer","getHash","str","format","_context","SEA","work","name","hash","Error","_this","base64ToHex","capitalize","s","charAt","toUpperCase","slice","generateName","raw","atob","result","i","hex","charCodeAt","getCaret","el","selectionStart","document","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","injectCss","getElementById","sheet","createElement","id","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sParameterName","sURLVariables","window","location","search","substring","split","decodeURIComponent","formatTime","date","t","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","now","nowStr","Date","toLocaleDateString","dayDifference","round","weekday","getProfileLink","pub","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","isMobile","a","check","vendor","test","substr","throttle","debounce","delay","sample","sampleSize","size","temp","index","shuffled","min","defer","once","called","omit","ELECTRON_GUN_URL","DEFAULT_PEERS","https://gun-rs.iris.to/gun","https://gun-us.herokuapp.com/gun","loc","host","is_localhost_but_not_dev","startsWith","hostname","endsWith","url","enabled","urlRegex","known","add","from","k","visibility","secret","Session","getKey","epub","encrypt","encryptedUrl","encryptedUrlHash","publicState","get","put","lastSeen","toISOString","connect","save","remove","disconnect","peerFromGun","localStorage","setItem","JSON","stringify","getSaved","p","getItem","parse","util","defaults","reset","isMixedContent","disable","protocol","predicate","connectToLocalElectron","max","maxConnectedPeers","_this2","push","checkGunPeerCount","peersFromGun","connectedPeers","filter","wire","constructor","console","log","readyState","bufferedAmount","unconnectedPeers","addedToGun","map","_this3","String","init","setInterval","_this4","opts","myOpts","assign","retry","Infinity","currentUser","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","uuid","Attribute","b","value","guessTypeOf","getUuid","replace","getUniqueIdValidators","isUniqueType","_proto","match","equals","uri","session","DEFAULT_PERMISSIONS","read","write","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","Array","isArray","o","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","then","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","decrypt","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","block","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","_context4","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","_context5","getOurSecretChannelId","pair","_context6","getTheirSecretChannelId","_context7","getChannels","listenToChatLinks","keypair","_context9","getMyChatLinks","seen","handleChannel","ourSecretChannelId","_context8","encryptedChatId","chatId","_context10","_context11","getMessages","_context12","_this5","theirSecretChannelId","data","messageReceived","userState","_context13","selfAuthored","messages","_context14","decrypted","info","getLatestMsg","callbackIfLatest","msg","_this6","latest","time","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","_this7","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","_this8","theirMsgsLastSeenTime","removeParticipant","permissions","_context21","_this9","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","send","_context22","trim","_context23","putGroup","_context25","_context26","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","_context33","_loop","_context32","_this10","_context31","v","_context35","_context34","hasWritePermission","_context38","_this11","_context37","_context40","hasOwnProperty","_context39","_this12","subscription","_context42","theirSecretUuid","_b","_this13","_context41","_context44","_context43","_this14","setTyping","isTyping","timeout","setTypingTimeout","_this15","getTyping","typing","_this16","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","_opts","_context46","chatLinks","chatLinkSubscriptions","links","link","channels","formatChatLink","_this17","encPub","requestId","_context45","createChatLink","_context47","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","close","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","_this18","getActivity","status","isActive","querySelectorAll","getAttribute","lastActive","c","indicator","msgEl","parentElement","msgClass","msgContent","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","state","timerUpdate","pubKey","activityDate","getTime","isOnline","enc","_context48","_context51","_context50","_context49","removeGroupChatLink","removePrivateChatLink","deleteChannel","_context52","deleteGroup","_context53","Map","publicKey","set","notInLocalForage","Set","localForage","config","driver","LOCALSTORAGE","INDEXEDDB","WEBSQL","local","Node","loaded","loadLocalForage","removeItem","has","_context3","newResult","all","_context2","on_subscriptions","_loop3","map_subscriptions","_loop2","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","lastIndexOf","counter","blockedUsers","isBlocked","_v","cache","callbacks","groupName","path","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","reduce","sum","_cached_map","cached","cacheKey","myEvent","item","x","cb","_cached_on","_cached_count","pop","count","_cached_fn","fn","callbackId","myCallbacks","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","publicVapidKey","urlBase64ToUint8Array","base64String","base64","repeat","rawData","outputArray","Uint8Array","_subscribe","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","error","_subscribeToWebPush","serviceWorker","ready","getRegistration","active","postMessage","getSubscription","sub","addWebPushSubscriptionsToChats","channelIds","privateState","_addWebPushSubscription","saveToGun","myKey","_getWebPushSubscriptions","getEpub","getNotificationText","_getNotificationText","notification","profile","action","changeUnseenNotificationCount","change","_sendIrisNotification","recipient","_sendWebPushNotification","subscriptions","title","payload","endpoint","fetch","method","headers","content-type","_ret","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","notificationSetting","getMyName","participantProfiles","icon","silent","onclick","sendWebPushNotification","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","target","sendIrisNotification","changeChatUnseenCount","chat","chatNode","unseen","subscribeToWebPush","getWebPushSubscriptions","removeSubscription","electron","file","multicast","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","shift","Fuse","includeScore","includeMatches","threshold","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","l","autofollow","logOut","_reg$active","unsubscribe","clear","localforage","href","r1","indexedDB","deleteDatabase","r2","r1done","r2done","onerror","onsuccess","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","d","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","matches","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","reject","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","existsSync","privKeyFile","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","sign","verify","errorMsg","ValidationError","SignedMessage","signedData","sig","_validate","_getArray","authorOrRecipient","j","_getIterable","Symbol","iterator","elementValue","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","attr","signerKeyHash","timestamp","isNaN","rating","maxRating","minRating","isPositive","isNegative","isNeutral","create","signingKey","m","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","serialize","deserialize","setReaction","reaction","rootContact","public","private","static","staticState"],"mappings":"y8RACA,MACY,SAACA,EAAgBC,GACzB,IAAIC,EACJ,OAAO,WACL,IAAMC,EAAOC,UACPC,EAAUC,KACXJ,IACHF,EAAKO,MAAMF,EAASF,GACpBD,GAAa,EACbM,YAAW,WAAA,OAAMN,GAAa,IAAOD,QAIjC,SAACD,EAAgBC,GACzB,IAAIQ,EACJ,OAAO,WACL,IAAMN,EAAOC,UACPC,EAAUC,KAChBI,aAAaD,GACbA,EAAaD,YAAW,WAAA,OAAMR,EAAKO,MAAMF,EAASF,KAAOF,OAGrD,SAACU,GAAU,OAAKA,EAAIC,KAAKC,MAAMD,KAAKE,SAAWH,EAAII,YA0BrD,SAACC,EAAUC,GACf,IAAMC,EAAS,GAMf,OALAC,OAAOF,KAAKD,GAAKI,SAAQ,SAAAC,GAClBJ,EAAKK,SAASD,KACjBH,EAAOG,GAAOL,EAAIK,OAGfH,GC/CPK,GAAS,EACb,IACEA,uBAASJ,OAAOK,UAAUC,SAASC,KAAKC,OAAOC,SAC/C,MAAOC,IAET,IAAMC,GAAaP,GAAUQ,WAAaA,UAAUD,WAAaC,UAAUD,UAAUE,cAC/EC,EAAcH,GAAaA,EAAUI,QAAQ,eAAiB,EAmC9DC,EAAU,CACd,UACA,UACA,MACA,SACA,MACA,SACA,OACA,QACA,MACA,SACA,WACA,WACA,YACA,YACA,SACA,YACA,WACA,YACA,aACA,MACA,WACA,WACA,UACA,MACA,QACA,YACA,MACA,SACA,SACA,YACA,WACA,YACA,WACA,OACA,MACA,OACA,SACA,SACA,MACA,SACA,OACA,QACA,YACA,MACA,OACA,SACA,WACA,SACA,QACA,QACA,MACA,YACA,UACA,QACA,QACA,WACA,WACA,UACA,OACA,MACA,WACA,cACA,UACA,SACA,YACA,aACA,YACA,UACA,YACA,UACA,aACA,aACA,WACA,OACA,YACA,QACA,YACA,MACA,SACA,cACA,QACA,SACA,MACA,SACA,OACA,QACA,UACA,WACA,UACA,YACA,OACA,SACA,SACA,YACA,OACA,QACA,WACA,MACA,UACA,SACA,WACA,OACA,YACA,SACA,OACA,QACA,YACA,SACA,UACA,MACA,QACA,WACA,MACA,MACA,SACA,SACA,SACA,QACA,UACA,OACA,WACA,OACA,MACA,aACA,OACA,MACA,OACA,WACA,YACA,UACA,QACA,SACA,SACA,UACA,OACA,WACA,QACA,SACA,UACA,cACA,SACA,OACA,UACA,aACA,OACA,QACA,UACA,UACA,UACA,OACA,UACA,OACA,WACA,QACA,UACA,eACA,WACA,SACA,QACA,WACA,cACA,QACA,SACA,SACA,SACA,SACA,MACA,YACA,aACA,WACA,aACA,OACA,OACA,QACA,MACA,QACA,UACA,UACA,WACA,OACA,QACA,UACA,QACA,UACA,SACA,SACA,OACA,SACA,QACA,UACA,SACA,OACA,QACA,WACA,OACA,QACA,WACA,SACA,SACA,UACA,WACA,SACA,WACA,SACA,YACA,SACA,WACA,aACA,UACA,OACA,SACA,OACA,cACA,OACA,UACA,WACA,SACA,QACA,WACA,OACA,QACA,OACA,SACA,UACA,OACA,cACA,SACA,UACA,UACA,YACA,OACA,UACA,QACA,MACA,KACA,QACA,UACA,WACA,SACA,aACA,YACA,UACA,UACA,UACA,UACA,QACA,WACA,MACA,SACA,OACA,WACA,UACA,YACA,WACA,OACA,YACA,WACA,SACA,QACA,UACA,YACA,SACA,OACA,SACA,QACA,SACA,SACA,SACA,UACA,MACA,cACA,QACA,WACA,UACA,aACA,aACA,SACA,OACA,UACA,YACA,WACA,aACA,SACA,UACA,UACA,WACA,WACA,QACA,QACA,QACA,SACA,WACA,aACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,OACA,UACA,SACA,YACA,QACA,WACA,WACA,WACA,QACA,QACA,WACA,UACA,OACA,QACA,YACA,YACA,OACA,QACA,QACA,YACA,UACA,UACA,OACA,SACA,OACA,QACA,SACA,OACA,WACA,SACA,QACA,OACA,SACA,SACA,gBACA,QACA,SACA,QACA,OACA,UACA,UACA,SACA,OACA,UACA,SACA,QACA,UACA,YACA,UACA,aACA,WACA,OACA,YACA,SACA,aACA,OACA,OACA,UACA,MACA,QACA,SACA,MACA,SACA,UACA,MACA,SACA,SACA,QACA,WACA,QACA,QACA,MACA,QACA,QACA,MACA,WAGIC,EAAa,CACjB,UACA,MACA,WACA,MACA,QACA,WACA,QACA,OACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,OACA,QACA,QACA,OACA,OACA,UACA,SACA,SACA,QACA,SACA,OACA,OACA,SACA,UACA,SACA,QACA,UACA,OACA,QACA,MACA,QACA,SACA,QACA,SACA,MACA,QACA,SACA,UACA,SACA,OACA,OACA,OACA,SACA,MACA,SACA,QACA,UACA,SACA,SACA,QACA,WACA,OACA,UACA,QACA,QACA,OACA,OACA,OACA,SACA,MACA,QACA,QACA,QACA,OACA,QACA,QACA,WACA,QACA,MACA,QACA,QACA,OACA,WACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,OACA,UACA,UACA,OACA,QACA,UACA,QACA,QACA,WACA,aACA,SACA,SACA,OACA,YACA,aACA,YACA,aACA,SACA,YACA,QACA,QACA,OACA,SACA,QACA,OACA,QACA,QACA,SACA,SACA,QACA,YACA,QACA,UACA,aACA,QACA,SACA,SACA,OACA,MACA,MACA,QACA,SACA,UACA,UACA,QACA,QACA,YACA,SACA,QACA,QACA,YACA,QACA,QACA,WACA,SACA,OACA,QACA,SACA,SACA,SACA,QACA,SACA,OACA,MACA,SACA,SACA,QACA,UACA,UACA,WACA,UACA,QACA,MACA,aACA,QACA,YACA,YACA,WACA,SACA,QACA,YACA,WACA,UACA,YACA,YACA,YACA,QACA,cACA,UACA,OACA,SACA,UACA,UACA,aACA,WACA,WACA,WACA,SACA,OACA,MACA,UACA,SACA,aACA,UACA,UACA,YACA,aACA,UACA,YACA,QACA,WACA,UACA,OACA,QACA,WACA,cACA,QACA,WACA,QACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,OACA,WACA,WACA,cACA,cACA,aACA,aACA,aACA,QACA,SACA,aACA,cACA,YACA,eACA,UACA,YACA,OACA,WACA,YACA,OACA,WACA,QACA,SACA,WACA,OACA,QACA,UACA,UACA,YACA,QACA,SACA,OACA,SACA,SACA,QACA,WACA,UACA,WACA,QACA,WACA,QACA,UACA,WACA,aACA,aACA,aACA,YACA,QACA,YACA,UACA,OACA,QACA,OACA,MACA,MACA,QACA,OACA,QACA,YACA,QACA,QACA,SACA,YACA,OACA,QACA,WACA,UACA,QACA,QACA,WACA,MACA,SACA,YACA,OACA,OACA,UACA,OACA,MACA,MACA,SACA,YACA,MACA,OACA,OACA,QACA,QACA,WACA,OACA,SACA,OACA,QACA,aACA,gBACA,UACA,YACA,UACA,OACA,QACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,UACA,QACA,SACA,YACA,SACA,WACA,OACA,UACA,OACA,YACA,OACA,UACA,SACA,SACA,YACA,WACA,UACA,QACA,OACA,UACA,QACA,UACA,QACA,UACA,aACA,OACA,SACA,WACA,YACA,cACA,aACA,SACA,UACA,WACA,SACA,UACA,SACA,SACA,QACA,QACA,QACA,MACA,SACA,UACA,WACA,QACA,QACA,cACA,aACA,QACA,OACA,WACA,cACA,MACA,SACA,QACA,WACA,WACA,aACA,QACA,MACA,UACA,QACA,eACA,SACA,OACA,OACA,QACA,QACA,SACA,YACA,UACA,cACA,WACA,SACA,cACA,OACA,cACA,eACA,WACA,WACA,MACA,WACA,cACA,WACA,UACA,OACA,QACA,OACA,OACA,aACA,OACA,YACA,YACA,QACA,UACA,UACA,SACA,gBACA,WACA,SACA,UACA,SACA,WACA,OACA,OACA,aACA,OACA,WACA,YACA,WACA,WACA,MACA,QACA,UACA,MACA,aACA,SACA,WACA,UACA,WACA,aACA,QACA,OACA,SACA,QACA,SACA,QACA,WACA,SACA,SACA,YACA,WACA,QACA,UACA,WACA,YACA,QACA,OACA,YACA,WACA,YACA,QACA,OACA,SACA,WACA,SACA,QACA,QACA,SACA,UACA,eACA,SACA,QACA,MACA,SACA,QACA,UACA,cACA,SACA,UACA,UACA,aACA,YACA,WACA,QACA,WACA,UACA,UACA,SACA,SACA,aACA,UACA,aACA,aACA,UACA,UACA,MACA,QACA,YACA,cACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,UACA,OACA,OACA,MACA,aACA,OACA,QACA,WACA,aACA,OACA,QACA,QACA,QACA,UACA,SACA,UACA,WACA,QACA,WACA,OACA,OACA,SACA,WACA,UACA,QACA,UACA,QACA,aACA,WACA,QACA,QACA,cACA,OACA,UACA,UACA,OACA,WACA,UACA,QACA,YACA,QACA,UACA,SACA,OACA,WACA,OACA,YACA,QACA,WACA,WACA,QACA,QACA,UACA,SACA,MACA,YACA,WACA,YACA,OACA,QACA,cACA,MACA,UACA,QACA,OACA,WACA,eACA,QACA,OACA,OACA,QACA,UACA,SACA,YACA,gBACA,UACA,UACA,aACA,QACA,QACA,SACA,QACA,WACA,OACA,SACA,UACA,MACA,QACA,OACA,YACA,OACA,YACA,eACA,UACA,UACA,UACA,YACA,QACA,YACA,cACA,UACA,WACA,WACA,eACA,UACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,YACA,UACA,OACA,OACA,SACA,SACA,UACA,OACA,YACA,QACA,YACA,OACA,MACA,cACA,QACA,UACA,UACA,aACA,YACA,SACA,OACA,SACA,YACA,MACA,SACA,QACA,WACA,QACA,QACA,iBACA,SACA,aACA,gBACA,aACA,QACA,QACA,OACA,OACA,YACA,UACA,WACA,aACA,SACA,WACA,OACA,UACA,WACA,aACA,UACA,WACA,UACA,WACA,UACA,WACA,UACA,YACA,MACA,YACA,aACA,YACA,WACA,QACA,WACA,WACA,WACA,MACA,UACA,QACA,WACA,aACA,UACA,UACA,QACA,SACA,iBACA,YACA,YACA,aACA,YACA,OACA,SACA,WACA,SACA,cACA,cACA,OACA,SACA,WACA,UACA,SACA,aACA,UACA,cACA,gBACA,QACA,UACA,WACA,UACA,QACA,QACA,cACA,UACA,UACA,SACA,SACA,OACA,QACA,MACA,QACA,WACA,QACA,gBACA,UACA,aACA,aACA,SACA,WACA,WACA,WACA,QACA,aACA,UACA,OACA,QACA,aACA,QACA,WACA,OACA,WACA,YACA,QACA,aACA,UACA,YACA,SACA,YACA,SACA,SACA,UACA,aACA,eACA,YACA,QACA,WACA,WACA,OACA,WACA,SACA,aACA,YACA,WACA,MACA,gBACA,SACA,aACA,UACA,QACA,gBACA,SACA,WACA,aACA,SACA,WACA,SACA,OACA,WACA,WACA,aACA,WACA,eACA,YACA,UACA,WACA,WACA,aACA,YACA,UACA,OACA,WACA,SACA,QACA,QACA,aACA,QACA,SACA,QACA,YACA,OACA,WACA,SACA,SACA,WACA,SACA,UACA,OACA,WACA,WACA,QACA,SACA,QACA,aACA,YACA,eACA,WACA,cACA,YACA,SACA,eACA,gBACA,WACA,cACA,UACA,YACA,WACA,cACA,YACA,WACA,WACA,YACA,SACA,cACA,aACA,SACA,QACA,eACA,aACA,UACA,WACA,QACA,YACA,cACA,aACA,cACA,SACA,YACA,aACA,aACA,aACA,SACA,aACA,SACA,gBACA,QACA,WACA,aACA,QACA,aACA,kBACA,WACA,UACA,cACA,UACA,WACA,SACA,aACA,QACA,UACA,WACA,QACA,aACA,cACA,UACA,cACA,SACA,WACA,QACA,OACA,QACA,WACA,aACA,UACA,aACA,aACA,YACA,OACA,SACA,gBACA,UACA,aACA,cACA,SACA,SACA,cACA,OACA,UACA,OACA,aACA,QACA,OACA,QACA,SACA,SACA,UACA,SACA,UACA,QACA,SACA,WACA,QACA,YACA,SACA,WACA,SACA,UACA,cACA,WACA,UACA,YACA,WACA,QACA,WACA,OACA,eACA,YACA,cACA,cACA,aACA,WACA,cACA,OACA,QACA,WACA,SACA,WACA,iBACA,UACA,aACA,UACA,YACA,WACA,QACA,aACA,UACA,UACA,MACA,WACA,YACA,cACA,cACA,eACA,cACA,YACA,WACA,UACA,cACA,gBACA,OACA,WACA,UACA,WACA,aACA,aACA,UACA,YACA,aACA,QACA,UACA,WACA,QACA,eACA,OACA,UACA,SACA,cACA,cACA,WACA,QACA,UACA,WACA,QACA,UACA,UACA,SACA,UACA,WACA,UACA,SACA,WACA,YACA,OACA,WACA,SACA,aACA,cACA,YACA,OACA,UACA,QACA,QACA,YACA,SACA,QACA,UACA,MACA,aACA,YACA,UACA,QACA,SACA,aACA,SACA,UACA,YACA,WACA,iBACA,eACA,WACA,QACA,UACA,QACA,UACA,WACA,QACA,QACA,WACA,WACA,QACA,WACA,OACA,UACA,gBACA,UACA,UACA,aACA,UACA,SACA,cACA,gBACA,eACA,aACA,aACA,QACA,WACA,UACA,SACA,UACA,SACA,OACA,UACA,aACA,eACA,QACA,YACA,WACA,aACA,eACA,OACA,aACA,UACA,UACA,aACA,QACA,QACA,WACA,gBACA,WACA,QACA,eACA,WACA,aACA,UACA,aACA,YACA,UACA,SACA,cACA,UACA,WACA,UACA,YACA,UACA,SACA,UACA,UACA,WACA,cACA,WACA,gBACA,aACA,QACA,WACA,YACA,aACA,SACA,SACA,YACA,WACA,SACA,SACA,SACA,eACA,QACA,aACA,YACA,OACA,YACA,SACA,QACA,UACA,YACA,aACA,WACA,eACA,gBACA,SACA,aACA,QACA,WACA,SACA,gBACA,SACA,aACA,UACA,QACA,SACA,cACA,aACA,aACA,eACA,WACA,YACA,UACA,aACA,UACA,WACA,UACA,QACA,SACA,YACA,WACA,OACA,WACA,UACA,OACA,UACA,YACA,cACA,aACA,SACA,YACA,aACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,UACA,UACA,SACA,cACA,YACA,YACA,WACA,SACA,UACA,SACA,YACA,UACA,cACA,SACA,aACA,MACA,WACA,OACA,KACA,WACA,aACA,UACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,aACA,YACA,eACA,cACA,WACA,OACA,aACA,SACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,SACA,MACA,QACA,WACA,aACA,YACA,WACA,WACA,QACA,YACA,UACA,eACA,WACA,WACA,eACA,aACA,UACA,QACA,UACA,UACA,WACA,aACA,SACA,UACA,SACA,UACA,SACA,SACA,UACA,eACA,YACA,UACA,YACA,SACA,cACA,YACA,WACA,aACA,SACA,UACA,YACA,iBACA,QACA,SACA,WACA,cACA,QACA,OACA,WACA,cACA,aACA,aACA,aACA,YACA,QACA,aACA,QACA,SACA,YACA,OACA,UACA,WACA,SACA,YACA,QACA,UACA,OACA,YACA,YACA,WACA,OACA,SACA,UACA,UACA,WACA,YACA,aACA,WACA,cACA,SACA,OACA,cACA,OACA,WACA,UACA,OACA,OACA,MACA,SACA,QACA,OACA,eACA,YACA,OACA,QACA,WACA,QACA,UACA,YACA,SACA,SACA,WACA,SACA,QACA,QACA,SACA,WACA,UACA,OACA,OACA,OACA,WACA,OACA,UACA,QACA,SACA,YACA,WACA,WACA,YACA,SACA,QACA,QACA,aACA,QACA,QACA,SACA,SACA,QACA,SACA,YACA,WACA,SACA,UACA,OACA,YACA,UACA,MACA,SACA,YACA,MACA,QACA,OACA,SACA,SACA,QACA,QACA,OACA,MACA,QACA,WACA,QACA,QACA,QACA,WACA,WACA,SACA,WACA,QACA,WACA,QACA,UACA,QACA,OACA,OACA,OACA,cACA,UACA,OACA,SACA,QACA,QACA,MACA,OACA,OACA,QACA,aACA,MACA,SACA,WACA,SACA,WACA,UACA,SACA,SACA,QACA,QACA,WACA,QACA,OACA,QACA,MACA,UACA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"} \ No newline at end of file diff --git a/iris-lib/dist/iris.esm.js.map b/iris-lib/dist/iris.esm.js.map index 8d5224f1..3b557651 100644 --- a/iris-lib/dist/iris.esm.js.map +++ b/iris-lib/dist/iris.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"iris.esm.js","sources":["../src/lodash.ts","../src/util.ts","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../src/electron.ts","../src/session.ts","../src/static.ts","../src/Key.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":["// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["throttle","func","limit","inThrottle","args","arguments","context","apply","setTimeout","debounce","inDebounce","clearTimeout","sample","arr","Math","floor","random","length","sampleSize","size","shuffled","slice","i","min","temp","index","defer","once","called","omit","obj","keys","newObj","Object","forEach","key","includes","defaults","undefined","pickBy","predicate","isNode","prototype","toString","call","global","process","e","userAgent","navigator","toLowerCase","isElectron","indexOf","isMobile","check","a","test","substr","vendor","gunAsAnotherUser","gun","f","gun2","Gun","radisk","peers","_","opt","user","auth","values","back","peer","on","gunOnceDefined","node","Promise","resolve","val","_k","_a","eve","off","animals","adjectives","getHash","str","format","SEA","work","name","hash","Error","base64ToHex","capitalize","s","charAt","toUpperCase","generateName","raw","atob","result","hex","charCodeAt","getCaret","el","selectionStart","document","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","injectCss","elementId","getElementById","sheet","createElement","id","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sPageURL","window","location","search","substring","sURLVariables","split","sParameterName","decodeURIComponent","formatTime","date","t","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","now","nowStr","Date","toLocaleDateString","dayDifference","round","weekday","getProfileLink","pub","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","delay","ELECTRON_GUN_URL","maxConnectedPeers","DEFAULT_PEERS","loc","host","is_localhost_but_not_dev","startsWith","hostname","endsWith","url","enabled","urlRegex","known","add","from","k","visibility","secret","Session","getKey","epub","encrypt","encryptedUrl","encryptedUrlHash","publicState","get","put","lastSeen","toISOString","connect","save","remove","disconnect","peerFromGun","localStorage","setItem","JSON","stringify","getSaved","p","getItem","parse","util","reset","isMixedContent","disable","protocol","connectToLocalElectron","max","push","checkGunPeerCount","peersFromGun","connectedPeers","filter","wire","constructor","console","log","readyState","bufferedAmount","unconnectedPeers","addedToGun","map","mixedContent","String","init","setInterval","opts","myOpts","assign","retry","Infinity","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","uuid","Attribute","b","value","guessTypeOf","getUuid","replace","getUniqueIdValidators","isUniqueType","match","equals","uri","currentUser","session","DEFAULT_PERMISSIONS","read","write","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","Array","isArray","o","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","then","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","decrypt","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","block","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","getOurSecretChannelId","pair","getTheirSecretChannelId","getChannels","listenToChatLinks","keypair","getMyChatLinks","seen","handleChannel","ourSecretChannelId","encryptedChatId","chatId","getMessages","theirSecretChannelId","data","messageReceived","userState","selfAuthored","messages","decrypted","info","getLatestMsg","callbackIfLatest","msg","latest","time","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","theirMsgsLastSeenTime","removeParticipant","permissions","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","send","trim","putGroup","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","v","hasWritePermission","hasOwnProperty","subscription","theirSecretUuid","_b","setTyping","isTyping","timeout","setTypingTimeout","getTyping","typing","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","chatLinks","chatLinkSubscriptions","links","link","channels","formatChatLink","encPub","requestId","createChatLink","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","close","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","getActivity","status","isActive","undelivered","querySelectorAll","getAttribute","lastActive","c","unseen","indicator","msgEl","parentElement","msgClass","msgContent","seenIndicator","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","state","timerUpdate","pubKey","activityDate","getTime","isOnline","enc","removeGroupChatLink","removePrivateChatLink","deleteChannel","deleteGroup","Map","publicKey","set","LOCALFORAGE_NULL","notInLocalForage","Set","localForage","config","driver","LOCALSTORAGE","INDEXEDDB","WEBSQL","Node","loaded","loadLocalForage","removeItem","has","newResult","all","on_subscriptions","map_subscriptions","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","lastIndexOf","counter","child","local","blockedUsers","isBlocked","_v","cache","callbacks","groupName","path","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","reduce","sum","_cached_map","cached","cacheKey","myEvent","x","item","cb","_cached_on","_cached_count","count","pop","_cached_fn","fn","callbackId","myCallbacks","NOTIFICATION_SERVICE_URL","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","privateState","notificationSetting","getMyName","shouldDesktopNotify","shouldAudioNotify","title","participantProfiles","desktopNotification","icon","silent","onclick","changeUnseenNotificationCount","changeChatUnseenMsgsCount","change","chat","chatNode","publicVapidKey","urlBase64ToUint8Array","base64String","padding","repeat","base64","rawData","outputArray","Uint8Array","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","error","subscribeToWebPush","serviceWorker","ready","getRegistration","active","postMessage","getSubscription","sub","addWebPushSubscriptionsToChats","channelIds","removeSubscription","saveToGun","myKey","getWebPushSubscriptions","getEpub","getNotificationText","notification","profile","action","eventText","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","target","sendIrisNotification","recipient","sendWebPushNotification","shouldWebPush","subscriptions","payload","endpoint","fetch","method","headers","changeChatUnseenCount","electron","file","multicast","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","shift","includeScore","includeMatches","threshold","Fuse","leading","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","l","autofollow","logOut","unsubscribe","clear","localforage","href","r1","indexedDB","deleteDatabase","r2","r1done","r2done","onerror","onsuccess","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","d","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","matches","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","reject","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","privKeyFile","existsSync","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","sign","sig","verify","errorMsg","ValidationError","SignedMessage","signedData","_validate","_getArray","authorOrRecipient","j","elementValue","_getIterable","Symbol","iterator","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","signerKeyHash","attr","timestamp","isNaN","rating","maxRating","minRating","isPositive","isNegative","isNeutral","create","signingKey","m","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","serialize","deserialize","setReaction","reaction","rootContact","staticState"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iris.esm.js","sources":["../src/lodash.ts","../src/util.ts","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../src/electron.ts","../src/session.ts","../src/static.ts","../src/Key.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":["// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n attachments: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["throttle","func","limit","inThrottle","args","arguments","context","apply","setTimeout","debounce","inDebounce","clearTimeout","sample","arr","Math","floor","random","length","sampleSize","size","shuffled","slice","i","min","temp","index","defer","once","called","omit","obj","keys","newObj","Object","forEach","key","includes","defaults","undefined","pickBy","predicate","isNode","prototype","toString","call","global","process","e","userAgent","navigator","toLowerCase","isElectron","indexOf","isMobile","check","a","test","substr","vendor","gunAsAnotherUser","gun","f","gun2","Gun","radisk","peers","_","opt","user","auth","values","back","peer","on","gunOnceDefined","node","Promise","resolve","val","_k","_a","eve","off","animals","adjectives","getHash","str","format","SEA","work","name","hash","Error","base64ToHex","capitalize","s","charAt","toUpperCase","generateName","raw","atob","result","hex","charCodeAt","getCaret","el","selectionStart","document","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","injectCss","elementId","getElementById","sheet","createElement","id","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sPageURL","window","location","search","substring","sURLVariables","split","sParameterName","decodeURIComponent","formatTime","date","t","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","now","nowStr","Date","toLocaleDateString","dayDifference","round","weekday","getProfileLink","pub","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","delay","ELECTRON_GUN_URL","maxConnectedPeers","DEFAULT_PEERS","loc","host","is_localhost_but_not_dev","startsWith","hostname","endsWith","url","enabled","urlRegex","known","add","from","k","visibility","secret","Session","getKey","epub","encrypt","encryptedUrl","encryptedUrlHash","publicState","get","put","lastSeen","toISOString","connect","save","remove","disconnect","peerFromGun","localStorage","setItem","JSON","stringify","getSaved","p","getItem","parse","util","reset","isMixedContent","disable","protocol","connectToLocalElectron","max","push","checkGunPeerCount","peersFromGun","connectedPeers","filter","wire","constructor","console","log","readyState","bufferedAmount","unconnectedPeers","addedToGun","map","mixedContent","String","init","setInterval","opts","myOpts","assign","retry","Infinity","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","uuid","Attribute","b","value","guessTypeOf","getUuid","replace","getUniqueIdValidators","isUniqueType","match","equals","uri","currentUser","session","DEFAULT_PERMISSIONS","read","write","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","Array","isArray","o","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","then","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","decrypt","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","block","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","getOurSecretChannelId","pair","getTheirSecretChannelId","getChannels","listenToChatLinks","keypair","getMyChatLinks","seen","handleChannel","ourSecretChannelId","encryptedChatId","chatId","getMessages","theirSecretChannelId","data","messageReceived","userState","selfAuthored","messages","decrypted","info","getLatestMsg","callbackIfLatest","msg","latest","time","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","theirMsgsLastSeenTime","removeParticipant","permissions","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","send","trim","putGroup","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","v","hasWritePermission","hasOwnProperty","subscription","theirSecretUuid","_b","setTyping","isTyping","timeout","setTypingTimeout","getTyping","typing","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","chatLinks","chatLinkSubscriptions","links","link","channels","formatChatLink","encPub","requestId","createChatLink","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","close","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","getActivity","status","isActive","undelivered","querySelectorAll","getAttribute","lastActive","c","unseen","indicator","msgEl","parentElement","msgClass","msgContent","seenIndicator","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","state","timerUpdate","pubKey","activityDate","getTime","isOnline","enc","removeGroupChatLink","removePrivateChatLink","deleteChannel","deleteGroup","Map","publicKey","set","LOCALFORAGE_NULL","notInLocalForage","Set","localForage","config","driver","LOCALSTORAGE","INDEXEDDB","WEBSQL","Node","loaded","loadLocalForage","removeItem","has","newResult","all","on_subscriptions","map_subscriptions","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","lastIndexOf","counter","child","local","blockedUsers","isBlocked","_v","cache","callbacks","groupName","path","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","reduce","sum","_cached_map","cached","cacheKey","myEvent","x","item","cb","_cached_on","_cached_count","count","pop","_cached_fn","fn","callbackId","myCallbacks","NOTIFICATION_SERVICE_URL","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","privateState","notificationSetting","getMyName","shouldDesktopNotify","shouldAudioNotify","title","participantProfiles","desktopNotification","icon","silent","onclick","changeUnseenNotificationCount","changeChatUnseenMsgsCount","change","chat","chatNode","publicVapidKey","urlBase64ToUint8Array","base64String","padding","repeat","base64","rawData","outputArray","Uint8Array","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","error","subscribeToWebPush","serviceWorker","ready","getRegistration","active","postMessage","getSubscription","sub","addWebPushSubscriptionsToChats","channelIds","removeSubscription","saveToGun","myKey","getWebPushSubscriptions","getEpub","getNotificationText","notification","profile","action","eventText","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","target","sendIrisNotification","recipient","sendWebPushNotification","shouldWebPush","subscriptions","payload","endpoint","fetch","method","headers","changeChatUnseenCount","electron","file","multicast","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","shift","includeScore","includeMatches","threshold","Fuse","leading","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","l","autofollow","logOut","unsubscribe","clear","localforage","href","r1","indexedDB","deleteDatabase","r2","r1done","r2done","onerror","onsuccess","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","d","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","matches","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","reject","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","privKeyFile","existsSync","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","sign","sig","verify","errorMsg","ValidationError","SignedMessage","signedData","_validate","_getArray","authorOrRecipient","j","elementValue","_getIterable","Symbol","iterator","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","signerKeyHash","attr","timestamp","isNaN","rating","maxRating","minRating","isPositive","isNegative","isNeutral","create","signingKey","m","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","serialize","deserialize","setReaction","reaction","rootContact","staticState"],"mappings":"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"} \ No newline at end of file diff --git a/iris-lib/dist/iris.umd.development.js.map b/iris-lib/dist/iris.umd.development.js.map index 2af403cd..7963361a 100644 --- a/iris-lib/dist/iris.umd.development.js.map +++ b/iris-lib/dist/iris.umd.development.js.map @@ -1 +1 @@ -{"version":3,"file":"iris.umd.development.js","sources":["../node_modules/gun/gun.js","../node_modules/gun/sea.js","../src/lodash.ts","../src/util.ts","../node_modules/gun/lib/yson.js","../node_modules/gun/lib/radix.js","../node_modules/gun/lib/radisk.js","../node_modules/gun/lib/store.js","../node_modules/gun/lib/rindexed.js","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../node_modules/localforage/dist/localforage.js","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../node_modules/fuse.js/dist/fuse.esm.js","../src/electron.ts","../src/session.ts","../src/static.ts","../src/Key.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":[";(function(){\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n\t;USE(function(module){\n\t\t// Shim for generic javascript utilities.\n\t\tString.random = function(l, c){\n\t\t\tvar s = '';\n\t\t\tl = l || 24; // you are not going to make a 0 length random number, so no need to check type\n\t\t\tc = c || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz';\n\t\t\twhile(l-- > 0){ s += c.charAt(Math.floor(Math.random() * c.length)) }\n\t\t\treturn s;\n\t\t}\n\t\tString.match = function(t, o){ var tmp, u;\n\t\t\tif('string' !== typeof t){ return false }\n\t\t\tif('string' == typeof o){ o = {'=': o} }\n\t\t\to = o || {};\n\t\t\ttmp = (o['='] || o['*'] || o['>'] || o['<']);\n\t\t\tif(t === tmp){ return true }\n\t\t\tif(u !== o['=']){ return false }\n\t\t\ttmp = (o['*'] || o['>']);\n\t\t\tif(t.slice(0, (tmp||'').length) === tmp){ return true }\n\t\t\tif(u !== o['*']){ return false }\n\t\t\tif(u !== o['>'] && u !== o['<']){\n\t\t\t\treturn (t >= o['>'] && t <= o['<'])? true : false;\n\t\t\t}\n\t\t\tif(u !== o['>'] && t >= o['>']){ return true }\n\t\t\tif(u !== o['<'] && t <= o['<']){ return true }\n\t\t\treturn false;\n\t\t}\n\t\tString.hash = function(s, c){ // via SO\n\t\t\tif(typeof s !== 'string'){ return }\n\t c = c || 0; // CPU schedule hashing by\n\t if(!s.length){ return c }\n\t for(var i=0,l=s.length,n; i= (check.now() - l)) && c++ < 3333){ f(); return }\n\t\t\t\tsI(function(){ l = check.now(); f() },c=0)\n\t\t\t}\n\t\t}());\n\t\t;(function(){ // Too many polls block, this \"threads\" them in turns over a single thread in time.\n\t\t\tvar sT = setTimeout, t = sT.turn = sT.turn || function(f){ 1 == s.push(f) && p(T) }\n\t\t\t, s = t.s = [], p = sT.poll, i = 0, f, T = function(){\n\t\t\t\tif(f = s[i++]){ f() }\n\t\t\t\tif(i == s.length || 99 == i){\n\t\t\t\t\ts = t.s = s.slice(i);\n\t\t\t\t\ti = 0;\n\t\t\t\t}\n\t\t\t\tif(s.length){ p(T) }\n\t\t\t}\n\t\t}());\n\t\t;(function(){\n\t\t\tvar u, sT = setTimeout, T = sT.turn;\n\t\t\t(sT.each = sT.each || function(l,f,e,S){ S = S || 9; (function t(s,L,r){\n\t\t\t if(L = (s = (l||[]).splice(0,S)).length){\n\t\t\t \tfor(var i = 0; i < L; i++){\n\t\t\t \t\tif(u !== (r = f(s[i]))){ break }\n\t\t\t \t}\n\t\t\t \tif(u === r){ T(t); return }\n\t\t\t } e && e(r);\n\t\t\t}())})();\n\t\t}());\n\t})(USE, './shim');\n\n\t;USE(function(module){\n\t\t// On event emitter generic javascript utility.\n\t\tmodule.exports = function onto(tag, arg, as){\n\t\t\tif(!tag){ return {to: onto} }\n\t\t\tvar u, f = 'function' == typeof arg, tag = (this.tag || (this.tag = {}))[tag] || f && (\n\t\t\t\tthis.tag[tag] = {tag: tag, to: onto._ = { next: function(arg){ var tmp;\n\t\t\t\t\tif(tmp = this.to){ tmp.next(arg) }\n\t\t\t}}});\n\t\t\tif(f){\n\t\t\t\tvar be = {\n\t\t\t\t\toff: onto.off ||\n\t\t\t\t\t(onto.off = function(){\n\t\t\t\t\t\tif(this.next === onto._.next){ return !0 }\n\t\t\t\t\t\tif(this === this.the.last){\n\t\t\t\t\t\t\tthis.the.last = this.back;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.to.back = this.back;\n\t\t\t\t\t\tthis.next = onto._.next;\n\t\t\t\t\t\tthis.back.to = this.to;\n\t\t\t\t\t\tif(this.the.last === this.the){\n\t\t\t\t\t\t\tdelete this.on.tag[this.the.tag];\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tto: onto._,\n\t\t\t\t\tnext: arg,\n\t\t\t\t\tthe: tag,\n\t\t\t\t\ton: this,\n\t\t\t\t\tas: as,\n\t\t\t\t};\n\t\t\t\t(be.back = tag.last || tag).to = be;\n\t\t\t\treturn tag.last = be;\n\t\t\t}\n\t\t\tif((tag = tag.to) && u !== arg){ tag.next(arg) }\n\t\t\treturn tag;\n\t\t};\n\t})(USE, './onto');\n\n\t;USE(function(module){\n\t\t// Valid values are a subset of JSON: null, binary, number (!Infinity), text,\n\t\t// or a soul relation. Arrays need special algorithms to handle concurrency,\n\t\t// so they are not supported directly. Use an extension that supports them if\n\t\t// needed but research their problems first.\n\t\tmodule.exports = function (v) {\n\t\t // \"deletes\", nulling out keys.\n\t\t return v === null ||\n\t\t\t\"string\" === typeof v ||\n\t\t\t\"boolean\" === typeof v ||\n\t\t\t// we want +/- Infinity to be, but JSON does not support it, sad face.\n\t\t\t// can you guess what v === v checks for? ;)\n\t\t\t(\"number\" === typeof v && v != Infinity && v != -Infinity && v === v) ||\n\t\t\t(!!v && \"string\" == typeof v[\"#\"] && Object.keys(v).length === 1 && v[\"#\"]);\n\t\t}\n\t})(USE, './valid');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\t\tfunction State(){\n\t\t\tvar t = +new Date;\n\t\t\tif(last < t){\n\t\t\t\treturn N = 0, last = t + State.drift;\n\t\t\t}\n\t\t\treturn last = t + ((N += 1) / D) + State.drift;\n\t\t}\n\t\tState.drift = 0;\n\t\tvar NI = -Infinity, N = 0, D = 999, last = NI, u; // WARNING! In the future, on machines that are D times faster than 2016AD machines, you will want to increase D by another several orders of magnitude so the processing speed never out paces the decimal resolution (increasing an integer effects the state accuracy).\n\t\tState.is = function(n, k, o){ // convenience function to get the state on a key on a node and return it.\n\t\t\tvar tmp = (k && n && n._ && n._['>']) || o;\n\t\t\tif(!tmp){ return }\n\t\t\treturn ('number' == typeof (tmp = tmp[k]))? tmp : NI;\n\t\t}\n\t\tState.ify = function(n, k, s, v, soul){ // put a key's state on a node.\n\t\t\t(n = n || {})._ = n._ || {}; // safety check or init.\n\t\t\tif(soul){ n._['#'] = soul } // set a soul if specified.\n\t\t\tvar tmp = n._['>'] || (n._['>'] = {}); // grab the states data.\n\t\t\tif(u !== k && k !== '_'){\n\t\t\t\tif('number' == typeof s){ tmp[k] = s } // add the valid state.\n\t\t\t\tif(u !== v){ n[k] = v } // Note: Not its job to check for valid values!\n\t\t\t}\n\t\t\treturn n;\n\t\t}\n\t\tmodule.exports = State;\n\t})(USE, './state');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\t\tfunction Dup(opt){\n\t\t\tvar dup = {s:{}}, s = dup.s;\n\t\t\topt = opt || {max: 999, age: 1000 * 9};//*/ 1000 * 9 * 3};\n\t\t\tdup.check = function(id){\n\t\t\t\tif(!s[id]){ return false }\n\t\t\t\treturn dt(id);\n\t\t\t}\n\t\t\tvar dt = dup.track = function(id){\n\t\t\t\tvar it = s[id] || (s[id] = {});\n\t\t\t\tit.was = dup.now = +new Date;\n\t\t\t\tif(!dup.to){ dup.to = setTimeout(dup.drop, opt.age + 9) }\n\t\t\t\tif(dt.ed){ dt.ed(id) }\n\t\t\t\treturn it;\n\t\t\t}\n\t\t\tdup.drop = function(age){\n\t\t\t\tdup.to = null;\n\t\t\t\tdup.now = +new Date;\n\t\t\t\tvar l = Object.keys(s);\n\t\t\t\tconsole.STAT && console.STAT(dup.now, +new Date - dup.now, 'dup drop keys'); // prev ~20% CPU 7% RAM 300MB // now ~25% CPU 7% RAM 500MB\n\t\t\t\tsetTimeout.each(l, function(id){ var it = s[id]; // TODO: .keys( is slow?\n\t\t\t\t\tif(it && (age || opt.age) > (dup.now - it.was)){ return }\n\t\t\t\t\tdelete s[id];\n\t\t\t\t},0,99);\n\t\t\t}\n\t\t\treturn dup;\n\t\t}\n\t\tmodule.exports = Dup;\n\t})(USE, './dup');\n\n\t;USE(function(module){\n\t\t// request / response module, for asking and acking messages.\n\t\tUSE('./onto'); // depends upon onto!\n\t\tmodule.exports = function ask(cb, as){\n\t\t\tif(!this.on){ return }\n\t\t\tvar lack = (this.opt||{}).lack || 9000;\n\t\t\tif(!('function' == typeof cb)){\n\t\t\t\tif(!cb){ return }\n\t\t\t\tvar id = cb['#'] || cb, tmp = (this.tag||'')[id];\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tif(as){\n\t\t\t\t\ttmp = this.on(id, as);\n\t\t\t\t\tclearTimeout(tmp.err);\n\t\t\t\t\ttmp.err = setTimeout(function(){ tmp.off() }, lack);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar id = (as && as['#']) || random(9);\n\t\t\tif(!cb){ return id }\n\t\t\tvar to = this.on(id, cb, as);\n\t\t\tto.err = to.err || setTimeout(function(){ to.off();\n\t\t\t\tto.next({err: \"Error: No ACK yet.\", lack: true});\n\t\t\t}, lack);\n\t\t\treturn id;\n\t\t}\n\t\tvar random = String.random || function(){ return Math.random().toString(36).slice(2) }\n\t})(USE, './ask');\n\n\t;USE(function(module){\n\n\t\tfunction Gun(o){\n\t\t\tif(o instanceof Gun){ return (this._ = {$: this}).$ }\n\t\t\tif(!(this instanceof Gun)){ return new Gun(o) }\n\t\t\treturn Gun.create(this._ = {$: this, opt: o});\n\t\t}\n\n\t\tGun.is = function($){ return ($ instanceof Gun) || ($ && $._ && ($ === $._.$)) || false }\n\n\t\tGun.version = 0.2020;\n\n\t\tGun.chain = Gun.prototype;\n\t\tGun.chain.toJSON = function(){};\n\n\t\tUSE('./shim');\n\t\tGun.valid = USE('./valid');\n\t\tGun.state = USE('./state');\n\t\tGun.on = USE('./onto');\n\t\tGun.dup = USE('./dup');\n\t\tGun.ask = USE('./ask');\n\n\t\t;(function(){\n\t\t\tGun.create = function(at){\n\t\t\t\tat.root = at.root || at;\n\t\t\t\tat.graph = at.graph || {};\n\t\t\t\tat.on = at.on || Gun.on;\n\t\t\t\tat.ask = at.ask || Gun.ask;\n\t\t\t\tat.dup = at.dup || Gun.dup();\n\t\t\t\tvar gun = at.$.opt(at.opt);\n\t\t\t\tif(!at.once){\n\t\t\t\t\tat.on('in', universe, at);\n\t\t\t\t\tat.on('out', universe, at);\n\t\t\t\t\tat.on('put', map, at);\n\t\t\t\t\tGun.on('create', at);\n\t\t\t\t\tat.on('create', at);\n\t\t\t\t}\n\t\t\t\tat.once = 1;\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tfunction universe(msg){\n\t\t\t\t// TODO: BUG! msg.out = null being set!\n\t\t\t\t//if(!F){ var eve = this; setTimeout(function(){ universe.call(eve, msg,1) },Math.random() * 100);return; } // ADD F TO PARAMS!\n\t\t\t\tif(!msg){ return }\n\t\t\t\tif(msg.out === universe){ this.to.next(msg); return }\n\t\t\t\tvar eve = this, as = eve.as, at = as.at || as, gun = at.$, dup = at.dup, tmp, DBG = msg.DBG;\n\t\t\t\t(tmp = msg['#']) || (tmp = msg['#'] = text_rand(9));\n\t\t\t\tif(dup.check(tmp)){ return } dup.track(tmp);\n\t\t\t\ttmp = msg._; msg._ = ('function' == typeof tmp)? tmp : function(){};\n\t\t\t\t(msg.$ && (msg.$ === (msg.$._||'').$)) || (msg.$ = gun);\n\t\t\t\tif(msg['@'] && !msg.put){ ack(msg) }\n\t\t\t\tif(!at.ask(msg['@'], msg)){ // is this machine listening for an ack?\n\t\t\t\t\tDBG && (DBG.u = +new Date);\n\t\t\t\t\tif(msg.put){ put(msg); return } else\n\t\t\t\t\tif(msg.get){ Gun.on.get(msg, gun) }\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.uc = +new Date);\n\t\t\t\teve.to.next(msg);\n\t\t\t\tDBG && (DBG.ua = +new Date);\n\t\t\t\tif(msg.nts || msg.NTS){ return } // TODO: This shouldn't be in core, but fast way to prevent NTS spread. Delete this line after all peers have upgraded to newer versions.\n\t\t\t\tmsg.out = universe; at.on('out', msg);\n\t\t\t\tDBG && (DBG.ue = +new Date);\n\t\t\t}\n\t\t\tfunction put(msg){\n\t\t\t\tif(!msg){ return }\n\t\t\t\tvar ctx = msg._||'', root = ctx.root = ((ctx.$ = msg.$||'')._||'').root;\n\t\t\t\tif(msg['@'] && ctx.faith && !ctx.miss){ // TODO: AXE may split/route based on 'put' what should we do here? Detect @ in AXE? I think we don't have to worry, as DAM will route it on @.\n\t\t\t\t\tmsg.out = universe;\n\t\t\t\t\troot.on('out', msg);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.latch = root.hatch; ctx.match = root.hatch = [];\n\t\t\t\tvar put = msg.put;\n\t\t\t\tvar DBG = ctx.DBG = msg.DBG, S = +new Date; CT = CT || S;\n\t\t\t\tif(put['#'] && put['.']){ /*root && root.on('put', msg);*/ return } // TODO: BUG! This needs to call HAM instead.\n\t\t\t\tDBG && (DBG.p = S);\n\t\t\t\tctx['#'] = msg['#'];\n\t\t\t\tctx.msg = msg;\n\t\t\t\tctx.all = 0;\n\t\t\t\tctx.stun = 1;\n\t\t\t\tvar nl = Object.keys(put);//.sort(); // TODO: This is unbounded operation, large graphs will be slower. Write our own CPU scheduled sort? Or somehow do it in below? Keys itself is not O(1) either, create ES5 shim over ?weak map? or custom which is constant.\n\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).pk = +new Date) - S, 'put sort');\n\t\t\t\tvar ni = 0, nj, kl, soul, node, states, err, tmp;\n\t\t\t\t(function pop(o){\n\t\t\t\t\tif(nj != ni){ nj = ni;\n\t\t\t\t\t\tif(!(soul = nl[ni])){\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).pd = +new Date) - S, 'put');\n\t\t\t\t\t\t\tfire(ctx);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!(node = put[soul])){ err = ERR+cut(soul)+\"no node.\" } else\n\t\t\t\t\t\tif(!(tmp = node._)){ err = ERR+cut(soul)+\"no meta.\" } else\n\t\t\t\t\t\tif(soul !== tmp['#']){ err = ERR+cut(soul)+\"soul not same.\" } else\n\t\t\t\t\t\tif(!(states = tmp['>'])){ err = ERR+cut(soul)+\"no state.\" }\n\t\t\t\t\t\tkl = Object.keys(node||{}); // TODO: .keys( is slow\n\t\t\t\t\t}\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tmsg.err = ctx.err = err; // invalid data should error and stun the message.\n\t\t\t\t\t\tfire(ctx);\n\t\t\t\t\t\t//console.log(\"handle error!\", err) // handle!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar i = 0, key; o = o || 0;\n\t\t\t\t\twhile(o++ < 9 && (key = kl[i++])){\n\t\t\t\t\t\tif('_' === key){ continue }\n\t\t\t\t\t\tvar val = node[key], state = states[key];\n\t\t\t\t\t\tif(u === state){ err = ERR+cut(key)+\"on\"+cut(soul)+\"no state.\"; break }\n\t\t\t\t\t\tif(!valid(val)){ err = ERR+cut(key)+\"on\"+cut(soul)+\"bad \"+(typeof val)+cut(val); break }\n\t\t\t\t\t\t//ctx.all++; //ctx.ack[soul+key] = '';\n\t\t\t\t\t\tham(val, key, soul, state, msg);\n\t\t\t\t\t\t++C; // courtesy count;\n\t\t\t\t\t}\n\t\t\t\t\tif((kl = kl.slice(i)).length){ turn(pop); return }\n\t\t\t\t\t++ni; kl = null; pop(o);\n\t\t\t\t}());\n\t\t\t} Gun.on.put = put;\n\t\t\t// TODO: MARK!!! clock below, reconnect sync, SEA certify wire merge, User.auth taking multiple times, // msg put, put, say ack, hear loop...\n\t\t\t// WASIS BUG! local peer not ack. .off other people: .open\n\t\t\tfunction ham(val, key, soul, state, msg){\n\t\t\t\tvar ctx = msg._||'', root = ctx.root, graph = root.graph, lot, tmp;\n\t\t\t\tvar vertex = graph[soul] || empty, was = state_is(vertex, key, 1), known = vertex[key];\n\t\t\t\t\n\t\t\t\tvar DBG = ctx.DBG; if(tmp = console.STAT){ if(!graph[soul] || !known){ tmp.has = (tmp.has || 0) + 1 } }\n\n\t\t\t\tvar now = State(), u;\n\t\t\t\tif(state > now){\n\t\t\t\t\tsetTimeout(function(){ ham(val, key, soul, state, msg) }, (tmp = state - now) > MD? MD : tmp); // Max Defer 32bit. :(\n\t\t\t\t\tconsole.STAT && console.STAT(((DBG||ctx).Hf = +new Date), tmp, 'future');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(state < was){ /*old;*/ if(true || !ctx.miss){ return } } // but some chains have a cache miss that need to re-fire. // TODO: Improve in future. // for AXE this would reduce rebroadcast, but GUN does it on message forwarding. // TURNS OUT CACHE MISS WAS NOT NEEDED FOR NEW CHAINS ANYMORE!!! DANGER DANGER DANGER, ALWAYS RETURN! (or am I missing something?)\n\t\t\t\tif(!ctx.faith){ // TODO: BUG? Can this be used for cache miss as well? // Yes this was a bug, need to check cache miss for RAD tests, but should we care about the faith check now? Probably not.\n\t\t\t\t\tif(state === was && (val === known || L(val) <= L(known))){ /*console.log(\"same\");*/ /*same;*/ if(!ctx.miss){ return } } // same\n\t\t\t\t}\n\t\t\t\tctx.stun++; // TODO: 'forget' feature in SEA tied to this, bad approach, but hacked in for now. Any changes here must update there.\n\t\t\t\tvar aid = msg['#']+ctx.all++, id = {toString: function(){ return aid }, _: ctx}; id.toJSON = id.toString; // this *trick* makes it compatible between old & new versions.\n\t\t\t\troot.dup.track(id)['#'] = msg['#']; // fixes new OK acks for RPC like RTC.\n\t\t\t\tDBG && (DBG.ph = DBG.ph || +new Date);\n\t\t\t\troot.on('put', {'#': id, '@': msg['@'], put: {'#': soul, '.': key, ':': val, '>': state}, ok: msg.ok, _: ctx});\n\t\t\t}\n\t\t\tfunction map(msg){\n\t\t\t\tvar DBG; if(DBG = (msg._||'').DBG){ DBG.pa = +new Date; DBG.pm = DBG.pm || +new Date}\n \tvar eve = this, root = eve.as, graph = root.graph, ctx = msg._, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n \tif((tmp = ctx.msg) && (tmp = tmp.put) && (tmp = tmp[soul])){ state_ify(tmp, key, state, val, soul) } // necessary! or else out messages do not get SEA transforms.\n \t//var bytes = ((graph[soul]||'')[key]||'').length||1;\n\t\t\t\tgraph[soul] = state_ify(graph[soul], key, state, val, soul);\n\t\t\t\tif(tmp = (root.next||'')[soul]){\n\t\t\t\t\t//tmp.bytes = (tmp.bytes||0) + ((val||'').length||1) - bytes;\n\t\t\t\t\t//if(tmp.bytes > 2**13){ Gun.log.once('byte-limit', \"Note: In the future, GUN peers will enforce a ~4KB query limit. Please see https://gun.eco/docs/Page\") }\n\t\t\t\t\ttmp.on('in', msg)\n\t\t\t\t}\n\t\t\t\tfire(ctx);\n\t\t\t\teve.to.next(msg);\n\t\t\t}\n\t\t\tfunction fire(ctx, msg){ var root;\n\t\t\t\tif(ctx.stop){ return }\n\t\t\t\tif(!ctx.err && 0 < --ctx.stun){ return } // TODO: 'forget' feature in SEA tied to this, bad approach, but hacked in for now. Any changes here must update there.\n\t\t\t\tctx.stop = 1;\n\t\t\t\tif(!(root = ctx.root)){ return }\n\t\t\t\tvar tmp = ctx.match; tmp.end = 1;\n\t\t\t\tif(tmp === root.hatch){ if(!(tmp = ctx.latch) || tmp.end){ delete root.hatch } else { root.hatch = tmp } }\n\t\t\t\tctx.hatch && ctx.hatch(); // TODO: rename/rework how put & this interact.\n\t\t\t\tsetTimeout.each(ctx.match, function(cb){cb && cb()}); \n\t\t\t\tif(!(msg = ctx.msg) || ctx.err || msg.err){ return }\n\t\t\t\tmsg.out = universe;\n\t\t\t\tctx.root.on('out', msg);\n\n\t\t\t\tCF(); // courtesy check;\n\t\t\t}\n\t\t\tfunction ack(msg){ // aggregate ACKs.\n\t\t\t\tvar id = msg['@'] || '', ctx, ok, tmp;\n\t\t\t\tif(!(ctx = id._)){\n\t\t\t\t\tvar dup = (dup = msg.$) && (dup = dup._) && (dup = dup.root) && (dup = dup.dup);\n\t\t\t\t\tif(!(dup = dup.check(id))){ return }\n\t\t\t\t\tmsg['@'] = dup['#'] || msg['@']; // This doesn't do anything anymore, backtrack it to something else?\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.acks = (ctx.acks||0) + 1;\n\t\t\t\tif(ctx.err = msg.err){\n\t\t\t\t\tmsg['@'] = ctx['#'];\n\t\t\t\t\tfire(ctx); // TODO: BUG? How it skips/stops propagation of msg if any 1 item is error, this would assume a whole batch/resync has same malicious intent.\n\t\t\t\t}\n\t\t\t\tctx.ok = msg.ok || ctx.ok;\n\t\t\t\tif(!ctx.stop && !ctx.crack){ ctx.crack = ctx.match && ctx.match.push(function(){back(ctx)}) } // handle synchronous acks. NOTE: If a storage peer ACKs synchronously then the PUT loop has not even counted up how many items need to be processed, so ctx.STOP flags this and adds only 1 callback to the end of the PUT loop.\n\t\t\t\tback(ctx);\n\t\t\t}\n\t\t\tfunction back(ctx){\n\t\t\t\tif(!ctx || !ctx.root){ return }\n\t\t\t\tif(ctx.stun || ctx.acks !== ctx.all){ return }\n\t\t\t\tctx.root.on('in', {'@': ctx['#'], err: ctx.err, ok: ctx.err? u : ctx.ok || {'':1}});\n\t\t\t}\n\n\t\t\tvar ERR = \"Error: Invalid graph!\";\n\t\t\tvar cut = function(s){ return \" '\"+(''+s).slice(0,9)+\"...' \" }\n\t\t\tvar L = JSON.stringify, MD = 2147483647, State = Gun.state;\n\t\t\tvar C = 0, CT, CF = function(){if(C>999 && (C/-(CT - (CT = +new Date))>1)){Gun.window && console.log(\"Warning: You're syncing 1K+ records a second, faster than DOM can update - consider limiting query.\");CF=function(){C=0}}};\n\n\t\t}());\n\n\t\t;(function(){\n\t\t\tGun.on.get = function(msg, gun){\n\t\t\t\tvar root = gun._, get = msg.get, soul = get['#'], node = root.graph[soul], has = get['.'];\n\t\t\t\tvar next = root.next || (root.next = {}), at = next[soul];\n\n\t\t\t\t// TODO: Azarattum bug, what is in graph is not same as what is in next. Fix!\n\n\t\t\t\t// queue concurrent GETs?\n\t\t\t\t// TODO: consider tagging original message into dup for DAM.\n\t\t\t\t// TODO: ^ above? In chat app, 12 messages resulted in same peer asking for `#user.pub` 12 times. (same with #user GET too, yipes!) // DAM note: This also resulted in 12 replies from 1 peer which all had same ##hash but none of them deduped because each get was different.\n\t\t\t\t// TODO: Moving quick hacks fixing these things to axe for now.\n\t\t\t\t// TODO: a lot of GET #foo then GET #foo.\"\" happening, why?\n\t\t\t\t// TODO: DAM's ## hash check, on same get ACK, producing multiple replies still, maybe JSON vs YSON?\n\t\t\t\t// TMP note for now: viMZq1slG was chat LEX query #.\n\t\t\t\t/*if(gun !== (tmp = msg.$) && (tmp = (tmp||'')._)){\n\t\t\t\t\tif(tmp.Q){ tmp.Q[msg['#']] = ''; return } // chain does not need to ask for it again.\n\t\t\t\t\ttmp.Q = {};\n\t\t\t\t}*/\n\t\t\t\t/*if(u === has){\n\t\t\t\t\tif(at.Q){\n\t\t\t\t\t\t//at.Q[msg['#']] = '';\n\t\t\t\t\t\t//return;\n\t\t\t\t\t}\n\t\t\t\t\tat.Q = {};\n\t\t\t\t}*/\n\t\t\t\tvar ctx = msg._||{}, DBG = ctx.DBG = msg.DBG;\n\t\t\t\tDBG && (DBG.g = +new Date);\n\t\t\t\t//console.log(\"GET:\", get, node, has);\n\t\t\t\tif(!node){ return root.on('get', msg) }\n\t\t\t\tif(has){\n\t\t\t\t\tif('string' != typeof has || u === node[has]){\n\t\t\t\t\t\tif(!((at||'').next||'')[has]){ root.on('get', msg); return }\n\t\t\t\t\t}\n\t\t\t\t\tnode = state_ify({}, has, state_is(node, has), node[has], soul);\n\t\t\t\t\t// If we have a key in-memory, do we really need to fetch?\n\t\t\t\t\t// Maybe... in case the in-memory key we have is a local write\n\t\t\t\t\t// we still need to trigger a pull/merge from peers.\n\t\t\t\t}\n\t\t\t\t//Gun.window? Gun.obj.copy(node) : node; // HNPERF: If !browser bump Performance? Is this too dangerous to reference root graph? Copy / shallow copy too expensive for big nodes. Gun.obj.to(node); // 1 layer deep copy // Gun.obj.copy(node); // too slow on big nodes\n\t\t\t\tnode && ack(msg, node);\n\t\t\t\troot.on('get', msg); // send GET to storage adapters.\n\t\t\t}\n\t\t\tfunction ack(msg, node){\n\t\t\t\tvar S = +new Date, ctx = msg._||{}, DBG = ctx.DBG = msg.DBG;\n\t\t\t\tvar to = msg['#'], id = text_rand(9), keys = Object.keys(node||'').sort(), soul = ((node||'')._||'')['#'], kl = keys.length, j = 0, root = msg.$._.root, F = (node === root.graph[soul]);\n\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).gk = +new Date) - S, 'got keys');\n\t\t\t\t// PERF: Consider commenting this out to force disk-only reads for perf testing? // TODO: .keys( is slow\n\t\t\t\tnode && (function go(){\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tvar i = 0, k, put = {}, tmp;\n\t\t\t\t\twhile(i < 9 && (k = keys[i++])){\n\t\t\t\t\t\tstate_ify(put, k, state_is(node, k), node[k], soul);\n\t\t\t\t\t}\n\t\t\t\t\tkeys = keys.slice(i);\n\t\t\t\t\t(tmp = {})[soul] = put; put = tmp;\n\t\t\t\t\tvar faith; if(F){ faith = function(){}; faith.ram = faith.faith = true; } // HNPERF: We're testing performance improvement by skipping going through security again, but this should be audited.\n\t\t\t\t\ttmp = keys.length;\n\t\t\t\t\tconsole.STAT && console.STAT(S, -(S - (S = +new Date)), 'got copied some');\n\t\t\t\t\tDBG && (DBG.ga = +new Date);\n\t\t\t\t\troot.on('in', {'@': to, '#': id, put: put, '%': (tmp? (id = text_rand(9)) : u), $: root.$, _: faith, DBG: DBG, FOO: 1});\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'got in');\n\t\t\t\t\tif(!tmp){ return }\n\t\t\t\t\tsetTimeout.turn(go);\n\t\t\t\t}());\n\t\t\t\tif(!node){ root.on('in', {'@': msg['#']}) } // TODO: I don't think I like this, the default lS adapter uses this but \"not found\" is a sensitive issue, so should probably be handled more carefully/individually.\n\t\t\t} Gun.on.get.ack = ack;\n\t\t}());\n\n\t\t;(function(){\n\t\t\tGun.chain.opt = function(opt){\n\t\t\t\topt = opt || {};\n\t\t\t\tvar gun = this, at = gun._, tmp = opt.peers || opt;\n\t\t\t\tif(!Object.plain(opt)){ opt = {} }\n\t\t\t\tif(!Object.plain(at.opt)){ at.opt = opt }\n\t\t\t\tif('string' == typeof tmp){ tmp = [tmp] }\n\t\t\t\tif(!Object.plain(at.opt.peers)){ at.opt.peers = {}}\n\t\t\t\tif(tmp instanceof Array){\n\t\t\t\t\topt.peers = {};\n\t\t\t\t\ttmp.forEach(function(url){\n\t\t\t\t\t\tvar p = {}; p.id = p.url = url;\n\t\t\t\t\t\topt.peers[url] = at.opt.peers[url] = at.opt.peers[url] || p;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tobj_each(opt, function each(k){ var v = this[k];\n\t\t\t\t\tif((this && this.hasOwnProperty(k)) || 'string' == typeof v || Object.empty(v)){ this[k] = v; return }\n\t\t\t\t\tif(v && v.constructor !== Object && !(v instanceof Array)){ return }\n\t\t\t\t\tobj_each(v, each);\n\t\t\t\t});\n\t\t\t\tat.opt.from = opt;\n\t\t\t\tGun.on('opt', at);\n\t\t\t\tat.opt.uuid = at.opt.uuid || function uuid(l){ return Gun.state().toString(36).replace('.','') + String.random(l||12) }\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t}());\n\n\t\tvar obj_each = function(o,f){ Object.keys(o).forEach(f,o) }, text_rand = String.random, turn = setTimeout.turn, valid = Gun.valid, state_is = Gun.state.is, state_ify = Gun.state.ify, u, empty = {}, C;\n\n\t\tGun.log = function(){ return (!Gun.log.off && C.log.apply(C, arguments)), [].slice.call(arguments).join(' ') };\n\t\tGun.log.once = function(w,s,o){ return (o = Gun.log.once)[w] = o[w] || 0, o[w]++ || Gun.log(s) };\n\n\t\tif(typeof window !== \"undefined\"){ (window.GUN = window.Gun = Gun).window = window }\n\t\ttry{ if(typeof MODULE !== \"undefined\"){ MODULE.exports = Gun } }catch(e){}\n\t\tmodule.exports = Gun;\n\t\t\n\t\t(Gun.window||{}).console = (Gun.window||{}).console || {log: function(){}};\n\t\t(C = console).only = function(i, s){ return (C.only.i && i === C.only.i && C.only.i++) && (C.log.apply(C, arguments) || s) };\n\n\t\t;\"Please do not remove welcome log unless you are paying for a monthly sponsorship, thanks!\";\n\t\tGun.log.once(\"welcome\", \"Hello wonderful person! :) Thanks for using GUN, please ask for help on http://chat.gun.eco if anything takes you longer than 5min to figure out!\");\n\t})(USE, './root');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.back = function(n, opt){ var tmp;\n\t\t\tn = n || 1;\n\t\t\tif(-1 === n || Infinity === n){\n\t\t\t\treturn this._.root.$;\n\t\t\t} else\n\t\t\tif(1 === n){\n\t\t\t\treturn (this._.back || this._).$;\n\t\t\t}\n\t\t\tvar gun = this, at = gun._;\n\t\t\tif(typeof n === 'string'){\n\t\t\t\tn = n.split('.');\n\t\t\t}\n\t\t\tif(n instanceof Array){\n\t\t\t\tvar i = 0, l = n.length, tmp = at;\n\t\t\t\tfor(i; i < l; i++){\n\t\t\t\t\ttmp = (tmp||empty)[n[i]];\n\t\t\t\t}\n\t\t\t\tif(u !== tmp){\n\t\t\t\t\treturn opt? gun : tmp;\n\t\t\t\t} else\n\t\t\t\tif((tmp = at.back)){\n\t\t\t\t\treturn tmp.$.back(n, opt);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif('function' == typeof n){\n\t\t\t\tvar yes, tmp = {back: at};\n\t\t\t\twhile((tmp = tmp.back)\n\t\t\t\t&& u === (yes = n(tmp, opt))){}\n\t\t\t\treturn yes;\n\t\t\t}\n\t\t\tif('number' == typeof n){\n\t\t\t\treturn (at.back || at).$.back(n - 1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tvar empty = {}, u;\n\t})(USE, './back');\n\n\t;USE(function(module){\n\t\t// WARNING: GUN is very simple, but the JavaScript chaining API around GUN\n\t\t// is complicated and was extremely hard to build. If you port GUN to another\n\t\t// language, consider implementing an easier API to build.\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.chain = function(sub){\n\t\t\tvar gun = this, at = gun._, chain = new (sub || gun).constructor(gun), cat = chain._, root;\n\t\t\tcat.root = root = at.root;\n\t\t\tcat.id = ++root.once;\n\t\t\tcat.back = gun._;\n\t\t\tcat.on = Gun.on;\n\t\t\tcat.on('in', Gun.on.in, cat); // For 'in' if I add my own listeners to each then I MUST do it before in gets called. If I listen globally for all incoming data instead though, regardless of individual listeners, I can transform the data there and then as well.\n\t\t\tcat.on('out', Gun.on.out, cat); // However for output, there isn't really the global option. I must listen by adding my own listener individually BEFORE this one is ever called.\n\t\t\treturn chain;\n\t\t}\n\n\t\tfunction output(msg){\n\t\t\tvar put, get, at = this.as, back = at.back, root = at.root, tmp;\n\t\t\tif(!msg.$){ msg.$ = at.$ }\n\t\t\tthis.to.next(msg);\n\t\t\tif(at.err){ at.on('in', {put: at.put = u, $: at.$}); return }\n\t\t\tif(get = msg.get){\n\t\t\t\t/*if(u !== at.put){\n\t\t\t\t\tat.on('in', at);\n\t\t\t\t\treturn;\n\t\t\t\t}*/\n\t\t\t\tif(root.pass){ root.pass[at.id] = at; } // will this make for buggy behavior elsewhere?\n\t\t\t\tif(at.lex){ Object.keys(at.lex).forEach(function(k){ tmp[k] = at.lex[k] }, tmp = msg.get = msg.get || {}) }\n\t\t\t\tif(get['#'] || at.soul){\n\t\t\t\t\tget['#'] = get['#'] || at.soul;\n\t\t\t\t\t//root.graph[get['#']] = root.graph[get['#']] || {_:{'#':get['#'],'>':{}}};\n\t\t\t\t\tmsg['#'] || (msg['#'] = text_rand(9)); // A3120 ?\n\t\t\t\t\tback = (root.$.get(get['#'])._);\n\t\t\t\t\tif(!(get = get['.'])){ // soul\n\t\t\t\t\t\ttmp = back.ask && back.ask['']; // check if we have already asked for the full node\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[''] = back; // add a flag that we are now.\n\t\t\t\t\t\tif(u !== back.put){ // if we already have data,\n\t\t\t\t\t\t\tback.on('in', back); // send what is cached down the chain\n\t\t\t\t\t\t\tif(tmp){ return } // and don't ask for it again.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmsg.$ = back.$;\n\t\t\t\t\t} else\n\t\t\t\t\tif(obj_has(back.put, get)){ // TODO: support #LEX !\n\t\t\t\t\t\ttmp = back.ask && back.ask[get];\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[get] = back.$.get(get)._;\n\t\t\t\t\t\tback.on('in', {get: get, put: {'#': back.soul, '.': get, ':': back.put[get], '>': state_is(root.graph[back.soul], get)}});\n\t\t\t\t\t\tif(tmp){ return }\n\t\t\t\t\t}\n\t\t\t\t\t\t/*put = (back.$.get(get)._);\n\t\t\t\t\t\tif(!(tmp = put.ack)){ put.ack = -1 }\n\t\t\t\t\t\tback.on('in', {\n\t\t\t\t\t\t\t$: back.$,\n\t\t\t\t\t\t\tput: Gun.state.ify({}, get, Gun.state(back.put, get), back.put[get]),\n\t\t\t\t\t\t\tget: back.get\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(tmp){ return }\n\t\t\t\t\t} else\n\t\t\t\t\tif('string' != typeof get){\n\t\t\t\t\t\tvar put = {}, meta = (back.put||{})._;\n\t\t\t\t\t\tGun.obj.map(back.put, function(v,k){\n\t\t\t\t\t\t\tif(!Gun.text.match(k, get)){ return }\n\t\t\t\t\t\t\tput[k] = v;\n\t\t\t\t\t\t})\n\t\t\t\t\t\tif(!Gun.obj.empty(put)){\n\t\t\t\t\t\t\tput._ = meta;\n\t\t\t\t\t\t\tback.on('in', {$: back.$, put: put, get: back.get})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp = at.lex){\n\t\t\t\t\t\t\ttmp = (tmp._) || (tmp._ = function(){});\n\t\t\t\t\t\t\tif(back.ack < tmp.ask){ tmp.ask = back.ack }\n\t\t\t\t\t\t\tif(tmp.ask){ return }\n\t\t\t\t\t\t\ttmp.ask = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t\troot.ask(ack, msg); // A3120 ?\n\t\t\t\t\treturn root.on('in', msg);\n\t\t\t\t}\n\t\t\t\t//if(root.now){ root.now[at.id] = root.now[at.id] || true; at.pass = {} }\n\t\t\t\tif(get['.']){\n\t\t\t\t\tif(at.get){\n\t\t\t\t\t\tmsg = {get: {'.': at.get}, $: at.$};\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[at.get] = msg.$._; // TODO: PERFORMANCE? More elegant way?\n\t\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t\t}\n\t\t\t\t\tmsg = {get: at.lex? msg.get : {}, $: at.$};\n\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t}\n\t\t\t\t(at.ask || (at.ask = {}))[''] = at;\t //at.ack = at.ack || -1;\n\t\t\t\tif(at.get){\n\t\t\t\t\tget['.'] = at.get;\n\t\t\t\t\t(back.ask || (back.ask = {}))[at.get] = msg.$._; // TODO: PERFORMANCE? More elegant way?\n\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn back.on('out', msg);\n\t\t}; Gun.on.out = output;\n\n\t\tfunction input(msg, cat){ cat = cat || this.as; // TODO: V8 may not be able to optimize functions with different parameter calls, so try to do benchmark to see if there is any actual difference.\n\t\t\tvar root = cat.root, gun = msg.$ || (msg.$ = cat.$), at = (gun||'')._ || empty, tmp = msg.put||'', soul = tmp['#'], key = tmp['.'], change = (u !== tmp['='])? tmp['='] : tmp[':'], state = tmp['>'] || -Infinity, sat; // eve = event, at = data at, cat = chain at, sat = sub at (children chains).\n\t\t\tif(u !== msg.put && (u === tmp['#'] || u === tmp['.'] || (u === tmp[':'] && u === tmp['=']) || u === tmp['>'])){ // convert from old format\n\t\t\t\tif(!valid(tmp)){\n\t\t\t\t\tif(!(soul = ((tmp||'')._||'')['#'])){ console.log(\"chain not yet supported for\", tmp, '...', msg, cat); return; }\n\t\t\t\t\tgun = cat.root.$.get(soul);\n\t\t\t\t\treturn setTimeout.each(Object.keys(tmp).sort(), function(k){ // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync?\n\t\t\t\t\t\tif('_' == k || u === (state = state_is(tmp, k))){ return }\n\t\t\t\t\t\tcat.on('in', {$: gun, put: {'#': soul, '.': k, '=': tmp[k], '>': state}, VIA: msg});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcat.on('in', {$: at.back.$, put: {'#': soul = at.back.soul, '.': key = at.has || at.get, '=': tmp, '>': state_is(at.back.put, key)}, via: msg}); // TODO: This could be buggy! It assumes/approxes data, other stuff could have corrupted it.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif((msg.seen||'')[cat.id]){ return } (msg.seen || (msg.seen = function(){}))[cat.id] = cat; // help stop some infinite loops\n\n\t\t\tif(cat !== at){ // don't worry about this when first understanding the code, it handles changing contexts on a message. A soul chain will never have a different context.\n\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); // make copy of message\n\t\t\t\ttmp.get = cat.get || tmp.get;\n\t\t\t\tif(!cat.soul && !cat.has){ // if we do not recognize the chain type\n\t\t\t\t\ttmp.$$$ = tmp.$$$ || cat.$; // make a reference to wherever it came from.\n\t\t\t\t} else\n\t\t\t\tif(at.soul){ // a has (property) chain will have a different context sometimes if it is linked (to a soul chain). Anything that is not a soul or has chain, will always have different contexts.\n\t\t\t\t\ttmp.$ = cat.$;\n\t\t\t\t\ttmp.$$ = tmp.$$ || at.$;\n\t\t\t\t}\n\t\t\t\tmsg = tmp; // use the message with the new context instead;\n\t\t\t}\n\t\t\tunlink(msg, cat);\n\n\t\t\tif(((cat.soul/* && (cat.ask||'')['']*/) || msg.$$) && state >= state_is(root.graph[soul], key)){ // The root has an in-memory cache of the graph, but if our peer has asked for the data then we want a per deduplicated chain copy of the data that might have local edits on it.\n\t\t\t\t(tmp = root.$.get(soul)._).put = state_ify(tmp.put, key, state, change, soul);\n\t\t\t}\n\t\t\tif(!at.soul /*&& (at.ask||'')['']*/ && state >= state_is(root.graph[soul], key) && (sat = (root.$.get(soul)._.next||'')[key])){ // Same as above here, but for other types of chains. // TODO: Improve perf by preventing echoes recaching.\n\t\t\t\tsat.put = change; // update cache\n\t\t\t\tif('string' == typeof (tmp = valid(change))){\n\t\t\t\t\tsat.put = root.$.get(tmp)._.put || change; // share same cache as what we're linked to.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.to && this.to.next(msg); // 1st API job is to call all chain listeners.\n\t\t\t// TODO: Make input more reusable by only doing these (some?) calls if we are a chain we recognize? This means each input listener would be responsible for when listeners need to be called, which makes sense, as they might want to filter.\n\t\t\tcat.any && setTimeout.each(Object.keys(cat.any), function(any){ (any = cat.any[any]) && any(msg) },0,99); // 1st API job is to call all chain listeners. // TODO: .keys( is slow // BUG: Some re-in logic may depend on this being sync.\n\t\t\tcat.echo && setTimeout.each(Object.keys(cat.echo), function(lat){ (lat = cat.echo[lat]) && lat.on('in', msg) },0,99); // & linked at chains // TODO: .keys( is slow // BUG: Some re-in logic may depend on this being sync.\n\n\t\t\tif(((msg.$$||'')._||at).soul){ // comments are linear, but this line of code is non-linear, so if I were to comment what it does, you'd have to read 42 other comments first... but you can't read any of those comments until you first read this comment. What!? // shouldn't this match link's check?\n\t\t\t\t// is there cases where it is a $$ that we do NOT want to do the following? \n\t\t\t\tif((sat = cat.next) && (sat = sat[key])){ // TODO: possible trick? Maybe have `ionmap` code set a sat? // TODO: Maybe we should do `cat.ask` instead? I guess does not matter.\n\t\t\t\t\ttmp = {}; Object.keys(msg).forEach(function(k){ tmp[k] = msg[k] });\n\t\t\t\t\ttmp.$ = (msg.$$||msg.$).get(tmp.get = key); delete tmp.$$; delete tmp.$$$;\n\t\t\t\t\tsat.on('in', tmp);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlink(msg, cat);\n\t\t}; Gun.on.in = input;\n\n\t\tfunction link(msg, cat){ cat = cat || this.as || msg.$._;\n\t\t\tif(msg.$$ && this !== Gun.on){ return } // $$ means we came from a link, so we are at the wrong level, thus ignore it unless overruled manually by being called directly.\n\t\t\tif(!msg.put || cat.soul){ return } // But you cannot overrule being linked to nothing, or trying to link a soul chain - that must never happen.\n\t\t\tvar put = msg.put||'', link = put['=']||put[':'], tmp;\n\t\t\tvar root = cat.root, tat = root.$.get(put['#']).get(put['.'])._;\n\t\t\tif('string' != typeof (link = valid(link))){\n\t\t\t\tif(this === Gun.on){ (tat.echo || (tat.echo = {}))[cat.id] = cat } // allow some chain to explicitly force linking to simple data.\n\t\t\t\treturn; // by default do not link to data that is not a link.\n\t\t\t}\n\t\t\tif((tat.echo || (tat.echo = {}))[cat.id] // we've already linked ourselves so we do not need to do it again. Except... (annoying implementation details)\n\t\t\t\t&& !(root.pass||'')[cat.id]){ return } // if a new event listener was added, we need to make a pass through for it. The pass will be on the chain, not always the chain passed down. \n\t\t\tif(tmp = root.pass){ if(tmp[link+cat.id]){ return } tmp[link+cat.id] = 1 } // But the above edge case may \"pass through\" on a circular graph causing infinite passes, so we hackily add a temporary check for that.\n\n\t\t\t(tat.echo||(tat.echo={}))[cat.id] = cat; // set ourself up for the echo! // TODO: BUG? Echo to self no longer causes problems? Confirm.\n\n\t\t\tif(cat.has){ cat.link = link }\n\t\t\tvar sat = root.$.get(tat.link = link)._; // grab what we're linking to.\n\t\t\t(sat.echo || (sat.echo = {}))[tat.id] = tat; // link it.\n\t\t\tvar tmp = cat.ask||''; // ask the chain for what needs to be loaded next!\n\t\t\tif(tmp[''] || cat.lex){ // we might need to load the whole thing // TODO: cat.lex probably has edge case bugs to it, need more test coverage.\n\t\t\t\tsat.on('out', {get: {'#': link}});\n\t\t\t}\n\t\t\tsetTimeout.each(Object.keys(tmp), function(get, sat){ // if sub chains are asking for data. // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync?\n\t\t\t\tif(!get || !(sat = tmp[get])){ return }\n\t\t\t\tsat.on('out', {get: {'#': link, '.': get}}); // go get it.\n\t\t\t},0,99);\n\t\t}; Gun.on.link = link;\n\n\t\tfunction unlink(msg, cat){ // ugh, so much code for seemingly edge case behavior.\n\t\t\tvar put = msg.put||'', change = (u !== put['='])? put['='] : put[':'], root = cat.root, link, tmp;\n\t\t\tif(u === change){ // 1st edge case: If we have a brand new database, no data will be found.\n\t\t\t\t// TODO: BUG! because emptying cache could be async from below, make sure we are not emptying a newer cache. So maybe pass an Async ID to check against?\n\t\t\t\t// TODO: BUG! What if this is a map? // Warning! Clearing things out needs to be robust against sync/async ops, or else you'll see `map val get put` test catastrophically fail because map attempts to link when parent graph is streamed before child value gets set. Need to differentiate between lack acks and force clearing.\n\t\t\t\tif(cat.soul && u !== cat.put){ return } // data may not be found on a soul, but if a soul already has data, then nothing can clear the soul as a whole.\n\t\t\t\t//if(!cat.has){ return }\n\t\t\t\ttmp = (msg.$$||msg.$||'')._||'';\n\t\t\t\tif(msg['@'] && (u !== tmp.put || u !== cat.put)){ return } // a \"not found\" from other peers should not clear out data if we have already found it.\n\t\t\t\t//if(cat.has && u === cat.put && !(root.pass||'')[cat.id]){ return } // if we are already unlinked, do not call again, unless edge case. // TODO: BUG! This line should be deleted for \"unlink deeply nested\".\n\t\t\t\tif(link = cat.link || msg.linked){\n\t\t\t\t\tdelete (root.$.get(link)._.echo||'')[cat.id];\n\t\t\t\t}\n\t\t\t\tif(cat.has){ // TODO: Empty out links, maps, echos, acks/asks, etc.?\n\t\t\t\t\tcat.link = null;\n\t\t\t\t}\n\t\t\t\tcat.put = u; // empty out the cache if, for example, alice's car's color no longer exists (relative to alice) if alice no longer has a car.\n\t\t\t\t// TODO: BUG! For maps, proxy this so the individual sub is triggered, not all subs.\n\t\t\t\tsetTimeout.each(Object.keys(cat.next||''), function(get, sat){ // empty out all sub chains. // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync? // TODO: BUG? This will trigger deeper put first, does put logic depend on nested order? // TODO: BUG! For map, this needs to be the isolated child, not all of them.\n\t\t\t\t\tif(!(sat = cat.next[get])){ return }\n\t\t\t\t\t//if(cat.has && u === sat.put && !(root.pass||'')[sat.id]){ return } // if we are already unlinked, do not call again, unless edge case. // TODO: BUG! This line should be deleted for \"unlink deeply nested\".\n\t\t\t\t\tif(link){ delete (root.$.get(link).get(get)._.echo||'')[sat.id] }\n\t\t\t\t\tsat.on('in', {get: get, put: u, $: sat.$}); // TODO: BUG? Add recursive seen check?\n\t\t\t\t},0,99);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(cat.soul){ return } // a soul cannot unlink itself.\n\t\t\tif(msg.$$){ return } // a linked chain does not do the unlinking, the sub chain does. // TODO: BUG? Will this cancel maps?\n\t\t\tlink = valid(change); // need to unlink anytime we are not the same link, though only do this once per unlink (and not on init).\n\t\t\ttmp = msg.$._||'';\n\t\t\tif(link === tmp.link || (cat.has && !tmp.link)){\n\t\t\t\tif((root.pass||'')[cat.id] && 'string' !== typeof link){\n\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete (tmp.echo||'')[cat.id];\n\t\t\tunlink({get: cat.get, put: u, $: msg.$, linked: msg.linked = msg.linked || tmp.link}, cat); // unlink our sub chains.\n\t\t}; Gun.on.unlink = unlink;\n\n\t\tfunction ack(msg, ev){\n\t\t\t//if(!msg['%'] && (this||'').off){ this.off() } // do NOT memory leak, turn off listeners! Now handled by .ask itself\n\t\t\t// manhattan:\n\t\t\tvar as = this.as, at = as.$._, root = at.root, get = as.get||'', tmp = (msg.put||'')[get['#']]||'';\n\t\t\tif(!msg.put || ('string' == typeof get['.'] && u === tmp[get['.']])){\n\t\t\t\tif(u !== at.put){ return }\n\t\t\t\tif(!at.soul && !at.has){ return } // TODO: BUG? For now, only core-chains will handle not-founds, because bugs creep in if non-core chains are used as $ but we can revisit this later for more powerful extensions.\n\t\t\t\tat.ack = (at.ack || 0) + 1;\n\t\t\t\tat.on('in', {\n\t\t\t\t\tget: at.get,\n\t\t\t\t\tput: at.put = u,\n\t\t\t\t\t$: at.$,\n\t\t\t\t\t'@': msg['@']\n\t\t\t\t});\n\t\t\t\t/*(tmp = at.Q) && setTimeout.each(Object.keys(tmp), function(id){ // TODO: Temporary testing, not integrated or being used, probably delete.\n\t\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); tmp['@'] = id; // copy message\n\t\t\t\t\troot.on('in', tmp);\n\t\t\t\t}); delete at.Q;*/\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t(msg._||{}).miss = 1;\n\t\t\tGun.on.put(msg);\n\t\t\treturn; // eom\n\t\t}\n\n\t\tvar empty = {}, u, text_rand = String.random, valid = Gun.valid, obj_has = function(o, k){ return o && Object.prototype.hasOwnProperty.call(o, k) }, state = Gun.state, state_is = state.is, state_ify = state.ify;\n\t})(USE, './chain');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.get = function(key, cb, as){\n\t\t\tvar gun, tmp;\n\t\t\tif(typeof key === 'string'){\n\t\t\t\tif(key.length == 0) {\t\n\t\t\t\t\t(gun = this.chain())._.err = {err: Gun.log('0 length key!', key)};\n\t\t\t\t\tif(cb){ cb.call(gun, gun._.err) }\n\t\t\t\t\treturn gun;\n\t\t\t\t}\n\t\t\t\tvar back = this, cat = back._;\n\t\t\t\tvar next = cat.next || empty;\n\t\t\t\tif(!(gun = next[key])){\n\t\t\t\t\tgun = key && cache(key, back);\n\t\t\t\t}\n\t\t\t\tgun = gun && gun.$;\n\t\t\t} else\n\t\t\tif('function' == typeof key){\n\t\t\t\tif(true === cb){ return soul(this, key, cb, as), this }\n\t\t\t\tgun = this;\n\t\t\t\tvar cat = gun._, opt = cb || {}, root = cat.root, id;\n\t\t\t\topt.at = cat;\n\t\t\t\topt.ok = key;\n\t\t\t\tvar wait = {}; // can we assign this to the at instead, like in once?\n\t\t\t\t//var path = []; cat.$.back(at => { at.get && path.push(at.get.slice(0,9))}); path = path.reverse().join('.');\n\t\t\t\tfunction any(msg, eve, f){\n\t\t\t\t\tif(any.stun){ return }\n\t\t\t\t\tif((tmp = root.pass) && !tmp[id]){ return }\n\t\t\t\t\tvar at = msg.$._, sat = (msg.$$||'')._, data = (sat||at).put, odd = (!at.has && !at.soul), test = {}, link, tmp;\n\t\t\t\t\tif(odd || u === data){ // handles non-core\n\t\t\t\t\t\tdata = (u === ((tmp = msg.put)||'')['='])? (u === (tmp||'')[':'])? tmp : tmp[':'] : tmp['='];\n\t\t\t\t\t}\n\t\t\t\t\tif(link = ('string' == typeof (tmp = Gun.valid(data)))){\n\t\t\t\t\t\tdata = (u === (tmp = root.$.get(tmp)._.put))? opt.not? u : data : tmp;\n\t\t\t\t\t}\n\t\t\t\t\tif(opt.not && u === data){ return }\n\t\t\t\t\tif(u === opt.stun){\n\t\t\t\t\t\tif((tmp = root.stun) && tmp.on){\n\t\t\t\t\t\t\tcat.$.back(function(a){ // our chain stunned?\n\t\t\t\t\t\t\t\ttmp.on(''+a.id, test = {});\n\t\t\t\t\t\t\t\tif((test.run || 0) < any.id){ return test } // if there is an earlier stun on gapless parents/self.\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t!test.run && tmp.on(''+at.id, test = {}); // this node stunned?\n\t\t\t\t\t\t\t!test.run && sat && tmp.on(''+sat.id, test = {}); // linked node stunned?\n\t\t\t\t\t\t\tif(any.id > test.run){\n\t\t\t\t\t\t\t\tif(!test.stun || test.stun.end){\n\t\t\t\t\t\t\t\t\ttest.stun = tmp.on('stun');\n\t\t\t\t\t\t\t\t\ttest.stun = test.stun && test.stun.last;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(test.stun && !test.stun.end){\n\t\t\t\t\t\t\t\t\t//if(odd && u === data){ return }\n\t\t\t\t\t\t\t\t\t//if(u === msg.put){ return } // \"not found\" acks will be found if there is stun, so ignore these.\n\t\t\t\t\t\t\t\t\t(test.stun.add || (test.stun.add = {}))[id] = function(){ any(msg,eve,1) } // add ourself to the stun callback list that is called at end of the write.\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(/*odd &&*/ u === data){ f = 0 } // if data not found, keep waiting/trying.\n\t\t\t\t\t\t/*if(f && u === data){\n\t\t\t\t\t\t\tcat.on('out', opt.out);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}*/\n\t\t\t\t\t\tif((tmp = root.hatch) && !tmp.end && u === opt.hatch && !f){ // quick hack! // What's going on here? Because data is streamed, we get things one by one, but a lot of developers would rather get a callback after each batch instead, so this does that by creating a wait list per chain id that is then called at the end of the batch by the hatch code in the root put listener.\n\t\t\t\t\t\t\tif(wait[at.$._.id]){ return } wait[at.$._.id] = 1;\n\t\t\t\t\t\t\ttmp.push(function(){any(msg,eve,1)});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}; wait = {}; // end quick hack.\n\t\t\t\t\t}\n\t\t\t\t\t// call:\n\t\t\t\t\tif(root.pass){ if(root.pass[id+at.id]){ return } root.pass[id+at.id] = 1 }\n\t\t\t\t\tif(opt.on){ opt.ok.call(at.$, data, at.get, msg, eve || any); return } // TODO: Also consider breaking `this` since a lot of people do `=>` these days and `.call(` has slower performance.\n\t\t\t\t\tif(opt.v2020){ opt.ok(msg, eve || any); return }\n\t\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); msg = tmp; msg.put = data; // 2019 COMPATIBILITY! TODO: GET RID OF THIS!\n\t\t\t\t\topt.ok.call(opt.as, msg, eve || any); // is this the right\n\t\t\t\t};\n\t\t\t\tany.at = cat;\n\t\t\t\t//(cat.any||(cat.any=function(msg){ setTimeout.each(Object.keys(cat.any||''), function(act){ (act = cat.any[act]) && act(msg) },0,99) }))[id = String.random(7)] = any; // maybe switch to this in future?\n\t\t\t\t(cat.any||(cat.any={}))[id = String.random(7)] = any;\n\t\t\t\tany.off = function(){ any.stun = 1; if(!cat.any){ return } delete cat.any[id] }\n\t\t\t\tany.rid = rid; // logic from old version, can we clean it up now?\n\t\t\t\tany.id = opt.run || ++root.once; // used in callback to check if we are earlier than a write. // will this ever cause an integer overflow?\n\t\t\t\ttmp = root.pass; (root.pass = {})[id] = 1; // Explanation: test trade-offs want to prevent recursion so we add/remove pass flag as it gets fulfilled to not repeat, however map map needs many pass flags - how do we reconcile?\n\t\t\t\topt.out = opt.out || {get: {}};\n\t\t\t\tcat.on('out', opt.out);\n\t\t\t\troot.pass = tmp;\n\t\t\t\treturn gun;\n\t\t\t} else\n\t\t\tif('number' == typeof key){\n\t\t\t\treturn this.get(''+key, cb, as);\n\t\t\t} else\n\t\t\tif('string' == typeof (tmp = valid(key))){\n\t\t\t\treturn this.get(tmp, cb, as);\n\t\t\t} else\n\t\t\tif(tmp = this.get.next){\n\t\t\t\tgun = tmp(this, key);\n\t\t\t}\n\t\t\tif(!gun){\n\t\t\t\t(gun = this.chain())._.err = {err: Gun.log('Invalid get request!', key)}; // CLEAN UP\n\t\t\t\tif(cb){ cb.call(gun, gun._.err) }\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tif(cb && 'function' == typeof cb){\n\t\t\t\tgun.get(cb, as);\n\t\t\t}\n\t\t\treturn gun;\n\t\t}\n\t\tfunction cache(key, back){\n\t\t\tvar cat = back._, next = cat.next, gun = back.chain(), at = gun._;\n\t\t\tif(!next){ next = cat.next = {} }\n\t\t\tnext[at.get = key] = at;\n\t\t\tif(back === cat.root.$){\n\t\t\t\tat.soul = key;\n\t\t\t\t//at.put = {};\n\t\t\t} else\n\t\t\tif(cat.soul || cat.has){\n\t\t\t\tat.has = key;\n\t\t\t\t//if(obj_has(cat.put, key)){\n\t\t\t\t\t//at.put = cat.put[key];\n\t\t\t\t//}\n\t\t\t}\n\t\t\treturn at;\n\t\t}\n\t\tfunction soul(gun, cb, opt, as){\n\t\t\tvar cat = gun._, acks = 0, tmp;\n\t\t\tif(tmp = cat.soul || cat.link){ return cb(tmp, as, cat) }\n\t\t\tif(cat.jam){ return cat.jam.push([cb, as]) }\n\t\t\tcat.jam = [[cb,as]];\n\t\t\tgun.get(function go(msg, eve){\n\t\t\t\tif(u === msg.put && !cat.root.opt.super && (tmp = Object.keys(cat.root.opt.peers).length) && ++acks <= tmp){ // TODO: super should not be in core code, bring AXE up into core instead to fix? // TODO: .keys( is slow\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\teve.rid(msg);\n\t\t\t\tvar at = ((at = msg.$) && at._) || {}, i = 0, as;\n\t\t\t\ttmp = cat.jam; delete cat.jam; // tmp = cat.jam.splice(0, 100);\n\t\t\t\t//if(tmp.length){ process.nextTick(function(){ go(msg, eve) }) }\n\t\t\t\twhile(as = tmp[i++]){ //Gun.obj.map(tmp, function(as, cb){\n\t\t\t\t\tvar cb = as[0], id; as = as[1];\n\t\t\t\t\tcb && cb(id = at.link || at.soul || Gun.valid(msg.put) || ((msg.put||{})._||{})['#'], as, msg, eve);\n\t\t\t\t} //);\n\t\t\t}, {out: {get: {'.':true}}});\n\t\t\treturn gun;\n\t\t}\n\t\tfunction rid(at){\n\t\t\tvar cat = this.at || this.on;\n\t\t\tif(!at || cat.soul || cat.has){ return this.off() }\n\t\t\tif(!(at = (at = (at = at.$ || at)._ || at).id)){ return }\n\t\t\tvar map = cat.map, tmp, seen;\n\t\t\t//if(!map || !(tmp = map[at]) || !(tmp = tmp.at)){ return }\n\t\t\tif(tmp = (seen = this.seen || (this.seen = {}))[at]){ return true }\n\t\t\tseen[at] = true;\n\t\t\treturn;\n\t\t\t//tmp.echo[cat.id] = {}; // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.\n\t\t\t//obj.del(map, at); // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.\n\t\t\treturn;\n\t\t}\n\t\tvar empty = {}, valid = Gun.valid, u;\n\t})(USE, './get');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.put = function(data, cb, as){ // I rewrote it :)\n\t\t\tvar gun = this, at = gun._, root = at.root;\n\t\t\tas = as || {};\n\t\t\tas.root = at.root;\n\t\t\tas.run || (as.run = root.once);\n\t\t\tstun(as, at.id); // set a flag for reads to check if this chain is writing.\n\t\t\tas.ack = as.ack || cb;\n\t\t\tas.via = as.via || gun;\n\t\t\tas.data = as.data || data;\n\t\t\tas.soul || (as.soul = at.soul || ('string' == typeof cb && cb));\n\t\t\tvar s = as.state = as.state || Gun.state();\n\t\t\tif('function' == typeof data){ data(function(d){ as.data = d; gun.put(u,u,as) }); return gun }\n\t\t\tif(!as.soul){ return get(as), gun }\n\t\t\tas.$ = root.$.get(as.soul); // TODO: This may not allow user chaining and similar?\n\t\t\tas.todo = [{it: as.data, ref: as.$}];\n\t\t\tas.turn = as.turn || turn;\n\t\t\tas.ran = as.ran || ran;\n\t\t\t//var path = []; as.via.back(at => { at.get && path.push(at.get.slice(0,9)) }); path = path.reverse().join('.');\n\t\t\t// TODO: Perf! We only need to stun chains that are being modified, not necessarily written to.\n\t\t\t(function walk(){\n\t\t\t\tvar to = as.todo, at = to.pop(), d = at.it, cid = at.ref && at.ref._.id, v, k, cat, tmp, g;\n\t\t\t\tstun(as, at.ref);\n\t\t\t\tif(tmp = at.todo){\n\t\t\t\t\tk = tmp.pop(); d = d[k];\n\t\t\t\t\tif(tmp.length){ to.push(at) }\n\t\t\t\t}\n\t\t\t\tk && (to.path || (to.path = [])).push(k);\n\t\t\t\tif(!(v = valid(d)) && !(g = Gun.is(d))){\n\t\t\t\t\tif(!Object.plain(d)){ ran.err(as, \"Invalid data: \"+ check(d) +\" at \" + (as.via.back(function(at){at.get && tmp.push(at.get)}, tmp = []) || tmp.join('.'))+'.'+(to.path||[]).join('.')); return }\n\t\t\t\t\tvar seen = as.seen || (as.seen = []), i = seen.length;\n\t\t\t\t\twhile(i--){ if(d === (tmp = seen[i]).it){ v = d = tmp.link; break } }\n\t\t\t\t}\n\t\t\t\tif(k && v){ at.node = state_ify(at.node, k, s, d) } // handle soul later.\n\t\t\t\telse {\n\t\t\t\t\tif(!as.seen){ ran.err(as, \"Data at root of graph must be a node (an object).\"); return }\n\t\t\t\t\tas.seen.push(cat = {it: d, link: {}, todo: g? [] : Object.keys(d).sort().reverse(), path: (to.path||[]).slice(), up: at}); // Any perf reasons to CPU schedule this .keys( ?\n\t\t\t\t\tat.node = state_ify(at.node, k, s, cat.link);\n\t\t\t\t\t!g && cat.todo.length && to.push(cat);\n\t\t\t\t\t// ---------------\n\t\t\t\t\tvar id = as.seen.length;\n\t\t\t\t\t(as.wait || (as.wait = {}))[id] = '';\n\t\t\t\t\ttmp = (cat.ref = (g? d : k? at.ref.get(k) : at.ref))._;\n\t\t\t\t\t(tmp = (d && (d._||'')['#']) || tmp.soul || tmp.link)? resolve({soul: tmp}) : cat.ref.get(resolve, {run: as.run, /*hatch: 0,*/ v2020:1, out:{get:{'.':' '}}}); // TODO: BUG! This should be resolve ONLY soul to prevent full data from being loaded. // Fixed now?\n\t\t\t\t\t//setTimeout(function(){ if(F){ return } console.log(\"I HAVE NOT BEEN CALLED!\", path, id, cat.ref._.id, k) }, 9000); var F; // MAKE SURE TO ADD F = 1 below!\n\t\t\t\t\tfunction resolve(msg, eve){\n\t\t\t\t\t\tvar end = cat.link['#'];\n\t\t\t\t\t\tif(eve){ eve.off(); eve.rid(msg) } // TODO: Too early! Check all peers ack not found.\n\t\t\t\t\t\t// TODO: BUG maybe? Make sure this does not pick up a link change wipe, that it uses the changign link instead.\n\t\t\t\t\t\tvar soul = end || msg.soul || (tmp = (msg.$$||msg.$)._||'').soul || tmp.link || ((tmp = tmp.put||'')._||'')['#'] || tmp['#'] || (((tmp = msg.put||'') && msg.$$)? tmp['#'] : (tmp['=']||tmp[':']||'')['#']);\n\t\t\t\t\t\t!end && stun(as, msg.$);\n\t\t\t\t\t\tif(!soul && !at.link['#']){ // check soul link above us\n\t\t\t\t\t\t\t(at.wait || (at.wait = [])).push(function(){ resolve(msg, eve) }) // wait\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!soul){\n\t\t\t\t\t\t\tsoul = [];\n\t\t\t\t\t\t\t(msg.$$||msg.$).back(function(at){\n\t\t\t\t\t\t\t\tif(tmp = at.soul || at.link){ return soul.push(tmp) }\n\t\t\t\t\t\t\t\tsoul.push(at.get);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsoul = soul.reverse().join('/');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcat.link['#'] = soul;\n\t\t\t\t\t\t!g && (((as.graph || (as.graph = {}))[soul] = (cat.node || (cat.node = {_:{}})))._['#'] = soul);\n\t\t\t\t\t\tdelete as.wait[id];\n\t\t\t\t\t\tcat.wait && setTimeout.each(cat.wait, function(cb){ cb && cb() });\n\t\t\t\t\t\tas.ran(as);\n\t\t\t\t\t};\n\t\t\t\t\t// ---------------\n\t\t\t\t}\n\t\t\t\tif(!to.length){ return as.ran(as) }\n\t\t\t\tas.turn(walk);\n\t\t\t}());\n\t\t\treturn gun;\n\t\t}\n\n\t\tfunction stun(as, id){\n\t\t\tif(!id){ return } id = (id._||'').id||id;\n\t\t\tvar run = as.root.stun || (as.root.stun = {on: Gun.on}), test = {}, tmp;\n\t\t\tas.stun || (as.stun = run.on('stun', function(){ }));\n\t\t\tif(tmp = run.on(''+id)){ tmp.the.last.next(test) }\n\t\t\tif(test.run >= as.run){ return }\n\t\t\trun.on(''+id, function(test){\n\t\t\t\tif(as.stun.end){\n\t\t\t\t\tthis.off();\n\t\t\t\t\tthis.to.next(test);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttest.run = test.run || as.run;\n\t\t\t\ttest.stun = test.stun || as.stun; return;\n\t\t\t\tif(this.to.to){\n\t\t\t\t\tthis.the.last.next(test);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttest.stun = as.stun;\n\t\t\t});\n\t\t}\n\n\t\tfunction ran(as){\n\t\t\tif(as.err){ ran.end(as.stun, as.root); return } // move log handle here.\n\t\t\tif(as.todo.length || as.end || !Object.empty(as.wait)){ return } as.end = 1;\n\t\t\t//(as.retry = function(){ as.acks = 0;\n\t\t\tvar cat = (as.$.back(-1)._), root = cat.root, ask = cat.ask(function(ack){\n\t\t\t\troot.on('ack', ack);\n\t\t\t\tif(ack.err && !ack.lack){ Gun.log(ack) }\n\t\t\t\tif(++acks > (as.acks || 0)){ this.off() } // Adjustable ACKs! Only 1 by default.\n\t\t\t\tif(!as.ack){ return }\n\t\t\t\tas.ack(ack, this);\n\t\t\t}, as.opt), acks = 0, stun = as.stun, tmp;\n\t\t\t(tmp = function(){ // this is not official yet, but quick solution to hack in for now.\n\t\t\t\tif(!stun){ return }\n\t\t\t\tran.end(stun, root);\n\t\t\t\tsetTimeout.each(Object.keys(stun = stun.add||''), function(cb){ if(cb = stun[cb]){cb()} }); // resume the stunned reads // Any perf reasons to CPU schedule this .keys( ?\n\t\t\t}).hatch = tmp; // this is not official yet ^\n\t\t\t//console.log(1, \"PUT\", as.run, as.graph);\n\t\t\tif(as.ack && !as.ok){ as.ok = as.acks || 9 } // TODO: In future! Remove this! This is just old API support.\n\t\t\t(as.via._).on('out', {put: as.out = as.graph, ok: as.ok && {'@': as.ok+1}, opt: as.opt, '#': ask, _: tmp});\n\t\t\t//})();\n\t\t}; ran.end = function(stun,root){\n\t\t\tstun.end = noop; // like with the earlier id, cheaper to make this flag a function so below callbacks do not have to do an extra type check.\n\t\t\tif(stun.the.to === stun && stun === stun.the.last){ delete root.stun }\n\t\t\tstun.off();\n\t\t}; ran.err = function(as, err){\n\t\t\t(as.ack||noop).call(as, as.out = { err: as.err = Gun.log(err) });\n\t\t\tas.ran(as);\n\t\t}\n\n\t\tfunction get(as){\n\t\t\tvar at = as.via._, tmp;\n\t\t\tas.via = as.via.back(function(at){\n\t\t\t\tif(at.soul || !at.get){ return at.$ }\n\t\t\t\ttmp = as.data; (as.data = {})[at.get] = tmp;\n\t\t\t});\n\t\t\tif(!as.via || !as.via._.soul){\n\t\t\t\tas.via = at.root.$.get(((as.data||'')._||'')['#'] || at.$.back('opt.uuid')())\n\t\t\t}\n\t\t\tas.via.put(as.data, as.ack, as);\n\t\t\t\n\n\t\t\treturn;\n\t\t\tif(at.get && at.back.soul){\n\t\t\t\ttmp = as.data;\n\t\t\t\tas.via = at.back.$;\n\t\t\t\t(as.data = {})[at.get] = tmp; \n\t\t\t\tas.via.put(as.data, as.ack, as);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tfunction check(d, tmp){ return ((d && (tmp = d.constructor) && tmp.name) || typeof d) }\n\n\t\tvar u, empty = {}, noop = function(){}, turn = setTimeout.turn, valid = Gun.valid, state_ify = Gun.state.ify;\n\t\tvar iife = function(fn,as){fn.call(as||empty)}\n\t})(USE, './put');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tUSE('./chain');\n\t\tUSE('./back');\n\t\tUSE('./put');\n\t\tUSE('./get');\n\t\tmodule.exports = Gun;\n\t})(USE, './index');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.chain.on = function(tag, arg, eas, as){ // don't rewrite!\n\t\t\tvar gun = this, cat = gun._, root = cat.root, act, off, id, tmp;\n\t\t\tif(typeof tag === 'string'){\n\t\t\t\tif(!arg){ return cat.on(tag) }\n\t\t\t\tact = cat.on(tag, arg, eas || cat, as);\n\t\t\t\tif(eas && eas.$){\n\t\t\t\t\t(eas.subs || (eas.subs = [])).push(act);\n\t\t\t\t}\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tvar opt = arg;\n\t\t\t(opt = (true === opt)? {change: true} : opt || {}).not = 1; opt.on = 1;\n\t\t\t//opt.at = cat;\n\t\t\t//opt.ok = tag;\n\t\t\t//opt.last = {};\n\t\t\tvar wait = {}; // can we assign this to the at instead, like in once?\n\t\t\tgun.get(tag, opt);\n\t\t\t/*gun.get(function on(data,key,msg,eve){ var $ = this;\n\t\t\t\tif(tmp = root.hatch){ // quick hack!\n\t\t\t\t\tif(wait[$._.id]){ return } wait[$._.id] = 1;\n\t\t\t\t\ttmp.push(function(){on.call($, data,key,msg,eve)});\n\t\t\t\t\treturn;\n\t\t\t\t}; wait = {}; // end quick hack.\n\t\t\t\ttag.call($, data,key,msg,eve);\n\t\t\t}, opt); // TODO: PERF! Event listener leak!!!?*/\n\t\t\t/*\n\t\t\tfunction one(msg, eve){\n\t\t\t\tif(one.stun){ return }\n\t\t\t\tvar at = msg.$._, data = at.put, tmp;\n\t\t\t\tif(tmp = at.link){ data = root.$.get(tmp)._.put }\n\t\t\t\tif(opt.not===u && u === data){ return }\n\t\t\t\tif(opt.stun===u && (tmp = root.stun) && (tmp = tmp[at.id] || tmp[at.back.id]) && !tmp.end){ // Remember! If you port this into `.get(cb` make sure you allow stun:0 skip option for `.put(`.\n\t\t\t\t\ttmp[id] = function(){one(msg,eve)};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//tmp = one.wait || (one.wait = {}); console.log(tmp[at.id] === ''); if(tmp[at.id] !== ''){ tmp[at.id] = tmp[at.id] || setTimeout(function(){tmp[at.id]='';one(msg,eve)},1); return } delete tmp[at.id];\n\t\t\t\t// call:\n\t\t\t\tif(opt.as){\n\t\t\t\t\topt.ok.call(opt.as, msg, eve || one);\n\t\t\t\t} else {\n\t\t\t\t\topt.ok.call(at.$, data, msg.get || at.get, msg, eve || one);\n\t\t\t\t}\n\t\t\t};\n\t\t\tone.at = cat;\n\t\t\t(cat.act||(cat.act={}))[id = String.random(7)] = one;\n\t\t\tone.off = function(){ one.stun = 1; if(!cat.act){ return } delete cat.act[id] }\n\t\t\tcat.on('out', {get: {}});*/\n\t\t\treturn gun;\n\t\t}\n\t\t// Rules:\n\t\t// 1. If cached, should be fast, but not read while write.\n\t\t// 2. Should not retrigger other listeners, should get triggered even if nothing found.\n\t\t// 3. If the same callback passed to many different once chains, each should resolve - an unsubscribe from the same callback should not effect the state of the other resolving chains, if you do want to cancel them all early you should mutate the callback itself with a flag & check for it at top of callback\n\t\tGun.chain.once = function(cb, opt){ opt = opt || {}; // avoid rewriting\n\t\t\tif(!cb){ return none(this,opt) }\n\t\t\tvar gun = this, cat = gun._, root = cat.root, data = cat.put, id = String.random(7), one, tmp;\n\t\t\tgun.get(function(data,key,msg,eve){\n\t\t\t\tvar $ = this, at = $._, one = (at.one||(at.one={}));\n\t\t\t\tif(eve.stun){ return } if('' === one[id]){ return }\n\t\t\t\tif(true === (tmp = Gun.valid(data))){ once(); return }\n\t\t\t\tif('string' == typeof tmp){ return } // TODO: BUG? Will this always load?\n\t\t\t\tclearTimeout((cat.one||'')[id]); // clear \"not found\" since they only get set on cat.\n\t\t\t\tclearTimeout(one[id]); one[id] = setTimeout(once, opt.wait||99); // TODO: Bug? This doesn't handle plural chains.\n\t\t\t\tfunction once(f){\n\t\t\t\t\tif(!at.has && !at.soul){ at = {put: data, get: key} } // handles non-core messages.\n\t\t\t\t\tif(u === (tmp = at.put)){ tmp = ((msg.$$||'')._||'').put }\n\t\t\t\t\tif('string' == typeof Gun.valid(tmp)){\n\t\t\t\t\t\ttmp = root.$.get(tmp)._.put;\n\t\t\t\t\t\tif(tmp === u && !f){\n\t\t\t\t\t\t\tone[id] = setTimeout(function(){ once(1) }, opt.wait||99); // TODO: Quick fix. Maybe use ack count for more predictable control?\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//console.log(\"AND VANISHED\", data);\n\t\t\t\t\tif(eve.stun){ return } if('' === one[id]){ return } one[id] = '';\n\t\t\t\t\tif(cat.soul || cat.has){ eve.off() } // TODO: Plural chains? // else { ?.off() } // better than one check?\n\t\t\t\t\tcb.call($, tmp, at.get);\n\t\t\t\t\tclearTimeout(one[id]); // clear \"not found\" since they only get set on cat. // TODO: This was hackily added, is it necessary or important? Probably not, in future try removing this. Was added just as a safety for the `&& !f` check.\n\t\t\t\t};\n\t\t\t}, {on: 1});\n\t\t\treturn gun;\n\t\t}\n\t\tfunction none(gun,opt,chain){\n\t\t\tGun.log.once(\"valonce\", \"Chainable val is experimental, its behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.\");\n\t\t\t(chain = gun.chain())._.nix = gun.once(function(data, key){ chain._.on('in', this._) });\n\t\t\tchain._.lex = gun._.lex; // TODO: Better approach in future? This is quick for now.\n\t\t\treturn chain;\n\t\t}\n\n\t\tGun.chain.off = function(){\n\t\t\t// make off more aggressive. Warning, it might backfire!\n\t\t\tvar gun = this, at = gun._, tmp;\n\t\t\tvar cat = at.back;\n\t\t\tif(!cat){ return }\n\t\t\tat.ack = 0; // so can resubscribe.\n\t\t\tif(tmp = cat.next){\n\t\t\t\tif(tmp[at.get]){\n\t\t\t\t\tdelete tmp[at.get];\n\t\t\t\t} else {\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TODO: delete cat.one[map.id]?\n\t\t\tif(tmp = cat.ask){\n\t\t\t\tdelete tmp[at.get];\n\t\t\t}\n\t\t\tif(tmp = cat.put){\n\t\t\t\tdelete tmp[at.get];\n\t\t\t}\n\t\t\tif(tmp = at.soul){\n\t\t\t\tdelete cat.root.graph[tmp];\n\t\t\t}\n\t\t\tif(tmp = at.map){\n\t\t\t\tObject.keys(tmp).forEach(function(i,at){ at = tmp[i]; //obj_map(tmp, function(at){\n\t\t\t\t\tif(at.link){\n\t\t\t\t\t\tcat.root.$.get(at.link).off();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(tmp = at.next){\n\t\t\t\tObject.keys(tmp).forEach(function(i,neat){ neat = tmp[i]; //obj_map(tmp, function(neat){\n\t\t\t\t\tneat.$.off();\n\t\t\t\t});\n\t\t\t}\n\t\t\tat.on('off', {});\n\t\t\treturn gun;\n\t\t}\n\t\tvar empty = {}, noop = function(){}, u;\n\t})(USE, './on');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index'), next = Gun.chain.get.next;\n\t\tGun.chain.get.next = function(gun, lex){ var tmp;\n\t\t\tif(!Object.plain(lex)){ return (next||noop)(gun, lex) }\n\t\t\tif(tmp = ((tmp = lex['#'])||'')['='] || tmp){ return gun.get(tmp) }\n\t\t\t(tmp = gun.chain()._).lex = lex; // LEX!\n\t\t\tgun.on('in', function(eve){\n\t\t\t\tif(String.match(eve.get|| (eve.put||'')['.'], lex['.'] || lex['#'] || lex)){\n\t\t\t\t\ttmp.on('in', eve);\n\t\t\t\t}\n\t\t\t\tthis.to.next(eve);\n\t\t\t});\n\t\t\treturn tmp.$;\n\t\t}\n\t\tGun.chain.map = function(cb, opt, t){\n\t\t\tvar gun = this, cat = gun._, lex, chain;\n\t\t\tif(Object.plain(cb)){ lex = cb['.']? cb : {'.': cb}; cb = u }\n\t\t\tif(!cb){\n\t\t\t\tif(chain = cat.each){ return chain }\n\t\t\t\t(cat.each = chain = gun.chain())._.lex = lex || chain._.lex || cat.lex;\n\t\t\t\tchain._.nix = gun.back('nix');\n\t\t\t\tgun.on('in', map, chain._);\n\t\t\t\treturn chain;\n\t\t\t}\n\t\t\tGun.log.once(\"mapfn\", \"Map functions are experimental, their behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.\");\n\t\t\tchain = gun.chain();\n\t\t\tgun.map().on(function(data, key, msg, eve){\n\t\t\t\tvar next = (cb||noop).call(this, data, key, msg, eve);\n\t\t\t\tif(u === next){ return }\n\t\t\t\tif(data === next){ return chain._.on('in', msg) }\n\t\t\t\tif(Gun.is(next)){ return chain._.on('in', next._) }\n\t\t\t\tvar tmp = {}; Object.keys(msg.put).forEach(function(k){ tmp[k] = msg.put[k] }, tmp); tmp['='] = next; \n\t\t\t\tchain._.on('in', {get: key, put: tmp});\n\t\t\t});\n\t\t\treturn chain;\n\t\t}\n\t\tfunction map(msg){ this.to.next(msg);\n\t\t\tvar cat = this.as, gun = msg.$, at = gun._, put = msg.put, tmp;\n\t\t\tif(!at.soul && !msg.$$){ return } // this line took hundreds of tries to figure out. It only works if core checks to filter out above chains during link tho. This says \"only bother to map on a node\" for this layer of the chain. If something is not a node, map should not work.\n\t\t\tif((tmp = cat.lex) && !String.match(msg.get|| (put||'')['.'], tmp['.'] || tmp['#'] || tmp)){ return }\n\t\t\tGun.on.link(msg, cat);\n\t\t}\n\t\tvar noop = function(){}, event = {stun: noop, off: noop}, u;\n\t})(USE, './map');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.chain.set = function(item, cb, opt){\n\t\t\tvar gun = this, root = gun.back(-1), soul, tmp;\n\t\t\tcb = cb || function(){};\n\t\t\topt = opt || {}; opt.item = opt.item || item;\n\t\t\tif(soul = ((item||'')._||'')['#']){ (item = {})['#'] = soul } // check if node, make link.\n\t\t\tif('string' == typeof (tmp = Gun.valid(item))){ return gun.get(soul = tmp).put(item, cb, opt) } // check if link\n\t\t\tif(!Gun.is(item)){\n\t\t\t\tif(Object.plain(item)){\n\t\t\t\t\titem = root.get(soul = gun.back('opt.uuid')()).put(item);\n\t\t\t\t}\n\t\t\t\treturn gun.get(soul || root.back('opt.uuid')(7)).put(item, cb, opt);\n\t\t\t}\n\t\t\tgun.put(function(go){\n\t\t\t\titem.get(function(soul, o, msg){ // TODO: BUG! We no longer have this option? & go error not handled?\n\t\t\t\t\tif(!soul){ return cb.call(gun, {err: Gun.log('Only a node can be linked! Not \"' + msg.put + '\"!')}) }\n\t\t\t\t\t(tmp = {})[soul] = {'#': soul}; go(tmp);\n\t\t\t\t},true);\n\t\t\t})\n\t\t\treturn item;\n\t\t}\n\t})(USE, './set');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\n\t\tvar noop = function(){}\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u, d = +new Date; try{ cb(u, JSON.parse(t,r), json.sucks(+new Date - d)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u, d = +new Date; try{ cb(u, JSON.stringify(v,r,s), json.sucks(+new Date - d)) }catch(e){ cb(e) } }\n\t\tjson.sucks = function(d){ if(d > 99){ console.log(\"Warning: JSON blocking CPU detected. Add `gun/lib/yson.js` to fix.\"); json.sucks = noop } }\n\n\t\tfunction Mesh(root){\n\t\t\tvar mesh = function(){};\n\t\t\tvar opt = root.opt || {};\n\t\t\topt.log = opt.log || console.log;\n\t\t\topt.gap = opt.gap || opt.wait || 0;\n\t\t\topt.max = opt.max || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;\n\t\t\topt.pack = opt.pack || (opt.max * 0.01 * 0.01);\n\t\t\topt.puff = opt.puff || 9; // IDEA: do a start/end benchmark, divide ops/result.\n\t\t\tvar puff = setTimeout.turn || setTimeout;\n\n\t\t\tvar dup = root.dup, dup_check = dup.check, dup_track = dup.track;\n\n\t\t\tvar ST = +new Date, LT = ST;\n\n\t\t\tvar hear = mesh.hear = function(raw, peer){\n\t\t\t\tif(!raw){ return }\n\t\t\t\tif(opt.max <= raw.length){ return mesh.say({dam: '!', err: \"Message too big!\"}, peer) }\n\t\t\t\tif(mesh === this){\n\t\t\t\t\t/*if('string' == typeof raw){ try{\n\t\t\t\t\t\tvar stat = console.STAT || {};\n\t\t\t\t\t\t//console.log('HEAR:', peer.id, (raw||'').slice(0,250), ((raw||'').length / 1024 / 1024).toFixed(4));\n\t\t\t\t\t\t\n\t\t\t\t\t\t//console.log(setTimeout.turn.s.length, 'stacks', parseFloat((-(LT - (LT = +new Date))/1000).toFixed(3)), 'sec', parseFloat(((LT-ST)/1000 / 60).toFixed(1)), 'up', stat.peers||0, 'peers', stat.has||0, 'has', stat.memhused||0, stat.memused||0, stat.memax||0, 'heap mem max');\n\t\t\t\t\t}catch(e){ console.log('DBG err', e) }}*/\n\t\t\t\t\thear.d += raw.length||0 ; ++hear.c } // STATS!\n\t\t\t\tvar S = peer.SH = +new Date;\n\t\t\t\tvar tmp = raw[0], msg;\n\t\t\t\t//raw && raw.slice && console.log(\"hear:\", ((peer.wire||'').headers||'').origin, raw.length, raw.slice && raw.slice(0,50)); //tc-iamunique-tc-package-ds1\n\t\t\t\tif('[' === tmp){\n\t\t\t\t\tparse(raw, function(err, msg){\n\t\t\t\t\t\tif(err || !msg){ return mesh.say({dam: '!', err: \"DAM JSON parse error.\"}, peer) }\n\t\t\t\t\t\tconsole.STAT && console.STAT(+new Date, msg.length, '# on hear batch');\n\t\t\t\t\t\tvar P = opt.puff;\n\t\t\t\t\t\t(function go(){\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\tvar i = 0, m; while(i < P && (m = msg[i++])){ mesh.hear(m, peer) }\n\t\t\t\t\t\t\tmsg = msg.slice(i); // slicing after is faster than shifting during.\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'hear loop');\n\t\t\t\t\t\t\tflush(peer); // force send all synchronously batched acks.\n\t\t\t\t\t\t\tif(!msg.length){ return }\n\t\t\t\t\t\t\tpuff(go, 0);\n\t\t\t\t\t\t}());\n\t\t\t\t\t});\n\t\t\t\t\traw = ''; // \n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif('{' === tmp || ((raw['#'] || Object.plain(raw)) && (msg = raw))){\n\t\t\t\t\tif(msg){ return hear.one(msg, peer, S) }\n\t\t\t\t\tparse(raw, function(err, msg){\n\t\t\t\t\t\tif(err || !msg){ return mesh.say({dam: '!', err: \"DAM JSON parse error.\"}, peer) }\n\t\t\t\t\t\thear.one(msg, peer, S);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\thear.one = function(msg, peer, S){ // S here is temporary! Undo.\n\t\t\t\tvar id, hash, tmp, ash, DBG;\n\t\t\t\tif(msg.DBG){ msg.DBG = DBG = {DBG: msg.DBG} }\n\t\t\t\tDBG && (DBG.h = S);\n\t\t\t\tDBG && (DBG.hp = +new Date);\n\t\t\t\tif(!(id = msg['#'])){ id = msg['#'] = String.random(9) }\n\t\t\t\tif(tmp = dup_check(id)){ return }\n\t\t\t\t// DAM logic:\n\t\t\t\tif(!(hash = msg['##']) && false && u !== msg.put){ /*hash = msg['##'] = Type.obj.hash(msg.put)*/ } // disable hashing for now // TODO: impose warning/penalty instead (?)\n\t\t\t\tif(hash && (tmp = msg['@'] || (msg.get && id)) && dup.check(ash = tmp+hash)){ return } // Imagine A <-> B <=> (C & D), C & D reply with same ACK but have different IDs, B can use hash to dedup. Or if a GET has a hash already, we shouldn't ACK if same.\n\t\t\t\t(msg._ = function(){}).via = mesh.leap = peer;\n\t\t\t\tif((tmp = msg['><']) && 'string' == typeof tmp){ tmp.slice(0,99).split(',').forEach(function(k){ this[k] = 1 }, (msg._).yo = {}) } // Peers already sent to, do not resend.\n\t\t\t\t// DAM ^\n\t\t\t\tif(tmp = msg.dam){\n\t\t\t\t\tif(tmp = mesh.hear[tmp]){\n\t\t\t\t\t\ttmp(msg, peer, root);\n\t\t\t\t\t}\n\t\t\t\t\tdup_track(id);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(tmp = msg.ok){ msg._.near = tmp['/'] }\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.is = S); peer.SI = id;\n\t\t\t\tdup_track.ed = function(d){\n\t\t\t\t\tif(id !== d){ return }\n\t\t\t\t\tdup_track.ed = 0;\n\t\t\t\t\tif(!(d = dup.s[id])){ return }\n\t\t\t\t\td.via = peer;\n\t\t\t\t\tif(msg.get){ d.it = msg }\n\t\t\t\t}\n\t\t\t\troot.on('in', mesh.last = msg);\n\t\t\t\tDBG && (DBG.hd = +new Date);\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, msg.get? 'msg get' : msg.put? 'msg put' : 'msg');\n\t\t\t\tdup_track(id); // in case 'in' does not call track.\n\t\t\t\tif(ash){ dup_track(ash) } //dup.track(tmp+hash, true).it = it(msg);\n\t\t\t\tmesh.leap = mesh.last = null; // warning! mesh.leap could be buggy.\n\t\t\t}\n\t\t\tvar tomap = function(k,i,m){m(k,true)};\n\t\t\thear.c = hear.d = 0;\n\n\t\t\t;(function(){\n\t\t\t\tvar SMIA = 0;\n\t\t\t\tvar loop;\n\t\t\t\tmesh.hash = function(msg, peer){ var h, s, t;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tjson(msg.put, function hash(err, text){\n\t\t\t\t\t\tvar ss = (s || (s = t = text||'')).slice(0, 32768); // 1024 * 32\n\t\t\t\t\t h = String.hash(ss, h); s = s.slice(32768);\n\t\t\t\t\t if(s){ puff(hash, 0); return }\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say json+hash');\n\t\t\t\t\t msg._.$put = t;\n\t\t\t\t\t msg['##'] = h;\n\t\t\t\t\t mesh.say(msg, peer);\n\t\t\t\t\t delete msg._.$put;\n\t\t\t\t\t}, sort);\n\t\t\t\t}\n\t\t\t\tfunction sort(k, v){ var tmp;\n\t\t\t\t\tif(!(v instanceof Object)){ return v }\n\t\t\t\t\tObject.keys(v).sort().forEach(sorta, {to: tmp = {}, on: v});\n\t\t\t\t\treturn tmp;\n\t\t\t\t} function sorta(k){ this.to[k] = this.on[k] }\n\n\t\t\t\tvar say = mesh.say = function(msg, peer){ var tmp;\n\t\t\t\t\tif((tmp = this) && (tmp = tmp.to) && tmp.next){ tmp.next(msg) } // compatible with middleware adapters.\n\t\t\t\t\tif(!msg){ return false }\n\t\t\t\t\tvar id, hash, raw, ack = msg['@'];\n//if(opt.super && (!ack || !msg.put)){ return } // TODO: MANHATTAN STUB //OBVIOUSLY BUG! But squelch relay. // :( get only is 100%+ CPU usage :(\n\t\t\t\t\tvar meta = msg._||(msg._=function(){});\n\t\t\t\t\tvar DBG = msg.DBG, S = +new Date; meta.y = meta.y || S; if(!peer){ DBG && (DBG.y = S) }\n\t\t\t\t\tif(!(id = msg['#'])){ id = msg['#'] = String.random(9) }\n\t\t\t\t\t!loop && dup_track(id);//.it = it(msg); // track for 9 seconds, default. Earth<->Mars would need more! // always track, maybe move this to the 'after' logic if we split function.\n\t\t\t\t\t//if(msg.put && (msg.err || (dup.s[id]||'').err)){ return false } // TODO: in theory we should not be able to stun a message, but for now going to check if it can help network performance preventing invalid data to relay.\n\t\t\t\t\tif(!(hash = msg['##']) && u !== msg.put && !meta.via && ack){ mesh.hash(msg, peer); return } // TODO: Should broadcasts be hashed?\n\t\t\t\t\tif(!peer && ack){ peer = ((tmp = dup.s[ack]) && (tmp.via || ((tmp = tmp.it) && (tmp = tmp._) && tmp.via))) || ((tmp = mesh.last) && ack === tmp['#'] && mesh.leap) } // warning! mesh.leap could be buggy! mesh last check reduces this. // TODO: CLEAN UP THIS LINE NOW? `.it` should be reliable.\n\t\t\t\t\tif(!peer && ack){ // still no peer, then ack daisy chain 'tunnel' got lost.\n\t\t\t\t\t\tif(dup.s[ack]){ return } // in dups but no peer hints that this was ack to ourself, ignore.\n\t\t\t\t\t\tconsole.STAT && console.STAT(+new Date, ++SMIA, 'total no peer to ack to'); // TODO: Delete this now. Dropping lost ACKs is protocol fine now.\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} // TODO: Temporary? If ack via trace has been lost, acks will go to all peers, which trashes browser bandwidth. Not relaying the ack will force sender to ask for ack again. Note, this is technically wrong for mesh behavior.\n\t\t\t\t\tif(ack && !msg.put && !hash && ((dup.s[ack]||'').it||'')['##']){ return false } // If we're saying 'not found' but a relay had data, do not bother sending our not found. // Is this correct, return false? // NOTE: ADD PANIC TEST FOR THIS!\n\t\t\t\t\tif(!peer && mesh.way){ return mesh.way(msg) }\n\t\t\t\t\tDBG && (DBG.yh = +new Date);\n\t\t\t\t\tif(!(raw = meta.raw)){ mesh.raw(msg, peer); return }\n\t\t\t\t\tDBG && (DBG.yr = +new Date);\n\t\t\t\t\tif(!peer || !peer.id){\n\t\t\t\t\t\tif(!Object.plain(peer || opt.peers)){ return false }\n\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\tvar P = opt.puff, ps = opt.peers, pl = Object.keys(peer || opt.peers || {}); // TODO: .keys( is slow\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'peer keys');\n\t\t\t\t\t\t;(function go(){\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\t//Type.obj.map(peer || opt.peers, each); // in case peer is a peer list.\n\t\t\t\t\t\t\tloop = 1; var wr = meta.raw; meta.raw = raw; // quick perf hack\n\t\t\t\t\t\t\tvar i = 0, p; while(i < 9 && (p = (pl||'')[i++])){\n\t\t\t\t\t\t\t\tif(!(p = ps[p] || (peer||'')[p])){ continue }\n\t\t\t\t\t\t\t\tmesh.say(msg, p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeta.raw = wr; loop = 0;\n\t\t\t\t\t\t\tpl = pl.slice(i); // slicing after is faster than shifting during.\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say loop');\n\t\t\t\t\t\t\tif(!pl.length){ return }\n\t\t\t\t\t\t\tpuff(go, 0);\n\t\t\t\t\t\t\tack && dup_track(ack); // keep for later\n\t\t\t\t\t\t}());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: PERF: consider splitting function here, so say loops do less work.\n\t\t\t\t\tif(!peer.wire && mesh.wire){ mesh.wire(peer) }\n\t\t\t\t\tif(id === peer.last){ return } peer.last = id; // was it just sent?\n\t\t\t\t\tif(peer === meta.via){ return false } // don't send back to self.\n\t\t\t\t\tif((tmp = meta.yo) && (tmp[peer.url] || tmp[peer.pid] || tmp[peer.id]) /*&& !o*/){ return false }\n\t\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||meta).yp = +new Date) - (meta.y || S), 'say prep');\n\t\t\t\t\t!loop && ack && dup_track(ack); // streaming long responses needs to keep alive the ack.\n\t\t\t\t\tif(peer.batch){\n\t\t\t\t\t\tpeer.tail = (tmp = peer.tail || 0) + raw.length;\n\t\t\t\t\t\tif(peer.tail <= opt.pack){\n\t\t\t\t\t\t\tpeer.batch += (tmp?',':'')+raw;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tflush(peer);\n\t\t\t\t\t}\n\t\t\t\t\tpeer.batch = '['; // Prevents double JSON!\n\t\t\t\t\tvar ST = +new Date;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tconsole.STAT && console.STAT(ST, +new Date - ST, '0ms TO');\n\t\t\t\t\t\tflush(peer);\n\t\t\t\t\t}, opt.gap); // TODO: queuing/batching might be bad for low-latency video game performance! Allow opt out?\n\t\t\t\t\tsend(raw, peer);\n\t\t\t\t\tconsole.STAT && (ack === peer.SI) && console.STAT(S, +new Date - peer.SH, 'say ack');\n\t\t\t\t}\n\t\t\t\tmesh.say.c = mesh.say.d = 0;\n\t\t\t\t// TODO: this caused a out-of-memory crash!\n\t\t\t\tmesh.raw = function(msg, peer){ // TODO: Clean this up / delete it / move logic out!\n\t\t\t\t\tif(!msg){ return '' }\n\t\t\t\t\tvar meta = (msg._) || {}, put, tmp;\n\t\t\t\t\tif(tmp = meta.raw){ return tmp }\n\t\t\t\t\tif('string' == typeof msg){ return msg }\n\t\t\t\t\tvar hash = msg['##'], ack = msg['@'];\n\t\t\t\t\tif(hash && ack){\n\t\t\t\t\t\tif(!meta.via && dup_check(ack+hash)){ return false } // for our own out messages, memory & storage may ack the same thing, so dedup that. Tho if via another peer, we already tracked it upon hearing, so this will always trigger false positives, so don't do that!\n\t\t\t\t\t\tif(tmp = (dup.s[ack]||'').it){\n\t\t\t\t\t\t\tif(hash === tmp['##']){ return false } // if ask has a matching hash, acking is optional.\n\t\t\t\t\t\t\tif(!tmp['##']){ tmp['##'] = hash } // if none, add our hash to ask so anyone we relay to can dedup. // NOTE: May only check against 1st ack chunk, 2nd+ won't know and still stream back to relaying peers which may then dedup. Any way to fix this wasted bandwidth? I guess force rate limiting breaking change, that asking peer has to ask for next lexical chunk.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!msg.dam && !msg['@']){\n\t\t\t\t\t\tvar i = 0, to = []; tmp = opt.peers;\n\t\t\t\t\t\tfor(var k in tmp){ var p = tmp[k]; // TODO: Make it up peers instead!\n\t\t\t\t\t\t\tto.push(p.url || p.pid || p.id);\n\t\t\t\t\t\t\tif(++i > 6){ break }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(i > 1){ msg['><'] = to.join() } // TODO: BUG! This gets set regardless of peers sent to! Detect?\n\t\t\t\t\t}\n\t\t\t\t\tif(msg.put && (tmp = msg.ok)){ msg.ok = {'@':(tmp['@']||1)-1, '/': (tmp['/']==msg._.near)? mesh.near : tmp['/']}; }\n\t\t\t\t\tif(put = meta.$put){\n\t\t\t\t\t\ttmp = {}; Object.keys(msg).forEach(function(k){ tmp[k] = msg[k] });\n\t\t\t\t\t\ttmp.put = ':])([:';\n\t\t\t\t\t\tjson(tmp, function(err, raw){\n\t\t\t\t\t\t\tif(err){ return } // TODO: Handle!!\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\ttmp = raw.indexOf('\"put\":\":])([:\"');\n\t\t\t\t\t\t\tres(u, raw = raw.slice(0, tmp+6) + put + raw.slice(tmp + 14));\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say slice');\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tjson(msg, res);\n\t\t\t\t\tfunction res(err, raw){\n\t\t\t\t\t\tif(err){ return } // TODO: Handle!!\n\t\t\t\t\t\tmeta.raw = raw; //if(meta && (raw||'').length < (999 * 99)){ meta.raw = raw } // HNPERF: If string too big, don't keep in memory.\n\t\t\t\t\t\tmesh.say(msg, peer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}());\n\n\t\t\tfunction flush(peer){\n\t\t\t\tvar tmp = peer.batch, t = 'string' == typeof tmp, l;\n\t\t\t\tif(t){ tmp += ']' }// TODO: Prevent double JSON!\n\t\t\t\tpeer.batch = peer.tail = null;\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tif(t? 3 > tmp.length : !tmp.length){ return } // TODO: ^\n\t\t\t\tif(!t){try{tmp = (1 === tmp.length? tmp[0] : JSON.stringify(tmp));\n\t\t\t\t}catch(e){return opt.log('DAM JSON stringify error', e)}}\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tsend(tmp, peer);\n\t\t\t}\n\t\t\t// for now - find better place later.\n\t\t\tfunction send(raw, peer){ try{\n\t\t\t\tvar wire = peer.wire;\n\t\t\t\tif(peer.say){\n\t\t\t\t\tpeer.say(raw);\n\t\t\t\t} else\n\t\t\t\tif(wire.send){\n\t\t\t\t\twire.send(raw);\n\t\t\t\t}\n\t\t\t\tmesh.say.d += raw.length||0; ++mesh.say.c; // STATS!\n\t\t\t}catch(e){\n\t\t\t\t(peer.queue = peer.queue || []).push(raw);\n\t\t\t}}\n\n\t\t\tmesh.near = 0;\n\t\t\tmesh.hi = function(peer){\n\t\t\t\tvar wire = peer.wire, tmp;\n\t\t\t\tif(!wire){ mesh.wire((peer.length && {url: peer, id: peer}) || peer); return }\n\t\t\t\tif(peer.id){\n\t\t\t\t\topt.peers[peer.url || peer.id] = peer;\n\t\t\t\t} else {\n\t\t\t\t\ttmp = peer.id = peer.id || peer.url || String.random(9);\n\t\t\t\t\tmesh.say({dam: '?', pid: root.opt.pid}, opt.peers[tmp] = peer);\n\t\t\t\t\tdelete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self\n\t\t\t\t}\n\t\t\t\tif(!peer.met){\n\t\t\t\t\tmesh.near++;\n\t\t\t\t\tpeer.met = +(new Date);\n\t\t\t\t\troot.on('hi', peer)\n\t\t\t\t}\n\t\t\t\t// @rogowski I need this here by default for now to fix go1dfish's bug\n\t\t\t\ttmp = peer.queue; peer.queue = [];\n\t\t\t\tsetTimeout.each(tmp||[],function(msg){\n\t\t\t\t\tsend(msg, peer);\n\t\t\t\t},0,9);\n\t\t\t\t//Type.obj.native && Type.obj.native(); // dirty place to check if other JS polluted.\n\t\t\t}\n\t\t\tmesh.bye = function(peer){\n\t\t\t\tpeer.met && --mesh.near;\n\t\t\t\tdelete peer.met;\n\t\t\t\troot.on('bye', peer);\n\t\t\t\tvar tmp = +(new Date); tmp = (tmp - (peer.met||tmp));\n\t\t\t\tmesh.bye.time = ((mesh.bye.time || tmp) + tmp) / 2;\n\t\t\t}\n\t\t\tmesh.hear['!'] = function(msg, peer){ opt.log('Error:', msg.err) }\n\t\t\tmesh.hear['?'] = function(msg, peer){\n\t\t\t\tif(msg.pid){\n\t\t\t\t\tif(!peer.pid){ peer.pid = msg.pid }\n\t\t\t\t\tif(msg['@']){ return }\n\t\t\t\t}\n\t\t\t\tmesh.say({dam: '?', pid: opt.pid, '@': msg['#']}, peer);\n\t\t\t\tdelete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self\n\t\t\t}\n\t\t\tmesh.hear['mob'] = function(msg, peer){ // NOTE: AXE will overload this with better logic.\n\t\t\t\tif(!msg.peers){ return }\n\t\t\t\tvar peers = Object.keys(msg.peers), one = peers[(Math.random()*peers.length) >> 0];\n\t\t\t\tif(!one){ return }\n\t\t\t\tmesh.bye(peer);\n\t\t\t\tmesh.hi(one);\n\t\t\t}\n\n\t\t\troot.on('create', function(root){\n\t\t\t\troot.opt.pid = root.opt.pid || String.random(9);\n\t\t\t\tthis.to.next(root);\n\t\t\t\troot.on('out', mesh.say);\n\t\t\t});\n\n\t\t\troot.on('bye', function(peer, tmp){\n\t\t\t\tpeer = opt.peers[peer.id || peer] || peer;\n\t\t\t\tthis.to.next(peer);\n\t\t\t\tpeer.bye? peer.bye() : (tmp = peer.wire) && tmp.close && tmp.close();\n\t\t\t\tdelete opt.peers[peer.id];\n\t\t\t\tpeer.wire = null;\n\t\t\t});\n\n\t\t\tvar gets = {};\n\t\t\troot.on('bye', function(peer, tmp){ this.to.next(peer);\n\t\t\t\tif(tmp = console.STAT){ tmp.peers = mesh.near; }\n\t\t\t\tif(!(tmp = peer.url)){ return } gets[tmp] = true;\n\t\t\t\tsetTimeout(function(){ delete gets[tmp] },opt.lack || 9000);\n\t\t\t});\n\t\t\troot.on('hi', function(peer, tmp){ this.to.next(peer);\n\t\t\t\tif(tmp = console.STAT){ tmp.peers = mesh.near }\n\t\t\t\tif(opt.super){ return } // temporary (?) until we have better fix/solution?\n\t\t\t\tvar souls = Object.keys(root.next||''); // TODO: .keys( is slow\n\t\t\t\tif(souls.length > 9999 && !console.SUBS){ console.log(console.SUBS = \"Warning: You have more than 10K live GETs, which might use more bandwidth than your screen can show - consider `.off()`.\") }\n\t\t\t\tsetTimeout.each(souls, function(soul){ var node = root.next[soul];\n\t\t\t\t\tif(opt.super || (node.ask||'')['']){ mesh.say({get: {'#': soul}}, peer); return }\n\t\t\t\t\tsetTimeout.each(Object.keys(node.ask||''), function(key){ if(!key){ return }\n\t\t\t\t\t\t// is the lack of ## a !onion hint?\n\t\t\t\t\t\tmesh.say({'##': String.hash((root.graph[soul]||'')[key]), get: {'#': soul, '.': key}}, peer);\n\t\t\t\t\t\t// TODO: Switch this so Book could route?\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn mesh;\n\t\t}\n\t var empty = {}, ok = true, u;\n\n\t try{ module.exports = Mesh }catch(e){}\n\n\t})(USE, './mesh');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.Mesh = USE('./mesh');\n\n\t\t// TODO: resync upon reconnect online/offline\n\t\t//window.ononline = window.onoffline = function(){ console.log('online?', navigator.onLine) }\n\n\t\tGun.on('opt', function(root){\n\t\t\tthis.to.next(root);\n\t\t\tif(root.once){ return }\n\t\t\tvar opt = root.opt;\n\t\t\tif(false === opt.WebSocket){ return }\n\n\t\t\tvar env = Gun.window || {};\n\t\t\tvar websocket = opt.WebSocket || env.WebSocket || env.webkitWebSocket || env.mozWebSocket;\n\t\t\tif(!websocket){ return }\n\t\t\topt.WebSocket = websocket;\n\n\t\t\tvar mesh = opt.mesh = opt.mesh || Gun.Mesh(root);\n\n\t\t\tvar wire = mesh.wire || opt.wire;\n\t\t\tmesh.wire = opt.wire = open;\n\t\t\tfunction open(peer){ try{\n\t\t\t\tif(!peer || !peer.url){ return wire && wire(peer) }\n\t\t\t\tvar url = peer.url.replace(/^http/, 'ws');\n\t\t\t\tvar wire = peer.wire = new opt.WebSocket(url);\n\t\t\t\twire.onclose = function(){\n\t\t\t\t\treconnect(peer);\n\t\t\t\t\topt.mesh.bye(peer);\n\t\t\t\t};\n\t\t\t\twire.onerror = function(err){\n\t\t\t\t\treconnect(peer);\n\t\t\t\t};\n\t\t\t\twire.onopen = function(){\n\t\t\t\t\topt.mesh.hi(peer);\n\t\t\t\t}\n\t\t\t\twire.onmessage = function(msg){\n\t\t\t\t\tif(!msg){ return }\n\t\t\t\t\topt.mesh.hear(msg.data || msg, peer);\n\t\t\t\t};\n\t\t\t\treturn wire;\n\t\t\t}catch(e){ opt.mesh.bye(peer) }}\n\n\t\t\tsetTimeout(function(){ !opt.super && root.on('out', {dam:'hi'}) },1); // it can take a while to open a socket, so maybe no longer lazy load for perf reasons?\n\n\t\t\tvar wait = 2 * 999;\n\t\t\tfunction reconnect(peer){\n\t\t\t\tclearTimeout(peer.defer);\n\t\t\t\tif(!opt.peers[peer.url]){ return }\n\t\t\t\tif(doc && peer.retry <= 0){ return }\n\t\t\t\tpeer.retry = (peer.retry || opt.retry+1 || 60) - ((-peer.tried + (peer.tried = +new Date) < wait*4)?1:0);\n\t\t\t\tpeer.defer = setTimeout(function to(){\n\t\t\t\t\tif(doc && doc.hidden){ return setTimeout(to,wait) }\n\t\t\t\t\topen(peer);\n\t\t\t\t}, wait);\n\t\t\t}\n\t\t\tvar doc = (''+u !== typeof document) && document;\n\t\t});\n\t\tvar noop = function(){}, u;\n\t})(USE, './websocket');\n\n\t;USE(function(module){\n\t\tif(typeof Gun === 'undefined'){ return }\n\n\t\tvar noop = function(){}, store, u;\n\t\ttry{store = (Gun.window||noop).localStorage}catch(e){}\n\t\tif(!store){\n\t\t\tGun.log(\"Warning: No localStorage exists to persist data to!\");\n\t\t\tstore = {setItem: function(k,v){this[k]=v}, removeItem: function(k){delete this[k]}, getItem: function(k){return this[k]}};\n\t\t}\n\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n\t\tGun.on('create', function lg(root){\n\t\t\tthis.to.next(root);\n\t\t\tvar opt = root.opt, graph = root.graph, acks = [], disk, to, size, stop;\n\t\t\tif(false === opt.localStorage){ return }\n\t\t\topt.prefix = opt.file || 'gun/';\n\t\t\ttry{ disk = lg[opt.prefix] = lg[opt.prefix] || JSON.parse(size = store.getItem(opt.prefix)) || {}; // TODO: Perf! This will block, should we care, since limited to 5MB anyways?\n\t\t\t}catch(e){ disk = lg[opt.prefix] = {}; }\n\t\t\tsize = (size||'').length;\n\n\t\t\troot.on('get', function(msg){\n\t\t\t\tthis.to.next(msg);\n\t\t\t\tvar lex = msg.get, soul, data, tmp, u;\n\t\t\t\tif(!lex || !(soul = lex['#'])){ return }\n\t\t\t\tdata = disk[soul] || u;\n\t\t\t\tif(data && (tmp = lex['.']) && !Object.plain(tmp)){ // pluck!\n\t\t\t\t\tdata = Gun.state.ify({}, tmp, Gun.state.is(data, tmp), data[tmp], soul);\n\t\t\t\t}\n\t\t\t\t//if(data){ (tmp = {})[soul] = data } // back into a graph.\n\t\t\t\t//setTimeout(function(){\n\t\t\t\tGun.on.get.ack(msg, data); //root.on('in', {'@': msg['#'], put: tmp, lS:1});// || root.$});\n\t\t\t\t//}, Math.random() * 10); // FOR TESTING PURPOSES!\n\t\t\t});\n\n\t\t\troot.on('put', function(msg){\n\t\t\t\tthis.to.next(msg); // remember to call next middleware adapter\n\t\t\t\tvar put = msg.put, soul = put['#'], key = put['.'], id = msg['#'], ok = msg.ok||'', tmp; // pull data off wire envelope\n\t\t\t\tdisk[soul] = Gun.state.ify(disk[soul], key, put['>'], put[':'], soul); // merge into disk object\n\t\t\t\tif(stop && size > (4999880)){ root.on('in', {'@': id, err: \"localStorage max!\"}); return; }\n\t\t\t\t//if(!msg['@']){ acks.push(id) } // then ack any non-ack write. // TODO: use batch id.\n\t\t\t\tif(!msg['@'] && (!msg._.via || Math.random() < (ok['@'] / ok['/']))){ acks.push(id) } // then ack any non-ack write. // TODO: use batch id.\n\t\t\t\tif(to){ return }\n\t\t\t\tto = setTimeout(flush, 9+(size / 333)); // 0.1MB = 0.3s, 5MB = 15s \n\t\t\t});\n\t\t\tfunction flush(){\n\t\t\t\tif(!acks.length && ((setTimeout.turn||'').s||'').length){ setTimeout(flush,99); return; } // defer if \"busy\" && no saves.\n\t\t\t\tvar err, ack = acks; clearTimeout(to); to = false; acks = [];\n\t\t\t\tjson(disk, function(err, tmp){\n\t\t\t\t\ttry{!err && store.setItem(opt.prefix, tmp);\n\t\t\t\t\t}catch(e){ err = stop = e || \"localStorage failure\" }\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tGun.log(err + \" Consider using GUN's IndexedDB plugin for RAD for more storage space, https://gun.eco/docs/RAD#install\");\n\t\t\t\t\t\troot.on('localStorage:error', {err: err, get: opt.prefix, put: disk});\n\t\t\t\t\t}\n\t\t\t\t\tsize = tmp.length;\n\n\t\t\t\t\t//if(!err && !Object.empty(opt.peers)){ return } // only ack if there are no peers. // Switch this to probabilistic mode\n\t\t\t\t\tsetTimeout.each(ack, function(id){\n\t\t\t\t\t\troot.on('in', {'@': id, err: err, ok: 0}); // localStorage isn't reliable, so make its `ok` code be a low number.\n\t\t\t\t\t},0,99);\n\t\t\t\t})\n\t\t\t}\n\t\t\n\t\t});\n\t})(USE, './localStorage');\n\n}());\n\n/* BELOW IS TEMPORARY FOR OLD INTERNAL COMPATIBILITY, THEY ARE IMMEDIATELY DEPRECATED AND WILL BE REMOVED IN NEXT VERSION */\n;(function(){\n\tvar u;\n\tif(''+u == typeof Gun){ return }\n\tvar DEP = function(n){ console.warn(\"Warning! Deprecated internal utility will break in next version:\", n) }\n\t// Generic javascript utilities.\n\tvar Type = Gun;\n\t//Type.fns = Type.fn = {is: function(fn){ return (!!fn && fn instanceof Function) }}\n\tType.fn = Type.fn || {is: function(fn){ DEP('fn'); return (!!fn && 'function' == typeof fn) }}\n\tType.bi = Type.bi || {is: function(b){ DEP('bi');return (b instanceof Boolean || typeof b == 'boolean') }}\n\tType.num = Type.num || {is: function(n){ DEP('num'); return !list_is(n) && ((n - parseFloat(n) + 1) >= 0 || Infinity === n || -Infinity === n) }}\n\tType.text = Type.text || {is: function(t){ DEP('text'); return (typeof t == 'string') }}\n\tType.text.ify = Type.text.ify || function(t){ DEP('text.ify');\n\t\tif(Type.text.is(t)){ return t }\n\t\tif(typeof JSON !== \"undefined\"){ return JSON.stringify(t) }\n\t\treturn (t && t.toString)? t.toString() : t;\n\t}\n\tType.text.random = Type.text.random || function(l, c){ DEP('text.random');\n\t\tvar s = '';\n\t\tl = l || 24; // you are not going to make a 0 length random number, so no need to check type\n\t\tc = c || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz';\n\t\twhile(l > 0){ s += c.charAt(Math.floor(Math.random() * c.length)); l-- }\n\t\treturn s;\n\t}\n\tType.text.match = Type.text.match || function(t, o){ var tmp, u; DEP('text.match');\n\t\tif('string' !== typeof t){ return false }\n\t\tif('string' == typeof o){ o = {'=': o} }\n\t\to = o || {};\n\t\ttmp = (o['='] || o['*'] || o['>'] || o['<']);\n\t\tif(t === tmp){ return true }\n\t\tif(u !== o['=']){ return false }\n\t\ttmp = (o['*'] || o['>'] || o['<']);\n\t\tif(t.slice(0, (tmp||'').length) === tmp){ return true }\n\t\tif(u !== o['*']){ return false }\n\t\tif(u !== o['>'] && u !== o['<']){\n\t\t\treturn (t >= o['>'] && t <= o['<'])? true : false;\n\t\t}\n\t\tif(u !== o['>'] && t >= o['>']){ return true }\n\t\tif(u !== o['<'] && t <= o['<']){ return true }\n\t\treturn false;\n\t}\n\tType.text.hash = Type.text.hash || function(s, c){ // via SO\n\t\tDEP('text.hash');\n\t\tif(typeof s !== 'string'){ return }\n\t c = c || 0;\n\t if(!s.length){ return c }\n\t for(var i=0,l=s.length,n; i B){ return 1 }\n\t\t\telse { return 0 }\n\t\t}\n\t}\n\tType.list.map = Type.list.map || function(l, c, _){ DEP('list.map'); return obj_map(l, c, _) }\n\tType.list.index = 1; // change this to 0 if you want non-logical, non-mathematical, non-matrix, non-convenient array notation\n\tType.obj = Type.boj || {is: function(o){ DEP('obj'); return o? (o instanceof Object && o.constructor === Object) || Object.prototype.toString.call(o).match(/^\\[object (\\w+)\\]$/)[1] === 'Object' : false }}\n\tType.obj.put = Type.obj.put || function(o, k, v){ DEP('obj.put'); return (o||{})[k] = v, o }\n\tType.obj.has = Type.obj.has || function(o, k){ DEP('obj.has'); return o && Object.prototype.hasOwnProperty.call(o, k) }\n\tType.obj.del = Type.obj.del || function(o, k){ DEP('obj.del'); \n\t\tif(!o){ return }\n\t\to[k] = null;\n\t\tdelete o[k];\n\t\treturn o;\n\t}\n\tType.obj.as = Type.obj.as || function(o, k, v, u){ DEP('obj.as'); return o[k] = o[k] || (u === v? {} : v) }\n\tType.obj.ify = Type.obj.ify || function(o){ DEP('obj.ify'); \n\t\tif(obj_is(o)){ return o }\n\t\ttry{o = JSON.parse(o);\n\t\t}catch(e){o={}};\n\t\treturn o;\n\t}\n\t;(function(){ var u;\n\t\tfunction map(v,k){\n\t\t\tif(obj_has(this,k) && u !== this[k]){ return }\n\t\t\tthis[k] = v;\n\t\t}\n\t\tType.obj.to = Type.obj.to || function(from, to){ DEP('obj.to'); \n\t\t\tto = to || {};\n\t\t\tobj_map(from, map, to);\n\t\t\treturn to;\n\t\t}\n\t}());\n\tType.obj.copy = Type.obj.copy || function(o){ DEP('obj.copy'); // because http://web.archive.org/web/20140328224025/http://jsperf.com/cloning-an-object/2\n\t\treturn !o? o : JSON.parse(JSON.stringify(o)); // is shockingly faster than anything else, and our data has to be a subset of JSON anyways!\n\t}\n\t;(function(){\n\t\tfunction empty(v,i){ var n = this.n, u;\n\t\t\tif(n && (i === n || (obj_is(n) && obj_has(n, i)))){ return }\n\t\t\tif(u !== i){ return true }\n\t\t}\n\t\tType.obj.empty = Type.obj.empty || function(o, n){ DEP('obj.empty'); \n\t\t\tif(!o){ return true }\n\t\t\treturn obj_map(o,empty,{n:n})? false : true;\n\t\t}\n\t}());\n\t;(function(){\n\t\tfunction t(k,v){\n\t\t\tif(2 === arguments.length){\n\t\t\t\tt.r = t.r || {};\n\t\t\t\tt.r[k] = v;\n\t\t\t\treturn;\n\t\t\t} t.r = t.r || [];\n\t\t\tt.r.push(k);\n\t\t};\n\t\tvar keys = Object.keys, map, u;\n\t\tObject.keys = Object.keys || function(o){ return map(o, function(v,k,t){t(k)}) }\n\t\tType.obj.map = map = Type.obj.map || function(l, c, _){ DEP('obj.map'); \n\t\t\tvar u, i = 0, x, r, ll, lle, f = 'function' == typeof c;\n\t\t\tt.r = u;\n\t\t\tif(keys && obj_is(l)){\n\t\t\t\tll = keys(l); lle = true;\n\t\t\t}\n\t\t\t_ = _ || {};\n\t\t\tif(list_is(l) || ll){\n\t\t\t\tx = (ll || l).length;\n\t\t\t\tfor(;i < x; i++){\n\t\t\t\t\tvar ii = (i + Type.list.index);\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tr = lle? c.call(_, l[ll[i]], ll[i], t) : c.call(_, l[i], ii, t);\n\t\t\t\t\t\tif(r !== u){ return r }\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if(Type.test.is(c,l[i])){ return ii } // should implement deep equality testing!\n\t\t\t\t\t\tif(c === l[lle? ll[i] : i]){ return ll? ll[i] : ii } // use this for now\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor(i in l){\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tif(obj_has(l,i)){\n\t\t\t\t\t\t\tr = _? c.call(_, l[i], i, t) : c(l[i], i, t);\n\t\t\t\t\t\t\tif(r !== u){ return r }\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if(a.test.is(c,l[i])){ return i } // should implement deep equality testing!\n\t\t\t\t\t\tif(c === l[i]){ return i } // use this for now\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn f? t.r : Type.list.index? 0 : -1;\n\t\t}\n\t}());\n\tType.time = Type.time || {};\n\tType.time.is = Type.time.is || function(t){ DEP('time'); return t? t instanceof Date : (+new Date().getTime()) }\n\n\tvar fn_is = Type.fn.is;\n\tvar list_is = Type.list.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_has = obj.has, obj_map = obj.map;\n\n\tvar Val = {};\n\tVal.is = function(v){ DEP('val.is'); // Valid values are a subset of JSON: null, binary, number (!Infinity), text, or a soul relation. Arrays need special algorithms to handle concurrency, so they are not supported directly. Use an extension that supports them if needed but research their problems first.\n\t\tif(v === u){ return false }\n\t\tif(v === null){ return true } // \"deletes\", nulling out keys.\n\t\tif(v === Infinity){ return false } // we want this to be, but JSON does not support it, sad face.\n\t\tif(text_is(v) // by \"text\" we mean strings.\n\t\t|| bi_is(v) // by \"binary\" we mean boolean.\n\t\t|| num_is(v)){ // by \"number\" we mean integers or decimals.\n\t\t\treturn true; // simple values are valid.\n\t\t}\n\t\treturn Val.link.is(v) || false; // is the value a soul relation? Then it is valid and return it. If not, everything else remaining is an invalid data type. Custom extensions can be built on top of these primitives to support other types.\n\t}\n\tVal.link = Val.rel = {_: '#'};\n\t;(function(){\n\t\tVal.link.is = function(v){ DEP('val.link.is'); // this defines whether an object is a soul relation or not, they look like this: {'#': 'UUID'}\n\t\t\tif(v && v[rel_] && !v._ && obj_is(v)){ // must be an object.\n\t\t\t\tvar o = {};\n\t\t\t\tobj_map(v, map, o);\n\t\t\t\tif(o.id){ // a valid id was found.\n\t\t\t\t\treturn o.id; // yay! Return it.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false; // the value was not a valid soul relation.\n\t\t}\n\t\tfunction map(s, k){ var o = this; // map over the object...\n\t\t\tif(o.id){ return o.id = false } // if ID is already defined AND we're still looping through the object, it is considered invalid.\n\t\t\tif(k == rel_ && text_is(s)){ // the key should be '#' and have a text value.\n\t\t\t\to.id = s; // we found the soul!\n\t\t\t} else {\n\t\t\t\treturn o.id = false; // if there exists anything else on the object that isn't the soul, then it is considered invalid.\n\t\t\t}\n\t\t}\n\t}());\n\tVal.link.ify = function(t){ DEP('val.link.ify'); return obj_put({}, rel_, t) } // convert a soul into a relation and return it.\n\tType.obj.has._ = '.';\n\tvar rel_ = Val.link._, u;\n\tvar bi_is = Type.bi.is;\n\tvar num_is = Type.num.is;\n\tvar text_is = Type.text.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_put = obj.put, obj_map = obj.map;\n\n\tType.val = Type.val || Val;\n\n\tvar Node = {_: '_'};\n\tNode.soul = function(n, o){ DEP('node.soul'); return (n && n._ && n._[o || soul_]) } // convenience function to check to see if there is a soul on a node and return it.\n\tNode.soul.ify = function(n, o){ DEP('node.soul.ify'); // put a soul on an object.\n\t\to = (typeof o === 'string')? {soul: o} : o || {};\n\t\tn = n || {}; // make sure it exists.\n\t\tn._ = n._ || {}; // make sure meta exists.\n\t\tn._[soul_] = o.soul || n._[soul_] || text_random(); // put the soul on it.\n\t\treturn n;\n\t}\n\tNode.soul._ = Val.link._;\n\t;(function(){\n\t\tNode.is = function(n, cb, as){ DEP('node.is'); var s; // checks to see if an object is a valid node.\n\t\t\tif(!obj_is(n)){ return false } // must be an object.\n\t\t\tif(s = Node.soul(n)){ // must have a soul on it.\n\t\t\t\treturn !obj_map(n, map, {as:as,cb:cb,s:s,n:n});\n\t\t\t}\n\t\t\treturn false; // nope! This was not a valid node.\n\t\t}\n\t\tfunction map(v, k){ // we invert this because the way we check for this is via a negation.\n\t\t\tif(k === Node._){ return } // skip over the metadata.\n\t\t\tif(!Val.is(v)){ return true } // it is true that this is an invalid node.\n\t\t\tif(this.cb){ this.cb.call(this.as, v, k, this.n, this.s) } // optionally callback each key/value.\n\t\t}\n\t}());\n\t;(function(){\n\t\tNode.ify = function(obj, o, as){ DEP('node.ify'); // returns a node from a shallow object.\n\t\t\tif(!o){ o = {} }\n\t\t\telse if(typeof o === 'string'){ o = {soul: o} }\n\t\t\telse if('function' == typeof o){ o = {map: o} }\n\t\t\tif(o.map){ o.node = o.map.call(as, obj, u, o.node || {}) }\n\t\t\tif(o.node = Node.soul.ify(o.node || {}, o)){\n\t\t\t\tobj_map(obj, map, {o:o,as:as});\n\t\t\t}\n\t\t\treturn o.node; // This will only be a valid node if the object wasn't already deep!\n\t\t}\n\t\tfunction map(v, k){ var o = this.o, tmp, u; // iterate over each key/value.\n\t\t\tif(o.map){\n\t\t\t\ttmp = o.map.call(this.as, v, ''+k, o.node);\n\t\t\t\tif(u === tmp){\n\t\t\t\t\tobj_del(o.node, k);\n\t\t\t\t} else\n\t\t\t\tif(o.node){ o.node[k] = tmp }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(Val.is(v)){\n\t\t\t\to.node[k] = v;\n\t\t\t}\n\t\t}\n\t}());\n\tvar obj = Type.obj, obj_is = obj.is, obj_del = obj.del, obj_map = obj.map;\n\tvar text = Type.text, text_random = text.random;\n\tvar soul_ = Node.soul._;\n\tvar u;\n\tType.node = Type.node || Node;\n\n\tvar State = Type.state;\n\tState.lex = function(){ DEP('state.lex'); return State().toString(36).replace('.','') }\n\tState.to = function(from, k, to){ DEP('state.to'); \n\t\tvar val = (from||{})[k];\n\t\tif(obj_is(val)){\n\t\t\tval = obj_copy(val);\n\t\t}\n\t\treturn State.ify(to, k, State.is(from, k), val, Node.soul(from));\n\t}\n\t;(function(){\n\t\tState.map = function(cb, s, as){ DEP('state.map'); var u; // for use with Node.ify\n\t\t\tvar o = obj_is(o = cb || s)? o : null;\n\t\t\tcb = fn_is(cb = cb || s)? cb : null;\n\t\t\tif(o && !cb){\n\t\t\t\ts = num_is(s)? s : State();\n\t\t\t\to[N_] = o[N_] || {};\n\t\t\t\tobj_map(o, map, {o:o,s:s});\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tas = as || obj_is(s)? s : u;\n\t\t\ts = num_is(s)? s : State();\n\t\t\treturn function(v, k, o, opt){\n\t\t\t\tif(!cb){\n\t\t\t\t\tmap.call({o: o, s: s}, v,k);\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\tcb.call(as || this || {}, v, k, o, opt);\n\t\t\t\tif(obj_has(o,k) && u === o[k]){ return }\n\t\t\t\tmap.call({o: o, s: s}, v,k);\n\t\t\t}\n\t\t}\n\t\tfunction map(v,k){\n\t\t\tif(N_ === k){ return }\n\t\t\tState.ify(this.o, k, this.s) ;\n\t\t}\n\t}());\n\tvar obj = Type.obj, obj_as = obj.as, obj_has = obj.has, obj_is = obj.is, obj_map = obj.map, obj_copy = obj.copy;\n\tvar num = Type.num, num_is = num.is;\n\tvar fn = Type.fn, fn_is = fn.is;\n\tvar N_ = Node._, u;\n\n\tvar Graph = {};\n\t;(function(){\n\t\tGraph.is = function(g, cb, fn, as){ DEP('graph.is'); // checks to see if an object is a valid graph.\n\t\t\tif(!g || !obj_is(g) || obj_empty(g)){ return false } // must be an object.\n\t\t\treturn !obj_map(g, map, {cb:cb,fn:fn,as:as}); // makes sure it wasn't an empty object.\n\t\t}\n\t\tfunction map(n, s){ // we invert this because the way'? we check for this is via a negation.\n\t\t\tif(!n || s !== Node.soul(n) || !Node.is(n, this.fn, this.as)){ return true } // it is true that this is an invalid graph.\n\t\t\tif(!this.cb){ return }\n\t\t\tnf.n = n; nf.as = this.as; // sequential race conditions aren't races.\n\t\t\tthis.cb.call(nf.as, n, s, nf);\n\t\t}\n\t\tfunction nf(fn){ // optional callback for each node.\n\t\t\tif(fn){ Node.is(nf.n, fn, nf.as) } // where we then have an optional callback for each key/value.\n\t\t}\n\t}());\n\t;(function(){\n\t\tGraph.ify = function(obj, env, as){ DEP('graph.ify'); \n\t\t\tvar at = {path: [], obj: obj};\n\t\t\tif(!env){\n\t\t\t\tenv = {};\n\t\t\t} else\n\t\t\tif(typeof env === 'string'){\n\t\t\t\tenv = {soul: env};\n\t\t\t} else\n\t\t\tif('function' == typeof env){\n\t\t\t\tenv.map = env;\n\t\t\t}\n\t\t\tif(typeof as === 'string'){\n\t\t\t\tenv.soul = env.soul || as;\n\t\t\t\tas = u;\n\t\t\t}\n\t\t\tif(env.soul){\n\t\t\t\tat.link = Val.link.ify(env.soul);\n\t\t\t}\n\t\t\tenv.shell = (as||{}).shell;\n\t\t\tenv.graph = env.graph || {};\n\t\t\tenv.seen = env.seen || [];\n\t\t\tenv.as = env.as || as;\n\t\t\tnode(env, at);\n\t\t\tenv.root = at.node;\n\t\t\treturn env.graph;\n\t\t}\n\t\tfunction node(env, at){ var tmp;\n\t\t\tif(tmp = seen(env, at)){ return tmp }\n\t\t\tat.env = env;\n\t\t\tat.soul = soul;\n\t\t\tif(Node.ify(at.obj, map, at)){\n\t\t\t\tat.link = at.link || Val.link.ify(Node.soul(at.node));\n\t\t\t\tif(at.obj !== env.shell){\n\t\t\t\t\tenv.graph[Val.link.is(at.link)] = at.node;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn at;\n\t\t}\n\t\tfunction map(v,k,n){\n\t\t\tvar at = this, env = at.env, is, tmp;\n\t\t\tif(Node._ === k && obj_has(v,Val.link._)){\n\t\t\t\treturn n._; // TODO: Bug?\n\t\t\t}\n\t\t\tif(!(is = valid(v,k,n, at,env))){ return }\n\t\t\tif(!k){\n\t\t\t\tat.node = at.node || n || {};\n\t\t\t\tif(obj_has(v, Node._) && Node.soul(v)){ // ? for safety ?\n\t\t\t\t\tat.node._ = obj_copy(v._);\n\t\t\t\t}\n\t\t\t\tat.node = Node.soul.ify(at.node, Val.link.is(at.link));\n\t\t\t\tat.link = at.link || Val.link.ify(Node.soul(at.node));\n\t\t\t}\n\t\t\tif(tmp = env.map){\n\t\t\t\ttmp.call(env.as || {}, v,k,n, at);\n\t\t\t\tif(obj_has(n,k)){\n\t\t\t\t\tv = n[k];\n\t\t\t\t\tif(u === v){\n\t\t\t\t\t\tobj_del(n, k);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(!(is = valid(v,k,n, at,env))){ return }\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!k){ return at.node }\n\t\t\tif(true === is){\n\t\t\t\treturn v;\n\t\t\t}\n\t\t\ttmp = node(env, {obj: v, path: at.path.concat(k)});\n\t\t\tif(!tmp.node){ return }\n\t\t\treturn tmp.link; //{'#': Node.soul(tmp.node)};\n\t\t}\n\t\tfunction soul(id){ var at = this;\n\t\t\tvar prev = Val.link.is(at.link), graph = at.env.graph;\n\t\t\tat.link = at.link || Val.link.ify(id);\n\t\t\tat.link[Val.link._] = id;\n\t\t\tif(at.node && at.node[Node._]){\n\t\t\t\tat.node[Node._][Val.link._] = id;\n\t\t\t}\n\t\t\tif(obj_has(graph, prev)){\n\t\t\t\tgraph[id] = graph[prev];\n\t\t\t\tobj_del(graph, prev);\n\t\t\t}\n\t\t}\n\t\tfunction valid(v,k,n, at,env){ var tmp;\n\t\t\tif(Val.is(v)){ return true }\n\t\t\tif(obj_is(v)){ return 1 }\n\t\t\tif(tmp = env.invalid){\n\t\t\t\tv = tmp.call(env.as || {}, v,k,n);\n\t\t\t\treturn valid(v,k,n, at,env);\n\t\t\t}\n\t\t\tenv.err = \"Invalid value at '\" + at.path.concat(k).join('.') + \"'!\";\n\t\t\tif(Type.list.is(v)){ env.err += \" Use `.set(item)` instead of an Array.\" }\n\t\t}\n\t\tfunction seen(env, at){\n\t\t\tvar arr = env.seen, i = arr.length, has;\n\t\t\twhile(i--){ has = arr[i];\n\t\t\t\tif(at.obj === has.obj){ return has }\n\t\t\t}\n\t\t\tarr.push(at);\n\t\t}\n\t}());\n\tGraph.node = function(node){ DEP('graph.node'); \n\t\tvar soul = Node.soul(node);\n\t\tif(!soul){ return }\n\t\treturn obj_put({}, soul, node);\n\t}\n\t;(function(){\n\t\tGraph.to = function(graph, root, opt){ DEP('graph.to'); \n\t\t\tif(!graph){ return }\n\t\t\tvar obj = {};\n\t\t\topt = opt || {seen: {}};\n\t\t\tobj_map(graph[root], map, {obj:obj, graph: graph, opt: opt});\n\t\t\treturn obj;\n\t\t}\n\t\tfunction map(v,k){ var tmp, obj;\n\t\t\tif(Node._ === k){\n\t\t\t\tif(obj_empty(v, Val.link._)){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.obj[k] = obj_copy(v);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!(tmp = Val.link.is(v))){\n\t\t\t\tthis.obj[k] = v;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(obj = this.opt.seen[tmp]){\n\t\t\t\tthis.obj[k] = obj;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.obj[k] = this.opt.seen[tmp] = Graph.to(this.graph, tmp, this.opt);\n\t\t}\n\t}());\n\tvar fn_is = Type.fn.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_del = obj.del, obj_has = obj.has, obj_empty = obj.empty, obj_put = obj.put, obj_map = obj.map, obj_copy = obj.copy;\n\tvar u;\n\tType.graph = Type.graph || Graph;\n}());",";(function(){\n\n var window = this || self || window;\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n ;USE(function(module){\n // Security, Encryption, and Authorization: SEA.js\n // MANDATORY READING: https://gun.eco/explainers/data/security.html\n // IT IS IMPLEMENTED IN A POLYFILL/SHIM APPROACH.\n // THIS IS AN EARLY ALPHA!\n\n if(typeof window !== \"undefined\"){ module.window = window }\n\n var tmp = module.window || module, u;\n var SEA = tmp.SEA || {};\n\n if(SEA.window = module.window){ SEA.window.SEA = SEA }\n\n try{ if(u+'' !== typeof MODULE){ MODULE.exports = SEA } }catch(e){}\n module.exports = SEA;\n })(USE, './root');\n\n ;USE(function(module){\n var SEA = USE('./root');\n try{ if(SEA.window){\n if(location.protocol.indexOf('s') < 0\n && location.host.indexOf('localhost') < 0\n && ! /^127\\.\\d+\\.\\d+\\.\\d+$/.test(location.hostname)\n && location.protocol.indexOf('file:') < 0){\n console.warn('HTTPS needed for WebCrypto in SEA, redirecting...');\n location.protocol = 'https:'; // WebCrypto does NOT work without HTTPS!\n }\n } }catch(e){}\n })(USE, './https');\n\n ;USE(function(module){\n var u;\n if(u+''== typeof btoa){\n if(u+'' == typeof Buffer){\n try{ global.Buffer = USE(\"buffer\", 1).Buffer }catch(e){ console.log(\"Please `npm install buffer` or add it to your package.json !\") }\n }\n global.btoa = function(data){ return Buffer.from(data, \"binary\").toString(\"base64\") };\n global.atob = function(data){ return Buffer.from(data, \"base64\").toString(\"binary\") };\n }\n })(USE, './base64');\n\n ;USE(function(module){\n USE('./base64');\n // This is Array extended to have .toString(['utf8'|'hex'|'base64'])\n function SeaArray() {}\n Object.assign(SeaArray, { from: Array.from })\n SeaArray.prototype = Object.create(Array.prototype)\n SeaArray.prototype.toString = function(enc, start, end) { enc = enc || 'utf8'; start = start || 0;\n const length = this.length\n if (enc === 'hex') {\n const buf = new Uint8Array(this)\n return [ ...Array(((end && (end + 1)) || length) - start).keys()]\n .map((i) => buf[ i + start ].toString(16).padStart(2, '0')).join('')\n }\n if (enc === 'utf8') {\n return Array.from(\n { length: (end || length) - start },\n (_, i) => String.fromCharCode(this[ i + start])\n ).join('')\n }\n if (enc === 'base64') {\n return btoa(this)\n }\n }\n module.exports = SeaArray;\n })(USE, './array');\n\n ;USE(function(module){\n USE('./base64');\n // This is Buffer implementation used in SEA. Functionality is mostly\n // compatible with NodeJS 'safe-buffer' and is used for encoding conversions\n // between binary and 'hex' | 'utf8' | 'base64'\n // See documentation and validation for safe implementation in:\n // https://github.com/feross/safe-buffer#update\n var SeaArray = USE('./array');\n function SafeBuffer(...props) {\n console.warn('new SafeBuffer() is depreciated, please use SafeBuffer.from()')\n return SafeBuffer.from(...props)\n }\n SafeBuffer.prototype = Object.create(Array.prototype)\n Object.assign(SafeBuffer, {\n // (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'\n from() {\n if (!Object.keys(arguments).length || arguments[0]==null) {\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n }\n const input = arguments[0]\n let buf\n if (typeof input === 'string') {\n const enc = arguments[1] || 'utf8'\n if (enc === 'hex') {\n const bytes = input.match(/([\\da-fA-F]{2})/g)\n .map((byte) => parseInt(byte, 16))\n if (!bytes || !bytes.length) {\n throw new TypeError('Invalid first argument for type \\'hex\\'.')\n }\n buf = SeaArray.from(bytes)\n } else if (enc === 'utf8' || 'binary' === enc) { // EDIT BY MARK: I think this is safe, tested it against a couple \"binary\" strings. This lets SafeBuffer match NodeJS Buffer behavior more where it safely btoas regular strings.\n const length = input.length\n const words = new Uint16Array(length)\n Array.from({ length: length }, (_, i) => words[i] = input.charCodeAt(i))\n buf = SeaArray.from(words)\n } else if (enc === 'base64') {\n const dec = atob(input)\n const length = dec.length\n const bytes = new Uint8Array(length)\n Array.from({ length: length }, (_, i) => bytes[i] = dec.charCodeAt(i))\n buf = SeaArray.from(bytes)\n } else if (enc === 'binary') { // deprecated by above comment\n buf = SeaArray.from(input) // some btoas were mishandled.\n } else {\n console.info('SafeBuffer.from unknown encoding: '+enc)\n }\n return buf\n }\n const byteLength = input.byteLength // what is going on here? FOR MARTTI\n const length = input.byteLength ? input.byteLength : input.length\n if (length) {\n let buf\n if (input instanceof ArrayBuffer) {\n buf = new Uint8Array(input)\n }\n return SeaArray.from(buf || input)\n }\n },\n // This is 'safe-buffer.alloc' sans encoding support\n alloc(length, fill = 0 /*, enc*/ ) {\n return SeaArray.from(new Uint8Array(Array.from({ length: length }, () => fill)))\n },\n // This is normal UNSAFE 'buffer.alloc' or 'new Buffer(length)' - don't use!\n allocUnsafe(length) {\n return SeaArray.from(new Uint8Array(Array.from({ length : length })))\n },\n // This puts together array of array like members\n concat(arr) { // octet array\n if (!Array.isArray(arr)) {\n throw new TypeError('First argument must be Array containing ArrayBuffer or Uint8Array instances.')\n }\n return SeaArray.from(arr.reduce((ret, item) => ret.concat(Array.from(item)), []))\n }\n })\n SafeBuffer.prototype.from = SafeBuffer.from\n SafeBuffer.prototype.toString = SeaArray.prototype.toString\n\n module.exports = SafeBuffer;\n })(USE, './buffer');\n\n ;USE(function(module){\n const SEA = USE('./root')\n const api = {Buffer: USE('./buffer')}\n var o = {}, u;\n\n // ideally we can move away from JSON entirely? unlikely due to compatibility issues... oh well.\n JSON.parseAsync = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n JSON.stringifyAsync = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n api.parse = function(t,r){ return new Promise(function(res, rej){\n JSON.parseAsync(t,function(err, raw){ err? rej(err) : res(raw) },r);\n })}\n api.stringify = function(v,r,s){ return new Promise(function(res, rej){\n JSON.stringifyAsync(v,function(err, raw){ err? rej(err) : res(raw) },r,s);\n })}\n\n if(SEA.window){\n api.crypto = window.crypto || window.msCrypto\n api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;\n api.TextEncoder = window.TextEncoder;\n api.TextDecoder = window.TextDecoder;\n api.random = (len) => api.Buffer.from(api.crypto.getRandomValues(new Uint8Array(api.Buffer.alloc(len))));\n }\n if(!api.TextDecoder)\n {\n const { TextEncoder, TextDecoder } = USE((u+'' == typeof MODULE?'.':'')+'./lib/text-encoding', 1);\n api.TextDecoder = TextDecoder;\n api.TextEncoder = TextEncoder;\n }\n if(!api.crypto)\n {\n try\n {\n var crypto = USE('crypto', 1);\n Object.assign(api, {\n crypto,\n random: (len) => api.Buffer.from(crypto.randomBytes(len))\n }); \n const { Crypto: WebCrypto } = USE('@peculiar/webcrypto', 1);\n api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH\n }\n catch(e){\n console.log(\"Please `npm install @peculiar/webcrypto` or add it to your package.json !\");\n }}\n\n module.exports = api\n })(USE, './shim');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var s = {};\n s.pbkdf2 = {hash: {name : 'SHA-256'}, iter: 100000, ks: 64};\n s.ecdsa = {\n pair: {name: 'ECDSA', namedCurve: 'P-256'},\n sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}\n };\n s.ecdh = {name: 'ECDH', namedCurve: 'P-256'};\n\n // This creates Web Cryptography API compliant JWK for sign/verify purposes\n s.jwk = function(pub, d){ // d === priv\n pub = pub.split('.');\n var x = pub[0], y = pub[1];\n var jwk = {kty: \"EC\", crv: \"P-256\", x: x, y: y, ext: true};\n jwk.key_ops = d ? ['sign'] : ['verify'];\n if(d){ jwk.d = d }\n return jwk;\n };\n \n s.keyToJwk = function(keyBytes) {\n const keyB64 = keyBytes.toString('base64');\n const k = keyB64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=/g, '');\n return { kty: 'oct', k: k, ext: false, alg: 'A256GCM' };\n }\n\n s.recall = {\n validity: 12 * 60 * 60, // internally in seconds : 12 hours\n hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)\n };\n\n s.check = function(t){ return (typeof t == 'string') && ('SEA{' === t.slice(0,4)) }\n s.parse = async function p(t){ try {\n var yes = (typeof t == 'string');\n if(yes && 'SEA{' === t.slice(0,4)){ t = t.slice(3) }\n return yes ? await shim.parse(t) : t;\n } catch (e) {}\n return t;\n }\n\n SEA.opt = s;\n module.exports = s\n })(USE, './settings');\n\n ;USE(function(module){\n var shim = USE('./shim');\n module.exports = async function(d, o){\n var t = (typeof d == 'string')? d : await shim.stringify(d);\n var hash = await shim.subtle.digest({name: o||'SHA-256'}, new shim.TextEncoder().encode(t));\n return shim.Buffer.from(hash);\n }\n })(USE, './sha256');\n\n ;USE(function(module){\n // This internal func returns SHA-1 hashed data for KeyID generation\n const __shim = USE('./shim')\n const subtle = __shim.subtle\n const ossl = __shim.ossl ? __shim.ossl : subtle\n const sha1hash = (b) => ossl.digest({name: 'SHA-1'}, new ArrayBuffer(b))\n module.exports = sha1hash\n })(USE, './sha1');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.work = SEA.work || (async (data, pair, cb, opt) => { try { // used to be named `proof`\n var salt = (pair||{}).epub || pair; // epub not recommended, salt should be random!\n opt = opt || {};\n if(salt instanceof Function){\n cb = salt;\n salt = u;\n }\n data = (typeof data == 'string')? data : await shim.stringify(data);\n if('sha' === (opt.name||'').toLowerCase().slice(0,3)){\n var rsha = shim.Buffer.from(await sha(data, opt.name), 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(rsha) }catch(e){console.log(e)} }\n return rsha;\n }\n salt = salt || shim.random(9);\n var key = await (shim.ossl || shim.subtle).importKey('raw', new shim.TextEncoder().encode(data), {name: opt.name || 'PBKDF2'}, false, ['deriveBits']);\n var work = await (shim.ossl || shim.subtle).deriveBits({\n name: opt.name || 'PBKDF2',\n iterations: opt.iterations || S.pbkdf2.iter,\n salt: new shim.TextEncoder().encode(opt.salt || salt),\n hash: opt.hash || S.pbkdf2.hash,\n }, key, opt.length || (S.pbkdf2.ks * 8))\n data = shim.random(data.length) // Erase data in case of passphrase\n var r = shim.Buffer.from(work, 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.work;\n })(USE, './work');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n\n SEA.name = SEA.name || (async (cb, opt) => { try {\n if(cb){ try{ cb() }catch(e){console.log(e)} }\n return;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n //SEA.pair = async (data, proof, cb) => { try {\n SEA.pair = SEA.pair || (async (cb, opt) => { try {\n\n var ecdhSubtle = shim.ossl || shim.subtle;\n // First: ECDSA keys for signing/verifying...\n var sa = await shim.subtle.generateKey({name: 'ECDSA', namedCurve: 'P-256'}, true, [ 'sign', 'verify' ])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n //const { d: priv } = await shim.subtle.exportKey('jwk', keys.privateKey)\n var key = {};\n key.priv = (await shim.subtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await shim.subtle.exportKey('jwk', keys.publicKey);\n //const pub = Buff.from([ x, y ].join(':')).toString('base64') // old\n key.pub = pub.x+'.'+pub.y; // new\n // x and y are already base64\n // pub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n \n // To include PGPv4 kind of keyId:\n // const pubId = await SEA.keyid(keys.pub)\n // Next: ECDH keys for encryption/decryption...\n\n try{\n var dh = await ecdhSubtle.generateKey({name: 'ECDH', namedCurve: 'P-256'}, true, ['deriveKey'])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n var key = {};\n key.epriv = (await ecdhSubtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await ecdhSubtle.exportKey('jwk', keys.publicKey);\n //const epub = Buff.from([ ex, ey ].join(':')).toString('base64') // old\n key.epub = pub.x+'.'+pub.y; // new\n // ex and ey are already base64\n // epub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n }catch(e){\n if(SEA.window){ throw e }\n if(e == 'Error: ECDH is not a supported algorithm'){ console.log('Ignoring ECDH...') }\n else { throw e }\n } dh = dh || {};\n\n var r = { pub: sa.pub, priv: sa.priv, /* pubId, */ epub: dh.epub, epriv: dh.epriv }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.pair;\n })(USE, './pair');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.sign = SEA.sign || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n if(!(pair||opt).priv){\n if(!SEA.I){ throw 'No signing key.' }\n pair = await SEA.I(null, {what: data, how: 'sign', why: opt.why});\n }\n if(u === data){ throw '`undefined` not allowed.' }\n var json = await S.parse(data);\n var check = opt.check = opt.check || json;\n if(SEA.verify && (SEA.opt.check(check) || (check && check.s && check.m))\n && u !== await SEA.verify(check, pair)){ // don't sign if we already signed it.\n var r = await S.parse(check);\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n var pub = pair.pub;\n var priv = pair.priv;\n var jwk = S.jwk(pub, priv);\n var hash = await sha(json);\n var sig = await (shim.ossl || shim.subtle).importKey('jwk', jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, ['sign'])\n .then((key) => (shim.ossl || shim.subtle).sign({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, new Uint8Array(hash))) // privateKey scope doesn't leak out from here!\n var r = {m: json, s: shim.Buffer.from(sig, 'binary').toString(opt.encode || 'base64')}\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.sign;\n })(USE, './sign');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.verify = SEA.verify || (async (data, pair, cb, opt) => { try {\n var json = await S.parse(data);\n if(false === pair){ // don't verify!\n var raw = await S.parse(json.m);\n if(cb){ try{ cb(raw) }catch(e){console.log(e)} }\n return raw;\n }\n opt = opt || {};\n // SEA.I // verify is free! Requires no user permission.\n var pub = pair.pub || pair;\n var key = SEA.opt.slow_leak? await SEA.opt.slow_leak(pub) : await (shim.ossl || shim.subtle).importKey('jwk', S.jwk(pub), {name: 'ECDSA', namedCurve: 'P-256'}, false, ['verify']);\n var hash = await sha(json.m);\n var buf, sig, check, tmp; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64'); // NEW DEFAULT!\n sig = new Uint8Array(buf);\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash));\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){\n if(SEA.opt.fallback){\n return await SEA.opt.fall_verify(data, pair, cb, opt);\n }\n }\n var r = check? await S.parse(json.m) : u;\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e); // mismatched owner FOR MARTTI\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.verify;\n // legacy & ossl memory leak mitigation:\n\n var knownKeys = {};\n var keyForPair = SEA.opt.slow_leak = pair => {\n if (knownKeys[pair]) return knownKeys[pair];\n var jwk = S.jwk(pair);\n knownKeys[pair] = (shim.ossl || shim.subtle).importKey(\"jwk\", jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, [\"verify\"]);\n return knownKeys[pair];\n };\n\n var O = SEA.opt;\n SEA.opt.fall_verify = async function(data, pair, cb, opt, f){\n if(f === SEA.opt.fallback){ throw \"Signature did not match\" } f = f || 1;\n var tmp = data||'';\n data = SEA.opt.unpack(data) || data;\n var json = await S.parse(data), pub = pair.pub || pair, key = await SEA.opt.slow_leak(pub);\n var hash = (f <= SEA.opt.fallback)? shim.Buffer.from(await shim.subtle.digest({name: 'SHA-256'}, new shim.TextEncoder().encode(await S.parse(json.m)))) : await sha(json.m); // this line is old bad buggy code but necessary for old compatibility.\n var buf; var sig; var check; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64') // NEW DEFAULT!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){ try{\n buf = shim.Buffer.from(json.s, 'utf8') // AUTO BACKWARD OLD UTF8 DATA!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n }catch(e){\n if(!check){ throw \"Signature did not match.\" }\n }\n }\n var r = check? await S.parse(json.m) : u;\n O.fall_soul = tmp['#']; O.fall_key = tmp['.']; O.fall_val = data; O.fall_state = tmp['>'];\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n SEA.opt.fallback = 2;\n\n })(USE, './verify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha256hash = USE('./sha256');\n\n const importGen = async (key, salt, opt) => {\n //const combo = shim.Buffer.concat([shim.Buffer.from(key, 'utf8'), salt || shim.random(8)]).toString('utf8') // old\n opt = opt || {};\n const combo = key + (salt || shim.random(8)).toString('utf8'); // new\n const hash = shim.Buffer.from(await sha256hash(combo), 'binary')\n \n const jwkKey = S.keyToJwk(hash) \n return await shim.subtle.importKey('jwk', jwkKey, {name:'AES-GCM'}, false, ['encrypt', 'decrypt'])\n }\n module.exports = importGen;\n })(USE, './aeskey');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n var u;\n\n SEA.encrypt = SEA.encrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(u === data){ throw '`undefined` not allowed.' }\n if(!key){\n if(!SEA.I){ throw 'No encryption key.' }\n pair = await SEA.I(null, {what: data, how: 'encrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var msg = (typeof data == 'string')? data : await shim.stringify(data);\n var rand = {s: shim.random(9), iv: shim.random(15)}; // consider making this 9 and 15 or 18 or 12 to reduce == padding.\n var ct = await aeskey(key, rand.s, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).encrypt({ // Keeping the AES key scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(rand.iv)\n }, aes, new shim.TextEncoder().encode(msg)));\n var r = {\n ct: shim.Buffer.from(ct, 'binary').toString(opt.encode || 'base64'),\n iv: rand.iv.toString(opt.encode || 'base64'),\n s: rand.s.toString(opt.encode || 'base64')\n }\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.encrypt;\n })(USE, './encrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n\n SEA.decrypt = SEA.decrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(!key){\n if(!SEA.I){ throw 'No decryption key.' }\n pair = await SEA.I(null, {what: data, how: 'decrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var json = await S.parse(data);\n var buf, bufiv, bufct; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64');\n bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');\n bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');\n var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv), tagLength: 128\n }, aes, new Uint8Array(bufct)));\n }catch(e){\n if('utf8' === opt.encode){ throw \"Could not decrypt\" }\n if(SEA.opt.fallback){\n opt.encode = 'utf8';\n return await SEA.decrypt(data, pair, cb, opt);\n }\n }\n var r = await S.parse(new shim.TextDecoder('utf8').decode(ct));\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.decrypt;\n })(USE, './decrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n // Derive shared secret from other's pub and my epub/epriv \n SEA.secret = SEA.secret || (async (key, pair, cb, opt) => { try {\n opt = opt || {};\n if(!pair || !pair.epriv || !pair.epub){\n if(!SEA.I){ throw 'No secret mix.' }\n pair = await SEA.I(null, {what: key, how: 'secret', why: opt.why});\n }\n var pub = key.epub || key;\n var epub = pair.epub;\n var epriv = pair.epriv;\n var ecdhSubtle = shim.ossl || shim.subtle;\n var pubKeyData = keysToEcdhJwk(pub);\n var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },{name: 'ECDH', namedCurve: 'P-256'}); // Thanks to @sirpy !\n var privKeyData = keysToEcdhJwk(epub, epriv);\n var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveBits']).then(async (privKey) => {\n // privateKey scope doesn't leak out from here!\n var derivedBits = await ecdhSubtle.deriveBits(props, privKey, 256);\n var rawBits = new Uint8Array(derivedBits);\n var derivedKey = await ecdhSubtle.importKey('raw', rawBits,{ name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);\n return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);\n })\n var r = derived;\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n // can this be replaced with settings.jwk?\n var keysToEcdhJwk = (pub, d) => { // d === priv\n //var [ x, y ] = shim.Buffer.from(pub, 'base64').toString('utf8').split(':') // old\n var [ x, y ] = pub.split('.') // new\n var jwk = d ? { d: d } : {}\n return [ // Use with spread returned value...\n 'jwk',\n Object.assign(\n jwk,\n { x: x, y: y, kty: 'EC', crv: 'P-256', ext: true }\n ), // ??? refactor\n {name: 'ECDH', namedCurve: 'P-256'}\n ]\n }\n\n module.exports = SEA.secret;\n })(USE, './secret');\n\n ;USE(function(module){\n var SEA = USE('./root');\n // This is to certify that a group of \"certificants\" can \"put\" anything at a group of matched \"paths\" to the certificate authority's graph\n SEA.certify = SEA.certify || (async (certificants, policy = {}, authority, cb, opt = {}) => { try {\n /*\n The Certify Protocol was made out of love by a Vietnamese code enthusiast. Vietnamese people around the world deserve respect!\n IMPORTANT: A Certificate is like a Signature. No one knows who (authority) created/signed a cert until you put it into their graph.\n \"certificants\": '*' or a String (Bob.pub) || an Object that contains \"pub\" as a key || an array of [object || string]. These people will have the rights.\n \"policy\": A string ('inbox'), or a RAD/LEX object {'*': 'inbox'}, or an Array of RAD/LEX objects or strings. RAD/LEX object can contain key \"?\" with indexOf(\"*\") > -1 to force key equals certificant pub. This rule is used to check against soul+'/'+key using Gun.text.match or String.match.\n \"authority\": Key pair or priv of the certificate authority.\n \"cb\": A callback function after all things are done.\n \"opt\": If opt.expiry (a timestamp) is set, SEA won't sync data after opt.expiry. If opt.block is set, SEA will look for block before syncing.\n */\n console.log('SEA.certify() is an early experimental community supported method that may change API behavior without warning in any future version.')\n\n certificants = (() => {\n var data = []\n if (certificants) {\n if ((typeof certificants === 'string' || Array.isArray(certificants)) && certificants.indexOf('*') > -1) return '*'\n if (typeof certificants === 'string') return certificants\n if (Array.isArray(certificants)) {\n if (certificants.length === 1 && certificants[0]) return typeof certificants[0] === 'object' && certificants[0].pub ? certificants[0].pub : typeof certificants[0] === 'string' ? certificants[0] : null\n certificants.map(certificant => {\n if (typeof certificant ==='string') data.push(certificant)\n else if (typeof certificant === 'object' && certificant.pub) data.push(certificant.pub)\n })\n }\n\n if (typeof certificants === 'object' && certificants.pub) return certificants.pub\n return data.length > 0 ? data : null\n }\n return\n })()\n\n if (!certificants) return console.log(\"No certificant found.\")\n\n const expiry = opt.expiry && (typeof opt.expiry === 'number' || typeof opt.expiry === 'string') ? parseFloat(opt.expiry) : null\n const readPolicy = (policy || {}).read ? policy.read : null\n const writePolicy = (policy || {}).write ? policy.write : typeof policy === 'string' || Array.isArray(policy) || policy[\"+\"] || policy[\"#\"] || policy[\".\"] || policy[\"=\"] || policy[\"*\"] || policy[\">\"] || policy[\"<\"] ? policy : null\n // The \"blacklist\" feature is now renamed to \"block\". Why ? BECAUSE BLACK LIVES MATTER!\n // We can now use 3 keys: block, blacklist, ban\n const block = (opt || {}).block || (opt || {}).blacklist || (opt || {}).ban || {}\n const readBlock = block.read && (typeof block.read === 'string' || (block.read || {})['#']) ? block.read : null\n const writeBlock = typeof block === 'string' ? block : block.write && (typeof block.write === 'string' || block.write['#']) ? block.write : null\n\n if (!readPolicy && !writePolicy) return console.log(\"No policy found.\")\n\n // reserved keys: c, e, r, w, rb, wb\n const data = JSON.stringify({\n c: certificants,\n ...(expiry ? {e: expiry} : {}), // inject expiry if possible\n ...(readPolicy ? {r: readPolicy } : {}), // \"r\" stands for read, which means read permission.\n ...(writePolicy ? {w: writePolicy} : {}), // \"w\" stands for write, which means write permission.\n ...(readBlock ? {rb: readBlock} : {}), // inject READ block if possible\n ...(writeBlock ? {wb: writeBlock} : {}), // inject WRITE block if possible\n })\n\n const certificate = await SEA.sign(data, authority, null, {raw:1})\n\n var r = certificate\n if(!opt.raw){ r = 'SEA'+JSON.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.certify;\n })(USE, './certify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n // Practical examples about usage found in tests.\n var SEA = USE('./root');\n SEA.work = USE('./work');\n SEA.sign = USE('./sign');\n SEA.verify = USE('./verify');\n SEA.encrypt = USE('./encrypt');\n SEA.decrypt = USE('./decrypt');\n SEA.certify = USE('./certify');\n //SEA.opt.aeskey = USE('./aeskey'); // not official! // this causes problems in latest WebCrypto.\n\n SEA.random = SEA.random || shim.random;\n\n // This is Buffer used in SEA and usable from Gun/SEA application also.\n // For documentation see https://nodejs.org/api/buffer.html\n SEA.Buffer = SEA.Buffer || USE('./buffer');\n\n // These SEA functions support now ony Promises or\n // async/await (compatible) code, use those like Promises.\n //\n // Creates a wrapper library around Web Crypto API\n // for various AES, ECDSA, PBKDF2 functions we called above.\n // Calculate public key KeyID aka PGPv4 (result: 8 bytes as hex string)\n SEA.keyid = SEA.keyid || (async (pub) => {\n try {\n // base64('base64(x):base64(y)') => shim.Buffer(xy)\n const pb = shim.Buffer.concat(\n pub.replace(/-/g, '+').replace(/_/g, '/').split('.')\n .map((t) => shim.Buffer.from(t, 'base64'))\n )\n // id is PGPv4 compliant raw key\n const id = shim.Buffer.concat([\n shim.Buffer.from([0x99, pb.length / 0x100, pb.length % 0x100]), pb\n ])\n const sha1 = await sha1hash(id)\n const hash = shim.Buffer.from(sha1, 'binary')\n return hash.toString('hex', hash.length - 8) // 16-bit ID as hex\n } catch (e) {\n console.log(e)\n throw e\n }\n });\n // all done!\n // Obviously it is missing MANY necessary features. This is only an alpha release.\n // Please experiment with it, audit what I've done so far, and complain about what needs to be added.\n // SEA should be a full suite that is easy and seamless to use.\n // Again, scroll naer the top, where I provide an EXAMPLE of how to create a user and sign in.\n // Once logged in, the rest of the code you just read handled automatically signing/validating data.\n // But all other behavior needs to be equally easy, like opinionated ways of\n // Adding friends (trusted public keys), sending private messages, etc.\n // Cheers! Tell me what you think.\n ((SEA.window||{}).GUN||{}).SEA = SEA;\n\n module.exports = SEA\n // -------------- END SEA MODULES --------------------\n // -- BEGIN SEA+GUN MODULES: BUNDLED BY DEFAULT UNTIL OTHERS USE SEA ON OWN -------\n })(USE, './sea');\n\n ;USE(function(module){\n var SEA = USE('./sea'), Gun, u;\n if(SEA.window){\n Gun = SEA.window.GUN || {chain:{}};\n } else {\n Gun = USE((u+'' == typeof MODULE?'.':'')+'./gun', 1);\n }\n SEA.GUN = Gun;\n\n function User(root){ \n this._ = {$: this};\n }\n User.prototype = (function(){ function F(){}; F.prototype = Gun.chain; return new F() }()) // Object.create polyfill\n User.prototype.constructor = User;\n\n // let's extend the gun chain with a `user` function.\n // only one user can be logged in at a time, per gun instance.\n Gun.chain.user = function(pub){\n var gun = this, root = gun.back(-1), user;\n if(pub){\n pub = SEA.opt.pub((pub._||'')['#']) || pub;\n return root.get('~'+pub);\n }\n if(user = root.back('user')){ return user }\n var root = (root._), at = root, uuid = at.opt.uuid || lex;\n (at = (user = at.user = gun.chain(new User))._).opt = {};\n at.opt.uuid = function(cb){\n var id = uuid(), pub = root.user;\n if(!pub || !(pub = pub.is) || !(pub = pub.pub)){ return id }\n id = '~' + pub + '/' + id;\n if(cb && cb.call){ cb(null, id) }\n return id;\n }\n return user;\n }\n function lex(){ return Gun.state().toString(36).replace('.','') }\n Gun.User = User;\n User.GUN = Gun;\n User.SEA = Gun.SEA = SEA;\n module.exports = User;\n })(USE, './user');\n\n ;USE(function(module){\n var u, Gun = (''+u != typeof window)? (window.Gun||{chain:{}}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n Gun.chain.then = function(cb, opt){\n var gun = this, p = (new Promise(function(res, rej){\n gun.once(res, opt);\n }));\n return cb? p.then(cb) : p;\n }\n })(USE, './then');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n\n // Well first we have to actually create a user. That is what this function does.\n User.prototype.create = function(...args){\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = pair && (pair.pub || pair.epub) ? pair.pub : typeof args[0] === 'string' ? args[0] : null;\n var pass = pair && (pair.pub || pair.epub) ? pair : alias && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n cb = cb || noop;\n opt = opt || {};\n if(false !== opt.check){\n var err;\n if(!alias){ err = \"No user.\" }\n if((pass||'').length < 8){ err = \"Password too short!\" }\n if(err){\n cb({err: Gun.log(err)});\n return gun;\n }\n }\n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n var act = {}, u;\n act.a = function(pubs){\n act.pubs = pubs;\n if(pubs && !opt.already){\n // If we can enforce that a user name is already taken, it might be nice to try, but this is not guaranteed.\n var ack = {err: Gun.log('User already created!')};\n cat.ing = false;\n (cb || noop)(ack);\n gun.leave();\n return;\n }\n act.salt = String.random(64); // pseudo-randomly create a salt, then use PBKDF2 function to extend the password with it.\n SEA.work(pass, act.salt, act.b); // this will take some short amount of time to produce a proof, which slows brute force attacks.\n }\n act.b = function(proof){\n act.proof = proof;\n pair ? act.c(pair) : SEA.pair(act.c) // generate a brand new key pair or use the existing.\n }\n act.c = function(pair){\n var tmp\n act.pair = pair || {};\n if(tmp = cat.root.user){\n tmp._.sea = pair;\n tmp.is = {pub: pair.pub, epub: pair.epub, alias: alias};\n }\n // the user's public key doesn't need to be signed. But everything else needs to be signed with it! // we have now automated it! clean up these extra steps now!\n act.data = {pub: pair.pub};\n act.d();\n }\n act.d = function(){\n act.data.alias = alias;\n act.e();\n }\n act.e = function(){\n act.data.epub = act.pair.epub; \n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, act.proof, act.f, {raw:1}); // to keep the private key safe, we AES encrypt it with the proof of work!\n }\n act.f = function(auth){\n act.data.auth = JSON.stringify({ek: auth, s: act.salt}); \n act.g(act.data.auth);\n }\n act.g = function(auth){ var tmp;\n act.data.auth = act.data.auth || auth;\n root.get(tmp = '~'+act.pair.pub).put(act.data).on(act.h); // awesome, now we can actually save the user with their public key as their ID.\n var link = {}; link[tmp] = {'#': tmp}; root.get('~@'+alias).put(link).get(tmp).on(act.i); // next up, we want to associate the alias with the public key. So we add it to the alias list.\n }\n act.h = function(data, key, msg, eve){\n eve.off(); act.h.ok = 1; act.i();\n }\n act.i = function(data, key, msg, eve){\n if(eve){ act.i.ok = 1; eve.off() }\n if(!act.h.ok || !act.i.ok){ return }\n cat.ing = false;\n cb({ok: 0, pub: act.pair.pub}); // callback that the user has been created. (Note: ok = 0 because we didn't wait for disk to ack)\n if(noop === cb){ pair ? gun.auth(pair) : gun.auth(alias, pass) } // if no callback is passed, auto-login after signing up.\n }\n root.get('~@'+alias).once(act.a);\n return gun;\n }\n User.prototype.leave = function(opt, cb){\n var gun = this, user = (gun.back(-1)._).user;\n if(user){\n delete user.is;\n delete user._.is;\n delete user._.sea;\n }\n if(SEA.window){\n try{var sS = {};\n sS = window.sessionStorage;\n delete sS.recall;\n delete sS.pair;\n }catch(e){};\n }\n return gun;\n }\n })(USE, './create');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n // now that we have created a user, we want to authenticate them!\n User.prototype.auth = function(...args){ // TODO: this PR with arguments need to be cleaned up / refactored.\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = !pair && typeof args[0] === 'string' ? args[0] : null;\n var pass = (alias || (pair && !(pair.priv && pair.epriv))) && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n \n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n \n var act = {}, u, tries = 9;\n act.a = function(data){\n if(!data){ return act.b() }\n if(!data.pub){\n var tmp = []; Object.keys(data).forEach(function(k){ if('_'==k){ return } tmp.push(data[k]) })\n return act.b(tmp);\n }\n if(act.name){ return act.f(data) }\n act.c((act.data = data).auth);\n }\n act.b = function(list){\n var get = (act.list = (act.list||[]).concat(list||[])).shift();\n if(u === get){\n if(act.name){ return act.err('Your user account is not published for dApps to access, please consider syncing it online, or allowing local access by adding your device as a peer.') }\n if(alias && tries--){\n root.get('~@'+alias).once(act.a);\n return;\n }\n return act.err('Wrong user or password.') \n }\n root.get(get).once(act.a);\n }\n act.c = function(auth){\n if(u === auth){ return act.b() }\n if('string' == typeof auth){ return act.c(obj_ify(auth)) } // in case of legacy\n SEA.work(pass, (act.auth = auth).s, act.d, act.enc); // the proof of work is evidence that we've spent some time/effort trying to log in, this slows brute force.\n }\n act.d = function(proof){\n SEA.decrypt(act.auth.ek, proof, act.e, act.enc);\n }\n act.e = function(half){\n if(u === half){\n if(!act.enc){ // try old format\n act.enc = {encode: 'utf8'};\n return act.c(act.auth);\n } act.enc = null; // end backwards\n return act.b();\n }\n act.half = half;\n act.f(act.data);\n }\n act.f = function(pair){\n var half = act.half || {}, data = act.data || {};\n act.g(act.lol = {pub: pair.pub || data.pub, epub: pair.epub || data.epub, priv: pair.priv || half.priv, epriv: pair.epriv || half.epriv});\n }\n act.g = function(pair){\n if(!pair || !pair.pub || !pair.epub){ return act.b() }\n act.pair = pair;\n var user = (root._).user, at = (user._);\n var tmp = at.tag;\n var upt = at.opt;\n at = user._ = root.get('~'+pair.pub)._;\n at.opt = upt;\n // add our credentials in-memory only to our root user instance\n user.is = {pub: pair.pub, epub: pair.epub, alias: alias || pair.pub};\n at.sea = act.pair;\n cat.ing = false;\n try{if(pass && u == (obj_ify(cat.root.graph['~'+pair.pub].auth)||'')[':']){ opt.shuffle = opt.change = pass; } }catch(e){} // migrate UTF8 & Shuffle!\n opt.change? act.z() : (cb || noop)(at);\n if(SEA.window && ((gun.back('user')._).opt||opt).remember){\n // TODO: this needs to be modular.\n try{var sS = {};\n sS = window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n sS.recall = true;\n sS.pair = JSON.stringify(pair); // auth using pair is more reliable than alias/pass\n }catch(e){}\n }\n try{\n if(root._.tag.auth){ // auth handle might not be registered yet\n (root._).on('auth', at) // TODO: Deprecate this, emit on user instead! Update docs when you do.\n } else { setTimeout(function(){ (root._).on('auth', at) },1) } // if not, hackily add a timeout.\n //at.on('auth', at) // Arrgh, this doesn't work without event \"merge\" code, but \"merge\" code causes stack overflow and crashes after logging in & trying to write data.\n }catch(e){\n Gun.log(\"Your 'auth' callback crashed with:\", e);\n }\n }\n act.h = function(data){\n if(!data){ return act.b() }\n alias = data.alias\n if(!alias)\n alias = data.alias = \"~\" + pair.pub \n if(!data.auth){\n return act.g(pair);\n }\n pair = null;\n act.c((act.data = data).auth);\n }\n act.z = function(){\n // password update so encrypt private key using new pwd + salt\n act.salt = String.random(64); // pseudo-random\n SEA.work(opt.change, act.salt, act.y);\n }\n act.y = function(proof){\n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, proof, act.x, {raw:1});\n }\n act.x = function(auth){\n act.w(JSON.stringify({ek: auth, s: act.salt}));\n }\n act.w = function(auth){\n if(opt.shuffle){ // delete in future!\n console.log('migrate core account from UTF8 & shuffle');\n var tmp = {}; Object.keys(act.data).forEach(function(k){ tmp[k] = act.data[k] });\n delete tmp._;\n tmp.auth = auth;\n root.get('~'+act.pair.pub).put(tmp);\n } // end delete\n root.get('~'+act.pair.pub).get('auth').put(auth, cb || noop);\n }\n act.err = function(e){\n var ack = {err: Gun.log(e || 'User cannot be found!')};\n cat.ing = false;\n (cb || noop)(ack);\n }\n act.plugin = function(name){\n if(!(act.name = name)){ return act.err() }\n var tmp = [name];\n if('~' !== name[0]){\n tmp[1] = '~'+name;\n tmp[2] = '~@'+name;\n }\n act.b(tmp);\n }\n if(pair){\n if(pair.priv && pair.epriv)\n act.g(pair);\n else\n root.get('~'+pair.pub).once(act.h);\n } else\n if(alias){\n root.get('~@'+alias).once(act.a);\n } else\n if(!alias && !pass){\n SEA.name(act.plugin);\n }\n return gun;\n }\n function obj_ify(o){\n if('string' != typeof o){ return o }\n try{o = JSON.parse(o);\n }catch(e){o={}};\n return o;\n }\n })(USE, './auth');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN;\n User.prototype.recall = function(opt, cb){\n var gun = this, root = gun.back(-1), tmp;\n opt = opt || {};\n if(opt && opt.sessionStorage){\n if(SEA.window){\n try{\n var sS = {};\n sS = window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n if(sS){\n (root._).opt.remember = true;\n ((gun.back('user')._).opt||opt).remember = true;\n if(sS.recall || sS.pair) root.user().auth(JSON.parse(sS.pair), cb); // pair is more reliable than alias/pass\n }\n }catch(e){}\n }\n return gun;\n }\n /*\n TODO: copy mhelander's expiry code back in.\n Although, we should check with community,\n should expiry be core or a plugin?\n */\n return gun;\n }\n })(USE, './recall');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n User.prototype.pair = function(){\n var user = this, proxy; // undeprecated, hiding with proxies.\n try{ proxy = new Proxy({DANGER:'\\u2620'}, {get: function(t,p,r){\n if(!user.is || !(user._||'').sea){ return }\n return user._.sea[p];\n }})}catch(e){}\n return proxy;\n }\n // If authenticated user wants to delete his/her account, let's support it!\n User.prototype.delete = async function(alias, pass, cb){\n console.log(\"user.delete() IS DEPRECATED AND WILL BE MOVED TO A MODULE!!!\");\n var gun = this, root = gun.back(-1), user = gun.back('user');\n try {\n user.auth(alias, pass, function(ack){\n var pub = (user.is||{}).pub;\n // Delete user data\n user.map().once(function(){ this.put(null) });\n // Wipe user data from memory\n user.leave();\n (cb || noop)({ok: 0});\n });\n } catch (e) {\n Gun.log('User.delete failed! Error:', e);\n }\n return gun;\n }\n User.prototype.alive = async function(){\n console.log(\"user.alive() IS DEPRECATED!!!\");\n const gunRoot = this.back(-1)\n try {\n // All is good. Should we do something more with actual recalled data?\n await authRecall(gunRoot)\n return gunRoot._.user._\n } catch (e) {\n const err = 'No session!'\n Gun.log(err)\n throw { err }\n }\n }\n User.prototype.trust = async function(user){\n console.log(\"`.trust` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n // TODO: BUG!!! SEA `node` read listener needs to be async, which means core needs to be async too.\n //gun.get('alice').get('age').trust(bob);\n if (Gun.is(user)) {\n user.get('pub').get((ctx, ev) => {\n console.log(ctx, ev)\n })\n }\n user.get('trust').get(path).put(theirPubkey);\n\n // do a lookup on this gun chain directly (that gets bob's copy of the data)\n // do a lookup on the metadata trust table for this path (that gets all the pubkeys allowed to write on this path)\n // do a lookup on each of those pubKeys ON the path (to get the collab data \"layers\")\n // THEN you perform Jachen's mix operation\n // and return the result of that to...\n }\n User.prototype.grant = function(to, cb){\n console.log(\"`.grant` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user._.sea, path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('grant').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('grant').get(pair.pub).get(path).put(enc);\n }\n var pub = to.get('pub').then();\n var epub = to.get('epub').then();\n pub = await pub; epub = await epub;\n var dh = await SEA.secret(epub, pair);\n enc = await SEA.encrypt(sec, dh);\n user.get('grant').get(pub).get(path).put(enc, cb);\n }());\n return gun;\n }\n User.prototype.secret = function(data, cb){\n console.log(\"`.secret` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user.pair(), path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('trust').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('trust').get(pair.pub).get(path).put(enc);\n }\n enc = await SEA.encrypt(data, sec);\n gun.put(enc, cb);\n }());\n return gun;\n }\n\n /**\n * returns the decrypted value, encrypted by secret\n * @returns {Promise}\n // Mark needs to review 1st before officially supported\n User.prototype.decrypt = function(cb) {\n let gun = this,\n path = ''\n gun.back(function(at) {\n if (at.is) {\n return\n }\n path += at.get || ''\n })\n return gun\n .then(async data => {\n if (data == null) {\n return\n }\n const user = gun.back(-1).user()\n const pair = user.pair()\n let sec = await user\n .get('trust')\n .get(pair.pub)\n .get(path)\n sec = await SEA.decrypt(sec, pair)\n if (!sec) {\n return data\n }\n let decrypted = await SEA.decrypt(data, sec)\n return decrypted\n })\n .then(res => {\n cb && cb(res)\n return res\n })\n }\n */\n module.exports = User\n })(USE, './share');\n\n ;USE(function(module){\n var SEA = USE('./sea'), S = USE('./settings'), noop = function() {}, u;\n var Gun = (''+u != typeof window)? (window.Gun||{on:noop}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n // After we have a GUN extension to make user registration/login easy, we then need to handle everything else.\n\n // We do this with a GUN adapter, we first listen to when a gun instance is created (and when its options change)\n Gun.on('opt', function(at){\n if(!at.sea){ // only add SEA once per instance, on the \"at\" context.\n at.sea = {own: {}};\n at.on('put', check, at); // SEA now runs its firewall on HAM diffs, not all i/o.\n }\n this.to.next(at); // make sure to call the \"next\" middleware adapter.\n });\n\n // Alright, this next adapter gets run at the per node level in the graph database.\n // correction: 2020 it gets run on each key/value pair in a node upon a HAM diff.\n // This will let us verify that every property on a node has a value signed by a public key we trust.\n // If the signature does not match, the data is just `undefined` so it doesn't get passed on.\n // If it does match, then we transform the in-memory \"view\" of the data into its plain value (without the signature).\n // Now NOTE! Some data is \"system\" data, not user data. Example: List of public keys, aliases, etc.\n // This data is self-enforced (the value can only match its ID), but that is handled in the `security` function.\n // From the self-enforced data, we can see all the edges in the graph that belong to a public key.\n // Example: ~ASDF is the ID of a node with ASDF as its public key, signed alias and salt, and\n // its encrypted private key, but it might also have other signed values on it like `profile = ` edge.\n // Using that directed edge's ID, we can then track (in memory) which IDs belong to which keys.\n // Here is a problem: Multiple public keys can \"claim\" any node's ID, so this is dangerous!\n // This means we should ONLY trust our \"friends\" (our key ring) public keys, not any ones.\n // I have not yet added that to SEA yet in this alpha release. That is coming soon, but beware in the meanwhile!\n\n function check(msg){ // REVISE / IMPROVE, NO NEED TO PASS MSG/EVE EACH SUB?\n var eve = this, at = eve.as, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n if(!soul || !key){ return }\n if((msg._||'').faith && (at.opt||'').faith && 'function' == typeof msg._){\n SEA.opt.pack(put, function(raw){\n SEA.verify(raw, false, function(data){ // this is synchronous if false\n put['='] = SEA.opt.unpack(data);\n eve.to.next(msg);\n })})\n return \n }\n var no = function(why){ at.on('in', {'@': id, err: msg.err = why}) }; // exploit internal relay stun for now, maybe violates spec, but testing for now. // Note: this may be only the sharded message, not original batch.\n //var no = function(why){ msg.ack(why) };\n (msg._||'').DBG && ((msg._||'').DBG.c = +new Date);\n if(0 <= soul.indexOf(' {\n if (certificate.m && certificate.s && certificant && pub)\n // now verify certificate\n return SEA.verify(certificate, pub, data => { // check if \"pub\" (of the graph owner) really issued this cert\n if (u !== data && u !== data.e && msg.put['>'] && msg.put['>'] > parseFloat(data.e)) return no(\"Certificate expired.\") // certificate expired\n // \"data.c\" = a list of certificants/certified users\n // \"data.w\" = lex WRITE permission, in the future, there will be \"data.r\" which means lex READ permission\n if (u !== data && data.c && data.w && (data.c === certificant || data.c.indexOf('*' || certificant) > -1)) {\n // ok, now \"certificant\" is in the \"certificants\" list, but is \"path\" allowed? Check path\n let path = soul.indexOf('/') > -1 ? soul.replace(soul.substring(0, soul.indexOf('/') + 1), '') : ''\n String.match = String.match || Gun.text.match\n const w = Array.isArray(data.w) ? data.w : typeof data.w === 'object' || typeof data.w === 'string' ? [data.w] : []\n for (const lex of w) {\n if ((String.match(path, lex['#']) && String.match(key, lex['.'])) || (!lex['.'] && String.match(path, lex['#'])) || (!lex['#'] && String.match(key, lex['.'])) || String.match((path ? path + '/' + key : key), lex['#'] || lex)) {\n // is Certificant forced to present in Path\n if (lex['+'] && lex['+'].indexOf('*') > -1 && path && path.indexOf(certificant) == -1 && key.indexOf(certificant) == -1) return no(`Path \"${path}\" or key \"${key}\" must contain string \"${certificant}\".`)\n // path is allowed, but is there any WRITE block? Check it out\n if (data.wb && (typeof data.wb === 'string' || ((data.wb || {})['#']))) { // \"data.wb\" = path to the WRITE block\n var root = eve.as.root.$.back(-1)\n if (typeof data.wb === 'string' && '~' !== data.wb.slice(0, 1)) root = root.get('~' + pub)\n return root.get(data.wb).get(certificant).once(value => { // TODO: INTENT TO DEPRECATE.\n if (value && (value === 1 || value === true)) return no(`Certificant ${certificant} blocked.`)\n return cb(data)\n })\n }\n return cb(data)\n }\n }\n return no(\"Certificate verification fail.\")\n }\n })\n return\n }\n \n if ('pub' === key && '~' + pub === soul) {\n if (val === pub) return eve.to.next(msg) // the account MUST match `pub` property that equals the ID of the public key.\n return no(\"Account not same!\")\n }\n\n if ((tmp = user.is) && tmp.pub && !raw['*'] && !raw['+'] && (pub === tmp.pub || (pub !== tmp.pub && ((msg._.msg || {}).opt || {}).cert))){\n SEA.opt.pack(msg.put, packed => {\n SEA.sign(packed, (user._).sea, async function(data) {\n if (u === data) return no(SEA.err || 'Signature fail.')\n msg.put[':'] = {':': tmp = SEA.opt.unpack(data.m), '~': data.s}\n msg.put['='] = tmp\n \n // if writing to own graph, just allow it\n if (pub === user.is.pub) {\n if (tmp = link_is(val)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n }\n \n // if writing to other's graph, check if cert exists then try to inject cert into put, also inject self pub so that everyone can verify the put\n if (pub !== user.is.pub && ((msg._.msg || {}).opt || {}).cert) {\n const cert = await S.parse(msg._.msg.opt.cert)\n // even if cert exists, we must verify it\n if (cert && cert.m && cert.s)\n verify(cert, user.is.pub, _ => {\n msg.put[':']['+'] = cert // '+' is a certificate\n msg.put[':']['*'] = user.is.pub // '*' is pub of the user who puts\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n })\n }\n }, {raw: 1})\n })\n return;\n }\n\n SEA.opt.pack(msg.put, packed => {\n SEA.verify(packed, raw['*'] || pub, function(data){ var tmp;\n data = SEA.opt.unpack(data);\n if (u === data) return no(\"Unverified data.\") // make sure the signature matches the account it claims to be on. // reject any updates that are signed with a mismatched account.\n if ((tmp = link_is(data)) && pub === SEA.opt.pub(tmp)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n \n // check if cert ('+') and putter's pub ('*') exist\n if (raw['+'] && raw['+']['m'] && raw['+']['s'] && raw['*'])\n // now verify certificate\n verify(raw['+'], raw['*'], _ => {\n msg.put['='] = data;\n return eve.to.next(msg);\n })\n else {\n msg.put['='] = data;\n return eve.to.next(msg);\n }\n });\n })\n return\n };\n check.any = function(eve, msg, val, key, soul, at, no, user){ var tmp, pub;\n if(at.opt.secure){ return no(\"Soul missing public key at '\" + key + \"'.\") }\n // TODO: Ask community if should auto-sign non user-graph data.\n at.on('secure', function(msg){ this.off();\n if(!at.opt.secure){ return eve.to.next(msg) }\n no(\"Data cannot be changed.\");\n }).on.on('secure', msg);\n return;\n }\n\n var valid = Gun.valid, link_is = function(d,l){ return 'string' == typeof (l = valid(d)) && l }, state_ify = (Gun.state||'').ify;\n\n var pubcut = /[^\\w_-]/; // anything not alphanumeric or _ -\n SEA.opt.pub = function(s){\n if(!s){ return }\n s = s.split('~');\n if(!s || !(s = s[1])){ return }\n s = s.split(pubcut).slice(0,2);\n if(!s || 2 != s.length){ return }\n if('@' === (s[0]||'')[0]){ return }\n s = s.slice(0,2).join('.');\n return s;\n }\n SEA.opt.stringy = function(t){\n // TODO: encrypt etc. need to check string primitive. Make as breaking change.\n }\n SEA.opt.pack = function(d,cb,k, n,s){ var tmp, f; // pack for verifying\n if(SEA.opt.check(d)){ return cb(d) }\n if(d && d['#'] && d['.'] && d['>']){ tmp = d[':']; f = 1 }\n JSON.parseAsync(f? tmp : d, function(err, meta){\n var sig = ((u !== (meta||'')[':']) && (meta||'')['~']); // or just ~ check?\n if(!sig){ cb(d); return }\n cb({m: {'#':s||d['#'],'.':k||d['.'],':':(meta||'')[':'],'>':d['>']||Gun.state.is(n, k)}, s: sig});\n });\n }\n var O = SEA.opt;\n SEA.opt.unpack = function(d, k, n){ var tmp;\n if(u === d){ return }\n if(d && (u !== (tmp = d[':']))){ return tmp }\n k = k || O.fall_key; if(!n && O.fall_val){ n = {}; n[k] = O.fall_val }\n if(!k || !n){ return }\n if(d === n[k]){ return d }\n if(!SEA.opt.check(n[k])){ return d }\n var soul = (n && n._ && n._['#']) || O.fall_soul, s = Gun.state.is(n, k) || O.fall_state;\n if(d && 4 === d.length && soul === d[0] && k === d[1] && fl(s) === fl(d[3])){\n return d[2];\n }\n if(s < SEA.opt.shuffle_attack){\n return d;\n }\n }\n SEA.opt.shuffle_attack = 1546329600000; // Jan 1, 2019\n var fl = Math.floor; // TODO: Still need to fix inconsistent state issue.\n // TODO: Potential bug? If pub/priv key starts with `-`? IDK how possible.\n\n })(USE, './index');\n}());\n","// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n",";(function(){\n// JSON: JavaScript Object Notation\n// YSON: Yielding javaScript Object Notation\nvar yson = {}, u, sI = setTimeout.turn || (typeof setImmediate != ''+u && setImmediate) || setTimeout;\n\nyson.parseAsync = function(text, done, revive, M){\n\tif('string' != typeof text){ try{ done(u,JSON.parse(text)) }catch(e){ done(e) } return }\n\tvar ctx = {i: 0, text: text, done: done, l: text.length, up: []};\n\t//M = 1024 * 1024 * 100;\n\t//M = M || 1024 * 64;\n\tM = M || 1024 * 32;\n\tparse();\n\tfunction parse(){\n\t\t//var S = +new Date;\n\t\tvar s = ctx.text;\n\t\tvar i = ctx.i, l = ctx.l, j = 0;\n\t\tvar w = ctx.w, b, tmp;\n\t\twhile(j++ < M){\n\t\t\tvar c = s[i++];\n\t\t\tif(i > l){\n\t\t\t\tctx.end = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(w){\n\t\t\t\ti = s.indexOf('\"', i-1); c = s[i];\n\t\t\t\ttmp = 0; while('\\\\' == s[i-(++tmp)]){}; tmp = !(tmp % 2);//tmp = ('\\\\' == s[i-1]); // json is stupid\n\t\t\t\tb = b || tmp;\n\t\t\t\tif('\"' == c && !tmp){\n\t\t\t\t\tw = u;\n\t\t\t\t\ttmp = ctx.s;\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\ttmp = s.slice(ctx.sl, i);\n\t\t\t\t\t\tif(b || (1+tmp.indexOf('\\\\'))){ tmp = JSON.parse('\"'+tmp+'\"') } // escape + unicode :( handling\n\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\tctx.at.push(ctx.s = tmp);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(!ctx.at){ ctx.end = j = M; tmp = u }\n\t\t\t\t\t\t\t(ctx.at||{})[ctx.s] = ctx.s = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.s = u;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.s = s.slice(ctx.sl, i);\n\t\t\t\t\t\tif(b || (1+ctx.s.indexOf('\\\\'))){ ctx.s = JSON.parse('\"'+ctx.s+'\"'); } // escape + unicode :( handling\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = b = u;\n\t\t\t\t}\n\t\t\t\t++i;\n\t\t\t} else {\n\t\t\t\tswitch(c){\n\t\t\t\tcase '\"':\n\t\t\t\t\tctx.sl = i;\n\t\t\t\t\tw = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ':':\n\t\t\t\t\tctx.ai = i;\n\t\t\t\t\tctx.a = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ',':\n\t\t\t\t\tif(ctx.a || ctx.at instanceof Array){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.at[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\tctx.a = true;\n\t\t\t\t\t\tctx.ai = i;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '{':\n\t\t\t\t\tctx.up.push(ctx.at||(ctx.at = {}));\n\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\tctx.at.push(ctx.at = {});\n\t\t\t\t\t} else\n\t\t\t\t\tif(u !== (tmp = ctx.s)){\n\t\t\t\t\t\tctx.at[tmp] = ctx.at = {};\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tbreak;\n\t\t\t\tcase '}':\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif(!ctx.at){ ctx.end = j = M; tmp = u }\n\t\t\t\t\t\t\t\t\t(ctx.at||{})[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tctx.at = ctx.up.pop();\n\t\t\t\t\tbreak;\n\t\t\t\tcase '[':\n\t\t\t\t\tif(u !== (tmp = ctx.s)){\n\t\t\t\t\t\tctx.up.push(ctx.at);\n\t\t\t\t\t\tctx.at[tmp] = ctx.at = [];\n\t\t\t\t\t} else\n\t\t\t\t\tif(!ctx.at){\n\t\t\t\t\t\tctx.up.push(ctx.at = []);\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = true;\n\t\t\t\t\tctx.ai = i;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ']':\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.at[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tctx.at = ctx.up.pop();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tctx.s = u;\n\t\tctx.i = i;\n\t\tctx.w = w;\n\t\tif(ctx.end){\n\t\t\ttmp = ctx.at;\n\t\t\tif(u === tmp){\n\t\t\t\ttry{ tmp = JSON.parse(text)\n\t\t\t\t}catch(e){ return ctx.done(e) }\n\t\t\t}\n\t\t\tctx.done(u, tmp);\n\t\t} else {\n\t\t\tsI(parse);\n\t\t}\n\t}\n}\nfunction value(s){\n\tvar n = parseFloat(s);\n\tif(!isNaN(n)){\n\t\treturn n;\n\t}\n\ts = s.trim();\n\tif('true' == s){\n\t\treturn true;\n\t}\n\tif('false' == s){\n\t\treturn false;\n\t}\n\tif('null' == s){\n\t\treturn null;\n\t}\n}\n\nyson.stringifyAsync = function(data, done, replacer, space, ctx){\n\t//try{done(u, JSON.stringify(data, replacer, space))}catch(e){done(e)}return;\n\tctx = ctx || {};\n\tctx.text = ctx.text || \"\";\n\tctx.up = [ctx.at = {d: data}];\n\tctx.done = done;\n\tctx.i = 0;\n\tvar j = 0;\n\tify();\n\tfunction ify(){\n\t\tvar at = ctx.at, data = at.d, add = '', tmp;\n\t\tif(at.i && (at.i - at.j) > 0){ add += ',' }\n\t\tif(u !== (tmp = at.k)){ add += JSON.stringify(tmp) + ':' } //'\"'+tmp+'\":' } // only if backslash\n\t\tswitch(typeof data){\n\t\tcase 'boolean':\n\t\t\tadd += ''+data;\n\t\t\tbreak;\n\t\tcase 'string':\n\t\t\tadd += JSON.stringify(data); //ctx.text += '\"'+data+'\"';//JSON.stringify(data); // only if backslash\n\t\t\tbreak;\n\t\tcase 'number':\n\t\t\tadd += (isNaN(data)? 'null' : data);\n\t\t\tbreak;\n\t\tcase 'object':\n\t\t\tif(!data){\n\t\t\t\tadd += 'null';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(data instanceof Array){\t\n\t\t\t\tadd += '[';\n\t\t\t\tat = {i: -1, as: data, up: at, j: 0};\n\t\t\t\tat.l = data.length;\n\t\t\t\tctx.up.push(ctx.at = at);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif('function' != typeof (data||'').toJSON){\n\t\t\t\tadd += '{';\n\t\t\t\tat = {i: -1, ok: Object.keys(data).sort(), as: data, up: at, j: 0};\n\t\t\t\tat.l = at.ok.length;\n\t\t\t\tctx.up.push(ctx.at = at);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(tmp = data.toJSON()){\n\t\t\t\tadd += tmp;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// let this & below pass into default case...\n\t\tcase 'function':\n\t\t\tif(at.as instanceof Array){\n\t\t\t\tadd += 'null';\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault: // handle wrongly added leading `,` if previous item not JSON-able.\n\t\t\tadd = '';\n\t\t\tat.j++;\n\t\t}\n\t\tctx.text += add;\n\t\twhile(1+at.i >= at.l){\n\t\t\tctx.text += (at.ok? '}' : ']');\n\t\t\tat = ctx.at = at.up;\n\t\t}\n\t\tif(++at.i < at.l){\n\t\t\tif(tmp = at.ok){\n\t\t\t\tat.d = at.as[at.k = tmp[at.i]];\n\t\t\t} else {\n\t\t\t\tat.d = at.as[at.i];\n\t\t\t}\n\t\t\tif(++j < 9){ return ify() } else { j = 0 }\n\t\t\tsI(ify);\n\t\t\treturn;\n\t\t}\n\t\tctx.done(u, ctx.text);\n\t}\n}\nif(typeof window != ''+u){ window.YSON = yson }\ntry{ if(typeof module != ''+u){ module.exports = yson } }catch(e){}\nif(typeof JSON != ''+u){\n\tJSON.parseAsync = yson.parseAsync;\n\tJSON.stringifyAsync = yson.stringifyAsync;\n}\n\n}());",";(function(){\n\n\tfunction Radix(){\n\t\tvar radix = function(key, val, t){\n\t\t\tradix.unit = 0;\n\t\t\tif(!t && u !== val){ \n\t\t\t\tradix.last = (''+key < radix.last)? radix.last : ''+key;\n\t\t\t\tdelete (radix.$||{})[_];\n\t\t\t}\n\t\t\tt = t || radix.$ || (radix.$ = {});\n\t\t\tif(!key && Object.keys(t).length){ return t }\n\t\t\tkey = ''+key;\n\t\t\tvar i = 0, l = key.length-1, k = key[i], at, tmp;\n\t\t\twhile(!(at = t[k]) && i < l){\n\t\t\t\tk += key[++i];\n\t\t\t}\n\t\t\tif(!at){\n\t\t\t\tif(!each(t, function(r, s){\n\t\t\t\t\tvar ii = 0, kk = '';\n\t\t\t\t\tif((s||'').length){ while(s[ii] == key[ii]){\n\t\t\t\t\t\tkk += s[ii++];\n\t\t\t\t\t} }\n\t\t\t\t\tif(kk){\n\t\t\t\t\t\tif(u === val){\n\t\t\t\t\t\t\tif(ii <= l){ return }\n\t\t\t\t\t\t\t(tmp || (tmp = {}))[s.slice(ii)] = r;\n\t\t\t\t\t\t\t//(tmp[_] = function $(){ $.sort = Object.keys(tmp).sort(); return $ }()); // get rid of this one, cause it is on read?\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar __ = {};\n\t\t\t\t\t\t__[s.slice(ii)] = r;\n\t\t\t\t\t\tii = key.slice(ii);\n\t\t\t\t\t\t('' === ii)? (__[''] = val) : ((__[ii] = {})[''] = val);\n\t\t\t\t\t\t//(__[_] = function $(){ $.sort = Object.keys(__).sort(); return $ }());\n\t\t\t\t\t\tt[kk] = __;\n\t\t\t\t\t\tif(Radix.debug && 'undefined' === ''+kk){ console.log(0, kk); debugger }\n\t\t\t\t\t\tdelete t[s];\n\t\t\t\t\t\t//(t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }());\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t})){\n\t\t\t\t\tif(u === val){ return; }\n\t\t\t\t\t(t[k] || (t[k] = {}))[''] = val;\n\t\t\t\t\tif(Radix.debug && 'undefined' === ''+k){ console.log(1, k); debugger }\n\t\t\t\t\t//(t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }());\n\t\t\t\t}\n\t\t\t\tif(u === val){\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t} else \n\t\t\tif(i == l){\n\t\t\t\t//if(u === val){ return (u === (tmp = at['']))? at : tmp } // THIS CODE IS CORRECT, below is\n\t\t\t\tif(u === val){ return (u === (tmp = at['']))? at : ((radix.unit = 1) && tmp) } // temporary help??\n\t\t\t\tat[''] = val;\n\t\t\t\t//(at[_] = function $(){ $.sort = Object.keys(at).sort(); return $ }());\n\t\t\t} else {\n\t\t\t\tif(u !== val){ delete at[_] }\n\t\t\t\t//at && (at[_] = function $(){ $.sort = Object.keys(at).sort(); return $ }());\n\t\t\t\treturn radix(key.slice(++i), val, at || (at = {}));\n\t\t\t}\n\t\t}\n\t\treturn radix;\n\t};\n\n\tRadix.map = function rap(radix, cb, opt, pre){\n\t\ttry {\n\t\t\tpre = pre || []; // TODO: BUG: most out-of-memory crashes come from here.\n\t\t\tvar t = ('function' == typeof radix)? radix.$ || {} : radix;\n\t\t\t//!opt && console.log(\"WHAT IS T?\", JSON.stringify(t).length);\n\t\t\tif(!t){ return }\n\t\t\tif('string' == typeof t){ if(Radix.debug){ throw ['BUG:', radix, cb, opt, pre] } return; }\n\t\t\tvar keys = (t[_]||no).sort || (t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }()).sort, rev; // ONLY 17% of ops are pre-sorted!\n\t\t\t//var keys = Object.keys(t).sort();\n\t\t\topt = (true === opt)? {branch: true} : (opt || {});\n\t\t\tif(rev = opt.reverse){ keys = keys.slice(0).reverse() }\n\t\t\tvar start = opt.start, end = opt.end, END = '\\uffff';\n\t\t\tvar i = 0, l = keys.length;\n\t\t\tfor(;i < l; i++){ var key = keys[i], tree = t[key], tmp, p, pt;\n\t\t\t\tif(!tree || '' === key || _ === key || 'undefined' === key){ continue }\n\t\t\t\tp = pre.slice(0); p.push(key);\n\t\t\t\tpt = p.join('');\n\t\t\t\tif(u !== start && pt < (start||'').slice(0,pt.length)){ continue }\n\t\t\t\tif(u !== end && (end || END) < pt){ continue }\n\t\t\t\tif(rev){ // children must be checked first when going in reverse.\n\t\t\t\t\ttmp = rap(tree, cb, opt, p);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tif(u !== (tmp = tree[''])){\n\t\t\t\t\tvar yes = 1;\n\t\t\t\t\tif(u !== start && pt < (start||'')){ yes = 0 }\n\t\t\t\t\tif(u !== end && pt > (end || END)){ yes = 0 }\n\t\t\t\t\tif(yes){\n\t\t\t\t\t\ttmp = cb(tmp, pt, key, pre);\n\t\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\tif(opt.branch){\n\t\t\t\t\ttmp = cb(u, pt, key, pre);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tpre = p;\n\t\t\t\tif(!rev){\n\t\t\t\t\ttmp = rap(tree, cb, opt, pre);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tpre.pop();\n\t\t\t}\n\t\t} catch (e) { console.error(e); }\n\t};\n\n\tif(typeof window !== \"undefined\"){\n\t window.Radix = Radix;\n\t} else { \n\t\ttry{ module.exports = Radix }catch(e){}\n\t}\n\tvar each = Radix.object = function(o, f, r){\n\t\tfor(var k in o){\n\t\t\tif(!o.hasOwnProperty(k)){ continue }\n\t\t\tif((r = f(o[k], k)) !== u){ return r }\n\t\t}\n\t}, no = {}, u;\n\tvar _ = String.fromCharCode(24);\n\t\n}());\n",";(function(){\n\n\tfunction Radisk(opt){\n\n\t\topt = opt || {};\n\t\topt.log = opt.log || console.log;\n\t\topt.file = String(opt.file || 'radata');\n\t\tvar has = (Radisk.has || (Radisk.has = {}))[opt.file];\n\t\tif(has){ return has }\n\n\t\topt.max = opt.max || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;\n\t\topt.until = opt.until || opt.wait || 250;\n\t\topt.batch = opt.batch || (10 * 1000);\n\t\topt.chunk = opt.chunk || (1024 * 1024 * 1); // 1MB\n\t\topt.code = opt.code || {};\n\t\topt.code.from = opt.code.from || '!';\n\t\topt.jsonify = true;\n\n\n\t\tfunction ename(t){ return encodeURIComponent(t).replace(/\\*/g, '%2A') } // TODO: Hash this also, but allow migration!\n\t\tfunction atomic(v){ return u !== v && (!v || 'object' != typeof v) }\n\t\tvar timediate = (''+u === typeof setImmediate)? setTimeout : setImmediate;\n\t\tvar puff = setTimeout.turn || timediate, u;\n\t\tvar map = Radix.object;\n\t\tvar ST = 0;\n\n\t\tif(!opt.store){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `opt.store` interface with `{get: fn, put: fn (, list: fn)}`!\");\n\t\t}\n\t\tif(!opt.store.put){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `store.put` interface with `(file, data, cb)`!\");\n\t\t}\n\t\tif(!opt.store.get){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `store.get` interface with `(file, cb)`!\");\n\t\t}\n\t\tif(!opt.store.list){\n\t\t\t//opt.log(\"WARNING: `store.list` interface might be needed!\");\n\t\t}\n\n\t\tif(''+u != typeof require){ require('./yson') }\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\t\t/*\n\t\t\tAny and all storage adapters should...\n\t\t\t1. Because writing to disk takes time, we should batch data to disk. This improves performance, and reduces potential disk corruption.\n\t\t\t2. If a batch exceeds a certain number of writes, we should immediately write to disk when physically possible. This caps total performance, but reduces potential loss.\n\t\t*/\n\t\tvar r = function(key, data, cb, tag, DBG){\n\t\t\tif('function' === typeof data){\n\t\t\t\tvar o = cb || {};\n\t\t\t\tcb = data;\n\t\t\t\tr.read(key, cb, o, DBG || tag);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//var tmp = (tmp = r.batch = r.batch || {})[key] = tmp[key] || {};\n\t\t\t//var tmp = (tmp = r.batch = r.batch || {})[key] = data;\n\t\t\tr.save(key, data, cb, tag, DBG);\n\t\t}\n\t\tr.save = function(key, data, cb, tag, DBG){\n\t\t\tvar s = {key: key}, tags, f, d, q;\n\t\t\ts.find = function(file){ var tmp;\n\t\t\t\ts.file = file || (file = opt.code.from);\n\t\t\t\tDBG && (DBG = DBG[file] = DBG[file] || {});\n\t\t\t\tDBG && (DBG.sf = DBG.sf || +new Date);\n\t\t\t\t//console.only.i && console.log('found', file);\n\t\t\t\tif(tmp = r.disk[file]){ s.mix(u, tmp); return }\n\t\t\t\tr.parse(file, s.mix, u, DBG);\n\t\t\t}\n\t\t\ts.mix = function(err, disk){\n\t\t\t\tDBG && (DBG.sml = +new Date);\n\t\t\t\tDBG && (DBG.sm = DBG.sm || +new Date);\n\t\t\t\tif(s.err = err || s.err){ cb(err); return } // TODO: HANDLE BATCH EMIT\n\t\t\t\tvar file = s.file = (disk||'').file || s.file, tmp;\n\t\t\t\tif(!disk && file !== opt.code.from){ // corrupt file?\n\t\t\t\t\tr.find.bad(file); // remove from dir list\n\t\t\t\t\tr.save(key, data, cb, tag); // try again\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t(disk = r.disk[file] || (r.disk[file] = disk || Radix())).file || (disk.file = file);\n\t\t\t\tif(opt.compare){\n\t\t\t\t\tdata = opt.compare(disk(key), data, key, file);\n\t\t\t\t\tif(u === data){ cb(err, -1); return } // TODO: HANDLE BATCH EMIT\n\t\t\t\t}\n\t\t\t\t(s.disk = disk)(key, data);\n\t\t\t\tif(tag){\n\t\t\t\t\t(tmp = (tmp = disk.tags || (disk.tags = {}))[tag] || (tmp[tag] = r.tags[tag] || (r.tags[tag] = {})))[file] || (tmp[file] = r.one[tag] || (r.one[tag] = cb));\n\t\t\t\t\tcb = null;\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.st = DBG.st || +new Date);\n\t\t\t\t//console.only.i && console.log('mix', disk.Q);\n\t\t\t\tif(disk.Q){ cb && disk.Q.push(cb); return } disk.Q = (cb? [cb] : []);\n\t\t\t\tdisk.to = setTimeout(s.write, opt.until);\n\t\t\t}\n\t\t\ts.write = function(){\n\t\t\t\tDBG && (DBG.sto = DBG.sto || +new Date);\n\t\t\t\tvar file = f = s.file, disk = d = s.disk;\n\t\t\t\tq = s.q = disk.Q;\n\t\t\t\ttags = s.tags = disk.tags;\n\t\t\t\tdelete disk.Q;\n\t\t\t\tdelete r.disk[file];\n\t\t\t\tdelete disk.tags;\n\t\t\t\t//console.only.i && console.log('write', file, disk, 'was saving:', key, data);\n\t\t\t\tr.write(file, disk, s.ack, u, DBG);\n\t\t\t}\n\t\t\ts.ack = function(err, ok){\n\t\t\t\tDBG && (DBG.sa = DBG.sa || +new Date);\n\t\t\t\tDBG && (DBG.sal = q.length);\n\t\t\t\tvar ack, tmp;\n\t\t\t\t// TODO!!!! CHANGE THIS INTO PUFF!!!!!!!!!!!!!!!!\n\t\t\t\tfor(var id in r.tags){\n\t\t\t\t\tif(!r.tags.hasOwnProperty(id)){ continue } var tag = r.tags[id];\n\t\t\t\t\tif((tmp = r.disk[f]) && (tmp = tmp.tags) && tmp[tag]){ continue }\n\t\t\t\t\tack = tag[f];\n\t\t\t\t\tdelete tag[f];\n\t\t\t\t\tvar ne; for(var k in tag){ if(tag.hasOwnProperty(k)){ ne = true; break } } // is not empty?\n\t\t\t\t\tif(ne){ continue } //if(!obj_empty(tag)){ continue }\n\t\t\t\t\tdelete r.tags[tag];\n\t\t\t\t\tack && ack(err, ok);\n\t\t\t\t}\n\t\t\t\t!q && (q = '');\n\t\t\t\tvar l = q.length, i = 0;\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\tvar S = +new Date;\n\t\t\t\tfor(;i < l; i++){ (ack = q[i]) && ack(err, ok) }\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad acks', ename(s.file));\n\t\t\t\tconsole.STAT && console.STAT(S, q.length, 'rad acks #', ename(s.file));\n\t\t\t}\n\t\t\tcb || (cb = function(err, ok){ // test delete!\n\t\t\t\tif(!err){ return }\n\t\t\t});\n\t\t\t//console.only.i && console.log('save', key);\n\t\t\tr.find(key, s.find);\n }\n r.disk = {};\n r.one = {};\n r.tags = {};\n\n\t\t/*\n\t\t\tAny storage engine at some point will have to do a read in order to write.\n\t\t\tThis is true of even systems that use an append only log, if they support updates.\n\t\t\tTherefore it is unavoidable that a read will have to happen,\n\t\t\tthe question is just how long you delay it.\n\t\t*/\n\t\tvar RWC = 0;\n\t\tr.write = function(file, rad, cb, o, DBG){\n\t\t\tif(!rad){ cb('No radix!'); return }\n\t\t\to = ('object' == typeof o)? o : {force: o};\n\t\t\tvar f = function Fractal(){}, a, b;\n\t\t\tf.text = '';\n\t\t\tf.file = file = rad.file || (rad.file = file);\n\t\t\tif(!file){ cb('What file?'); return }\n\t\t\tf.write = function(){\n\t\t\t\tvar text = rad.raw = f.text;\n\t\t\t\tr.disk[file = rad.file || f.file || file] = rad;\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.wd = S);\n\t\t\t\t//console.only.i && console.log('add', file);\n\t\t\t\tr.find.add(file, function add(err){\n\t\t\t\t\tDBG && (DBG.wa = +new Date);\n\t\t\t\t\tif(err){ cb(err); return }\n\t\t\t\t\t//console.only.i && console.log('disk', file, text);\n\t\t\t\t\topt.store.put(ename(file), text, function safe(err, ok){\n\t\t\t\t\t\tDBG && (DBG.wp = +new Date);\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, ST = +new Date - S, \"wrote disk\", JSON.stringify(file), ++RWC, 'total all writes.');\n\t\t\t\t\t\t//console.only.i && console.log('done', err, ok || 1, cb);\n\t\t\t\t\t\tcb(err, ok || 1);\n\t\t\t\t\t\tif(!rad.Q){ delete r.disk[file] } // VERY IMPORTANT! Clean up memory, but not if there is already queued writes on it!\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tf.split = function(){\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.wf = S);\n\t\t\t\tf.text = '';\n\t\t\t\tif(!f.count){ f.count = 0;\n\t\t\t\t\tRadix.map(rad, function count(){ f.count++ }); // TODO: Perf? Any faster way to get total length?\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.wfc = f.count);\n\t\t\t\tf.limit = Math.ceil(f.count/2);\n\t\t\t\tvar SC = f.count;\n\t\t\t\tf.count = 0;\n\t\t\t\tDBG && (DBG.wf1 = +new Date);\n\t\t\t\tf.sub = Radix();\n\t\t\t\tRadix.map(rad, f.slice, {reverse: 1}); // IMPORTANT: DO THIS IN REVERSE, SO LAST HALF OF DATA MOVED TO NEW FILE BEFORE DROPPING FROM CURRENT FILE.\n\t\t\t\tDBG && (DBG.wf2 = +new Date);\n\t\t\t\tr.write(f.end, f.sub, f.both, o);\n\t\t\t\tDBG && (DBG.wf3 = +new Date);\n\t\t\t\tf.hub = Radix();\n\t\t\t\tRadix.map(rad, f.stop);\n\t\t\t\tDBG && (DBG.wf4 = +new Date);\n\t\t\t\tr.write(rad.file, f.hub, f.both, o);\n\t\t\t\tDBG && (DBG.wf5 = +new Date);\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad split\", ename(rad.file), SC);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tf.slice = function(val, key){\n\t\t\t\tf.sub(f.end = key, val);\n\t\t\t\tif(f.limit <= (++f.count)){ return true }\n\t\t\t}\n\t\t\tf.stop = function(val, key){\n\t\t\t\tif(key >= f.end){ return true }\n\t\t\t\tf.hub(key, val);\n\t\t\t}\n\t\t\tf.both = function(err, ok){\n\t\t\t\tDBG && (DBG.wfd = +new Date);\n\t\t\t\tif(b){ cb(err || b); return }\n\t\t\t\tif(a){ cb(err, ok); return }\n\t\t\t\ta = true;\n\t\t\t\tb = err;\n\t\t\t}\n\t\t\tf.each = function(val, key, k, pre){\n\t\t\t\tif(u !== val){ f.count++ }\n\t\t\t\tif(opt.max <= (val||'').length){ return cb(\"Data too big!\"), true }\n\t\t\t\tvar enc = Radisk.encode(pre.length) +'#'+ Radisk.encode(k) + (u === val? '' : ':'+ Radisk.encode(val)) +'\\n';\n\t\t\t\tif((opt.chunk < f.text.length + enc.length) && (1 < f.count) && !o.force){\n\t\t\t\t\treturn f.split();\n\t\t\t\t}\n\t\t\t\tf.text += enc;\n\t\t\t}\n\t\t\t//console.only.i && console.log('writing');\n\t\t\tif(opt.jsonify){ r.write.jsonify(f, rad, cb, o, DBG); return } // temporary testing idea\n\t\t\tif(!Radix.map(rad, f.each, true)){ f.write() }\n\t\t}\n\n\t\tr.write.jsonify = function(f, rad, cb, o, DBG){\n\t\t\tvar raw;\n\t\t\tvar S = +new Date;\n\t\t\tDBG && (DBG.w = S);\n\t\t\ttry{raw = JSON.stringify(rad.$);\n\t\t\t}catch(e){ cb(\"Cannot radisk!\"); return }\n\t\t\tDBG && (DBG.ws = +new Date);\n\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad stringified JSON\");\n\t\t\tif(opt.chunk < raw.length && !o.force){\n\t\t\t\tvar c = 0;\n\t\t\t\tRadix.map(rad, function(){\n\t\t\t\t\tif(c++){ return true } // more than 1 item\n\t\t\t\t});\n\t\t\t\tif(c > 1){\n\t\t\t\t\treturn f.split();\n\t\t\t\t}\n\t\t\t}\n\t\t\tf.text = raw;\n\t\t\tf.write();\n\t\t}\n\n\t\tr.range = function(tree, o){\n\t\t\tif(!tree || !o){ return }\n\t\t\tif(u === o.start && u === o.end){ return tree }\n\t\t\tif(atomic(tree)){ return tree }\n\t\t\tvar sub = Radix();\n\t\t\tRadix.map(tree, function(v,k){ sub(k,v) }, o); // ONLY PLACE THAT TAKES TREE, maybe reduce API for better perf?\n\t\t\treturn sub('');\n\t\t}\n\n\t\t;(function(){\n\t\t\tr.read = function(key, cb, o, DBG){\n\t\t\t\to = o || {};\n\t\t\t\tvar g = {key: key};\n\t\t\t\tg.find = function(file){ var tmp;\n\t\t\t\t\tg.file = file || (file = opt.code.from);\n\t\t\t\t\tDBG && (DBG = DBG[file] = DBG[file] || {});\n\t\t\t\t\tDBG && (DBG.rf = DBG.rf || +new Date);\n\t\t\t\t\tif(tmp = r.disk[g.file = file]){ g.check(u, tmp); return }\n\t\t\t\t\tr.parse(file, g.check, u, DBG);\n\t\t\t\t}\n\t\t\t\tg.get = function(err, disk, info){\n\t\t\t\t\tDBG && (DBG.rgl = +new Date);\n\t\t\t\t\tDBG && (DBG.rg = DBG.rg || +new Date);\n\t\t\t\t\tif(g.err = err || g.err){ cb(err); return }\n\t\t\t\t\tvar file = g.file = (disk||'').file || g.file;\n\t\t\t\t\tif(!disk && file !== opt.code.from){ // corrupt file?\n\t\t\t\t\t\tr.find.bad(file); // remove from dir list\n\t\t\t\t\t\tr.read(key, cb, o); // try again\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdisk = r.disk[file] || (r.disk[file] = disk);\n\t\t\t\t\tif(!disk){ cb(file === opt.code.from? u : \"No file!\"); return }\n\t\t\t\t\tdisk.file || (disk.file = file);\n\t\t\t\t\tvar data = r.range(disk(key), o);\n\t\t\t\t\tDBG && (DBG.rr = +new Date);\n\t\t\t\t\to.unit = disk.unit;\n\t\t\t\t\to.chunks = (o.chunks || 0) + 1;\n\t\t\t\t\to.parsed = (o.parsed || 0) + ((info||'').parsed||(o.chunks*opt.chunk));\n\t\t\t\t\to.more = 1;\n\t\t\t\t\to.next = u;\n\t\t\t\t\tRadix.map(r.list, function next(v,f){\n\t\t\t\t\t\tif(!v || file === f){ return }\n\t\t\t\t\t\to.next = f;\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}, o.reverse? {reverse: 1, end: file} : {start: file});\n\t\t\t\t\tDBG && (DBG.rl = +new Date);\n\t\t\t\t\tif(!o.next){ o.more = 0 }\n\t\t\t\t\tif(o.next){\n\t\t\t\t\t\tif(!o.reverse && ((key < o.next && 0 != o.next.indexOf(key)) || (u !== o.end && (o.end || '\\uffff') < o.next))){ o.more = 0 }\n\t\t\t\t\t\tif(o.reverse && ((key > o.next && 0 != key.indexOf(o.next)) || ((u !== o.start && (o.start || '') > o.next && file <= o.start)))){ o.more = 0 }\n\t\t\t\t\t}\n\t\t\t\t\t//console.log(5, process.memoryUsage().heapUsed);\n\t\t\t\t\tif(!o.more){ cb(g.err, data, o); return }\n\t\t\t\t\tif(data){ cb(g.err, data, o) }\n\t\t\t\t\tif(o.parsed >= o.limit){ return }\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tDBG && (DBG.rm = S);\n\t\t\t\t\tvar next = o.next;\n\t\t\t\t\ttimediate(function(){\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad more');\n\t\t\t\t\t\tr.parse(next, g.check);\n\t\t\t\t\t},0);\n\t\t\t\t}\n\t\t\t\tg.check = function(err, disk, info){\n\t\t\t\t\t//console.log(4, process.memoryUsage().heapUsed);\n\t\t\t\t\tg.get(err, disk, info);\n\t\t\t\t\tif(!disk || disk.check){ return } disk.check = 1;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t(info || (info = {})).file || (info.file = g.file);\n\t\t\t\t\tRadix.map(disk, function(val, key){\n\t\t\t\t\t\t// assume in memory for now, since both write/read already call r.find which will init it.\n\t\t\t\t\t\tr.find(key, function(file){\n\t\t\t\t\t\t\tif((file || (file = opt.code.from)) === info.file){ return }\n\t\t\t\t\t\t\tvar id = (''+Math.random()).slice(-3);\n\t\t\t\t\t\t\tpuff(function(){\n\t\t\t\t\t\t\tr.save(key, val, function ack(err, ok){\n\t\t\t\t\t\t\t\tif(err){ r.save(key, val, ack); return } // ad infinitum???\n\t\t\t\t\t\t\t\t// TODO: NOTE!!! Mislocated data could be because of a synchronous `put` from the `g.get(` other than perf shouldn't we do the check first before acking?\n\t\t\t\t\t\t\t\tconsole.STAT && console.STAT(\"MISLOCATED DATA CORRECTED\", id, ename(key), ename(info.file), ename(file));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},0);\n\t\t\t\t\t\t})\n\t\t\t\t\t});\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad check\");\n\t\t\t\t}\n\t\t\t\tr.find(key || (o.reverse? (o.end||'') : (o.start||'')), g.find); \n\t\t\t}\n\t\t\tfunction rev(a,b){ return b }\n\t\t\tvar revo = {reverse: true};\n\t\t}());\n\n\t\t;(function(){\n\t\t\t/*\n\t\t\t\tLet us start by assuming we are the only process that is\n\t\t\t\tchanging the directory or bucket. Not because we do not want\n\t\t\t\tto be multi-process/machine, but because we want to experiment\n\t\t\t\twith how much performance and scale we can get out of only one.\n\t\t\t\tThen we can work on the harder problem of being multi-process.\n\t\t\t*/\n\t\t\tvar RPC = 0;\n\t\t\tvar Q = {}, s = String.fromCharCode(31);\n\t\t\tr.parse = function(file, cb, raw, DBG){ var q;\n\t\t\t\tif(!file){ return cb(); }\n\t\t\t\tif(q = Q[file]){ q.push(cb); return } q = Q[file] = [cb];\n\t\t\t\tvar p = function Parse(){}, info = {file: file};\n\t\t\t\t(p.disk = Radix()).file = file;\n\t\t\t\tp.read = function(err, data){ var tmp;\n\t\t\t\t\tDBG && (DBG.rpg = +new Date);\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'read disk', JSON.stringify(file), ++RPC, 'total all parses.');\n\t\t\t\t\t//console.log(2, process.memoryUsage().heapUsed);\n\t\t\t\t\tif((p.err = err) || (p.not = !data)){\n\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif('string' !== typeof data){\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tif(opt.max <= data.length){\n\t\t\t\t\t\t\t\tp.err = \"Chunk too big!\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata = data.toString(); // If it crashes, it crashes here. How!?? We check size first!\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}catch(e){ p.err = e }\n\t\t\t\t\t\tif(p.err){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tinfo.parsed = data.length;\n\t\t\t\t\tDBG && (DBG.rpl = info.parsed);\n\t\t\t\t\tDBG && (DBG.rpa = q.length);\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tif(!(opt.jsonify || '{' === data[0])){\n\t\t\t\t\t\tp.radec(err, data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tparse(data, function(err, tree){\n\t\t\t\t\t\t//console.log(3, process.memoryUsage().heapUsed);\n\t\t\t\t\t\tif(!err){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.disk.$ = tree;\n\t\t\t\t\t\t\tconsole.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'rad parsed JSON');\n\t\t\t\t\t\t\tDBG && (DBG.rpd = +new Date);\n\t\t\t\t\t\t\tp.map(q, p.ack); // hmmm, v8 profiler can't see into this cause of try/catch?\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif('{' === data[0]){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.err = tmp || \"JSON error!\";\n\t\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.radec(err, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tp.map = function(){ // switch to setTimeout.each now?\n\t\t\t\t\tif(!q || !q.length){ return }\n\t\t\t\t\t//var i = 0, l = q.length, ack;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tvar err = p.err, data = p.not? u : p.disk;\n\t\t\t\t\tvar i = 0, ack; while(i < 9 && (ack = q[i++])){ ack(err, data, info) } // too much?\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad packs', ename(file));\n\t\t\t\t\tconsole.STAT && console.STAT(S, i, 'rad packs #', ename(file)); \n\t\t\t\t\tif(!(q = q.slice(i)).length){ return }\n\t\t\t\t\tpuff(p.map, 0);\n\t\t\t\t}\n\t\t\t\tp.ack = function(cb){\n\t\t\t\t\tif(!cb){ return }\n\t\t\t\t\tif(p.err || p.not){\n\t\t\t\t\t\tcb(p.err, u, info);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcb(u, p.disk, info);\n\t\t\t\t}\n\t\t\t\tp.radec = function(err, data){\n\t\t\t\t\tdelete Q[file];\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tvar tmp = p.split(data), pre = [], i, k, v;\n\t\t\t\t\tif(!tmp || 0 !== tmp[1]){\n\t\t\t\t\t\tp.err = \"File '\"+file+\"' does not have root radix! \";\n\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\treturn; \n\t\t\t\t\t}\n\t\t\t\t\twhile(tmp){\n\t\t\t\t\t\tk = v = u;\n\t\t\t\t\t\ti = tmp[1];\n\t\t\t\t\t\ttmp = p.split(tmp[2])||'';\n\t\t\t\t\t\tif('#' == tmp[0]){\n\t\t\t\t\t\t\tk = tmp[1];\n\t\t\t\t\t\t\tpre = pre.slice(0,i);\n\t\t\t\t\t\t\tif(i <= pre.length){\n\t\t\t\t\t\t\t\tpre.push(k);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmp = p.split(tmp[2])||'';\n\t\t\t\t\t\tif('\\n' == tmp[0]){ continue }\n\t\t\t\t\t\tif('=' == tmp[0] || ':' == tmp[0]){ v = tmp[1] }\n\t\t\t\t\t\tif(u !== k && u !== v){ p.disk(pre.join(''), v) }\n\t\t\t\t\t\ttmp = p.split(tmp[2]);\n\t\t\t\t\t}\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'parsed RAD');\n\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t};\n\t\t\t\tp.split = function(t){\n\t\t\t\t\tif(!t){ return }\n\t\t\t\t\tvar l = [], o = {}, i = -1, a = '', b, c;\n\t\t\t\t\ti = t.indexOf(s);\n\t\t\t\t\tif(!t[i]){ return }\n\t\t\t\t\ta = t.slice(0, i);\n\t\t\t\t\tl[0] = a;\n\t\t\t\t\tl[1] = b = Radisk.decode(t.slice(i), o);\n\t\t\t\t\tl[2] = t.slice(i + o.i);\n\t\t\t\t\treturn l;\n\t\t\t\t}\n\t\t\t\tif(r.disk){ raw || (raw = (r.disk[file]||'').raw) }\n\t\t\t\tvar S = +new Date, SM, SL;\n\t\t\t\tDBG && (DBG.rp = S);\n\t\t\t\tif(raw){ return puff(function(){ p.read(u, raw) }, 0) }\n\t\t\t\topt.store.get(ename(file), p.read);\n\t\t\t\t// TODO: What if memory disk gets filled with updates, and we get an old one back?\n\t\t\t}\n\t\t}());\n\n\t\t;(function(){\n\t\t\tvar dir, f = String.fromCharCode(28), Q;\n\t\t\tr.find = function(key, cb){\n\t\t\t\tif(!dir){\n\t\t\t\t\tif(Q){ Q.push([key, cb]); return } Q = [[key, cb]];\n\t\t\t\t\tr.parse(f, init);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tRadix.map(r.list = dir, function(val, key){\n\t\t\t\t\tif(!val){ return }\n\t\t\t\t\treturn cb(key) || true;\n\t\t\t\t}, {reverse: 1, end: key}) || cb(opt.code.from);\n\t\t\t}\n\t\t\tr.find.add = function(file, cb){\n\t\t\t\tvar has = dir(file);\n\t\t\t\tif(has || file === f){ cb(u, 1); return }\n\t\t\t\tdir(file, 1);\n\t\t\t\tcb.found = (cb.found || 0) + 1;\n\t\t\t\tr.write(f, dir, function(err, ok){\n\t\t\t\t\tif(err){ cb(err); return }\n\t\t\t\t\tcb.found = (cb.found || 0) - 1;\n\t\t\t\t\tif(0 !== cb.found){ return }\n\t\t\t\t\tcb(u, 1);\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\tr.find.bad = function(file, cb){\n\t\t\t\tdir(file, 0);\n\t\t\t\tr.write(f, dir, cb||noop);\n\t\t\t}\n\t\t\tfunction init(err, disk){\n\t\t\t\tif(err){\n\t\t\t\t\topt.log('list', err);\n\t\t\t\t\tsetTimeout(function(){ r.parse(f, init) }, 1000);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(disk){ drain(disk); return }\n\t\t\t\tdir = dir || disk || Radix();\n\t\t\t\tif(!opt.store.list){ drain(dir); return }\n\t\t\t\t// import directory.\n\t\t\t\topt.store.list(function(file){\n\t\t\t\t\tif(!file){ drain(dir); return }\n\t\t\t\t\tr.find.add(file, noop);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction drain(rad, tmp){\n\t\t\t\tdir = dir || rad;\n\t\t\t\tdir.file = f;\n\t\t\t\ttmp = Q; Q = null;\n\t\t\t\tmap(tmp, function(arg){\n\t\t\t\t\tr.find(arg[0], arg[1]);\n\t\t\t\t});\n\t\t\t}\n\t\t}());\n\n\t\tvar noop = function(){}, RAD, u;\n\t\tRadisk.has[opt.file] = r;\n\t\treturn r;\n\t}\n\n\t;(function(){\n\t\tvar _ = String.fromCharCode(31), u;\n\t\tRadisk.encode = function(d, o, s){ s = s || _;\n\t\t\tvar t = s, tmp;\n\t\t\tif(typeof d == 'string'){\n\t\t\t\tvar i = d.indexOf(s);\n\t\t\t\twhile(i != -1){ t += s; i = d.indexOf(s, i+1) }\n\t\t\t\treturn t + '\"' + d + s;\n\t\t\t} else\n\t\t\tif(d && d['#'] && 1 == Object.keys(d).length){\n\t\t\t\treturn t + '#' + tmp + t;\n\t\t\t} else\n\t\t\tif('number' == typeof d){\n\t\t\t\treturn t + '+' + (d||0) + t;\n\t\t\t} else\n\t\t\tif(null === d){\n\t\t\t\treturn t + ' ' + t;\n\t\t\t} else\n\t\t\tif(true === d){\n\t\t\t\treturn t + '+' + t;\n\t\t\t} else\n\t\t\tif(false === d){\n\t\t\t\treturn t + '-' + t;\n\t\t\t}// else\n\t\t\t//if(binary){}\n\t\t}\n\t\tRadisk.decode = function(t, o, s){ s = s || _;\n\t\t\tvar d = '', i = -1, n = 0, c, p;\n\t\t\tif(s !== t[0]){ return }\n\t\t\twhile(s === t[++i]){ ++n }\n\t\t\tp = t[c = n] || true;\n\t\t\twhile(--n >= 0){ i = t.indexOf(s, i+1) }\n\t\t\tif(i == -1){ i = t.length }\n\t\t\td = t.slice(c+1, i);\n\t\t\tif(o){ o.i = i+1 }\n\t\t\tif('\"' === p){\n\t\t\t\treturn d;\n\t\t\t} else\n\t\t\tif('#' === p){\n\t\t\t\treturn {'#':d};\n\t\t\t} else\n\t\t\tif('+' === p){\n\t\t\t\tif(0 === d.length){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn parseFloat(d);\n\t\t\t} else\n\t\t\tif(' ' === p){\n\t\t\t\treturn null;\n\t\t\t} else\n\t\t\tif('-' === p){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}());\n\n\tif(typeof window !== \"undefined\"){\n\t var Gun = window.Gun;\n\t var Radix = window.Radix;\n\t window.Radisk = Radisk;\n\t} else { \n\t var Gun = require('../gun');\n\t\tvar Radix = require('./radix');\n\t\t//var Radix = require('./radix2'); Radisk = require('./radisk2');\n\t\ttry{ module.exports = Radisk }catch(e){}\n\t}\n\n\tRadisk.Radix = Radix;\n\n}());","var Gun = (typeof window !== \"undefined\")? window.Gun : require('../gun');\n\nGun.on('create', function(root){\n if(Gun.TESTING){ root.opt.file = 'radatatest' }\n this.to.next(root);\n var opt = root.opt, empty = {}, u;\n if(false === opt.rad || false === opt.radisk){ return }\n if((u+'' != typeof process) && 'false' === ''+(process.env||'').RAD){ return }\n var Radisk = (Gun.window && Gun.window.Radisk) || require('./radisk');\n var Radix = Radisk.Radix;\n var dare = Radisk(opt), esc = String.fromCharCode(27);\n var ST = 0;\n \n root.on('put', function(msg){\n this.to.next(msg);\n if((msg._||'').rad){ return } // don't save what just came from a read.\n //if(msg['@']){ return } // WHY DID I NOT ADD THIS?\n var id = msg['#'], put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], tmp;\n var DBG = (msg._||'').DBG; DBG && (DBG.sp = DBG.sp || +new Date);\n //var lot = (msg._||'').lot||''; count[id] = (count[id] || 0) + 1; \n var S = (msg._||'').RPS || ((msg._||'').RPS = +new Date);\n //console.log(\"PUT ------->>>\", soul,key, val, state);\n //dare(soul+esc+key, {':': val, '>': state}, dare.one[id] || function(err, ok){\n dare(soul+esc+key, {':': val, '>': state}, function(err, ok){\n //console.log(\"<<<------- PAT\", soul,key, val, state, 'in', +new Date - S);\n DBG && (DBG.spd = DBG.spd || +new Date);\n console.STAT && console.STAT(S, +new Date - S, 'put');\n //if(!err && count[id] !== lot.s){ console.log(err = \"Disk count not same as ram count.\"); console.STAT && console.STAT(+new Date, lot.s - count[id], 'put ack != count') } delete count[id];\n if(err){ root.on('in', {'@': id, err: err, DBG: DBG}); return }\n root.on('in', {'@': id, ok: ok, DBG: DBG});\n //}, id, DBG && (DBG.r = DBG.r || {}));\n }, false && id, DBG && (DBG.r = DBG.r || {}));\n DBG && (DBG.sps = DBG.sps || +new Date);\n });\n var count = {}, obj_empty = Object.empty;\n \n root.on('get', function(msg){\n this.to.next(msg);\n var ctx = msg._||'', DBG = ctx.DBG = msg.DBG; DBG && (DBG.sg = +new Date);\n var id = msg['#'], get = msg.get, soul = msg.get['#'], has = msg.get['.']||'', o = {}, graph, lex, key, tmp, force;\n if('string' == typeof soul){\n key = soul;\n } else \n if(soul){\n if(u !== (tmp = soul['*'])){ o.limit = force = 1 }\n if(u !== soul['>']){ o.start = soul['>'] }\n if(u !== soul['<']){ o.end = soul['<'] }\n key = force? (''+tmp) : tmp || soul['='];\n force = null;\n }\n if(key && !o.limit){ // a soul.has must be on a soul, and not during soul*\n if('string' == typeof has){\n key = key+esc+(o.atom = has);\n } else \n if(has){\n if(u !== has['>']){ o.start = has['>']; o.limit = 1 }\n if(u !== has['<']){ o.end = has['<']; o.limit = 1 }\n if(u !== (tmp = has['*'])){ o.limit = force = 1 }\n if(key){ key = key+esc + (force? (''+(tmp||'')) : tmp || (o.atom = has['='] || '')) }\n }\n }\n if((tmp = get['%']) || o.limit){\n o.limit = (tmp <= (o.pack || (1000 * 100)))? tmp : 1;\n }\n if(has['-'] || (soul||{})['-'] || get['-']){ o.reverse = true }\n if((tmp = (root.next||'')[soul]) && tmp.put){\n if(o.atom){\n tmp = (tmp.next||'')[o.atom] ;\n if(tmp && tmp.rad){ return }\n } else\n if(tmp && tmp.rad){ return }\n }\n var now = Gun.state();\n var S = (+new Date), C = 0, SPT = 0; // STATS!\n DBG && (DBG.sgm = S);\n //var GID = String.random(3); console.log(\"GET ------->>>\", GID, key, o, '?', get);\n dare(key||'', function(err, data, info){\n //console.log(\"<<<------- GOT\", GID, +new Date - S, err, data);\n DBG && (DBG.sgr = +new Date);\n DBG && (DBG.sgi = info);\n try{opt.store.stats.get.time[statg % 50] = (+new Date) - S; ++statg;\n opt.store.stats.get.count++;\n if(err){ opt.store.stats.get.err = err }\n }catch(e){} // STATS!\n //if(u === data && info.chunks > 1){ return } // if we already sent a chunk, ignore ending empty responses. // this causes tests to fail.\n console.STAT && console.STAT(S, +new Date - S, 'got', JSON.stringify(key)); S = +new Date;\n info = info || '';\n var va, ve;\n if(info.unit && data && u !== (va = data[':']) && u !== (ve = data['>'])){ // new format\n var tmp = key.split(esc), so = tmp[0], ha = tmp[1];\n (graph = graph || {})[so] = Gun.state.ify(graph[so], ha, ve, va, so);\n root.$.get(so).get(ha)._.rad = now;\n // REMEMBER TO ADD _rad TO NODE/SOUL QUERY!\n } else\n if(data){ // old code path\n if(typeof data !== 'string'){\n if(o.atom){\n data = u;\n } else {\n Radix.map(data, each, o); // IS A RADIX TREE, NOT FUNCTION!\n }\n }\n if(!graph && data){ each(data, '') }\n // TODO: !has what about soul lookups?\n if(!o.atom && !has & 'string' == typeof soul && !o.limit && !o.more){\n root.$.get(soul)._.rad = now;\n }\n }\n DBG && (DBG.sgp = +new Date);\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // Or benchmark by reusing first start date.\n if(console.STAT && (ST = +new Date - S) > 9){ console.STAT(S, ST, 'got prep time'); console.STAT(S, C, 'got prep #') } SPT += ST; C = 0; S = +new Date;\n var faith = function(){}; faith.faith = true; faith.rad = get; // HNPERF: We're testing performance improvement by skipping going through security again, but this should be audited.\n root.on('in', {'@': id, put: graph, '%': info.more? 1 : u, err: err? err : u, _: faith, DBG: DBG});\n console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'got emit', Object.keys(graph||{}).length);\n graph = u; // each is outside our scope, we have to reset graph to nothing!\n }, o, DBG && (DBG.r = DBG.r || {}));\n DBG && (DBG.sgd = +new Date);\n console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'get call'); // TODO: Perf: this was half a second??????\n function each(val, has, a,b){ // TODO: THIS CODE NEEDS TO BE FASTER!!!!\n C++;\n if(!val){ return }\n has = (key+has).split(esc);\n var soul = has.slice(0,1)[0];\n has = has.slice(-1)[0];\n if(o.limit && o.limit <= o.count){ return true }\n var va, ve, so = soul, ha = has;\n //if(u !== (va = val[':']) && u !== (ve = val['>'])){ // THIS HANDLES NEW CODE!\n if('string' != typeof val){ // THIS HANDLES NEW CODE!\n va = val[':']; ve = val['>'];\n (graph = graph || {})[so] = Gun.state.ify(graph[so], ha, ve, va, so);\n //root.$.get(so).get(ha)._.rad = now;\n o.count = (o.count || 0) + ((va||'').length || 9);\n return;\n }\n o.count = (o.count || 0) + val.length;\n var tmp = val.lastIndexOf('>');\n var state = Radisk.decode(val.slice(tmp+1), null, esc);\n val = Radisk.decode(val.slice(0,tmp), null, esc);\n (graph = graph || {})[soul] = Gun.state.ify(graph[soul], has, state, val, soul);\n }\n });\n var val_is = Gun.valid;\n (opt.store||{}).stats = {get:{time:{}, count:0}, put: {time:{}, count:0}}; // STATS!\n var statg = 0, statp = 0; // STATS!\n});",";(function(){\n/* // from @jabis\nif (navigator.storage && navigator.storage.estimate) {\n const quota = await navigator.storage.estimate();\n // quota.usage -> Number of bytes used.\n // quota.quota -> Maximum number of bytes available.\n const percentageUsed = (quota.usage / quota.quota) * 100;\n console.log(`You've used ${percentageUsed}% of the available storage.`);\n const remaining = quota.quota - quota.usage;\n console.log(`You can write up to ${remaining} more bytes.`);\n}\n*/\n function Store(opt){\n opt = opt || {};\n opt.file = String(opt.file || 'radata');\n var store = Store[opt.file], db = null, u;\n\n if(store){\n console.log(\"Warning: reusing same IndexedDB store and options as 1st.\");\n return Store[opt.file];\n }\n store = Store[opt.file] = function(){};\n\n try{opt.indexedDB = opt.indexedDB || Store.indexedDB || indexedDB}catch(e){}\n try{if(!opt.indexedDB || 'file:' == location.protocol){\n var s = store.d || (store.d = {});\n store.put = function(f, d, cb){ s[f] = d; setTimeout(function(){ cb(null, 1) },250) };\n store.get = function(f, cb){ setTimeout(function(){ cb(null, s[f] || u) },5) };\n console.log('Warning: No indexedDB exists to persist data to!');\n return store;\n }}catch(e){}\n \n\n store.start = function(){\n var o = indexedDB.open(opt.file, 1);\n o.onupgradeneeded = function(eve){ (eve.target.result).createObjectStore(opt.file) }\n o.onsuccess = function(){ db = o.result }\n o.onerror = function(eve){ console.log(eve||1); }\n }; store.start();\n\n store.put = function(key, data, cb){\n if(!db){ setTimeout(function(){ store.put(key, data, cb) },1); return }\n var tx = db.transaction([opt.file], 'readwrite');\n var obj = tx.objectStore(opt.file);\n var req = obj.put(data, ''+key);\n req.onsuccess = obj.onsuccess = tx.onsuccess = function(){ cb(null, 1) }\n req.onabort = obj.onabort = tx.onabort = function(eve){ cb(eve||'put.tx.abort') }\n req.onerror = obj.onerror = tx.onerror = function(eve){ cb(eve||'put.tx.error') }\n }\n\n store.get = function(key, cb){\n if(!db){ setTimeout(function(){ store.get(key, cb) },9); return }\n var tx = db.transaction([opt.file], 'readonly');\n var obj = tx.objectStore(opt.file);\n var req = obj.get(''+key);\n req.onsuccess = function(){ cb(null, req.result) }\n req.onabort = function(eve){ cb(eve||4) }\n req.onerror = function(eve){ cb(eve||5) }\n }\n setInterval(function(){ db && db.close(); db = null; store.start() }, 1000 * 15); // reset webkit bug?\n return store;\n }\n\n if(typeof window !== \"undefined\"){\n (Store.window = window).RindexedDB = Store;\n Store.indexedDB = window.indexedDB; // safari bug\n } else {\n try{ module.exports = Store }catch(e){}\n }\n\n try{\n var Gun = Store.window.Gun || require('../gun');\n Gun.on('create', function(root){\n this.to.next(root);\n root.opt.store = root.opt.store || Store(root.opt);\n });\n }catch(e){}\n\n}());","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","/**\n * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2022 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n totalWeight += obj.weight;\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '6.6.2';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["require","global","throttle","func","limit","inThrottle","args","arguments","context","apply","setTimeout","debounce","inDebounce","clearTimeout","sample","arr","Math","floor","random","length","sampleSize","size","shuffled","slice","i","min","temp","index","defer","once","called","omit","obj","keys","newObj","Object","forEach","key","includes","defaults","undefined","pickBy","predicate","isNode","prototype","toString","call","process","e","userAgent","navigator","toLowerCase","isElectron","indexOf","isMobile","check","a","test","substr","vendor","gunAsAnotherUser","gun","f","gun2","Gun","radisk","peers","_","opt","user","auth","values","back","peer","on","gunOnceDefined","node","Promise","resolve","val","_k","_a","eve","off","animals","adjectives","getHash","str","format","SEA","work","name","hash","Error","base64ToHex","capitalize","s","charAt","toUpperCase","generateName","raw","atob","result","hex","charCodeAt","getCaret","el","selectionStart","document","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","injectCss","elementId","getElementById","sheet","createElement","id","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sPageURL","window","location","search","substring","sURLVariables","split","sParameterName","decodeURIComponent","formatTime","date","t","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","now","nowStr","Date","toLocaleDateString","dayDifference","round","weekday","getProfileLink","pub","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","delay","require$$2","require$$0","require$$1","ELECTRON_GUN_URL","maxConnectedPeers","DEFAULT_PEERS","loc","host","is_localhost_but_not_dev","startsWith","hostname","endsWith","url","enabled","urlRegex","known","add","from","k","visibility","secret","Session","getKey","epub","encrypt","encryptedUrl","encryptedUrlHash","publicState","get","put","lastSeen","toISOString","connect","save","remove","disconnect","peerFromGun","localStorage","setItem","JSON","stringify","getSaved","p","getItem","parse","util","reset","isMixedContent","disable","protocol","connectToLocalElectron","max","push","checkGunPeerCount","peersFromGun","connectedPeers","filter","wire","constructor","console","log","readyState","bufferedAmount","unconnectedPeers","addedToGun","map","mixedContent","String","init","setInterval","opts","myOpts","assign","retry","Infinity","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","uuid","Attribute","b","value","guessTypeOf","getUuid","replace","getUniqueIdValidators","isUniqueType","match","equals","uri","currentUser","session","DEFAULT_PERMISSIONS","read","write","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","Array","isArray","o","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","then","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","decrypt","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","block","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","getOurSecretChannelId","pair","getTheirSecretChannelId","getChannels","listenToChatLinks","keypair","getMyChatLinks","seen","handleChannel","ourSecretChannelId","encryptedChatId","chatId","getMessages","theirSecretChannelId","data","messageReceived","userState","selfAuthored","messages","decrypted","info","getLatestMsg","callbackIfLatest","msg","latest","time","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","theirMsgsLastSeenTime","removeParticipant","permissions","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","send","trim","putGroup","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","v","hasWritePermission","hasOwnProperty","subscription","theirSecretUuid","_b","setTyping","isTyping","timeout","setTypingTimeout","getTyping","typing","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","chatLinks","chatLinkSubscriptions","links","link","channels","formatChatLink","encPub","requestId","createChatLink","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","close","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","getActivity","status","isActive","undelivered","querySelectorAll","getAttribute","lastActive","c","unseen","indicator","msgEl","parentElement","msgClass","msgContent","seenIndicator","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","state","timerUpdate","pubKey","activityDate","getTime","isOnline","enc","removeGroupChatLink","removePrivateChatLink","deleteChannel","deleteGroup","Map","publicKey","set","LOCALFORAGE_NULL","notInLocalForage","Set","localForage","config","driver","LOCALSTORAGE","INDEXEDDB","WEBSQL","Node","loaded","loadLocalForage","removeItem","has","newResult","all","on_subscriptions","map_subscriptions","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","lastIndexOf","counter","child","local","blockedUsers","isBlocked","_v","cache","callbacks","groupName","path","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","reduce","sum","_cached_map","cached","cacheKey","myEvent","x","item","cb","_cached_on","_cached_count","count","pop","_cached_fn","fn","callbackId","myCallbacks","NOTIFICATION_SERVICE_URL","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","privateState","notificationSetting","getMyName","shouldDesktopNotify","shouldAudioNotify","title","participantProfiles","desktopNotification","icon","silent","onclick","changeUnseenNotificationCount","changeChatUnseenMsgsCount","change","chat","chatNode","publicVapidKey","urlBase64ToUint8Array","base64String","padding","repeat","base64","rawData","outputArray","Uint8Array","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","error","subscribeToWebPush","serviceWorker","ready","getRegistration","active","postMessage","getSubscription","sub","addWebPushSubscriptionsToChats","channelIds","removeSubscription","saveToGun","myKey","getWebPushSubscriptions","getEpub","getNotificationText","notification","profile","action","eventText","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","target","sendIrisNotification","recipient","sendWebPushNotification","shouldWebPush","subscriptions","payload","endpoint","fetch","method","headers","changeChatUnseenCount","electron","file","multicast","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","shift","includeScore","includeMatches","threshold","Fuse","leading","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","l","autofollow","logOut","unsubscribe","clear","localforage","href","r1","indexedDB","deleteDatabase","r2","r1done","r2done","onerror","onsuccess","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","d","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","matches","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","reject","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","privKeyFile","existsSync","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","sign","sig","verify","errorMsg","ValidationError","SignedMessage","signedData","_validate","_getArray","authorOrRecipient","j","elementValue","_getIterable","Symbol","iterator","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","signerKeyHash","attr","timestamp","isNaN","rating","maxRating","minRating","isPositive","isNegative","isNeutral","create","signingKey","m","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","serialize","deserialize","setReaction","reaction","rootContact","staticState"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"iris.umd.development.js","sources":["../node_modules/gun/gun.js","../node_modules/gun/sea.js","../src/lodash.ts","../src/util.ts","../node_modules/gun/lib/yson.js","../node_modules/gun/lib/radix.js","../node_modules/gun/lib/radisk.js","../node_modules/gun/lib/store.js","../node_modules/gun/lib/rindexed.js","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../node_modules/localforage/dist/localforage.js","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../node_modules/fuse.js/dist/fuse.esm.js","../src/electron.ts","../src/session.ts","../src/static.ts","../src/Key.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":[";(function(){\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n\t;USE(function(module){\n\t\t// Shim for generic javascript utilities.\n\t\tString.random = function(l, c){\n\t\t\tvar s = '';\n\t\t\tl = l || 24; // you are not going to make a 0 length random number, so no need to check type\n\t\t\tc = c || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz';\n\t\t\twhile(l-- > 0){ s += c.charAt(Math.floor(Math.random() * c.length)) }\n\t\t\treturn s;\n\t\t}\n\t\tString.match = function(t, o){ var tmp, u;\n\t\t\tif('string' !== typeof t){ return false }\n\t\t\tif('string' == typeof o){ o = {'=': o} }\n\t\t\to = o || {};\n\t\t\ttmp = (o['='] || o['*'] || o['>'] || o['<']);\n\t\t\tif(t === tmp){ return true }\n\t\t\tif(u !== o['=']){ return false }\n\t\t\ttmp = (o['*'] || o['>']);\n\t\t\tif(t.slice(0, (tmp||'').length) === tmp){ return true }\n\t\t\tif(u !== o['*']){ return false }\n\t\t\tif(u !== o['>'] && u !== o['<']){\n\t\t\t\treturn (t >= o['>'] && t <= o['<'])? true : false;\n\t\t\t}\n\t\t\tif(u !== o['>'] && t >= o['>']){ return true }\n\t\t\tif(u !== o['<'] && t <= o['<']){ return true }\n\t\t\treturn false;\n\t\t}\n\t\tString.hash = function(s, c){ // via SO\n\t\t\tif(typeof s !== 'string'){ return }\n\t c = c || 0; // CPU schedule hashing by\n\t if(!s.length){ return c }\n\t for(var i=0,l=s.length,n; i= (check.now() - l)) && c++ < 3333){ f(); return }\n\t\t\t\tsI(function(){ l = check.now(); f() },c=0)\n\t\t\t}\n\t\t}());\n\t\t;(function(){ // Too many polls block, this \"threads\" them in turns over a single thread in time.\n\t\t\tvar sT = setTimeout, t = sT.turn = sT.turn || function(f){ 1 == s.push(f) && p(T) }\n\t\t\t, s = t.s = [], p = sT.poll, i = 0, f, T = function(){\n\t\t\t\tif(f = s[i++]){ f() }\n\t\t\t\tif(i == s.length || 99 == i){\n\t\t\t\t\ts = t.s = s.slice(i);\n\t\t\t\t\ti = 0;\n\t\t\t\t}\n\t\t\t\tif(s.length){ p(T) }\n\t\t\t}\n\t\t}());\n\t\t;(function(){\n\t\t\tvar u, sT = setTimeout, T = sT.turn;\n\t\t\t(sT.each = sT.each || function(l,f,e,S){ S = S || 9; (function t(s,L,r){\n\t\t\t if(L = (s = (l||[]).splice(0,S)).length){\n\t\t\t \tfor(var i = 0; i < L; i++){\n\t\t\t \t\tif(u !== (r = f(s[i]))){ break }\n\t\t\t \t}\n\t\t\t \tif(u === r){ T(t); return }\n\t\t\t } e && e(r);\n\t\t\t}())})();\n\t\t}());\n\t})(USE, './shim');\n\n\t;USE(function(module){\n\t\t// On event emitter generic javascript utility.\n\t\tmodule.exports = function onto(tag, arg, as){\n\t\t\tif(!tag){ return {to: onto} }\n\t\t\tvar u, f = 'function' == typeof arg, tag = (this.tag || (this.tag = {}))[tag] || f && (\n\t\t\t\tthis.tag[tag] = {tag: tag, to: onto._ = { next: function(arg){ var tmp;\n\t\t\t\t\tif(tmp = this.to){ tmp.next(arg) }\n\t\t\t}}});\n\t\t\tif(f){\n\t\t\t\tvar be = {\n\t\t\t\t\toff: onto.off ||\n\t\t\t\t\t(onto.off = function(){\n\t\t\t\t\t\tif(this.next === onto._.next){ return !0 }\n\t\t\t\t\t\tif(this === this.the.last){\n\t\t\t\t\t\t\tthis.the.last = this.back;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.to.back = this.back;\n\t\t\t\t\t\tthis.next = onto._.next;\n\t\t\t\t\t\tthis.back.to = this.to;\n\t\t\t\t\t\tif(this.the.last === this.the){\n\t\t\t\t\t\t\tdelete this.on.tag[this.the.tag];\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tto: onto._,\n\t\t\t\t\tnext: arg,\n\t\t\t\t\tthe: tag,\n\t\t\t\t\ton: this,\n\t\t\t\t\tas: as,\n\t\t\t\t};\n\t\t\t\t(be.back = tag.last || tag).to = be;\n\t\t\t\treturn tag.last = be;\n\t\t\t}\n\t\t\tif((tag = tag.to) && u !== arg){ tag.next(arg) }\n\t\t\treturn tag;\n\t\t};\n\t})(USE, './onto');\n\n\t;USE(function(module){\n\t\t// Valid values are a subset of JSON: null, binary, number (!Infinity), text,\n\t\t// or a soul relation. Arrays need special algorithms to handle concurrency,\n\t\t// so they are not supported directly. Use an extension that supports them if\n\t\t// needed but research their problems first.\n\t\tmodule.exports = function (v) {\n\t\t // \"deletes\", nulling out keys.\n\t\t return v === null ||\n\t\t\t\"string\" === typeof v ||\n\t\t\t\"boolean\" === typeof v ||\n\t\t\t// we want +/- Infinity to be, but JSON does not support it, sad face.\n\t\t\t// can you guess what v === v checks for? ;)\n\t\t\t(\"number\" === typeof v && v != Infinity && v != -Infinity && v === v) ||\n\t\t\t(!!v && \"string\" == typeof v[\"#\"] && Object.keys(v).length === 1 && v[\"#\"]);\n\t\t}\n\t})(USE, './valid');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\t\tfunction State(){\n\t\t\tvar t = +new Date;\n\t\t\tif(last < t){\n\t\t\t\treturn N = 0, last = t + State.drift;\n\t\t\t}\n\t\t\treturn last = t + ((N += 1) / D) + State.drift;\n\t\t}\n\t\tState.drift = 0;\n\t\tvar NI = -Infinity, N = 0, D = 999, last = NI, u; // WARNING! In the future, on machines that are D times faster than 2016AD machines, you will want to increase D by another several orders of magnitude so the processing speed never out paces the decimal resolution (increasing an integer effects the state accuracy).\n\t\tState.is = function(n, k, o){ // convenience function to get the state on a key on a node and return it.\n\t\t\tvar tmp = (k && n && n._ && n._['>']) || o;\n\t\t\tif(!tmp){ return }\n\t\t\treturn ('number' == typeof (tmp = tmp[k]))? tmp : NI;\n\t\t}\n\t\tState.ify = function(n, k, s, v, soul){ // put a key's state on a node.\n\t\t\t(n = n || {})._ = n._ || {}; // safety check or init.\n\t\t\tif(soul){ n._['#'] = soul } // set a soul if specified.\n\t\t\tvar tmp = n._['>'] || (n._['>'] = {}); // grab the states data.\n\t\t\tif(u !== k && k !== '_'){\n\t\t\t\tif('number' == typeof s){ tmp[k] = s } // add the valid state.\n\t\t\t\tif(u !== v){ n[k] = v } // Note: Not its job to check for valid values!\n\t\t\t}\n\t\t\treturn n;\n\t\t}\n\t\tmodule.exports = State;\n\t})(USE, './state');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\t\tfunction Dup(opt){\n\t\t\tvar dup = {s:{}}, s = dup.s;\n\t\t\topt = opt || {max: 999, age: 1000 * 9};//*/ 1000 * 9 * 3};\n\t\t\tdup.check = function(id){\n\t\t\t\tif(!s[id]){ return false }\n\t\t\t\treturn dt(id);\n\t\t\t}\n\t\t\tvar dt = dup.track = function(id){\n\t\t\t\tvar it = s[id] || (s[id] = {});\n\t\t\t\tit.was = dup.now = +new Date;\n\t\t\t\tif(!dup.to){ dup.to = setTimeout(dup.drop, opt.age + 9) }\n\t\t\t\tif(dt.ed){ dt.ed(id) }\n\t\t\t\treturn it;\n\t\t\t}\n\t\t\tdup.drop = function(age){\n\t\t\t\tdup.to = null;\n\t\t\t\tdup.now = +new Date;\n\t\t\t\tvar l = Object.keys(s);\n\t\t\t\tconsole.STAT && console.STAT(dup.now, +new Date - dup.now, 'dup drop keys'); // prev ~20% CPU 7% RAM 300MB // now ~25% CPU 7% RAM 500MB\n\t\t\t\tsetTimeout.each(l, function(id){ var it = s[id]; // TODO: .keys( is slow?\n\t\t\t\t\tif(it && (age || opt.age) > (dup.now - it.was)){ return }\n\t\t\t\t\tdelete s[id];\n\t\t\t\t},0,99);\n\t\t\t}\n\t\t\treturn dup;\n\t\t}\n\t\tmodule.exports = Dup;\n\t})(USE, './dup');\n\n\t;USE(function(module){\n\t\t// request / response module, for asking and acking messages.\n\t\tUSE('./onto'); // depends upon onto!\n\t\tmodule.exports = function ask(cb, as){\n\t\t\tif(!this.on){ return }\n\t\t\tvar lack = (this.opt||{}).lack || 9000;\n\t\t\tif(!('function' == typeof cb)){\n\t\t\t\tif(!cb){ return }\n\t\t\t\tvar id = cb['#'] || cb, tmp = (this.tag||'')[id];\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tif(as){\n\t\t\t\t\ttmp = this.on(id, as);\n\t\t\t\t\tclearTimeout(tmp.err);\n\t\t\t\t\ttmp.err = setTimeout(function(){ tmp.off() }, lack);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar id = (as && as['#']) || random(9);\n\t\t\tif(!cb){ return id }\n\t\t\tvar to = this.on(id, cb, as);\n\t\t\tto.err = to.err || setTimeout(function(){ to.off();\n\t\t\t\tto.next({err: \"Error: No ACK yet.\", lack: true});\n\t\t\t}, lack);\n\t\t\treturn id;\n\t\t}\n\t\tvar random = String.random || function(){ return Math.random().toString(36).slice(2) }\n\t})(USE, './ask');\n\n\t;USE(function(module){\n\n\t\tfunction Gun(o){\n\t\t\tif(o instanceof Gun){ return (this._ = {$: this}).$ }\n\t\t\tif(!(this instanceof Gun)){ return new Gun(o) }\n\t\t\treturn Gun.create(this._ = {$: this, opt: o});\n\t\t}\n\n\t\tGun.is = function($){ return ($ instanceof Gun) || ($ && $._ && ($ === $._.$)) || false }\n\n\t\tGun.version = 0.2020;\n\n\t\tGun.chain = Gun.prototype;\n\t\tGun.chain.toJSON = function(){};\n\n\t\tUSE('./shim');\n\t\tGun.valid = USE('./valid');\n\t\tGun.state = USE('./state');\n\t\tGun.on = USE('./onto');\n\t\tGun.dup = USE('./dup');\n\t\tGun.ask = USE('./ask');\n\n\t\t;(function(){\n\t\t\tGun.create = function(at){\n\t\t\t\tat.root = at.root || at;\n\t\t\t\tat.graph = at.graph || {};\n\t\t\t\tat.on = at.on || Gun.on;\n\t\t\t\tat.ask = at.ask || Gun.ask;\n\t\t\t\tat.dup = at.dup || Gun.dup();\n\t\t\t\tvar gun = at.$.opt(at.opt);\n\t\t\t\tif(!at.once){\n\t\t\t\t\tat.on('in', universe, at);\n\t\t\t\t\tat.on('out', universe, at);\n\t\t\t\t\tat.on('put', map, at);\n\t\t\t\t\tGun.on('create', at);\n\t\t\t\t\tat.on('create', at);\n\t\t\t\t}\n\t\t\t\tat.once = 1;\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tfunction universe(msg){\n\t\t\t\t// TODO: BUG! msg.out = null being set!\n\t\t\t\t//if(!F){ var eve = this; setTimeout(function(){ universe.call(eve, msg,1) },Math.random() * 100);return; } // ADD F TO PARAMS!\n\t\t\t\tif(!msg){ return }\n\t\t\t\tif(msg.out === universe){ this.to.next(msg); return }\n\t\t\t\tvar eve = this, as = eve.as, at = as.at || as, gun = at.$, dup = at.dup, tmp, DBG = msg.DBG;\n\t\t\t\t(tmp = msg['#']) || (tmp = msg['#'] = text_rand(9));\n\t\t\t\tif(dup.check(tmp)){ return } dup.track(tmp);\n\t\t\t\ttmp = msg._; msg._ = ('function' == typeof tmp)? tmp : function(){};\n\t\t\t\t(msg.$ && (msg.$ === (msg.$._||'').$)) || (msg.$ = gun);\n\t\t\t\tif(msg['@'] && !msg.put){ ack(msg) }\n\t\t\t\tif(!at.ask(msg['@'], msg)){ // is this machine listening for an ack?\n\t\t\t\t\tDBG && (DBG.u = +new Date);\n\t\t\t\t\tif(msg.put){ put(msg); return } else\n\t\t\t\t\tif(msg.get){ Gun.on.get(msg, gun) }\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.uc = +new Date);\n\t\t\t\teve.to.next(msg);\n\t\t\t\tDBG && (DBG.ua = +new Date);\n\t\t\t\tif(msg.nts || msg.NTS){ return } // TODO: This shouldn't be in core, but fast way to prevent NTS spread. Delete this line after all peers have upgraded to newer versions.\n\t\t\t\tmsg.out = universe; at.on('out', msg);\n\t\t\t\tDBG && (DBG.ue = +new Date);\n\t\t\t}\n\t\t\tfunction put(msg){\n\t\t\t\tif(!msg){ return }\n\t\t\t\tvar ctx = msg._||'', root = ctx.root = ((ctx.$ = msg.$||'')._||'').root;\n\t\t\t\tif(msg['@'] && ctx.faith && !ctx.miss){ // TODO: AXE may split/route based on 'put' what should we do here? Detect @ in AXE? I think we don't have to worry, as DAM will route it on @.\n\t\t\t\t\tmsg.out = universe;\n\t\t\t\t\troot.on('out', msg);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.latch = root.hatch; ctx.match = root.hatch = [];\n\t\t\t\tvar put = msg.put;\n\t\t\t\tvar DBG = ctx.DBG = msg.DBG, S = +new Date; CT = CT || S;\n\t\t\t\tif(put['#'] && put['.']){ /*root && root.on('put', msg);*/ return } // TODO: BUG! This needs to call HAM instead.\n\t\t\t\tDBG && (DBG.p = S);\n\t\t\t\tctx['#'] = msg['#'];\n\t\t\t\tctx.msg = msg;\n\t\t\t\tctx.all = 0;\n\t\t\t\tctx.stun = 1;\n\t\t\t\tvar nl = Object.keys(put);//.sort(); // TODO: This is unbounded operation, large graphs will be slower. Write our own CPU scheduled sort? Or somehow do it in below? Keys itself is not O(1) either, create ES5 shim over ?weak map? or custom which is constant.\n\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).pk = +new Date) - S, 'put sort');\n\t\t\t\tvar ni = 0, nj, kl, soul, node, states, err, tmp;\n\t\t\t\t(function pop(o){\n\t\t\t\t\tif(nj != ni){ nj = ni;\n\t\t\t\t\t\tif(!(soul = nl[ni])){\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).pd = +new Date) - S, 'put');\n\t\t\t\t\t\t\tfire(ctx);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!(node = put[soul])){ err = ERR+cut(soul)+\"no node.\" } else\n\t\t\t\t\t\tif(!(tmp = node._)){ err = ERR+cut(soul)+\"no meta.\" } else\n\t\t\t\t\t\tif(soul !== tmp['#']){ err = ERR+cut(soul)+\"soul not same.\" } else\n\t\t\t\t\t\tif(!(states = tmp['>'])){ err = ERR+cut(soul)+\"no state.\" }\n\t\t\t\t\t\tkl = Object.keys(node||{}); // TODO: .keys( is slow\n\t\t\t\t\t}\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tmsg.err = ctx.err = err; // invalid data should error and stun the message.\n\t\t\t\t\t\tfire(ctx);\n\t\t\t\t\t\t//console.log(\"handle error!\", err) // handle!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar i = 0, key; o = o || 0;\n\t\t\t\t\twhile(o++ < 9 && (key = kl[i++])){\n\t\t\t\t\t\tif('_' === key){ continue }\n\t\t\t\t\t\tvar val = node[key], state = states[key];\n\t\t\t\t\t\tif(u === state){ err = ERR+cut(key)+\"on\"+cut(soul)+\"no state.\"; break }\n\t\t\t\t\t\tif(!valid(val)){ err = ERR+cut(key)+\"on\"+cut(soul)+\"bad \"+(typeof val)+cut(val); break }\n\t\t\t\t\t\t//ctx.all++; //ctx.ack[soul+key] = '';\n\t\t\t\t\t\tham(val, key, soul, state, msg);\n\t\t\t\t\t\t++C; // courtesy count;\n\t\t\t\t\t}\n\t\t\t\t\tif((kl = kl.slice(i)).length){ turn(pop); return }\n\t\t\t\t\t++ni; kl = null; pop(o);\n\t\t\t\t}());\n\t\t\t} Gun.on.put = put;\n\t\t\t// TODO: MARK!!! clock below, reconnect sync, SEA certify wire merge, User.auth taking multiple times, // msg put, put, say ack, hear loop...\n\t\t\t// WASIS BUG! local peer not ack. .off other people: .open\n\t\t\tfunction ham(val, key, soul, state, msg){\n\t\t\t\tvar ctx = msg._||'', root = ctx.root, graph = root.graph, lot, tmp;\n\t\t\t\tvar vertex = graph[soul] || empty, was = state_is(vertex, key, 1), known = vertex[key];\n\t\t\t\t\n\t\t\t\tvar DBG = ctx.DBG; if(tmp = console.STAT){ if(!graph[soul] || !known){ tmp.has = (tmp.has || 0) + 1 } }\n\n\t\t\t\tvar now = State(), u;\n\t\t\t\tif(state > now){\n\t\t\t\t\tsetTimeout(function(){ ham(val, key, soul, state, msg) }, (tmp = state - now) > MD? MD : tmp); // Max Defer 32bit. :(\n\t\t\t\t\tconsole.STAT && console.STAT(((DBG||ctx).Hf = +new Date), tmp, 'future');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(state < was){ /*old;*/ if(true || !ctx.miss){ return } } // but some chains have a cache miss that need to re-fire. // TODO: Improve in future. // for AXE this would reduce rebroadcast, but GUN does it on message forwarding. // TURNS OUT CACHE MISS WAS NOT NEEDED FOR NEW CHAINS ANYMORE!!! DANGER DANGER DANGER, ALWAYS RETURN! (or am I missing something?)\n\t\t\t\tif(!ctx.faith){ // TODO: BUG? Can this be used for cache miss as well? // Yes this was a bug, need to check cache miss for RAD tests, but should we care about the faith check now? Probably not.\n\t\t\t\t\tif(state === was && (val === known || L(val) <= L(known))){ /*console.log(\"same\");*/ /*same;*/ if(!ctx.miss){ return } } // same\n\t\t\t\t}\n\t\t\t\tctx.stun++; // TODO: 'forget' feature in SEA tied to this, bad approach, but hacked in for now. Any changes here must update there.\n\t\t\t\tvar aid = msg['#']+ctx.all++, id = {toString: function(){ return aid }, _: ctx}; id.toJSON = id.toString; // this *trick* makes it compatible between old & new versions.\n\t\t\t\troot.dup.track(id)['#'] = msg['#']; // fixes new OK acks for RPC like RTC.\n\t\t\t\tDBG && (DBG.ph = DBG.ph || +new Date);\n\t\t\t\troot.on('put', {'#': id, '@': msg['@'], put: {'#': soul, '.': key, ':': val, '>': state}, ok: msg.ok, _: ctx});\n\t\t\t}\n\t\t\tfunction map(msg){\n\t\t\t\tvar DBG; if(DBG = (msg._||'').DBG){ DBG.pa = +new Date; DBG.pm = DBG.pm || +new Date}\n \tvar eve = this, root = eve.as, graph = root.graph, ctx = msg._, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n \tif((tmp = ctx.msg) && (tmp = tmp.put) && (tmp = tmp[soul])){ state_ify(tmp, key, state, val, soul) } // necessary! or else out messages do not get SEA transforms.\n \t//var bytes = ((graph[soul]||'')[key]||'').length||1;\n\t\t\t\tgraph[soul] = state_ify(graph[soul], key, state, val, soul);\n\t\t\t\tif(tmp = (root.next||'')[soul]){\n\t\t\t\t\t//tmp.bytes = (tmp.bytes||0) + ((val||'').length||1) - bytes;\n\t\t\t\t\t//if(tmp.bytes > 2**13){ Gun.log.once('byte-limit', \"Note: In the future, GUN peers will enforce a ~4KB query limit. Please see https://gun.eco/docs/Page\") }\n\t\t\t\t\ttmp.on('in', msg)\n\t\t\t\t}\n\t\t\t\tfire(ctx);\n\t\t\t\teve.to.next(msg);\n\t\t\t}\n\t\t\tfunction fire(ctx, msg){ var root;\n\t\t\t\tif(ctx.stop){ return }\n\t\t\t\tif(!ctx.err && 0 < --ctx.stun){ return } // TODO: 'forget' feature in SEA tied to this, bad approach, but hacked in for now. Any changes here must update there.\n\t\t\t\tctx.stop = 1;\n\t\t\t\tif(!(root = ctx.root)){ return }\n\t\t\t\tvar tmp = ctx.match; tmp.end = 1;\n\t\t\t\tif(tmp === root.hatch){ if(!(tmp = ctx.latch) || tmp.end){ delete root.hatch } else { root.hatch = tmp } }\n\t\t\t\tctx.hatch && ctx.hatch(); // TODO: rename/rework how put & this interact.\n\t\t\t\tsetTimeout.each(ctx.match, function(cb){cb && cb()}); \n\t\t\t\tif(!(msg = ctx.msg) || ctx.err || msg.err){ return }\n\t\t\t\tmsg.out = universe;\n\t\t\t\tctx.root.on('out', msg);\n\n\t\t\t\tCF(); // courtesy check;\n\t\t\t}\n\t\t\tfunction ack(msg){ // aggregate ACKs.\n\t\t\t\tvar id = msg['@'] || '', ctx, ok, tmp;\n\t\t\t\tif(!(ctx = id._)){\n\t\t\t\t\tvar dup = (dup = msg.$) && (dup = dup._) && (dup = dup.root) && (dup = dup.dup);\n\t\t\t\t\tif(!(dup = dup.check(id))){ return }\n\t\t\t\t\tmsg['@'] = dup['#'] || msg['@']; // This doesn't do anything anymore, backtrack it to something else?\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.acks = (ctx.acks||0) + 1;\n\t\t\t\tif(ctx.err = msg.err){\n\t\t\t\t\tmsg['@'] = ctx['#'];\n\t\t\t\t\tfire(ctx); // TODO: BUG? How it skips/stops propagation of msg if any 1 item is error, this would assume a whole batch/resync has same malicious intent.\n\t\t\t\t}\n\t\t\t\tctx.ok = msg.ok || ctx.ok;\n\t\t\t\tif(!ctx.stop && !ctx.crack){ ctx.crack = ctx.match && ctx.match.push(function(){back(ctx)}) } // handle synchronous acks. NOTE: If a storage peer ACKs synchronously then the PUT loop has not even counted up how many items need to be processed, so ctx.STOP flags this and adds only 1 callback to the end of the PUT loop.\n\t\t\t\tback(ctx);\n\t\t\t}\n\t\t\tfunction back(ctx){\n\t\t\t\tif(!ctx || !ctx.root){ return }\n\t\t\t\tif(ctx.stun || ctx.acks !== ctx.all){ return }\n\t\t\t\tctx.root.on('in', {'@': ctx['#'], err: ctx.err, ok: ctx.err? u : ctx.ok || {'':1}});\n\t\t\t}\n\n\t\t\tvar ERR = \"Error: Invalid graph!\";\n\t\t\tvar cut = function(s){ return \" '\"+(''+s).slice(0,9)+\"...' \" }\n\t\t\tvar L = JSON.stringify, MD = 2147483647, State = Gun.state;\n\t\t\tvar C = 0, CT, CF = function(){if(C>999 && (C/-(CT - (CT = +new Date))>1)){Gun.window && console.log(\"Warning: You're syncing 1K+ records a second, faster than DOM can update - consider limiting query.\");CF=function(){C=0}}};\n\n\t\t}());\n\n\t\t;(function(){\n\t\t\tGun.on.get = function(msg, gun){\n\t\t\t\tvar root = gun._, get = msg.get, soul = get['#'], node = root.graph[soul], has = get['.'];\n\t\t\t\tvar next = root.next || (root.next = {}), at = next[soul];\n\n\t\t\t\t// TODO: Azarattum bug, what is in graph is not same as what is in next. Fix!\n\n\t\t\t\t// queue concurrent GETs?\n\t\t\t\t// TODO: consider tagging original message into dup for DAM.\n\t\t\t\t// TODO: ^ above? In chat app, 12 messages resulted in same peer asking for `#user.pub` 12 times. (same with #user GET too, yipes!) // DAM note: This also resulted in 12 replies from 1 peer which all had same ##hash but none of them deduped because each get was different.\n\t\t\t\t// TODO: Moving quick hacks fixing these things to axe for now.\n\t\t\t\t// TODO: a lot of GET #foo then GET #foo.\"\" happening, why?\n\t\t\t\t// TODO: DAM's ## hash check, on same get ACK, producing multiple replies still, maybe JSON vs YSON?\n\t\t\t\t// TMP note for now: viMZq1slG was chat LEX query #.\n\t\t\t\t/*if(gun !== (tmp = msg.$) && (tmp = (tmp||'')._)){\n\t\t\t\t\tif(tmp.Q){ tmp.Q[msg['#']] = ''; return } // chain does not need to ask for it again.\n\t\t\t\t\ttmp.Q = {};\n\t\t\t\t}*/\n\t\t\t\t/*if(u === has){\n\t\t\t\t\tif(at.Q){\n\t\t\t\t\t\t//at.Q[msg['#']] = '';\n\t\t\t\t\t\t//return;\n\t\t\t\t\t}\n\t\t\t\t\tat.Q = {};\n\t\t\t\t}*/\n\t\t\t\tvar ctx = msg._||{}, DBG = ctx.DBG = msg.DBG;\n\t\t\t\tDBG && (DBG.g = +new Date);\n\t\t\t\t//console.log(\"GET:\", get, node, has);\n\t\t\t\tif(!node){ return root.on('get', msg) }\n\t\t\t\tif(has){\n\t\t\t\t\tif('string' != typeof has || u === node[has]){\n\t\t\t\t\t\tif(!((at||'').next||'')[has]){ root.on('get', msg); return }\n\t\t\t\t\t}\n\t\t\t\t\tnode = state_ify({}, has, state_is(node, has), node[has], soul);\n\t\t\t\t\t// If we have a key in-memory, do we really need to fetch?\n\t\t\t\t\t// Maybe... in case the in-memory key we have is a local write\n\t\t\t\t\t// we still need to trigger a pull/merge from peers.\n\t\t\t\t}\n\t\t\t\t//Gun.window? Gun.obj.copy(node) : node; // HNPERF: If !browser bump Performance? Is this too dangerous to reference root graph? Copy / shallow copy too expensive for big nodes. Gun.obj.to(node); // 1 layer deep copy // Gun.obj.copy(node); // too slow on big nodes\n\t\t\t\tnode && ack(msg, node);\n\t\t\t\troot.on('get', msg); // send GET to storage adapters.\n\t\t\t}\n\t\t\tfunction ack(msg, node){\n\t\t\t\tvar S = +new Date, ctx = msg._||{}, DBG = ctx.DBG = msg.DBG;\n\t\t\t\tvar to = msg['#'], id = text_rand(9), keys = Object.keys(node||'').sort(), soul = ((node||'')._||'')['#'], kl = keys.length, j = 0, root = msg.$._.root, F = (node === root.graph[soul]);\n\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).gk = +new Date) - S, 'got keys');\n\t\t\t\t// PERF: Consider commenting this out to force disk-only reads for perf testing? // TODO: .keys( is slow\n\t\t\t\tnode && (function go(){\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tvar i = 0, k, put = {}, tmp;\n\t\t\t\t\twhile(i < 9 && (k = keys[i++])){\n\t\t\t\t\t\tstate_ify(put, k, state_is(node, k), node[k], soul);\n\t\t\t\t\t}\n\t\t\t\t\tkeys = keys.slice(i);\n\t\t\t\t\t(tmp = {})[soul] = put; put = tmp;\n\t\t\t\t\tvar faith; if(F){ faith = function(){}; faith.ram = faith.faith = true; } // HNPERF: We're testing performance improvement by skipping going through security again, but this should be audited.\n\t\t\t\t\ttmp = keys.length;\n\t\t\t\t\tconsole.STAT && console.STAT(S, -(S - (S = +new Date)), 'got copied some');\n\t\t\t\t\tDBG && (DBG.ga = +new Date);\n\t\t\t\t\troot.on('in', {'@': to, '#': id, put: put, '%': (tmp? (id = text_rand(9)) : u), $: root.$, _: faith, DBG: DBG, FOO: 1});\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'got in');\n\t\t\t\t\tif(!tmp){ return }\n\t\t\t\t\tsetTimeout.turn(go);\n\t\t\t\t}());\n\t\t\t\tif(!node){ root.on('in', {'@': msg['#']}) } // TODO: I don't think I like this, the default lS adapter uses this but \"not found\" is a sensitive issue, so should probably be handled more carefully/individually.\n\t\t\t} Gun.on.get.ack = ack;\n\t\t}());\n\n\t\t;(function(){\n\t\t\tGun.chain.opt = function(opt){\n\t\t\t\topt = opt || {};\n\t\t\t\tvar gun = this, at = gun._, tmp = opt.peers || opt;\n\t\t\t\tif(!Object.plain(opt)){ opt = {} }\n\t\t\t\tif(!Object.plain(at.opt)){ at.opt = opt }\n\t\t\t\tif('string' == typeof tmp){ tmp = [tmp] }\n\t\t\t\tif(!Object.plain(at.opt.peers)){ at.opt.peers = {}}\n\t\t\t\tif(tmp instanceof Array){\n\t\t\t\t\topt.peers = {};\n\t\t\t\t\ttmp.forEach(function(url){\n\t\t\t\t\t\tvar p = {}; p.id = p.url = url;\n\t\t\t\t\t\topt.peers[url] = at.opt.peers[url] = at.opt.peers[url] || p;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tobj_each(opt, function each(k){ var v = this[k];\n\t\t\t\t\tif((this && this.hasOwnProperty(k)) || 'string' == typeof v || Object.empty(v)){ this[k] = v; return }\n\t\t\t\t\tif(v && v.constructor !== Object && !(v instanceof Array)){ return }\n\t\t\t\t\tobj_each(v, each);\n\t\t\t\t});\n\t\t\t\tat.opt.from = opt;\n\t\t\t\tGun.on('opt', at);\n\t\t\t\tat.opt.uuid = at.opt.uuid || function uuid(l){ return Gun.state().toString(36).replace('.','') + String.random(l||12) }\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t}());\n\n\t\tvar obj_each = function(o,f){ Object.keys(o).forEach(f,o) }, text_rand = String.random, turn = setTimeout.turn, valid = Gun.valid, state_is = Gun.state.is, state_ify = Gun.state.ify, u, empty = {}, C;\n\n\t\tGun.log = function(){ return (!Gun.log.off && C.log.apply(C, arguments)), [].slice.call(arguments).join(' ') };\n\t\tGun.log.once = function(w,s,o){ return (o = Gun.log.once)[w] = o[w] || 0, o[w]++ || Gun.log(s) };\n\n\t\tif(typeof window !== \"undefined\"){ (window.GUN = window.Gun = Gun).window = window }\n\t\ttry{ if(typeof MODULE !== \"undefined\"){ MODULE.exports = Gun } }catch(e){}\n\t\tmodule.exports = Gun;\n\t\t\n\t\t(Gun.window||{}).console = (Gun.window||{}).console || {log: function(){}};\n\t\t(C = console).only = function(i, s){ return (C.only.i && i === C.only.i && C.only.i++) && (C.log.apply(C, arguments) || s) };\n\n\t\t;\"Please do not remove welcome log unless you are paying for a monthly sponsorship, thanks!\";\n\t\tGun.log.once(\"welcome\", \"Hello wonderful person! :) Thanks for using GUN, please ask for help on http://chat.gun.eco if anything takes you longer than 5min to figure out!\");\n\t})(USE, './root');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.back = function(n, opt){ var tmp;\n\t\t\tn = n || 1;\n\t\t\tif(-1 === n || Infinity === n){\n\t\t\t\treturn this._.root.$;\n\t\t\t} else\n\t\t\tif(1 === n){\n\t\t\t\treturn (this._.back || this._).$;\n\t\t\t}\n\t\t\tvar gun = this, at = gun._;\n\t\t\tif(typeof n === 'string'){\n\t\t\t\tn = n.split('.');\n\t\t\t}\n\t\t\tif(n instanceof Array){\n\t\t\t\tvar i = 0, l = n.length, tmp = at;\n\t\t\t\tfor(i; i < l; i++){\n\t\t\t\t\ttmp = (tmp||empty)[n[i]];\n\t\t\t\t}\n\t\t\t\tif(u !== tmp){\n\t\t\t\t\treturn opt? gun : tmp;\n\t\t\t\t} else\n\t\t\t\tif((tmp = at.back)){\n\t\t\t\t\treturn tmp.$.back(n, opt);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif('function' == typeof n){\n\t\t\t\tvar yes, tmp = {back: at};\n\t\t\t\twhile((tmp = tmp.back)\n\t\t\t\t&& u === (yes = n(tmp, opt))){}\n\t\t\t\treturn yes;\n\t\t\t}\n\t\t\tif('number' == typeof n){\n\t\t\t\treturn (at.back || at).$.back(n - 1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tvar empty = {}, u;\n\t})(USE, './back');\n\n\t;USE(function(module){\n\t\t// WARNING: GUN is very simple, but the JavaScript chaining API around GUN\n\t\t// is complicated and was extremely hard to build. If you port GUN to another\n\t\t// language, consider implementing an easier API to build.\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.chain = function(sub){\n\t\t\tvar gun = this, at = gun._, chain = new (sub || gun).constructor(gun), cat = chain._, root;\n\t\t\tcat.root = root = at.root;\n\t\t\tcat.id = ++root.once;\n\t\t\tcat.back = gun._;\n\t\t\tcat.on = Gun.on;\n\t\t\tcat.on('in', Gun.on.in, cat); // For 'in' if I add my own listeners to each then I MUST do it before in gets called. If I listen globally for all incoming data instead though, regardless of individual listeners, I can transform the data there and then as well.\n\t\t\tcat.on('out', Gun.on.out, cat); // However for output, there isn't really the global option. I must listen by adding my own listener individually BEFORE this one is ever called.\n\t\t\treturn chain;\n\t\t}\n\n\t\tfunction output(msg){\n\t\t\tvar put, get, at = this.as, back = at.back, root = at.root, tmp;\n\t\t\tif(!msg.$){ msg.$ = at.$ }\n\t\t\tthis.to.next(msg);\n\t\t\tif(at.err){ at.on('in', {put: at.put = u, $: at.$}); return }\n\t\t\tif(get = msg.get){\n\t\t\t\t/*if(u !== at.put){\n\t\t\t\t\tat.on('in', at);\n\t\t\t\t\treturn;\n\t\t\t\t}*/\n\t\t\t\tif(root.pass){ root.pass[at.id] = at; } // will this make for buggy behavior elsewhere?\n\t\t\t\tif(at.lex){ Object.keys(at.lex).forEach(function(k){ tmp[k] = at.lex[k] }, tmp = msg.get = msg.get || {}) }\n\t\t\t\tif(get['#'] || at.soul){\n\t\t\t\t\tget['#'] = get['#'] || at.soul;\n\t\t\t\t\t//root.graph[get['#']] = root.graph[get['#']] || {_:{'#':get['#'],'>':{}}};\n\t\t\t\t\tmsg['#'] || (msg['#'] = text_rand(9)); // A3120 ?\n\t\t\t\t\tback = (root.$.get(get['#'])._);\n\t\t\t\t\tif(!(get = get['.'])){ // soul\n\t\t\t\t\t\ttmp = back.ask && back.ask['']; // check if we have already asked for the full node\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[''] = back; // add a flag that we are now.\n\t\t\t\t\t\tif(u !== back.put){ // if we already have data,\n\t\t\t\t\t\t\tback.on('in', back); // send what is cached down the chain\n\t\t\t\t\t\t\tif(tmp){ return } // and don't ask for it again.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmsg.$ = back.$;\n\t\t\t\t\t} else\n\t\t\t\t\tif(obj_has(back.put, get)){ // TODO: support #LEX !\n\t\t\t\t\t\ttmp = back.ask && back.ask[get];\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[get] = back.$.get(get)._;\n\t\t\t\t\t\tback.on('in', {get: get, put: {'#': back.soul, '.': get, ':': back.put[get], '>': state_is(root.graph[back.soul], get)}});\n\t\t\t\t\t\tif(tmp){ return }\n\t\t\t\t\t}\n\t\t\t\t\t\t/*put = (back.$.get(get)._);\n\t\t\t\t\t\tif(!(tmp = put.ack)){ put.ack = -1 }\n\t\t\t\t\t\tback.on('in', {\n\t\t\t\t\t\t\t$: back.$,\n\t\t\t\t\t\t\tput: Gun.state.ify({}, get, Gun.state(back.put, get), back.put[get]),\n\t\t\t\t\t\t\tget: back.get\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(tmp){ return }\n\t\t\t\t\t} else\n\t\t\t\t\tif('string' != typeof get){\n\t\t\t\t\t\tvar put = {}, meta = (back.put||{})._;\n\t\t\t\t\t\tGun.obj.map(back.put, function(v,k){\n\t\t\t\t\t\t\tif(!Gun.text.match(k, get)){ return }\n\t\t\t\t\t\t\tput[k] = v;\n\t\t\t\t\t\t})\n\t\t\t\t\t\tif(!Gun.obj.empty(put)){\n\t\t\t\t\t\t\tput._ = meta;\n\t\t\t\t\t\t\tback.on('in', {$: back.$, put: put, get: back.get})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp = at.lex){\n\t\t\t\t\t\t\ttmp = (tmp._) || (tmp._ = function(){});\n\t\t\t\t\t\t\tif(back.ack < tmp.ask){ tmp.ask = back.ack }\n\t\t\t\t\t\t\tif(tmp.ask){ return }\n\t\t\t\t\t\t\ttmp.ask = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t\troot.ask(ack, msg); // A3120 ?\n\t\t\t\t\treturn root.on('in', msg);\n\t\t\t\t}\n\t\t\t\t//if(root.now){ root.now[at.id] = root.now[at.id] || true; at.pass = {} }\n\t\t\t\tif(get['.']){\n\t\t\t\t\tif(at.get){\n\t\t\t\t\t\tmsg = {get: {'.': at.get}, $: at.$};\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[at.get] = msg.$._; // TODO: PERFORMANCE? More elegant way?\n\t\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t\t}\n\t\t\t\t\tmsg = {get: at.lex? msg.get : {}, $: at.$};\n\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t}\n\t\t\t\t(at.ask || (at.ask = {}))[''] = at;\t //at.ack = at.ack || -1;\n\t\t\t\tif(at.get){\n\t\t\t\t\tget['.'] = at.get;\n\t\t\t\t\t(back.ask || (back.ask = {}))[at.get] = msg.$._; // TODO: PERFORMANCE? More elegant way?\n\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn back.on('out', msg);\n\t\t}; Gun.on.out = output;\n\n\t\tfunction input(msg, cat){ cat = cat || this.as; // TODO: V8 may not be able to optimize functions with different parameter calls, so try to do benchmark to see if there is any actual difference.\n\t\t\tvar root = cat.root, gun = msg.$ || (msg.$ = cat.$), at = (gun||'')._ || empty, tmp = msg.put||'', soul = tmp['#'], key = tmp['.'], change = (u !== tmp['='])? tmp['='] : tmp[':'], state = tmp['>'] || -Infinity, sat; // eve = event, at = data at, cat = chain at, sat = sub at (children chains).\n\t\t\tif(u !== msg.put && (u === tmp['#'] || u === tmp['.'] || (u === tmp[':'] && u === tmp['=']) || u === tmp['>'])){ // convert from old format\n\t\t\t\tif(!valid(tmp)){\n\t\t\t\t\tif(!(soul = ((tmp||'')._||'')['#'])){ console.log(\"chain not yet supported for\", tmp, '...', msg, cat); return; }\n\t\t\t\t\tgun = cat.root.$.get(soul);\n\t\t\t\t\treturn setTimeout.each(Object.keys(tmp).sort(), function(k){ // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync?\n\t\t\t\t\t\tif('_' == k || u === (state = state_is(tmp, k))){ return }\n\t\t\t\t\t\tcat.on('in', {$: gun, put: {'#': soul, '.': k, '=': tmp[k], '>': state}, VIA: msg});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcat.on('in', {$: at.back.$, put: {'#': soul = at.back.soul, '.': key = at.has || at.get, '=': tmp, '>': state_is(at.back.put, key)}, via: msg}); // TODO: This could be buggy! It assumes/approxes data, other stuff could have corrupted it.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif((msg.seen||'')[cat.id]){ return } (msg.seen || (msg.seen = function(){}))[cat.id] = cat; // help stop some infinite loops\n\n\t\t\tif(cat !== at){ // don't worry about this when first understanding the code, it handles changing contexts on a message. A soul chain will never have a different context.\n\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); // make copy of message\n\t\t\t\ttmp.get = cat.get || tmp.get;\n\t\t\t\tif(!cat.soul && !cat.has){ // if we do not recognize the chain type\n\t\t\t\t\ttmp.$$$ = tmp.$$$ || cat.$; // make a reference to wherever it came from.\n\t\t\t\t} else\n\t\t\t\tif(at.soul){ // a has (property) chain will have a different context sometimes if it is linked (to a soul chain). Anything that is not a soul or has chain, will always have different contexts.\n\t\t\t\t\ttmp.$ = cat.$;\n\t\t\t\t\ttmp.$$ = tmp.$$ || at.$;\n\t\t\t\t}\n\t\t\t\tmsg = tmp; // use the message with the new context instead;\n\t\t\t}\n\t\t\tunlink(msg, cat);\n\n\t\t\tif(((cat.soul/* && (cat.ask||'')['']*/) || msg.$$) && state >= state_is(root.graph[soul], key)){ // The root has an in-memory cache of the graph, but if our peer has asked for the data then we want a per deduplicated chain copy of the data that might have local edits on it.\n\t\t\t\t(tmp = root.$.get(soul)._).put = state_ify(tmp.put, key, state, change, soul);\n\t\t\t}\n\t\t\tif(!at.soul /*&& (at.ask||'')['']*/ && state >= state_is(root.graph[soul], key) && (sat = (root.$.get(soul)._.next||'')[key])){ // Same as above here, but for other types of chains. // TODO: Improve perf by preventing echoes recaching.\n\t\t\t\tsat.put = change; // update cache\n\t\t\t\tif('string' == typeof (tmp = valid(change))){\n\t\t\t\t\tsat.put = root.$.get(tmp)._.put || change; // share same cache as what we're linked to.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.to && this.to.next(msg); // 1st API job is to call all chain listeners.\n\t\t\t// TODO: Make input more reusable by only doing these (some?) calls if we are a chain we recognize? This means each input listener would be responsible for when listeners need to be called, which makes sense, as they might want to filter.\n\t\t\tcat.any && setTimeout.each(Object.keys(cat.any), function(any){ (any = cat.any[any]) && any(msg) },0,99); // 1st API job is to call all chain listeners. // TODO: .keys( is slow // BUG: Some re-in logic may depend on this being sync.\n\t\t\tcat.echo && setTimeout.each(Object.keys(cat.echo), function(lat){ (lat = cat.echo[lat]) && lat.on('in', msg) },0,99); // & linked at chains // TODO: .keys( is slow // BUG: Some re-in logic may depend on this being sync.\n\n\t\t\tif(((msg.$$||'')._||at).soul){ // comments are linear, but this line of code is non-linear, so if I were to comment what it does, you'd have to read 42 other comments first... but you can't read any of those comments until you first read this comment. What!? // shouldn't this match link's check?\n\t\t\t\t// is there cases where it is a $$ that we do NOT want to do the following? \n\t\t\t\tif((sat = cat.next) && (sat = sat[key])){ // TODO: possible trick? Maybe have `ionmap` code set a sat? // TODO: Maybe we should do `cat.ask` instead? I guess does not matter.\n\t\t\t\t\ttmp = {}; Object.keys(msg).forEach(function(k){ tmp[k] = msg[k] });\n\t\t\t\t\ttmp.$ = (msg.$$||msg.$).get(tmp.get = key); delete tmp.$$; delete tmp.$$$;\n\t\t\t\t\tsat.on('in', tmp);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlink(msg, cat);\n\t\t}; Gun.on.in = input;\n\n\t\tfunction link(msg, cat){ cat = cat || this.as || msg.$._;\n\t\t\tif(msg.$$ && this !== Gun.on){ return } // $$ means we came from a link, so we are at the wrong level, thus ignore it unless overruled manually by being called directly.\n\t\t\tif(!msg.put || cat.soul){ return } // But you cannot overrule being linked to nothing, or trying to link a soul chain - that must never happen.\n\t\t\tvar put = msg.put||'', link = put['=']||put[':'], tmp;\n\t\t\tvar root = cat.root, tat = root.$.get(put['#']).get(put['.'])._;\n\t\t\tif('string' != typeof (link = valid(link))){\n\t\t\t\tif(this === Gun.on){ (tat.echo || (tat.echo = {}))[cat.id] = cat } // allow some chain to explicitly force linking to simple data.\n\t\t\t\treturn; // by default do not link to data that is not a link.\n\t\t\t}\n\t\t\tif((tat.echo || (tat.echo = {}))[cat.id] // we've already linked ourselves so we do not need to do it again. Except... (annoying implementation details)\n\t\t\t\t&& !(root.pass||'')[cat.id]){ return } // if a new event listener was added, we need to make a pass through for it. The pass will be on the chain, not always the chain passed down. \n\t\t\tif(tmp = root.pass){ if(tmp[link+cat.id]){ return } tmp[link+cat.id] = 1 } // But the above edge case may \"pass through\" on a circular graph causing infinite passes, so we hackily add a temporary check for that.\n\n\t\t\t(tat.echo||(tat.echo={}))[cat.id] = cat; // set ourself up for the echo! // TODO: BUG? Echo to self no longer causes problems? Confirm.\n\n\t\t\tif(cat.has){ cat.link = link }\n\t\t\tvar sat = root.$.get(tat.link = link)._; // grab what we're linking to.\n\t\t\t(sat.echo || (sat.echo = {}))[tat.id] = tat; // link it.\n\t\t\tvar tmp = cat.ask||''; // ask the chain for what needs to be loaded next!\n\t\t\tif(tmp[''] || cat.lex){ // we might need to load the whole thing // TODO: cat.lex probably has edge case bugs to it, need more test coverage.\n\t\t\t\tsat.on('out', {get: {'#': link}});\n\t\t\t}\n\t\t\tsetTimeout.each(Object.keys(tmp), function(get, sat){ // if sub chains are asking for data. // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync?\n\t\t\t\tif(!get || !(sat = tmp[get])){ return }\n\t\t\t\tsat.on('out', {get: {'#': link, '.': get}}); // go get it.\n\t\t\t},0,99);\n\t\t}; Gun.on.link = link;\n\n\t\tfunction unlink(msg, cat){ // ugh, so much code for seemingly edge case behavior.\n\t\t\tvar put = msg.put||'', change = (u !== put['='])? put['='] : put[':'], root = cat.root, link, tmp;\n\t\t\tif(u === change){ // 1st edge case: If we have a brand new database, no data will be found.\n\t\t\t\t// TODO: BUG! because emptying cache could be async from below, make sure we are not emptying a newer cache. So maybe pass an Async ID to check against?\n\t\t\t\t// TODO: BUG! What if this is a map? // Warning! Clearing things out needs to be robust against sync/async ops, or else you'll see `map val get put` test catastrophically fail because map attempts to link when parent graph is streamed before child value gets set. Need to differentiate between lack acks and force clearing.\n\t\t\t\tif(cat.soul && u !== cat.put){ return } // data may not be found on a soul, but if a soul already has data, then nothing can clear the soul as a whole.\n\t\t\t\t//if(!cat.has){ return }\n\t\t\t\ttmp = (msg.$$||msg.$||'')._||'';\n\t\t\t\tif(msg['@'] && (u !== tmp.put || u !== cat.put)){ return } // a \"not found\" from other peers should not clear out data if we have already found it.\n\t\t\t\t//if(cat.has && u === cat.put && !(root.pass||'')[cat.id]){ return } // if we are already unlinked, do not call again, unless edge case. // TODO: BUG! This line should be deleted for \"unlink deeply nested\".\n\t\t\t\tif(link = cat.link || msg.linked){\n\t\t\t\t\tdelete (root.$.get(link)._.echo||'')[cat.id];\n\t\t\t\t}\n\t\t\t\tif(cat.has){ // TODO: Empty out links, maps, echos, acks/asks, etc.?\n\t\t\t\t\tcat.link = null;\n\t\t\t\t}\n\t\t\t\tcat.put = u; // empty out the cache if, for example, alice's car's color no longer exists (relative to alice) if alice no longer has a car.\n\t\t\t\t// TODO: BUG! For maps, proxy this so the individual sub is triggered, not all subs.\n\t\t\t\tsetTimeout.each(Object.keys(cat.next||''), function(get, sat){ // empty out all sub chains. // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync? // TODO: BUG? This will trigger deeper put first, does put logic depend on nested order? // TODO: BUG! For map, this needs to be the isolated child, not all of them.\n\t\t\t\t\tif(!(sat = cat.next[get])){ return }\n\t\t\t\t\t//if(cat.has && u === sat.put && !(root.pass||'')[sat.id]){ return } // if we are already unlinked, do not call again, unless edge case. // TODO: BUG! This line should be deleted for \"unlink deeply nested\".\n\t\t\t\t\tif(link){ delete (root.$.get(link).get(get)._.echo||'')[sat.id] }\n\t\t\t\t\tsat.on('in', {get: get, put: u, $: sat.$}); // TODO: BUG? Add recursive seen check?\n\t\t\t\t},0,99);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(cat.soul){ return } // a soul cannot unlink itself.\n\t\t\tif(msg.$$){ return } // a linked chain does not do the unlinking, the sub chain does. // TODO: BUG? Will this cancel maps?\n\t\t\tlink = valid(change); // need to unlink anytime we are not the same link, though only do this once per unlink (and not on init).\n\t\t\ttmp = msg.$._||'';\n\t\t\tif(link === tmp.link || (cat.has && !tmp.link)){\n\t\t\t\tif((root.pass||'')[cat.id] && 'string' !== typeof link){\n\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete (tmp.echo||'')[cat.id];\n\t\t\tunlink({get: cat.get, put: u, $: msg.$, linked: msg.linked = msg.linked || tmp.link}, cat); // unlink our sub chains.\n\t\t}; Gun.on.unlink = unlink;\n\n\t\tfunction ack(msg, ev){\n\t\t\t//if(!msg['%'] && (this||'').off){ this.off() } // do NOT memory leak, turn off listeners! Now handled by .ask itself\n\t\t\t// manhattan:\n\t\t\tvar as = this.as, at = as.$._, root = at.root, get = as.get||'', tmp = (msg.put||'')[get['#']]||'';\n\t\t\tif(!msg.put || ('string' == typeof get['.'] && u === tmp[get['.']])){\n\t\t\t\tif(u !== at.put){ return }\n\t\t\t\tif(!at.soul && !at.has){ return } // TODO: BUG? For now, only core-chains will handle not-founds, because bugs creep in if non-core chains are used as $ but we can revisit this later for more powerful extensions.\n\t\t\t\tat.ack = (at.ack || 0) + 1;\n\t\t\t\tat.on('in', {\n\t\t\t\t\tget: at.get,\n\t\t\t\t\tput: at.put = u,\n\t\t\t\t\t$: at.$,\n\t\t\t\t\t'@': msg['@']\n\t\t\t\t});\n\t\t\t\t/*(tmp = at.Q) && setTimeout.each(Object.keys(tmp), function(id){ // TODO: Temporary testing, not integrated or being used, probably delete.\n\t\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); tmp['@'] = id; // copy message\n\t\t\t\t\troot.on('in', tmp);\n\t\t\t\t}); delete at.Q;*/\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t(msg._||{}).miss = 1;\n\t\t\tGun.on.put(msg);\n\t\t\treturn; // eom\n\t\t}\n\n\t\tvar empty = {}, u, text_rand = String.random, valid = Gun.valid, obj_has = function(o, k){ return o && Object.prototype.hasOwnProperty.call(o, k) }, state = Gun.state, state_is = state.is, state_ify = state.ify;\n\t})(USE, './chain');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.get = function(key, cb, as){\n\t\t\tvar gun, tmp;\n\t\t\tif(typeof key === 'string'){\n\t\t\t\tif(key.length == 0) {\t\n\t\t\t\t\t(gun = this.chain())._.err = {err: Gun.log('0 length key!', key)};\n\t\t\t\t\tif(cb){ cb.call(gun, gun._.err) }\n\t\t\t\t\treturn gun;\n\t\t\t\t}\n\t\t\t\tvar back = this, cat = back._;\n\t\t\t\tvar next = cat.next || empty;\n\t\t\t\tif(!(gun = next[key])){\n\t\t\t\t\tgun = key && cache(key, back);\n\t\t\t\t}\n\t\t\t\tgun = gun && gun.$;\n\t\t\t} else\n\t\t\tif('function' == typeof key){\n\t\t\t\tif(true === cb){ return soul(this, key, cb, as), this }\n\t\t\t\tgun = this;\n\t\t\t\tvar cat = gun._, opt = cb || {}, root = cat.root, id;\n\t\t\t\topt.at = cat;\n\t\t\t\topt.ok = key;\n\t\t\t\tvar wait = {}; // can we assign this to the at instead, like in once?\n\t\t\t\t//var path = []; cat.$.back(at => { at.get && path.push(at.get.slice(0,9))}); path = path.reverse().join('.');\n\t\t\t\tfunction any(msg, eve, f){\n\t\t\t\t\tif(any.stun){ return }\n\t\t\t\t\tif((tmp = root.pass) && !tmp[id]){ return }\n\t\t\t\t\tvar at = msg.$._, sat = (msg.$$||'')._, data = (sat||at).put, odd = (!at.has && !at.soul), test = {}, link, tmp;\n\t\t\t\t\tif(odd || u === data){ // handles non-core\n\t\t\t\t\t\tdata = (u === ((tmp = msg.put)||'')['='])? (u === (tmp||'')[':'])? tmp : tmp[':'] : tmp['='];\n\t\t\t\t\t}\n\t\t\t\t\tif(link = ('string' == typeof (tmp = Gun.valid(data)))){\n\t\t\t\t\t\tdata = (u === (tmp = root.$.get(tmp)._.put))? opt.not? u : data : tmp;\n\t\t\t\t\t}\n\t\t\t\t\tif(opt.not && u === data){ return }\n\t\t\t\t\tif(u === opt.stun){\n\t\t\t\t\t\tif((tmp = root.stun) && tmp.on){\n\t\t\t\t\t\t\tcat.$.back(function(a){ // our chain stunned?\n\t\t\t\t\t\t\t\ttmp.on(''+a.id, test = {});\n\t\t\t\t\t\t\t\tif((test.run || 0) < any.id){ return test } // if there is an earlier stun on gapless parents/self.\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t!test.run && tmp.on(''+at.id, test = {}); // this node stunned?\n\t\t\t\t\t\t\t!test.run && sat && tmp.on(''+sat.id, test = {}); // linked node stunned?\n\t\t\t\t\t\t\tif(any.id > test.run){\n\t\t\t\t\t\t\t\tif(!test.stun || test.stun.end){\n\t\t\t\t\t\t\t\t\ttest.stun = tmp.on('stun');\n\t\t\t\t\t\t\t\t\ttest.stun = test.stun && test.stun.last;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(test.stun && !test.stun.end){\n\t\t\t\t\t\t\t\t\t//if(odd && u === data){ return }\n\t\t\t\t\t\t\t\t\t//if(u === msg.put){ return } // \"not found\" acks will be found if there is stun, so ignore these.\n\t\t\t\t\t\t\t\t\t(test.stun.add || (test.stun.add = {}))[id] = function(){ any(msg,eve,1) } // add ourself to the stun callback list that is called at end of the write.\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(/*odd &&*/ u === data){ f = 0 } // if data not found, keep waiting/trying.\n\t\t\t\t\t\t/*if(f && u === data){\n\t\t\t\t\t\t\tcat.on('out', opt.out);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}*/\n\t\t\t\t\t\tif((tmp = root.hatch) && !tmp.end && u === opt.hatch && !f){ // quick hack! // What's going on here? Because data is streamed, we get things one by one, but a lot of developers would rather get a callback after each batch instead, so this does that by creating a wait list per chain id that is then called at the end of the batch by the hatch code in the root put listener.\n\t\t\t\t\t\t\tif(wait[at.$._.id]){ return } wait[at.$._.id] = 1;\n\t\t\t\t\t\t\ttmp.push(function(){any(msg,eve,1)});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}; wait = {}; // end quick hack.\n\t\t\t\t\t}\n\t\t\t\t\t// call:\n\t\t\t\t\tif(root.pass){ if(root.pass[id+at.id]){ return } root.pass[id+at.id] = 1 }\n\t\t\t\t\tif(opt.on){ opt.ok.call(at.$, data, at.get, msg, eve || any); return } // TODO: Also consider breaking `this` since a lot of people do `=>` these days and `.call(` has slower performance.\n\t\t\t\t\tif(opt.v2020){ opt.ok(msg, eve || any); return }\n\t\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); msg = tmp; msg.put = data; // 2019 COMPATIBILITY! TODO: GET RID OF THIS!\n\t\t\t\t\topt.ok.call(opt.as, msg, eve || any); // is this the right\n\t\t\t\t};\n\t\t\t\tany.at = cat;\n\t\t\t\t//(cat.any||(cat.any=function(msg){ setTimeout.each(Object.keys(cat.any||''), function(act){ (act = cat.any[act]) && act(msg) },0,99) }))[id = String.random(7)] = any; // maybe switch to this in future?\n\t\t\t\t(cat.any||(cat.any={}))[id = String.random(7)] = any;\n\t\t\t\tany.off = function(){ any.stun = 1; if(!cat.any){ return } delete cat.any[id] }\n\t\t\t\tany.rid = rid; // logic from old version, can we clean it up now?\n\t\t\t\tany.id = opt.run || ++root.once; // used in callback to check if we are earlier than a write. // will this ever cause an integer overflow?\n\t\t\t\ttmp = root.pass; (root.pass = {})[id] = 1; // Explanation: test trade-offs want to prevent recursion so we add/remove pass flag as it gets fulfilled to not repeat, however map map needs many pass flags - how do we reconcile?\n\t\t\t\topt.out = opt.out || {get: {}};\n\t\t\t\tcat.on('out', opt.out);\n\t\t\t\troot.pass = tmp;\n\t\t\t\treturn gun;\n\t\t\t} else\n\t\t\tif('number' == typeof key){\n\t\t\t\treturn this.get(''+key, cb, as);\n\t\t\t} else\n\t\t\tif('string' == typeof (tmp = valid(key))){\n\t\t\t\treturn this.get(tmp, cb, as);\n\t\t\t} else\n\t\t\tif(tmp = this.get.next){\n\t\t\t\tgun = tmp(this, key);\n\t\t\t}\n\t\t\tif(!gun){\n\t\t\t\t(gun = this.chain())._.err = {err: Gun.log('Invalid get request!', key)}; // CLEAN UP\n\t\t\t\tif(cb){ cb.call(gun, gun._.err) }\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tif(cb && 'function' == typeof cb){\n\t\t\t\tgun.get(cb, as);\n\t\t\t}\n\t\t\treturn gun;\n\t\t}\n\t\tfunction cache(key, back){\n\t\t\tvar cat = back._, next = cat.next, gun = back.chain(), at = gun._;\n\t\t\tif(!next){ next = cat.next = {} }\n\t\t\tnext[at.get = key] = at;\n\t\t\tif(back === cat.root.$){\n\t\t\t\tat.soul = key;\n\t\t\t\t//at.put = {};\n\t\t\t} else\n\t\t\tif(cat.soul || cat.has){\n\t\t\t\tat.has = key;\n\t\t\t\t//if(obj_has(cat.put, key)){\n\t\t\t\t\t//at.put = cat.put[key];\n\t\t\t\t//}\n\t\t\t}\n\t\t\treturn at;\n\t\t}\n\t\tfunction soul(gun, cb, opt, as){\n\t\t\tvar cat = gun._, acks = 0, tmp;\n\t\t\tif(tmp = cat.soul || cat.link){ return cb(tmp, as, cat) }\n\t\t\tif(cat.jam){ return cat.jam.push([cb, as]) }\n\t\t\tcat.jam = [[cb,as]];\n\t\t\tgun.get(function go(msg, eve){\n\t\t\t\tif(u === msg.put && !cat.root.opt.super && (tmp = Object.keys(cat.root.opt.peers).length) && ++acks <= tmp){ // TODO: super should not be in core code, bring AXE up into core instead to fix? // TODO: .keys( is slow\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\teve.rid(msg);\n\t\t\t\tvar at = ((at = msg.$) && at._) || {}, i = 0, as;\n\t\t\t\ttmp = cat.jam; delete cat.jam; // tmp = cat.jam.splice(0, 100);\n\t\t\t\t//if(tmp.length){ process.nextTick(function(){ go(msg, eve) }) }\n\t\t\t\twhile(as = tmp[i++]){ //Gun.obj.map(tmp, function(as, cb){\n\t\t\t\t\tvar cb = as[0], id; as = as[1];\n\t\t\t\t\tcb && cb(id = at.link || at.soul || Gun.valid(msg.put) || ((msg.put||{})._||{})['#'], as, msg, eve);\n\t\t\t\t} //);\n\t\t\t}, {out: {get: {'.':true}}});\n\t\t\treturn gun;\n\t\t}\n\t\tfunction rid(at){\n\t\t\tvar cat = this.at || this.on;\n\t\t\tif(!at || cat.soul || cat.has){ return this.off() }\n\t\t\tif(!(at = (at = (at = at.$ || at)._ || at).id)){ return }\n\t\t\tvar map = cat.map, tmp, seen;\n\t\t\t//if(!map || !(tmp = map[at]) || !(tmp = tmp.at)){ return }\n\t\t\tif(tmp = (seen = this.seen || (this.seen = {}))[at]){ return true }\n\t\t\tseen[at] = true;\n\t\t\treturn;\n\t\t\t//tmp.echo[cat.id] = {}; // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.\n\t\t\t//obj.del(map, at); // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.\n\t\t\treturn;\n\t\t}\n\t\tvar empty = {}, valid = Gun.valid, u;\n\t})(USE, './get');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.put = function(data, cb, as){ // I rewrote it :)\n\t\t\tvar gun = this, at = gun._, root = at.root;\n\t\t\tas = as || {};\n\t\t\tas.root = at.root;\n\t\t\tas.run || (as.run = root.once);\n\t\t\tstun(as, at.id); // set a flag for reads to check if this chain is writing.\n\t\t\tas.ack = as.ack || cb;\n\t\t\tas.via = as.via || gun;\n\t\t\tas.data = as.data || data;\n\t\t\tas.soul || (as.soul = at.soul || ('string' == typeof cb && cb));\n\t\t\tvar s = as.state = as.state || Gun.state();\n\t\t\tif('function' == typeof data){ data(function(d){ as.data = d; gun.put(u,u,as) }); return gun }\n\t\t\tif(!as.soul){ return get(as), gun }\n\t\t\tas.$ = root.$.get(as.soul); // TODO: This may not allow user chaining and similar?\n\t\t\tas.todo = [{it: as.data, ref: as.$}];\n\t\t\tas.turn = as.turn || turn;\n\t\t\tas.ran = as.ran || ran;\n\t\t\t//var path = []; as.via.back(at => { at.get && path.push(at.get.slice(0,9)) }); path = path.reverse().join('.');\n\t\t\t// TODO: Perf! We only need to stun chains that are being modified, not necessarily written to.\n\t\t\t(function walk(){\n\t\t\t\tvar to = as.todo, at = to.pop(), d = at.it, cid = at.ref && at.ref._.id, v, k, cat, tmp, g;\n\t\t\t\tstun(as, at.ref);\n\t\t\t\tif(tmp = at.todo){\n\t\t\t\t\tk = tmp.pop(); d = d[k];\n\t\t\t\t\tif(tmp.length){ to.push(at) }\n\t\t\t\t}\n\t\t\t\tk && (to.path || (to.path = [])).push(k);\n\t\t\t\tif(!(v = valid(d)) && !(g = Gun.is(d))){\n\t\t\t\t\tif(!Object.plain(d)){ ran.err(as, \"Invalid data: \"+ check(d) +\" at \" + (as.via.back(function(at){at.get && tmp.push(at.get)}, tmp = []) || tmp.join('.'))+'.'+(to.path||[]).join('.')); return }\n\t\t\t\t\tvar seen = as.seen || (as.seen = []), i = seen.length;\n\t\t\t\t\twhile(i--){ if(d === (tmp = seen[i]).it){ v = d = tmp.link; break } }\n\t\t\t\t}\n\t\t\t\tif(k && v){ at.node = state_ify(at.node, k, s, d) } // handle soul later.\n\t\t\t\telse {\n\t\t\t\t\tif(!as.seen){ ran.err(as, \"Data at root of graph must be a node (an object).\"); return }\n\t\t\t\t\tas.seen.push(cat = {it: d, link: {}, todo: g? [] : Object.keys(d).sort().reverse(), path: (to.path||[]).slice(), up: at}); // Any perf reasons to CPU schedule this .keys( ?\n\t\t\t\t\tat.node = state_ify(at.node, k, s, cat.link);\n\t\t\t\t\t!g && cat.todo.length && to.push(cat);\n\t\t\t\t\t// ---------------\n\t\t\t\t\tvar id = as.seen.length;\n\t\t\t\t\t(as.wait || (as.wait = {}))[id] = '';\n\t\t\t\t\ttmp = (cat.ref = (g? d : k? at.ref.get(k) : at.ref))._;\n\t\t\t\t\t(tmp = (d && (d._||'')['#']) || tmp.soul || tmp.link)? resolve({soul: tmp}) : cat.ref.get(resolve, {run: as.run, /*hatch: 0,*/ v2020:1, out:{get:{'.':' '}}}); // TODO: BUG! This should be resolve ONLY soul to prevent full data from being loaded. // Fixed now?\n\t\t\t\t\t//setTimeout(function(){ if(F){ return } console.log(\"I HAVE NOT BEEN CALLED!\", path, id, cat.ref._.id, k) }, 9000); var F; // MAKE SURE TO ADD F = 1 below!\n\t\t\t\t\tfunction resolve(msg, eve){\n\t\t\t\t\t\tvar end = cat.link['#'];\n\t\t\t\t\t\tif(eve){ eve.off(); eve.rid(msg) } // TODO: Too early! Check all peers ack not found.\n\t\t\t\t\t\t// TODO: BUG maybe? Make sure this does not pick up a link change wipe, that it uses the changign link instead.\n\t\t\t\t\t\tvar soul = end || msg.soul || (tmp = (msg.$$||msg.$)._||'').soul || tmp.link || ((tmp = tmp.put||'')._||'')['#'] || tmp['#'] || (((tmp = msg.put||'') && msg.$$)? tmp['#'] : (tmp['=']||tmp[':']||'')['#']);\n\t\t\t\t\t\t!end && stun(as, msg.$);\n\t\t\t\t\t\tif(!soul && !at.link['#']){ // check soul link above us\n\t\t\t\t\t\t\t(at.wait || (at.wait = [])).push(function(){ resolve(msg, eve) }) // wait\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!soul){\n\t\t\t\t\t\t\tsoul = [];\n\t\t\t\t\t\t\t(msg.$$||msg.$).back(function(at){\n\t\t\t\t\t\t\t\tif(tmp = at.soul || at.link){ return soul.push(tmp) }\n\t\t\t\t\t\t\t\tsoul.push(at.get);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsoul = soul.reverse().join('/');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcat.link['#'] = soul;\n\t\t\t\t\t\t!g && (((as.graph || (as.graph = {}))[soul] = (cat.node || (cat.node = {_:{}})))._['#'] = soul);\n\t\t\t\t\t\tdelete as.wait[id];\n\t\t\t\t\t\tcat.wait && setTimeout.each(cat.wait, function(cb){ cb && cb() });\n\t\t\t\t\t\tas.ran(as);\n\t\t\t\t\t};\n\t\t\t\t\t// ---------------\n\t\t\t\t}\n\t\t\t\tif(!to.length){ return as.ran(as) }\n\t\t\t\tas.turn(walk);\n\t\t\t}());\n\t\t\treturn gun;\n\t\t}\n\n\t\tfunction stun(as, id){\n\t\t\tif(!id){ return } id = (id._||'').id||id;\n\t\t\tvar run = as.root.stun || (as.root.stun = {on: Gun.on}), test = {}, tmp;\n\t\t\tas.stun || (as.stun = run.on('stun', function(){ }));\n\t\t\tif(tmp = run.on(''+id)){ tmp.the.last.next(test) }\n\t\t\tif(test.run >= as.run){ return }\n\t\t\trun.on(''+id, function(test){\n\t\t\t\tif(as.stun.end){\n\t\t\t\t\tthis.off();\n\t\t\t\t\tthis.to.next(test);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttest.run = test.run || as.run;\n\t\t\t\ttest.stun = test.stun || as.stun; return;\n\t\t\t\tif(this.to.to){\n\t\t\t\t\tthis.the.last.next(test);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttest.stun = as.stun;\n\t\t\t});\n\t\t}\n\n\t\tfunction ran(as){\n\t\t\tif(as.err){ ran.end(as.stun, as.root); return } // move log handle here.\n\t\t\tif(as.todo.length || as.end || !Object.empty(as.wait)){ return } as.end = 1;\n\t\t\t//(as.retry = function(){ as.acks = 0;\n\t\t\tvar cat = (as.$.back(-1)._), root = cat.root, ask = cat.ask(function(ack){\n\t\t\t\troot.on('ack', ack);\n\t\t\t\tif(ack.err && !ack.lack){ Gun.log(ack) }\n\t\t\t\tif(++acks > (as.acks || 0)){ this.off() } // Adjustable ACKs! Only 1 by default.\n\t\t\t\tif(!as.ack){ return }\n\t\t\t\tas.ack(ack, this);\n\t\t\t}, as.opt), acks = 0, stun = as.stun, tmp;\n\t\t\t(tmp = function(){ // this is not official yet, but quick solution to hack in for now.\n\t\t\t\tif(!stun){ return }\n\t\t\t\tran.end(stun, root);\n\t\t\t\tsetTimeout.each(Object.keys(stun = stun.add||''), function(cb){ if(cb = stun[cb]){cb()} }); // resume the stunned reads // Any perf reasons to CPU schedule this .keys( ?\n\t\t\t}).hatch = tmp; // this is not official yet ^\n\t\t\t//console.log(1, \"PUT\", as.run, as.graph);\n\t\t\tif(as.ack && !as.ok){ as.ok = as.acks || 9 } // TODO: In future! Remove this! This is just old API support.\n\t\t\t(as.via._).on('out', {put: as.out = as.graph, ok: as.ok && {'@': as.ok+1}, opt: as.opt, '#': ask, _: tmp});\n\t\t\t//})();\n\t\t}; ran.end = function(stun,root){\n\t\t\tstun.end = noop; // like with the earlier id, cheaper to make this flag a function so below callbacks do not have to do an extra type check.\n\t\t\tif(stun.the.to === stun && stun === stun.the.last){ delete root.stun }\n\t\t\tstun.off();\n\t\t}; ran.err = function(as, err){\n\t\t\t(as.ack||noop).call(as, as.out = { err: as.err = Gun.log(err) });\n\t\t\tas.ran(as);\n\t\t}\n\n\t\tfunction get(as){\n\t\t\tvar at = as.via._, tmp;\n\t\t\tas.via = as.via.back(function(at){\n\t\t\t\tif(at.soul || !at.get){ return at.$ }\n\t\t\t\ttmp = as.data; (as.data = {})[at.get] = tmp;\n\t\t\t});\n\t\t\tif(!as.via || !as.via._.soul){\n\t\t\t\tas.via = at.root.$.get(((as.data||'')._||'')['#'] || at.$.back('opt.uuid')())\n\t\t\t}\n\t\t\tas.via.put(as.data, as.ack, as);\n\t\t\t\n\n\t\t\treturn;\n\t\t\tif(at.get && at.back.soul){\n\t\t\t\ttmp = as.data;\n\t\t\t\tas.via = at.back.$;\n\t\t\t\t(as.data = {})[at.get] = tmp; \n\t\t\t\tas.via.put(as.data, as.ack, as);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tfunction check(d, tmp){ return ((d && (tmp = d.constructor) && tmp.name) || typeof d) }\n\n\t\tvar u, empty = {}, noop = function(){}, turn = setTimeout.turn, valid = Gun.valid, state_ify = Gun.state.ify;\n\t\tvar iife = function(fn,as){fn.call(as||empty)}\n\t})(USE, './put');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tUSE('./chain');\n\t\tUSE('./back');\n\t\tUSE('./put');\n\t\tUSE('./get');\n\t\tmodule.exports = Gun;\n\t})(USE, './index');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.chain.on = function(tag, arg, eas, as){ // don't rewrite!\n\t\t\tvar gun = this, cat = gun._, root = cat.root, act, off, id, tmp;\n\t\t\tif(typeof tag === 'string'){\n\t\t\t\tif(!arg){ return cat.on(tag) }\n\t\t\t\tact = cat.on(tag, arg, eas || cat, as);\n\t\t\t\tif(eas && eas.$){\n\t\t\t\t\t(eas.subs || (eas.subs = [])).push(act);\n\t\t\t\t}\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tvar opt = arg;\n\t\t\t(opt = (true === opt)? {change: true} : opt || {}).not = 1; opt.on = 1;\n\t\t\t//opt.at = cat;\n\t\t\t//opt.ok = tag;\n\t\t\t//opt.last = {};\n\t\t\tvar wait = {}; // can we assign this to the at instead, like in once?\n\t\t\tgun.get(tag, opt);\n\t\t\t/*gun.get(function on(data,key,msg,eve){ var $ = this;\n\t\t\t\tif(tmp = root.hatch){ // quick hack!\n\t\t\t\t\tif(wait[$._.id]){ return } wait[$._.id] = 1;\n\t\t\t\t\ttmp.push(function(){on.call($, data,key,msg,eve)});\n\t\t\t\t\treturn;\n\t\t\t\t}; wait = {}; // end quick hack.\n\t\t\t\ttag.call($, data,key,msg,eve);\n\t\t\t}, opt); // TODO: PERF! Event listener leak!!!?*/\n\t\t\t/*\n\t\t\tfunction one(msg, eve){\n\t\t\t\tif(one.stun){ return }\n\t\t\t\tvar at = msg.$._, data = at.put, tmp;\n\t\t\t\tif(tmp = at.link){ data = root.$.get(tmp)._.put }\n\t\t\t\tif(opt.not===u && u === data){ return }\n\t\t\t\tif(opt.stun===u && (tmp = root.stun) && (tmp = tmp[at.id] || tmp[at.back.id]) && !tmp.end){ // Remember! If you port this into `.get(cb` make sure you allow stun:0 skip option for `.put(`.\n\t\t\t\t\ttmp[id] = function(){one(msg,eve)};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//tmp = one.wait || (one.wait = {}); console.log(tmp[at.id] === ''); if(tmp[at.id] !== ''){ tmp[at.id] = tmp[at.id] || setTimeout(function(){tmp[at.id]='';one(msg,eve)},1); return } delete tmp[at.id];\n\t\t\t\t// call:\n\t\t\t\tif(opt.as){\n\t\t\t\t\topt.ok.call(opt.as, msg, eve || one);\n\t\t\t\t} else {\n\t\t\t\t\topt.ok.call(at.$, data, msg.get || at.get, msg, eve || one);\n\t\t\t\t}\n\t\t\t};\n\t\t\tone.at = cat;\n\t\t\t(cat.act||(cat.act={}))[id = String.random(7)] = one;\n\t\t\tone.off = function(){ one.stun = 1; if(!cat.act){ return } delete cat.act[id] }\n\t\t\tcat.on('out', {get: {}});*/\n\t\t\treturn gun;\n\t\t}\n\t\t// Rules:\n\t\t// 1. If cached, should be fast, but not read while write.\n\t\t// 2. Should not retrigger other listeners, should get triggered even if nothing found.\n\t\t// 3. If the same callback passed to many different once chains, each should resolve - an unsubscribe from the same callback should not effect the state of the other resolving chains, if you do want to cancel them all early you should mutate the callback itself with a flag & check for it at top of callback\n\t\tGun.chain.once = function(cb, opt){ opt = opt || {}; // avoid rewriting\n\t\t\tif(!cb){ return none(this,opt) }\n\t\t\tvar gun = this, cat = gun._, root = cat.root, data = cat.put, id = String.random(7), one, tmp;\n\t\t\tgun.get(function(data,key,msg,eve){\n\t\t\t\tvar $ = this, at = $._, one = (at.one||(at.one={}));\n\t\t\t\tif(eve.stun){ return } if('' === one[id]){ return }\n\t\t\t\tif(true === (tmp = Gun.valid(data))){ once(); return }\n\t\t\t\tif('string' == typeof tmp){ return } // TODO: BUG? Will this always load?\n\t\t\t\tclearTimeout((cat.one||'')[id]); // clear \"not found\" since they only get set on cat.\n\t\t\t\tclearTimeout(one[id]); one[id] = setTimeout(once, opt.wait||99); // TODO: Bug? This doesn't handle plural chains.\n\t\t\t\tfunction once(f){\n\t\t\t\t\tif(!at.has && !at.soul){ at = {put: data, get: key} } // handles non-core messages.\n\t\t\t\t\tif(u === (tmp = at.put)){ tmp = ((msg.$$||'')._||'').put }\n\t\t\t\t\tif('string' == typeof Gun.valid(tmp)){\n\t\t\t\t\t\ttmp = root.$.get(tmp)._.put;\n\t\t\t\t\t\tif(tmp === u && !f){\n\t\t\t\t\t\t\tone[id] = setTimeout(function(){ once(1) }, opt.wait||99); // TODO: Quick fix. Maybe use ack count for more predictable control?\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//console.log(\"AND VANISHED\", data);\n\t\t\t\t\tif(eve.stun){ return } if('' === one[id]){ return } one[id] = '';\n\t\t\t\t\tif(cat.soul || cat.has){ eve.off() } // TODO: Plural chains? // else { ?.off() } // better than one check?\n\t\t\t\t\tcb.call($, tmp, at.get);\n\t\t\t\t\tclearTimeout(one[id]); // clear \"not found\" since they only get set on cat. // TODO: This was hackily added, is it necessary or important? Probably not, in future try removing this. Was added just as a safety for the `&& !f` check.\n\t\t\t\t};\n\t\t\t}, {on: 1});\n\t\t\treturn gun;\n\t\t}\n\t\tfunction none(gun,opt,chain){\n\t\t\tGun.log.once(\"valonce\", \"Chainable val is experimental, its behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.\");\n\t\t\t(chain = gun.chain())._.nix = gun.once(function(data, key){ chain._.on('in', this._) });\n\t\t\tchain._.lex = gun._.lex; // TODO: Better approach in future? This is quick for now.\n\t\t\treturn chain;\n\t\t}\n\n\t\tGun.chain.off = function(){\n\t\t\t// make off more aggressive. Warning, it might backfire!\n\t\t\tvar gun = this, at = gun._, tmp;\n\t\t\tvar cat = at.back;\n\t\t\tif(!cat){ return }\n\t\t\tat.ack = 0; // so can resubscribe.\n\t\t\tif(tmp = cat.next){\n\t\t\t\tif(tmp[at.get]){\n\t\t\t\t\tdelete tmp[at.get];\n\t\t\t\t} else {\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TODO: delete cat.one[map.id]?\n\t\t\tif(tmp = cat.ask){\n\t\t\t\tdelete tmp[at.get];\n\t\t\t}\n\t\t\tif(tmp = cat.put){\n\t\t\t\tdelete tmp[at.get];\n\t\t\t}\n\t\t\tif(tmp = at.soul){\n\t\t\t\tdelete cat.root.graph[tmp];\n\t\t\t}\n\t\t\tif(tmp = at.map){\n\t\t\t\tObject.keys(tmp).forEach(function(i,at){ at = tmp[i]; //obj_map(tmp, function(at){\n\t\t\t\t\tif(at.link){\n\t\t\t\t\t\tcat.root.$.get(at.link).off();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(tmp = at.next){\n\t\t\t\tObject.keys(tmp).forEach(function(i,neat){ neat = tmp[i]; //obj_map(tmp, function(neat){\n\t\t\t\t\tneat.$.off();\n\t\t\t\t});\n\t\t\t}\n\t\t\tat.on('off', {});\n\t\t\treturn gun;\n\t\t}\n\t\tvar empty = {}, noop = function(){}, u;\n\t})(USE, './on');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index'), next = Gun.chain.get.next;\n\t\tGun.chain.get.next = function(gun, lex){ var tmp;\n\t\t\tif(!Object.plain(lex)){ return (next||noop)(gun, lex) }\n\t\t\tif(tmp = ((tmp = lex['#'])||'')['='] || tmp){ return gun.get(tmp) }\n\t\t\t(tmp = gun.chain()._).lex = lex; // LEX!\n\t\t\tgun.on('in', function(eve){\n\t\t\t\tif(String.match(eve.get|| (eve.put||'')['.'], lex['.'] || lex['#'] || lex)){\n\t\t\t\t\ttmp.on('in', eve);\n\t\t\t\t}\n\t\t\t\tthis.to.next(eve);\n\t\t\t});\n\t\t\treturn tmp.$;\n\t\t}\n\t\tGun.chain.map = function(cb, opt, t){\n\t\t\tvar gun = this, cat = gun._, lex, chain;\n\t\t\tif(Object.plain(cb)){ lex = cb['.']? cb : {'.': cb}; cb = u }\n\t\t\tif(!cb){\n\t\t\t\tif(chain = cat.each){ return chain }\n\t\t\t\t(cat.each = chain = gun.chain())._.lex = lex || chain._.lex || cat.lex;\n\t\t\t\tchain._.nix = gun.back('nix');\n\t\t\t\tgun.on('in', map, chain._);\n\t\t\t\treturn chain;\n\t\t\t}\n\t\t\tGun.log.once(\"mapfn\", \"Map functions are experimental, their behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.\");\n\t\t\tchain = gun.chain();\n\t\t\tgun.map().on(function(data, key, msg, eve){\n\t\t\t\tvar next = (cb||noop).call(this, data, key, msg, eve);\n\t\t\t\tif(u === next){ return }\n\t\t\t\tif(data === next){ return chain._.on('in', msg) }\n\t\t\t\tif(Gun.is(next)){ return chain._.on('in', next._) }\n\t\t\t\tvar tmp = {}; Object.keys(msg.put).forEach(function(k){ tmp[k] = msg.put[k] }, tmp); tmp['='] = next; \n\t\t\t\tchain._.on('in', {get: key, put: tmp});\n\t\t\t});\n\t\t\treturn chain;\n\t\t}\n\t\tfunction map(msg){ this.to.next(msg);\n\t\t\tvar cat = this.as, gun = msg.$, at = gun._, put = msg.put, tmp;\n\t\t\tif(!at.soul && !msg.$$){ return } // this line took hundreds of tries to figure out. It only works if core checks to filter out above chains during link tho. This says \"only bother to map on a node\" for this layer of the chain. If something is not a node, map should not work.\n\t\t\tif((tmp = cat.lex) && !String.match(msg.get|| (put||'')['.'], tmp['.'] || tmp['#'] || tmp)){ return }\n\t\t\tGun.on.link(msg, cat);\n\t\t}\n\t\tvar noop = function(){}, event = {stun: noop, off: noop}, u;\n\t})(USE, './map');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.chain.set = function(item, cb, opt){\n\t\t\tvar gun = this, root = gun.back(-1), soul, tmp;\n\t\t\tcb = cb || function(){};\n\t\t\topt = opt || {}; opt.item = opt.item || item;\n\t\t\tif(soul = ((item||'')._||'')['#']){ (item = {})['#'] = soul } // check if node, make link.\n\t\t\tif('string' == typeof (tmp = Gun.valid(item))){ return gun.get(soul = tmp).put(item, cb, opt) } // check if link\n\t\t\tif(!Gun.is(item)){\n\t\t\t\tif(Object.plain(item)){\n\t\t\t\t\titem = root.get(soul = gun.back('opt.uuid')()).put(item);\n\t\t\t\t}\n\t\t\t\treturn gun.get(soul || root.back('opt.uuid')(7)).put(item, cb, opt);\n\t\t\t}\n\t\t\tgun.put(function(go){\n\t\t\t\titem.get(function(soul, o, msg){ // TODO: BUG! We no longer have this option? & go error not handled?\n\t\t\t\t\tif(!soul){ return cb.call(gun, {err: Gun.log('Only a node can be linked! Not \"' + msg.put + '\"!')}) }\n\t\t\t\t\t(tmp = {})[soul] = {'#': soul}; go(tmp);\n\t\t\t\t},true);\n\t\t\t})\n\t\t\treturn item;\n\t\t}\n\t})(USE, './set');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\n\t\tvar noop = function(){}\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u, d = +new Date; try{ cb(u, JSON.parse(t,r), json.sucks(+new Date - d)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u, d = +new Date; try{ cb(u, JSON.stringify(v,r,s), json.sucks(+new Date - d)) }catch(e){ cb(e) } }\n\t\tjson.sucks = function(d){ if(d > 99){ console.log(\"Warning: JSON blocking CPU detected. Add `gun/lib/yson.js` to fix.\"); json.sucks = noop } }\n\n\t\tfunction Mesh(root){\n\t\t\tvar mesh = function(){};\n\t\t\tvar opt = root.opt || {};\n\t\t\topt.log = opt.log || console.log;\n\t\t\topt.gap = opt.gap || opt.wait || 0;\n\t\t\topt.max = opt.max || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;\n\t\t\topt.pack = opt.pack || (opt.max * 0.01 * 0.01);\n\t\t\topt.puff = opt.puff || 9; // IDEA: do a start/end benchmark, divide ops/result.\n\t\t\tvar puff = setTimeout.turn || setTimeout;\n\n\t\t\tvar dup = root.dup, dup_check = dup.check, dup_track = dup.track;\n\n\t\t\tvar ST = +new Date, LT = ST;\n\n\t\t\tvar hear = mesh.hear = function(raw, peer){\n\t\t\t\tif(!raw){ return }\n\t\t\t\tif(opt.max <= raw.length){ return mesh.say({dam: '!', err: \"Message too big!\"}, peer) }\n\t\t\t\tif(mesh === this){\n\t\t\t\t\t/*if('string' == typeof raw){ try{\n\t\t\t\t\t\tvar stat = console.STAT || {};\n\t\t\t\t\t\t//console.log('HEAR:', peer.id, (raw||'').slice(0,250), ((raw||'').length / 1024 / 1024).toFixed(4));\n\t\t\t\t\t\t\n\t\t\t\t\t\t//console.log(setTimeout.turn.s.length, 'stacks', parseFloat((-(LT - (LT = +new Date))/1000).toFixed(3)), 'sec', parseFloat(((LT-ST)/1000 / 60).toFixed(1)), 'up', stat.peers||0, 'peers', stat.has||0, 'has', stat.memhused||0, stat.memused||0, stat.memax||0, 'heap mem max');\n\t\t\t\t\t}catch(e){ console.log('DBG err', e) }}*/\n\t\t\t\t\thear.d += raw.length||0 ; ++hear.c } // STATS!\n\t\t\t\tvar S = peer.SH = +new Date;\n\t\t\t\tvar tmp = raw[0], msg;\n\t\t\t\t//raw && raw.slice && console.log(\"hear:\", ((peer.wire||'').headers||'').origin, raw.length, raw.slice && raw.slice(0,50)); //tc-iamunique-tc-package-ds1\n\t\t\t\tif('[' === tmp){\n\t\t\t\t\tparse(raw, function(err, msg){\n\t\t\t\t\t\tif(err || !msg){ return mesh.say({dam: '!', err: \"DAM JSON parse error.\"}, peer) }\n\t\t\t\t\t\tconsole.STAT && console.STAT(+new Date, msg.length, '# on hear batch');\n\t\t\t\t\t\tvar P = opt.puff;\n\t\t\t\t\t\t(function go(){\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\tvar i = 0, m; while(i < P && (m = msg[i++])){ mesh.hear(m, peer) }\n\t\t\t\t\t\t\tmsg = msg.slice(i); // slicing after is faster than shifting during.\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'hear loop');\n\t\t\t\t\t\t\tflush(peer); // force send all synchronously batched acks.\n\t\t\t\t\t\t\tif(!msg.length){ return }\n\t\t\t\t\t\t\tpuff(go, 0);\n\t\t\t\t\t\t}());\n\t\t\t\t\t});\n\t\t\t\t\traw = ''; // \n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif('{' === tmp || ((raw['#'] || Object.plain(raw)) && (msg = raw))){\n\t\t\t\t\tif(msg){ return hear.one(msg, peer, S) }\n\t\t\t\t\tparse(raw, function(err, msg){\n\t\t\t\t\t\tif(err || !msg){ return mesh.say({dam: '!', err: \"DAM JSON parse error.\"}, peer) }\n\t\t\t\t\t\thear.one(msg, peer, S);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\thear.one = function(msg, peer, S){ // S here is temporary! Undo.\n\t\t\t\tvar id, hash, tmp, ash, DBG;\n\t\t\t\tif(msg.DBG){ msg.DBG = DBG = {DBG: msg.DBG} }\n\t\t\t\tDBG && (DBG.h = S);\n\t\t\t\tDBG && (DBG.hp = +new Date);\n\t\t\t\tif(!(id = msg['#'])){ id = msg['#'] = String.random(9) }\n\t\t\t\tif(tmp = dup_check(id)){ return }\n\t\t\t\t// DAM logic:\n\t\t\t\tif(!(hash = msg['##']) && false && u !== msg.put){ /*hash = msg['##'] = Type.obj.hash(msg.put)*/ } // disable hashing for now // TODO: impose warning/penalty instead (?)\n\t\t\t\tif(hash && (tmp = msg['@'] || (msg.get && id)) && dup.check(ash = tmp+hash)){ return } // Imagine A <-> B <=> (C & D), C & D reply with same ACK but have different IDs, B can use hash to dedup. Or if a GET has a hash already, we shouldn't ACK if same.\n\t\t\t\t(msg._ = function(){}).via = mesh.leap = peer;\n\t\t\t\tif((tmp = msg['><']) && 'string' == typeof tmp){ tmp.slice(0,99).split(',').forEach(function(k){ this[k] = 1 }, (msg._).yo = {}) } // Peers already sent to, do not resend.\n\t\t\t\t// DAM ^\n\t\t\t\tif(tmp = msg.dam){\n\t\t\t\t\tif(tmp = mesh.hear[tmp]){\n\t\t\t\t\t\ttmp(msg, peer, root);\n\t\t\t\t\t}\n\t\t\t\t\tdup_track(id);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(tmp = msg.ok){ msg._.near = tmp['/'] }\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.is = S); peer.SI = id;\n\t\t\t\tdup_track.ed = function(d){\n\t\t\t\t\tif(id !== d){ return }\n\t\t\t\t\tdup_track.ed = 0;\n\t\t\t\t\tif(!(d = dup.s[id])){ return }\n\t\t\t\t\td.via = peer;\n\t\t\t\t\tif(msg.get){ d.it = msg }\n\t\t\t\t}\n\t\t\t\troot.on('in', mesh.last = msg);\n\t\t\t\tDBG && (DBG.hd = +new Date);\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, msg.get? 'msg get' : msg.put? 'msg put' : 'msg');\n\t\t\t\tdup_track(id); // in case 'in' does not call track.\n\t\t\t\tif(ash){ dup_track(ash) } //dup.track(tmp+hash, true).it = it(msg);\n\t\t\t\tmesh.leap = mesh.last = null; // warning! mesh.leap could be buggy.\n\t\t\t}\n\t\t\tvar tomap = function(k,i,m){m(k,true)};\n\t\t\thear.c = hear.d = 0;\n\n\t\t\t;(function(){\n\t\t\t\tvar SMIA = 0;\n\t\t\t\tvar loop;\n\t\t\t\tmesh.hash = function(msg, peer){ var h, s, t;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tjson(msg.put, function hash(err, text){\n\t\t\t\t\t\tvar ss = (s || (s = t = text||'')).slice(0, 32768); // 1024 * 32\n\t\t\t\t\t h = String.hash(ss, h); s = s.slice(32768);\n\t\t\t\t\t if(s){ puff(hash, 0); return }\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say json+hash');\n\t\t\t\t\t msg._.$put = t;\n\t\t\t\t\t msg['##'] = h;\n\t\t\t\t\t mesh.say(msg, peer);\n\t\t\t\t\t delete msg._.$put;\n\t\t\t\t\t}, sort);\n\t\t\t\t}\n\t\t\t\tfunction sort(k, v){ var tmp;\n\t\t\t\t\tif(!(v instanceof Object)){ return v }\n\t\t\t\t\tObject.keys(v).sort().forEach(sorta, {to: tmp = {}, on: v});\n\t\t\t\t\treturn tmp;\n\t\t\t\t} function sorta(k){ this.to[k] = this.on[k] }\n\n\t\t\t\tvar say = mesh.say = function(msg, peer){ var tmp;\n\t\t\t\t\tif((tmp = this) && (tmp = tmp.to) && tmp.next){ tmp.next(msg) } // compatible with middleware adapters.\n\t\t\t\t\tif(!msg){ return false }\n\t\t\t\t\tvar id, hash, raw, ack = msg['@'];\n//if(opt.super && (!ack || !msg.put)){ return } // TODO: MANHATTAN STUB //OBVIOUSLY BUG! But squelch relay. // :( get only is 100%+ CPU usage :(\n\t\t\t\t\tvar meta = msg._||(msg._=function(){});\n\t\t\t\t\tvar DBG = msg.DBG, S = +new Date; meta.y = meta.y || S; if(!peer){ DBG && (DBG.y = S) }\n\t\t\t\t\tif(!(id = msg['#'])){ id = msg['#'] = String.random(9) }\n\t\t\t\t\t!loop && dup_track(id);//.it = it(msg); // track for 9 seconds, default. Earth<->Mars would need more! // always track, maybe move this to the 'after' logic if we split function.\n\t\t\t\t\t//if(msg.put && (msg.err || (dup.s[id]||'').err)){ return false } // TODO: in theory we should not be able to stun a message, but for now going to check if it can help network performance preventing invalid data to relay.\n\t\t\t\t\tif(!(hash = msg['##']) && u !== msg.put && !meta.via && ack){ mesh.hash(msg, peer); return } // TODO: Should broadcasts be hashed?\n\t\t\t\t\tif(!peer && ack){ peer = ((tmp = dup.s[ack]) && (tmp.via || ((tmp = tmp.it) && (tmp = tmp._) && tmp.via))) || ((tmp = mesh.last) && ack === tmp['#'] && mesh.leap) } // warning! mesh.leap could be buggy! mesh last check reduces this. // TODO: CLEAN UP THIS LINE NOW? `.it` should be reliable.\n\t\t\t\t\tif(!peer && ack){ // still no peer, then ack daisy chain 'tunnel' got lost.\n\t\t\t\t\t\tif(dup.s[ack]){ return } // in dups but no peer hints that this was ack to ourself, ignore.\n\t\t\t\t\t\tconsole.STAT && console.STAT(+new Date, ++SMIA, 'total no peer to ack to'); // TODO: Delete this now. Dropping lost ACKs is protocol fine now.\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} // TODO: Temporary? If ack via trace has been lost, acks will go to all peers, which trashes browser bandwidth. Not relaying the ack will force sender to ask for ack again. Note, this is technically wrong for mesh behavior.\n\t\t\t\t\tif(ack && !msg.put && !hash && ((dup.s[ack]||'').it||'')['##']){ return false } // If we're saying 'not found' but a relay had data, do not bother sending our not found. // Is this correct, return false? // NOTE: ADD PANIC TEST FOR THIS!\n\t\t\t\t\tif(!peer && mesh.way){ return mesh.way(msg) }\n\t\t\t\t\tDBG && (DBG.yh = +new Date);\n\t\t\t\t\tif(!(raw = meta.raw)){ mesh.raw(msg, peer); return }\n\t\t\t\t\tDBG && (DBG.yr = +new Date);\n\t\t\t\t\tif(!peer || !peer.id){\n\t\t\t\t\t\tif(!Object.plain(peer || opt.peers)){ return false }\n\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\tvar P = opt.puff, ps = opt.peers, pl = Object.keys(peer || opt.peers || {}); // TODO: .keys( is slow\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'peer keys');\n\t\t\t\t\t\t;(function go(){\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\t//Type.obj.map(peer || opt.peers, each); // in case peer is a peer list.\n\t\t\t\t\t\t\tloop = 1; var wr = meta.raw; meta.raw = raw; // quick perf hack\n\t\t\t\t\t\t\tvar i = 0, p; while(i < 9 && (p = (pl||'')[i++])){\n\t\t\t\t\t\t\t\tif(!(p = ps[p] || (peer||'')[p])){ continue }\n\t\t\t\t\t\t\t\tmesh.say(msg, p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeta.raw = wr; loop = 0;\n\t\t\t\t\t\t\tpl = pl.slice(i); // slicing after is faster than shifting during.\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say loop');\n\t\t\t\t\t\t\tif(!pl.length){ return }\n\t\t\t\t\t\t\tpuff(go, 0);\n\t\t\t\t\t\t\tack && dup_track(ack); // keep for later\n\t\t\t\t\t\t}());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: PERF: consider splitting function here, so say loops do less work.\n\t\t\t\t\tif(!peer.wire && mesh.wire){ mesh.wire(peer) }\n\t\t\t\t\tif(id === peer.last){ return } peer.last = id; // was it just sent?\n\t\t\t\t\tif(peer === meta.via){ return false } // don't send back to self.\n\t\t\t\t\tif((tmp = meta.yo) && (tmp[peer.url] || tmp[peer.pid] || tmp[peer.id]) /*&& !o*/){ return false }\n\t\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||meta).yp = +new Date) - (meta.y || S), 'say prep');\n\t\t\t\t\t!loop && ack && dup_track(ack); // streaming long responses needs to keep alive the ack.\n\t\t\t\t\tif(peer.batch){\n\t\t\t\t\t\tpeer.tail = (tmp = peer.tail || 0) + raw.length;\n\t\t\t\t\t\tif(peer.tail <= opt.pack){\n\t\t\t\t\t\t\tpeer.batch += (tmp?',':'')+raw;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tflush(peer);\n\t\t\t\t\t}\n\t\t\t\t\tpeer.batch = '['; // Prevents double JSON!\n\t\t\t\t\tvar ST = +new Date;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tconsole.STAT && console.STAT(ST, +new Date - ST, '0ms TO');\n\t\t\t\t\t\tflush(peer);\n\t\t\t\t\t}, opt.gap); // TODO: queuing/batching might be bad for low-latency video game performance! Allow opt out?\n\t\t\t\t\tsend(raw, peer);\n\t\t\t\t\tconsole.STAT && (ack === peer.SI) && console.STAT(S, +new Date - peer.SH, 'say ack');\n\t\t\t\t}\n\t\t\t\tmesh.say.c = mesh.say.d = 0;\n\t\t\t\t// TODO: this caused a out-of-memory crash!\n\t\t\t\tmesh.raw = function(msg, peer){ // TODO: Clean this up / delete it / move logic out!\n\t\t\t\t\tif(!msg){ return '' }\n\t\t\t\t\tvar meta = (msg._) || {}, put, tmp;\n\t\t\t\t\tif(tmp = meta.raw){ return tmp }\n\t\t\t\t\tif('string' == typeof msg){ return msg }\n\t\t\t\t\tvar hash = msg['##'], ack = msg['@'];\n\t\t\t\t\tif(hash && ack){\n\t\t\t\t\t\tif(!meta.via && dup_check(ack+hash)){ return false } // for our own out messages, memory & storage may ack the same thing, so dedup that. Tho if via another peer, we already tracked it upon hearing, so this will always trigger false positives, so don't do that!\n\t\t\t\t\t\tif(tmp = (dup.s[ack]||'').it){\n\t\t\t\t\t\t\tif(hash === tmp['##']){ return false } // if ask has a matching hash, acking is optional.\n\t\t\t\t\t\t\tif(!tmp['##']){ tmp['##'] = hash } // if none, add our hash to ask so anyone we relay to can dedup. // NOTE: May only check against 1st ack chunk, 2nd+ won't know and still stream back to relaying peers which may then dedup. Any way to fix this wasted bandwidth? I guess force rate limiting breaking change, that asking peer has to ask for next lexical chunk.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!msg.dam && !msg['@']){\n\t\t\t\t\t\tvar i = 0, to = []; tmp = opt.peers;\n\t\t\t\t\t\tfor(var k in tmp){ var p = tmp[k]; // TODO: Make it up peers instead!\n\t\t\t\t\t\t\tto.push(p.url || p.pid || p.id);\n\t\t\t\t\t\t\tif(++i > 6){ break }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(i > 1){ msg['><'] = to.join() } // TODO: BUG! This gets set regardless of peers sent to! Detect?\n\t\t\t\t\t}\n\t\t\t\t\tif(msg.put && (tmp = msg.ok)){ msg.ok = {'@':(tmp['@']||1)-1, '/': (tmp['/']==msg._.near)? mesh.near : tmp['/']}; }\n\t\t\t\t\tif(put = meta.$put){\n\t\t\t\t\t\ttmp = {}; Object.keys(msg).forEach(function(k){ tmp[k] = msg[k] });\n\t\t\t\t\t\ttmp.put = ':])([:';\n\t\t\t\t\t\tjson(tmp, function(err, raw){\n\t\t\t\t\t\t\tif(err){ return } // TODO: Handle!!\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\ttmp = raw.indexOf('\"put\":\":])([:\"');\n\t\t\t\t\t\t\tres(u, raw = raw.slice(0, tmp+6) + put + raw.slice(tmp + 14));\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say slice');\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tjson(msg, res);\n\t\t\t\t\tfunction res(err, raw){\n\t\t\t\t\t\tif(err){ return } // TODO: Handle!!\n\t\t\t\t\t\tmeta.raw = raw; //if(meta && (raw||'').length < (999 * 99)){ meta.raw = raw } // HNPERF: If string too big, don't keep in memory.\n\t\t\t\t\t\tmesh.say(msg, peer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}());\n\n\t\t\tfunction flush(peer){\n\t\t\t\tvar tmp = peer.batch, t = 'string' == typeof tmp, l;\n\t\t\t\tif(t){ tmp += ']' }// TODO: Prevent double JSON!\n\t\t\t\tpeer.batch = peer.tail = null;\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tif(t? 3 > tmp.length : !tmp.length){ return } // TODO: ^\n\t\t\t\tif(!t){try{tmp = (1 === tmp.length? tmp[0] : JSON.stringify(tmp));\n\t\t\t\t}catch(e){return opt.log('DAM JSON stringify error', e)}}\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tsend(tmp, peer);\n\t\t\t}\n\t\t\t// for now - find better place later.\n\t\t\tfunction send(raw, peer){ try{\n\t\t\t\tvar wire = peer.wire;\n\t\t\t\tif(peer.say){\n\t\t\t\t\tpeer.say(raw);\n\t\t\t\t} else\n\t\t\t\tif(wire.send){\n\t\t\t\t\twire.send(raw);\n\t\t\t\t}\n\t\t\t\tmesh.say.d += raw.length||0; ++mesh.say.c; // STATS!\n\t\t\t}catch(e){\n\t\t\t\t(peer.queue = peer.queue || []).push(raw);\n\t\t\t}}\n\n\t\t\tmesh.near = 0;\n\t\t\tmesh.hi = function(peer){\n\t\t\t\tvar wire = peer.wire, tmp;\n\t\t\t\tif(!wire){ mesh.wire((peer.length && {url: peer, id: peer}) || peer); return }\n\t\t\t\tif(peer.id){\n\t\t\t\t\topt.peers[peer.url || peer.id] = peer;\n\t\t\t\t} else {\n\t\t\t\t\ttmp = peer.id = peer.id || peer.url || String.random(9);\n\t\t\t\t\tmesh.say({dam: '?', pid: root.opt.pid}, opt.peers[tmp] = peer);\n\t\t\t\t\tdelete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self\n\t\t\t\t}\n\t\t\t\tif(!peer.met){\n\t\t\t\t\tmesh.near++;\n\t\t\t\t\tpeer.met = +(new Date);\n\t\t\t\t\troot.on('hi', peer)\n\t\t\t\t}\n\t\t\t\t// @rogowski I need this here by default for now to fix go1dfish's bug\n\t\t\t\ttmp = peer.queue; peer.queue = [];\n\t\t\t\tsetTimeout.each(tmp||[],function(msg){\n\t\t\t\t\tsend(msg, peer);\n\t\t\t\t},0,9);\n\t\t\t\t//Type.obj.native && Type.obj.native(); // dirty place to check if other JS polluted.\n\t\t\t}\n\t\t\tmesh.bye = function(peer){\n\t\t\t\tpeer.met && --mesh.near;\n\t\t\t\tdelete peer.met;\n\t\t\t\troot.on('bye', peer);\n\t\t\t\tvar tmp = +(new Date); tmp = (tmp - (peer.met||tmp));\n\t\t\t\tmesh.bye.time = ((mesh.bye.time || tmp) + tmp) / 2;\n\t\t\t}\n\t\t\tmesh.hear['!'] = function(msg, peer){ opt.log('Error:', msg.err) }\n\t\t\tmesh.hear['?'] = function(msg, peer){\n\t\t\t\tif(msg.pid){\n\t\t\t\t\tif(!peer.pid){ peer.pid = msg.pid }\n\t\t\t\t\tif(msg['@']){ return }\n\t\t\t\t}\n\t\t\t\tmesh.say({dam: '?', pid: opt.pid, '@': msg['#']}, peer);\n\t\t\t\tdelete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self\n\t\t\t}\n\t\t\tmesh.hear['mob'] = function(msg, peer){ // NOTE: AXE will overload this with better logic.\n\t\t\t\tif(!msg.peers){ return }\n\t\t\t\tvar peers = Object.keys(msg.peers), one = peers[(Math.random()*peers.length) >> 0];\n\t\t\t\tif(!one){ return }\n\t\t\t\tmesh.bye(peer);\n\t\t\t\tmesh.hi(one);\n\t\t\t}\n\n\t\t\troot.on('create', function(root){\n\t\t\t\troot.opt.pid = root.opt.pid || String.random(9);\n\t\t\t\tthis.to.next(root);\n\t\t\t\troot.on('out', mesh.say);\n\t\t\t});\n\n\t\t\troot.on('bye', function(peer, tmp){\n\t\t\t\tpeer = opt.peers[peer.id || peer] || peer;\n\t\t\t\tthis.to.next(peer);\n\t\t\t\tpeer.bye? peer.bye() : (tmp = peer.wire) && tmp.close && tmp.close();\n\t\t\t\tdelete opt.peers[peer.id];\n\t\t\t\tpeer.wire = null;\n\t\t\t});\n\n\t\t\tvar gets = {};\n\t\t\troot.on('bye', function(peer, tmp){ this.to.next(peer);\n\t\t\t\tif(tmp = console.STAT){ tmp.peers = mesh.near; }\n\t\t\t\tif(!(tmp = peer.url)){ return } gets[tmp] = true;\n\t\t\t\tsetTimeout(function(){ delete gets[tmp] },opt.lack || 9000);\n\t\t\t});\n\t\t\troot.on('hi', function(peer, tmp){ this.to.next(peer);\n\t\t\t\tif(tmp = console.STAT){ tmp.peers = mesh.near }\n\t\t\t\tif(opt.super){ return } // temporary (?) until we have better fix/solution?\n\t\t\t\tvar souls = Object.keys(root.next||''); // TODO: .keys( is slow\n\t\t\t\tif(souls.length > 9999 && !console.SUBS){ console.log(console.SUBS = \"Warning: You have more than 10K live GETs, which might use more bandwidth than your screen can show - consider `.off()`.\") }\n\t\t\t\tsetTimeout.each(souls, function(soul){ var node = root.next[soul];\n\t\t\t\t\tif(opt.super || (node.ask||'')['']){ mesh.say({get: {'#': soul}}, peer); return }\n\t\t\t\t\tsetTimeout.each(Object.keys(node.ask||''), function(key){ if(!key){ return }\n\t\t\t\t\t\t// is the lack of ## a !onion hint?\n\t\t\t\t\t\tmesh.say({'##': String.hash((root.graph[soul]||'')[key]), get: {'#': soul, '.': key}}, peer);\n\t\t\t\t\t\t// TODO: Switch this so Book could route?\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn mesh;\n\t\t}\n\t var empty = {}, ok = true, u;\n\n\t try{ module.exports = Mesh }catch(e){}\n\n\t})(USE, './mesh');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.Mesh = USE('./mesh');\n\n\t\t// TODO: resync upon reconnect online/offline\n\t\t//window.ononline = window.onoffline = function(){ console.log('online?', navigator.onLine) }\n\n\t\tGun.on('opt', function(root){\n\t\t\tthis.to.next(root);\n\t\t\tif(root.once){ return }\n\t\t\tvar opt = root.opt;\n\t\t\tif(false === opt.WebSocket){ return }\n\n\t\t\tvar env = Gun.window || {};\n\t\t\tvar websocket = opt.WebSocket || env.WebSocket || env.webkitWebSocket || env.mozWebSocket;\n\t\t\tif(!websocket){ return }\n\t\t\topt.WebSocket = websocket;\n\n\t\t\tvar mesh = opt.mesh = opt.mesh || Gun.Mesh(root);\n\n\t\t\tvar wire = mesh.wire || opt.wire;\n\t\t\tmesh.wire = opt.wire = open;\n\t\t\tfunction open(peer){ try{\n\t\t\t\tif(!peer || !peer.url){ return wire && wire(peer) }\n\t\t\t\tvar url = peer.url.replace(/^http/, 'ws');\n\t\t\t\tvar wire = peer.wire = new opt.WebSocket(url);\n\t\t\t\twire.onclose = function(){\n\t\t\t\t\treconnect(peer);\n\t\t\t\t\topt.mesh.bye(peer);\n\t\t\t\t};\n\t\t\t\twire.onerror = function(err){\n\t\t\t\t\treconnect(peer);\n\t\t\t\t};\n\t\t\t\twire.onopen = function(){\n\t\t\t\t\topt.mesh.hi(peer);\n\t\t\t\t}\n\t\t\t\twire.onmessage = function(msg){\n\t\t\t\t\tif(!msg){ return }\n\t\t\t\t\topt.mesh.hear(msg.data || msg, peer);\n\t\t\t\t};\n\t\t\t\treturn wire;\n\t\t\t}catch(e){ opt.mesh.bye(peer) }}\n\n\t\t\tsetTimeout(function(){ !opt.super && root.on('out', {dam:'hi'}) },1); // it can take a while to open a socket, so maybe no longer lazy load for perf reasons?\n\n\t\t\tvar wait = 2 * 999;\n\t\t\tfunction reconnect(peer){\n\t\t\t\tclearTimeout(peer.defer);\n\t\t\t\tif(!opt.peers[peer.url]){ return }\n\t\t\t\tif(doc && peer.retry <= 0){ return }\n\t\t\t\tpeer.retry = (peer.retry || opt.retry+1 || 60) - ((-peer.tried + (peer.tried = +new Date) < wait*4)?1:0);\n\t\t\t\tpeer.defer = setTimeout(function to(){\n\t\t\t\t\tif(doc && doc.hidden){ return setTimeout(to,wait) }\n\t\t\t\t\topen(peer);\n\t\t\t\t}, wait);\n\t\t\t}\n\t\t\tvar doc = (''+u !== typeof document) && document;\n\t\t});\n\t\tvar noop = function(){}, u;\n\t})(USE, './websocket');\n\n\t;USE(function(module){\n\t\tif(typeof Gun === 'undefined'){ return }\n\n\t\tvar noop = function(){}, store, u;\n\t\ttry{store = (Gun.window||noop).localStorage}catch(e){}\n\t\tif(!store){\n\t\t\tGun.log(\"Warning: No localStorage exists to persist data to!\");\n\t\t\tstore = {setItem: function(k,v){this[k]=v}, removeItem: function(k){delete this[k]}, getItem: function(k){return this[k]}};\n\t\t}\n\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n\t\tGun.on('create', function lg(root){\n\t\t\tthis.to.next(root);\n\t\t\tvar opt = root.opt, graph = root.graph, acks = [], disk, to, size, stop;\n\t\t\tif(false === opt.localStorage){ return }\n\t\t\topt.prefix = opt.file || 'gun/';\n\t\t\ttry{ disk = lg[opt.prefix] = lg[opt.prefix] || JSON.parse(size = store.getItem(opt.prefix)) || {}; // TODO: Perf! This will block, should we care, since limited to 5MB anyways?\n\t\t\t}catch(e){ disk = lg[opt.prefix] = {}; }\n\t\t\tsize = (size||'').length;\n\n\t\t\troot.on('get', function(msg){\n\t\t\t\tthis.to.next(msg);\n\t\t\t\tvar lex = msg.get, soul, data, tmp, u;\n\t\t\t\tif(!lex || !(soul = lex['#'])){ return }\n\t\t\t\tdata = disk[soul] || u;\n\t\t\t\tif(data && (tmp = lex['.']) && !Object.plain(tmp)){ // pluck!\n\t\t\t\t\tdata = Gun.state.ify({}, tmp, Gun.state.is(data, tmp), data[tmp], soul);\n\t\t\t\t}\n\t\t\t\t//if(data){ (tmp = {})[soul] = data } // back into a graph.\n\t\t\t\t//setTimeout(function(){\n\t\t\t\tGun.on.get.ack(msg, data); //root.on('in', {'@': msg['#'], put: tmp, lS:1});// || root.$});\n\t\t\t\t//}, Math.random() * 10); // FOR TESTING PURPOSES!\n\t\t\t});\n\n\t\t\troot.on('put', function(msg){\n\t\t\t\tthis.to.next(msg); // remember to call next middleware adapter\n\t\t\t\tvar put = msg.put, soul = put['#'], key = put['.'], id = msg['#'], ok = msg.ok||'', tmp; // pull data off wire envelope\n\t\t\t\tdisk[soul] = Gun.state.ify(disk[soul], key, put['>'], put[':'], soul); // merge into disk object\n\t\t\t\tif(stop && size > (4999880)){ root.on('in', {'@': id, err: \"localStorage max!\"}); return; }\n\t\t\t\t//if(!msg['@']){ acks.push(id) } // then ack any non-ack write. // TODO: use batch id.\n\t\t\t\tif(!msg['@'] && (!msg._.via || Math.random() < (ok['@'] / ok['/']))){ acks.push(id) } // then ack any non-ack write. // TODO: use batch id.\n\t\t\t\tif(to){ return }\n\t\t\t\tto = setTimeout(flush, 9+(size / 333)); // 0.1MB = 0.3s, 5MB = 15s \n\t\t\t});\n\t\t\tfunction flush(){\n\t\t\t\tif(!acks.length && ((setTimeout.turn||'').s||'').length){ setTimeout(flush,99); return; } // defer if \"busy\" && no saves.\n\t\t\t\tvar err, ack = acks; clearTimeout(to); to = false; acks = [];\n\t\t\t\tjson(disk, function(err, tmp){\n\t\t\t\t\ttry{!err && store.setItem(opt.prefix, tmp);\n\t\t\t\t\t}catch(e){ err = stop = e || \"localStorage failure\" }\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tGun.log(err + \" Consider using GUN's IndexedDB plugin for RAD for more storage space, https://gun.eco/docs/RAD#install\");\n\t\t\t\t\t\troot.on('localStorage:error', {err: err, get: opt.prefix, put: disk});\n\t\t\t\t\t}\n\t\t\t\t\tsize = tmp.length;\n\n\t\t\t\t\t//if(!err && !Object.empty(opt.peers)){ return } // only ack if there are no peers. // Switch this to probabilistic mode\n\t\t\t\t\tsetTimeout.each(ack, function(id){\n\t\t\t\t\t\troot.on('in', {'@': id, err: err, ok: 0}); // localStorage isn't reliable, so make its `ok` code be a low number.\n\t\t\t\t\t},0,99);\n\t\t\t\t})\n\t\t\t}\n\t\t\n\t\t});\n\t})(USE, './localStorage');\n\n}());\n\n/* BELOW IS TEMPORARY FOR OLD INTERNAL COMPATIBILITY, THEY ARE IMMEDIATELY DEPRECATED AND WILL BE REMOVED IN NEXT VERSION */\n;(function(){\n\tvar u;\n\tif(''+u == typeof Gun){ return }\n\tvar DEP = function(n){ console.warn(\"Warning! Deprecated internal utility will break in next version:\", n) }\n\t// Generic javascript utilities.\n\tvar Type = Gun;\n\t//Type.fns = Type.fn = {is: function(fn){ return (!!fn && fn instanceof Function) }}\n\tType.fn = Type.fn || {is: function(fn){ DEP('fn'); return (!!fn && 'function' == typeof fn) }}\n\tType.bi = Type.bi || {is: function(b){ DEP('bi');return (b instanceof Boolean || typeof b == 'boolean') }}\n\tType.num = Type.num || {is: function(n){ DEP('num'); return !list_is(n) && ((n - parseFloat(n) + 1) >= 0 || Infinity === n || -Infinity === n) }}\n\tType.text = Type.text || {is: function(t){ DEP('text'); return (typeof t == 'string') }}\n\tType.text.ify = Type.text.ify || function(t){ DEP('text.ify');\n\t\tif(Type.text.is(t)){ return t }\n\t\tif(typeof JSON !== \"undefined\"){ return JSON.stringify(t) }\n\t\treturn (t && t.toString)? t.toString() : t;\n\t}\n\tType.text.random = Type.text.random || function(l, c){ DEP('text.random');\n\t\tvar s = '';\n\t\tl = l || 24; // you are not going to make a 0 length random number, so no need to check type\n\t\tc = c || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz';\n\t\twhile(l > 0){ s += c.charAt(Math.floor(Math.random() * c.length)); l-- }\n\t\treturn s;\n\t}\n\tType.text.match = Type.text.match || function(t, o){ var tmp, u; DEP('text.match');\n\t\tif('string' !== typeof t){ return false }\n\t\tif('string' == typeof o){ o = {'=': o} }\n\t\to = o || {};\n\t\ttmp = (o['='] || o['*'] || o['>'] || o['<']);\n\t\tif(t === tmp){ return true }\n\t\tif(u !== o['=']){ return false }\n\t\ttmp = (o['*'] || o['>'] || o['<']);\n\t\tif(t.slice(0, (tmp||'').length) === tmp){ return true }\n\t\tif(u !== o['*']){ return false }\n\t\tif(u !== o['>'] && u !== o['<']){\n\t\t\treturn (t >= o['>'] && t <= o['<'])? true : false;\n\t\t}\n\t\tif(u !== o['>'] && t >= o['>']){ return true }\n\t\tif(u !== o['<'] && t <= o['<']){ return true }\n\t\treturn false;\n\t}\n\tType.text.hash = Type.text.hash || function(s, c){ // via SO\n\t\tDEP('text.hash');\n\t\tif(typeof s !== 'string'){ return }\n\t c = c || 0;\n\t if(!s.length){ return c }\n\t for(var i=0,l=s.length,n; i B){ return 1 }\n\t\t\telse { return 0 }\n\t\t}\n\t}\n\tType.list.map = Type.list.map || function(l, c, _){ DEP('list.map'); return obj_map(l, c, _) }\n\tType.list.index = 1; // change this to 0 if you want non-logical, non-mathematical, non-matrix, non-convenient array notation\n\tType.obj = Type.boj || {is: function(o){ DEP('obj'); return o? (o instanceof Object && o.constructor === Object) || Object.prototype.toString.call(o).match(/^\\[object (\\w+)\\]$/)[1] === 'Object' : false }}\n\tType.obj.put = Type.obj.put || function(o, k, v){ DEP('obj.put'); return (o||{})[k] = v, o }\n\tType.obj.has = Type.obj.has || function(o, k){ DEP('obj.has'); return o && Object.prototype.hasOwnProperty.call(o, k) }\n\tType.obj.del = Type.obj.del || function(o, k){ DEP('obj.del'); \n\t\tif(!o){ return }\n\t\to[k] = null;\n\t\tdelete o[k];\n\t\treturn o;\n\t}\n\tType.obj.as = Type.obj.as || function(o, k, v, u){ DEP('obj.as'); return o[k] = o[k] || (u === v? {} : v) }\n\tType.obj.ify = Type.obj.ify || function(o){ DEP('obj.ify'); \n\t\tif(obj_is(o)){ return o }\n\t\ttry{o = JSON.parse(o);\n\t\t}catch(e){o={}};\n\t\treturn o;\n\t}\n\t;(function(){ var u;\n\t\tfunction map(v,k){\n\t\t\tif(obj_has(this,k) && u !== this[k]){ return }\n\t\t\tthis[k] = v;\n\t\t}\n\t\tType.obj.to = Type.obj.to || function(from, to){ DEP('obj.to'); \n\t\t\tto = to || {};\n\t\t\tobj_map(from, map, to);\n\t\t\treturn to;\n\t\t}\n\t}());\n\tType.obj.copy = Type.obj.copy || function(o){ DEP('obj.copy'); // because http://web.archive.org/web/20140328224025/http://jsperf.com/cloning-an-object/2\n\t\treturn !o? o : JSON.parse(JSON.stringify(o)); // is shockingly faster than anything else, and our data has to be a subset of JSON anyways!\n\t}\n\t;(function(){\n\t\tfunction empty(v,i){ var n = this.n, u;\n\t\t\tif(n && (i === n || (obj_is(n) && obj_has(n, i)))){ return }\n\t\t\tif(u !== i){ return true }\n\t\t}\n\t\tType.obj.empty = Type.obj.empty || function(o, n){ DEP('obj.empty'); \n\t\t\tif(!o){ return true }\n\t\t\treturn obj_map(o,empty,{n:n})? false : true;\n\t\t}\n\t}());\n\t;(function(){\n\t\tfunction t(k,v){\n\t\t\tif(2 === arguments.length){\n\t\t\t\tt.r = t.r || {};\n\t\t\t\tt.r[k] = v;\n\t\t\t\treturn;\n\t\t\t} t.r = t.r || [];\n\t\t\tt.r.push(k);\n\t\t};\n\t\tvar keys = Object.keys, map, u;\n\t\tObject.keys = Object.keys || function(o){ return map(o, function(v,k,t){t(k)}) }\n\t\tType.obj.map = map = Type.obj.map || function(l, c, _){ DEP('obj.map'); \n\t\t\tvar u, i = 0, x, r, ll, lle, f = 'function' == typeof c;\n\t\t\tt.r = u;\n\t\t\tif(keys && obj_is(l)){\n\t\t\t\tll = keys(l); lle = true;\n\t\t\t}\n\t\t\t_ = _ || {};\n\t\t\tif(list_is(l) || ll){\n\t\t\t\tx = (ll || l).length;\n\t\t\t\tfor(;i < x; i++){\n\t\t\t\t\tvar ii = (i + Type.list.index);\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tr = lle? c.call(_, l[ll[i]], ll[i], t) : c.call(_, l[i], ii, t);\n\t\t\t\t\t\tif(r !== u){ return r }\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if(Type.test.is(c,l[i])){ return ii } // should implement deep equality testing!\n\t\t\t\t\t\tif(c === l[lle? ll[i] : i]){ return ll? ll[i] : ii } // use this for now\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor(i in l){\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tif(obj_has(l,i)){\n\t\t\t\t\t\t\tr = _? c.call(_, l[i], i, t) : c(l[i], i, t);\n\t\t\t\t\t\t\tif(r !== u){ return r }\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if(a.test.is(c,l[i])){ return i } // should implement deep equality testing!\n\t\t\t\t\t\tif(c === l[i]){ return i } // use this for now\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn f? t.r : Type.list.index? 0 : -1;\n\t\t}\n\t}());\n\tType.time = Type.time || {};\n\tType.time.is = Type.time.is || function(t){ DEP('time'); return t? t instanceof Date : (+new Date().getTime()) }\n\n\tvar fn_is = Type.fn.is;\n\tvar list_is = Type.list.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_has = obj.has, obj_map = obj.map;\n\n\tvar Val = {};\n\tVal.is = function(v){ DEP('val.is'); // Valid values are a subset of JSON: null, binary, number (!Infinity), text, or a soul relation. Arrays need special algorithms to handle concurrency, so they are not supported directly. Use an extension that supports them if needed but research their problems first.\n\t\tif(v === u){ return false }\n\t\tif(v === null){ return true } // \"deletes\", nulling out keys.\n\t\tif(v === Infinity){ return false } // we want this to be, but JSON does not support it, sad face.\n\t\tif(text_is(v) // by \"text\" we mean strings.\n\t\t|| bi_is(v) // by \"binary\" we mean boolean.\n\t\t|| num_is(v)){ // by \"number\" we mean integers or decimals.\n\t\t\treturn true; // simple values are valid.\n\t\t}\n\t\treturn Val.link.is(v) || false; // is the value a soul relation? Then it is valid and return it. If not, everything else remaining is an invalid data type. Custom extensions can be built on top of these primitives to support other types.\n\t}\n\tVal.link = Val.rel = {_: '#'};\n\t;(function(){\n\t\tVal.link.is = function(v){ DEP('val.link.is'); // this defines whether an object is a soul relation or not, they look like this: {'#': 'UUID'}\n\t\t\tif(v && v[rel_] && !v._ && obj_is(v)){ // must be an object.\n\t\t\t\tvar o = {};\n\t\t\t\tobj_map(v, map, o);\n\t\t\t\tif(o.id){ // a valid id was found.\n\t\t\t\t\treturn o.id; // yay! Return it.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false; // the value was not a valid soul relation.\n\t\t}\n\t\tfunction map(s, k){ var o = this; // map over the object...\n\t\t\tif(o.id){ return o.id = false } // if ID is already defined AND we're still looping through the object, it is considered invalid.\n\t\t\tif(k == rel_ && text_is(s)){ // the key should be '#' and have a text value.\n\t\t\t\to.id = s; // we found the soul!\n\t\t\t} else {\n\t\t\t\treturn o.id = false; // if there exists anything else on the object that isn't the soul, then it is considered invalid.\n\t\t\t}\n\t\t}\n\t}());\n\tVal.link.ify = function(t){ DEP('val.link.ify'); return obj_put({}, rel_, t) } // convert a soul into a relation and return it.\n\tType.obj.has._ = '.';\n\tvar rel_ = Val.link._, u;\n\tvar bi_is = Type.bi.is;\n\tvar num_is = Type.num.is;\n\tvar text_is = Type.text.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_put = obj.put, obj_map = obj.map;\n\n\tType.val = Type.val || Val;\n\n\tvar Node = {_: '_'};\n\tNode.soul = function(n, o){ DEP('node.soul'); return (n && n._ && n._[o || soul_]) } // convenience function to check to see if there is a soul on a node and return it.\n\tNode.soul.ify = function(n, o){ DEP('node.soul.ify'); // put a soul on an object.\n\t\to = (typeof o === 'string')? {soul: o} : o || {};\n\t\tn = n || {}; // make sure it exists.\n\t\tn._ = n._ || {}; // make sure meta exists.\n\t\tn._[soul_] = o.soul || n._[soul_] || text_random(); // put the soul on it.\n\t\treturn n;\n\t}\n\tNode.soul._ = Val.link._;\n\t;(function(){\n\t\tNode.is = function(n, cb, as){ DEP('node.is'); var s; // checks to see if an object is a valid node.\n\t\t\tif(!obj_is(n)){ return false } // must be an object.\n\t\t\tif(s = Node.soul(n)){ // must have a soul on it.\n\t\t\t\treturn !obj_map(n, map, {as:as,cb:cb,s:s,n:n});\n\t\t\t}\n\t\t\treturn false; // nope! This was not a valid node.\n\t\t}\n\t\tfunction map(v, k){ // we invert this because the way we check for this is via a negation.\n\t\t\tif(k === Node._){ return } // skip over the metadata.\n\t\t\tif(!Val.is(v)){ return true } // it is true that this is an invalid node.\n\t\t\tif(this.cb){ this.cb.call(this.as, v, k, this.n, this.s) } // optionally callback each key/value.\n\t\t}\n\t}());\n\t;(function(){\n\t\tNode.ify = function(obj, o, as){ DEP('node.ify'); // returns a node from a shallow object.\n\t\t\tif(!o){ o = {} }\n\t\t\telse if(typeof o === 'string'){ o = {soul: o} }\n\t\t\telse if('function' == typeof o){ o = {map: o} }\n\t\t\tif(o.map){ o.node = o.map.call(as, obj, u, o.node || {}) }\n\t\t\tif(o.node = Node.soul.ify(o.node || {}, o)){\n\t\t\t\tobj_map(obj, map, {o:o,as:as});\n\t\t\t}\n\t\t\treturn o.node; // This will only be a valid node if the object wasn't already deep!\n\t\t}\n\t\tfunction map(v, k){ var o = this.o, tmp, u; // iterate over each key/value.\n\t\t\tif(o.map){\n\t\t\t\ttmp = o.map.call(this.as, v, ''+k, o.node);\n\t\t\t\tif(u === tmp){\n\t\t\t\t\tobj_del(o.node, k);\n\t\t\t\t} else\n\t\t\t\tif(o.node){ o.node[k] = tmp }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(Val.is(v)){\n\t\t\t\to.node[k] = v;\n\t\t\t}\n\t\t}\n\t}());\n\tvar obj = Type.obj, obj_is = obj.is, obj_del = obj.del, obj_map = obj.map;\n\tvar text = Type.text, text_random = text.random;\n\tvar soul_ = Node.soul._;\n\tvar u;\n\tType.node = Type.node || Node;\n\n\tvar State = Type.state;\n\tState.lex = function(){ DEP('state.lex'); return State().toString(36).replace('.','') }\n\tState.to = function(from, k, to){ DEP('state.to'); \n\t\tvar val = (from||{})[k];\n\t\tif(obj_is(val)){\n\t\t\tval = obj_copy(val);\n\t\t}\n\t\treturn State.ify(to, k, State.is(from, k), val, Node.soul(from));\n\t}\n\t;(function(){\n\t\tState.map = function(cb, s, as){ DEP('state.map'); var u; // for use with Node.ify\n\t\t\tvar o = obj_is(o = cb || s)? o : null;\n\t\t\tcb = fn_is(cb = cb || s)? cb : null;\n\t\t\tif(o && !cb){\n\t\t\t\ts = num_is(s)? s : State();\n\t\t\t\to[N_] = o[N_] || {};\n\t\t\t\tobj_map(o, map, {o:o,s:s});\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tas = as || obj_is(s)? s : u;\n\t\t\ts = num_is(s)? s : State();\n\t\t\treturn function(v, k, o, opt){\n\t\t\t\tif(!cb){\n\t\t\t\t\tmap.call({o: o, s: s}, v,k);\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\tcb.call(as || this || {}, v, k, o, opt);\n\t\t\t\tif(obj_has(o,k) && u === o[k]){ return }\n\t\t\t\tmap.call({o: o, s: s}, v,k);\n\t\t\t}\n\t\t}\n\t\tfunction map(v,k){\n\t\t\tif(N_ === k){ return }\n\t\t\tState.ify(this.o, k, this.s) ;\n\t\t}\n\t}());\n\tvar obj = Type.obj, obj_as = obj.as, obj_has = obj.has, obj_is = obj.is, obj_map = obj.map, obj_copy = obj.copy;\n\tvar num = Type.num, num_is = num.is;\n\tvar fn = Type.fn, fn_is = fn.is;\n\tvar N_ = Node._, u;\n\n\tvar Graph = {};\n\t;(function(){\n\t\tGraph.is = function(g, cb, fn, as){ DEP('graph.is'); // checks to see if an object is a valid graph.\n\t\t\tif(!g || !obj_is(g) || obj_empty(g)){ return false } // must be an object.\n\t\t\treturn !obj_map(g, map, {cb:cb,fn:fn,as:as}); // makes sure it wasn't an empty object.\n\t\t}\n\t\tfunction map(n, s){ // we invert this because the way'? we check for this is via a negation.\n\t\t\tif(!n || s !== Node.soul(n) || !Node.is(n, this.fn, this.as)){ return true } // it is true that this is an invalid graph.\n\t\t\tif(!this.cb){ return }\n\t\t\tnf.n = n; nf.as = this.as; // sequential race conditions aren't races.\n\t\t\tthis.cb.call(nf.as, n, s, nf);\n\t\t}\n\t\tfunction nf(fn){ // optional callback for each node.\n\t\t\tif(fn){ Node.is(nf.n, fn, nf.as) } // where we then have an optional callback for each key/value.\n\t\t}\n\t}());\n\t;(function(){\n\t\tGraph.ify = function(obj, env, as){ DEP('graph.ify'); \n\t\t\tvar at = {path: [], obj: obj};\n\t\t\tif(!env){\n\t\t\t\tenv = {};\n\t\t\t} else\n\t\t\tif(typeof env === 'string'){\n\t\t\t\tenv = {soul: env};\n\t\t\t} else\n\t\t\tif('function' == typeof env){\n\t\t\t\tenv.map = env;\n\t\t\t}\n\t\t\tif(typeof as === 'string'){\n\t\t\t\tenv.soul = env.soul || as;\n\t\t\t\tas = u;\n\t\t\t}\n\t\t\tif(env.soul){\n\t\t\t\tat.link = Val.link.ify(env.soul);\n\t\t\t}\n\t\t\tenv.shell = (as||{}).shell;\n\t\t\tenv.graph = env.graph || {};\n\t\t\tenv.seen = env.seen || [];\n\t\t\tenv.as = env.as || as;\n\t\t\tnode(env, at);\n\t\t\tenv.root = at.node;\n\t\t\treturn env.graph;\n\t\t}\n\t\tfunction node(env, at){ var tmp;\n\t\t\tif(tmp = seen(env, at)){ return tmp }\n\t\t\tat.env = env;\n\t\t\tat.soul = soul;\n\t\t\tif(Node.ify(at.obj, map, at)){\n\t\t\t\tat.link = at.link || Val.link.ify(Node.soul(at.node));\n\t\t\t\tif(at.obj !== env.shell){\n\t\t\t\t\tenv.graph[Val.link.is(at.link)] = at.node;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn at;\n\t\t}\n\t\tfunction map(v,k,n){\n\t\t\tvar at = this, env = at.env, is, tmp;\n\t\t\tif(Node._ === k && obj_has(v,Val.link._)){\n\t\t\t\treturn n._; // TODO: Bug?\n\t\t\t}\n\t\t\tif(!(is = valid(v,k,n, at,env))){ return }\n\t\t\tif(!k){\n\t\t\t\tat.node = at.node || n || {};\n\t\t\t\tif(obj_has(v, Node._) && Node.soul(v)){ // ? for safety ?\n\t\t\t\t\tat.node._ = obj_copy(v._);\n\t\t\t\t}\n\t\t\t\tat.node = Node.soul.ify(at.node, Val.link.is(at.link));\n\t\t\t\tat.link = at.link || Val.link.ify(Node.soul(at.node));\n\t\t\t}\n\t\t\tif(tmp = env.map){\n\t\t\t\ttmp.call(env.as || {}, v,k,n, at);\n\t\t\t\tif(obj_has(n,k)){\n\t\t\t\t\tv = n[k];\n\t\t\t\t\tif(u === v){\n\t\t\t\t\t\tobj_del(n, k);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(!(is = valid(v,k,n, at,env))){ return }\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!k){ return at.node }\n\t\t\tif(true === is){\n\t\t\t\treturn v;\n\t\t\t}\n\t\t\ttmp = node(env, {obj: v, path: at.path.concat(k)});\n\t\t\tif(!tmp.node){ return }\n\t\t\treturn tmp.link; //{'#': Node.soul(tmp.node)};\n\t\t}\n\t\tfunction soul(id){ var at = this;\n\t\t\tvar prev = Val.link.is(at.link), graph = at.env.graph;\n\t\t\tat.link = at.link || Val.link.ify(id);\n\t\t\tat.link[Val.link._] = id;\n\t\t\tif(at.node && at.node[Node._]){\n\t\t\t\tat.node[Node._][Val.link._] = id;\n\t\t\t}\n\t\t\tif(obj_has(graph, prev)){\n\t\t\t\tgraph[id] = graph[prev];\n\t\t\t\tobj_del(graph, prev);\n\t\t\t}\n\t\t}\n\t\tfunction valid(v,k,n, at,env){ var tmp;\n\t\t\tif(Val.is(v)){ return true }\n\t\t\tif(obj_is(v)){ return 1 }\n\t\t\tif(tmp = env.invalid){\n\t\t\t\tv = tmp.call(env.as || {}, v,k,n);\n\t\t\t\treturn valid(v,k,n, at,env);\n\t\t\t}\n\t\t\tenv.err = \"Invalid value at '\" + at.path.concat(k).join('.') + \"'!\";\n\t\t\tif(Type.list.is(v)){ env.err += \" Use `.set(item)` instead of an Array.\" }\n\t\t}\n\t\tfunction seen(env, at){\n\t\t\tvar arr = env.seen, i = arr.length, has;\n\t\t\twhile(i--){ has = arr[i];\n\t\t\t\tif(at.obj === has.obj){ return has }\n\t\t\t}\n\t\t\tarr.push(at);\n\t\t}\n\t}());\n\tGraph.node = function(node){ DEP('graph.node'); \n\t\tvar soul = Node.soul(node);\n\t\tif(!soul){ return }\n\t\treturn obj_put({}, soul, node);\n\t}\n\t;(function(){\n\t\tGraph.to = function(graph, root, opt){ DEP('graph.to'); \n\t\t\tif(!graph){ return }\n\t\t\tvar obj = {};\n\t\t\topt = opt || {seen: {}};\n\t\t\tobj_map(graph[root], map, {obj:obj, graph: graph, opt: opt});\n\t\t\treturn obj;\n\t\t}\n\t\tfunction map(v,k){ var tmp, obj;\n\t\t\tif(Node._ === k){\n\t\t\t\tif(obj_empty(v, Val.link._)){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.obj[k] = obj_copy(v);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!(tmp = Val.link.is(v))){\n\t\t\t\tthis.obj[k] = v;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(obj = this.opt.seen[tmp]){\n\t\t\t\tthis.obj[k] = obj;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.obj[k] = this.opt.seen[tmp] = Graph.to(this.graph, tmp, this.opt);\n\t\t}\n\t}());\n\tvar fn_is = Type.fn.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_del = obj.del, obj_has = obj.has, obj_empty = obj.empty, obj_put = obj.put, obj_map = obj.map, obj_copy = obj.copy;\n\tvar u;\n\tType.graph = Type.graph || Graph;\n}());",";(function(){\n\n var window = this || self || window;\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n ;USE(function(module){\n // Security, Encryption, and Authorization: SEA.js\n // MANDATORY READING: https://gun.eco/explainers/data/security.html\n // IT IS IMPLEMENTED IN A POLYFILL/SHIM APPROACH.\n // THIS IS AN EARLY ALPHA!\n\n if(typeof window !== \"undefined\"){ module.window = window }\n\n var tmp = module.window || module, u;\n var SEA = tmp.SEA || {};\n\n if(SEA.window = module.window){ SEA.window.SEA = SEA }\n\n try{ if(u+'' !== typeof MODULE){ MODULE.exports = SEA } }catch(e){}\n module.exports = SEA;\n })(USE, './root');\n\n ;USE(function(module){\n var SEA = USE('./root');\n try{ if(SEA.window){\n if(location.protocol.indexOf('s') < 0\n && location.host.indexOf('localhost') < 0\n && ! /^127\\.\\d+\\.\\d+\\.\\d+$/.test(location.hostname)\n && location.protocol.indexOf('file:') < 0){\n console.warn('HTTPS needed for WebCrypto in SEA, redirecting...');\n location.protocol = 'https:'; // WebCrypto does NOT work without HTTPS!\n }\n } }catch(e){}\n })(USE, './https');\n\n ;USE(function(module){\n var u;\n if(u+''== typeof btoa){\n if(u+'' == typeof Buffer){\n try{ global.Buffer = USE(\"buffer\", 1).Buffer }catch(e){ console.log(\"Please `npm install buffer` or add it to your package.json !\") }\n }\n global.btoa = function(data){ return Buffer.from(data, \"binary\").toString(\"base64\") };\n global.atob = function(data){ return Buffer.from(data, \"base64\").toString(\"binary\") };\n }\n })(USE, './base64');\n\n ;USE(function(module){\n USE('./base64');\n // This is Array extended to have .toString(['utf8'|'hex'|'base64'])\n function SeaArray() {}\n Object.assign(SeaArray, { from: Array.from })\n SeaArray.prototype = Object.create(Array.prototype)\n SeaArray.prototype.toString = function(enc, start, end) { enc = enc || 'utf8'; start = start || 0;\n const length = this.length\n if (enc === 'hex') {\n const buf = new Uint8Array(this)\n return [ ...Array(((end && (end + 1)) || length) - start).keys()]\n .map((i) => buf[ i + start ].toString(16).padStart(2, '0')).join('')\n }\n if (enc === 'utf8') {\n return Array.from(\n { length: (end || length) - start },\n (_, i) => String.fromCharCode(this[ i + start])\n ).join('')\n }\n if (enc === 'base64') {\n return btoa(this)\n }\n }\n module.exports = SeaArray;\n })(USE, './array');\n\n ;USE(function(module){\n USE('./base64');\n // This is Buffer implementation used in SEA. Functionality is mostly\n // compatible with NodeJS 'safe-buffer' and is used for encoding conversions\n // between binary and 'hex' | 'utf8' | 'base64'\n // See documentation and validation for safe implementation in:\n // https://github.com/feross/safe-buffer#update\n var SeaArray = USE('./array');\n function SafeBuffer(...props) {\n console.warn('new SafeBuffer() is depreciated, please use SafeBuffer.from()')\n return SafeBuffer.from(...props)\n }\n SafeBuffer.prototype = Object.create(Array.prototype)\n Object.assign(SafeBuffer, {\n // (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'\n from() {\n if (!Object.keys(arguments).length || arguments[0]==null) {\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n }\n const input = arguments[0]\n let buf\n if (typeof input === 'string') {\n const enc = arguments[1] || 'utf8'\n if (enc === 'hex') {\n const bytes = input.match(/([\\da-fA-F]{2})/g)\n .map((byte) => parseInt(byte, 16))\n if (!bytes || !bytes.length) {\n throw new TypeError('Invalid first argument for type \\'hex\\'.')\n }\n buf = SeaArray.from(bytes)\n } else if (enc === 'utf8' || 'binary' === enc) { // EDIT BY MARK: I think this is safe, tested it against a couple \"binary\" strings. This lets SafeBuffer match NodeJS Buffer behavior more where it safely btoas regular strings.\n const length = input.length\n const words = new Uint16Array(length)\n Array.from({ length: length }, (_, i) => words[i] = input.charCodeAt(i))\n buf = SeaArray.from(words)\n } else if (enc === 'base64') {\n const dec = atob(input)\n const length = dec.length\n const bytes = new Uint8Array(length)\n Array.from({ length: length }, (_, i) => bytes[i] = dec.charCodeAt(i))\n buf = SeaArray.from(bytes)\n } else if (enc === 'binary') { // deprecated by above comment\n buf = SeaArray.from(input) // some btoas were mishandled.\n } else {\n console.info('SafeBuffer.from unknown encoding: '+enc)\n }\n return buf\n }\n const byteLength = input.byteLength // what is going on here? FOR MARTTI\n const length = input.byteLength ? input.byteLength : input.length\n if (length) {\n let buf\n if (input instanceof ArrayBuffer) {\n buf = new Uint8Array(input)\n }\n return SeaArray.from(buf || input)\n }\n },\n // This is 'safe-buffer.alloc' sans encoding support\n alloc(length, fill = 0 /*, enc*/ ) {\n return SeaArray.from(new Uint8Array(Array.from({ length: length }, () => fill)))\n },\n // This is normal UNSAFE 'buffer.alloc' or 'new Buffer(length)' - don't use!\n allocUnsafe(length) {\n return SeaArray.from(new Uint8Array(Array.from({ length : length })))\n },\n // This puts together array of array like members\n concat(arr) { // octet array\n if (!Array.isArray(arr)) {\n throw new TypeError('First argument must be Array containing ArrayBuffer or Uint8Array instances.')\n }\n return SeaArray.from(arr.reduce((ret, item) => ret.concat(Array.from(item)), []))\n }\n })\n SafeBuffer.prototype.from = SafeBuffer.from\n SafeBuffer.prototype.toString = SeaArray.prototype.toString\n\n module.exports = SafeBuffer;\n })(USE, './buffer');\n\n ;USE(function(module){\n const SEA = USE('./root')\n const api = {Buffer: USE('./buffer')}\n var o = {}, u;\n\n // ideally we can move away from JSON entirely? unlikely due to compatibility issues... oh well.\n JSON.parseAsync = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n JSON.stringifyAsync = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n api.parse = function(t,r){ return new Promise(function(res, rej){\n JSON.parseAsync(t,function(err, raw){ err? rej(err) : res(raw) },r);\n })}\n api.stringify = function(v,r,s){ return new Promise(function(res, rej){\n JSON.stringifyAsync(v,function(err, raw){ err? rej(err) : res(raw) },r,s);\n })}\n\n if(SEA.window){\n api.crypto = window.crypto || window.msCrypto\n api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;\n api.TextEncoder = window.TextEncoder;\n api.TextDecoder = window.TextDecoder;\n api.random = (len) => api.Buffer.from(api.crypto.getRandomValues(new Uint8Array(api.Buffer.alloc(len))));\n }\n if(!api.TextDecoder)\n {\n const { TextEncoder, TextDecoder } = USE((u+'' == typeof MODULE?'.':'')+'./lib/text-encoding', 1);\n api.TextDecoder = TextDecoder;\n api.TextEncoder = TextEncoder;\n }\n if(!api.crypto)\n {\n try\n {\n var crypto = USE('crypto', 1);\n Object.assign(api, {\n crypto,\n random: (len) => api.Buffer.from(crypto.randomBytes(len))\n }); \n const { Crypto: WebCrypto } = USE('@peculiar/webcrypto', 1);\n api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH\n }\n catch(e){\n console.log(\"Please `npm install @peculiar/webcrypto` or add it to your package.json !\");\n }}\n\n module.exports = api\n })(USE, './shim');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var s = {};\n s.pbkdf2 = {hash: {name : 'SHA-256'}, iter: 100000, ks: 64};\n s.ecdsa = {\n pair: {name: 'ECDSA', namedCurve: 'P-256'},\n sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}\n };\n s.ecdh = {name: 'ECDH', namedCurve: 'P-256'};\n\n // This creates Web Cryptography API compliant JWK for sign/verify purposes\n s.jwk = function(pub, d){ // d === priv\n pub = pub.split('.');\n var x = pub[0], y = pub[1];\n var jwk = {kty: \"EC\", crv: \"P-256\", x: x, y: y, ext: true};\n jwk.key_ops = d ? ['sign'] : ['verify'];\n if(d){ jwk.d = d }\n return jwk;\n };\n \n s.keyToJwk = function(keyBytes) {\n const keyB64 = keyBytes.toString('base64');\n const k = keyB64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=/g, '');\n return { kty: 'oct', k: k, ext: false, alg: 'A256GCM' };\n }\n\n s.recall = {\n validity: 12 * 60 * 60, // internally in seconds : 12 hours\n hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)\n };\n\n s.check = function(t){ return (typeof t == 'string') && ('SEA{' === t.slice(0,4)) }\n s.parse = async function p(t){ try {\n var yes = (typeof t == 'string');\n if(yes && 'SEA{' === t.slice(0,4)){ t = t.slice(3) }\n return yes ? await shim.parse(t) : t;\n } catch (e) {}\n return t;\n }\n\n SEA.opt = s;\n module.exports = s\n })(USE, './settings');\n\n ;USE(function(module){\n var shim = USE('./shim');\n module.exports = async function(d, o){\n var t = (typeof d == 'string')? d : await shim.stringify(d);\n var hash = await shim.subtle.digest({name: o||'SHA-256'}, new shim.TextEncoder().encode(t));\n return shim.Buffer.from(hash);\n }\n })(USE, './sha256');\n\n ;USE(function(module){\n // This internal func returns SHA-1 hashed data for KeyID generation\n const __shim = USE('./shim')\n const subtle = __shim.subtle\n const ossl = __shim.ossl ? __shim.ossl : subtle\n const sha1hash = (b) => ossl.digest({name: 'SHA-1'}, new ArrayBuffer(b))\n module.exports = sha1hash\n })(USE, './sha1');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.work = SEA.work || (async (data, pair, cb, opt) => { try { // used to be named `proof`\n var salt = (pair||{}).epub || pair; // epub not recommended, salt should be random!\n opt = opt || {};\n if(salt instanceof Function){\n cb = salt;\n salt = u;\n }\n data = (typeof data == 'string')? data : await shim.stringify(data);\n if('sha' === (opt.name||'').toLowerCase().slice(0,3)){\n var rsha = shim.Buffer.from(await sha(data, opt.name), 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(rsha) }catch(e){console.log(e)} }\n return rsha;\n }\n salt = salt || shim.random(9);\n var key = await (shim.ossl || shim.subtle).importKey('raw', new shim.TextEncoder().encode(data), {name: opt.name || 'PBKDF2'}, false, ['deriveBits']);\n var work = await (shim.ossl || shim.subtle).deriveBits({\n name: opt.name || 'PBKDF2',\n iterations: opt.iterations || S.pbkdf2.iter,\n salt: new shim.TextEncoder().encode(opt.salt || salt),\n hash: opt.hash || S.pbkdf2.hash,\n }, key, opt.length || (S.pbkdf2.ks * 8))\n data = shim.random(data.length) // Erase data in case of passphrase\n var r = shim.Buffer.from(work, 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.work;\n })(USE, './work');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n\n SEA.name = SEA.name || (async (cb, opt) => { try {\n if(cb){ try{ cb() }catch(e){console.log(e)} }\n return;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n //SEA.pair = async (data, proof, cb) => { try {\n SEA.pair = SEA.pair || (async (cb, opt) => { try {\n\n var ecdhSubtle = shim.ossl || shim.subtle;\n // First: ECDSA keys for signing/verifying...\n var sa = await shim.subtle.generateKey({name: 'ECDSA', namedCurve: 'P-256'}, true, [ 'sign', 'verify' ])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n //const { d: priv } = await shim.subtle.exportKey('jwk', keys.privateKey)\n var key = {};\n key.priv = (await shim.subtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await shim.subtle.exportKey('jwk', keys.publicKey);\n //const pub = Buff.from([ x, y ].join(':')).toString('base64') // old\n key.pub = pub.x+'.'+pub.y; // new\n // x and y are already base64\n // pub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n \n // To include PGPv4 kind of keyId:\n // const pubId = await SEA.keyid(keys.pub)\n // Next: ECDH keys for encryption/decryption...\n\n try{\n var dh = await ecdhSubtle.generateKey({name: 'ECDH', namedCurve: 'P-256'}, true, ['deriveKey'])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n var key = {};\n key.epriv = (await ecdhSubtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await ecdhSubtle.exportKey('jwk', keys.publicKey);\n //const epub = Buff.from([ ex, ey ].join(':')).toString('base64') // old\n key.epub = pub.x+'.'+pub.y; // new\n // ex and ey are already base64\n // epub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n }catch(e){\n if(SEA.window){ throw e }\n if(e == 'Error: ECDH is not a supported algorithm'){ console.log('Ignoring ECDH...') }\n else { throw e }\n } dh = dh || {};\n\n var r = { pub: sa.pub, priv: sa.priv, /* pubId, */ epub: dh.epub, epriv: dh.epriv }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.pair;\n })(USE, './pair');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.sign = SEA.sign || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n if(!(pair||opt).priv){\n if(!SEA.I){ throw 'No signing key.' }\n pair = await SEA.I(null, {what: data, how: 'sign', why: opt.why});\n }\n if(u === data){ throw '`undefined` not allowed.' }\n var json = await S.parse(data);\n var check = opt.check = opt.check || json;\n if(SEA.verify && (SEA.opt.check(check) || (check && check.s && check.m))\n && u !== await SEA.verify(check, pair)){ // don't sign if we already signed it.\n var r = await S.parse(check);\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n var pub = pair.pub;\n var priv = pair.priv;\n var jwk = S.jwk(pub, priv);\n var hash = await sha(json);\n var sig = await (shim.ossl || shim.subtle).importKey('jwk', jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, ['sign'])\n .then((key) => (shim.ossl || shim.subtle).sign({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, new Uint8Array(hash))) // privateKey scope doesn't leak out from here!\n var r = {m: json, s: shim.Buffer.from(sig, 'binary').toString(opt.encode || 'base64')}\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.sign;\n })(USE, './sign');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.verify = SEA.verify || (async (data, pair, cb, opt) => { try {\n var json = await S.parse(data);\n if(false === pair){ // don't verify!\n var raw = await S.parse(json.m);\n if(cb){ try{ cb(raw) }catch(e){console.log(e)} }\n return raw;\n }\n opt = opt || {};\n // SEA.I // verify is free! Requires no user permission.\n var pub = pair.pub || pair;\n var key = SEA.opt.slow_leak? await SEA.opt.slow_leak(pub) : await (shim.ossl || shim.subtle).importKey('jwk', S.jwk(pub), {name: 'ECDSA', namedCurve: 'P-256'}, false, ['verify']);\n var hash = await sha(json.m);\n var buf, sig, check, tmp; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64'); // NEW DEFAULT!\n sig = new Uint8Array(buf);\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash));\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){\n if(SEA.opt.fallback){\n return await SEA.opt.fall_verify(data, pair, cb, opt);\n }\n }\n var r = check? await S.parse(json.m) : u;\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e); // mismatched owner FOR MARTTI\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.verify;\n // legacy & ossl memory leak mitigation:\n\n var knownKeys = {};\n var keyForPair = SEA.opt.slow_leak = pair => {\n if (knownKeys[pair]) return knownKeys[pair];\n var jwk = S.jwk(pair);\n knownKeys[pair] = (shim.ossl || shim.subtle).importKey(\"jwk\", jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, [\"verify\"]);\n return knownKeys[pair];\n };\n\n var O = SEA.opt;\n SEA.opt.fall_verify = async function(data, pair, cb, opt, f){\n if(f === SEA.opt.fallback){ throw \"Signature did not match\" } f = f || 1;\n var tmp = data||'';\n data = SEA.opt.unpack(data) || data;\n var json = await S.parse(data), pub = pair.pub || pair, key = await SEA.opt.slow_leak(pub);\n var hash = (f <= SEA.opt.fallback)? shim.Buffer.from(await shim.subtle.digest({name: 'SHA-256'}, new shim.TextEncoder().encode(await S.parse(json.m)))) : await sha(json.m); // this line is old bad buggy code but necessary for old compatibility.\n var buf; var sig; var check; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64') // NEW DEFAULT!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){ try{\n buf = shim.Buffer.from(json.s, 'utf8') // AUTO BACKWARD OLD UTF8 DATA!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n }catch(e){\n if(!check){ throw \"Signature did not match.\" }\n }\n }\n var r = check? await S.parse(json.m) : u;\n O.fall_soul = tmp['#']; O.fall_key = tmp['.']; O.fall_val = data; O.fall_state = tmp['>'];\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n SEA.opt.fallback = 2;\n\n })(USE, './verify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha256hash = USE('./sha256');\n\n const importGen = async (key, salt, opt) => {\n //const combo = shim.Buffer.concat([shim.Buffer.from(key, 'utf8'), salt || shim.random(8)]).toString('utf8') // old\n opt = opt || {};\n const combo = key + (salt || shim.random(8)).toString('utf8'); // new\n const hash = shim.Buffer.from(await sha256hash(combo), 'binary')\n \n const jwkKey = S.keyToJwk(hash) \n return await shim.subtle.importKey('jwk', jwkKey, {name:'AES-GCM'}, false, ['encrypt', 'decrypt'])\n }\n module.exports = importGen;\n })(USE, './aeskey');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n var u;\n\n SEA.encrypt = SEA.encrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(u === data){ throw '`undefined` not allowed.' }\n if(!key){\n if(!SEA.I){ throw 'No encryption key.' }\n pair = await SEA.I(null, {what: data, how: 'encrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var msg = (typeof data == 'string')? data : await shim.stringify(data);\n var rand = {s: shim.random(9), iv: shim.random(15)}; // consider making this 9 and 15 or 18 or 12 to reduce == padding.\n var ct = await aeskey(key, rand.s, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).encrypt({ // Keeping the AES key scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(rand.iv)\n }, aes, new shim.TextEncoder().encode(msg)));\n var r = {\n ct: shim.Buffer.from(ct, 'binary').toString(opt.encode || 'base64'),\n iv: rand.iv.toString(opt.encode || 'base64'),\n s: rand.s.toString(opt.encode || 'base64')\n }\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.encrypt;\n })(USE, './encrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n\n SEA.decrypt = SEA.decrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(!key){\n if(!SEA.I){ throw 'No decryption key.' }\n pair = await SEA.I(null, {what: data, how: 'decrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var json = await S.parse(data);\n var buf, bufiv, bufct; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64');\n bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');\n bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');\n var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv), tagLength: 128\n }, aes, new Uint8Array(bufct)));\n }catch(e){\n if('utf8' === opt.encode){ throw \"Could not decrypt\" }\n if(SEA.opt.fallback){\n opt.encode = 'utf8';\n return await SEA.decrypt(data, pair, cb, opt);\n }\n }\n var r = await S.parse(new shim.TextDecoder('utf8').decode(ct));\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.decrypt;\n })(USE, './decrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n // Derive shared secret from other's pub and my epub/epriv \n SEA.secret = SEA.secret || (async (key, pair, cb, opt) => { try {\n opt = opt || {};\n if(!pair || !pair.epriv || !pair.epub){\n if(!SEA.I){ throw 'No secret mix.' }\n pair = await SEA.I(null, {what: key, how: 'secret', why: opt.why});\n }\n var pub = key.epub || key;\n var epub = pair.epub;\n var epriv = pair.epriv;\n var ecdhSubtle = shim.ossl || shim.subtle;\n var pubKeyData = keysToEcdhJwk(pub);\n var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },{name: 'ECDH', namedCurve: 'P-256'}); // Thanks to @sirpy !\n var privKeyData = keysToEcdhJwk(epub, epriv);\n var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveBits']).then(async (privKey) => {\n // privateKey scope doesn't leak out from here!\n var derivedBits = await ecdhSubtle.deriveBits(props, privKey, 256);\n var rawBits = new Uint8Array(derivedBits);\n var derivedKey = await ecdhSubtle.importKey('raw', rawBits,{ name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);\n return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);\n })\n var r = derived;\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n // can this be replaced with settings.jwk?\n var keysToEcdhJwk = (pub, d) => { // d === priv\n //var [ x, y ] = shim.Buffer.from(pub, 'base64').toString('utf8').split(':') // old\n var [ x, y ] = pub.split('.') // new\n var jwk = d ? { d: d } : {}\n return [ // Use with spread returned value...\n 'jwk',\n Object.assign(\n jwk,\n { x: x, y: y, kty: 'EC', crv: 'P-256', ext: true }\n ), // ??? refactor\n {name: 'ECDH', namedCurve: 'P-256'}\n ]\n }\n\n module.exports = SEA.secret;\n })(USE, './secret');\n\n ;USE(function(module){\n var SEA = USE('./root');\n // This is to certify that a group of \"certificants\" can \"put\" anything at a group of matched \"paths\" to the certificate authority's graph\n SEA.certify = SEA.certify || (async (certificants, policy = {}, authority, cb, opt = {}) => { try {\n /*\n The Certify Protocol was made out of love by a Vietnamese code enthusiast. Vietnamese people around the world deserve respect!\n IMPORTANT: A Certificate is like a Signature. No one knows who (authority) created/signed a cert until you put it into their graph.\n \"certificants\": '*' or a String (Bob.pub) || an Object that contains \"pub\" as a key || an array of [object || string]. These people will have the rights.\n \"policy\": A string ('inbox'), or a RAD/LEX object {'*': 'inbox'}, or an Array of RAD/LEX objects or strings. RAD/LEX object can contain key \"?\" with indexOf(\"*\") > -1 to force key equals certificant pub. This rule is used to check against soul+'/'+key using Gun.text.match or String.match.\n \"authority\": Key pair or priv of the certificate authority.\n \"cb\": A callback function after all things are done.\n \"opt\": If opt.expiry (a timestamp) is set, SEA won't sync data after opt.expiry. If opt.block is set, SEA will look for block before syncing.\n */\n console.log('SEA.certify() is an early experimental community supported method that may change API behavior without warning in any future version.')\n\n certificants = (() => {\n var data = []\n if (certificants) {\n if ((typeof certificants === 'string' || Array.isArray(certificants)) && certificants.indexOf('*') > -1) return '*'\n if (typeof certificants === 'string') return certificants\n if (Array.isArray(certificants)) {\n if (certificants.length === 1 && certificants[0]) return typeof certificants[0] === 'object' && certificants[0].pub ? certificants[0].pub : typeof certificants[0] === 'string' ? certificants[0] : null\n certificants.map(certificant => {\n if (typeof certificant ==='string') data.push(certificant)\n else if (typeof certificant === 'object' && certificant.pub) data.push(certificant.pub)\n })\n }\n\n if (typeof certificants === 'object' && certificants.pub) return certificants.pub\n return data.length > 0 ? data : null\n }\n return\n })()\n\n if (!certificants) return console.log(\"No certificant found.\")\n\n const expiry = opt.expiry && (typeof opt.expiry === 'number' || typeof opt.expiry === 'string') ? parseFloat(opt.expiry) : null\n const readPolicy = (policy || {}).read ? policy.read : null\n const writePolicy = (policy || {}).write ? policy.write : typeof policy === 'string' || Array.isArray(policy) || policy[\"+\"] || policy[\"#\"] || policy[\".\"] || policy[\"=\"] || policy[\"*\"] || policy[\">\"] || policy[\"<\"] ? policy : null\n // The \"blacklist\" feature is now renamed to \"block\". Why ? BECAUSE BLACK LIVES MATTER!\n // We can now use 3 keys: block, blacklist, ban\n const block = (opt || {}).block || (opt || {}).blacklist || (opt || {}).ban || {}\n const readBlock = block.read && (typeof block.read === 'string' || (block.read || {})['#']) ? block.read : null\n const writeBlock = typeof block === 'string' ? block : block.write && (typeof block.write === 'string' || block.write['#']) ? block.write : null\n\n if (!readPolicy && !writePolicy) return console.log(\"No policy found.\")\n\n // reserved keys: c, e, r, w, rb, wb\n const data = JSON.stringify({\n c: certificants,\n ...(expiry ? {e: expiry} : {}), // inject expiry if possible\n ...(readPolicy ? {r: readPolicy } : {}), // \"r\" stands for read, which means read permission.\n ...(writePolicy ? {w: writePolicy} : {}), // \"w\" stands for write, which means write permission.\n ...(readBlock ? {rb: readBlock} : {}), // inject READ block if possible\n ...(writeBlock ? {wb: writeBlock} : {}), // inject WRITE block if possible\n })\n\n const certificate = await SEA.sign(data, authority, null, {raw:1})\n\n var r = certificate\n if(!opt.raw){ r = 'SEA'+JSON.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.certify;\n })(USE, './certify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n // Practical examples about usage found in tests.\n var SEA = USE('./root');\n SEA.work = USE('./work');\n SEA.sign = USE('./sign');\n SEA.verify = USE('./verify');\n SEA.encrypt = USE('./encrypt');\n SEA.decrypt = USE('./decrypt');\n SEA.certify = USE('./certify');\n //SEA.opt.aeskey = USE('./aeskey'); // not official! // this causes problems in latest WebCrypto.\n\n SEA.random = SEA.random || shim.random;\n\n // This is Buffer used in SEA and usable from Gun/SEA application also.\n // For documentation see https://nodejs.org/api/buffer.html\n SEA.Buffer = SEA.Buffer || USE('./buffer');\n\n // These SEA functions support now ony Promises or\n // async/await (compatible) code, use those like Promises.\n //\n // Creates a wrapper library around Web Crypto API\n // for various AES, ECDSA, PBKDF2 functions we called above.\n // Calculate public key KeyID aka PGPv4 (result: 8 bytes as hex string)\n SEA.keyid = SEA.keyid || (async (pub) => {\n try {\n // base64('base64(x):base64(y)') => shim.Buffer(xy)\n const pb = shim.Buffer.concat(\n pub.replace(/-/g, '+').replace(/_/g, '/').split('.')\n .map((t) => shim.Buffer.from(t, 'base64'))\n )\n // id is PGPv4 compliant raw key\n const id = shim.Buffer.concat([\n shim.Buffer.from([0x99, pb.length / 0x100, pb.length % 0x100]), pb\n ])\n const sha1 = await sha1hash(id)\n const hash = shim.Buffer.from(sha1, 'binary')\n return hash.toString('hex', hash.length - 8) // 16-bit ID as hex\n } catch (e) {\n console.log(e)\n throw e\n }\n });\n // all done!\n // Obviously it is missing MANY necessary features. This is only an alpha release.\n // Please experiment with it, audit what I've done so far, and complain about what needs to be added.\n // SEA should be a full suite that is easy and seamless to use.\n // Again, scroll naer the top, where I provide an EXAMPLE of how to create a user and sign in.\n // Once logged in, the rest of the code you just read handled automatically signing/validating data.\n // But all other behavior needs to be equally easy, like opinionated ways of\n // Adding friends (trusted public keys), sending private messages, etc.\n // Cheers! Tell me what you think.\n ((SEA.window||{}).GUN||{}).SEA = SEA;\n\n module.exports = SEA\n // -------------- END SEA MODULES --------------------\n // -- BEGIN SEA+GUN MODULES: BUNDLED BY DEFAULT UNTIL OTHERS USE SEA ON OWN -------\n })(USE, './sea');\n\n ;USE(function(module){\n var SEA = USE('./sea'), Gun, u;\n if(SEA.window){\n Gun = SEA.window.GUN || {chain:{}};\n } else {\n Gun = USE((u+'' == typeof MODULE?'.':'')+'./gun', 1);\n }\n SEA.GUN = Gun;\n\n function User(root){ \n this._ = {$: this};\n }\n User.prototype = (function(){ function F(){}; F.prototype = Gun.chain; return new F() }()) // Object.create polyfill\n User.prototype.constructor = User;\n\n // let's extend the gun chain with a `user` function.\n // only one user can be logged in at a time, per gun instance.\n Gun.chain.user = function(pub){\n var gun = this, root = gun.back(-1), user;\n if(pub){\n pub = SEA.opt.pub((pub._||'')['#']) || pub;\n return root.get('~'+pub);\n }\n if(user = root.back('user')){ return user }\n var root = (root._), at = root, uuid = at.opt.uuid || lex;\n (at = (user = at.user = gun.chain(new User))._).opt = {};\n at.opt.uuid = function(cb){\n var id = uuid(), pub = root.user;\n if(!pub || !(pub = pub.is) || !(pub = pub.pub)){ return id }\n id = '~' + pub + '/' + id;\n if(cb && cb.call){ cb(null, id) }\n return id;\n }\n return user;\n }\n function lex(){ return Gun.state().toString(36).replace('.','') }\n Gun.User = User;\n User.GUN = Gun;\n User.SEA = Gun.SEA = SEA;\n module.exports = User;\n })(USE, './user');\n\n ;USE(function(module){\n var u, Gun = (''+u != typeof window)? (window.Gun||{chain:{}}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n Gun.chain.then = function(cb, opt){\n var gun = this, p = (new Promise(function(res, rej){\n gun.once(res, opt);\n }));\n return cb? p.then(cb) : p;\n }\n })(USE, './then');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n\n // Well first we have to actually create a user. That is what this function does.\n User.prototype.create = function(...args){\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = pair && (pair.pub || pair.epub) ? pair.pub : typeof args[0] === 'string' ? args[0] : null;\n var pass = pair && (pair.pub || pair.epub) ? pair : alias && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n cb = cb || noop;\n opt = opt || {};\n if(false !== opt.check){\n var err;\n if(!alias){ err = \"No user.\" }\n if((pass||'').length < 8){ err = \"Password too short!\" }\n if(err){\n cb({err: Gun.log(err)});\n return gun;\n }\n }\n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n var act = {}, u;\n act.a = function(pubs){\n act.pubs = pubs;\n if(pubs && !opt.already){\n // If we can enforce that a user name is already taken, it might be nice to try, but this is not guaranteed.\n var ack = {err: Gun.log('User already created!')};\n cat.ing = false;\n (cb || noop)(ack);\n gun.leave();\n return;\n }\n act.salt = String.random(64); // pseudo-randomly create a salt, then use PBKDF2 function to extend the password with it.\n SEA.work(pass, act.salt, act.b); // this will take some short amount of time to produce a proof, which slows brute force attacks.\n }\n act.b = function(proof){\n act.proof = proof;\n pair ? act.c(pair) : SEA.pair(act.c) // generate a brand new key pair or use the existing.\n }\n act.c = function(pair){\n var tmp\n act.pair = pair || {};\n if(tmp = cat.root.user){\n tmp._.sea = pair;\n tmp.is = {pub: pair.pub, epub: pair.epub, alias: alias};\n }\n // the user's public key doesn't need to be signed. But everything else needs to be signed with it! // we have now automated it! clean up these extra steps now!\n act.data = {pub: pair.pub};\n act.d();\n }\n act.d = function(){\n act.data.alias = alias;\n act.e();\n }\n act.e = function(){\n act.data.epub = act.pair.epub; \n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, act.proof, act.f, {raw:1}); // to keep the private key safe, we AES encrypt it with the proof of work!\n }\n act.f = function(auth){\n act.data.auth = JSON.stringify({ek: auth, s: act.salt}); \n act.g(act.data.auth);\n }\n act.g = function(auth){ var tmp;\n act.data.auth = act.data.auth || auth;\n root.get(tmp = '~'+act.pair.pub).put(act.data).on(act.h); // awesome, now we can actually save the user with their public key as their ID.\n var link = {}; link[tmp] = {'#': tmp}; root.get('~@'+alias).put(link).get(tmp).on(act.i); // next up, we want to associate the alias with the public key. So we add it to the alias list.\n }\n act.h = function(data, key, msg, eve){\n eve.off(); act.h.ok = 1; act.i();\n }\n act.i = function(data, key, msg, eve){\n if(eve){ act.i.ok = 1; eve.off() }\n if(!act.h.ok || !act.i.ok){ return }\n cat.ing = false;\n cb({ok: 0, pub: act.pair.pub}); // callback that the user has been created. (Note: ok = 0 because we didn't wait for disk to ack)\n if(noop === cb){ pair ? gun.auth(pair) : gun.auth(alias, pass) } // if no callback is passed, auto-login after signing up.\n }\n root.get('~@'+alias).once(act.a);\n return gun;\n }\n User.prototype.leave = function(opt, cb){\n var gun = this, user = (gun.back(-1)._).user;\n if(user){\n delete user.is;\n delete user._.is;\n delete user._.sea;\n }\n if(SEA.window){\n try{var sS = {};\n sS = window.sessionStorage;\n delete sS.recall;\n delete sS.pair;\n }catch(e){};\n }\n return gun;\n }\n })(USE, './create');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n // now that we have created a user, we want to authenticate them!\n User.prototype.auth = function(...args){ // TODO: this PR with arguments need to be cleaned up / refactored.\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = !pair && typeof args[0] === 'string' ? args[0] : null;\n var pass = (alias || (pair && !(pair.priv && pair.epriv))) && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n \n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n \n var act = {}, u, tries = 9;\n act.a = function(data){\n if(!data){ return act.b() }\n if(!data.pub){\n var tmp = []; Object.keys(data).forEach(function(k){ if('_'==k){ return } tmp.push(data[k]) })\n return act.b(tmp);\n }\n if(act.name){ return act.f(data) }\n act.c((act.data = data).auth);\n }\n act.b = function(list){\n var get = (act.list = (act.list||[]).concat(list||[])).shift();\n if(u === get){\n if(act.name){ return act.err('Your user account is not published for dApps to access, please consider syncing it online, or allowing local access by adding your device as a peer.') }\n if(alias && tries--){\n root.get('~@'+alias).once(act.a);\n return;\n }\n return act.err('Wrong user or password.') \n }\n root.get(get).once(act.a);\n }\n act.c = function(auth){\n if(u === auth){ return act.b() }\n if('string' == typeof auth){ return act.c(obj_ify(auth)) } // in case of legacy\n SEA.work(pass, (act.auth = auth).s, act.d, act.enc); // the proof of work is evidence that we've spent some time/effort trying to log in, this slows brute force.\n }\n act.d = function(proof){\n SEA.decrypt(act.auth.ek, proof, act.e, act.enc);\n }\n act.e = function(half){\n if(u === half){\n if(!act.enc){ // try old format\n act.enc = {encode: 'utf8'};\n return act.c(act.auth);\n } act.enc = null; // end backwards\n return act.b();\n }\n act.half = half;\n act.f(act.data);\n }\n act.f = function(pair){\n var half = act.half || {}, data = act.data || {};\n act.g(act.lol = {pub: pair.pub || data.pub, epub: pair.epub || data.epub, priv: pair.priv || half.priv, epriv: pair.epriv || half.epriv});\n }\n act.g = function(pair){\n if(!pair || !pair.pub || !pair.epub){ return act.b() }\n act.pair = pair;\n var user = (root._).user, at = (user._);\n var tmp = at.tag;\n var upt = at.opt;\n at = user._ = root.get('~'+pair.pub)._;\n at.opt = upt;\n // add our credentials in-memory only to our root user instance\n user.is = {pub: pair.pub, epub: pair.epub, alias: alias || pair.pub};\n at.sea = act.pair;\n cat.ing = false;\n try{if(pass && u == (obj_ify(cat.root.graph['~'+pair.pub].auth)||'')[':']){ opt.shuffle = opt.change = pass; } }catch(e){} // migrate UTF8 & Shuffle!\n opt.change? act.z() : (cb || noop)(at);\n if(SEA.window && ((gun.back('user')._).opt||opt).remember){\n // TODO: this needs to be modular.\n try{var sS = {};\n sS = window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n sS.recall = true;\n sS.pair = JSON.stringify(pair); // auth using pair is more reliable than alias/pass\n }catch(e){}\n }\n try{\n if(root._.tag.auth){ // auth handle might not be registered yet\n (root._).on('auth', at) // TODO: Deprecate this, emit on user instead! Update docs when you do.\n } else { setTimeout(function(){ (root._).on('auth', at) },1) } // if not, hackily add a timeout.\n //at.on('auth', at) // Arrgh, this doesn't work without event \"merge\" code, but \"merge\" code causes stack overflow and crashes after logging in & trying to write data.\n }catch(e){\n Gun.log(\"Your 'auth' callback crashed with:\", e);\n }\n }\n act.h = function(data){\n if(!data){ return act.b() }\n alias = data.alias\n if(!alias)\n alias = data.alias = \"~\" + pair.pub \n if(!data.auth){\n return act.g(pair);\n }\n pair = null;\n act.c((act.data = data).auth);\n }\n act.z = function(){\n // password update so encrypt private key using new pwd + salt\n act.salt = String.random(64); // pseudo-random\n SEA.work(opt.change, act.salt, act.y);\n }\n act.y = function(proof){\n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, proof, act.x, {raw:1});\n }\n act.x = function(auth){\n act.w(JSON.stringify({ek: auth, s: act.salt}));\n }\n act.w = function(auth){\n if(opt.shuffle){ // delete in future!\n console.log('migrate core account from UTF8 & shuffle');\n var tmp = {}; Object.keys(act.data).forEach(function(k){ tmp[k] = act.data[k] });\n delete tmp._;\n tmp.auth = auth;\n root.get('~'+act.pair.pub).put(tmp);\n } // end delete\n root.get('~'+act.pair.pub).get('auth').put(auth, cb || noop);\n }\n act.err = function(e){\n var ack = {err: Gun.log(e || 'User cannot be found!')};\n cat.ing = false;\n (cb || noop)(ack);\n }\n act.plugin = function(name){\n if(!(act.name = name)){ return act.err() }\n var tmp = [name];\n if('~' !== name[0]){\n tmp[1] = '~'+name;\n tmp[2] = '~@'+name;\n }\n act.b(tmp);\n }\n if(pair){\n if(pair.priv && pair.epriv)\n act.g(pair);\n else\n root.get('~'+pair.pub).once(act.h);\n } else\n if(alias){\n root.get('~@'+alias).once(act.a);\n } else\n if(!alias && !pass){\n SEA.name(act.plugin);\n }\n return gun;\n }\n function obj_ify(o){\n if('string' != typeof o){ return o }\n try{o = JSON.parse(o);\n }catch(e){o={}};\n return o;\n }\n })(USE, './auth');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN;\n User.prototype.recall = function(opt, cb){\n var gun = this, root = gun.back(-1), tmp;\n opt = opt || {};\n if(opt && opt.sessionStorage){\n if(SEA.window){\n try{\n var sS = {};\n sS = window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n if(sS){\n (root._).opt.remember = true;\n ((gun.back('user')._).opt||opt).remember = true;\n if(sS.recall || sS.pair) root.user().auth(JSON.parse(sS.pair), cb); // pair is more reliable than alias/pass\n }\n }catch(e){}\n }\n return gun;\n }\n /*\n TODO: copy mhelander's expiry code back in.\n Although, we should check with community,\n should expiry be core or a plugin?\n */\n return gun;\n }\n })(USE, './recall');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n User.prototype.pair = function(){\n var user = this, proxy; // undeprecated, hiding with proxies.\n try{ proxy = new Proxy({DANGER:'\\u2620'}, {get: function(t,p,r){\n if(!user.is || !(user._||'').sea){ return }\n return user._.sea[p];\n }})}catch(e){}\n return proxy;\n }\n // If authenticated user wants to delete his/her account, let's support it!\n User.prototype.delete = async function(alias, pass, cb){\n console.log(\"user.delete() IS DEPRECATED AND WILL BE MOVED TO A MODULE!!!\");\n var gun = this, root = gun.back(-1), user = gun.back('user');\n try {\n user.auth(alias, pass, function(ack){\n var pub = (user.is||{}).pub;\n // Delete user data\n user.map().once(function(){ this.put(null) });\n // Wipe user data from memory\n user.leave();\n (cb || noop)({ok: 0});\n });\n } catch (e) {\n Gun.log('User.delete failed! Error:', e);\n }\n return gun;\n }\n User.prototype.alive = async function(){\n console.log(\"user.alive() IS DEPRECATED!!!\");\n const gunRoot = this.back(-1)\n try {\n // All is good. Should we do something more with actual recalled data?\n await authRecall(gunRoot)\n return gunRoot._.user._\n } catch (e) {\n const err = 'No session!'\n Gun.log(err)\n throw { err }\n }\n }\n User.prototype.trust = async function(user){\n console.log(\"`.trust` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n // TODO: BUG!!! SEA `node` read listener needs to be async, which means core needs to be async too.\n //gun.get('alice').get('age').trust(bob);\n if (Gun.is(user)) {\n user.get('pub').get((ctx, ev) => {\n console.log(ctx, ev)\n })\n }\n user.get('trust').get(path).put(theirPubkey);\n\n // do a lookup on this gun chain directly (that gets bob's copy of the data)\n // do a lookup on the metadata trust table for this path (that gets all the pubkeys allowed to write on this path)\n // do a lookup on each of those pubKeys ON the path (to get the collab data \"layers\")\n // THEN you perform Jachen's mix operation\n // and return the result of that to...\n }\n User.prototype.grant = function(to, cb){\n console.log(\"`.grant` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user._.sea, path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('grant').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('grant').get(pair.pub).get(path).put(enc);\n }\n var pub = to.get('pub').then();\n var epub = to.get('epub').then();\n pub = await pub; epub = await epub;\n var dh = await SEA.secret(epub, pair);\n enc = await SEA.encrypt(sec, dh);\n user.get('grant').get(pub).get(path).put(enc, cb);\n }());\n return gun;\n }\n User.prototype.secret = function(data, cb){\n console.log(\"`.secret` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user.pair(), path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('trust').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('trust').get(pair.pub).get(path).put(enc);\n }\n enc = await SEA.encrypt(data, sec);\n gun.put(enc, cb);\n }());\n return gun;\n }\n\n /**\n * returns the decrypted value, encrypted by secret\n * @returns {Promise}\n // Mark needs to review 1st before officially supported\n User.prototype.decrypt = function(cb) {\n let gun = this,\n path = ''\n gun.back(function(at) {\n if (at.is) {\n return\n }\n path += at.get || ''\n })\n return gun\n .then(async data => {\n if (data == null) {\n return\n }\n const user = gun.back(-1).user()\n const pair = user.pair()\n let sec = await user\n .get('trust')\n .get(pair.pub)\n .get(path)\n sec = await SEA.decrypt(sec, pair)\n if (!sec) {\n return data\n }\n let decrypted = await SEA.decrypt(data, sec)\n return decrypted\n })\n .then(res => {\n cb && cb(res)\n return res\n })\n }\n */\n module.exports = User\n })(USE, './share');\n\n ;USE(function(module){\n var SEA = USE('./sea'), S = USE('./settings'), noop = function() {}, u;\n var Gun = (''+u != typeof window)? (window.Gun||{on:noop}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n // After we have a GUN extension to make user registration/login easy, we then need to handle everything else.\n\n // We do this with a GUN adapter, we first listen to when a gun instance is created (and when its options change)\n Gun.on('opt', function(at){\n if(!at.sea){ // only add SEA once per instance, on the \"at\" context.\n at.sea = {own: {}};\n at.on('put', check, at); // SEA now runs its firewall on HAM diffs, not all i/o.\n }\n this.to.next(at); // make sure to call the \"next\" middleware adapter.\n });\n\n // Alright, this next adapter gets run at the per node level in the graph database.\n // correction: 2020 it gets run on each key/value pair in a node upon a HAM diff.\n // This will let us verify that every property on a node has a value signed by a public key we trust.\n // If the signature does not match, the data is just `undefined` so it doesn't get passed on.\n // If it does match, then we transform the in-memory \"view\" of the data into its plain value (without the signature).\n // Now NOTE! Some data is \"system\" data, not user data. Example: List of public keys, aliases, etc.\n // This data is self-enforced (the value can only match its ID), but that is handled in the `security` function.\n // From the self-enforced data, we can see all the edges in the graph that belong to a public key.\n // Example: ~ASDF is the ID of a node with ASDF as its public key, signed alias and salt, and\n // its encrypted private key, but it might also have other signed values on it like `profile = ` edge.\n // Using that directed edge's ID, we can then track (in memory) which IDs belong to which keys.\n // Here is a problem: Multiple public keys can \"claim\" any node's ID, so this is dangerous!\n // This means we should ONLY trust our \"friends\" (our key ring) public keys, not any ones.\n // I have not yet added that to SEA yet in this alpha release. That is coming soon, but beware in the meanwhile!\n\n function check(msg){ // REVISE / IMPROVE, NO NEED TO PASS MSG/EVE EACH SUB?\n var eve = this, at = eve.as, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n if(!soul || !key){ return }\n if((msg._||'').faith && (at.opt||'').faith && 'function' == typeof msg._){\n SEA.opt.pack(put, function(raw){\n SEA.verify(raw, false, function(data){ // this is synchronous if false\n put['='] = SEA.opt.unpack(data);\n eve.to.next(msg);\n })})\n return \n }\n var no = function(why){ at.on('in', {'@': id, err: msg.err = why}) }; // exploit internal relay stun for now, maybe violates spec, but testing for now. // Note: this may be only the sharded message, not original batch.\n //var no = function(why){ msg.ack(why) };\n (msg._||'').DBG && ((msg._||'').DBG.c = +new Date);\n if(0 <= soul.indexOf(' {\n if (certificate.m && certificate.s && certificant && pub)\n // now verify certificate\n return SEA.verify(certificate, pub, data => { // check if \"pub\" (of the graph owner) really issued this cert\n if (u !== data && u !== data.e && msg.put['>'] && msg.put['>'] > parseFloat(data.e)) return no(\"Certificate expired.\") // certificate expired\n // \"data.c\" = a list of certificants/certified users\n // \"data.w\" = lex WRITE permission, in the future, there will be \"data.r\" which means lex READ permission\n if (u !== data && data.c && data.w && (data.c === certificant || data.c.indexOf('*' || certificant) > -1)) {\n // ok, now \"certificant\" is in the \"certificants\" list, but is \"path\" allowed? Check path\n let path = soul.indexOf('/') > -1 ? soul.replace(soul.substring(0, soul.indexOf('/') + 1), '') : ''\n String.match = String.match || Gun.text.match\n const w = Array.isArray(data.w) ? data.w : typeof data.w === 'object' || typeof data.w === 'string' ? [data.w] : []\n for (const lex of w) {\n if ((String.match(path, lex['#']) && String.match(key, lex['.'])) || (!lex['.'] && String.match(path, lex['#'])) || (!lex['#'] && String.match(key, lex['.'])) || String.match((path ? path + '/' + key : key), lex['#'] || lex)) {\n // is Certificant forced to present in Path\n if (lex['+'] && lex['+'].indexOf('*') > -1 && path && path.indexOf(certificant) == -1 && key.indexOf(certificant) == -1) return no(`Path \"${path}\" or key \"${key}\" must contain string \"${certificant}\".`)\n // path is allowed, but is there any WRITE block? Check it out\n if (data.wb && (typeof data.wb === 'string' || ((data.wb || {})['#']))) { // \"data.wb\" = path to the WRITE block\n var root = eve.as.root.$.back(-1)\n if (typeof data.wb === 'string' && '~' !== data.wb.slice(0, 1)) root = root.get('~' + pub)\n return root.get(data.wb).get(certificant).once(value => { // TODO: INTENT TO DEPRECATE.\n if (value && (value === 1 || value === true)) return no(`Certificant ${certificant} blocked.`)\n return cb(data)\n })\n }\n return cb(data)\n }\n }\n return no(\"Certificate verification fail.\")\n }\n })\n return\n }\n \n if ('pub' === key && '~' + pub === soul) {\n if (val === pub) return eve.to.next(msg) // the account MUST match `pub` property that equals the ID of the public key.\n return no(\"Account not same!\")\n }\n\n if ((tmp = user.is) && tmp.pub && !raw['*'] && !raw['+'] && (pub === tmp.pub || (pub !== tmp.pub && ((msg._.msg || {}).opt || {}).cert))){\n SEA.opt.pack(msg.put, packed => {\n SEA.sign(packed, (user._).sea, async function(data) {\n if (u === data) return no(SEA.err || 'Signature fail.')\n msg.put[':'] = {':': tmp = SEA.opt.unpack(data.m), '~': data.s}\n msg.put['='] = tmp\n \n // if writing to own graph, just allow it\n if (pub === user.is.pub) {\n if (tmp = link_is(val)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n }\n \n // if writing to other's graph, check if cert exists then try to inject cert into put, also inject self pub so that everyone can verify the put\n if (pub !== user.is.pub && ((msg._.msg || {}).opt || {}).cert) {\n const cert = await S.parse(msg._.msg.opt.cert)\n // even if cert exists, we must verify it\n if (cert && cert.m && cert.s)\n verify(cert, user.is.pub, _ => {\n msg.put[':']['+'] = cert // '+' is a certificate\n msg.put[':']['*'] = user.is.pub // '*' is pub of the user who puts\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n })\n }\n }, {raw: 1})\n })\n return;\n }\n\n SEA.opt.pack(msg.put, packed => {\n SEA.verify(packed, raw['*'] || pub, function(data){ var tmp;\n data = SEA.opt.unpack(data);\n if (u === data) return no(\"Unverified data.\") // make sure the signature matches the account it claims to be on. // reject any updates that are signed with a mismatched account.\n if ((tmp = link_is(data)) && pub === SEA.opt.pub(tmp)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n \n // check if cert ('+') and putter's pub ('*') exist\n if (raw['+'] && raw['+']['m'] && raw['+']['s'] && raw['*'])\n // now verify certificate\n verify(raw['+'], raw['*'], _ => {\n msg.put['='] = data;\n return eve.to.next(msg);\n })\n else {\n msg.put['='] = data;\n return eve.to.next(msg);\n }\n });\n })\n return\n };\n check.any = function(eve, msg, val, key, soul, at, no, user){ var tmp, pub;\n if(at.opt.secure){ return no(\"Soul missing public key at '\" + key + \"'.\") }\n // TODO: Ask community if should auto-sign non user-graph data.\n at.on('secure', function(msg){ this.off();\n if(!at.opt.secure){ return eve.to.next(msg) }\n no(\"Data cannot be changed.\");\n }).on.on('secure', msg);\n return;\n }\n\n var valid = Gun.valid, link_is = function(d,l){ return 'string' == typeof (l = valid(d)) && l }, state_ify = (Gun.state||'').ify;\n\n var pubcut = /[^\\w_-]/; // anything not alphanumeric or _ -\n SEA.opt.pub = function(s){\n if(!s){ return }\n s = s.split('~');\n if(!s || !(s = s[1])){ return }\n s = s.split(pubcut).slice(0,2);\n if(!s || 2 != s.length){ return }\n if('@' === (s[0]||'')[0]){ return }\n s = s.slice(0,2).join('.');\n return s;\n }\n SEA.opt.stringy = function(t){\n // TODO: encrypt etc. need to check string primitive. Make as breaking change.\n }\n SEA.opt.pack = function(d,cb,k, n,s){ var tmp, f; // pack for verifying\n if(SEA.opt.check(d)){ return cb(d) }\n if(d && d['#'] && d['.'] && d['>']){ tmp = d[':']; f = 1 }\n JSON.parseAsync(f? tmp : d, function(err, meta){\n var sig = ((u !== (meta||'')[':']) && (meta||'')['~']); // or just ~ check?\n if(!sig){ cb(d); return }\n cb({m: {'#':s||d['#'],'.':k||d['.'],':':(meta||'')[':'],'>':d['>']||Gun.state.is(n, k)}, s: sig});\n });\n }\n var O = SEA.opt;\n SEA.opt.unpack = function(d, k, n){ var tmp;\n if(u === d){ return }\n if(d && (u !== (tmp = d[':']))){ return tmp }\n k = k || O.fall_key; if(!n && O.fall_val){ n = {}; n[k] = O.fall_val }\n if(!k || !n){ return }\n if(d === n[k]){ return d }\n if(!SEA.opt.check(n[k])){ return d }\n var soul = (n && n._ && n._['#']) || O.fall_soul, s = Gun.state.is(n, k) || O.fall_state;\n if(d && 4 === d.length && soul === d[0] && k === d[1] && fl(s) === fl(d[3])){\n return d[2];\n }\n if(s < SEA.opt.shuffle_attack){\n return d;\n }\n }\n SEA.opt.shuffle_attack = 1546329600000; // Jan 1, 2019\n var fl = Math.floor; // TODO: Still need to fix inconsistent state issue.\n // TODO: Potential bug? If pub/priv key starts with `-`? IDK how possible.\n\n })(USE, './index');\n}());\n","// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n",";(function(){\n// JSON: JavaScript Object Notation\n// YSON: Yielding javaScript Object Notation\nvar yson = {}, u, sI = setTimeout.turn || (typeof setImmediate != ''+u && setImmediate) || setTimeout;\n\nyson.parseAsync = function(text, done, revive, M){\n\tif('string' != typeof text){ try{ done(u,JSON.parse(text)) }catch(e){ done(e) } return }\n\tvar ctx = {i: 0, text: text, done: done, l: text.length, up: []};\n\t//M = 1024 * 1024 * 100;\n\t//M = M || 1024 * 64;\n\tM = M || 1024 * 32;\n\tparse();\n\tfunction parse(){\n\t\t//var S = +new Date;\n\t\tvar s = ctx.text;\n\t\tvar i = ctx.i, l = ctx.l, j = 0;\n\t\tvar w = ctx.w, b, tmp;\n\t\twhile(j++ < M){\n\t\t\tvar c = s[i++];\n\t\t\tif(i > l){\n\t\t\t\tctx.end = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(w){\n\t\t\t\ti = s.indexOf('\"', i-1); c = s[i];\n\t\t\t\ttmp = 0; while('\\\\' == s[i-(++tmp)]){}; tmp = !(tmp % 2);//tmp = ('\\\\' == s[i-1]); // json is stupid\n\t\t\t\tb = b || tmp;\n\t\t\t\tif('\"' == c && !tmp){\n\t\t\t\t\tw = u;\n\t\t\t\t\ttmp = ctx.s;\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\ttmp = s.slice(ctx.sl, i);\n\t\t\t\t\t\tif(b || (1+tmp.indexOf('\\\\'))){ tmp = JSON.parse('\"'+tmp+'\"') } // escape + unicode :( handling\n\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\tctx.at.push(ctx.s = tmp);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(!ctx.at){ ctx.end = j = M; tmp = u }\n\t\t\t\t\t\t\t(ctx.at||{})[ctx.s] = ctx.s = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.s = u;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.s = s.slice(ctx.sl, i);\n\t\t\t\t\t\tif(b || (1+ctx.s.indexOf('\\\\'))){ ctx.s = JSON.parse('\"'+ctx.s+'\"'); } // escape + unicode :( handling\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = b = u;\n\t\t\t\t}\n\t\t\t\t++i;\n\t\t\t} else {\n\t\t\t\tswitch(c){\n\t\t\t\tcase '\"':\n\t\t\t\t\tctx.sl = i;\n\t\t\t\t\tw = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ':':\n\t\t\t\t\tctx.ai = i;\n\t\t\t\t\tctx.a = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ',':\n\t\t\t\t\tif(ctx.a || ctx.at instanceof Array){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.at[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\tctx.a = true;\n\t\t\t\t\t\tctx.ai = i;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '{':\n\t\t\t\t\tctx.up.push(ctx.at||(ctx.at = {}));\n\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\tctx.at.push(ctx.at = {});\n\t\t\t\t\t} else\n\t\t\t\t\tif(u !== (tmp = ctx.s)){\n\t\t\t\t\t\tctx.at[tmp] = ctx.at = {};\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tbreak;\n\t\t\t\tcase '}':\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif(!ctx.at){ ctx.end = j = M; tmp = u }\n\t\t\t\t\t\t\t\t\t(ctx.at||{})[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tctx.at = ctx.up.pop();\n\t\t\t\t\tbreak;\n\t\t\t\tcase '[':\n\t\t\t\t\tif(u !== (tmp = ctx.s)){\n\t\t\t\t\t\tctx.up.push(ctx.at);\n\t\t\t\t\t\tctx.at[tmp] = ctx.at = [];\n\t\t\t\t\t} else\n\t\t\t\t\tif(!ctx.at){\n\t\t\t\t\t\tctx.up.push(ctx.at = []);\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = true;\n\t\t\t\t\tctx.ai = i;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ']':\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.at[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tctx.at = ctx.up.pop();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tctx.s = u;\n\t\tctx.i = i;\n\t\tctx.w = w;\n\t\tif(ctx.end){\n\t\t\ttmp = ctx.at;\n\t\t\tif(u === tmp){\n\t\t\t\ttry{ tmp = JSON.parse(text)\n\t\t\t\t}catch(e){ return ctx.done(e) }\n\t\t\t}\n\t\t\tctx.done(u, tmp);\n\t\t} else {\n\t\t\tsI(parse);\n\t\t}\n\t}\n}\nfunction value(s){\n\tvar n = parseFloat(s);\n\tif(!isNaN(n)){\n\t\treturn n;\n\t}\n\ts = s.trim();\n\tif('true' == s){\n\t\treturn true;\n\t}\n\tif('false' == s){\n\t\treturn false;\n\t}\n\tif('null' == s){\n\t\treturn null;\n\t}\n}\n\nyson.stringifyAsync = function(data, done, replacer, space, ctx){\n\t//try{done(u, JSON.stringify(data, replacer, space))}catch(e){done(e)}return;\n\tctx = ctx || {};\n\tctx.text = ctx.text || \"\";\n\tctx.up = [ctx.at = {d: data}];\n\tctx.done = done;\n\tctx.i = 0;\n\tvar j = 0;\n\tify();\n\tfunction ify(){\n\t\tvar at = ctx.at, data = at.d, add = '', tmp;\n\t\tif(at.i && (at.i - at.j) > 0){ add += ',' }\n\t\tif(u !== (tmp = at.k)){ add += JSON.stringify(tmp) + ':' } //'\"'+tmp+'\":' } // only if backslash\n\t\tswitch(typeof data){\n\t\tcase 'boolean':\n\t\t\tadd += ''+data;\n\t\t\tbreak;\n\t\tcase 'string':\n\t\t\tadd += JSON.stringify(data); //ctx.text += '\"'+data+'\"';//JSON.stringify(data); // only if backslash\n\t\t\tbreak;\n\t\tcase 'number':\n\t\t\tadd += (isNaN(data)? 'null' : data);\n\t\t\tbreak;\n\t\tcase 'object':\n\t\t\tif(!data){\n\t\t\t\tadd += 'null';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(data instanceof Array){\t\n\t\t\t\tadd += '[';\n\t\t\t\tat = {i: -1, as: data, up: at, j: 0};\n\t\t\t\tat.l = data.length;\n\t\t\t\tctx.up.push(ctx.at = at);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif('function' != typeof (data||'').toJSON){\n\t\t\t\tadd += '{';\n\t\t\t\tat = {i: -1, ok: Object.keys(data).sort(), as: data, up: at, j: 0};\n\t\t\t\tat.l = at.ok.length;\n\t\t\t\tctx.up.push(ctx.at = at);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(tmp = data.toJSON()){\n\t\t\t\tadd += tmp;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// let this & below pass into default case...\n\t\tcase 'function':\n\t\t\tif(at.as instanceof Array){\n\t\t\t\tadd += 'null';\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault: // handle wrongly added leading `,` if previous item not JSON-able.\n\t\t\tadd = '';\n\t\t\tat.j++;\n\t\t}\n\t\tctx.text += add;\n\t\twhile(1+at.i >= at.l){\n\t\t\tctx.text += (at.ok? '}' : ']');\n\t\t\tat = ctx.at = at.up;\n\t\t}\n\t\tif(++at.i < at.l){\n\t\t\tif(tmp = at.ok){\n\t\t\t\tat.d = at.as[at.k = tmp[at.i]];\n\t\t\t} else {\n\t\t\t\tat.d = at.as[at.i];\n\t\t\t}\n\t\t\tif(++j < 9){ return ify() } else { j = 0 }\n\t\t\tsI(ify);\n\t\t\treturn;\n\t\t}\n\t\tctx.done(u, ctx.text);\n\t}\n}\nif(typeof window != ''+u){ window.YSON = yson }\ntry{ if(typeof module != ''+u){ module.exports = yson } }catch(e){}\nif(typeof JSON != ''+u){\n\tJSON.parseAsync = yson.parseAsync;\n\tJSON.stringifyAsync = yson.stringifyAsync;\n}\n\n}());",";(function(){\n\n\tfunction Radix(){\n\t\tvar radix = function(key, val, t){\n\t\t\tradix.unit = 0;\n\t\t\tif(!t && u !== val){ \n\t\t\t\tradix.last = (''+key < radix.last)? radix.last : ''+key;\n\t\t\t\tdelete (radix.$||{})[_];\n\t\t\t}\n\t\t\tt = t || radix.$ || (radix.$ = {});\n\t\t\tif(!key && Object.keys(t).length){ return t }\n\t\t\tkey = ''+key;\n\t\t\tvar i = 0, l = key.length-1, k = key[i], at, tmp;\n\t\t\twhile(!(at = t[k]) && i < l){\n\t\t\t\tk += key[++i];\n\t\t\t}\n\t\t\tif(!at){\n\t\t\t\tif(!each(t, function(r, s){\n\t\t\t\t\tvar ii = 0, kk = '';\n\t\t\t\t\tif((s||'').length){ while(s[ii] == key[ii]){\n\t\t\t\t\t\tkk += s[ii++];\n\t\t\t\t\t} }\n\t\t\t\t\tif(kk){\n\t\t\t\t\t\tif(u === val){\n\t\t\t\t\t\t\tif(ii <= l){ return }\n\t\t\t\t\t\t\t(tmp || (tmp = {}))[s.slice(ii)] = r;\n\t\t\t\t\t\t\t//(tmp[_] = function $(){ $.sort = Object.keys(tmp).sort(); return $ }()); // get rid of this one, cause it is on read?\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar __ = {};\n\t\t\t\t\t\t__[s.slice(ii)] = r;\n\t\t\t\t\t\tii = key.slice(ii);\n\t\t\t\t\t\t('' === ii)? (__[''] = val) : ((__[ii] = {})[''] = val);\n\t\t\t\t\t\t//(__[_] = function $(){ $.sort = Object.keys(__).sort(); return $ }());\n\t\t\t\t\t\tt[kk] = __;\n\t\t\t\t\t\tif(Radix.debug && 'undefined' === ''+kk){ console.log(0, kk); debugger }\n\t\t\t\t\t\tdelete t[s];\n\t\t\t\t\t\t//(t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }());\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t})){\n\t\t\t\t\tif(u === val){ return; }\n\t\t\t\t\t(t[k] || (t[k] = {}))[''] = val;\n\t\t\t\t\tif(Radix.debug && 'undefined' === ''+k){ console.log(1, k); debugger }\n\t\t\t\t\t//(t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }());\n\t\t\t\t}\n\t\t\t\tif(u === val){\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t} else \n\t\t\tif(i == l){\n\t\t\t\t//if(u === val){ return (u === (tmp = at['']))? at : tmp } // THIS CODE IS CORRECT, below is\n\t\t\t\tif(u === val){ return (u === (tmp = at['']))? at : ((radix.unit = 1) && tmp) } // temporary help??\n\t\t\t\tat[''] = val;\n\t\t\t\t//(at[_] = function $(){ $.sort = Object.keys(at).sort(); return $ }());\n\t\t\t} else {\n\t\t\t\tif(u !== val){ delete at[_] }\n\t\t\t\t//at && (at[_] = function $(){ $.sort = Object.keys(at).sort(); return $ }());\n\t\t\t\treturn radix(key.slice(++i), val, at || (at = {}));\n\t\t\t}\n\t\t}\n\t\treturn radix;\n\t};\n\n\tRadix.map = function rap(radix, cb, opt, pre){\n\t\ttry {\n\t\t\tpre = pre || []; // TODO: BUG: most out-of-memory crashes come from here.\n\t\t\tvar t = ('function' == typeof radix)? radix.$ || {} : radix;\n\t\t\t//!opt && console.log(\"WHAT IS T?\", JSON.stringify(t).length);\n\t\t\tif(!t){ return }\n\t\t\tif('string' == typeof t){ if(Radix.debug){ throw ['BUG:', radix, cb, opt, pre] } return; }\n\t\t\tvar keys = (t[_]||no).sort || (t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }()).sort, rev; // ONLY 17% of ops are pre-sorted!\n\t\t\t//var keys = Object.keys(t).sort();\n\t\t\topt = (true === opt)? {branch: true} : (opt || {});\n\t\t\tif(rev = opt.reverse){ keys = keys.slice(0).reverse() }\n\t\t\tvar start = opt.start, end = opt.end, END = '\\uffff';\n\t\t\tvar i = 0, l = keys.length;\n\t\t\tfor(;i < l; i++){ var key = keys[i], tree = t[key], tmp, p, pt;\n\t\t\t\tif(!tree || '' === key || _ === key || 'undefined' === key){ continue }\n\t\t\t\tp = pre.slice(0); p.push(key);\n\t\t\t\tpt = p.join('');\n\t\t\t\tif(u !== start && pt < (start||'').slice(0,pt.length)){ continue }\n\t\t\t\tif(u !== end && (end || END) < pt){ continue }\n\t\t\t\tif(rev){ // children must be checked first when going in reverse.\n\t\t\t\t\ttmp = rap(tree, cb, opt, p);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tif(u !== (tmp = tree[''])){\n\t\t\t\t\tvar yes = 1;\n\t\t\t\t\tif(u !== start && pt < (start||'')){ yes = 0 }\n\t\t\t\t\tif(u !== end && pt > (end || END)){ yes = 0 }\n\t\t\t\t\tif(yes){\n\t\t\t\t\t\ttmp = cb(tmp, pt, key, pre);\n\t\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\tif(opt.branch){\n\t\t\t\t\ttmp = cb(u, pt, key, pre);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tpre = p;\n\t\t\t\tif(!rev){\n\t\t\t\t\ttmp = rap(tree, cb, opt, pre);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tpre.pop();\n\t\t\t}\n\t\t} catch (e) { console.error(e); }\n\t};\n\n\tif(typeof window !== \"undefined\"){\n\t window.Radix = Radix;\n\t} else { \n\t\ttry{ module.exports = Radix }catch(e){}\n\t}\n\tvar each = Radix.object = function(o, f, r){\n\t\tfor(var k in o){\n\t\t\tif(!o.hasOwnProperty(k)){ continue }\n\t\t\tif((r = f(o[k], k)) !== u){ return r }\n\t\t}\n\t}, no = {}, u;\n\tvar _ = String.fromCharCode(24);\n\t\n}());\n",";(function(){\n\n\tfunction Radisk(opt){\n\n\t\topt = opt || {};\n\t\topt.log = opt.log || console.log;\n\t\topt.file = String(opt.file || 'radata');\n\t\tvar has = (Radisk.has || (Radisk.has = {}))[opt.file];\n\t\tif(has){ return has }\n\n\t\topt.max = opt.max || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;\n\t\topt.until = opt.until || opt.wait || 250;\n\t\topt.batch = opt.batch || (10 * 1000);\n\t\topt.chunk = opt.chunk || (1024 * 1024 * 1); // 1MB\n\t\topt.code = opt.code || {};\n\t\topt.code.from = opt.code.from || '!';\n\t\topt.jsonify = true;\n\n\n\t\tfunction ename(t){ return encodeURIComponent(t).replace(/\\*/g, '%2A') } // TODO: Hash this also, but allow migration!\n\t\tfunction atomic(v){ return u !== v && (!v || 'object' != typeof v) }\n\t\tvar timediate = (''+u === typeof setImmediate)? setTimeout : setImmediate;\n\t\tvar puff = setTimeout.turn || timediate, u;\n\t\tvar map = Radix.object;\n\t\tvar ST = 0;\n\n\t\tif(!opt.store){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `opt.store` interface with `{get: fn, put: fn (, list: fn)}`!\");\n\t\t}\n\t\tif(!opt.store.put){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `store.put` interface with `(file, data, cb)`!\");\n\t\t}\n\t\tif(!opt.store.get){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `store.get` interface with `(file, cb)`!\");\n\t\t}\n\t\tif(!opt.store.list){\n\t\t\t//opt.log(\"WARNING: `store.list` interface might be needed!\");\n\t\t}\n\n\t\tif(''+u != typeof require){ require('./yson') }\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\t\t/*\n\t\t\tAny and all storage adapters should...\n\t\t\t1. Because writing to disk takes time, we should batch data to disk. This improves performance, and reduces potential disk corruption.\n\t\t\t2. If a batch exceeds a certain number of writes, we should immediately write to disk when physically possible. This caps total performance, but reduces potential loss.\n\t\t*/\n\t\tvar r = function(key, data, cb, tag, DBG){\n\t\t\tif('function' === typeof data){\n\t\t\t\tvar o = cb || {};\n\t\t\t\tcb = data;\n\t\t\t\tr.read(key, cb, o, DBG || tag);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//var tmp = (tmp = r.batch = r.batch || {})[key] = tmp[key] || {};\n\t\t\t//var tmp = (tmp = r.batch = r.batch || {})[key] = data;\n\t\t\tr.save(key, data, cb, tag, DBG);\n\t\t}\n\t\tr.save = function(key, data, cb, tag, DBG){\n\t\t\tvar s = {key: key}, tags, f, d, q;\n\t\t\ts.find = function(file){ var tmp;\n\t\t\t\ts.file = file || (file = opt.code.from);\n\t\t\t\tDBG && (DBG = DBG[file] = DBG[file] || {});\n\t\t\t\tDBG && (DBG.sf = DBG.sf || +new Date);\n\t\t\t\t//console.only.i && console.log('found', file);\n\t\t\t\tif(tmp = r.disk[file]){ s.mix(u, tmp); return }\n\t\t\t\tr.parse(file, s.mix, u, DBG);\n\t\t\t}\n\t\t\ts.mix = function(err, disk){\n\t\t\t\tDBG && (DBG.sml = +new Date);\n\t\t\t\tDBG && (DBG.sm = DBG.sm || +new Date);\n\t\t\t\tif(s.err = err || s.err){ cb(err); return } // TODO: HANDLE BATCH EMIT\n\t\t\t\tvar file = s.file = (disk||'').file || s.file, tmp;\n\t\t\t\tif(!disk && file !== opt.code.from){ // corrupt file?\n\t\t\t\t\tr.find.bad(file); // remove from dir list\n\t\t\t\t\tr.save(key, data, cb, tag); // try again\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t(disk = r.disk[file] || (r.disk[file] = disk || Radix())).file || (disk.file = file);\n\t\t\t\tif(opt.compare){\n\t\t\t\t\tdata = opt.compare(disk(key), data, key, file);\n\t\t\t\t\tif(u === data){ cb(err, -1); return } // TODO: HANDLE BATCH EMIT\n\t\t\t\t}\n\t\t\t\t(s.disk = disk)(key, data);\n\t\t\t\tif(tag){\n\t\t\t\t\t(tmp = (tmp = disk.tags || (disk.tags = {}))[tag] || (tmp[tag] = r.tags[tag] || (r.tags[tag] = {})))[file] || (tmp[file] = r.one[tag] || (r.one[tag] = cb));\n\t\t\t\t\tcb = null;\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.st = DBG.st || +new Date);\n\t\t\t\t//console.only.i && console.log('mix', disk.Q);\n\t\t\t\tif(disk.Q){ cb && disk.Q.push(cb); return } disk.Q = (cb? [cb] : []);\n\t\t\t\tdisk.to = setTimeout(s.write, opt.until);\n\t\t\t}\n\t\t\ts.write = function(){\n\t\t\t\tDBG && (DBG.sto = DBG.sto || +new Date);\n\t\t\t\tvar file = f = s.file, disk = d = s.disk;\n\t\t\t\tq = s.q = disk.Q;\n\t\t\t\ttags = s.tags = disk.tags;\n\t\t\t\tdelete disk.Q;\n\t\t\t\tdelete r.disk[file];\n\t\t\t\tdelete disk.tags;\n\t\t\t\t//console.only.i && console.log('write', file, disk, 'was saving:', key, data);\n\t\t\t\tr.write(file, disk, s.ack, u, DBG);\n\t\t\t}\n\t\t\ts.ack = function(err, ok){\n\t\t\t\tDBG && (DBG.sa = DBG.sa || +new Date);\n\t\t\t\tDBG && (DBG.sal = q.length);\n\t\t\t\tvar ack, tmp;\n\t\t\t\t// TODO!!!! CHANGE THIS INTO PUFF!!!!!!!!!!!!!!!!\n\t\t\t\tfor(var id in r.tags){\n\t\t\t\t\tif(!r.tags.hasOwnProperty(id)){ continue } var tag = r.tags[id];\n\t\t\t\t\tif((tmp = r.disk[f]) && (tmp = tmp.tags) && tmp[tag]){ continue }\n\t\t\t\t\tack = tag[f];\n\t\t\t\t\tdelete tag[f];\n\t\t\t\t\tvar ne; for(var k in tag){ if(tag.hasOwnProperty(k)){ ne = true; break } } // is not empty?\n\t\t\t\t\tif(ne){ continue } //if(!obj_empty(tag)){ continue }\n\t\t\t\t\tdelete r.tags[tag];\n\t\t\t\t\tack && ack(err, ok);\n\t\t\t\t}\n\t\t\t\t!q && (q = '');\n\t\t\t\tvar l = q.length, i = 0;\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\tvar S = +new Date;\n\t\t\t\tfor(;i < l; i++){ (ack = q[i]) && ack(err, ok) }\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad acks', ename(s.file));\n\t\t\t\tconsole.STAT && console.STAT(S, q.length, 'rad acks #', ename(s.file));\n\t\t\t}\n\t\t\tcb || (cb = function(err, ok){ // test delete!\n\t\t\t\tif(!err){ return }\n\t\t\t});\n\t\t\t//console.only.i && console.log('save', key);\n\t\t\tr.find(key, s.find);\n }\n r.disk = {};\n r.one = {};\n r.tags = {};\n\n\t\t/*\n\t\t\tAny storage engine at some point will have to do a read in order to write.\n\t\t\tThis is true of even systems that use an append only log, if they support updates.\n\t\t\tTherefore it is unavoidable that a read will have to happen,\n\t\t\tthe question is just how long you delay it.\n\t\t*/\n\t\tvar RWC = 0;\n\t\tr.write = function(file, rad, cb, o, DBG){\n\t\t\tif(!rad){ cb('No radix!'); return }\n\t\t\to = ('object' == typeof o)? o : {force: o};\n\t\t\tvar f = function Fractal(){}, a, b;\n\t\t\tf.text = '';\n\t\t\tf.file = file = rad.file || (rad.file = file);\n\t\t\tif(!file){ cb('What file?'); return }\n\t\t\tf.write = function(){\n\t\t\t\tvar text = rad.raw = f.text;\n\t\t\t\tr.disk[file = rad.file || f.file || file] = rad;\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.wd = S);\n\t\t\t\t//console.only.i && console.log('add', file);\n\t\t\t\tr.find.add(file, function add(err){\n\t\t\t\t\tDBG && (DBG.wa = +new Date);\n\t\t\t\t\tif(err){ cb(err); return }\n\t\t\t\t\t//console.only.i && console.log('disk', file, text);\n\t\t\t\t\topt.store.put(ename(file), text, function safe(err, ok){\n\t\t\t\t\t\tDBG && (DBG.wp = +new Date);\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, ST = +new Date - S, \"wrote disk\", JSON.stringify(file), ++RWC, 'total all writes.');\n\t\t\t\t\t\t//console.only.i && console.log('done', err, ok || 1, cb);\n\t\t\t\t\t\tcb(err, ok || 1);\n\t\t\t\t\t\tif(!rad.Q){ delete r.disk[file] } // VERY IMPORTANT! Clean up memory, but not if there is already queued writes on it!\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tf.split = function(){\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.wf = S);\n\t\t\t\tf.text = '';\n\t\t\t\tif(!f.count){ f.count = 0;\n\t\t\t\t\tRadix.map(rad, function count(){ f.count++ }); // TODO: Perf? Any faster way to get total length?\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.wfc = f.count);\n\t\t\t\tf.limit = Math.ceil(f.count/2);\n\t\t\t\tvar SC = f.count;\n\t\t\t\tf.count = 0;\n\t\t\t\tDBG && (DBG.wf1 = +new Date);\n\t\t\t\tf.sub = Radix();\n\t\t\t\tRadix.map(rad, f.slice, {reverse: 1}); // IMPORTANT: DO THIS IN REVERSE, SO LAST HALF OF DATA MOVED TO NEW FILE BEFORE DROPPING FROM CURRENT FILE.\n\t\t\t\tDBG && (DBG.wf2 = +new Date);\n\t\t\t\tr.write(f.end, f.sub, f.both, o);\n\t\t\t\tDBG && (DBG.wf3 = +new Date);\n\t\t\t\tf.hub = Radix();\n\t\t\t\tRadix.map(rad, f.stop);\n\t\t\t\tDBG && (DBG.wf4 = +new Date);\n\t\t\t\tr.write(rad.file, f.hub, f.both, o);\n\t\t\t\tDBG && (DBG.wf5 = +new Date);\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad split\", ename(rad.file), SC);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tf.slice = function(val, key){\n\t\t\t\tf.sub(f.end = key, val);\n\t\t\t\tif(f.limit <= (++f.count)){ return true }\n\t\t\t}\n\t\t\tf.stop = function(val, key){\n\t\t\t\tif(key >= f.end){ return true }\n\t\t\t\tf.hub(key, val);\n\t\t\t}\n\t\t\tf.both = function(err, ok){\n\t\t\t\tDBG && (DBG.wfd = +new Date);\n\t\t\t\tif(b){ cb(err || b); return }\n\t\t\t\tif(a){ cb(err, ok); return }\n\t\t\t\ta = true;\n\t\t\t\tb = err;\n\t\t\t}\n\t\t\tf.each = function(val, key, k, pre){\n\t\t\t\tif(u !== val){ f.count++ }\n\t\t\t\tif(opt.max <= (val||'').length){ return cb(\"Data too big!\"), true }\n\t\t\t\tvar enc = Radisk.encode(pre.length) +'#'+ Radisk.encode(k) + (u === val? '' : ':'+ Radisk.encode(val)) +'\\n';\n\t\t\t\tif((opt.chunk < f.text.length + enc.length) && (1 < f.count) && !o.force){\n\t\t\t\t\treturn f.split();\n\t\t\t\t}\n\t\t\t\tf.text += enc;\n\t\t\t}\n\t\t\t//console.only.i && console.log('writing');\n\t\t\tif(opt.jsonify){ r.write.jsonify(f, rad, cb, o, DBG); return } // temporary testing idea\n\t\t\tif(!Radix.map(rad, f.each, true)){ f.write() }\n\t\t}\n\n\t\tr.write.jsonify = function(f, rad, cb, o, DBG){\n\t\t\tvar raw;\n\t\t\tvar S = +new Date;\n\t\t\tDBG && (DBG.w = S);\n\t\t\ttry{raw = JSON.stringify(rad.$);\n\t\t\t}catch(e){ cb(\"Cannot radisk!\"); return }\n\t\t\tDBG && (DBG.ws = +new Date);\n\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad stringified JSON\");\n\t\t\tif(opt.chunk < raw.length && !o.force){\n\t\t\t\tvar c = 0;\n\t\t\t\tRadix.map(rad, function(){\n\t\t\t\t\tif(c++){ return true } // more than 1 item\n\t\t\t\t});\n\t\t\t\tif(c > 1){\n\t\t\t\t\treturn f.split();\n\t\t\t\t}\n\t\t\t}\n\t\t\tf.text = raw;\n\t\t\tf.write();\n\t\t}\n\n\t\tr.range = function(tree, o){\n\t\t\tif(!tree || !o){ return }\n\t\t\tif(u === o.start && u === o.end){ return tree }\n\t\t\tif(atomic(tree)){ return tree }\n\t\t\tvar sub = Radix();\n\t\t\tRadix.map(tree, function(v,k){ sub(k,v) }, o); // ONLY PLACE THAT TAKES TREE, maybe reduce API for better perf?\n\t\t\treturn sub('');\n\t\t}\n\n\t\t;(function(){\n\t\t\tr.read = function(key, cb, o, DBG){\n\t\t\t\to = o || {};\n\t\t\t\tvar g = {key: key};\n\t\t\t\tg.find = function(file){ var tmp;\n\t\t\t\t\tg.file = file || (file = opt.code.from);\n\t\t\t\t\tDBG && (DBG = DBG[file] = DBG[file] || {});\n\t\t\t\t\tDBG && (DBG.rf = DBG.rf || +new Date);\n\t\t\t\t\tif(tmp = r.disk[g.file = file]){ g.check(u, tmp); return }\n\t\t\t\t\tr.parse(file, g.check, u, DBG);\n\t\t\t\t}\n\t\t\t\tg.get = function(err, disk, info){\n\t\t\t\t\tDBG && (DBG.rgl = +new Date);\n\t\t\t\t\tDBG && (DBG.rg = DBG.rg || +new Date);\n\t\t\t\t\tif(g.err = err || g.err){ cb(err); return }\n\t\t\t\t\tvar file = g.file = (disk||'').file || g.file;\n\t\t\t\t\tif(!disk && file !== opt.code.from){ // corrupt file?\n\t\t\t\t\t\tr.find.bad(file); // remove from dir list\n\t\t\t\t\t\tr.read(key, cb, o); // try again\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdisk = r.disk[file] || (r.disk[file] = disk);\n\t\t\t\t\tif(!disk){ cb(file === opt.code.from? u : \"No file!\"); return }\n\t\t\t\t\tdisk.file || (disk.file = file);\n\t\t\t\t\tvar data = r.range(disk(key), o);\n\t\t\t\t\tDBG && (DBG.rr = +new Date);\n\t\t\t\t\to.unit = disk.unit;\n\t\t\t\t\to.chunks = (o.chunks || 0) + 1;\n\t\t\t\t\to.parsed = (o.parsed || 0) + ((info||'').parsed||(o.chunks*opt.chunk));\n\t\t\t\t\to.more = 1;\n\t\t\t\t\to.next = u;\n\t\t\t\t\tRadix.map(r.list, function next(v,f){\n\t\t\t\t\t\tif(!v || file === f){ return }\n\t\t\t\t\t\to.next = f;\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}, o.reverse? {reverse: 1, end: file} : {start: file});\n\t\t\t\t\tDBG && (DBG.rl = +new Date);\n\t\t\t\t\tif(!o.next){ o.more = 0 }\n\t\t\t\t\tif(o.next){\n\t\t\t\t\t\tif(!o.reverse && ((key < o.next && 0 != o.next.indexOf(key)) || (u !== o.end && (o.end || '\\uffff') < o.next))){ o.more = 0 }\n\t\t\t\t\t\tif(o.reverse && ((key > o.next && 0 != key.indexOf(o.next)) || ((u !== o.start && (o.start || '') > o.next && file <= o.start)))){ o.more = 0 }\n\t\t\t\t\t}\n\t\t\t\t\t//console.log(5, process.memoryUsage().heapUsed);\n\t\t\t\t\tif(!o.more){ cb(g.err, data, o); return }\n\t\t\t\t\tif(data){ cb(g.err, data, o) }\n\t\t\t\t\tif(o.parsed >= o.limit){ return }\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tDBG && (DBG.rm = S);\n\t\t\t\t\tvar next = o.next;\n\t\t\t\t\ttimediate(function(){\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad more');\n\t\t\t\t\t\tr.parse(next, g.check);\n\t\t\t\t\t},0);\n\t\t\t\t}\n\t\t\t\tg.check = function(err, disk, info){\n\t\t\t\t\t//console.log(4, process.memoryUsage().heapUsed);\n\t\t\t\t\tg.get(err, disk, info);\n\t\t\t\t\tif(!disk || disk.check){ return } disk.check = 1;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t(info || (info = {})).file || (info.file = g.file);\n\t\t\t\t\tRadix.map(disk, function(val, key){\n\t\t\t\t\t\t// assume in memory for now, since both write/read already call r.find which will init it.\n\t\t\t\t\t\tr.find(key, function(file){\n\t\t\t\t\t\t\tif((file || (file = opt.code.from)) === info.file){ return }\n\t\t\t\t\t\t\tvar id = (''+Math.random()).slice(-3);\n\t\t\t\t\t\t\tpuff(function(){\n\t\t\t\t\t\t\tr.save(key, val, function ack(err, ok){\n\t\t\t\t\t\t\t\tif(err){ r.save(key, val, ack); return } // ad infinitum???\n\t\t\t\t\t\t\t\t// TODO: NOTE!!! Mislocated data could be because of a synchronous `put` from the `g.get(` other than perf shouldn't we do the check first before acking?\n\t\t\t\t\t\t\t\tconsole.STAT && console.STAT(\"MISLOCATED DATA CORRECTED\", id, ename(key), ename(info.file), ename(file));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},0);\n\t\t\t\t\t\t})\n\t\t\t\t\t});\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad check\");\n\t\t\t\t}\n\t\t\t\tr.find(key || (o.reverse? (o.end||'') : (o.start||'')), g.find); \n\t\t\t}\n\t\t\tfunction rev(a,b){ return b }\n\t\t\tvar revo = {reverse: true};\n\t\t}());\n\n\t\t;(function(){\n\t\t\t/*\n\t\t\t\tLet us start by assuming we are the only process that is\n\t\t\t\tchanging the directory or bucket. Not because we do not want\n\t\t\t\tto be multi-process/machine, but because we want to experiment\n\t\t\t\twith how much performance and scale we can get out of only one.\n\t\t\t\tThen we can work on the harder problem of being multi-process.\n\t\t\t*/\n\t\t\tvar RPC = 0;\n\t\t\tvar Q = {}, s = String.fromCharCode(31);\n\t\t\tr.parse = function(file, cb, raw, DBG){ var q;\n\t\t\t\tif(!file){ return cb(); }\n\t\t\t\tif(q = Q[file]){ q.push(cb); return } q = Q[file] = [cb];\n\t\t\t\tvar p = function Parse(){}, info = {file: file};\n\t\t\t\t(p.disk = Radix()).file = file;\n\t\t\t\tp.read = function(err, data){ var tmp;\n\t\t\t\t\tDBG && (DBG.rpg = +new Date);\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'read disk', JSON.stringify(file), ++RPC, 'total all parses.');\n\t\t\t\t\t//console.log(2, process.memoryUsage().heapUsed);\n\t\t\t\t\tif((p.err = err) || (p.not = !data)){\n\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif('string' !== typeof data){\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tif(opt.max <= data.length){\n\t\t\t\t\t\t\t\tp.err = \"Chunk too big!\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata = data.toString(); // If it crashes, it crashes here. How!?? We check size first!\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}catch(e){ p.err = e }\n\t\t\t\t\t\tif(p.err){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tinfo.parsed = data.length;\n\t\t\t\t\tDBG && (DBG.rpl = info.parsed);\n\t\t\t\t\tDBG && (DBG.rpa = q.length);\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tif(!(opt.jsonify || '{' === data[0])){\n\t\t\t\t\t\tp.radec(err, data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tparse(data, function(err, tree){\n\t\t\t\t\t\t//console.log(3, process.memoryUsage().heapUsed);\n\t\t\t\t\t\tif(!err){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.disk.$ = tree;\n\t\t\t\t\t\t\tconsole.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'rad parsed JSON');\n\t\t\t\t\t\t\tDBG && (DBG.rpd = +new Date);\n\t\t\t\t\t\t\tp.map(q, p.ack); // hmmm, v8 profiler can't see into this cause of try/catch?\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif('{' === data[0]){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.err = tmp || \"JSON error!\";\n\t\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.radec(err, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tp.map = function(){ // switch to setTimeout.each now?\n\t\t\t\t\tif(!q || !q.length){ return }\n\t\t\t\t\t//var i = 0, l = q.length, ack;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tvar err = p.err, data = p.not? u : p.disk;\n\t\t\t\t\tvar i = 0, ack; while(i < 9 && (ack = q[i++])){ ack(err, data, info) } // too much?\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad packs', ename(file));\n\t\t\t\t\tconsole.STAT && console.STAT(S, i, 'rad packs #', ename(file)); \n\t\t\t\t\tif(!(q = q.slice(i)).length){ return }\n\t\t\t\t\tpuff(p.map, 0);\n\t\t\t\t}\n\t\t\t\tp.ack = function(cb){\n\t\t\t\t\tif(!cb){ return }\n\t\t\t\t\tif(p.err || p.not){\n\t\t\t\t\t\tcb(p.err, u, info);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcb(u, p.disk, info);\n\t\t\t\t}\n\t\t\t\tp.radec = function(err, data){\n\t\t\t\t\tdelete Q[file];\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tvar tmp = p.split(data), pre = [], i, k, v;\n\t\t\t\t\tif(!tmp || 0 !== tmp[1]){\n\t\t\t\t\t\tp.err = \"File '\"+file+\"' does not have root radix! \";\n\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\treturn; \n\t\t\t\t\t}\n\t\t\t\t\twhile(tmp){\n\t\t\t\t\t\tk = v = u;\n\t\t\t\t\t\ti = tmp[1];\n\t\t\t\t\t\ttmp = p.split(tmp[2])||'';\n\t\t\t\t\t\tif('#' == tmp[0]){\n\t\t\t\t\t\t\tk = tmp[1];\n\t\t\t\t\t\t\tpre = pre.slice(0,i);\n\t\t\t\t\t\t\tif(i <= pre.length){\n\t\t\t\t\t\t\t\tpre.push(k);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmp = p.split(tmp[2])||'';\n\t\t\t\t\t\tif('\\n' == tmp[0]){ continue }\n\t\t\t\t\t\tif('=' == tmp[0] || ':' == tmp[0]){ v = tmp[1] }\n\t\t\t\t\t\tif(u !== k && u !== v){ p.disk(pre.join(''), v) }\n\t\t\t\t\t\ttmp = p.split(tmp[2]);\n\t\t\t\t\t}\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'parsed RAD');\n\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t};\n\t\t\t\tp.split = function(t){\n\t\t\t\t\tif(!t){ return }\n\t\t\t\t\tvar l = [], o = {}, i = -1, a = '', b, c;\n\t\t\t\t\ti = t.indexOf(s);\n\t\t\t\t\tif(!t[i]){ return }\n\t\t\t\t\ta = t.slice(0, i);\n\t\t\t\t\tl[0] = a;\n\t\t\t\t\tl[1] = b = Radisk.decode(t.slice(i), o);\n\t\t\t\t\tl[2] = t.slice(i + o.i);\n\t\t\t\t\treturn l;\n\t\t\t\t}\n\t\t\t\tif(r.disk){ raw || (raw = (r.disk[file]||'').raw) }\n\t\t\t\tvar S = +new Date, SM, SL;\n\t\t\t\tDBG && (DBG.rp = S);\n\t\t\t\tif(raw){ return puff(function(){ p.read(u, raw) }, 0) }\n\t\t\t\topt.store.get(ename(file), p.read);\n\t\t\t\t// TODO: What if memory disk gets filled with updates, and we get an old one back?\n\t\t\t}\n\t\t}());\n\n\t\t;(function(){\n\t\t\tvar dir, f = String.fromCharCode(28), Q;\n\t\t\tr.find = function(key, cb){\n\t\t\t\tif(!dir){\n\t\t\t\t\tif(Q){ Q.push([key, cb]); return } Q = [[key, cb]];\n\t\t\t\t\tr.parse(f, init);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tRadix.map(r.list = dir, function(val, key){\n\t\t\t\t\tif(!val){ return }\n\t\t\t\t\treturn cb(key) || true;\n\t\t\t\t}, {reverse: 1, end: key}) || cb(opt.code.from);\n\t\t\t}\n\t\t\tr.find.add = function(file, cb){\n\t\t\t\tvar has = dir(file);\n\t\t\t\tif(has || file === f){ cb(u, 1); return }\n\t\t\t\tdir(file, 1);\n\t\t\t\tcb.found = (cb.found || 0) + 1;\n\t\t\t\tr.write(f, dir, function(err, ok){\n\t\t\t\t\tif(err){ cb(err); return }\n\t\t\t\t\tcb.found = (cb.found || 0) - 1;\n\t\t\t\t\tif(0 !== cb.found){ return }\n\t\t\t\t\tcb(u, 1);\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\tr.find.bad = function(file, cb){\n\t\t\t\tdir(file, 0);\n\t\t\t\tr.write(f, dir, cb||noop);\n\t\t\t}\n\t\t\tfunction init(err, disk){\n\t\t\t\tif(err){\n\t\t\t\t\topt.log('list', err);\n\t\t\t\t\tsetTimeout(function(){ r.parse(f, init) }, 1000);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(disk){ drain(disk); return }\n\t\t\t\tdir = dir || disk || Radix();\n\t\t\t\tif(!opt.store.list){ drain(dir); return }\n\t\t\t\t// import directory.\n\t\t\t\topt.store.list(function(file){\n\t\t\t\t\tif(!file){ drain(dir); return }\n\t\t\t\t\tr.find.add(file, noop);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction drain(rad, tmp){\n\t\t\t\tdir = dir || rad;\n\t\t\t\tdir.file = f;\n\t\t\t\ttmp = Q; Q = null;\n\t\t\t\tmap(tmp, function(arg){\n\t\t\t\t\tr.find(arg[0], arg[1]);\n\t\t\t\t});\n\t\t\t}\n\t\t}());\n\n\t\tvar noop = function(){}, RAD, u;\n\t\tRadisk.has[opt.file] = r;\n\t\treturn r;\n\t}\n\n\t;(function(){\n\t\tvar _ = String.fromCharCode(31), u;\n\t\tRadisk.encode = function(d, o, s){ s = s || _;\n\t\t\tvar t = s, tmp;\n\t\t\tif(typeof d == 'string'){\n\t\t\t\tvar i = d.indexOf(s);\n\t\t\t\twhile(i != -1){ t += s; i = d.indexOf(s, i+1) }\n\t\t\t\treturn t + '\"' + d + s;\n\t\t\t} else\n\t\t\tif(d && d['#'] && 1 == Object.keys(d).length){\n\t\t\t\treturn t + '#' + tmp + t;\n\t\t\t} else\n\t\t\tif('number' == typeof d){\n\t\t\t\treturn t + '+' + (d||0) + t;\n\t\t\t} else\n\t\t\tif(null === d){\n\t\t\t\treturn t + ' ' + t;\n\t\t\t} else\n\t\t\tif(true === d){\n\t\t\t\treturn t + '+' + t;\n\t\t\t} else\n\t\t\tif(false === d){\n\t\t\t\treturn t + '-' + t;\n\t\t\t}// else\n\t\t\t//if(binary){}\n\t\t}\n\t\tRadisk.decode = function(t, o, s){ s = s || _;\n\t\t\tvar d = '', i = -1, n = 0, c, p;\n\t\t\tif(s !== t[0]){ return }\n\t\t\twhile(s === t[++i]){ ++n }\n\t\t\tp = t[c = n] || true;\n\t\t\twhile(--n >= 0){ i = t.indexOf(s, i+1) }\n\t\t\tif(i == -1){ i = t.length }\n\t\t\td = t.slice(c+1, i);\n\t\t\tif(o){ o.i = i+1 }\n\t\t\tif('\"' === p){\n\t\t\t\treturn d;\n\t\t\t} else\n\t\t\tif('#' === p){\n\t\t\t\treturn {'#':d};\n\t\t\t} else\n\t\t\tif('+' === p){\n\t\t\t\tif(0 === d.length){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn parseFloat(d);\n\t\t\t} else\n\t\t\tif(' ' === p){\n\t\t\t\treturn null;\n\t\t\t} else\n\t\t\tif('-' === p){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}());\n\n\tif(typeof window !== \"undefined\"){\n\t var Gun = window.Gun;\n\t var Radix = window.Radix;\n\t window.Radisk = Radisk;\n\t} else { \n\t var Gun = require('../gun');\n\t\tvar Radix = require('./radix');\n\t\t//var Radix = require('./radix2'); Radisk = require('./radisk2');\n\t\ttry{ module.exports = Radisk }catch(e){}\n\t}\n\n\tRadisk.Radix = Radix;\n\n}());","var Gun = (typeof window !== \"undefined\")? window.Gun : require('../gun');\n\nGun.on('create', function(root){\n if(Gun.TESTING){ root.opt.file = 'radatatest' }\n this.to.next(root);\n var opt = root.opt, empty = {}, u;\n if(false === opt.rad || false === opt.radisk){ return }\n if((u+'' != typeof process) && 'false' === ''+(process.env||'').RAD){ return }\n var Radisk = (Gun.window && Gun.window.Radisk) || require('./radisk');\n var Radix = Radisk.Radix;\n var dare = Radisk(opt), esc = String.fromCharCode(27);\n var ST = 0;\n \n root.on('put', function(msg){\n this.to.next(msg);\n if((msg._||'').rad){ return } // don't save what just came from a read.\n //if(msg['@']){ return } // WHY DID I NOT ADD THIS?\n var id = msg['#'], put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], tmp;\n var DBG = (msg._||'').DBG; DBG && (DBG.sp = DBG.sp || +new Date);\n //var lot = (msg._||'').lot||''; count[id] = (count[id] || 0) + 1; \n var S = (msg._||'').RPS || ((msg._||'').RPS = +new Date);\n //console.log(\"PUT ------->>>\", soul,key, val, state);\n //dare(soul+esc+key, {':': val, '>': state}, dare.one[id] || function(err, ok){\n dare(soul+esc+key, {':': val, '>': state}, function(err, ok){\n //console.log(\"<<<------- PAT\", soul,key, val, state, 'in', +new Date - S);\n DBG && (DBG.spd = DBG.spd || +new Date);\n console.STAT && console.STAT(S, +new Date - S, 'put');\n //if(!err && count[id] !== lot.s){ console.log(err = \"Disk count not same as ram count.\"); console.STAT && console.STAT(+new Date, lot.s - count[id], 'put ack != count') } delete count[id];\n if(err){ root.on('in', {'@': id, err: err, DBG: DBG}); return }\n root.on('in', {'@': id, ok: ok, DBG: DBG});\n //}, id, DBG && (DBG.r = DBG.r || {}));\n }, false && id, DBG && (DBG.r = DBG.r || {}));\n DBG && (DBG.sps = DBG.sps || +new Date);\n });\n var count = {}, obj_empty = Object.empty;\n \n root.on('get', function(msg){\n this.to.next(msg);\n var ctx = msg._||'', DBG = ctx.DBG = msg.DBG; DBG && (DBG.sg = +new Date);\n var id = msg['#'], get = msg.get, soul = msg.get['#'], has = msg.get['.']||'', o = {}, graph, lex, key, tmp, force;\n if('string' == typeof soul){\n key = soul;\n } else \n if(soul){\n if(u !== (tmp = soul['*'])){ o.limit = force = 1 }\n if(u !== soul['>']){ o.start = soul['>'] }\n if(u !== soul['<']){ o.end = soul['<'] }\n key = force? (''+tmp) : tmp || soul['='];\n force = null;\n }\n if(key && !o.limit){ // a soul.has must be on a soul, and not during soul*\n if('string' == typeof has){\n key = key+esc+(o.atom = has);\n } else \n if(has){\n if(u !== has['>']){ o.start = has['>']; o.limit = 1 }\n if(u !== has['<']){ o.end = has['<']; o.limit = 1 }\n if(u !== (tmp = has['*'])){ o.limit = force = 1 }\n if(key){ key = key+esc + (force? (''+(tmp||'')) : tmp || (o.atom = has['='] || '')) }\n }\n }\n if((tmp = get['%']) || o.limit){\n o.limit = (tmp <= (o.pack || (1000 * 100)))? tmp : 1;\n }\n if(has['-'] || (soul||{})['-'] || get['-']){ o.reverse = true }\n if((tmp = (root.next||'')[soul]) && tmp.put){\n if(o.atom){\n tmp = (tmp.next||'')[o.atom] ;\n if(tmp && tmp.rad){ return }\n } else\n if(tmp && tmp.rad){ return }\n }\n var now = Gun.state();\n var S = (+new Date), C = 0, SPT = 0; // STATS!\n DBG && (DBG.sgm = S);\n //var GID = String.random(3); console.log(\"GET ------->>>\", GID, key, o, '?', get);\n dare(key||'', function(err, data, info){\n //console.log(\"<<<------- GOT\", GID, +new Date - S, err, data);\n DBG && (DBG.sgr = +new Date);\n DBG && (DBG.sgi = info);\n try{opt.store.stats.get.time[statg % 50] = (+new Date) - S; ++statg;\n opt.store.stats.get.count++;\n if(err){ opt.store.stats.get.err = err }\n }catch(e){} // STATS!\n //if(u === data && info.chunks > 1){ return } // if we already sent a chunk, ignore ending empty responses. // this causes tests to fail.\n console.STAT && console.STAT(S, +new Date - S, 'got', JSON.stringify(key)); S = +new Date;\n info = info || '';\n var va, ve;\n if(info.unit && data && u !== (va = data[':']) && u !== (ve = data['>'])){ // new format\n var tmp = key.split(esc), so = tmp[0], ha = tmp[1];\n (graph = graph || {})[so] = Gun.state.ify(graph[so], ha, ve, va, so);\n root.$.get(so).get(ha)._.rad = now;\n // REMEMBER TO ADD _rad TO NODE/SOUL QUERY!\n } else\n if(data){ // old code path\n if(typeof data !== 'string'){\n if(o.atom){\n data = u;\n } else {\n Radix.map(data, each, o); // IS A RADIX TREE, NOT FUNCTION!\n }\n }\n if(!graph && data){ each(data, '') }\n // TODO: !has what about soul lookups?\n if(!o.atom && !has & 'string' == typeof soul && !o.limit && !o.more){\n root.$.get(soul)._.rad = now;\n }\n }\n DBG && (DBG.sgp = +new Date);\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // Or benchmark by reusing first start date.\n if(console.STAT && (ST = +new Date - S) > 9){ console.STAT(S, ST, 'got prep time'); console.STAT(S, C, 'got prep #') } SPT += ST; C = 0; S = +new Date;\n var faith = function(){}; faith.faith = true; faith.rad = get; // HNPERF: We're testing performance improvement by skipping going through security again, but this should be audited.\n root.on('in', {'@': id, put: graph, '%': info.more? 1 : u, err: err? err : u, _: faith, DBG: DBG});\n console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'got emit', Object.keys(graph||{}).length);\n graph = u; // each is outside our scope, we have to reset graph to nothing!\n }, o, DBG && (DBG.r = DBG.r || {}));\n DBG && (DBG.sgd = +new Date);\n console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'get call'); // TODO: Perf: this was half a second??????\n function each(val, has, a,b){ // TODO: THIS CODE NEEDS TO BE FASTER!!!!\n C++;\n if(!val){ return }\n has = (key+has).split(esc);\n var soul = has.slice(0,1)[0];\n has = has.slice(-1)[0];\n if(o.limit && o.limit <= o.count){ return true }\n var va, ve, so = soul, ha = has;\n //if(u !== (va = val[':']) && u !== (ve = val['>'])){ // THIS HANDLES NEW CODE!\n if('string' != typeof val){ // THIS HANDLES NEW CODE!\n va = val[':']; ve = val['>'];\n (graph = graph || {})[so] = Gun.state.ify(graph[so], ha, ve, va, so);\n //root.$.get(so).get(ha)._.rad = now;\n o.count = (o.count || 0) + ((va||'').length || 9);\n return;\n }\n o.count = (o.count || 0) + val.length;\n var tmp = val.lastIndexOf('>');\n var state = Radisk.decode(val.slice(tmp+1), null, esc);\n val = Radisk.decode(val.slice(0,tmp), null, esc);\n (graph = graph || {})[soul] = Gun.state.ify(graph[soul], has, state, val, soul);\n }\n });\n var val_is = Gun.valid;\n (opt.store||{}).stats = {get:{time:{}, count:0}, put: {time:{}, count:0}}; // STATS!\n var statg = 0, statp = 0; // STATS!\n});",";(function(){\n/* // from @jabis\nif (navigator.storage && navigator.storage.estimate) {\n const quota = await navigator.storage.estimate();\n // quota.usage -> Number of bytes used.\n // quota.quota -> Maximum number of bytes available.\n const percentageUsed = (quota.usage / quota.quota) * 100;\n console.log(`You've used ${percentageUsed}% of the available storage.`);\n const remaining = quota.quota - quota.usage;\n console.log(`You can write up to ${remaining} more bytes.`);\n}\n*/\n function Store(opt){\n opt = opt || {};\n opt.file = String(opt.file || 'radata');\n var store = Store[opt.file], db = null, u;\n\n if(store){\n console.log(\"Warning: reusing same IndexedDB store and options as 1st.\");\n return Store[opt.file];\n }\n store = Store[opt.file] = function(){};\n\n try{opt.indexedDB = opt.indexedDB || Store.indexedDB || indexedDB}catch(e){}\n try{if(!opt.indexedDB || 'file:' == location.protocol){\n var s = store.d || (store.d = {});\n store.put = function(f, d, cb){ s[f] = d; setTimeout(function(){ cb(null, 1) },250) };\n store.get = function(f, cb){ setTimeout(function(){ cb(null, s[f] || u) },5) };\n console.log('Warning: No indexedDB exists to persist data to!');\n return store;\n }}catch(e){}\n \n\n store.start = function(){\n var o = indexedDB.open(opt.file, 1);\n o.onupgradeneeded = function(eve){ (eve.target.result).createObjectStore(opt.file) }\n o.onsuccess = function(){ db = o.result }\n o.onerror = function(eve){ console.log(eve||1); }\n }; store.start();\n\n store.put = function(key, data, cb){\n if(!db){ setTimeout(function(){ store.put(key, data, cb) },1); return }\n var tx = db.transaction([opt.file], 'readwrite');\n var obj = tx.objectStore(opt.file);\n var req = obj.put(data, ''+key);\n req.onsuccess = obj.onsuccess = tx.onsuccess = function(){ cb(null, 1) }\n req.onabort = obj.onabort = tx.onabort = function(eve){ cb(eve||'put.tx.abort') }\n req.onerror = obj.onerror = tx.onerror = function(eve){ cb(eve||'put.tx.error') }\n }\n\n store.get = function(key, cb){\n if(!db){ setTimeout(function(){ store.get(key, cb) },9); return }\n var tx = db.transaction([opt.file], 'readonly');\n var obj = tx.objectStore(opt.file);\n var req = obj.get(''+key);\n req.onsuccess = function(){ cb(null, req.result) }\n req.onabort = function(eve){ cb(eve||4) }\n req.onerror = function(eve){ cb(eve||5) }\n }\n setInterval(function(){ db && db.close(); db = null; store.start() }, 1000 * 15); // reset webkit bug?\n return store;\n }\n\n if(typeof window !== \"undefined\"){\n (Store.window = window).RindexedDB = Store;\n Store.indexedDB = window.indexedDB; // safari bug\n } else {\n try{ module.exports = Store }catch(e){}\n }\n\n try{\n var Gun = Store.window.Gun || require('../gun');\n Gun.on('create', function(root){\n this.to.next(root);\n root.opt.store = root.opt.store || Store(root.opt);\n });\n }catch(e){}\n\n}());","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n attachments: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","/**\n * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2022 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n totalWeight += obj.weight;\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '6.6.2';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["require","global","throttle","func","limit","inThrottle","args","arguments","context","apply","setTimeout","debounce","inDebounce","clearTimeout","sample","arr","Math","floor","random","length","sampleSize","size","shuffled","slice","i","min","temp","index","defer","once","called","omit","obj","keys","newObj","Object","forEach","key","includes","defaults","undefined","pickBy","predicate","isNode","prototype","toString","call","process","e","userAgent","navigator","toLowerCase","isElectron","indexOf","isMobile","check","a","test","substr","vendor","gunAsAnotherUser","gun","f","gun2","Gun","radisk","peers","_","opt","user","auth","values","back","peer","on","gunOnceDefined","node","Promise","resolve","val","_k","_a","eve","off","animals","adjectives","getHash","str","format","SEA","work","name","hash","Error","base64ToHex","capitalize","s","charAt","toUpperCase","generateName","raw","atob","result","hex","charCodeAt","getCaret","el","selectionStart","document","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","injectCss","elementId","getElementById","sheet","createElement","id","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sPageURL","window","location","search","substring","sURLVariables","split","sParameterName","decodeURIComponent","formatTime","date","t","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","now","nowStr","Date","toLocaleDateString","dayDifference","round","weekday","getProfileLink","pub","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","delay","require$$2","require$$0","require$$1","ELECTRON_GUN_URL","maxConnectedPeers","DEFAULT_PEERS","loc","host","is_localhost_but_not_dev","startsWith","hostname","endsWith","url","enabled","urlRegex","known","add","from","k","visibility","secret","Session","getKey","epub","encrypt","encryptedUrl","encryptedUrlHash","publicState","get","put","lastSeen","toISOString","connect","save","remove","disconnect","peerFromGun","localStorage","setItem","JSON","stringify","getSaved","p","getItem","parse","util","reset","isMixedContent","disable","protocol","connectToLocalElectron","max","push","checkGunPeerCount","peersFromGun","connectedPeers","filter","wire","constructor","console","log","readyState","bufferedAmount","unconnectedPeers","addedToGun","map","mixedContent","String","init","setInterval","opts","myOpts","assign","retry","Infinity","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","uuid","Attribute","b","value","guessTypeOf","getUuid","replace","getUniqueIdValidators","isUniqueType","match","equals","uri","currentUser","session","DEFAULT_PERMISSIONS","read","write","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","Array","isArray","o","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","then","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","decrypt","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","block","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","getOurSecretChannelId","pair","getTheirSecretChannelId","getChannels","listenToChatLinks","keypair","getMyChatLinks","seen","handleChannel","ourSecretChannelId","encryptedChatId","chatId","getMessages","theirSecretChannelId","data","messageReceived","userState","selfAuthored","messages","decrypted","info","getLatestMsg","callbackIfLatest","msg","latest","time","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","theirMsgsLastSeenTime","removeParticipant","permissions","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","send","trim","putGroup","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","v","hasWritePermission","hasOwnProperty","subscription","theirSecretUuid","_b","setTyping","isTyping","timeout","setTypingTimeout","getTyping","typing","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","chatLinks","chatLinkSubscriptions","links","link","channels","formatChatLink","encPub","requestId","createChatLink","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","close","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","getActivity","status","isActive","undelivered","querySelectorAll","getAttribute","lastActive","c","unseen","indicator","msgEl","parentElement","msgClass","msgContent","seenIndicator","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","state","timerUpdate","pubKey","activityDate","getTime","isOnline","enc","removeGroupChatLink","removePrivateChatLink","deleteChannel","deleteGroup","Map","publicKey","set","LOCALFORAGE_NULL","notInLocalForage","Set","localForage","config","driver","LOCALSTORAGE","INDEXEDDB","WEBSQL","Node","loaded","loadLocalForage","removeItem","has","newResult","all","on_subscriptions","map_subscriptions","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","lastIndexOf","counter","child","local","blockedUsers","isBlocked","_v","cache","callbacks","groupName","path","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","reduce","sum","_cached_map","cached","cacheKey","myEvent","x","item","cb","_cached_on","_cached_count","count","pop","_cached_fn","fn","callbackId","myCallbacks","NOTIFICATION_SERVICE_URL","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","privateState","notificationSetting","getMyName","shouldDesktopNotify","shouldAudioNotify","title","participantProfiles","desktopNotification","icon","silent","onclick","changeUnseenNotificationCount","changeChatUnseenMsgsCount","change","chat","chatNode","publicVapidKey","urlBase64ToUint8Array","base64String","padding","repeat","base64","rawData","outputArray","Uint8Array","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","error","subscribeToWebPush","serviceWorker","ready","getRegistration","active","postMessage","getSubscription","sub","addWebPushSubscriptionsToChats","channelIds","removeSubscription","saveToGun","myKey","getWebPushSubscriptions","getEpub","getNotificationText","notification","profile","action","eventText","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","target","sendIrisNotification","recipient","sendWebPushNotification","shouldWebPush","subscriptions","payload","endpoint","fetch","method","headers","changeChatUnseenCount","electron","file","multicast","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","shift","includeScore","includeMatches","threshold","Fuse","leading","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","l","autofollow","logOut","unsubscribe","clear","localforage","href","r1","indexedDB","deleteDatabase","r2","r1done","r2done","onerror","onsuccess","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","d","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","matches","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","reject","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","privKeyFile","existsSync","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","sign","sig","verify","errorMsg","ValidationError","SignedMessage","signedData","_validate","_getArray","authorOrRecipient","j","elementValue","_getIterable","Symbol","iterator","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","signerKeyHash","attr","timestamp","isNaN","rating","maxRating","minRating","isPositive","isNegative","isNeutral","create","signingKey","m","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","serialize","deserialize","setReaction","reaction","rootContact","staticState"],"mappings":"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"} \ No newline at end of file diff --git a/iris-lib/dist/iris.umd.production.min.js.map b/iris-lib/dist/iris.umd.production.min.js.map index 11f6203a..a82d59be 100644 --- a/iris-lib/dist/iris.umd.production.min.js.map +++ b/iris-lib/dist/iris.umd.production.min.js.map @@ -1 +1 @@ -{"version":3,"file":"iris.umd.production.min.js","sources":["../node_modules/gun/gun.js","../node_modules/gun/sea.js","../src/lodash.ts","../src/util.ts","../node_modules/gun/lib/yson.js","../node_modules/gun/lib/radix.js","../node_modules/gun/lib/radisk.js","../node_modules/gun/lib/store.js","../node_modules/gun/lib/rindexed.js","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../node_modules/localforage/dist/localforage.js","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../node_modules/fuse.js/dist/fuse.esm.js","../src/electron.ts","../src/session.ts","../src/Key.ts","../src/static.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":[";(function(){\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n\t;USE(function(module){\n\t\t// Shim for generic javascript utilities.\n\t\tString.random = function(l, c){\n\t\t\tvar s = '';\n\t\t\tl = l || 24; // you are not going to make a 0 length random number, so no need to check type\n\t\t\tc = c || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz';\n\t\t\twhile(l-- > 0){ s += c.charAt(Math.floor(Math.random() * c.length)) }\n\t\t\treturn s;\n\t\t}\n\t\tString.match = function(t, o){ var tmp, u;\n\t\t\tif('string' !== typeof t){ return false }\n\t\t\tif('string' == typeof o){ o = {'=': o} }\n\t\t\to = o || {};\n\t\t\ttmp = (o['='] || o['*'] || o['>'] || o['<']);\n\t\t\tif(t === tmp){ return true }\n\t\t\tif(u !== o['=']){ return false }\n\t\t\ttmp = (o['*'] || o['>']);\n\t\t\tif(t.slice(0, (tmp||'').length) === tmp){ return true }\n\t\t\tif(u !== o['*']){ return false }\n\t\t\tif(u !== o['>'] && u !== o['<']){\n\t\t\t\treturn (t >= o['>'] && t <= o['<'])? true : false;\n\t\t\t}\n\t\t\tif(u !== o['>'] && t >= o['>']){ return true }\n\t\t\tif(u !== o['<'] && t <= o['<']){ return true }\n\t\t\treturn false;\n\t\t}\n\t\tString.hash = function(s, c){ // via SO\n\t\t\tif(typeof s !== 'string'){ return }\n\t c = c || 0; // CPU schedule hashing by\n\t if(!s.length){ return c }\n\t for(var i=0,l=s.length,n; i= (check.now() - l)) && c++ < 3333){ f(); return }\n\t\t\t\tsI(function(){ l = check.now(); f() },c=0)\n\t\t\t}\n\t\t}());\n\t\t;(function(){ // Too many polls block, this \"threads\" them in turns over a single thread in time.\n\t\t\tvar sT = setTimeout, t = sT.turn = sT.turn || function(f){ 1 == s.push(f) && p(T) }\n\t\t\t, s = t.s = [], p = sT.poll, i = 0, f, T = function(){\n\t\t\t\tif(f = s[i++]){ f() }\n\t\t\t\tif(i == s.length || 99 == i){\n\t\t\t\t\ts = t.s = s.slice(i);\n\t\t\t\t\ti = 0;\n\t\t\t\t}\n\t\t\t\tif(s.length){ p(T) }\n\t\t\t}\n\t\t}());\n\t\t;(function(){\n\t\t\tvar u, sT = setTimeout, T = sT.turn;\n\t\t\t(sT.each = sT.each || function(l,f,e,S){ S = S || 9; (function t(s,L,r){\n\t\t\t if(L = (s = (l||[]).splice(0,S)).length){\n\t\t\t \tfor(var i = 0; i < L; i++){\n\t\t\t \t\tif(u !== (r = f(s[i]))){ break }\n\t\t\t \t}\n\t\t\t \tif(u === r){ T(t); return }\n\t\t\t } e && e(r);\n\t\t\t}())})();\n\t\t}());\n\t})(USE, './shim');\n\n\t;USE(function(module){\n\t\t// On event emitter generic javascript utility.\n\t\tmodule.exports = function onto(tag, arg, as){\n\t\t\tif(!tag){ return {to: onto} }\n\t\t\tvar u, f = 'function' == typeof arg, tag = (this.tag || (this.tag = {}))[tag] || f && (\n\t\t\t\tthis.tag[tag] = {tag: tag, to: onto._ = { next: function(arg){ var tmp;\n\t\t\t\t\tif(tmp = this.to){ tmp.next(arg) }\n\t\t\t}}});\n\t\t\tif(f){\n\t\t\t\tvar be = {\n\t\t\t\t\toff: onto.off ||\n\t\t\t\t\t(onto.off = function(){\n\t\t\t\t\t\tif(this.next === onto._.next){ return !0 }\n\t\t\t\t\t\tif(this === this.the.last){\n\t\t\t\t\t\t\tthis.the.last = this.back;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.to.back = this.back;\n\t\t\t\t\t\tthis.next = onto._.next;\n\t\t\t\t\t\tthis.back.to = this.to;\n\t\t\t\t\t\tif(this.the.last === this.the){\n\t\t\t\t\t\t\tdelete this.on.tag[this.the.tag];\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tto: onto._,\n\t\t\t\t\tnext: arg,\n\t\t\t\t\tthe: tag,\n\t\t\t\t\ton: this,\n\t\t\t\t\tas: as,\n\t\t\t\t};\n\t\t\t\t(be.back = tag.last || tag).to = be;\n\t\t\t\treturn tag.last = be;\n\t\t\t}\n\t\t\tif((tag = tag.to) && u !== arg){ tag.next(arg) }\n\t\t\treturn tag;\n\t\t};\n\t})(USE, './onto');\n\n\t;USE(function(module){\n\t\t// Valid values are a subset of JSON: null, binary, number (!Infinity), text,\n\t\t// or a soul relation. Arrays need special algorithms to handle concurrency,\n\t\t// so they are not supported directly. Use an extension that supports them if\n\t\t// needed but research their problems first.\n\t\tmodule.exports = function (v) {\n\t\t // \"deletes\", nulling out keys.\n\t\t return v === null ||\n\t\t\t\"string\" === typeof v ||\n\t\t\t\"boolean\" === typeof v ||\n\t\t\t// we want +/- Infinity to be, but JSON does not support it, sad face.\n\t\t\t// can you guess what v === v checks for? ;)\n\t\t\t(\"number\" === typeof v && v != Infinity && v != -Infinity && v === v) ||\n\t\t\t(!!v && \"string\" == typeof v[\"#\"] && Object.keys(v).length === 1 && v[\"#\"]);\n\t\t}\n\t})(USE, './valid');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\t\tfunction State(){\n\t\t\tvar t = +new Date;\n\t\t\tif(last < t){\n\t\t\t\treturn N = 0, last = t + State.drift;\n\t\t\t}\n\t\t\treturn last = t + ((N += 1) / D) + State.drift;\n\t\t}\n\t\tState.drift = 0;\n\t\tvar NI = -Infinity, N = 0, D = 999, last = NI, u; // WARNING! In the future, on machines that are D times faster than 2016AD machines, you will want to increase D by another several orders of magnitude so the processing speed never out paces the decimal resolution (increasing an integer effects the state accuracy).\n\t\tState.is = function(n, k, o){ // convenience function to get the state on a key on a node and return it.\n\t\t\tvar tmp = (k && n && n._ && n._['>']) || o;\n\t\t\tif(!tmp){ return }\n\t\t\treturn ('number' == typeof (tmp = tmp[k]))? tmp : NI;\n\t\t}\n\t\tState.ify = function(n, k, s, v, soul){ // put a key's state on a node.\n\t\t\t(n = n || {})._ = n._ || {}; // safety check or init.\n\t\t\tif(soul){ n._['#'] = soul } // set a soul if specified.\n\t\t\tvar tmp = n._['>'] || (n._['>'] = {}); // grab the states data.\n\t\t\tif(u !== k && k !== '_'){\n\t\t\t\tif('number' == typeof s){ tmp[k] = s } // add the valid state.\n\t\t\t\tif(u !== v){ n[k] = v } // Note: Not its job to check for valid values!\n\t\t\t}\n\t\t\treturn n;\n\t\t}\n\t\tmodule.exports = State;\n\t})(USE, './state');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\t\tfunction Dup(opt){\n\t\t\tvar dup = {s:{}}, s = dup.s;\n\t\t\topt = opt || {max: 999, age: 1000 * 9};//*/ 1000 * 9 * 3};\n\t\t\tdup.check = function(id){\n\t\t\t\tif(!s[id]){ return false }\n\t\t\t\treturn dt(id);\n\t\t\t}\n\t\t\tvar dt = dup.track = function(id){\n\t\t\t\tvar it = s[id] || (s[id] = {});\n\t\t\t\tit.was = dup.now = +new Date;\n\t\t\t\tif(!dup.to){ dup.to = setTimeout(dup.drop, opt.age + 9) }\n\t\t\t\tif(dt.ed){ dt.ed(id) }\n\t\t\t\treturn it;\n\t\t\t}\n\t\t\tdup.drop = function(age){\n\t\t\t\tdup.to = null;\n\t\t\t\tdup.now = +new Date;\n\t\t\t\tvar l = Object.keys(s);\n\t\t\t\tconsole.STAT && console.STAT(dup.now, +new Date - dup.now, 'dup drop keys'); // prev ~20% CPU 7% RAM 300MB // now ~25% CPU 7% RAM 500MB\n\t\t\t\tsetTimeout.each(l, function(id){ var it = s[id]; // TODO: .keys( is slow?\n\t\t\t\t\tif(it && (age || opt.age) > (dup.now - it.was)){ return }\n\t\t\t\t\tdelete s[id];\n\t\t\t\t},0,99);\n\t\t\t}\n\t\t\treturn dup;\n\t\t}\n\t\tmodule.exports = Dup;\n\t})(USE, './dup');\n\n\t;USE(function(module){\n\t\t// request / response module, for asking and acking messages.\n\t\tUSE('./onto'); // depends upon onto!\n\t\tmodule.exports = function ask(cb, as){\n\t\t\tif(!this.on){ return }\n\t\t\tvar lack = (this.opt||{}).lack || 9000;\n\t\t\tif(!('function' == typeof cb)){\n\t\t\t\tif(!cb){ return }\n\t\t\t\tvar id = cb['#'] || cb, tmp = (this.tag||'')[id];\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tif(as){\n\t\t\t\t\ttmp = this.on(id, as);\n\t\t\t\t\tclearTimeout(tmp.err);\n\t\t\t\t\ttmp.err = setTimeout(function(){ tmp.off() }, lack);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar id = (as && as['#']) || random(9);\n\t\t\tif(!cb){ return id }\n\t\t\tvar to = this.on(id, cb, as);\n\t\t\tto.err = to.err || setTimeout(function(){ to.off();\n\t\t\t\tto.next({err: \"Error: No ACK yet.\", lack: true});\n\t\t\t}, lack);\n\t\t\treturn id;\n\t\t}\n\t\tvar random = String.random || function(){ return Math.random().toString(36).slice(2) }\n\t})(USE, './ask');\n\n\t;USE(function(module){\n\n\t\tfunction Gun(o){\n\t\t\tif(o instanceof Gun){ return (this._ = {$: this}).$ }\n\t\t\tif(!(this instanceof Gun)){ return new Gun(o) }\n\t\t\treturn Gun.create(this._ = {$: this, opt: o});\n\t\t}\n\n\t\tGun.is = function($){ return ($ instanceof Gun) || ($ && $._ && ($ === $._.$)) || false }\n\n\t\tGun.version = 0.2020;\n\n\t\tGun.chain = Gun.prototype;\n\t\tGun.chain.toJSON = function(){};\n\n\t\tUSE('./shim');\n\t\tGun.valid = USE('./valid');\n\t\tGun.state = USE('./state');\n\t\tGun.on = USE('./onto');\n\t\tGun.dup = USE('./dup');\n\t\tGun.ask = USE('./ask');\n\n\t\t;(function(){\n\t\t\tGun.create = function(at){\n\t\t\t\tat.root = at.root || at;\n\t\t\t\tat.graph = at.graph || {};\n\t\t\t\tat.on = at.on || Gun.on;\n\t\t\t\tat.ask = at.ask || Gun.ask;\n\t\t\t\tat.dup = at.dup || Gun.dup();\n\t\t\t\tvar gun = at.$.opt(at.opt);\n\t\t\t\tif(!at.once){\n\t\t\t\t\tat.on('in', universe, at);\n\t\t\t\t\tat.on('out', universe, at);\n\t\t\t\t\tat.on('put', map, at);\n\t\t\t\t\tGun.on('create', at);\n\t\t\t\t\tat.on('create', at);\n\t\t\t\t}\n\t\t\t\tat.once = 1;\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tfunction universe(msg){\n\t\t\t\t// TODO: BUG! msg.out = null being set!\n\t\t\t\t//if(!F){ var eve = this; setTimeout(function(){ universe.call(eve, msg,1) },Math.random() * 100);return; } // ADD F TO PARAMS!\n\t\t\t\tif(!msg){ return }\n\t\t\t\tif(msg.out === universe){ this.to.next(msg); return }\n\t\t\t\tvar eve = this, as = eve.as, at = as.at || as, gun = at.$, dup = at.dup, tmp, DBG = msg.DBG;\n\t\t\t\t(tmp = msg['#']) || (tmp = msg['#'] = text_rand(9));\n\t\t\t\tif(dup.check(tmp)){ return } dup.track(tmp);\n\t\t\t\ttmp = msg._; msg._ = ('function' == typeof tmp)? tmp : function(){};\n\t\t\t\t(msg.$ && (msg.$ === (msg.$._||'').$)) || (msg.$ = gun);\n\t\t\t\tif(msg['@'] && !msg.put){ ack(msg) }\n\t\t\t\tif(!at.ask(msg['@'], msg)){ // is this machine listening for an ack?\n\t\t\t\t\tDBG && (DBG.u = +new Date);\n\t\t\t\t\tif(msg.put){ put(msg); return } else\n\t\t\t\t\tif(msg.get){ Gun.on.get(msg, gun) }\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.uc = +new Date);\n\t\t\t\teve.to.next(msg);\n\t\t\t\tDBG && (DBG.ua = +new Date);\n\t\t\t\tif(msg.nts || msg.NTS){ return } // TODO: This shouldn't be in core, but fast way to prevent NTS spread. Delete this line after all peers have upgraded to newer versions.\n\t\t\t\tmsg.out = universe; at.on('out', msg);\n\t\t\t\tDBG && (DBG.ue = +new Date);\n\t\t\t}\n\t\t\tfunction put(msg){\n\t\t\t\tif(!msg){ return }\n\t\t\t\tvar ctx = msg._||'', root = ctx.root = ((ctx.$ = msg.$||'')._||'').root;\n\t\t\t\tif(msg['@'] && ctx.faith && !ctx.miss){ // TODO: AXE may split/route based on 'put' what should we do here? Detect @ in AXE? I think we don't have to worry, as DAM will route it on @.\n\t\t\t\t\tmsg.out = universe;\n\t\t\t\t\troot.on('out', msg);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.latch = root.hatch; ctx.match = root.hatch = [];\n\t\t\t\tvar put = msg.put;\n\t\t\t\tvar DBG = ctx.DBG = msg.DBG, S = +new Date; CT = CT || S;\n\t\t\t\tif(put['#'] && put['.']){ /*root && root.on('put', msg);*/ return } // TODO: BUG! This needs to call HAM instead.\n\t\t\t\tDBG && (DBG.p = S);\n\t\t\t\tctx['#'] = msg['#'];\n\t\t\t\tctx.msg = msg;\n\t\t\t\tctx.all = 0;\n\t\t\t\tctx.stun = 1;\n\t\t\t\tvar nl = Object.keys(put);//.sort(); // TODO: This is unbounded operation, large graphs will be slower. Write our own CPU scheduled sort? Or somehow do it in below? Keys itself is not O(1) either, create ES5 shim over ?weak map? or custom which is constant.\n\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).pk = +new Date) - S, 'put sort');\n\t\t\t\tvar ni = 0, nj, kl, soul, node, states, err, tmp;\n\t\t\t\t(function pop(o){\n\t\t\t\t\tif(nj != ni){ nj = ni;\n\t\t\t\t\t\tif(!(soul = nl[ni])){\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).pd = +new Date) - S, 'put');\n\t\t\t\t\t\t\tfire(ctx);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!(node = put[soul])){ err = ERR+cut(soul)+\"no node.\" } else\n\t\t\t\t\t\tif(!(tmp = node._)){ err = ERR+cut(soul)+\"no meta.\" } else\n\t\t\t\t\t\tif(soul !== tmp['#']){ err = ERR+cut(soul)+\"soul not same.\" } else\n\t\t\t\t\t\tif(!(states = tmp['>'])){ err = ERR+cut(soul)+\"no state.\" }\n\t\t\t\t\t\tkl = Object.keys(node||{}); // TODO: .keys( is slow\n\t\t\t\t\t}\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tmsg.err = ctx.err = err; // invalid data should error and stun the message.\n\t\t\t\t\t\tfire(ctx);\n\t\t\t\t\t\t//console.log(\"handle error!\", err) // handle!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar i = 0, key; o = o || 0;\n\t\t\t\t\twhile(o++ < 9 && (key = kl[i++])){\n\t\t\t\t\t\tif('_' === key){ continue }\n\t\t\t\t\t\tvar val = node[key], state = states[key];\n\t\t\t\t\t\tif(u === state){ err = ERR+cut(key)+\"on\"+cut(soul)+\"no state.\"; break }\n\t\t\t\t\t\tif(!valid(val)){ err = ERR+cut(key)+\"on\"+cut(soul)+\"bad \"+(typeof val)+cut(val); break }\n\t\t\t\t\t\t//ctx.all++; //ctx.ack[soul+key] = '';\n\t\t\t\t\t\tham(val, key, soul, state, msg);\n\t\t\t\t\t\t++C; // courtesy count;\n\t\t\t\t\t}\n\t\t\t\t\tif((kl = kl.slice(i)).length){ turn(pop); return }\n\t\t\t\t\t++ni; kl = null; pop(o);\n\t\t\t\t}());\n\t\t\t} Gun.on.put = put;\n\t\t\t// TODO: MARK!!! clock below, reconnect sync, SEA certify wire merge, User.auth taking multiple times, // msg put, put, say ack, hear loop...\n\t\t\t// WASIS BUG! local peer not ack. .off other people: .open\n\t\t\tfunction ham(val, key, soul, state, msg){\n\t\t\t\tvar ctx = msg._||'', root = ctx.root, graph = root.graph, lot, tmp;\n\t\t\t\tvar vertex = graph[soul] || empty, was = state_is(vertex, key, 1), known = vertex[key];\n\t\t\t\t\n\t\t\t\tvar DBG = ctx.DBG; if(tmp = console.STAT){ if(!graph[soul] || !known){ tmp.has = (tmp.has || 0) + 1 } }\n\n\t\t\t\tvar now = State(), u;\n\t\t\t\tif(state > now){\n\t\t\t\t\tsetTimeout(function(){ ham(val, key, soul, state, msg) }, (tmp = state - now) > MD? MD : tmp); // Max Defer 32bit. :(\n\t\t\t\t\tconsole.STAT && console.STAT(((DBG||ctx).Hf = +new Date), tmp, 'future');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(state < was){ /*old;*/ if(true || !ctx.miss){ return } } // but some chains have a cache miss that need to re-fire. // TODO: Improve in future. // for AXE this would reduce rebroadcast, but GUN does it on message forwarding. // TURNS OUT CACHE MISS WAS NOT NEEDED FOR NEW CHAINS ANYMORE!!! DANGER DANGER DANGER, ALWAYS RETURN! (or am I missing something?)\n\t\t\t\tif(!ctx.faith){ // TODO: BUG? Can this be used for cache miss as well? // Yes this was a bug, need to check cache miss for RAD tests, but should we care about the faith check now? Probably not.\n\t\t\t\t\tif(state === was && (val === known || L(val) <= L(known))){ /*console.log(\"same\");*/ /*same;*/ if(!ctx.miss){ return } } // same\n\t\t\t\t}\n\t\t\t\tctx.stun++; // TODO: 'forget' feature in SEA tied to this, bad approach, but hacked in for now. Any changes here must update there.\n\t\t\t\tvar aid = msg['#']+ctx.all++, id = {toString: function(){ return aid }, _: ctx}; id.toJSON = id.toString; // this *trick* makes it compatible between old & new versions.\n\t\t\t\troot.dup.track(id)['#'] = msg['#']; // fixes new OK acks for RPC like RTC.\n\t\t\t\tDBG && (DBG.ph = DBG.ph || +new Date);\n\t\t\t\troot.on('put', {'#': id, '@': msg['@'], put: {'#': soul, '.': key, ':': val, '>': state}, ok: msg.ok, _: ctx});\n\t\t\t}\n\t\t\tfunction map(msg){\n\t\t\t\tvar DBG; if(DBG = (msg._||'').DBG){ DBG.pa = +new Date; DBG.pm = DBG.pm || +new Date}\n \tvar eve = this, root = eve.as, graph = root.graph, ctx = msg._, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n \tif((tmp = ctx.msg) && (tmp = tmp.put) && (tmp = tmp[soul])){ state_ify(tmp, key, state, val, soul) } // necessary! or else out messages do not get SEA transforms.\n \t//var bytes = ((graph[soul]||'')[key]||'').length||1;\n\t\t\t\tgraph[soul] = state_ify(graph[soul], key, state, val, soul);\n\t\t\t\tif(tmp = (root.next||'')[soul]){\n\t\t\t\t\t//tmp.bytes = (tmp.bytes||0) + ((val||'').length||1) - bytes;\n\t\t\t\t\t//if(tmp.bytes > 2**13){ Gun.log.once('byte-limit', \"Note: In the future, GUN peers will enforce a ~4KB query limit. Please see https://gun.eco/docs/Page\") }\n\t\t\t\t\ttmp.on('in', msg)\n\t\t\t\t}\n\t\t\t\tfire(ctx);\n\t\t\t\teve.to.next(msg);\n\t\t\t}\n\t\t\tfunction fire(ctx, msg){ var root;\n\t\t\t\tif(ctx.stop){ return }\n\t\t\t\tif(!ctx.err && 0 < --ctx.stun){ return } // TODO: 'forget' feature in SEA tied to this, bad approach, but hacked in for now. Any changes here must update there.\n\t\t\t\tctx.stop = 1;\n\t\t\t\tif(!(root = ctx.root)){ return }\n\t\t\t\tvar tmp = ctx.match; tmp.end = 1;\n\t\t\t\tif(tmp === root.hatch){ if(!(tmp = ctx.latch) || tmp.end){ delete root.hatch } else { root.hatch = tmp } }\n\t\t\t\tctx.hatch && ctx.hatch(); // TODO: rename/rework how put & this interact.\n\t\t\t\tsetTimeout.each(ctx.match, function(cb){cb && cb()}); \n\t\t\t\tif(!(msg = ctx.msg) || ctx.err || msg.err){ return }\n\t\t\t\tmsg.out = universe;\n\t\t\t\tctx.root.on('out', msg);\n\n\t\t\t\tCF(); // courtesy check;\n\t\t\t}\n\t\t\tfunction ack(msg){ // aggregate ACKs.\n\t\t\t\tvar id = msg['@'] || '', ctx, ok, tmp;\n\t\t\t\tif(!(ctx = id._)){\n\t\t\t\t\tvar dup = (dup = msg.$) && (dup = dup._) && (dup = dup.root) && (dup = dup.dup);\n\t\t\t\t\tif(!(dup = dup.check(id))){ return }\n\t\t\t\t\tmsg['@'] = dup['#'] || msg['@']; // This doesn't do anything anymore, backtrack it to something else?\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.acks = (ctx.acks||0) + 1;\n\t\t\t\tif(ctx.err = msg.err){\n\t\t\t\t\tmsg['@'] = ctx['#'];\n\t\t\t\t\tfire(ctx); // TODO: BUG? How it skips/stops propagation of msg if any 1 item is error, this would assume a whole batch/resync has same malicious intent.\n\t\t\t\t}\n\t\t\t\tctx.ok = msg.ok || ctx.ok;\n\t\t\t\tif(!ctx.stop && !ctx.crack){ ctx.crack = ctx.match && ctx.match.push(function(){back(ctx)}) } // handle synchronous acks. NOTE: If a storage peer ACKs synchronously then the PUT loop has not even counted up how many items need to be processed, so ctx.STOP flags this and adds only 1 callback to the end of the PUT loop.\n\t\t\t\tback(ctx);\n\t\t\t}\n\t\t\tfunction back(ctx){\n\t\t\t\tif(!ctx || !ctx.root){ return }\n\t\t\t\tif(ctx.stun || ctx.acks !== ctx.all){ return }\n\t\t\t\tctx.root.on('in', {'@': ctx['#'], err: ctx.err, ok: ctx.err? u : ctx.ok || {'':1}});\n\t\t\t}\n\n\t\t\tvar ERR = \"Error: Invalid graph!\";\n\t\t\tvar cut = function(s){ return \" '\"+(''+s).slice(0,9)+\"...' \" }\n\t\t\tvar L = JSON.stringify, MD = 2147483647, State = Gun.state;\n\t\t\tvar C = 0, CT, CF = function(){if(C>999 && (C/-(CT - (CT = +new Date))>1)){Gun.window && console.log(\"Warning: You're syncing 1K+ records a second, faster than DOM can update - consider limiting query.\");CF=function(){C=0}}};\n\n\t\t}());\n\n\t\t;(function(){\n\t\t\tGun.on.get = function(msg, gun){\n\t\t\t\tvar root = gun._, get = msg.get, soul = get['#'], node = root.graph[soul], has = get['.'];\n\t\t\t\tvar next = root.next || (root.next = {}), at = next[soul];\n\n\t\t\t\t// TODO: Azarattum bug, what is in graph is not same as what is in next. Fix!\n\n\t\t\t\t// queue concurrent GETs?\n\t\t\t\t// TODO: consider tagging original message into dup for DAM.\n\t\t\t\t// TODO: ^ above? In chat app, 12 messages resulted in same peer asking for `#user.pub` 12 times. (same with #user GET too, yipes!) // DAM note: This also resulted in 12 replies from 1 peer which all had same ##hash but none of them deduped because each get was different.\n\t\t\t\t// TODO: Moving quick hacks fixing these things to axe for now.\n\t\t\t\t// TODO: a lot of GET #foo then GET #foo.\"\" happening, why?\n\t\t\t\t// TODO: DAM's ## hash check, on same get ACK, producing multiple replies still, maybe JSON vs YSON?\n\t\t\t\t// TMP note for now: viMZq1slG was chat LEX query #.\n\t\t\t\t/*if(gun !== (tmp = msg.$) && (tmp = (tmp||'')._)){\n\t\t\t\t\tif(tmp.Q){ tmp.Q[msg['#']] = ''; return } // chain does not need to ask for it again.\n\t\t\t\t\ttmp.Q = {};\n\t\t\t\t}*/\n\t\t\t\t/*if(u === has){\n\t\t\t\t\tif(at.Q){\n\t\t\t\t\t\t//at.Q[msg['#']] = '';\n\t\t\t\t\t\t//return;\n\t\t\t\t\t}\n\t\t\t\t\tat.Q = {};\n\t\t\t\t}*/\n\t\t\t\tvar ctx = msg._||{}, DBG = ctx.DBG = msg.DBG;\n\t\t\t\tDBG && (DBG.g = +new Date);\n\t\t\t\t//console.log(\"GET:\", get, node, has);\n\t\t\t\tif(!node){ return root.on('get', msg) }\n\t\t\t\tif(has){\n\t\t\t\t\tif('string' != typeof has || u === node[has]){\n\t\t\t\t\t\tif(!((at||'').next||'')[has]){ root.on('get', msg); return }\n\t\t\t\t\t}\n\t\t\t\t\tnode = state_ify({}, has, state_is(node, has), node[has], soul);\n\t\t\t\t\t// If we have a key in-memory, do we really need to fetch?\n\t\t\t\t\t// Maybe... in case the in-memory key we have is a local write\n\t\t\t\t\t// we still need to trigger a pull/merge from peers.\n\t\t\t\t}\n\t\t\t\t//Gun.window? Gun.obj.copy(node) : node; // HNPERF: If !browser bump Performance? Is this too dangerous to reference root graph? Copy / shallow copy too expensive for big nodes. Gun.obj.to(node); // 1 layer deep copy // Gun.obj.copy(node); // too slow on big nodes\n\t\t\t\tnode && ack(msg, node);\n\t\t\t\troot.on('get', msg); // send GET to storage adapters.\n\t\t\t}\n\t\t\tfunction ack(msg, node){\n\t\t\t\tvar S = +new Date, ctx = msg._||{}, DBG = ctx.DBG = msg.DBG;\n\t\t\t\tvar to = msg['#'], id = text_rand(9), keys = Object.keys(node||'').sort(), soul = ((node||'')._||'')['#'], kl = keys.length, j = 0, root = msg.$._.root, F = (node === root.graph[soul]);\n\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).gk = +new Date) - S, 'got keys');\n\t\t\t\t// PERF: Consider commenting this out to force disk-only reads for perf testing? // TODO: .keys( is slow\n\t\t\t\tnode && (function go(){\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tvar i = 0, k, put = {}, tmp;\n\t\t\t\t\twhile(i < 9 && (k = keys[i++])){\n\t\t\t\t\t\tstate_ify(put, k, state_is(node, k), node[k], soul);\n\t\t\t\t\t}\n\t\t\t\t\tkeys = keys.slice(i);\n\t\t\t\t\t(tmp = {})[soul] = put; put = tmp;\n\t\t\t\t\tvar faith; if(F){ faith = function(){}; faith.ram = faith.faith = true; } // HNPERF: We're testing performance improvement by skipping going through security again, but this should be audited.\n\t\t\t\t\ttmp = keys.length;\n\t\t\t\t\tconsole.STAT && console.STAT(S, -(S - (S = +new Date)), 'got copied some');\n\t\t\t\t\tDBG && (DBG.ga = +new Date);\n\t\t\t\t\troot.on('in', {'@': to, '#': id, put: put, '%': (tmp? (id = text_rand(9)) : u), $: root.$, _: faith, DBG: DBG, FOO: 1});\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'got in');\n\t\t\t\t\tif(!tmp){ return }\n\t\t\t\t\tsetTimeout.turn(go);\n\t\t\t\t}());\n\t\t\t\tif(!node){ root.on('in', {'@': msg['#']}) } // TODO: I don't think I like this, the default lS adapter uses this but \"not found\" is a sensitive issue, so should probably be handled more carefully/individually.\n\t\t\t} Gun.on.get.ack = ack;\n\t\t}());\n\n\t\t;(function(){\n\t\t\tGun.chain.opt = function(opt){\n\t\t\t\topt = opt || {};\n\t\t\t\tvar gun = this, at = gun._, tmp = opt.peers || opt;\n\t\t\t\tif(!Object.plain(opt)){ opt = {} }\n\t\t\t\tif(!Object.plain(at.opt)){ at.opt = opt }\n\t\t\t\tif('string' == typeof tmp){ tmp = [tmp] }\n\t\t\t\tif(!Object.plain(at.opt.peers)){ at.opt.peers = {}}\n\t\t\t\tif(tmp instanceof Array){\n\t\t\t\t\topt.peers = {};\n\t\t\t\t\ttmp.forEach(function(url){\n\t\t\t\t\t\tvar p = {}; p.id = p.url = url;\n\t\t\t\t\t\topt.peers[url] = at.opt.peers[url] = at.opt.peers[url] || p;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tobj_each(opt, function each(k){ var v = this[k];\n\t\t\t\t\tif((this && this.hasOwnProperty(k)) || 'string' == typeof v || Object.empty(v)){ this[k] = v; return }\n\t\t\t\t\tif(v && v.constructor !== Object && !(v instanceof Array)){ return }\n\t\t\t\t\tobj_each(v, each);\n\t\t\t\t});\n\t\t\t\tat.opt.from = opt;\n\t\t\t\tGun.on('opt', at);\n\t\t\t\tat.opt.uuid = at.opt.uuid || function uuid(l){ return Gun.state().toString(36).replace('.','') + String.random(l||12) }\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t}());\n\n\t\tvar obj_each = function(o,f){ Object.keys(o).forEach(f,o) }, text_rand = String.random, turn = setTimeout.turn, valid = Gun.valid, state_is = Gun.state.is, state_ify = Gun.state.ify, u, empty = {}, C;\n\n\t\tGun.log = function(){ return (!Gun.log.off && C.log.apply(C, arguments)), [].slice.call(arguments).join(' ') };\n\t\tGun.log.once = function(w,s,o){ return (o = Gun.log.once)[w] = o[w] || 0, o[w]++ || Gun.log(s) };\n\n\t\tif(typeof window !== \"undefined\"){ (window.GUN = window.Gun = Gun).window = window }\n\t\ttry{ if(typeof MODULE !== \"undefined\"){ MODULE.exports = Gun } }catch(e){}\n\t\tmodule.exports = Gun;\n\t\t\n\t\t(Gun.window||{}).console = (Gun.window||{}).console || {log: function(){}};\n\t\t(C = console).only = function(i, s){ return (C.only.i && i === C.only.i && C.only.i++) && (C.log.apply(C, arguments) || s) };\n\n\t\t;\"Please do not remove welcome log unless you are paying for a monthly sponsorship, thanks!\";\n\t\tGun.log.once(\"welcome\", \"Hello wonderful person! :) Thanks for using GUN, please ask for help on http://chat.gun.eco if anything takes you longer than 5min to figure out!\");\n\t})(USE, './root');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.back = function(n, opt){ var tmp;\n\t\t\tn = n || 1;\n\t\t\tif(-1 === n || Infinity === n){\n\t\t\t\treturn this._.root.$;\n\t\t\t} else\n\t\t\tif(1 === n){\n\t\t\t\treturn (this._.back || this._).$;\n\t\t\t}\n\t\t\tvar gun = this, at = gun._;\n\t\t\tif(typeof n === 'string'){\n\t\t\t\tn = n.split('.');\n\t\t\t}\n\t\t\tif(n instanceof Array){\n\t\t\t\tvar i = 0, l = n.length, tmp = at;\n\t\t\t\tfor(i; i < l; i++){\n\t\t\t\t\ttmp = (tmp||empty)[n[i]];\n\t\t\t\t}\n\t\t\t\tif(u !== tmp){\n\t\t\t\t\treturn opt? gun : tmp;\n\t\t\t\t} else\n\t\t\t\tif((tmp = at.back)){\n\t\t\t\t\treturn tmp.$.back(n, opt);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif('function' == typeof n){\n\t\t\t\tvar yes, tmp = {back: at};\n\t\t\t\twhile((tmp = tmp.back)\n\t\t\t\t&& u === (yes = n(tmp, opt))){}\n\t\t\t\treturn yes;\n\t\t\t}\n\t\t\tif('number' == typeof n){\n\t\t\t\treturn (at.back || at).$.back(n - 1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tvar empty = {}, u;\n\t})(USE, './back');\n\n\t;USE(function(module){\n\t\t// WARNING: GUN is very simple, but the JavaScript chaining API around GUN\n\t\t// is complicated and was extremely hard to build. If you port GUN to another\n\t\t// language, consider implementing an easier API to build.\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.chain = function(sub){\n\t\t\tvar gun = this, at = gun._, chain = new (sub || gun).constructor(gun), cat = chain._, root;\n\t\t\tcat.root = root = at.root;\n\t\t\tcat.id = ++root.once;\n\t\t\tcat.back = gun._;\n\t\t\tcat.on = Gun.on;\n\t\t\tcat.on('in', Gun.on.in, cat); // For 'in' if I add my own listeners to each then I MUST do it before in gets called. If I listen globally for all incoming data instead though, regardless of individual listeners, I can transform the data there and then as well.\n\t\t\tcat.on('out', Gun.on.out, cat); // However for output, there isn't really the global option. I must listen by adding my own listener individually BEFORE this one is ever called.\n\t\t\treturn chain;\n\t\t}\n\n\t\tfunction output(msg){\n\t\t\tvar put, get, at = this.as, back = at.back, root = at.root, tmp;\n\t\t\tif(!msg.$){ msg.$ = at.$ }\n\t\t\tthis.to.next(msg);\n\t\t\tif(at.err){ at.on('in', {put: at.put = u, $: at.$}); return }\n\t\t\tif(get = msg.get){\n\t\t\t\t/*if(u !== at.put){\n\t\t\t\t\tat.on('in', at);\n\t\t\t\t\treturn;\n\t\t\t\t}*/\n\t\t\t\tif(root.pass){ root.pass[at.id] = at; } // will this make for buggy behavior elsewhere?\n\t\t\t\tif(at.lex){ Object.keys(at.lex).forEach(function(k){ tmp[k] = at.lex[k] }, tmp = msg.get = msg.get || {}) }\n\t\t\t\tif(get['#'] || at.soul){\n\t\t\t\t\tget['#'] = get['#'] || at.soul;\n\t\t\t\t\t//root.graph[get['#']] = root.graph[get['#']] || {_:{'#':get['#'],'>':{}}};\n\t\t\t\t\tmsg['#'] || (msg['#'] = text_rand(9)); // A3120 ?\n\t\t\t\t\tback = (root.$.get(get['#'])._);\n\t\t\t\t\tif(!(get = get['.'])){ // soul\n\t\t\t\t\t\ttmp = back.ask && back.ask['']; // check if we have already asked for the full node\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[''] = back; // add a flag that we are now.\n\t\t\t\t\t\tif(u !== back.put){ // if we already have data,\n\t\t\t\t\t\t\tback.on('in', back); // send what is cached down the chain\n\t\t\t\t\t\t\tif(tmp){ return } // and don't ask for it again.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmsg.$ = back.$;\n\t\t\t\t\t} else\n\t\t\t\t\tif(obj_has(back.put, get)){ // TODO: support #LEX !\n\t\t\t\t\t\ttmp = back.ask && back.ask[get];\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[get] = back.$.get(get)._;\n\t\t\t\t\t\tback.on('in', {get: get, put: {'#': back.soul, '.': get, ':': back.put[get], '>': state_is(root.graph[back.soul], get)}});\n\t\t\t\t\t\tif(tmp){ return }\n\t\t\t\t\t}\n\t\t\t\t\t\t/*put = (back.$.get(get)._);\n\t\t\t\t\t\tif(!(tmp = put.ack)){ put.ack = -1 }\n\t\t\t\t\t\tback.on('in', {\n\t\t\t\t\t\t\t$: back.$,\n\t\t\t\t\t\t\tput: Gun.state.ify({}, get, Gun.state(back.put, get), back.put[get]),\n\t\t\t\t\t\t\tget: back.get\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(tmp){ return }\n\t\t\t\t\t} else\n\t\t\t\t\tif('string' != typeof get){\n\t\t\t\t\t\tvar put = {}, meta = (back.put||{})._;\n\t\t\t\t\t\tGun.obj.map(back.put, function(v,k){\n\t\t\t\t\t\t\tif(!Gun.text.match(k, get)){ return }\n\t\t\t\t\t\t\tput[k] = v;\n\t\t\t\t\t\t})\n\t\t\t\t\t\tif(!Gun.obj.empty(put)){\n\t\t\t\t\t\t\tput._ = meta;\n\t\t\t\t\t\t\tback.on('in', {$: back.$, put: put, get: back.get})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp = at.lex){\n\t\t\t\t\t\t\ttmp = (tmp._) || (tmp._ = function(){});\n\t\t\t\t\t\t\tif(back.ack < tmp.ask){ tmp.ask = back.ack }\n\t\t\t\t\t\t\tif(tmp.ask){ return }\n\t\t\t\t\t\t\ttmp.ask = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t\troot.ask(ack, msg); // A3120 ?\n\t\t\t\t\treturn root.on('in', msg);\n\t\t\t\t}\n\t\t\t\t//if(root.now){ root.now[at.id] = root.now[at.id] || true; at.pass = {} }\n\t\t\t\tif(get['.']){\n\t\t\t\t\tif(at.get){\n\t\t\t\t\t\tmsg = {get: {'.': at.get}, $: at.$};\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[at.get] = msg.$._; // TODO: PERFORMANCE? More elegant way?\n\t\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t\t}\n\t\t\t\t\tmsg = {get: at.lex? msg.get : {}, $: at.$};\n\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t}\n\t\t\t\t(at.ask || (at.ask = {}))[''] = at;\t //at.ack = at.ack || -1;\n\t\t\t\tif(at.get){\n\t\t\t\t\tget['.'] = at.get;\n\t\t\t\t\t(back.ask || (back.ask = {}))[at.get] = msg.$._; // TODO: PERFORMANCE? More elegant way?\n\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn back.on('out', msg);\n\t\t}; Gun.on.out = output;\n\n\t\tfunction input(msg, cat){ cat = cat || this.as; // TODO: V8 may not be able to optimize functions with different parameter calls, so try to do benchmark to see if there is any actual difference.\n\t\t\tvar root = cat.root, gun = msg.$ || (msg.$ = cat.$), at = (gun||'')._ || empty, tmp = msg.put||'', soul = tmp['#'], key = tmp['.'], change = (u !== tmp['='])? tmp['='] : tmp[':'], state = tmp['>'] || -Infinity, sat; // eve = event, at = data at, cat = chain at, sat = sub at (children chains).\n\t\t\tif(u !== msg.put && (u === tmp['#'] || u === tmp['.'] || (u === tmp[':'] && u === tmp['=']) || u === tmp['>'])){ // convert from old format\n\t\t\t\tif(!valid(tmp)){\n\t\t\t\t\tif(!(soul = ((tmp||'')._||'')['#'])){ console.log(\"chain not yet supported for\", tmp, '...', msg, cat); return; }\n\t\t\t\t\tgun = cat.root.$.get(soul);\n\t\t\t\t\treturn setTimeout.each(Object.keys(tmp).sort(), function(k){ // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync?\n\t\t\t\t\t\tif('_' == k || u === (state = state_is(tmp, k))){ return }\n\t\t\t\t\t\tcat.on('in', {$: gun, put: {'#': soul, '.': k, '=': tmp[k], '>': state}, VIA: msg});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcat.on('in', {$: at.back.$, put: {'#': soul = at.back.soul, '.': key = at.has || at.get, '=': tmp, '>': state_is(at.back.put, key)}, via: msg}); // TODO: This could be buggy! It assumes/approxes data, other stuff could have corrupted it.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif((msg.seen||'')[cat.id]){ return } (msg.seen || (msg.seen = function(){}))[cat.id] = cat; // help stop some infinite loops\n\n\t\t\tif(cat !== at){ // don't worry about this when first understanding the code, it handles changing contexts on a message. A soul chain will never have a different context.\n\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); // make copy of message\n\t\t\t\ttmp.get = cat.get || tmp.get;\n\t\t\t\tif(!cat.soul && !cat.has){ // if we do not recognize the chain type\n\t\t\t\t\ttmp.$$$ = tmp.$$$ || cat.$; // make a reference to wherever it came from.\n\t\t\t\t} else\n\t\t\t\tif(at.soul){ // a has (property) chain will have a different context sometimes if it is linked (to a soul chain). Anything that is not a soul or has chain, will always have different contexts.\n\t\t\t\t\ttmp.$ = cat.$;\n\t\t\t\t\ttmp.$$ = tmp.$$ || at.$;\n\t\t\t\t}\n\t\t\t\tmsg = tmp; // use the message with the new context instead;\n\t\t\t}\n\t\t\tunlink(msg, cat);\n\n\t\t\tif(((cat.soul/* && (cat.ask||'')['']*/) || msg.$$) && state >= state_is(root.graph[soul], key)){ // The root has an in-memory cache of the graph, but if our peer has asked for the data then we want a per deduplicated chain copy of the data that might have local edits on it.\n\t\t\t\t(tmp = root.$.get(soul)._).put = state_ify(tmp.put, key, state, change, soul);\n\t\t\t}\n\t\t\tif(!at.soul /*&& (at.ask||'')['']*/ && state >= state_is(root.graph[soul], key) && (sat = (root.$.get(soul)._.next||'')[key])){ // Same as above here, but for other types of chains. // TODO: Improve perf by preventing echoes recaching.\n\t\t\t\tsat.put = change; // update cache\n\t\t\t\tif('string' == typeof (tmp = valid(change))){\n\t\t\t\t\tsat.put = root.$.get(tmp)._.put || change; // share same cache as what we're linked to.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.to && this.to.next(msg); // 1st API job is to call all chain listeners.\n\t\t\t// TODO: Make input more reusable by only doing these (some?) calls if we are a chain we recognize? This means each input listener would be responsible for when listeners need to be called, which makes sense, as they might want to filter.\n\t\t\tcat.any && setTimeout.each(Object.keys(cat.any), function(any){ (any = cat.any[any]) && any(msg) },0,99); // 1st API job is to call all chain listeners. // TODO: .keys( is slow // BUG: Some re-in logic may depend on this being sync.\n\t\t\tcat.echo && setTimeout.each(Object.keys(cat.echo), function(lat){ (lat = cat.echo[lat]) && lat.on('in', msg) },0,99); // & linked at chains // TODO: .keys( is slow // BUG: Some re-in logic may depend on this being sync.\n\n\t\t\tif(((msg.$$||'')._||at).soul){ // comments are linear, but this line of code is non-linear, so if I were to comment what it does, you'd have to read 42 other comments first... but you can't read any of those comments until you first read this comment. What!? // shouldn't this match link's check?\n\t\t\t\t// is there cases where it is a $$ that we do NOT want to do the following? \n\t\t\t\tif((sat = cat.next) && (sat = sat[key])){ // TODO: possible trick? Maybe have `ionmap` code set a sat? // TODO: Maybe we should do `cat.ask` instead? I guess does not matter.\n\t\t\t\t\ttmp = {}; Object.keys(msg).forEach(function(k){ tmp[k] = msg[k] });\n\t\t\t\t\ttmp.$ = (msg.$$||msg.$).get(tmp.get = key); delete tmp.$$; delete tmp.$$$;\n\t\t\t\t\tsat.on('in', tmp);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlink(msg, cat);\n\t\t}; Gun.on.in = input;\n\n\t\tfunction link(msg, cat){ cat = cat || this.as || msg.$._;\n\t\t\tif(msg.$$ && this !== Gun.on){ return } // $$ means we came from a link, so we are at the wrong level, thus ignore it unless overruled manually by being called directly.\n\t\t\tif(!msg.put || cat.soul){ return } // But you cannot overrule being linked to nothing, or trying to link a soul chain - that must never happen.\n\t\t\tvar put = msg.put||'', link = put['=']||put[':'], tmp;\n\t\t\tvar root = cat.root, tat = root.$.get(put['#']).get(put['.'])._;\n\t\t\tif('string' != typeof (link = valid(link))){\n\t\t\t\tif(this === Gun.on){ (tat.echo || (tat.echo = {}))[cat.id] = cat } // allow some chain to explicitly force linking to simple data.\n\t\t\t\treturn; // by default do not link to data that is not a link.\n\t\t\t}\n\t\t\tif((tat.echo || (tat.echo = {}))[cat.id] // we've already linked ourselves so we do not need to do it again. Except... (annoying implementation details)\n\t\t\t\t&& !(root.pass||'')[cat.id]){ return } // if a new event listener was added, we need to make a pass through for it. The pass will be on the chain, not always the chain passed down. \n\t\t\tif(tmp = root.pass){ if(tmp[link+cat.id]){ return } tmp[link+cat.id] = 1 } // But the above edge case may \"pass through\" on a circular graph causing infinite passes, so we hackily add a temporary check for that.\n\n\t\t\t(tat.echo||(tat.echo={}))[cat.id] = cat; // set ourself up for the echo! // TODO: BUG? Echo to self no longer causes problems? Confirm.\n\n\t\t\tif(cat.has){ cat.link = link }\n\t\t\tvar sat = root.$.get(tat.link = link)._; // grab what we're linking to.\n\t\t\t(sat.echo || (sat.echo = {}))[tat.id] = tat; // link it.\n\t\t\tvar tmp = cat.ask||''; // ask the chain for what needs to be loaded next!\n\t\t\tif(tmp[''] || cat.lex){ // we might need to load the whole thing // TODO: cat.lex probably has edge case bugs to it, need more test coverage.\n\t\t\t\tsat.on('out', {get: {'#': link}});\n\t\t\t}\n\t\t\tsetTimeout.each(Object.keys(tmp), function(get, sat){ // if sub chains are asking for data. // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync?\n\t\t\t\tif(!get || !(sat = tmp[get])){ return }\n\t\t\t\tsat.on('out', {get: {'#': link, '.': get}}); // go get it.\n\t\t\t},0,99);\n\t\t}; Gun.on.link = link;\n\n\t\tfunction unlink(msg, cat){ // ugh, so much code for seemingly edge case behavior.\n\t\t\tvar put = msg.put||'', change = (u !== put['='])? put['='] : put[':'], root = cat.root, link, tmp;\n\t\t\tif(u === change){ // 1st edge case: If we have a brand new database, no data will be found.\n\t\t\t\t// TODO: BUG! because emptying cache could be async from below, make sure we are not emptying a newer cache. So maybe pass an Async ID to check against?\n\t\t\t\t// TODO: BUG! What if this is a map? // Warning! Clearing things out needs to be robust against sync/async ops, or else you'll see `map val get put` test catastrophically fail because map attempts to link when parent graph is streamed before child value gets set. Need to differentiate between lack acks and force clearing.\n\t\t\t\tif(cat.soul && u !== cat.put){ return } // data may not be found on a soul, but if a soul already has data, then nothing can clear the soul as a whole.\n\t\t\t\t//if(!cat.has){ return }\n\t\t\t\ttmp = (msg.$$||msg.$||'')._||'';\n\t\t\t\tif(msg['@'] && (u !== tmp.put || u !== cat.put)){ return } // a \"not found\" from other peers should not clear out data if we have already found it.\n\t\t\t\t//if(cat.has && u === cat.put && !(root.pass||'')[cat.id]){ return } // if we are already unlinked, do not call again, unless edge case. // TODO: BUG! This line should be deleted for \"unlink deeply nested\".\n\t\t\t\tif(link = cat.link || msg.linked){\n\t\t\t\t\tdelete (root.$.get(link)._.echo||'')[cat.id];\n\t\t\t\t}\n\t\t\t\tif(cat.has){ // TODO: Empty out links, maps, echos, acks/asks, etc.?\n\t\t\t\t\tcat.link = null;\n\t\t\t\t}\n\t\t\t\tcat.put = u; // empty out the cache if, for example, alice's car's color no longer exists (relative to alice) if alice no longer has a car.\n\t\t\t\t// TODO: BUG! For maps, proxy this so the individual sub is triggered, not all subs.\n\t\t\t\tsetTimeout.each(Object.keys(cat.next||''), function(get, sat){ // empty out all sub chains. // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync? // TODO: BUG? This will trigger deeper put first, does put logic depend on nested order? // TODO: BUG! For map, this needs to be the isolated child, not all of them.\n\t\t\t\t\tif(!(sat = cat.next[get])){ return }\n\t\t\t\t\t//if(cat.has && u === sat.put && !(root.pass||'')[sat.id]){ return } // if we are already unlinked, do not call again, unless edge case. // TODO: BUG! This line should be deleted for \"unlink deeply nested\".\n\t\t\t\t\tif(link){ delete (root.$.get(link).get(get)._.echo||'')[sat.id] }\n\t\t\t\t\tsat.on('in', {get: get, put: u, $: sat.$}); // TODO: BUG? Add recursive seen check?\n\t\t\t\t},0,99);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(cat.soul){ return } // a soul cannot unlink itself.\n\t\t\tif(msg.$$){ return } // a linked chain does not do the unlinking, the sub chain does. // TODO: BUG? Will this cancel maps?\n\t\t\tlink = valid(change); // need to unlink anytime we are not the same link, though only do this once per unlink (and not on init).\n\t\t\ttmp = msg.$._||'';\n\t\t\tif(link === tmp.link || (cat.has && !tmp.link)){\n\t\t\t\tif((root.pass||'')[cat.id] && 'string' !== typeof link){\n\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete (tmp.echo||'')[cat.id];\n\t\t\tunlink({get: cat.get, put: u, $: msg.$, linked: msg.linked = msg.linked || tmp.link}, cat); // unlink our sub chains.\n\t\t}; Gun.on.unlink = unlink;\n\n\t\tfunction ack(msg, ev){\n\t\t\t//if(!msg['%'] && (this||'').off){ this.off() } // do NOT memory leak, turn off listeners! Now handled by .ask itself\n\t\t\t// manhattan:\n\t\t\tvar as = this.as, at = as.$._, root = at.root, get = as.get||'', tmp = (msg.put||'')[get['#']]||'';\n\t\t\tif(!msg.put || ('string' == typeof get['.'] && u === tmp[get['.']])){\n\t\t\t\tif(u !== at.put){ return }\n\t\t\t\tif(!at.soul && !at.has){ return } // TODO: BUG? For now, only core-chains will handle not-founds, because bugs creep in if non-core chains are used as $ but we can revisit this later for more powerful extensions.\n\t\t\t\tat.ack = (at.ack || 0) + 1;\n\t\t\t\tat.on('in', {\n\t\t\t\t\tget: at.get,\n\t\t\t\t\tput: at.put = u,\n\t\t\t\t\t$: at.$,\n\t\t\t\t\t'@': msg['@']\n\t\t\t\t});\n\t\t\t\t/*(tmp = at.Q) && setTimeout.each(Object.keys(tmp), function(id){ // TODO: Temporary testing, not integrated or being used, probably delete.\n\t\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); tmp['@'] = id; // copy message\n\t\t\t\t\troot.on('in', tmp);\n\t\t\t\t}); delete at.Q;*/\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t(msg._||{}).miss = 1;\n\t\t\tGun.on.put(msg);\n\t\t\treturn; // eom\n\t\t}\n\n\t\tvar empty = {}, u, text_rand = String.random, valid = Gun.valid, obj_has = function(o, k){ return o && Object.prototype.hasOwnProperty.call(o, k) }, state = Gun.state, state_is = state.is, state_ify = state.ify;\n\t})(USE, './chain');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.get = function(key, cb, as){\n\t\t\tvar gun, tmp;\n\t\t\tif(typeof key === 'string'){\n\t\t\t\tif(key.length == 0) {\t\n\t\t\t\t\t(gun = this.chain())._.err = {err: Gun.log('0 length key!', key)};\n\t\t\t\t\tif(cb){ cb.call(gun, gun._.err) }\n\t\t\t\t\treturn gun;\n\t\t\t\t}\n\t\t\t\tvar back = this, cat = back._;\n\t\t\t\tvar next = cat.next || empty;\n\t\t\t\tif(!(gun = next[key])){\n\t\t\t\t\tgun = key && cache(key, back);\n\t\t\t\t}\n\t\t\t\tgun = gun && gun.$;\n\t\t\t} else\n\t\t\tif('function' == typeof key){\n\t\t\t\tif(true === cb){ return soul(this, key, cb, as), this }\n\t\t\t\tgun = this;\n\t\t\t\tvar cat = gun._, opt = cb || {}, root = cat.root, id;\n\t\t\t\topt.at = cat;\n\t\t\t\topt.ok = key;\n\t\t\t\tvar wait = {}; // can we assign this to the at instead, like in once?\n\t\t\t\t//var path = []; cat.$.back(at => { at.get && path.push(at.get.slice(0,9))}); path = path.reverse().join('.');\n\t\t\t\tfunction any(msg, eve, f){\n\t\t\t\t\tif(any.stun){ return }\n\t\t\t\t\tif((tmp = root.pass) && !tmp[id]){ return }\n\t\t\t\t\tvar at = msg.$._, sat = (msg.$$||'')._, data = (sat||at).put, odd = (!at.has && !at.soul), test = {}, link, tmp;\n\t\t\t\t\tif(odd || u === data){ // handles non-core\n\t\t\t\t\t\tdata = (u === ((tmp = msg.put)||'')['='])? (u === (tmp||'')[':'])? tmp : tmp[':'] : tmp['='];\n\t\t\t\t\t}\n\t\t\t\t\tif(link = ('string' == typeof (tmp = Gun.valid(data)))){\n\t\t\t\t\t\tdata = (u === (tmp = root.$.get(tmp)._.put))? opt.not? u : data : tmp;\n\t\t\t\t\t}\n\t\t\t\t\tif(opt.not && u === data){ return }\n\t\t\t\t\tif(u === opt.stun){\n\t\t\t\t\t\tif((tmp = root.stun) && tmp.on){\n\t\t\t\t\t\t\tcat.$.back(function(a){ // our chain stunned?\n\t\t\t\t\t\t\t\ttmp.on(''+a.id, test = {});\n\t\t\t\t\t\t\t\tif((test.run || 0) < any.id){ return test } // if there is an earlier stun on gapless parents/self.\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t!test.run && tmp.on(''+at.id, test = {}); // this node stunned?\n\t\t\t\t\t\t\t!test.run && sat && tmp.on(''+sat.id, test = {}); // linked node stunned?\n\t\t\t\t\t\t\tif(any.id > test.run){\n\t\t\t\t\t\t\t\tif(!test.stun || test.stun.end){\n\t\t\t\t\t\t\t\t\ttest.stun = tmp.on('stun');\n\t\t\t\t\t\t\t\t\ttest.stun = test.stun && test.stun.last;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(test.stun && !test.stun.end){\n\t\t\t\t\t\t\t\t\t//if(odd && u === data){ return }\n\t\t\t\t\t\t\t\t\t//if(u === msg.put){ return } // \"not found\" acks will be found if there is stun, so ignore these.\n\t\t\t\t\t\t\t\t\t(test.stun.add || (test.stun.add = {}))[id] = function(){ any(msg,eve,1) } // add ourself to the stun callback list that is called at end of the write.\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(/*odd &&*/ u === data){ f = 0 } // if data not found, keep waiting/trying.\n\t\t\t\t\t\t/*if(f && u === data){\n\t\t\t\t\t\t\tcat.on('out', opt.out);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}*/\n\t\t\t\t\t\tif((tmp = root.hatch) && !tmp.end && u === opt.hatch && !f){ // quick hack! // What's going on here? Because data is streamed, we get things one by one, but a lot of developers would rather get a callback after each batch instead, so this does that by creating a wait list per chain id that is then called at the end of the batch by the hatch code in the root put listener.\n\t\t\t\t\t\t\tif(wait[at.$._.id]){ return } wait[at.$._.id] = 1;\n\t\t\t\t\t\t\ttmp.push(function(){any(msg,eve,1)});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}; wait = {}; // end quick hack.\n\t\t\t\t\t}\n\t\t\t\t\t// call:\n\t\t\t\t\tif(root.pass){ if(root.pass[id+at.id]){ return } root.pass[id+at.id] = 1 }\n\t\t\t\t\tif(opt.on){ opt.ok.call(at.$, data, at.get, msg, eve || any); return } // TODO: Also consider breaking `this` since a lot of people do `=>` these days and `.call(` has slower performance.\n\t\t\t\t\tif(opt.v2020){ opt.ok(msg, eve || any); return }\n\t\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); msg = tmp; msg.put = data; // 2019 COMPATIBILITY! TODO: GET RID OF THIS!\n\t\t\t\t\topt.ok.call(opt.as, msg, eve || any); // is this the right\n\t\t\t\t};\n\t\t\t\tany.at = cat;\n\t\t\t\t//(cat.any||(cat.any=function(msg){ setTimeout.each(Object.keys(cat.any||''), function(act){ (act = cat.any[act]) && act(msg) },0,99) }))[id = String.random(7)] = any; // maybe switch to this in future?\n\t\t\t\t(cat.any||(cat.any={}))[id = String.random(7)] = any;\n\t\t\t\tany.off = function(){ any.stun = 1; if(!cat.any){ return } delete cat.any[id] }\n\t\t\t\tany.rid = rid; // logic from old version, can we clean it up now?\n\t\t\t\tany.id = opt.run || ++root.once; // used in callback to check if we are earlier than a write. // will this ever cause an integer overflow?\n\t\t\t\ttmp = root.pass; (root.pass = {})[id] = 1; // Explanation: test trade-offs want to prevent recursion so we add/remove pass flag as it gets fulfilled to not repeat, however map map needs many pass flags - how do we reconcile?\n\t\t\t\topt.out = opt.out || {get: {}};\n\t\t\t\tcat.on('out', opt.out);\n\t\t\t\troot.pass = tmp;\n\t\t\t\treturn gun;\n\t\t\t} else\n\t\t\tif('number' == typeof key){\n\t\t\t\treturn this.get(''+key, cb, as);\n\t\t\t} else\n\t\t\tif('string' == typeof (tmp = valid(key))){\n\t\t\t\treturn this.get(tmp, cb, as);\n\t\t\t} else\n\t\t\tif(tmp = this.get.next){\n\t\t\t\tgun = tmp(this, key);\n\t\t\t}\n\t\t\tif(!gun){\n\t\t\t\t(gun = this.chain())._.err = {err: Gun.log('Invalid get request!', key)}; // CLEAN UP\n\t\t\t\tif(cb){ cb.call(gun, gun._.err) }\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tif(cb && 'function' == typeof cb){\n\t\t\t\tgun.get(cb, as);\n\t\t\t}\n\t\t\treturn gun;\n\t\t}\n\t\tfunction cache(key, back){\n\t\t\tvar cat = back._, next = cat.next, gun = back.chain(), at = gun._;\n\t\t\tif(!next){ next = cat.next = {} }\n\t\t\tnext[at.get = key] = at;\n\t\t\tif(back === cat.root.$){\n\t\t\t\tat.soul = key;\n\t\t\t\t//at.put = {};\n\t\t\t} else\n\t\t\tif(cat.soul || cat.has){\n\t\t\t\tat.has = key;\n\t\t\t\t//if(obj_has(cat.put, key)){\n\t\t\t\t\t//at.put = cat.put[key];\n\t\t\t\t//}\n\t\t\t}\n\t\t\treturn at;\n\t\t}\n\t\tfunction soul(gun, cb, opt, as){\n\t\t\tvar cat = gun._, acks = 0, tmp;\n\t\t\tif(tmp = cat.soul || cat.link){ return cb(tmp, as, cat) }\n\t\t\tif(cat.jam){ return cat.jam.push([cb, as]) }\n\t\t\tcat.jam = [[cb,as]];\n\t\t\tgun.get(function go(msg, eve){\n\t\t\t\tif(u === msg.put && !cat.root.opt.super && (tmp = Object.keys(cat.root.opt.peers).length) && ++acks <= tmp){ // TODO: super should not be in core code, bring AXE up into core instead to fix? // TODO: .keys( is slow\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\teve.rid(msg);\n\t\t\t\tvar at = ((at = msg.$) && at._) || {}, i = 0, as;\n\t\t\t\ttmp = cat.jam; delete cat.jam; // tmp = cat.jam.splice(0, 100);\n\t\t\t\t//if(tmp.length){ process.nextTick(function(){ go(msg, eve) }) }\n\t\t\t\twhile(as = tmp[i++]){ //Gun.obj.map(tmp, function(as, cb){\n\t\t\t\t\tvar cb = as[0], id; as = as[1];\n\t\t\t\t\tcb && cb(id = at.link || at.soul || Gun.valid(msg.put) || ((msg.put||{})._||{})['#'], as, msg, eve);\n\t\t\t\t} //);\n\t\t\t}, {out: {get: {'.':true}}});\n\t\t\treturn gun;\n\t\t}\n\t\tfunction rid(at){\n\t\t\tvar cat = this.at || this.on;\n\t\t\tif(!at || cat.soul || cat.has){ return this.off() }\n\t\t\tif(!(at = (at = (at = at.$ || at)._ || at).id)){ return }\n\t\t\tvar map = cat.map, tmp, seen;\n\t\t\t//if(!map || !(tmp = map[at]) || !(tmp = tmp.at)){ return }\n\t\t\tif(tmp = (seen = this.seen || (this.seen = {}))[at]){ return true }\n\t\t\tseen[at] = true;\n\t\t\treturn;\n\t\t\t//tmp.echo[cat.id] = {}; // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.\n\t\t\t//obj.del(map, at); // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.\n\t\t\treturn;\n\t\t}\n\t\tvar empty = {}, valid = Gun.valid, u;\n\t})(USE, './get');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.put = function(data, cb, as){ // I rewrote it :)\n\t\t\tvar gun = this, at = gun._, root = at.root;\n\t\t\tas = as || {};\n\t\t\tas.root = at.root;\n\t\t\tas.run || (as.run = root.once);\n\t\t\tstun(as, at.id); // set a flag for reads to check if this chain is writing.\n\t\t\tas.ack = as.ack || cb;\n\t\t\tas.via = as.via || gun;\n\t\t\tas.data = as.data || data;\n\t\t\tas.soul || (as.soul = at.soul || ('string' == typeof cb && cb));\n\t\t\tvar s = as.state = as.state || Gun.state();\n\t\t\tif('function' == typeof data){ data(function(d){ as.data = d; gun.put(u,u,as) }); return gun }\n\t\t\tif(!as.soul){ return get(as), gun }\n\t\t\tas.$ = root.$.get(as.soul); // TODO: This may not allow user chaining and similar?\n\t\t\tas.todo = [{it: as.data, ref: as.$}];\n\t\t\tas.turn = as.turn || turn;\n\t\t\tas.ran = as.ran || ran;\n\t\t\t//var path = []; as.via.back(at => { at.get && path.push(at.get.slice(0,9)) }); path = path.reverse().join('.');\n\t\t\t// TODO: Perf! We only need to stun chains that are being modified, not necessarily written to.\n\t\t\t(function walk(){\n\t\t\t\tvar to = as.todo, at = to.pop(), d = at.it, cid = at.ref && at.ref._.id, v, k, cat, tmp, g;\n\t\t\t\tstun(as, at.ref);\n\t\t\t\tif(tmp = at.todo){\n\t\t\t\t\tk = tmp.pop(); d = d[k];\n\t\t\t\t\tif(tmp.length){ to.push(at) }\n\t\t\t\t}\n\t\t\t\tk && (to.path || (to.path = [])).push(k);\n\t\t\t\tif(!(v = valid(d)) && !(g = Gun.is(d))){\n\t\t\t\t\tif(!Object.plain(d)){ ran.err(as, \"Invalid data: \"+ check(d) +\" at \" + (as.via.back(function(at){at.get && tmp.push(at.get)}, tmp = []) || tmp.join('.'))+'.'+(to.path||[]).join('.')); return }\n\t\t\t\t\tvar seen = as.seen || (as.seen = []), i = seen.length;\n\t\t\t\t\twhile(i--){ if(d === (tmp = seen[i]).it){ v = d = tmp.link; break } }\n\t\t\t\t}\n\t\t\t\tif(k && v){ at.node = state_ify(at.node, k, s, d) } // handle soul later.\n\t\t\t\telse {\n\t\t\t\t\tif(!as.seen){ ran.err(as, \"Data at root of graph must be a node (an object).\"); return }\n\t\t\t\t\tas.seen.push(cat = {it: d, link: {}, todo: g? [] : Object.keys(d).sort().reverse(), path: (to.path||[]).slice(), up: at}); // Any perf reasons to CPU schedule this .keys( ?\n\t\t\t\t\tat.node = state_ify(at.node, k, s, cat.link);\n\t\t\t\t\t!g && cat.todo.length && to.push(cat);\n\t\t\t\t\t// ---------------\n\t\t\t\t\tvar id = as.seen.length;\n\t\t\t\t\t(as.wait || (as.wait = {}))[id] = '';\n\t\t\t\t\ttmp = (cat.ref = (g? d : k? at.ref.get(k) : at.ref))._;\n\t\t\t\t\t(tmp = (d && (d._||'')['#']) || tmp.soul || tmp.link)? resolve({soul: tmp}) : cat.ref.get(resolve, {run: as.run, /*hatch: 0,*/ v2020:1, out:{get:{'.':' '}}}); // TODO: BUG! This should be resolve ONLY soul to prevent full data from being loaded. // Fixed now?\n\t\t\t\t\t//setTimeout(function(){ if(F){ return } console.log(\"I HAVE NOT BEEN CALLED!\", path, id, cat.ref._.id, k) }, 9000); var F; // MAKE SURE TO ADD F = 1 below!\n\t\t\t\t\tfunction resolve(msg, eve){\n\t\t\t\t\t\tvar end = cat.link['#'];\n\t\t\t\t\t\tif(eve){ eve.off(); eve.rid(msg) } // TODO: Too early! Check all peers ack not found.\n\t\t\t\t\t\t// TODO: BUG maybe? Make sure this does not pick up a link change wipe, that it uses the changign link instead.\n\t\t\t\t\t\tvar soul = end || msg.soul || (tmp = (msg.$$||msg.$)._||'').soul || tmp.link || ((tmp = tmp.put||'')._||'')['#'] || tmp['#'] || (((tmp = msg.put||'') && msg.$$)? tmp['#'] : (tmp['=']||tmp[':']||'')['#']);\n\t\t\t\t\t\t!end && stun(as, msg.$);\n\t\t\t\t\t\tif(!soul && !at.link['#']){ // check soul link above us\n\t\t\t\t\t\t\t(at.wait || (at.wait = [])).push(function(){ resolve(msg, eve) }) // wait\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!soul){\n\t\t\t\t\t\t\tsoul = [];\n\t\t\t\t\t\t\t(msg.$$||msg.$).back(function(at){\n\t\t\t\t\t\t\t\tif(tmp = at.soul || at.link){ return soul.push(tmp) }\n\t\t\t\t\t\t\t\tsoul.push(at.get);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsoul = soul.reverse().join('/');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcat.link['#'] = soul;\n\t\t\t\t\t\t!g && (((as.graph || (as.graph = {}))[soul] = (cat.node || (cat.node = {_:{}})))._['#'] = soul);\n\t\t\t\t\t\tdelete as.wait[id];\n\t\t\t\t\t\tcat.wait && setTimeout.each(cat.wait, function(cb){ cb && cb() });\n\t\t\t\t\t\tas.ran(as);\n\t\t\t\t\t};\n\t\t\t\t\t// ---------------\n\t\t\t\t}\n\t\t\t\tif(!to.length){ return as.ran(as) }\n\t\t\t\tas.turn(walk);\n\t\t\t}());\n\t\t\treturn gun;\n\t\t}\n\n\t\tfunction stun(as, id){\n\t\t\tif(!id){ return } id = (id._||'').id||id;\n\t\t\tvar run = as.root.stun || (as.root.stun = {on: Gun.on}), test = {}, tmp;\n\t\t\tas.stun || (as.stun = run.on('stun', function(){ }));\n\t\t\tif(tmp = run.on(''+id)){ tmp.the.last.next(test) }\n\t\t\tif(test.run >= as.run){ return }\n\t\t\trun.on(''+id, function(test){\n\t\t\t\tif(as.stun.end){\n\t\t\t\t\tthis.off();\n\t\t\t\t\tthis.to.next(test);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttest.run = test.run || as.run;\n\t\t\t\ttest.stun = test.stun || as.stun; return;\n\t\t\t\tif(this.to.to){\n\t\t\t\t\tthis.the.last.next(test);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttest.stun = as.stun;\n\t\t\t});\n\t\t}\n\n\t\tfunction ran(as){\n\t\t\tif(as.err){ ran.end(as.stun, as.root); return } // move log handle here.\n\t\t\tif(as.todo.length || as.end || !Object.empty(as.wait)){ return } as.end = 1;\n\t\t\t//(as.retry = function(){ as.acks = 0;\n\t\t\tvar cat = (as.$.back(-1)._), root = cat.root, ask = cat.ask(function(ack){\n\t\t\t\troot.on('ack', ack);\n\t\t\t\tif(ack.err && !ack.lack){ Gun.log(ack) }\n\t\t\t\tif(++acks > (as.acks || 0)){ this.off() } // Adjustable ACKs! Only 1 by default.\n\t\t\t\tif(!as.ack){ return }\n\t\t\t\tas.ack(ack, this);\n\t\t\t}, as.opt), acks = 0, stun = as.stun, tmp;\n\t\t\t(tmp = function(){ // this is not official yet, but quick solution to hack in for now.\n\t\t\t\tif(!stun){ return }\n\t\t\t\tran.end(stun, root);\n\t\t\t\tsetTimeout.each(Object.keys(stun = stun.add||''), function(cb){ if(cb = stun[cb]){cb()} }); // resume the stunned reads // Any perf reasons to CPU schedule this .keys( ?\n\t\t\t}).hatch = tmp; // this is not official yet ^\n\t\t\t//console.log(1, \"PUT\", as.run, as.graph);\n\t\t\tif(as.ack && !as.ok){ as.ok = as.acks || 9 } // TODO: In future! Remove this! This is just old API support.\n\t\t\t(as.via._).on('out', {put: as.out = as.graph, ok: as.ok && {'@': as.ok+1}, opt: as.opt, '#': ask, _: tmp});\n\t\t\t//})();\n\t\t}; ran.end = function(stun,root){\n\t\t\tstun.end = noop; // like with the earlier id, cheaper to make this flag a function so below callbacks do not have to do an extra type check.\n\t\t\tif(stun.the.to === stun && stun === stun.the.last){ delete root.stun }\n\t\t\tstun.off();\n\t\t}; ran.err = function(as, err){\n\t\t\t(as.ack||noop).call(as, as.out = { err: as.err = Gun.log(err) });\n\t\t\tas.ran(as);\n\t\t}\n\n\t\tfunction get(as){\n\t\t\tvar at = as.via._, tmp;\n\t\t\tas.via = as.via.back(function(at){\n\t\t\t\tif(at.soul || !at.get){ return at.$ }\n\t\t\t\ttmp = as.data; (as.data = {})[at.get] = tmp;\n\t\t\t});\n\t\t\tif(!as.via || !as.via._.soul){\n\t\t\t\tas.via = at.root.$.get(((as.data||'')._||'')['#'] || at.$.back('opt.uuid')())\n\t\t\t}\n\t\t\tas.via.put(as.data, as.ack, as);\n\t\t\t\n\n\t\t\treturn;\n\t\t\tif(at.get && at.back.soul){\n\t\t\t\ttmp = as.data;\n\t\t\t\tas.via = at.back.$;\n\t\t\t\t(as.data = {})[at.get] = tmp; \n\t\t\t\tas.via.put(as.data, as.ack, as);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tfunction check(d, tmp){ return ((d && (tmp = d.constructor) && tmp.name) || typeof d) }\n\n\t\tvar u, empty = {}, noop = function(){}, turn = setTimeout.turn, valid = Gun.valid, state_ify = Gun.state.ify;\n\t\tvar iife = function(fn,as){fn.call(as||empty)}\n\t})(USE, './put');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tUSE('./chain');\n\t\tUSE('./back');\n\t\tUSE('./put');\n\t\tUSE('./get');\n\t\tmodule.exports = Gun;\n\t})(USE, './index');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.chain.on = function(tag, arg, eas, as){ // don't rewrite!\n\t\t\tvar gun = this, cat = gun._, root = cat.root, act, off, id, tmp;\n\t\t\tif(typeof tag === 'string'){\n\t\t\t\tif(!arg){ return cat.on(tag) }\n\t\t\t\tact = cat.on(tag, arg, eas || cat, as);\n\t\t\t\tif(eas && eas.$){\n\t\t\t\t\t(eas.subs || (eas.subs = [])).push(act);\n\t\t\t\t}\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tvar opt = arg;\n\t\t\t(opt = (true === opt)? {change: true} : opt || {}).not = 1; opt.on = 1;\n\t\t\t//opt.at = cat;\n\t\t\t//opt.ok = tag;\n\t\t\t//opt.last = {};\n\t\t\tvar wait = {}; // can we assign this to the at instead, like in once?\n\t\t\tgun.get(tag, opt);\n\t\t\t/*gun.get(function on(data,key,msg,eve){ var $ = this;\n\t\t\t\tif(tmp = root.hatch){ // quick hack!\n\t\t\t\t\tif(wait[$._.id]){ return } wait[$._.id] = 1;\n\t\t\t\t\ttmp.push(function(){on.call($, data,key,msg,eve)});\n\t\t\t\t\treturn;\n\t\t\t\t}; wait = {}; // end quick hack.\n\t\t\t\ttag.call($, data,key,msg,eve);\n\t\t\t}, opt); // TODO: PERF! Event listener leak!!!?*/\n\t\t\t/*\n\t\t\tfunction one(msg, eve){\n\t\t\t\tif(one.stun){ return }\n\t\t\t\tvar at = msg.$._, data = at.put, tmp;\n\t\t\t\tif(tmp = at.link){ data = root.$.get(tmp)._.put }\n\t\t\t\tif(opt.not===u && u === data){ return }\n\t\t\t\tif(opt.stun===u && (tmp = root.stun) && (tmp = tmp[at.id] || tmp[at.back.id]) && !tmp.end){ // Remember! If you port this into `.get(cb` make sure you allow stun:0 skip option for `.put(`.\n\t\t\t\t\ttmp[id] = function(){one(msg,eve)};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//tmp = one.wait || (one.wait = {}); console.log(tmp[at.id] === ''); if(tmp[at.id] !== ''){ tmp[at.id] = tmp[at.id] || setTimeout(function(){tmp[at.id]='';one(msg,eve)},1); return } delete tmp[at.id];\n\t\t\t\t// call:\n\t\t\t\tif(opt.as){\n\t\t\t\t\topt.ok.call(opt.as, msg, eve || one);\n\t\t\t\t} else {\n\t\t\t\t\topt.ok.call(at.$, data, msg.get || at.get, msg, eve || one);\n\t\t\t\t}\n\t\t\t};\n\t\t\tone.at = cat;\n\t\t\t(cat.act||(cat.act={}))[id = String.random(7)] = one;\n\t\t\tone.off = function(){ one.stun = 1; if(!cat.act){ return } delete cat.act[id] }\n\t\t\tcat.on('out', {get: {}});*/\n\t\t\treturn gun;\n\t\t}\n\t\t// Rules:\n\t\t// 1. If cached, should be fast, but not read while write.\n\t\t// 2. Should not retrigger other listeners, should get triggered even if nothing found.\n\t\t// 3. If the same callback passed to many different once chains, each should resolve - an unsubscribe from the same callback should not effect the state of the other resolving chains, if you do want to cancel them all early you should mutate the callback itself with a flag & check for it at top of callback\n\t\tGun.chain.once = function(cb, opt){ opt = opt || {}; // avoid rewriting\n\t\t\tif(!cb){ return none(this,opt) }\n\t\t\tvar gun = this, cat = gun._, root = cat.root, data = cat.put, id = String.random(7), one, tmp;\n\t\t\tgun.get(function(data,key,msg,eve){\n\t\t\t\tvar $ = this, at = $._, one = (at.one||(at.one={}));\n\t\t\t\tif(eve.stun){ return } if('' === one[id]){ return }\n\t\t\t\tif(true === (tmp = Gun.valid(data))){ once(); return }\n\t\t\t\tif('string' == typeof tmp){ return } // TODO: BUG? Will this always load?\n\t\t\t\tclearTimeout((cat.one||'')[id]); // clear \"not found\" since they only get set on cat.\n\t\t\t\tclearTimeout(one[id]); one[id] = setTimeout(once, opt.wait||99); // TODO: Bug? This doesn't handle plural chains.\n\t\t\t\tfunction once(f){\n\t\t\t\t\tif(!at.has && !at.soul){ at = {put: data, get: key} } // handles non-core messages.\n\t\t\t\t\tif(u === (tmp = at.put)){ tmp = ((msg.$$||'')._||'').put }\n\t\t\t\t\tif('string' == typeof Gun.valid(tmp)){\n\t\t\t\t\t\ttmp = root.$.get(tmp)._.put;\n\t\t\t\t\t\tif(tmp === u && !f){\n\t\t\t\t\t\t\tone[id] = setTimeout(function(){ once(1) }, opt.wait||99); // TODO: Quick fix. Maybe use ack count for more predictable control?\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//console.log(\"AND VANISHED\", data);\n\t\t\t\t\tif(eve.stun){ return } if('' === one[id]){ return } one[id] = '';\n\t\t\t\t\tif(cat.soul || cat.has){ eve.off() } // TODO: Plural chains? // else { ?.off() } // better than one check?\n\t\t\t\t\tcb.call($, tmp, at.get);\n\t\t\t\t\tclearTimeout(one[id]); // clear \"not found\" since they only get set on cat. // TODO: This was hackily added, is it necessary or important? Probably not, in future try removing this. Was added just as a safety for the `&& !f` check.\n\t\t\t\t};\n\t\t\t}, {on: 1});\n\t\t\treturn gun;\n\t\t}\n\t\tfunction none(gun,opt,chain){\n\t\t\tGun.log.once(\"valonce\", \"Chainable val is experimental, its behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.\");\n\t\t\t(chain = gun.chain())._.nix = gun.once(function(data, key){ chain._.on('in', this._) });\n\t\t\tchain._.lex = gun._.lex; // TODO: Better approach in future? This is quick for now.\n\t\t\treturn chain;\n\t\t}\n\n\t\tGun.chain.off = function(){\n\t\t\t// make off more aggressive. Warning, it might backfire!\n\t\t\tvar gun = this, at = gun._, tmp;\n\t\t\tvar cat = at.back;\n\t\t\tif(!cat){ return }\n\t\t\tat.ack = 0; // so can resubscribe.\n\t\t\tif(tmp = cat.next){\n\t\t\t\tif(tmp[at.get]){\n\t\t\t\t\tdelete tmp[at.get];\n\t\t\t\t} else {\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TODO: delete cat.one[map.id]?\n\t\t\tif(tmp = cat.ask){\n\t\t\t\tdelete tmp[at.get];\n\t\t\t}\n\t\t\tif(tmp = cat.put){\n\t\t\t\tdelete tmp[at.get];\n\t\t\t}\n\t\t\tif(tmp = at.soul){\n\t\t\t\tdelete cat.root.graph[tmp];\n\t\t\t}\n\t\t\tif(tmp = at.map){\n\t\t\t\tObject.keys(tmp).forEach(function(i,at){ at = tmp[i]; //obj_map(tmp, function(at){\n\t\t\t\t\tif(at.link){\n\t\t\t\t\t\tcat.root.$.get(at.link).off();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(tmp = at.next){\n\t\t\t\tObject.keys(tmp).forEach(function(i,neat){ neat = tmp[i]; //obj_map(tmp, function(neat){\n\t\t\t\t\tneat.$.off();\n\t\t\t\t});\n\t\t\t}\n\t\t\tat.on('off', {});\n\t\t\treturn gun;\n\t\t}\n\t\tvar empty = {}, noop = function(){}, u;\n\t})(USE, './on');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index'), next = Gun.chain.get.next;\n\t\tGun.chain.get.next = function(gun, lex){ var tmp;\n\t\t\tif(!Object.plain(lex)){ return (next||noop)(gun, lex) }\n\t\t\tif(tmp = ((tmp = lex['#'])||'')['='] || tmp){ return gun.get(tmp) }\n\t\t\t(tmp = gun.chain()._).lex = lex; // LEX!\n\t\t\tgun.on('in', function(eve){\n\t\t\t\tif(String.match(eve.get|| (eve.put||'')['.'], lex['.'] || lex['#'] || lex)){\n\t\t\t\t\ttmp.on('in', eve);\n\t\t\t\t}\n\t\t\t\tthis.to.next(eve);\n\t\t\t});\n\t\t\treturn tmp.$;\n\t\t}\n\t\tGun.chain.map = function(cb, opt, t){\n\t\t\tvar gun = this, cat = gun._, lex, chain;\n\t\t\tif(Object.plain(cb)){ lex = cb['.']? cb : {'.': cb}; cb = u }\n\t\t\tif(!cb){\n\t\t\t\tif(chain = cat.each){ return chain }\n\t\t\t\t(cat.each = chain = gun.chain())._.lex = lex || chain._.lex || cat.lex;\n\t\t\t\tchain._.nix = gun.back('nix');\n\t\t\t\tgun.on('in', map, chain._);\n\t\t\t\treturn chain;\n\t\t\t}\n\t\t\tGun.log.once(\"mapfn\", \"Map functions are experimental, their behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.\");\n\t\t\tchain = gun.chain();\n\t\t\tgun.map().on(function(data, key, msg, eve){\n\t\t\t\tvar next = (cb||noop).call(this, data, key, msg, eve);\n\t\t\t\tif(u === next){ return }\n\t\t\t\tif(data === next){ return chain._.on('in', msg) }\n\t\t\t\tif(Gun.is(next)){ return chain._.on('in', next._) }\n\t\t\t\tvar tmp = {}; Object.keys(msg.put).forEach(function(k){ tmp[k] = msg.put[k] }, tmp); tmp['='] = next; \n\t\t\t\tchain._.on('in', {get: key, put: tmp});\n\t\t\t});\n\t\t\treturn chain;\n\t\t}\n\t\tfunction map(msg){ this.to.next(msg);\n\t\t\tvar cat = this.as, gun = msg.$, at = gun._, put = msg.put, tmp;\n\t\t\tif(!at.soul && !msg.$$){ return } // this line took hundreds of tries to figure out. It only works if core checks to filter out above chains during link tho. This says \"only bother to map on a node\" for this layer of the chain. If something is not a node, map should not work.\n\t\t\tif((tmp = cat.lex) && !String.match(msg.get|| (put||'')['.'], tmp['.'] || tmp['#'] || tmp)){ return }\n\t\t\tGun.on.link(msg, cat);\n\t\t}\n\t\tvar noop = function(){}, event = {stun: noop, off: noop}, u;\n\t})(USE, './map');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.chain.set = function(item, cb, opt){\n\t\t\tvar gun = this, root = gun.back(-1), soul, tmp;\n\t\t\tcb = cb || function(){};\n\t\t\topt = opt || {}; opt.item = opt.item || item;\n\t\t\tif(soul = ((item||'')._||'')['#']){ (item = {})['#'] = soul } // check if node, make link.\n\t\t\tif('string' == typeof (tmp = Gun.valid(item))){ return gun.get(soul = tmp).put(item, cb, opt) } // check if link\n\t\t\tif(!Gun.is(item)){\n\t\t\t\tif(Object.plain(item)){\n\t\t\t\t\titem = root.get(soul = gun.back('opt.uuid')()).put(item);\n\t\t\t\t}\n\t\t\t\treturn gun.get(soul || root.back('opt.uuid')(7)).put(item, cb, opt);\n\t\t\t}\n\t\t\tgun.put(function(go){\n\t\t\t\titem.get(function(soul, o, msg){ // TODO: BUG! We no longer have this option? & go error not handled?\n\t\t\t\t\tif(!soul){ return cb.call(gun, {err: Gun.log('Only a node can be linked! Not \"' + msg.put + '\"!')}) }\n\t\t\t\t\t(tmp = {})[soul] = {'#': soul}; go(tmp);\n\t\t\t\t},true);\n\t\t\t})\n\t\t\treturn item;\n\t\t}\n\t})(USE, './set');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\n\t\tvar noop = function(){}\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u, d = +new Date; try{ cb(u, JSON.parse(t,r), json.sucks(+new Date - d)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u, d = +new Date; try{ cb(u, JSON.stringify(v,r,s), json.sucks(+new Date - d)) }catch(e){ cb(e) } }\n\t\tjson.sucks = function(d){ if(d > 99){ console.log(\"Warning: JSON blocking CPU detected. Add `gun/lib/yson.js` to fix.\"); json.sucks = noop } }\n\n\t\tfunction Mesh(root){\n\t\t\tvar mesh = function(){};\n\t\t\tvar opt = root.opt || {};\n\t\t\topt.log = opt.log || console.log;\n\t\t\topt.gap = opt.gap || opt.wait || 0;\n\t\t\topt.max = opt.max || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;\n\t\t\topt.pack = opt.pack || (opt.max * 0.01 * 0.01);\n\t\t\topt.puff = opt.puff || 9; // IDEA: do a start/end benchmark, divide ops/result.\n\t\t\tvar puff = setTimeout.turn || setTimeout;\n\n\t\t\tvar dup = root.dup, dup_check = dup.check, dup_track = dup.track;\n\n\t\t\tvar ST = +new Date, LT = ST;\n\n\t\t\tvar hear = mesh.hear = function(raw, peer){\n\t\t\t\tif(!raw){ return }\n\t\t\t\tif(opt.max <= raw.length){ return mesh.say({dam: '!', err: \"Message too big!\"}, peer) }\n\t\t\t\tif(mesh === this){\n\t\t\t\t\t/*if('string' == typeof raw){ try{\n\t\t\t\t\t\tvar stat = console.STAT || {};\n\t\t\t\t\t\t//console.log('HEAR:', peer.id, (raw||'').slice(0,250), ((raw||'').length / 1024 / 1024).toFixed(4));\n\t\t\t\t\t\t\n\t\t\t\t\t\t//console.log(setTimeout.turn.s.length, 'stacks', parseFloat((-(LT - (LT = +new Date))/1000).toFixed(3)), 'sec', parseFloat(((LT-ST)/1000 / 60).toFixed(1)), 'up', stat.peers||0, 'peers', stat.has||0, 'has', stat.memhused||0, stat.memused||0, stat.memax||0, 'heap mem max');\n\t\t\t\t\t}catch(e){ console.log('DBG err', e) }}*/\n\t\t\t\t\thear.d += raw.length||0 ; ++hear.c } // STATS!\n\t\t\t\tvar S = peer.SH = +new Date;\n\t\t\t\tvar tmp = raw[0], msg;\n\t\t\t\t//raw && raw.slice && console.log(\"hear:\", ((peer.wire||'').headers||'').origin, raw.length, raw.slice && raw.slice(0,50)); //tc-iamunique-tc-package-ds1\n\t\t\t\tif('[' === tmp){\n\t\t\t\t\tparse(raw, function(err, msg){\n\t\t\t\t\t\tif(err || !msg){ return mesh.say({dam: '!', err: \"DAM JSON parse error.\"}, peer) }\n\t\t\t\t\t\tconsole.STAT && console.STAT(+new Date, msg.length, '# on hear batch');\n\t\t\t\t\t\tvar P = opt.puff;\n\t\t\t\t\t\t(function go(){\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\tvar i = 0, m; while(i < P && (m = msg[i++])){ mesh.hear(m, peer) }\n\t\t\t\t\t\t\tmsg = msg.slice(i); // slicing after is faster than shifting during.\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'hear loop');\n\t\t\t\t\t\t\tflush(peer); // force send all synchronously batched acks.\n\t\t\t\t\t\t\tif(!msg.length){ return }\n\t\t\t\t\t\t\tpuff(go, 0);\n\t\t\t\t\t\t}());\n\t\t\t\t\t});\n\t\t\t\t\traw = ''; // \n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif('{' === tmp || ((raw['#'] || Object.plain(raw)) && (msg = raw))){\n\t\t\t\t\tif(msg){ return hear.one(msg, peer, S) }\n\t\t\t\t\tparse(raw, function(err, msg){\n\t\t\t\t\t\tif(err || !msg){ return mesh.say({dam: '!', err: \"DAM JSON parse error.\"}, peer) }\n\t\t\t\t\t\thear.one(msg, peer, S);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\thear.one = function(msg, peer, S){ // S here is temporary! Undo.\n\t\t\t\tvar id, hash, tmp, ash, DBG;\n\t\t\t\tif(msg.DBG){ msg.DBG = DBG = {DBG: msg.DBG} }\n\t\t\t\tDBG && (DBG.h = S);\n\t\t\t\tDBG && (DBG.hp = +new Date);\n\t\t\t\tif(!(id = msg['#'])){ id = msg['#'] = String.random(9) }\n\t\t\t\tif(tmp = dup_check(id)){ return }\n\t\t\t\t// DAM logic:\n\t\t\t\tif(!(hash = msg['##']) && false && u !== msg.put){ /*hash = msg['##'] = Type.obj.hash(msg.put)*/ } // disable hashing for now // TODO: impose warning/penalty instead (?)\n\t\t\t\tif(hash && (tmp = msg['@'] || (msg.get && id)) && dup.check(ash = tmp+hash)){ return } // Imagine A <-> B <=> (C & D), C & D reply with same ACK but have different IDs, B can use hash to dedup. Or if a GET has a hash already, we shouldn't ACK if same.\n\t\t\t\t(msg._ = function(){}).via = mesh.leap = peer;\n\t\t\t\tif((tmp = msg['><']) && 'string' == typeof tmp){ tmp.slice(0,99).split(',').forEach(function(k){ this[k] = 1 }, (msg._).yo = {}) } // Peers already sent to, do not resend.\n\t\t\t\t// DAM ^\n\t\t\t\tif(tmp = msg.dam){\n\t\t\t\t\tif(tmp = mesh.hear[tmp]){\n\t\t\t\t\t\ttmp(msg, peer, root);\n\t\t\t\t\t}\n\t\t\t\t\tdup_track(id);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(tmp = msg.ok){ msg._.near = tmp['/'] }\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.is = S); peer.SI = id;\n\t\t\t\tdup_track.ed = function(d){\n\t\t\t\t\tif(id !== d){ return }\n\t\t\t\t\tdup_track.ed = 0;\n\t\t\t\t\tif(!(d = dup.s[id])){ return }\n\t\t\t\t\td.via = peer;\n\t\t\t\t\tif(msg.get){ d.it = msg }\n\t\t\t\t}\n\t\t\t\troot.on('in', mesh.last = msg);\n\t\t\t\tDBG && (DBG.hd = +new Date);\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, msg.get? 'msg get' : msg.put? 'msg put' : 'msg');\n\t\t\t\tdup_track(id); // in case 'in' does not call track.\n\t\t\t\tif(ash){ dup_track(ash) } //dup.track(tmp+hash, true).it = it(msg);\n\t\t\t\tmesh.leap = mesh.last = null; // warning! mesh.leap could be buggy.\n\t\t\t}\n\t\t\tvar tomap = function(k,i,m){m(k,true)};\n\t\t\thear.c = hear.d = 0;\n\n\t\t\t;(function(){\n\t\t\t\tvar SMIA = 0;\n\t\t\t\tvar loop;\n\t\t\t\tmesh.hash = function(msg, peer){ var h, s, t;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tjson(msg.put, function hash(err, text){\n\t\t\t\t\t\tvar ss = (s || (s = t = text||'')).slice(0, 32768); // 1024 * 32\n\t\t\t\t\t h = String.hash(ss, h); s = s.slice(32768);\n\t\t\t\t\t if(s){ puff(hash, 0); return }\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say json+hash');\n\t\t\t\t\t msg._.$put = t;\n\t\t\t\t\t msg['##'] = h;\n\t\t\t\t\t mesh.say(msg, peer);\n\t\t\t\t\t delete msg._.$put;\n\t\t\t\t\t}, sort);\n\t\t\t\t}\n\t\t\t\tfunction sort(k, v){ var tmp;\n\t\t\t\t\tif(!(v instanceof Object)){ return v }\n\t\t\t\t\tObject.keys(v).sort().forEach(sorta, {to: tmp = {}, on: v});\n\t\t\t\t\treturn tmp;\n\t\t\t\t} function sorta(k){ this.to[k] = this.on[k] }\n\n\t\t\t\tvar say = mesh.say = function(msg, peer){ var tmp;\n\t\t\t\t\tif((tmp = this) && (tmp = tmp.to) && tmp.next){ tmp.next(msg) } // compatible with middleware adapters.\n\t\t\t\t\tif(!msg){ return false }\n\t\t\t\t\tvar id, hash, raw, ack = msg['@'];\n//if(opt.super && (!ack || !msg.put)){ return } // TODO: MANHATTAN STUB //OBVIOUSLY BUG! But squelch relay. // :( get only is 100%+ CPU usage :(\n\t\t\t\t\tvar meta = msg._||(msg._=function(){});\n\t\t\t\t\tvar DBG = msg.DBG, S = +new Date; meta.y = meta.y || S; if(!peer){ DBG && (DBG.y = S) }\n\t\t\t\t\tif(!(id = msg['#'])){ id = msg['#'] = String.random(9) }\n\t\t\t\t\t!loop && dup_track(id);//.it = it(msg); // track for 9 seconds, default. Earth<->Mars would need more! // always track, maybe move this to the 'after' logic if we split function.\n\t\t\t\t\t//if(msg.put && (msg.err || (dup.s[id]||'').err)){ return false } // TODO: in theory we should not be able to stun a message, but for now going to check if it can help network performance preventing invalid data to relay.\n\t\t\t\t\tif(!(hash = msg['##']) && u !== msg.put && !meta.via && ack){ mesh.hash(msg, peer); return } // TODO: Should broadcasts be hashed?\n\t\t\t\t\tif(!peer && ack){ peer = ((tmp = dup.s[ack]) && (tmp.via || ((tmp = tmp.it) && (tmp = tmp._) && tmp.via))) || ((tmp = mesh.last) && ack === tmp['#'] && mesh.leap) } // warning! mesh.leap could be buggy! mesh last check reduces this. // TODO: CLEAN UP THIS LINE NOW? `.it` should be reliable.\n\t\t\t\t\tif(!peer && ack){ // still no peer, then ack daisy chain 'tunnel' got lost.\n\t\t\t\t\t\tif(dup.s[ack]){ return } // in dups but no peer hints that this was ack to ourself, ignore.\n\t\t\t\t\t\tconsole.STAT && console.STAT(+new Date, ++SMIA, 'total no peer to ack to'); // TODO: Delete this now. Dropping lost ACKs is protocol fine now.\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} // TODO: Temporary? If ack via trace has been lost, acks will go to all peers, which trashes browser bandwidth. Not relaying the ack will force sender to ask for ack again. Note, this is technically wrong for mesh behavior.\n\t\t\t\t\tif(ack && !msg.put && !hash && ((dup.s[ack]||'').it||'')['##']){ return false } // If we're saying 'not found' but a relay had data, do not bother sending our not found. // Is this correct, return false? // NOTE: ADD PANIC TEST FOR THIS!\n\t\t\t\t\tif(!peer && mesh.way){ return mesh.way(msg) }\n\t\t\t\t\tDBG && (DBG.yh = +new Date);\n\t\t\t\t\tif(!(raw = meta.raw)){ mesh.raw(msg, peer); return }\n\t\t\t\t\tDBG && (DBG.yr = +new Date);\n\t\t\t\t\tif(!peer || !peer.id){\n\t\t\t\t\t\tif(!Object.plain(peer || opt.peers)){ return false }\n\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\tvar P = opt.puff, ps = opt.peers, pl = Object.keys(peer || opt.peers || {}); // TODO: .keys( is slow\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'peer keys');\n\t\t\t\t\t\t;(function go(){\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\t//Type.obj.map(peer || opt.peers, each); // in case peer is a peer list.\n\t\t\t\t\t\t\tloop = 1; var wr = meta.raw; meta.raw = raw; // quick perf hack\n\t\t\t\t\t\t\tvar i = 0, p; while(i < 9 && (p = (pl||'')[i++])){\n\t\t\t\t\t\t\t\tif(!(p = ps[p] || (peer||'')[p])){ continue }\n\t\t\t\t\t\t\t\tmesh.say(msg, p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeta.raw = wr; loop = 0;\n\t\t\t\t\t\t\tpl = pl.slice(i); // slicing after is faster than shifting during.\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say loop');\n\t\t\t\t\t\t\tif(!pl.length){ return }\n\t\t\t\t\t\t\tpuff(go, 0);\n\t\t\t\t\t\t\tack && dup_track(ack); // keep for later\n\t\t\t\t\t\t}());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: PERF: consider splitting function here, so say loops do less work.\n\t\t\t\t\tif(!peer.wire && mesh.wire){ mesh.wire(peer) }\n\t\t\t\t\tif(id === peer.last){ return } peer.last = id; // was it just sent?\n\t\t\t\t\tif(peer === meta.via){ return false } // don't send back to self.\n\t\t\t\t\tif((tmp = meta.yo) && (tmp[peer.url] || tmp[peer.pid] || tmp[peer.id]) /*&& !o*/){ return false }\n\t\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||meta).yp = +new Date) - (meta.y || S), 'say prep');\n\t\t\t\t\t!loop && ack && dup_track(ack); // streaming long responses needs to keep alive the ack.\n\t\t\t\t\tif(peer.batch){\n\t\t\t\t\t\tpeer.tail = (tmp = peer.tail || 0) + raw.length;\n\t\t\t\t\t\tif(peer.tail <= opt.pack){\n\t\t\t\t\t\t\tpeer.batch += (tmp?',':'')+raw;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tflush(peer);\n\t\t\t\t\t}\n\t\t\t\t\tpeer.batch = '['; // Prevents double JSON!\n\t\t\t\t\tvar ST = +new Date;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tconsole.STAT && console.STAT(ST, +new Date - ST, '0ms TO');\n\t\t\t\t\t\tflush(peer);\n\t\t\t\t\t}, opt.gap); // TODO: queuing/batching might be bad for low-latency video game performance! Allow opt out?\n\t\t\t\t\tsend(raw, peer);\n\t\t\t\t\tconsole.STAT && (ack === peer.SI) && console.STAT(S, +new Date - peer.SH, 'say ack');\n\t\t\t\t}\n\t\t\t\tmesh.say.c = mesh.say.d = 0;\n\t\t\t\t// TODO: this caused a out-of-memory crash!\n\t\t\t\tmesh.raw = function(msg, peer){ // TODO: Clean this up / delete it / move logic out!\n\t\t\t\t\tif(!msg){ return '' }\n\t\t\t\t\tvar meta = (msg._) || {}, put, tmp;\n\t\t\t\t\tif(tmp = meta.raw){ return tmp }\n\t\t\t\t\tif('string' == typeof msg){ return msg }\n\t\t\t\t\tvar hash = msg['##'], ack = msg['@'];\n\t\t\t\t\tif(hash && ack){\n\t\t\t\t\t\tif(!meta.via && dup_check(ack+hash)){ return false } // for our own out messages, memory & storage may ack the same thing, so dedup that. Tho if via another peer, we already tracked it upon hearing, so this will always trigger false positives, so don't do that!\n\t\t\t\t\t\tif(tmp = (dup.s[ack]||'').it){\n\t\t\t\t\t\t\tif(hash === tmp['##']){ return false } // if ask has a matching hash, acking is optional.\n\t\t\t\t\t\t\tif(!tmp['##']){ tmp['##'] = hash } // if none, add our hash to ask so anyone we relay to can dedup. // NOTE: May only check against 1st ack chunk, 2nd+ won't know and still stream back to relaying peers which may then dedup. Any way to fix this wasted bandwidth? I guess force rate limiting breaking change, that asking peer has to ask for next lexical chunk.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!msg.dam && !msg['@']){\n\t\t\t\t\t\tvar i = 0, to = []; tmp = opt.peers;\n\t\t\t\t\t\tfor(var k in tmp){ var p = tmp[k]; // TODO: Make it up peers instead!\n\t\t\t\t\t\t\tto.push(p.url || p.pid || p.id);\n\t\t\t\t\t\t\tif(++i > 6){ break }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(i > 1){ msg['><'] = to.join() } // TODO: BUG! This gets set regardless of peers sent to! Detect?\n\t\t\t\t\t}\n\t\t\t\t\tif(msg.put && (tmp = msg.ok)){ msg.ok = {'@':(tmp['@']||1)-1, '/': (tmp['/']==msg._.near)? mesh.near : tmp['/']}; }\n\t\t\t\t\tif(put = meta.$put){\n\t\t\t\t\t\ttmp = {}; Object.keys(msg).forEach(function(k){ tmp[k] = msg[k] });\n\t\t\t\t\t\ttmp.put = ':])([:';\n\t\t\t\t\t\tjson(tmp, function(err, raw){\n\t\t\t\t\t\t\tif(err){ return } // TODO: Handle!!\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\ttmp = raw.indexOf('\"put\":\":])([:\"');\n\t\t\t\t\t\t\tres(u, raw = raw.slice(0, tmp+6) + put + raw.slice(tmp + 14));\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say slice');\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tjson(msg, res);\n\t\t\t\t\tfunction res(err, raw){\n\t\t\t\t\t\tif(err){ return } // TODO: Handle!!\n\t\t\t\t\t\tmeta.raw = raw; //if(meta && (raw||'').length < (999 * 99)){ meta.raw = raw } // HNPERF: If string too big, don't keep in memory.\n\t\t\t\t\t\tmesh.say(msg, peer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}());\n\n\t\t\tfunction flush(peer){\n\t\t\t\tvar tmp = peer.batch, t = 'string' == typeof tmp, l;\n\t\t\t\tif(t){ tmp += ']' }// TODO: Prevent double JSON!\n\t\t\t\tpeer.batch = peer.tail = null;\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tif(t? 3 > tmp.length : !tmp.length){ return } // TODO: ^\n\t\t\t\tif(!t){try{tmp = (1 === tmp.length? tmp[0] : JSON.stringify(tmp));\n\t\t\t\t}catch(e){return opt.log('DAM JSON stringify error', e)}}\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tsend(tmp, peer);\n\t\t\t}\n\t\t\t// for now - find better place later.\n\t\t\tfunction send(raw, peer){ try{\n\t\t\t\tvar wire = peer.wire;\n\t\t\t\tif(peer.say){\n\t\t\t\t\tpeer.say(raw);\n\t\t\t\t} else\n\t\t\t\tif(wire.send){\n\t\t\t\t\twire.send(raw);\n\t\t\t\t}\n\t\t\t\tmesh.say.d += raw.length||0; ++mesh.say.c; // STATS!\n\t\t\t}catch(e){\n\t\t\t\t(peer.queue = peer.queue || []).push(raw);\n\t\t\t}}\n\n\t\t\tmesh.near = 0;\n\t\t\tmesh.hi = function(peer){\n\t\t\t\tvar wire = peer.wire, tmp;\n\t\t\t\tif(!wire){ mesh.wire((peer.length && {url: peer, id: peer}) || peer); return }\n\t\t\t\tif(peer.id){\n\t\t\t\t\topt.peers[peer.url || peer.id] = peer;\n\t\t\t\t} else {\n\t\t\t\t\ttmp = peer.id = peer.id || peer.url || String.random(9);\n\t\t\t\t\tmesh.say({dam: '?', pid: root.opt.pid}, opt.peers[tmp] = peer);\n\t\t\t\t\tdelete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self\n\t\t\t\t}\n\t\t\t\tif(!peer.met){\n\t\t\t\t\tmesh.near++;\n\t\t\t\t\tpeer.met = +(new Date);\n\t\t\t\t\troot.on('hi', peer)\n\t\t\t\t}\n\t\t\t\t// @rogowski I need this here by default for now to fix go1dfish's bug\n\t\t\t\ttmp = peer.queue; peer.queue = [];\n\t\t\t\tsetTimeout.each(tmp||[],function(msg){\n\t\t\t\t\tsend(msg, peer);\n\t\t\t\t},0,9);\n\t\t\t\t//Type.obj.native && Type.obj.native(); // dirty place to check if other JS polluted.\n\t\t\t}\n\t\t\tmesh.bye = function(peer){\n\t\t\t\tpeer.met && --mesh.near;\n\t\t\t\tdelete peer.met;\n\t\t\t\troot.on('bye', peer);\n\t\t\t\tvar tmp = +(new Date); tmp = (tmp - (peer.met||tmp));\n\t\t\t\tmesh.bye.time = ((mesh.bye.time || tmp) + tmp) / 2;\n\t\t\t}\n\t\t\tmesh.hear['!'] = function(msg, peer){ opt.log('Error:', msg.err) }\n\t\t\tmesh.hear['?'] = function(msg, peer){\n\t\t\t\tif(msg.pid){\n\t\t\t\t\tif(!peer.pid){ peer.pid = msg.pid }\n\t\t\t\t\tif(msg['@']){ return }\n\t\t\t\t}\n\t\t\t\tmesh.say({dam: '?', pid: opt.pid, '@': msg['#']}, peer);\n\t\t\t\tdelete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self\n\t\t\t}\n\t\t\tmesh.hear['mob'] = function(msg, peer){ // NOTE: AXE will overload this with better logic.\n\t\t\t\tif(!msg.peers){ return }\n\t\t\t\tvar peers = Object.keys(msg.peers), one = peers[(Math.random()*peers.length) >> 0];\n\t\t\t\tif(!one){ return }\n\t\t\t\tmesh.bye(peer);\n\t\t\t\tmesh.hi(one);\n\t\t\t}\n\n\t\t\troot.on('create', function(root){\n\t\t\t\troot.opt.pid = root.opt.pid || String.random(9);\n\t\t\t\tthis.to.next(root);\n\t\t\t\troot.on('out', mesh.say);\n\t\t\t});\n\n\t\t\troot.on('bye', function(peer, tmp){\n\t\t\t\tpeer = opt.peers[peer.id || peer] || peer;\n\t\t\t\tthis.to.next(peer);\n\t\t\t\tpeer.bye? peer.bye() : (tmp = peer.wire) && tmp.close && tmp.close();\n\t\t\t\tdelete opt.peers[peer.id];\n\t\t\t\tpeer.wire = null;\n\t\t\t});\n\n\t\t\tvar gets = {};\n\t\t\troot.on('bye', function(peer, tmp){ this.to.next(peer);\n\t\t\t\tif(tmp = console.STAT){ tmp.peers = mesh.near; }\n\t\t\t\tif(!(tmp = peer.url)){ return } gets[tmp] = true;\n\t\t\t\tsetTimeout(function(){ delete gets[tmp] },opt.lack || 9000);\n\t\t\t});\n\t\t\troot.on('hi', function(peer, tmp){ this.to.next(peer);\n\t\t\t\tif(tmp = console.STAT){ tmp.peers = mesh.near }\n\t\t\t\tif(opt.super){ return } // temporary (?) until we have better fix/solution?\n\t\t\t\tvar souls = Object.keys(root.next||''); // TODO: .keys( is slow\n\t\t\t\tif(souls.length > 9999 && !console.SUBS){ console.log(console.SUBS = \"Warning: You have more than 10K live GETs, which might use more bandwidth than your screen can show - consider `.off()`.\") }\n\t\t\t\tsetTimeout.each(souls, function(soul){ var node = root.next[soul];\n\t\t\t\t\tif(opt.super || (node.ask||'')['']){ mesh.say({get: {'#': soul}}, peer); return }\n\t\t\t\t\tsetTimeout.each(Object.keys(node.ask||''), function(key){ if(!key){ return }\n\t\t\t\t\t\t// is the lack of ## a !onion hint?\n\t\t\t\t\t\tmesh.say({'##': String.hash((root.graph[soul]||'')[key]), get: {'#': soul, '.': key}}, peer);\n\t\t\t\t\t\t// TODO: Switch this so Book could route?\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn mesh;\n\t\t}\n\t var empty = {}, ok = true, u;\n\n\t try{ module.exports = Mesh }catch(e){}\n\n\t})(USE, './mesh');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.Mesh = USE('./mesh');\n\n\t\t// TODO: resync upon reconnect online/offline\n\t\t//window.ononline = window.onoffline = function(){ console.log('online?', navigator.onLine) }\n\n\t\tGun.on('opt', function(root){\n\t\t\tthis.to.next(root);\n\t\t\tif(root.once){ return }\n\t\t\tvar opt = root.opt;\n\t\t\tif(false === opt.WebSocket){ return }\n\n\t\t\tvar env = Gun.window || {};\n\t\t\tvar websocket = opt.WebSocket || env.WebSocket || env.webkitWebSocket || env.mozWebSocket;\n\t\t\tif(!websocket){ return }\n\t\t\topt.WebSocket = websocket;\n\n\t\t\tvar mesh = opt.mesh = opt.mesh || Gun.Mesh(root);\n\n\t\t\tvar wire = mesh.wire || opt.wire;\n\t\t\tmesh.wire = opt.wire = open;\n\t\t\tfunction open(peer){ try{\n\t\t\t\tif(!peer || !peer.url){ return wire && wire(peer) }\n\t\t\t\tvar url = peer.url.replace(/^http/, 'ws');\n\t\t\t\tvar wire = peer.wire = new opt.WebSocket(url);\n\t\t\t\twire.onclose = function(){\n\t\t\t\t\treconnect(peer);\n\t\t\t\t\topt.mesh.bye(peer);\n\t\t\t\t};\n\t\t\t\twire.onerror = function(err){\n\t\t\t\t\treconnect(peer);\n\t\t\t\t};\n\t\t\t\twire.onopen = function(){\n\t\t\t\t\topt.mesh.hi(peer);\n\t\t\t\t}\n\t\t\t\twire.onmessage = function(msg){\n\t\t\t\t\tif(!msg){ return }\n\t\t\t\t\topt.mesh.hear(msg.data || msg, peer);\n\t\t\t\t};\n\t\t\t\treturn wire;\n\t\t\t}catch(e){ opt.mesh.bye(peer) }}\n\n\t\t\tsetTimeout(function(){ !opt.super && root.on('out', {dam:'hi'}) },1); // it can take a while to open a socket, so maybe no longer lazy load for perf reasons?\n\n\t\t\tvar wait = 2 * 999;\n\t\t\tfunction reconnect(peer){\n\t\t\t\tclearTimeout(peer.defer);\n\t\t\t\tif(!opt.peers[peer.url]){ return }\n\t\t\t\tif(doc && peer.retry <= 0){ return }\n\t\t\t\tpeer.retry = (peer.retry || opt.retry+1 || 60) - ((-peer.tried + (peer.tried = +new Date) < wait*4)?1:0);\n\t\t\t\tpeer.defer = setTimeout(function to(){\n\t\t\t\t\tif(doc && doc.hidden){ return setTimeout(to,wait) }\n\t\t\t\t\topen(peer);\n\t\t\t\t}, wait);\n\t\t\t}\n\t\t\tvar doc = (''+u !== typeof document) && document;\n\t\t});\n\t\tvar noop = function(){}, u;\n\t})(USE, './websocket');\n\n\t;USE(function(module){\n\t\tif(typeof Gun === 'undefined'){ return }\n\n\t\tvar noop = function(){}, store, u;\n\t\ttry{store = (Gun.window||noop).localStorage}catch(e){}\n\t\tif(!store){\n\t\t\tGun.log(\"Warning: No localStorage exists to persist data to!\");\n\t\t\tstore = {setItem: function(k,v){this[k]=v}, removeItem: function(k){delete this[k]}, getItem: function(k){return this[k]}};\n\t\t}\n\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n\t\tGun.on('create', function lg(root){\n\t\t\tthis.to.next(root);\n\t\t\tvar opt = root.opt, graph = root.graph, acks = [], disk, to, size, stop;\n\t\t\tif(false === opt.localStorage){ return }\n\t\t\topt.prefix = opt.file || 'gun/';\n\t\t\ttry{ disk = lg[opt.prefix] = lg[opt.prefix] || JSON.parse(size = store.getItem(opt.prefix)) || {}; // TODO: Perf! This will block, should we care, since limited to 5MB anyways?\n\t\t\t}catch(e){ disk = lg[opt.prefix] = {}; }\n\t\t\tsize = (size||'').length;\n\n\t\t\troot.on('get', function(msg){\n\t\t\t\tthis.to.next(msg);\n\t\t\t\tvar lex = msg.get, soul, data, tmp, u;\n\t\t\t\tif(!lex || !(soul = lex['#'])){ return }\n\t\t\t\tdata = disk[soul] || u;\n\t\t\t\tif(data && (tmp = lex['.']) && !Object.plain(tmp)){ // pluck!\n\t\t\t\t\tdata = Gun.state.ify({}, tmp, Gun.state.is(data, tmp), data[tmp], soul);\n\t\t\t\t}\n\t\t\t\t//if(data){ (tmp = {})[soul] = data } // back into a graph.\n\t\t\t\t//setTimeout(function(){\n\t\t\t\tGun.on.get.ack(msg, data); //root.on('in', {'@': msg['#'], put: tmp, lS:1});// || root.$});\n\t\t\t\t//}, Math.random() * 10); // FOR TESTING PURPOSES!\n\t\t\t});\n\n\t\t\troot.on('put', function(msg){\n\t\t\t\tthis.to.next(msg); // remember to call next middleware adapter\n\t\t\t\tvar put = msg.put, soul = put['#'], key = put['.'], id = msg['#'], ok = msg.ok||'', tmp; // pull data off wire envelope\n\t\t\t\tdisk[soul] = Gun.state.ify(disk[soul], key, put['>'], put[':'], soul); // merge into disk object\n\t\t\t\tif(stop && size > (4999880)){ root.on('in', {'@': id, err: \"localStorage max!\"}); return; }\n\t\t\t\t//if(!msg['@']){ acks.push(id) } // then ack any non-ack write. // TODO: use batch id.\n\t\t\t\tif(!msg['@'] && (!msg._.via || Math.random() < (ok['@'] / ok['/']))){ acks.push(id) } // then ack any non-ack write. // TODO: use batch id.\n\t\t\t\tif(to){ return }\n\t\t\t\tto = setTimeout(flush, 9+(size / 333)); // 0.1MB = 0.3s, 5MB = 15s \n\t\t\t});\n\t\t\tfunction flush(){\n\t\t\t\tif(!acks.length && ((setTimeout.turn||'').s||'').length){ setTimeout(flush,99); return; } // defer if \"busy\" && no saves.\n\t\t\t\tvar err, ack = acks; clearTimeout(to); to = false; acks = [];\n\t\t\t\tjson(disk, function(err, tmp){\n\t\t\t\t\ttry{!err && store.setItem(opt.prefix, tmp);\n\t\t\t\t\t}catch(e){ err = stop = e || \"localStorage failure\" }\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tGun.log(err + \" Consider using GUN's IndexedDB plugin for RAD for more storage space, https://gun.eco/docs/RAD#install\");\n\t\t\t\t\t\troot.on('localStorage:error', {err: err, get: opt.prefix, put: disk});\n\t\t\t\t\t}\n\t\t\t\t\tsize = tmp.length;\n\n\t\t\t\t\t//if(!err && !Object.empty(opt.peers)){ return } // only ack if there are no peers. // Switch this to probabilistic mode\n\t\t\t\t\tsetTimeout.each(ack, function(id){\n\t\t\t\t\t\troot.on('in', {'@': id, err: err, ok: 0}); // localStorage isn't reliable, so make its `ok` code be a low number.\n\t\t\t\t\t},0,99);\n\t\t\t\t})\n\t\t\t}\n\t\t\n\t\t});\n\t})(USE, './localStorage');\n\n}());\n\n/* BELOW IS TEMPORARY FOR OLD INTERNAL COMPATIBILITY, THEY ARE IMMEDIATELY DEPRECATED AND WILL BE REMOVED IN NEXT VERSION */\n;(function(){\n\tvar u;\n\tif(''+u == typeof Gun){ return }\n\tvar DEP = function(n){ console.warn(\"Warning! Deprecated internal utility will break in next version:\", n) }\n\t// Generic javascript utilities.\n\tvar Type = Gun;\n\t//Type.fns = Type.fn = {is: function(fn){ return (!!fn && fn instanceof Function) }}\n\tType.fn = Type.fn || {is: function(fn){ DEP('fn'); return (!!fn && 'function' == typeof fn) }}\n\tType.bi = Type.bi || {is: function(b){ DEP('bi');return (b instanceof Boolean || typeof b == 'boolean') }}\n\tType.num = Type.num || {is: function(n){ DEP('num'); return !list_is(n) && ((n - parseFloat(n) + 1) >= 0 || Infinity === n || -Infinity === n) }}\n\tType.text = Type.text || {is: function(t){ DEP('text'); return (typeof t == 'string') }}\n\tType.text.ify = Type.text.ify || function(t){ DEP('text.ify');\n\t\tif(Type.text.is(t)){ return t }\n\t\tif(typeof JSON !== \"undefined\"){ return JSON.stringify(t) }\n\t\treturn (t && t.toString)? t.toString() : t;\n\t}\n\tType.text.random = Type.text.random || function(l, c){ DEP('text.random');\n\t\tvar s = '';\n\t\tl = l || 24; // you are not going to make a 0 length random number, so no need to check type\n\t\tc = c || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz';\n\t\twhile(l > 0){ s += c.charAt(Math.floor(Math.random() * c.length)); l-- }\n\t\treturn s;\n\t}\n\tType.text.match = Type.text.match || function(t, o){ var tmp, u; DEP('text.match');\n\t\tif('string' !== typeof t){ return false }\n\t\tif('string' == typeof o){ o = {'=': o} }\n\t\to = o || {};\n\t\ttmp = (o['='] || o['*'] || o['>'] || o['<']);\n\t\tif(t === tmp){ return true }\n\t\tif(u !== o['=']){ return false }\n\t\ttmp = (o['*'] || o['>'] || o['<']);\n\t\tif(t.slice(0, (tmp||'').length) === tmp){ return true }\n\t\tif(u !== o['*']){ return false }\n\t\tif(u !== o['>'] && u !== o['<']){\n\t\t\treturn (t >= o['>'] && t <= o['<'])? true : false;\n\t\t}\n\t\tif(u !== o['>'] && t >= o['>']){ return true }\n\t\tif(u !== o['<'] && t <= o['<']){ return true }\n\t\treturn false;\n\t}\n\tType.text.hash = Type.text.hash || function(s, c){ // via SO\n\t\tDEP('text.hash');\n\t\tif(typeof s !== 'string'){ return }\n\t c = c || 0;\n\t if(!s.length){ return c }\n\t for(var i=0,l=s.length,n; i B){ return 1 }\n\t\t\telse { return 0 }\n\t\t}\n\t}\n\tType.list.map = Type.list.map || function(l, c, _){ DEP('list.map'); return obj_map(l, c, _) }\n\tType.list.index = 1; // change this to 0 if you want non-logical, non-mathematical, non-matrix, non-convenient array notation\n\tType.obj = Type.boj || {is: function(o){ DEP('obj'); return o? (o instanceof Object && o.constructor === Object) || Object.prototype.toString.call(o).match(/^\\[object (\\w+)\\]$/)[1] === 'Object' : false }}\n\tType.obj.put = Type.obj.put || function(o, k, v){ DEP('obj.put'); return (o||{})[k] = v, o }\n\tType.obj.has = Type.obj.has || function(o, k){ DEP('obj.has'); return o && Object.prototype.hasOwnProperty.call(o, k) }\n\tType.obj.del = Type.obj.del || function(o, k){ DEP('obj.del'); \n\t\tif(!o){ return }\n\t\to[k] = null;\n\t\tdelete o[k];\n\t\treturn o;\n\t}\n\tType.obj.as = Type.obj.as || function(o, k, v, u){ DEP('obj.as'); return o[k] = o[k] || (u === v? {} : v) }\n\tType.obj.ify = Type.obj.ify || function(o){ DEP('obj.ify'); \n\t\tif(obj_is(o)){ return o }\n\t\ttry{o = JSON.parse(o);\n\t\t}catch(e){o={}};\n\t\treturn o;\n\t}\n\t;(function(){ var u;\n\t\tfunction map(v,k){\n\t\t\tif(obj_has(this,k) && u !== this[k]){ return }\n\t\t\tthis[k] = v;\n\t\t}\n\t\tType.obj.to = Type.obj.to || function(from, to){ DEP('obj.to'); \n\t\t\tto = to || {};\n\t\t\tobj_map(from, map, to);\n\t\t\treturn to;\n\t\t}\n\t}());\n\tType.obj.copy = Type.obj.copy || function(o){ DEP('obj.copy'); // because http://web.archive.org/web/20140328224025/http://jsperf.com/cloning-an-object/2\n\t\treturn !o? o : JSON.parse(JSON.stringify(o)); // is shockingly faster than anything else, and our data has to be a subset of JSON anyways!\n\t}\n\t;(function(){\n\t\tfunction empty(v,i){ var n = this.n, u;\n\t\t\tif(n && (i === n || (obj_is(n) && obj_has(n, i)))){ return }\n\t\t\tif(u !== i){ return true }\n\t\t}\n\t\tType.obj.empty = Type.obj.empty || function(o, n){ DEP('obj.empty'); \n\t\t\tif(!o){ return true }\n\t\t\treturn obj_map(o,empty,{n:n})? false : true;\n\t\t}\n\t}());\n\t;(function(){\n\t\tfunction t(k,v){\n\t\t\tif(2 === arguments.length){\n\t\t\t\tt.r = t.r || {};\n\t\t\t\tt.r[k] = v;\n\t\t\t\treturn;\n\t\t\t} t.r = t.r || [];\n\t\t\tt.r.push(k);\n\t\t};\n\t\tvar keys = Object.keys, map, u;\n\t\tObject.keys = Object.keys || function(o){ return map(o, function(v,k,t){t(k)}) }\n\t\tType.obj.map = map = Type.obj.map || function(l, c, _){ DEP('obj.map'); \n\t\t\tvar u, i = 0, x, r, ll, lle, f = 'function' == typeof c;\n\t\t\tt.r = u;\n\t\t\tif(keys && obj_is(l)){\n\t\t\t\tll = keys(l); lle = true;\n\t\t\t}\n\t\t\t_ = _ || {};\n\t\t\tif(list_is(l) || ll){\n\t\t\t\tx = (ll || l).length;\n\t\t\t\tfor(;i < x; i++){\n\t\t\t\t\tvar ii = (i + Type.list.index);\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tr = lle? c.call(_, l[ll[i]], ll[i], t) : c.call(_, l[i], ii, t);\n\t\t\t\t\t\tif(r !== u){ return r }\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if(Type.test.is(c,l[i])){ return ii } // should implement deep equality testing!\n\t\t\t\t\t\tif(c === l[lle? ll[i] : i]){ return ll? ll[i] : ii } // use this for now\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor(i in l){\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tif(obj_has(l,i)){\n\t\t\t\t\t\t\tr = _? c.call(_, l[i], i, t) : c(l[i], i, t);\n\t\t\t\t\t\t\tif(r !== u){ return r }\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if(a.test.is(c,l[i])){ return i } // should implement deep equality testing!\n\t\t\t\t\t\tif(c === l[i]){ return i } // use this for now\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn f? t.r : Type.list.index? 0 : -1;\n\t\t}\n\t}());\n\tType.time = Type.time || {};\n\tType.time.is = Type.time.is || function(t){ DEP('time'); return t? t instanceof Date : (+new Date().getTime()) }\n\n\tvar fn_is = Type.fn.is;\n\tvar list_is = Type.list.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_has = obj.has, obj_map = obj.map;\n\n\tvar Val = {};\n\tVal.is = function(v){ DEP('val.is'); // Valid values are a subset of JSON: null, binary, number (!Infinity), text, or a soul relation. Arrays need special algorithms to handle concurrency, so they are not supported directly. Use an extension that supports them if needed but research their problems first.\n\t\tif(v === u){ return false }\n\t\tif(v === null){ return true } // \"deletes\", nulling out keys.\n\t\tif(v === Infinity){ return false } // we want this to be, but JSON does not support it, sad face.\n\t\tif(text_is(v) // by \"text\" we mean strings.\n\t\t|| bi_is(v) // by \"binary\" we mean boolean.\n\t\t|| num_is(v)){ // by \"number\" we mean integers or decimals.\n\t\t\treturn true; // simple values are valid.\n\t\t}\n\t\treturn Val.link.is(v) || false; // is the value a soul relation? Then it is valid and return it. If not, everything else remaining is an invalid data type. Custom extensions can be built on top of these primitives to support other types.\n\t}\n\tVal.link = Val.rel = {_: '#'};\n\t;(function(){\n\t\tVal.link.is = function(v){ DEP('val.link.is'); // this defines whether an object is a soul relation or not, they look like this: {'#': 'UUID'}\n\t\t\tif(v && v[rel_] && !v._ && obj_is(v)){ // must be an object.\n\t\t\t\tvar o = {};\n\t\t\t\tobj_map(v, map, o);\n\t\t\t\tif(o.id){ // a valid id was found.\n\t\t\t\t\treturn o.id; // yay! Return it.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false; // the value was not a valid soul relation.\n\t\t}\n\t\tfunction map(s, k){ var o = this; // map over the object...\n\t\t\tif(o.id){ return o.id = false } // if ID is already defined AND we're still looping through the object, it is considered invalid.\n\t\t\tif(k == rel_ && text_is(s)){ // the key should be '#' and have a text value.\n\t\t\t\to.id = s; // we found the soul!\n\t\t\t} else {\n\t\t\t\treturn o.id = false; // if there exists anything else on the object that isn't the soul, then it is considered invalid.\n\t\t\t}\n\t\t}\n\t}());\n\tVal.link.ify = function(t){ DEP('val.link.ify'); return obj_put({}, rel_, t) } // convert a soul into a relation and return it.\n\tType.obj.has._ = '.';\n\tvar rel_ = Val.link._, u;\n\tvar bi_is = Type.bi.is;\n\tvar num_is = Type.num.is;\n\tvar text_is = Type.text.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_put = obj.put, obj_map = obj.map;\n\n\tType.val = Type.val || Val;\n\n\tvar Node = {_: '_'};\n\tNode.soul = function(n, o){ DEP('node.soul'); return (n && n._ && n._[o || soul_]) } // convenience function to check to see if there is a soul on a node and return it.\n\tNode.soul.ify = function(n, o){ DEP('node.soul.ify'); // put a soul on an object.\n\t\to = (typeof o === 'string')? {soul: o} : o || {};\n\t\tn = n || {}; // make sure it exists.\n\t\tn._ = n._ || {}; // make sure meta exists.\n\t\tn._[soul_] = o.soul || n._[soul_] || text_random(); // put the soul on it.\n\t\treturn n;\n\t}\n\tNode.soul._ = Val.link._;\n\t;(function(){\n\t\tNode.is = function(n, cb, as){ DEP('node.is'); var s; // checks to see if an object is a valid node.\n\t\t\tif(!obj_is(n)){ return false } // must be an object.\n\t\t\tif(s = Node.soul(n)){ // must have a soul on it.\n\t\t\t\treturn !obj_map(n, map, {as:as,cb:cb,s:s,n:n});\n\t\t\t}\n\t\t\treturn false; // nope! This was not a valid node.\n\t\t}\n\t\tfunction map(v, k){ // we invert this because the way we check for this is via a negation.\n\t\t\tif(k === Node._){ return } // skip over the metadata.\n\t\t\tif(!Val.is(v)){ return true } // it is true that this is an invalid node.\n\t\t\tif(this.cb){ this.cb.call(this.as, v, k, this.n, this.s) } // optionally callback each key/value.\n\t\t}\n\t}());\n\t;(function(){\n\t\tNode.ify = function(obj, o, as){ DEP('node.ify'); // returns a node from a shallow object.\n\t\t\tif(!o){ o = {} }\n\t\t\telse if(typeof o === 'string'){ o = {soul: o} }\n\t\t\telse if('function' == typeof o){ o = {map: o} }\n\t\t\tif(o.map){ o.node = o.map.call(as, obj, u, o.node || {}) }\n\t\t\tif(o.node = Node.soul.ify(o.node || {}, o)){\n\t\t\t\tobj_map(obj, map, {o:o,as:as});\n\t\t\t}\n\t\t\treturn o.node; // This will only be a valid node if the object wasn't already deep!\n\t\t}\n\t\tfunction map(v, k){ var o = this.o, tmp, u; // iterate over each key/value.\n\t\t\tif(o.map){\n\t\t\t\ttmp = o.map.call(this.as, v, ''+k, o.node);\n\t\t\t\tif(u === tmp){\n\t\t\t\t\tobj_del(o.node, k);\n\t\t\t\t} else\n\t\t\t\tif(o.node){ o.node[k] = tmp }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(Val.is(v)){\n\t\t\t\to.node[k] = v;\n\t\t\t}\n\t\t}\n\t}());\n\tvar obj = Type.obj, obj_is = obj.is, obj_del = obj.del, obj_map = obj.map;\n\tvar text = Type.text, text_random = text.random;\n\tvar soul_ = Node.soul._;\n\tvar u;\n\tType.node = Type.node || Node;\n\n\tvar State = Type.state;\n\tState.lex = function(){ DEP('state.lex'); return State().toString(36).replace('.','') }\n\tState.to = function(from, k, to){ DEP('state.to'); \n\t\tvar val = (from||{})[k];\n\t\tif(obj_is(val)){\n\t\t\tval = obj_copy(val);\n\t\t}\n\t\treturn State.ify(to, k, State.is(from, k), val, Node.soul(from));\n\t}\n\t;(function(){\n\t\tState.map = function(cb, s, as){ DEP('state.map'); var u; // for use with Node.ify\n\t\t\tvar o = obj_is(o = cb || s)? o : null;\n\t\t\tcb = fn_is(cb = cb || s)? cb : null;\n\t\t\tif(o && !cb){\n\t\t\t\ts = num_is(s)? s : State();\n\t\t\t\to[N_] = o[N_] || {};\n\t\t\t\tobj_map(o, map, {o:o,s:s});\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tas = as || obj_is(s)? s : u;\n\t\t\ts = num_is(s)? s : State();\n\t\t\treturn function(v, k, o, opt){\n\t\t\t\tif(!cb){\n\t\t\t\t\tmap.call({o: o, s: s}, v,k);\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\tcb.call(as || this || {}, v, k, o, opt);\n\t\t\t\tif(obj_has(o,k) && u === o[k]){ return }\n\t\t\t\tmap.call({o: o, s: s}, v,k);\n\t\t\t}\n\t\t}\n\t\tfunction map(v,k){\n\t\t\tif(N_ === k){ return }\n\t\t\tState.ify(this.o, k, this.s) ;\n\t\t}\n\t}());\n\tvar obj = Type.obj, obj_as = obj.as, obj_has = obj.has, obj_is = obj.is, obj_map = obj.map, obj_copy = obj.copy;\n\tvar num = Type.num, num_is = num.is;\n\tvar fn = Type.fn, fn_is = fn.is;\n\tvar N_ = Node._, u;\n\n\tvar Graph = {};\n\t;(function(){\n\t\tGraph.is = function(g, cb, fn, as){ DEP('graph.is'); // checks to see if an object is a valid graph.\n\t\t\tif(!g || !obj_is(g) || obj_empty(g)){ return false } // must be an object.\n\t\t\treturn !obj_map(g, map, {cb:cb,fn:fn,as:as}); // makes sure it wasn't an empty object.\n\t\t}\n\t\tfunction map(n, s){ // we invert this because the way'? we check for this is via a negation.\n\t\t\tif(!n || s !== Node.soul(n) || !Node.is(n, this.fn, this.as)){ return true } // it is true that this is an invalid graph.\n\t\t\tif(!this.cb){ return }\n\t\t\tnf.n = n; nf.as = this.as; // sequential race conditions aren't races.\n\t\t\tthis.cb.call(nf.as, n, s, nf);\n\t\t}\n\t\tfunction nf(fn){ // optional callback for each node.\n\t\t\tif(fn){ Node.is(nf.n, fn, nf.as) } // where we then have an optional callback for each key/value.\n\t\t}\n\t}());\n\t;(function(){\n\t\tGraph.ify = function(obj, env, as){ DEP('graph.ify'); \n\t\t\tvar at = {path: [], obj: obj};\n\t\t\tif(!env){\n\t\t\t\tenv = {};\n\t\t\t} else\n\t\t\tif(typeof env === 'string'){\n\t\t\t\tenv = {soul: env};\n\t\t\t} else\n\t\t\tif('function' == typeof env){\n\t\t\t\tenv.map = env;\n\t\t\t}\n\t\t\tif(typeof as === 'string'){\n\t\t\t\tenv.soul = env.soul || as;\n\t\t\t\tas = u;\n\t\t\t}\n\t\t\tif(env.soul){\n\t\t\t\tat.link = Val.link.ify(env.soul);\n\t\t\t}\n\t\t\tenv.shell = (as||{}).shell;\n\t\t\tenv.graph = env.graph || {};\n\t\t\tenv.seen = env.seen || [];\n\t\t\tenv.as = env.as || as;\n\t\t\tnode(env, at);\n\t\t\tenv.root = at.node;\n\t\t\treturn env.graph;\n\t\t}\n\t\tfunction node(env, at){ var tmp;\n\t\t\tif(tmp = seen(env, at)){ return tmp }\n\t\t\tat.env = env;\n\t\t\tat.soul = soul;\n\t\t\tif(Node.ify(at.obj, map, at)){\n\t\t\t\tat.link = at.link || Val.link.ify(Node.soul(at.node));\n\t\t\t\tif(at.obj !== env.shell){\n\t\t\t\t\tenv.graph[Val.link.is(at.link)] = at.node;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn at;\n\t\t}\n\t\tfunction map(v,k,n){\n\t\t\tvar at = this, env = at.env, is, tmp;\n\t\t\tif(Node._ === k && obj_has(v,Val.link._)){\n\t\t\t\treturn n._; // TODO: Bug?\n\t\t\t}\n\t\t\tif(!(is = valid(v,k,n, at,env))){ return }\n\t\t\tif(!k){\n\t\t\t\tat.node = at.node || n || {};\n\t\t\t\tif(obj_has(v, Node._) && Node.soul(v)){ // ? for safety ?\n\t\t\t\t\tat.node._ = obj_copy(v._);\n\t\t\t\t}\n\t\t\t\tat.node = Node.soul.ify(at.node, Val.link.is(at.link));\n\t\t\t\tat.link = at.link || Val.link.ify(Node.soul(at.node));\n\t\t\t}\n\t\t\tif(tmp = env.map){\n\t\t\t\ttmp.call(env.as || {}, v,k,n, at);\n\t\t\t\tif(obj_has(n,k)){\n\t\t\t\t\tv = n[k];\n\t\t\t\t\tif(u === v){\n\t\t\t\t\t\tobj_del(n, k);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(!(is = valid(v,k,n, at,env))){ return }\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!k){ return at.node }\n\t\t\tif(true === is){\n\t\t\t\treturn v;\n\t\t\t}\n\t\t\ttmp = node(env, {obj: v, path: at.path.concat(k)});\n\t\t\tif(!tmp.node){ return }\n\t\t\treturn tmp.link; //{'#': Node.soul(tmp.node)};\n\t\t}\n\t\tfunction soul(id){ var at = this;\n\t\t\tvar prev = Val.link.is(at.link), graph = at.env.graph;\n\t\t\tat.link = at.link || Val.link.ify(id);\n\t\t\tat.link[Val.link._] = id;\n\t\t\tif(at.node && at.node[Node._]){\n\t\t\t\tat.node[Node._][Val.link._] = id;\n\t\t\t}\n\t\t\tif(obj_has(graph, prev)){\n\t\t\t\tgraph[id] = graph[prev];\n\t\t\t\tobj_del(graph, prev);\n\t\t\t}\n\t\t}\n\t\tfunction valid(v,k,n, at,env){ var tmp;\n\t\t\tif(Val.is(v)){ return true }\n\t\t\tif(obj_is(v)){ return 1 }\n\t\t\tif(tmp = env.invalid){\n\t\t\t\tv = tmp.call(env.as || {}, v,k,n);\n\t\t\t\treturn valid(v,k,n, at,env);\n\t\t\t}\n\t\t\tenv.err = \"Invalid value at '\" + at.path.concat(k).join('.') + \"'!\";\n\t\t\tif(Type.list.is(v)){ env.err += \" Use `.set(item)` instead of an Array.\" }\n\t\t}\n\t\tfunction seen(env, at){\n\t\t\tvar arr = env.seen, i = arr.length, has;\n\t\t\twhile(i--){ has = arr[i];\n\t\t\t\tif(at.obj === has.obj){ return has }\n\t\t\t}\n\t\t\tarr.push(at);\n\t\t}\n\t}());\n\tGraph.node = function(node){ DEP('graph.node'); \n\t\tvar soul = Node.soul(node);\n\t\tif(!soul){ return }\n\t\treturn obj_put({}, soul, node);\n\t}\n\t;(function(){\n\t\tGraph.to = function(graph, root, opt){ DEP('graph.to'); \n\t\t\tif(!graph){ return }\n\t\t\tvar obj = {};\n\t\t\topt = opt || {seen: {}};\n\t\t\tobj_map(graph[root], map, {obj:obj, graph: graph, opt: opt});\n\t\t\treturn obj;\n\t\t}\n\t\tfunction map(v,k){ var tmp, obj;\n\t\t\tif(Node._ === k){\n\t\t\t\tif(obj_empty(v, Val.link._)){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.obj[k] = obj_copy(v);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!(tmp = Val.link.is(v))){\n\t\t\t\tthis.obj[k] = v;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(obj = this.opt.seen[tmp]){\n\t\t\t\tthis.obj[k] = obj;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.obj[k] = this.opt.seen[tmp] = Graph.to(this.graph, tmp, this.opt);\n\t\t}\n\t}());\n\tvar fn_is = Type.fn.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_del = obj.del, obj_has = obj.has, obj_empty = obj.empty, obj_put = obj.put, obj_map = obj.map, obj_copy = obj.copy;\n\tvar u;\n\tType.graph = Type.graph || Graph;\n}());",";(function(){\n\n var window = this || self || window;\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n ;USE(function(module){\n // Security, Encryption, and Authorization: SEA.js\n // MANDATORY READING: https://gun.eco/explainers/data/security.html\n // IT IS IMPLEMENTED IN A POLYFILL/SHIM APPROACH.\n // THIS IS AN EARLY ALPHA!\n\n if(typeof window !== \"undefined\"){ module.window = window }\n\n var tmp = module.window || module, u;\n var SEA = tmp.SEA || {};\n\n if(SEA.window = module.window){ SEA.window.SEA = SEA }\n\n try{ if(u+'' !== typeof MODULE){ MODULE.exports = SEA } }catch(e){}\n module.exports = SEA;\n })(USE, './root');\n\n ;USE(function(module){\n var SEA = USE('./root');\n try{ if(SEA.window){\n if(location.protocol.indexOf('s') < 0\n && location.host.indexOf('localhost') < 0\n && ! /^127\\.\\d+\\.\\d+\\.\\d+$/.test(location.hostname)\n && location.protocol.indexOf('file:') < 0){\n console.warn('HTTPS needed for WebCrypto in SEA, redirecting...');\n location.protocol = 'https:'; // WebCrypto does NOT work without HTTPS!\n }\n } }catch(e){}\n })(USE, './https');\n\n ;USE(function(module){\n var u;\n if(u+''== typeof btoa){\n if(u+'' == typeof Buffer){\n try{ global.Buffer = USE(\"buffer\", 1).Buffer }catch(e){ console.log(\"Please `npm install buffer` or add it to your package.json !\") }\n }\n global.btoa = function(data){ return Buffer.from(data, \"binary\").toString(\"base64\") };\n global.atob = function(data){ return Buffer.from(data, \"base64\").toString(\"binary\") };\n }\n })(USE, './base64');\n\n ;USE(function(module){\n USE('./base64');\n // This is Array extended to have .toString(['utf8'|'hex'|'base64'])\n function SeaArray() {}\n Object.assign(SeaArray, { from: Array.from })\n SeaArray.prototype = Object.create(Array.prototype)\n SeaArray.prototype.toString = function(enc, start, end) { enc = enc || 'utf8'; start = start || 0;\n const length = this.length\n if (enc === 'hex') {\n const buf = new Uint8Array(this)\n return [ ...Array(((end && (end + 1)) || length) - start).keys()]\n .map((i) => buf[ i + start ].toString(16).padStart(2, '0')).join('')\n }\n if (enc === 'utf8') {\n return Array.from(\n { length: (end || length) - start },\n (_, i) => String.fromCharCode(this[ i + start])\n ).join('')\n }\n if (enc === 'base64') {\n return btoa(this)\n }\n }\n module.exports = SeaArray;\n })(USE, './array');\n\n ;USE(function(module){\n USE('./base64');\n // This is Buffer implementation used in SEA. Functionality is mostly\n // compatible with NodeJS 'safe-buffer' and is used for encoding conversions\n // between binary and 'hex' | 'utf8' | 'base64'\n // See documentation and validation for safe implementation in:\n // https://github.com/feross/safe-buffer#update\n var SeaArray = USE('./array');\n function SafeBuffer(...props) {\n console.warn('new SafeBuffer() is depreciated, please use SafeBuffer.from()')\n return SafeBuffer.from(...props)\n }\n SafeBuffer.prototype = Object.create(Array.prototype)\n Object.assign(SafeBuffer, {\n // (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'\n from() {\n if (!Object.keys(arguments).length || arguments[0]==null) {\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n }\n const input = arguments[0]\n let buf\n if (typeof input === 'string') {\n const enc = arguments[1] || 'utf8'\n if (enc === 'hex') {\n const bytes = input.match(/([\\da-fA-F]{2})/g)\n .map((byte) => parseInt(byte, 16))\n if (!bytes || !bytes.length) {\n throw new TypeError('Invalid first argument for type \\'hex\\'.')\n }\n buf = SeaArray.from(bytes)\n } else if (enc === 'utf8' || 'binary' === enc) { // EDIT BY MARK: I think this is safe, tested it against a couple \"binary\" strings. This lets SafeBuffer match NodeJS Buffer behavior more where it safely btoas regular strings.\n const length = input.length\n const words = new Uint16Array(length)\n Array.from({ length: length }, (_, i) => words[i] = input.charCodeAt(i))\n buf = SeaArray.from(words)\n } else if (enc === 'base64') {\n const dec = atob(input)\n const length = dec.length\n const bytes = new Uint8Array(length)\n Array.from({ length: length }, (_, i) => bytes[i] = dec.charCodeAt(i))\n buf = SeaArray.from(bytes)\n } else if (enc === 'binary') { // deprecated by above comment\n buf = SeaArray.from(input) // some btoas were mishandled.\n } else {\n console.info('SafeBuffer.from unknown encoding: '+enc)\n }\n return buf\n }\n const byteLength = input.byteLength // what is going on here? FOR MARTTI\n const length = input.byteLength ? input.byteLength : input.length\n if (length) {\n let buf\n if (input instanceof ArrayBuffer) {\n buf = new Uint8Array(input)\n }\n return SeaArray.from(buf || input)\n }\n },\n // This is 'safe-buffer.alloc' sans encoding support\n alloc(length, fill = 0 /*, enc*/ ) {\n return SeaArray.from(new Uint8Array(Array.from({ length: length }, () => fill)))\n },\n // This is normal UNSAFE 'buffer.alloc' or 'new Buffer(length)' - don't use!\n allocUnsafe(length) {\n return SeaArray.from(new Uint8Array(Array.from({ length : length })))\n },\n // This puts together array of array like members\n concat(arr) { // octet array\n if (!Array.isArray(arr)) {\n throw new TypeError('First argument must be Array containing ArrayBuffer or Uint8Array instances.')\n }\n return SeaArray.from(arr.reduce((ret, item) => ret.concat(Array.from(item)), []))\n }\n })\n SafeBuffer.prototype.from = SafeBuffer.from\n SafeBuffer.prototype.toString = SeaArray.prototype.toString\n\n module.exports = SafeBuffer;\n })(USE, './buffer');\n\n ;USE(function(module){\n const SEA = USE('./root')\n const api = {Buffer: USE('./buffer')}\n var o = {}, u;\n\n // ideally we can move away from JSON entirely? unlikely due to compatibility issues... oh well.\n JSON.parseAsync = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n JSON.stringifyAsync = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n api.parse = function(t,r){ return new Promise(function(res, rej){\n JSON.parseAsync(t,function(err, raw){ err? rej(err) : res(raw) },r);\n })}\n api.stringify = function(v,r,s){ return new Promise(function(res, rej){\n JSON.stringifyAsync(v,function(err, raw){ err? rej(err) : res(raw) },r,s);\n })}\n\n if(SEA.window){\n api.crypto = window.crypto || window.msCrypto\n api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;\n api.TextEncoder = window.TextEncoder;\n api.TextDecoder = window.TextDecoder;\n api.random = (len) => api.Buffer.from(api.crypto.getRandomValues(new Uint8Array(api.Buffer.alloc(len))));\n }\n if(!api.TextDecoder)\n {\n const { TextEncoder, TextDecoder } = USE((u+'' == typeof MODULE?'.':'')+'./lib/text-encoding', 1);\n api.TextDecoder = TextDecoder;\n api.TextEncoder = TextEncoder;\n }\n if(!api.crypto)\n {\n try\n {\n var crypto = USE('crypto', 1);\n Object.assign(api, {\n crypto,\n random: (len) => api.Buffer.from(crypto.randomBytes(len))\n }); \n const { Crypto: WebCrypto } = USE('@peculiar/webcrypto', 1);\n api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH\n }\n catch(e){\n console.log(\"Please `npm install @peculiar/webcrypto` or add it to your package.json !\");\n }}\n\n module.exports = api\n })(USE, './shim');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var s = {};\n s.pbkdf2 = {hash: {name : 'SHA-256'}, iter: 100000, ks: 64};\n s.ecdsa = {\n pair: {name: 'ECDSA', namedCurve: 'P-256'},\n sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}\n };\n s.ecdh = {name: 'ECDH', namedCurve: 'P-256'};\n\n // This creates Web Cryptography API compliant JWK for sign/verify purposes\n s.jwk = function(pub, d){ // d === priv\n pub = pub.split('.');\n var x = pub[0], y = pub[1];\n var jwk = {kty: \"EC\", crv: \"P-256\", x: x, y: y, ext: true};\n jwk.key_ops = d ? ['sign'] : ['verify'];\n if(d){ jwk.d = d }\n return jwk;\n };\n \n s.keyToJwk = function(keyBytes) {\n const keyB64 = keyBytes.toString('base64');\n const k = keyB64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=/g, '');\n return { kty: 'oct', k: k, ext: false, alg: 'A256GCM' };\n }\n\n s.recall = {\n validity: 12 * 60 * 60, // internally in seconds : 12 hours\n hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)\n };\n\n s.check = function(t){ return (typeof t == 'string') && ('SEA{' === t.slice(0,4)) }\n s.parse = async function p(t){ try {\n var yes = (typeof t == 'string');\n if(yes && 'SEA{' === t.slice(0,4)){ t = t.slice(3) }\n return yes ? await shim.parse(t) : t;\n } catch (e) {}\n return t;\n }\n\n SEA.opt = s;\n module.exports = s\n })(USE, './settings');\n\n ;USE(function(module){\n var shim = USE('./shim');\n module.exports = async function(d, o){\n var t = (typeof d == 'string')? d : await shim.stringify(d);\n var hash = await shim.subtle.digest({name: o||'SHA-256'}, new shim.TextEncoder().encode(t));\n return shim.Buffer.from(hash);\n }\n })(USE, './sha256');\n\n ;USE(function(module){\n // This internal func returns SHA-1 hashed data for KeyID generation\n const __shim = USE('./shim')\n const subtle = __shim.subtle\n const ossl = __shim.ossl ? __shim.ossl : subtle\n const sha1hash = (b) => ossl.digest({name: 'SHA-1'}, new ArrayBuffer(b))\n module.exports = sha1hash\n })(USE, './sha1');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.work = SEA.work || (async (data, pair, cb, opt) => { try { // used to be named `proof`\n var salt = (pair||{}).epub || pair; // epub not recommended, salt should be random!\n opt = opt || {};\n if(salt instanceof Function){\n cb = salt;\n salt = u;\n }\n data = (typeof data == 'string')? data : await shim.stringify(data);\n if('sha' === (opt.name||'').toLowerCase().slice(0,3)){\n var rsha = shim.Buffer.from(await sha(data, opt.name), 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(rsha) }catch(e){console.log(e)} }\n return rsha;\n }\n salt = salt || shim.random(9);\n var key = await (shim.ossl || shim.subtle).importKey('raw', new shim.TextEncoder().encode(data), {name: opt.name || 'PBKDF2'}, false, ['deriveBits']);\n var work = await (shim.ossl || shim.subtle).deriveBits({\n name: opt.name || 'PBKDF2',\n iterations: opt.iterations || S.pbkdf2.iter,\n salt: new shim.TextEncoder().encode(opt.salt || salt),\n hash: opt.hash || S.pbkdf2.hash,\n }, key, opt.length || (S.pbkdf2.ks * 8))\n data = shim.random(data.length) // Erase data in case of passphrase\n var r = shim.Buffer.from(work, 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.work;\n })(USE, './work');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n\n SEA.name = SEA.name || (async (cb, opt) => { try {\n if(cb){ try{ cb() }catch(e){console.log(e)} }\n return;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n //SEA.pair = async (data, proof, cb) => { try {\n SEA.pair = SEA.pair || (async (cb, opt) => { try {\n\n var ecdhSubtle = shim.ossl || shim.subtle;\n // First: ECDSA keys for signing/verifying...\n var sa = await shim.subtle.generateKey({name: 'ECDSA', namedCurve: 'P-256'}, true, [ 'sign', 'verify' ])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n //const { d: priv } = await shim.subtle.exportKey('jwk', keys.privateKey)\n var key = {};\n key.priv = (await shim.subtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await shim.subtle.exportKey('jwk', keys.publicKey);\n //const pub = Buff.from([ x, y ].join(':')).toString('base64') // old\n key.pub = pub.x+'.'+pub.y; // new\n // x and y are already base64\n // pub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n \n // To include PGPv4 kind of keyId:\n // const pubId = await SEA.keyid(keys.pub)\n // Next: ECDH keys for encryption/decryption...\n\n try{\n var dh = await ecdhSubtle.generateKey({name: 'ECDH', namedCurve: 'P-256'}, true, ['deriveKey'])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n var key = {};\n key.epriv = (await ecdhSubtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await ecdhSubtle.exportKey('jwk', keys.publicKey);\n //const epub = Buff.from([ ex, ey ].join(':')).toString('base64') // old\n key.epub = pub.x+'.'+pub.y; // new\n // ex and ey are already base64\n // epub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n }catch(e){\n if(SEA.window){ throw e }\n if(e == 'Error: ECDH is not a supported algorithm'){ console.log('Ignoring ECDH...') }\n else { throw e }\n } dh = dh || {};\n\n var r = { pub: sa.pub, priv: sa.priv, /* pubId, */ epub: dh.epub, epriv: dh.epriv }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.pair;\n })(USE, './pair');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.sign = SEA.sign || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n if(!(pair||opt).priv){\n if(!SEA.I){ throw 'No signing key.' }\n pair = await SEA.I(null, {what: data, how: 'sign', why: opt.why});\n }\n if(u === data){ throw '`undefined` not allowed.' }\n var json = await S.parse(data);\n var check = opt.check = opt.check || json;\n if(SEA.verify && (SEA.opt.check(check) || (check && check.s && check.m))\n && u !== await SEA.verify(check, pair)){ // don't sign if we already signed it.\n var r = await S.parse(check);\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n var pub = pair.pub;\n var priv = pair.priv;\n var jwk = S.jwk(pub, priv);\n var hash = await sha(json);\n var sig = await (shim.ossl || shim.subtle).importKey('jwk', jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, ['sign'])\n .then((key) => (shim.ossl || shim.subtle).sign({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, new Uint8Array(hash))) // privateKey scope doesn't leak out from here!\n var r = {m: json, s: shim.Buffer.from(sig, 'binary').toString(opt.encode || 'base64')}\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.sign;\n })(USE, './sign');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.verify = SEA.verify || (async (data, pair, cb, opt) => { try {\n var json = await S.parse(data);\n if(false === pair){ // don't verify!\n var raw = await S.parse(json.m);\n if(cb){ try{ cb(raw) }catch(e){console.log(e)} }\n return raw;\n }\n opt = opt || {};\n // SEA.I // verify is free! Requires no user permission.\n var pub = pair.pub || pair;\n var key = SEA.opt.slow_leak? await SEA.opt.slow_leak(pub) : await (shim.ossl || shim.subtle).importKey('jwk', S.jwk(pub), {name: 'ECDSA', namedCurve: 'P-256'}, false, ['verify']);\n var hash = await sha(json.m);\n var buf, sig, check, tmp; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64'); // NEW DEFAULT!\n sig = new Uint8Array(buf);\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash));\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){\n if(SEA.opt.fallback){\n return await SEA.opt.fall_verify(data, pair, cb, opt);\n }\n }\n var r = check? await S.parse(json.m) : u;\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e); // mismatched owner FOR MARTTI\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.verify;\n // legacy & ossl memory leak mitigation:\n\n var knownKeys = {};\n var keyForPair = SEA.opt.slow_leak = pair => {\n if (knownKeys[pair]) return knownKeys[pair];\n var jwk = S.jwk(pair);\n knownKeys[pair] = (shim.ossl || shim.subtle).importKey(\"jwk\", jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, [\"verify\"]);\n return knownKeys[pair];\n };\n\n var O = SEA.opt;\n SEA.opt.fall_verify = async function(data, pair, cb, opt, f){\n if(f === SEA.opt.fallback){ throw \"Signature did not match\" } f = f || 1;\n var tmp = data||'';\n data = SEA.opt.unpack(data) || data;\n var json = await S.parse(data), pub = pair.pub || pair, key = await SEA.opt.slow_leak(pub);\n var hash = (f <= SEA.opt.fallback)? shim.Buffer.from(await shim.subtle.digest({name: 'SHA-256'}, new shim.TextEncoder().encode(await S.parse(json.m)))) : await sha(json.m); // this line is old bad buggy code but necessary for old compatibility.\n var buf; var sig; var check; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64') // NEW DEFAULT!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){ try{\n buf = shim.Buffer.from(json.s, 'utf8') // AUTO BACKWARD OLD UTF8 DATA!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n }catch(e){\n if(!check){ throw \"Signature did not match.\" }\n }\n }\n var r = check? await S.parse(json.m) : u;\n O.fall_soul = tmp['#']; O.fall_key = tmp['.']; O.fall_val = data; O.fall_state = tmp['>'];\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n SEA.opt.fallback = 2;\n\n })(USE, './verify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha256hash = USE('./sha256');\n\n const importGen = async (key, salt, opt) => {\n //const combo = shim.Buffer.concat([shim.Buffer.from(key, 'utf8'), salt || shim.random(8)]).toString('utf8') // old\n opt = opt || {};\n const combo = key + (salt || shim.random(8)).toString('utf8'); // new\n const hash = shim.Buffer.from(await sha256hash(combo), 'binary')\n \n const jwkKey = S.keyToJwk(hash) \n return await shim.subtle.importKey('jwk', jwkKey, {name:'AES-GCM'}, false, ['encrypt', 'decrypt'])\n }\n module.exports = importGen;\n })(USE, './aeskey');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n var u;\n\n SEA.encrypt = SEA.encrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(u === data){ throw '`undefined` not allowed.' }\n if(!key){\n if(!SEA.I){ throw 'No encryption key.' }\n pair = await SEA.I(null, {what: data, how: 'encrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var msg = (typeof data == 'string')? data : await shim.stringify(data);\n var rand = {s: shim.random(9), iv: shim.random(15)}; // consider making this 9 and 15 or 18 or 12 to reduce == padding.\n var ct = await aeskey(key, rand.s, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).encrypt({ // Keeping the AES key scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(rand.iv)\n }, aes, new shim.TextEncoder().encode(msg)));\n var r = {\n ct: shim.Buffer.from(ct, 'binary').toString(opt.encode || 'base64'),\n iv: rand.iv.toString(opt.encode || 'base64'),\n s: rand.s.toString(opt.encode || 'base64')\n }\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.encrypt;\n })(USE, './encrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n\n SEA.decrypt = SEA.decrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(!key){\n if(!SEA.I){ throw 'No decryption key.' }\n pair = await SEA.I(null, {what: data, how: 'decrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var json = await S.parse(data);\n var buf, bufiv, bufct; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64');\n bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');\n bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');\n var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv), tagLength: 128\n }, aes, new Uint8Array(bufct)));\n }catch(e){\n if('utf8' === opt.encode){ throw \"Could not decrypt\" }\n if(SEA.opt.fallback){\n opt.encode = 'utf8';\n return await SEA.decrypt(data, pair, cb, opt);\n }\n }\n var r = await S.parse(new shim.TextDecoder('utf8').decode(ct));\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.decrypt;\n })(USE, './decrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n // Derive shared secret from other's pub and my epub/epriv \n SEA.secret = SEA.secret || (async (key, pair, cb, opt) => { try {\n opt = opt || {};\n if(!pair || !pair.epriv || !pair.epub){\n if(!SEA.I){ throw 'No secret mix.' }\n pair = await SEA.I(null, {what: key, how: 'secret', why: opt.why});\n }\n var pub = key.epub || key;\n var epub = pair.epub;\n var epriv = pair.epriv;\n var ecdhSubtle = shim.ossl || shim.subtle;\n var pubKeyData = keysToEcdhJwk(pub);\n var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },{name: 'ECDH', namedCurve: 'P-256'}); // Thanks to @sirpy !\n var privKeyData = keysToEcdhJwk(epub, epriv);\n var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveBits']).then(async (privKey) => {\n // privateKey scope doesn't leak out from here!\n var derivedBits = await ecdhSubtle.deriveBits(props, privKey, 256);\n var rawBits = new Uint8Array(derivedBits);\n var derivedKey = await ecdhSubtle.importKey('raw', rawBits,{ name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);\n return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);\n })\n var r = derived;\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n // can this be replaced with settings.jwk?\n var keysToEcdhJwk = (pub, d) => { // d === priv\n //var [ x, y ] = shim.Buffer.from(pub, 'base64').toString('utf8').split(':') // old\n var [ x, y ] = pub.split('.') // new\n var jwk = d ? { d: d } : {}\n return [ // Use with spread returned value...\n 'jwk',\n Object.assign(\n jwk,\n { x: x, y: y, kty: 'EC', crv: 'P-256', ext: true }\n ), // ??? refactor\n {name: 'ECDH', namedCurve: 'P-256'}\n ]\n }\n\n module.exports = SEA.secret;\n })(USE, './secret');\n\n ;USE(function(module){\n var SEA = USE('./root');\n // This is to certify that a group of \"certificants\" can \"put\" anything at a group of matched \"paths\" to the certificate authority's graph\n SEA.certify = SEA.certify || (async (certificants, policy = {}, authority, cb, opt = {}) => { try {\n /*\n The Certify Protocol was made out of love by a Vietnamese code enthusiast. Vietnamese people around the world deserve respect!\n IMPORTANT: A Certificate is like a Signature. No one knows who (authority) created/signed a cert until you put it into their graph.\n \"certificants\": '*' or a String (Bob.pub) || an Object that contains \"pub\" as a key || an array of [object || string]. These people will have the rights.\n \"policy\": A string ('inbox'), or a RAD/LEX object {'*': 'inbox'}, or an Array of RAD/LEX objects or strings. RAD/LEX object can contain key \"?\" with indexOf(\"*\") > -1 to force key equals certificant pub. This rule is used to check against soul+'/'+key using Gun.text.match or String.match.\n \"authority\": Key pair or priv of the certificate authority.\n \"cb\": A callback function after all things are done.\n \"opt\": If opt.expiry (a timestamp) is set, SEA won't sync data after opt.expiry. If opt.block is set, SEA will look for block before syncing.\n */\n console.log('SEA.certify() is an early experimental community supported method that may change API behavior without warning in any future version.')\n\n certificants = (() => {\n var data = []\n if (certificants) {\n if ((typeof certificants === 'string' || Array.isArray(certificants)) && certificants.indexOf('*') > -1) return '*'\n if (typeof certificants === 'string') return certificants\n if (Array.isArray(certificants)) {\n if (certificants.length === 1 && certificants[0]) return typeof certificants[0] === 'object' && certificants[0].pub ? certificants[0].pub : typeof certificants[0] === 'string' ? certificants[0] : null\n certificants.map(certificant => {\n if (typeof certificant ==='string') data.push(certificant)\n else if (typeof certificant === 'object' && certificant.pub) data.push(certificant.pub)\n })\n }\n\n if (typeof certificants === 'object' && certificants.pub) return certificants.pub\n return data.length > 0 ? data : null\n }\n return\n })()\n\n if (!certificants) return console.log(\"No certificant found.\")\n\n const expiry = opt.expiry && (typeof opt.expiry === 'number' || typeof opt.expiry === 'string') ? parseFloat(opt.expiry) : null\n const readPolicy = (policy || {}).read ? policy.read : null\n const writePolicy = (policy || {}).write ? policy.write : typeof policy === 'string' || Array.isArray(policy) || policy[\"+\"] || policy[\"#\"] || policy[\".\"] || policy[\"=\"] || policy[\"*\"] || policy[\">\"] || policy[\"<\"] ? policy : null\n // The \"blacklist\" feature is now renamed to \"block\". Why ? BECAUSE BLACK LIVES MATTER!\n // We can now use 3 keys: block, blacklist, ban\n const block = (opt || {}).block || (opt || {}).blacklist || (opt || {}).ban || {}\n const readBlock = block.read && (typeof block.read === 'string' || (block.read || {})['#']) ? block.read : null\n const writeBlock = typeof block === 'string' ? block : block.write && (typeof block.write === 'string' || block.write['#']) ? block.write : null\n\n if (!readPolicy && !writePolicy) return console.log(\"No policy found.\")\n\n // reserved keys: c, e, r, w, rb, wb\n const data = JSON.stringify({\n c: certificants,\n ...(expiry ? {e: expiry} : {}), // inject expiry if possible\n ...(readPolicy ? {r: readPolicy } : {}), // \"r\" stands for read, which means read permission.\n ...(writePolicy ? {w: writePolicy} : {}), // \"w\" stands for write, which means write permission.\n ...(readBlock ? {rb: readBlock} : {}), // inject READ block if possible\n ...(writeBlock ? {wb: writeBlock} : {}), // inject WRITE block if possible\n })\n\n const certificate = await SEA.sign(data, authority, null, {raw:1})\n\n var r = certificate\n if(!opt.raw){ r = 'SEA'+JSON.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.certify;\n })(USE, './certify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n // Practical examples about usage found in tests.\n var SEA = USE('./root');\n SEA.work = USE('./work');\n SEA.sign = USE('./sign');\n SEA.verify = USE('./verify');\n SEA.encrypt = USE('./encrypt');\n SEA.decrypt = USE('./decrypt');\n SEA.certify = USE('./certify');\n //SEA.opt.aeskey = USE('./aeskey'); // not official! // this causes problems in latest WebCrypto.\n\n SEA.random = SEA.random || shim.random;\n\n // This is Buffer used in SEA and usable from Gun/SEA application also.\n // For documentation see https://nodejs.org/api/buffer.html\n SEA.Buffer = SEA.Buffer || USE('./buffer');\n\n // These SEA functions support now ony Promises or\n // async/await (compatible) code, use those like Promises.\n //\n // Creates a wrapper library around Web Crypto API\n // for various AES, ECDSA, PBKDF2 functions we called above.\n // Calculate public key KeyID aka PGPv4 (result: 8 bytes as hex string)\n SEA.keyid = SEA.keyid || (async (pub) => {\n try {\n // base64('base64(x):base64(y)') => shim.Buffer(xy)\n const pb = shim.Buffer.concat(\n pub.replace(/-/g, '+').replace(/_/g, '/').split('.')\n .map((t) => shim.Buffer.from(t, 'base64'))\n )\n // id is PGPv4 compliant raw key\n const id = shim.Buffer.concat([\n shim.Buffer.from([0x99, pb.length / 0x100, pb.length % 0x100]), pb\n ])\n const sha1 = await sha1hash(id)\n const hash = shim.Buffer.from(sha1, 'binary')\n return hash.toString('hex', hash.length - 8) // 16-bit ID as hex\n } catch (e) {\n console.log(e)\n throw e\n }\n });\n // all done!\n // Obviously it is missing MANY necessary features. This is only an alpha release.\n // Please experiment with it, audit what I've done so far, and complain about what needs to be added.\n // SEA should be a full suite that is easy and seamless to use.\n // Again, scroll naer the top, where I provide an EXAMPLE of how to create a user and sign in.\n // Once logged in, the rest of the code you just read handled automatically signing/validating data.\n // But all other behavior needs to be equally easy, like opinionated ways of\n // Adding friends (trusted public keys), sending private messages, etc.\n // Cheers! Tell me what you think.\n ((SEA.window||{}).GUN||{}).SEA = SEA;\n\n module.exports = SEA\n // -------------- END SEA MODULES --------------------\n // -- BEGIN SEA+GUN MODULES: BUNDLED BY DEFAULT UNTIL OTHERS USE SEA ON OWN -------\n })(USE, './sea');\n\n ;USE(function(module){\n var SEA = USE('./sea'), Gun, u;\n if(SEA.window){\n Gun = SEA.window.GUN || {chain:{}};\n } else {\n Gun = USE((u+'' == typeof MODULE?'.':'')+'./gun', 1);\n }\n SEA.GUN = Gun;\n\n function User(root){ \n this._ = {$: this};\n }\n User.prototype = (function(){ function F(){}; F.prototype = Gun.chain; return new F() }()) // Object.create polyfill\n User.prototype.constructor = User;\n\n // let's extend the gun chain with a `user` function.\n // only one user can be logged in at a time, per gun instance.\n Gun.chain.user = function(pub){\n var gun = this, root = gun.back(-1), user;\n if(pub){\n pub = SEA.opt.pub((pub._||'')['#']) || pub;\n return root.get('~'+pub);\n }\n if(user = root.back('user')){ return user }\n var root = (root._), at = root, uuid = at.opt.uuid || lex;\n (at = (user = at.user = gun.chain(new User))._).opt = {};\n at.opt.uuid = function(cb){\n var id = uuid(), pub = root.user;\n if(!pub || !(pub = pub.is) || !(pub = pub.pub)){ return id }\n id = '~' + pub + '/' + id;\n if(cb && cb.call){ cb(null, id) }\n return id;\n }\n return user;\n }\n function lex(){ return Gun.state().toString(36).replace('.','') }\n Gun.User = User;\n User.GUN = Gun;\n User.SEA = Gun.SEA = SEA;\n module.exports = User;\n })(USE, './user');\n\n ;USE(function(module){\n var u, Gun = (''+u != typeof window)? (window.Gun||{chain:{}}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n Gun.chain.then = function(cb, opt){\n var gun = this, p = (new Promise(function(res, rej){\n gun.once(res, opt);\n }));\n return cb? p.then(cb) : p;\n }\n })(USE, './then');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n\n // Well first we have to actually create a user. That is what this function does.\n User.prototype.create = function(...args){\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = pair && (pair.pub || pair.epub) ? pair.pub : typeof args[0] === 'string' ? args[0] : null;\n var pass = pair && (pair.pub || pair.epub) ? pair : alias && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n cb = cb || noop;\n opt = opt || {};\n if(false !== opt.check){\n var err;\n if(!alias){ err = \"No user.\" }\n if((pass||'').length < 8){ err = \"Password too short!\" }\n if(err){\n cb({err: Gun.log(err)});\n return gun;\n }\n }\n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n var act = {}, u;\n act.a = function(pubs){\n act.pubs = pubs;\n if(pubs && !opt.already){\n // If we can enforce that a user name is already taken, it might be nice to try, but this is not guaranteed.\n var ack = {err: Gun.log('User already created!')};\n cat.ing = false;\n (cb || noop)(ack);\n gun.leave();\n return;\n }\n act.salt = String.random(64); // pseudo-randomly create a salt, then use PBKDF2 function to extend the password with it.\n SEA.work(pass, act.salt, act.b); // this will take some short amount of time to produce a proof, which slows brute force attacks.\n }\n act.b = function(proof){\n act.proof = proof;\n pair ? act.c(pair) : SEA.pair(act.c) // generate a brand new key pair or use the existing.\n }\n act.c = function(pair){\n var tmp\n act.pair = pair || {};\n if(tmp = cat.root.user){\n tmp._.sea = pair;\n tmp.is = {pub: pair.pub, epub: pair.epub, alias: alias};\n }\n // the user's public key doesn't need to be signed. But everything else needs to be signed with it! // we have now automated it! clean up these extra steps now!\n act.data = {pub: pair.pub};\n act.d();\n }\n act.d = function(){\n act.data.alias = alias;\n act.e();\n }\n act.e = function(){\n act.data.epub = act.pair.epub; \n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, act.proof, act.f, {raw:1}); // to keep the private key safe, we AES encrypt it with the proof of work!\n }\n act.f = function(auth){\n act.data.auth = JSON.stringify({ek: auth, s: act.salt}); \n act.g(act.data.auth);\n }\n act.g = function(auth){ var tmp;\n act.data.auth = act.data.auth || auth;\n root.get(tmp = '~'+act.pair.pub).put(act.data).on(act.h); // awesome, now we can actually save the user with their public key as their ID.\n var link = {}; link[tmp] = {'#': tmp}; root.get('~@'+alias).put(link).get(tmp).on(act.i); // next up, we want to associate the alias with the public key. So we add it to the alias list.\n }\n act.h = function(data, key, msg, eve){\n eve.off(); act.h.ok = 1; act.i();\n }\n act.i = function(data, key, msg, eve){\n if(eve){ act.i.ok = 1; eve.off() }\n if(!act.h.ok || !act.i.ok){ return }\n cat.ing = false;\n cb({ok: 0, pub: act.pair.pub}); // callback that the user has been created. (Note: ok = 0 because we didn't wait for disk to ack)\n if(noop === cb){ pair ? gun.auth(pair) : gun.auth(alias, pass) } // if no callback is passed, auto-login after signing up.\n }\n root.get('~@'+alias).once(act.a);\n return gun;\n }\n User.prototype.leave = function(opt, cb){\n var gun = this, user = (gun.back(-1)._).user;\n if(user){\n delete user.is;\n delete user._.is;\n delete user._.sea;\n }\n if(SEA.window){\n try{var sS = {};\n sS = window.sessionStorage;\n delete sS.recall;\n delete sS.pair;\n }catch(e){};\n }\n return gun;\n }\n })(USE, './create');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n // now that we have created a user, we want to authenticate them!\n User.prototype.auth = function(...args){ // TODO: this PR with arguments need to be cleaned up / refactored.\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = !pair && typeof args[0] === 'string' ? args[0] : null;\n var pass = (alias || (pair && !(pair.priv && pair.epriv))) && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n \n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n \n var act = {}, u, tries = 9;\n act.a = function(data){\n if(!data){ return act.b() }\n if(!data.pub){\n var tmp = []; Object.keys(data).forEach(function(k){ if('_'==k){ return } tmp.push(data[k]) })\n return act.b(tmp);\n }\n if(act.name){ return act.f(data) }\n act.c((act.data = data).auth);\n }\n act.b = function(list){\n var get = (act.list = (act.list||[]).concat(list||[])).shift();\n if(u === get){\n if(act.name){ return act.err('Your user account is not published for dApps to access, please consider syncing it online, or allowing local access by adding your device as a peer.') }\n if(alias && tries--){\n root.get('~@'+alias).once(act.a);\n return;\n }\n return act.err('Wrong user or password.') \n }\n root.get(get).once(act.a);\n }\n act.c = function(auth){\n if(u === auth){ return act.b() }\n if('string' == typeof auth){ return act.c(obj_ify(auth)) } // in case of legacy\n SEA.work(pass, (act.auth = auth).s, act.d, act.enc); // the proof of work is evidence that we've spent some time/effort trying to log in, this slows brute force.\n }\n act.d = function(proof){\n SEA.decrypt(act.auth.ek, proof, act.e, act.enc);\n }\n act.e = function(half){\n if(u === half){\n if(!act.enc){ // try old format\n act.enc = {encode: 'utf8'};\n return act.c(act.auth);\n } act.enc = null; // end backwards\n return act.b();\n }\n act.half = half;\n act.f(act.data);\n }\n act.f = function(pair){\n var half = act.half || {}, data = act.data || {};\n act.g(act.lol = {pub: pair.pub || data.pub, epub: pair.epub || data.epub, priv: pair.priv || half.priv, epriv: pair.epriv || half.epriv});\n }\n act.g = function(pair){\n if(!pair || !pair.pub || !pair.epub){ return act.b() }\n act.pair = pair;\n var user = (root._).user, at = (user._);\n var tmp = at.tag;\n var upt = at.opt;\n at = user._ = root.get('~'+pair.pub)._;\n at.opt = upt;\n // add our credentials in-memory only to our root user instance\n user.is = {pub: pair.pub, epub: pair.epub, alias: alias || pair.pub};\n at.sea = act.pair;\n cat.ing = false;\n try{if(pass && u == (obj_ify(cat.root.graph['~'+pair.pub].auth)||'')[':']){ opt.shuffle = opt.change = pass; } }catch(e){} // migrate UTF8 & Shuffle!\n opt.change? act.z() : (cb || noop)(at);\n if(SEA.window && ((gun.back('user')._).opt||opt).remember){\n // TODO: this needs to be modular.\n try{var sS = {};\n sS = window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n sS.recall = true;\n sS.pair = JSON.stringify(pair); // auth using pair is more reliable than alias/pass\n }catch(e){}\n }\n try{\n if(root._.tag.auth){ // auth handle might not be registered yet\n (root._).on('auth', at) // TODO: Deprecate this, emit on user instead! Update docs when you do.\n } else { setTimeout(function(){ (root._).on('auth', at) },1) } // if not, hackily add a timeout.\n //at.on('auth', at) // Arrgh, this doesn't work without event \"merge\" code, but \"merge\" code causes stack overflow and crashes after logging in & trying to write data.\n }catch(e){\n Gun.log(\"Your 'auth' callback crashed with:\", e);\n }\n }\n act.h = function(data){\n if(!data){ return act.b() }\n alias = data.alias\n if(!alias)\n alias = data.alias = \"~\" + pair.pub \n if(!data.auth){\n return act.g(pair);\n }\n pair = null;\n act.c((act.data = data).auth);\n }\n act.z = function(){\n // password update so encrypt private key using new pwd + salt\n act.salt = String.random(64); // pseudo-random\n SEA.work(opt.change, act.salt, act.y);\n }\n act.y = function(proof){\n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, proof, act.x, {raw:1});\n }\n act.x = function(auth){\n act.w(JSON.stringify({ek: auth, s: act.salt}));\n }\n act.w = function(auth){\n if(opt.shuffle){ // delete in future!\n console.log('migrate core account from UTF8 & shuffle');\n var tmp = {}; Object.keys(act.data).forEach(function(k){ tmp[k] = act.data[k] });\n delete tmp._;\n tmp.auth = auth;\n root.get('~'+act.pair.pub).put(tmp);\n } // end delete\n root.get('~'+act.pair.pub).get('auth').put(auth, cb || noop);\n }\n act.err = function(e){\n var ack = {err: Gun.log(e || 'User cannot be found!')};\n cat.ing = false;\n (cb || noop)(ack);\n }\n act.plugin = function(name){\n if(!(act.name = name)){ return act.err() }\n var tmp = [name];\n if('~' !== name[0]){\n tmp[1] = '~'+name;\n tmp[2] = '~@'+name;\n }\n act.b(tmp);\n }\n if(pair){\n if(pair.priv && pair.epriv)\n act.g(pair);\n else\n root.get('~'+pair.pub).once(act.h);\n } else\n if(alias){\n root.get('~@'+alias).once(act.a);\n } else\n if(!alias && !pass){\n SEA.name(act.plugin);\n }\n return gun;\n }\n function obj_ify(o){\n if('string' != typeof o){ return o }\n try{o = JSON.parse(o);\n }catch(e){o={}};\n return o;\n }\n })(USE, './auth');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN;\n User.prototype.recall = function(opt, cb){\n var gun = this, root = gun.back(-1), tmp;\n opt = opt || {};\n if(opt && opt.sessionStorage){\n if(SEA.window){\n try{\n var sS = {};\n sS = window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n if(sS){\n (root._).opt.remember = true;\n ((gun.back('user')._).opt||opt).remember = true;\n if(sS.recall || sS.pair) root.user().auth(JSON.parse(sS.pair), cb); // pair is more reliable than alias/pass\n }\n }catch(e){}\n }\n return gun;\n }\n /*\n TODO: copy mhelander's expiry code back in.\n Although, we should check with community,\n should expiry be core or a plugin?\n */\n return gun;\n }\n })(USE, './recall');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n User.prototype.pair = function(){\n var user = this, proxy; // undeprecated, hiding with proxies.\n try{ proxy = new Proxy({DANGER:'\\u2620'}, {get: function(t,p,r){\n if(!user.is || !(user._||'').sea){ return }\n return user._.sea[p];\n }})}catch(e){}\n return proxy;\n }\n // If authenticated user wants to delete his/her account, let's support it!\n User.prototype.delete = async function(alias, pass, cb){\n console.log(\"user.delete() IS DEPRECATED AND WILL BE MOVED TO A MODULE!!!\");\n var gun = this, root = gun.back(-1), user = gun.back('user');\n try {\n user.auth(alias, pass, function(ack){\n var pub = (user.is||{}).pub;\n // Delete user data\n user.map().once(function(){ this.put(null) });\n // Wipe user data from memory\n user.leave();\n (cb || noop)({ok: 0});\n });\n } catch (e) {\n Gun.log('User.delete failed! Error:', e);\n }\n return gun;\n }\n User.prototype.alive = async function(){\n console.log(\"user.alive() IS DEPRECATED!!!\");\n const gunRoot = this.back(-1)\n try {\n // All is good. Should we do something more with actual recalled data?\n await authRecall(gunRoot)\n return gunRoot._.user._\n } catch (e) {\n const err = 'No session!'\n Gun.log(err)\n throw { err }\n }\n }\n User.prototype.trust = async function(user){\n console.log(\"`.trust` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n // TODO: BUG!!! SEA `node` read listener needs to be async, which means core needs to be async too.\n //gun.get('alice').get('age').trust(bob);\n if (Gun.is(user)) {\n user.get('pub').get((ctx, ev) => {\n console.log(ctx, ev)\n })\n }\n user.get('trust').get(path).put(theirPubkey);\n\n // do a lookup on this gun chain directly (that gets bob's copy of the data)\n // do a lookup on the metadata trust table for this path (that gets all the pubkeys allowed to write on this path)\n // do a lookup on each of those pubKeys ON the path (to get the collab data \"layers\")\n // THEN you perform Jachen's mix operation\n // and return the result of that to...\n }\n User.prototype.grant = function(to, cb){\n console.log(\"`.grant` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user._.sea, path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('grant').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('grant').get(pair.pub).get(path).put(enc);\n }\n var pub = to.get('pub').then();\n var epub = to.get('epub').then();\n pub = await pub; epub = await epub;\n var dh = await SEA.secret(epub, pair);\n enc = await SEA.encrypt(sec, dh);\n user.get('grant').get(pub).get(path).put(enc, cb);\n }());\n return gun;\n }\n User.prototype.secret = function(data, cb){\n console.log(\"`.secret` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user.pair(), path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('trust').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('trust').get(pair.pub).get(path).put(enc);\n }\n enc = await SEA.encrypt(data, sec);\n gun.put(enc, cb);\n }());\n return gun;\n }\n\n /**\n * returns the decrypted value, encrypted by secret\n * @returns {Promise}\n // Mark needs to review 1st before officially supported\n User.prototype.decrypt = function(cb) {\n let gun = this,\n path = ''\n gun.back(function(at) {\n if (at.is) {\n return\n }\n path += at.get || ''\n })\n return gun\n .then(async data => {\n if (data == null) {\n return\n }\n const user = gun.back(-1).user()\n const pair = user.pair()\n let sec = await user\n .get('trust')\n .get(pair.pub)\n .get(path)\n sec = await SEA.decrypt(sec, pair)\n if (!sec) {\n return data\n }\n let decrypted = await SEA.decrypt(data, sec)\n return decrypted\n })\n .then(res => {\n cb && cb(res)\n return res\n })\n }\n */\n module.exports = User\n })(USE, './share');\n\n ;USE(function(module){\n var SEA = USE('./sea'), S = USE('./settings'), noop = function() {}, u;\n var Gun = (''+u != typeof window)? (window.Gun||{on:noop}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n // After we have a GUN extension to make user registration/login easy, we then need to handle everything else.\n\n // We do this with a GUN adapter, we first listen to when a gun instance is created (and when its options change)\n Gun.on('opt', function(at){\n if(!at.sea){ // only add SEA once per instance, on the \"at\" context.\n at.sea = {own: {}};\n at.on('put', check, at); // SEA now runs its firewall on HAM diffs, not all i/o.\n }\n this.to.next(at); // make sure to call the \"next\" middleware adapter.\n });\n\n // Alright, this next adapter gets run at the per node level in the graph database.\n // correction: 2020 it gets run on each key/value pair in a node upon a HAM diff.\n // This will let us verify that every property on a node has a value signed by a public key we trust.\n // If the signature does not match, the data is just `undefined` so it doesn't get passed on.\n // If it does match, then we transform the in-memory \"view\" of the data into its plain value (without the signature).\n // Now NOTE! Some data is \"system\" data, not user data. Example: List of public keys, aliases, etc.\n // This data is self-enforced (the value can only match its ID), but that is handled in the `security` function.\n // From the self-enforced data, we can see all the edges in the graph that belong to a public key.\n // Example: ~ASDF is the ID of a node with ASDF as its public key, signed alias and salt, and\n // its encrypted private key, but it might also have other signed values on it like `profile = ` edge.\n // Using that directed edge's ID, we can then track (in memory) which IDs belong to which keys.\n // Here is a problem: Multiple public keys can \"claim\" any node's ID, so this is dangerous!\n // This means we should ONLY trust our \"friends\" (our key ring) public keys, not any ones.\n // I have not yet added that to SEA yet in this alpha release. That is coming soon, but beware in the meanwhile!\n\n function check(msg){ // REVISE / IMPROVE, NO NEED TO PASS MSG/EVE EACH SUB?\n var eve = this, at = eve.as, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n if(!soul || !key){ return }\n if((msg._||'').faith && (at.opt||'').faith && 'function' == typeof msg._){\n SEA.opt.pack(put, function(raw){\n SEA.verify(raw, false, function(data){ // this is synchronous if false\n put['='] = SEA.opt.unpack(data);\n eve.to.next(msg);\n })})\n return \n }\n var no = function(why){ at.on('in', {'@': id, err: msg.err = why}) }; // exploit internal relay stun for now, maybe violates spec, but testing for now. // Note: this may be only the sharded message, not original batch.\n //var no = function(why){ msg.ack(why) };\n (msg._||'').DBG && ((msg._||'').DBG.c = +new Date);\n if(0 <= soul.indexOf(' {\n if (certificate.m && certificate.s && certificant && pub)\n // now verify certificate\n return SEA.verify(certificate, pub, data => { // check if \"pub\" (of the graph owner) really issued this cert\n if (u !== data && u !== data.e && msg.put['>'] && msg.put['>'] > parseFloat(data.e)) return no(\"Certificate expired.\") // certificate expired\n // \"data.c\" = a list of certificants/certified users\n // \"data.w\" = lex WRITE permission, in the future, there will be \"data.r\" which means lex READ permission\n if (u !== data && data.c && data.w && (data.c === certificant || data.c.indexOf('*' || certificant) > -1)) {\n // ok, now \"certificant\" is in the \"certificants\" list, but is \"path\" allowed? Check path\n let path = soul.indexOf('/') > -1 ? soul.replace(soul.substring(0, soul.indexOf('/') + 1), '') : ''\n String.match = String.match || Gun.text.match\n const w = Array.isArray(data.w) ? data.w : typeof data.w === 'object' || typeof data.w === 'string' ? [data.w] : []\n for (const lex of w) {\n if ((String.match(path, lex['#']) && String.match(key, lex['.'])) || (!lex['.'] && String.match(path, lex['#'])) || (!lex['#'] && String.match(key, lex['.'])) || String.match((path ? path + '/' + key : key), lex['#'] || lex)) {\n // is Certificant forced to present in Path\n if (lex['+'] && lex['+'].indexOf('*') > -1 && path && path.indexOf(certificant) == -1 && key.indexOf(certificant) == -1) return no(`Path \"${path}\" or key \"${key}\" must contain string \"${certificant}\".`)\n // path is allowed, but is there any WRITE block? Check it out\n if (data.wb && (typeof data.wb === 'string' || ((data.wb || {})['#']))) { // \"data.wb\" = path to the WRITE block\n var root = eve.as.root.$.back(-1)\n if (typeof data.wb === 'string' && '~' !== data.wb.slice(0, 1)) root = root.get('~' + pub)\n return root.get(data.wb).get(certificant).once(value => { // TODO: INTENT TO DEPRECATE.\n if (value && (value === 1 || value === true)) return no(`Certificant ${certificant} blocked.`)\n return cb(data)\n })\n }\n return cb(data)\n }\n }\n return no(\"Certificate verification fail.\")\n }\n })\n return\n }\n \n if ('pub' === key && '~' + pub === soul) {\n if (val === pub) return eve.to.next(msg) // the account MUST match `pub` property that equals the ID of the public key.\n return no(\"Account not same!\")\n }\n\n if ((tmp = user.is) && tmp.pub && !raw['*'] && !raw['+'] && (pub === tmp.pub || (pub !== tmp.pub && ((msg._.msg || {}).opt || {}).cert))){\n SEA.opt.pack(msg.put, packed => {\n SEA.sign(packed, (user._).sea, async function(data) {\n if (u === data) return no(SEA.err || 'Signature fail.')\n msg.put[':'] = {':': tmp = SEA.opt.unpack(data.m), '~': data.s}\n msg.put['='] = tmp\n \n // if writing to own graph, just allow it\n if (pub === user.is.pub) {\n if (tmp = link_is(val)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n }\n \n // if writing to other's graph, check if cert exists then try to inject cert into put, also inject self pub so that everyone can verify the put\n if (pub !== user.is.pub && ((msg._.msg || {}).opt || {}).cert) {\n const cert = await S.parse(msg._.msg.opt.cert)\n // even if cert exists, we must verify it\n if (cert && cert.m && cert.s)\n verify(cert, user.is.pub, _ => {\n msg.put[':']['+'] = cert // '+' is a certificate\n msg.put[':']['*'] = user.is.pub // '*' is pub of the user who puts\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n })\n }\n }, {raw: 1})\n })\n return;\n }\n\n SEA.opt.pack(msg.put, packed => {\n SEA.verify(packed, raw['*'] || pub, function(data){ var tmp;\n data = SEA.opt.unpack(data);\n if (u === data) return no(\"Unverified data.\") // make sure the signature matches the account it claims to be on. // reject any updates that are signed with a mismatched account.\n if ((tmp = link_is(data)) && pub === SEA.opt.pub(tmp)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n \n // check if cert ('+') and putter's pub ('*') exist\n if (raw['+'] && raw['+']['m'] && raw['+']['s'] && raw['*'])\n // now verify certificate\n verify(raw['+'], raw['*'], _ => {\n msg.put['='] = data;\n return eve.to.next(msg);\n })\n else {\n msg.put['='] = data;\n return eve.to.next(msg);\n }\n });\n })\n return\n };\n check.any = function(eve, msg, val, key, soul, at, no, user){ var tmp, pub;\n if(at.opt.secure){ return no(\"Soul missing public key at '\" + key + \"'.\") }\n // TODO: Ask community if should auto-sign non user-graph data.\n at.on('secure', function(msg){ this.off();\n if(!at.opt.secure){ return eve.to.next(msg) }\n no(\"Data cannot be changed.\");\n }).on.on('secure', msg);\n return;\n }\n\n var valid = Gun.valid, link_is = function(d,l){ return 'string' == typeof (l = valid(d)) && l }, state_ify = (Gun.state||'').ify;\n\n var pubcut = /[^\\w_-]/; // anything not alphanumeric or _ -\n SEA.opt.pub = function(s){\n if(!s){ return }\n s = s.split('~');\n if(!s || !(s = s[1])){ return }\n s = s.split(pubcut).slice(0,2);\n if(!s || 2 != s.length){ return }\n if('@' === (s[0]||'')[0]){ return }\n s = s.slice(0,2).join('.');\n return s;\n }\n SEA.opt.stringy = function(t){\n // TODO: encrypt etc. need to check string primitive. Make as breaking change.\n }\n SEA.opt.pack = function(d,cb,k, n,s){ var tmp, f; // pack for verifying\n if(SEA.opt.check(d)){ return cb(d) }\n if(d && d['#'] && d['.'] && d['>']){ tmp = d[':']; f = 1 }\n JSON.parseAsync(f? tmp : d, function(err, meta){\n var sig = ((u !== (meta||'')[':']) && (meta||'')['~']); // or just ~ check?\n if(!sig){ cb(d); return }\n cb({m: {'#':s||d['#'],'.':k||d['.'],':':(meta||'')[':'],'>':d['>']||Gun.state.is(n, k)}, s: sig});\n });\n }\n var O = SEA.opt;\n SEA.opt.unpack = function(d, k, n){ var tmp;\n if(u === d){ return }\n if(d && (u !== (tmp = d[':']))){ return tmp }\n k = k || O.fall_key; if(!n && O.fall_val){ n = {}; n[k] = O.fall_val }\n if(!k || !n){ return }\n if(d === n[k]){ return d }\n if(!SEA.opt.check(n[k])){ return d }\n var soul = (n && n._ && n._['#']) || O.fall_soul, s = Gun.state.is(n, k) || O.fall_state;\n if(d && 4 === d.length && soul === d[0] && k === d[1] && fl(s) === fl(d[3])){\n return d[2];\n }\n if(s < SEA.opt.shuffle_attack){\n return d;\n }\n }\n SEA.opt.shuffle_attack = 1546329600000; // Jan 1, 2019\n var fl = Math.floor; // TODO: Still need to fix inconsistent state issue.\n // TODO: Potential bug? If pub/priv key starts with `-`? IDK how possible.\n\n })(USE, './index');\n}());\n","// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n",";(function(){\n// JSON: JavaScript Object Notation\n// YSON: Yielding javaScript Object Notation\nvar yson = {}, u, sI = setTimeout.turn || (typeof setImmediate != ''+u && setImmediate) || setTimeout;\n\nyson.parseAsync = function(text, done, revive, M){\n\tif('string' != typeof text){ try{ done(u,JSON.parse(text)) }catch(e){ done(e) } return }\n\tvar ctx = {i: 0, text: text, done: done, l: text.length, up: []};\n\t//M = 1024 * 1024 * 100;\n\t//M = M || 1024 * 64;\n\tM = M || 1024 * 32;\n\tparse();\n\tfunction parse(){\n\t\t//var S = +new Date;\n\t\tvar s = ctx.text;\n\t\tvar i = ctx.i, l = ctx.l, j = 0;\n\t\tvar w = ctx.w, b, tmp;\n\t\twhile(j++ < M){\n\t\t\tvar c = s[i++];\n\t\t\tif(i > l){\n\t\t\t\tctx.end = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(w){\n\t\t\t\ti = s.indexOf('\"', i-1); c = s[i];\n\t\t\t\ttmp = 0; while('\\\\' == s[i-(++tmp)]){}; tmp = !(tmp % 2);//tmp = ('\\\\' == s[i-1]); // json is stupid\n\t\t\t\tb = b || tmp;\n\t\t\t\tif('\"' == c && !tmp){\n\t\t\t\t\tw = u;\n\t\t\t\t\ttmp = ctx.s;\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\ttmp = s.slice(ctx.sl, i);\n\t\t\t\t\t\tif(b || (1+tmp.indexOf('\\\\'))){ tmp = JSON.parse('\"'+tmp+'\"') } // escape + unicode :( handling\n\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\tctx.at.push(ctx.s = tmp);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(!ctx.at){ ctx.end = j = M; tmp = u }\n\t\t\t\t\t\t\t(ctx.at||{})[ctx.s] = ctx.s = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.s = u;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.s = s.slice(ctx.sl, i);\n\t\t\t\t\t\tif(b || (1+ctx.s.indexOf('\\\\'))){ ctx.s = JSON.parse('\"'+ctx.s+'\"'); } // escape + unicode :( handling\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = b = u;\n\t\t\t\t}\n\t\t\t\t++i;\n\t\t\t} else {\n\t\t\t\tswitch(c){\n\t\t\t\tcase '\"':\n\t\t\t\t\tctx.sl = i;\n\t\t\t\t\tw = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ':':\n\t\t\t\t\tctx.ai = i;\n\t\t\t\t\tctx.a = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ',':\n\t\t\t\t\tif(ctx.a || ctx.at instanceof Array){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.at[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\tctx.a = true;\n\t\t\t\t\t\tctx.ai = i;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '{':\n\t\t\t\t\tctx.up.push(ctx.at||(ctx.at = {}));\n\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\tctx.at.push(ctx.at = {});\n\t\t\t\t\t} else\n\t\t\t\t\tif(u !== (tmp = ctx.s)){\n\t\t\t\t\t\tctx.at[tmp] = ctx.at = {};\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tbreak;\n\t\t\t\tcase '}':\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif(!ctx.at){ ctx.end = j = M; tmp = u }\n\t\t\t\t\t\t\t\t\t(ctx.at||{})[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tctx.at = ctx.up.pop();\n\t\t\t\t\tbreak;\n\t\t\t\tcase '[':\n\t\t\t\t\tif(u !== (tmp = ctx.s)){\n\t\t\t\t\t\tctx.up.push(ctx.at);\n\t\t\t\t\t\tctx.at[tmp] = ctx.at = [];\n\t\t\t\t\t} else\n\t\t\t\t\tif(!ctx.at){\n\t\t\t\t\t\tctx.up.push(ctx.at = []);\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = true;\n\t\t\t\t\tctx.ai = i;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ']':\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.at[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tctx.at = ctx.up.pop();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tctx.s = u;\n\t\tctx.i = i;\n\t\tctx.w = w;\n\t\tif(ctx.end){\n\t\t\ttmp = ctx.at;\n\t\t\tif(u === tmp){\n\t\t\t\ttry{ tmp = JSON.parse(text)\n\t\t\t\t}catch(e){ return ctx.done(e) }\n\t\t\t}\n\t\t\tctx.done(u, tmp);\n\t\t} else {\n\t\t\tsI(parse);\n\t\t}\n\t}\n}\nfunction value(s){\n\tvar n = parseFloat(s);\n\tif(!isNaN(n)){\n\t\treturn n;\n\t}\n\ts = s.trim();\n\tif('true' == s){\n\t\treturn true;\n\t}\n\tif('false' == s){\n\t\treturn false;\n\t}\n\tif('null' == s){\n\t\treturn null;\n\t}\n}\n\nyson.stringifyAsync = function(data, done, replacer, space, ctx){\n\t//try{done(u, JSON.stringify(data, replacer, space))}catch(e){done(e)}return;\n\tctx = ctx || {};\n\tctx.text = ctx.text || \"\";\n\tctx.up = [ctx.at = {d: data}];\n\tctx.done = done;\n\tctx.i = 0;\n\tvar j = 0;\n\tify();\n\tfunction ify(){\n\t\tvar at = ctx.at, data = at.d, add = '', tmp;\n\t\tif(at.i && (at.i - at.j) > 0){ add += ',' }\n\t\tif(u !== (tmp = at.k)){ add += JSON.stringify(tmp) + ':' } //'\"'+tmp+'\":' } // only if backslash\n\t\tswitch(typeof data){\n\t\tcase 'boolean':\n\t\t\tadd += ''+data;\n\t\t\tbreak;\n\t\tcase 'string':\n\t\t\tadd += JSON.stringify(data); //ctx.text += '\"'+data+'\"';//JSON.stringify(data); // only if backslash\n\t\t\tbreak;\n\t\tcase 'number':\n\t\t\tadd += (isNaN(data)? 'null' : data);\n\t\t\tbreak;\n\t\tcase 'object':\n\t\t\tif(!data){\n\t\t\t\tadd += 'null';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(data instanceof Array){\t\n\t\t\t\tadd += '[';\n\t\t\t\tat = {i: -1, as: data, up: at, j: 0};\n\t\t\t\tat.l = data.length;\n\t\t\t\tctx.up.push(ctx.at = at);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif('function' != typeof (data||'').toJSON){\n\t\t\t\tadd += '{';\n\t\t\t\tat = {i: -1, ok: Object.keys(data).sort(), as: data, up: at, j: 0};\n\t\t\t\tat.l = at.ok.length;\n\t\t\t\tctx.up.push(ctx.at = at);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(tmp = data.toJSON()){\n\t\t\t\tadd += tmp;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// let this & below pass into default case...\n\t\tcase 'function':\n\t\t\tif(at.as instanceof Array){\n\t\t\t\tadd += 'null';\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault: // handle wrongly added leading `,` if previous item not JSON-able.\n\t\t\tadd = '';\n\t\t\tat.j++;\n\t\t}\n\t\tctx.text += add;\n\t\twhile(1+at.i >= at.l){\n\t\t\tctx.text += (at.ok? '}' : ']');\n\t\t\tat = ctx.at = at.up;\n\t\t}\n\t\tif(++at.i < at.l){\n\t\t\tif(tmp = at.ok){\n\t\t\t\tat.d = at.as[at.k = tmp[at.i]];\n\t\t\t} else {\n\t\t\t\tat.d = at.as[at.i];\n\t\t\t}\n\t\t\tif(++j < 9){ return ify() } else { j = 0 }\n\t\t\tsI(ify);\n\t\t\treturn;\n\t\t}\n\t\tctx.done(u, ctx.text);\n\t}\n}\nif(typeof window != ''+u){ window.YSON = yson }\ntry{ if(typeof module != ''+u){ module.exports = yson } }catch(e){}\nif(typeof JSON != ''+u){\n\tJSON.parseAsync = yson.parseAsync;\n\tJSON.stringifyAsync = yson.stringifyAsync;\n}\n\n}());",";(function(){\n\n\tfunction Radix(){\n\t\tvar radix = function(key, val, t){\n\t\t\tradix.unit = 0;\n\t\t\tif(!t && u !== val){ \n\t\t\t\tradix.last = (''+key < radix.last)? radix.last : ''+key;\n\t\t\t\tdelete (radix.$||{})[_];\n\t\t\t}\n\t\t\tt = t || radix.$ || (radix.$ = {});\n\t\t\tif(!key && Object.keys(t).length){ return t }\n\t\t\tkey = ''+key;\n\t\t\tvar i = 0, l = key.length-1, k = key[i], at, tmp;\n\t\t\twhile(!(at = t[k]) && i < l){\n\t\t\t\tk += key[++i];\n\t\t\t}\n\t\t\tif(!at){\n\t\t\t\tif(!each(t, function(r, s){\n\t\t\t\t\tvar ii = 0, kk = '';\n\t\t\t\t\tif((s||'').length){ while(s[ii] == key[ii]){\n\t\t\t\t\t\tkk += s[ii++];\n\t\t\t\t\t} }\n\t\t\t\t\tif(kk){\n\t\t\t\t\t\tif(u === val){\n\t\t\t\t\t\t\tif(ii <= l){ return }\n\t\t\t\t\t\t\t(tmp || (tmp = {}))[s.slice(ii)] = r;\n\t\t\t\t\t\t\t//(tmp[_] = function $(){ $.sort = Object.keys(tmp).sort(); return $ }()); // get rid of this one, cause it is on read?\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar __ = {};\n\t\t\t\t\t\t__[s.slice(ii)] = r;\n\t\t\t\t\t\tii = key.slice(ii);\n\t\t\t\t\t\t('' === ii)? (__[''] = val) : ((__[ii] = {})[''] = val);\n\t\t\t\t\t\t//(__[_] = function $(){ $.sort = Object.keys(__).sort(); return $ }());\n\t\t\t\t\t\tt[kk] = __;\n\t\t\t\t\t\tif(Radix.debug && 'undefined' === ''+kk){ console.log(0, kk); debugger }\n\t\t\t\t\t\tdelete t[s];\n\t\t\t\t\t\t//(t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }());\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t})){\n\t\t\t\t\tif(u === val){ return; }\n\t\t\t\t\t(t[k] || (t[k] = {}))[''] = val;\n\t\t\t\t\tif(Radix.debug && 'undefined' === ''+k){ console.log(1, k); debugger }\n\t\t\t\t\t//(t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }());\n\t\t\t\t}\n\t\t\t\tif(u === val){\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t} else \n\t\t\tif(i == l){\n\t\t\t\t//if(u === val){ return (u === (tmp = at['']))? at : tmp } // THIS CODE IS CORRECT, below is\n\t\t\t\tif(u === val){ return (u === (tmp = at['']))? at : ((radix.unit = 1) && tmp) } // temporary help??\n\t\t\t\tat[''] = val;\n\t\t\t\t//(at[_] = function $(){ $.sort = Object.keys(at).sort(); return $ }());\n\t\t\t} else {\n\t\t\t\tif(u !== val){ delete at[_] }\n\t\t\t\t//at && (at[_] = function $(){ $.sort = Object.keys(at).sort(); return $ }());\n\t\t\t\treturn radix(key.slice(++i), val, at || (at = {}));\n\t\t\t}\n\t\t}\n\t\treturn radix;\n\t};\n\n\tRadix.map = function rap(radix, cb, opt, pre){\n\t\ttry {\n\t\t\tpre = pre || []; // TODO: BUG: most out-of-memory crashes come from here.\n\t\t\tvar t = ('function' == typeof radix)? radix.$ || {} : radix;\n\t\t\t//!opt && console.log(\"WHAT IS T?\", JSON.stringify(t).length);\n\t\t\tif(!t){ return }\n\t\t\tif('string' == typeof t){ if(Radix.debug){ throw ['BUG:', radix, cb, opt, pre] } return; }\n\t\t\tvar keys = (t[_]||no).sort || (t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }()).sort, rev; // ONLY 17% of ops are pre-sorted!\n\t\t\t//var keys = Object.keys(t).sort();\n\t\t\topt = (true === opt)? {branch: true} : (opt || {});\n\t\t\tif(rev = opt.reverse){ keys = keys.slice(0).reverse() }\n\t\t\tvar start = opt.start, end = opt.end, END = '\\uffff';\n\t\t\tvar i = 0, l = keys.length;\n\t\t\tfor(;i < l; i++){ var key = keys[i], tree = t[key], tmp, p, pt;\n\t\t\t\tif(!tree || '' === key || _ === key || 'undefined' === key){ continue }\n\t\t\t\tp = pre.slice(0); p.push(key);\n\t\t\t\tpt = p.join('');\n\t\t\t\tif(u !== start && pt < (start||'').slice(0,pt.length)){ continue }\n\t\t\t\tif(u !== end && (end || END) < pt){ continue }\n\t\t\t\tif(rev){ // children must be checked first when going in reverse.\n\t\t\t\t\ttmp = rap(tree, cb, opt, p);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tif(u !== (tmp = tree[''])){\n\t\t\t\t\tvar yes = 1;\n\t\t\t\t\tif(u !== start && pt < (start||'')){ yes = 0 }\n\t\t\t\t\tif(u !== end && pt > (end || END)){ yes = 0 }\n\t\t\t\t\tif(yes){\n\t\t\t\t\t\ttmp = cb(tmp, pt, key, pre);\n\t\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\tif(opt.branch){\n\t\t\t\t\ttmp = cb(u, pt, key, pre);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tpre = p;\n\t\t\t\tif(!rev){\n\t\t\t\t\ttmp = rap(tree, cb, opt, pre);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tpre.pop();\n\t\t\t}\n\t\t} catch (e) { console.error(e); }\n\t};\n\n\tif(typeof window !== \"undefined\"){\n\t window.Radix = Radix;\n\t} else { \n\t\ttry{ module.exports = Radix }catch(e){}\n\t}\n\tvar each = Radix.object = function(o, f, r){\n\t\tfor(var k in o){\n\t\t\tif(!o.hasOwnProperty(k)){ continue }\n\t\t\tif((r = f(o[k], k)) !== u){ return r }\n\t\t}\n\t}, no = {}, u;\n\tvar _ = String.fromCharCode(24);\n\t\n}());\n",";(function(){\n\n\tfunction Radisk(opt){\n\n\t\topt = opt || {};\n\t\topt.log = opt.log || console.log;\n\t\topt.file = String(opt.file || 'radata');\n\t\tvar has = (Radisk.has || (Radisk.has = {}))[opt.file];\n\t\tif(has){ return has }\n\n\t\topt.max = opt.max || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;\n\t\topt.until = opt.until || opt.wait || 250;\n\t\topt.batch = opt.batch || (10 * 1000);\n\t\topt.chunk = opt.chunk || (1024 * 1024 * 1); // 1MB\n\t\topt.code = opt.code || {};\n\t\topt.code.from = opt.code.from || '!';\n\t\topt.jsonify = true;\n\n\n\t\tfunction ename(t){ return encodeURIComponent(t).replace(/\\*/g, '%2A') } // TODO: Hash this also, but allow migration!\n\t\tfunction atomic(v){ return u !== v && (!v || 'object' != typeof v) }\n\t\tvar timediate = (''+u === typeof setImmediate)? setTimeout : setImmediate;\n\t\tvar puff = setTimeout.turn || timediate, u;\n\t\tvar map = Radix.object;\n\t\tvar ST = 0;\n\n\t\tif(!opt.store){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `opt.store` interface with `{get: fn, put: fn (, list: fn)}`!\");\n\t\t}\n\t\tif(!opt.store.put){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `store.put` interface with `(file, data, cb)`!\");\n\t\t}\n\t\tif(!opt.store.get){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `store.get` interface with `(file, cb)`!\");\n\t\t}\n\t\tif(!opt.store.list){\n\t\t\t//opt.log(\"WARNING: `store.list` interface might be needed!\");\n\t\t}\n\n\t\tif(''+u != typeof require){ require('./yson') }\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\t\t/*\n\t\t\tAny and all storage adapters should...\n\t\t\t1. Because writing to disk takes time, we should batch data to disk. This improves performance, and reduces potential disk corruption.\n\t\t\t2. If a batch exceeds a certain number of writes, we should immediately write to disk when physically possible. This caps total performance, but reduces potential loss.\n\t\t*/\n\t\tvar r = function(key, data, cb, tag, DBG){\n\t\t\tif('function' === typeof data){\n\t\t\t\tvar o = cb || {};\n\t\t\t\tcb = data;\n\t\t\t\tr.read(key, cb, o, DBG || tag);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//var tmp = (tmp = r.batch = r.batch || {})[key] = tmp[key] || {};\n\t\t\t//var tmp = (tmp = r.batch = r.batch || {})[key] = data;\n\t\t\tr.save(key, data, cb, tag, DBG);\n\t\t}\n\t\tr.save = function(key, data, cb, tag, DBG){\n\t\t\tvar s = {key: key}, tags, f, d, q;\n\t\t\ts.find = function(file){ var tmp;\n\t\t\t\ts.file = file || (file = opt.code.from);\n\t\t\t\tDBG && (DBG = DBG[file] = DBG[file] || {});\n\t\t\t\tDBG && (DBG.sf = DBG.sf || +new Date);\n\t\t\t\t//console.only.i && console.log('found', file);\n\t\t\t\tif(tmp = r.disk[file]){ s.mix(u, tmp); return }\n\t\t\t\tr.parse(file, s.mix, u, DBG);\n\t\t\t}\n\t\t\ts.mix = function(err, disk){\n\t\t\t\tDBG && (DBG.sml = +new Date);\n\t\t\t\tDBG && (DBG.sm = DBG.sm || +new Date);\n\t\t\t\tif(s.err = err || s.err){ cb(err); return } // TODO: HANDLE BATCH EMIT\n\t\t\t\tvar file = s.file = (disk||'').file || s.file, tmp;\n\t\t\t\tif(!disk && file !== opt.code.from){ // corrupt file?\n\t\t\t\t\tr.find.bad(file); // remove from dir list\n\t\t\t\t\tr.save(key, data, cb, tag); // try again\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t(disk = r.disk[file] || (r.disk[file] = disk || Radix())).file || (disk.file = file);\n\t\t\t\tif(opt.compare){\n\t\t\t\t\tdata = opt.compare(disk(key), data, key, file);\n\t\t\t\t\tif(u === data){ cb(err, -1); return } // TODO: HANDLE BATCH EMIT\n\t\t\t\t}\n\t\t\t\t(s.disk = disk)(key, data);\n\t\t\t\tif(tag){\n\t\t\t\t\t(tmp = (tmp = disk.tags || (disk.tags = {}))[tag] || (tmp[tag] = r.tags[tag] || (r.tags[tag] = {})))[file] || (tmp[file] = r.one[tag] || (r.one[tag] = cb));\n\t\t\t\t\tcb = null;\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.st = DBG.st || +new Date);\n\t\t\t\t//console.only.i && console.log('mix', disk.Q);\n\t\t\t\tif(disk.Q){ cb && disk.Q.push(cb); return } disk.Q = (cb? [cb] : []);\n\t\t\t\tdisk.to = setTimeout(s.write, opt.until);\n\t\t\t}\n\t\t\ts.write = function(){\n\t\t\t\tDBG && (DBG.sto = DBG.sto || +new Date);\n\t\t\t\tvar file = f = s.file, disk = d = s.disk;\n\t\t\t\tq = s.q = disk.Q;\n\t\t\t\ttags = s.tags = disk.tags;\n\t\t\t\tdelete disk.Q;\n\t\t\t\tdelete r.disk[file];\n\t\t\t\tdelete disk.tags;\n\t\t\t\t//console.only.i && console.log('write', file, disk, 'was saving:', key, data);\n\t\t\t\tr.write(file, disk, s.ack, u, DBG);\n\t\t\t}\n\t\t\ts.ack = function(err, ok){\n\t\t\t\tDBG && (DBG.sa = DBG.sa || +new Date);\n\t\t\t\tDBG && (DBG.sal = q.length);\n\t\t\t\tvar ack, tmp;\n\t\t\t\t// TODO!!!! CHANGE THIS INTO PUFF!!!!!!!!!!!!!!!!\n\t\t\t\tfor(var id in r.tags){\n\t\t\t\t\tif(!r.tags.hasOwnProperty(id)){ continue } var tag = r.tags[id];\n\t\t\t\t\tif((tmp = r.disk[f]) && (tmp = tmp.tags) && tmp[tag]){ continue }\n\t\t\t\t\tack = tag[f];\n\t\t\t\t\tdelete tag[f];\n\t\t\t\t\tvar ne; for(var k in tag){ if(tag.hasOwnProperty(k)){ ne = true; break } } // is not empty?\n\t\t\t\t\tif(ne){ continue } //if(!obj_empty(tag)){ continue }\n\t\t\t\t\tdelete r.tags[tag];\n\t\t\t\t\tack && ack(err, ok);\n\t\t\t\t}\n\t\t\t\t!q && (q = '');\n\t\t\t\tvar l = q.length, i = 0;\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\tvar S = +new Date;\n\t\t\t\tfor(;i < l; i++){ (ack = q[i]) && ack(err, ok) }\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad acks', ename(s.file));\n\t\t\t\tconsole.STAT && console.STAT(S, q.length, 'rad acks #', ename(s.file));\n\t\t\t}\n\t\t\tcb || (cb = function(err, ok){ // test delete!\n\t\t\t\tif(!err){ return }\n\t\t\t});\n\t\t\t//console.only.i && console.log('save', key);\n\t\t\tr.find(key, s.find);\n }\n r.disk = {};\n r.one = {};\n r.tags = {};\n\n\t\t/*\n\t\t\tAny storage engine at some point will have to do a read in order to write.\n\t\t\tThis is true of even systems that use an append only log, if they support updates.\n\t\t\tTherefore it is unavoidable that a read will have to happen,\n\t\t\tthe question is just how long you delay it.\n\t\t*/\n\t\tvar RWC = 0;\n\t\tr.write = function(file, rad, cb, o, DBG){\n\t\t\tif(!rad){ cb('No radix!'); return }\n\t\t\to = ('object' == typeof o)? o : {force: o};\n\t\t\tvar f = function Fractal(){}, a, b;\n\t\t\tf.text = '';\n\t\t\tf.file = file = rad.file || (rad.file = file);\n\t\t\tif(!file){ cb('What file?'); return }\n\t\t\tf.write = function(){\n\t\t\t\tvar text = rad.raw = f.text;\n\t\t\t\tr.disk[file = rad.file || f.file || file] = rad;\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.wd = S);\n\t\t\t\t//console.only.i && console.log('add', file);\n\t\t\t\tr.find.add(file, function add(err){\n\t\t\t\t\tDBG && (DBG.wa = +new Date);\n\t\t\t\t\tif(err){ cb(err); return }\n\t\t\t\t\t//console.only.i && console.log('disk', file, text);\n\t\t\t\t\topt.store.put(ename(file), text, function safe(err, ok){\n\t\t\t\t\t\tDBG && (DBG.wp = +new Date);\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, ST = +new Date - S, \"wrote disk\", JSON.stringify(file), ++RWC, 'total all writes.');\n\t\t\t\t\t\t//console.only.i && console.log('done', err, ok || 1, cb);\n\t\t\t\t\t\tcb(err, ok || 1);\n\t\t\t\t\t\tif(!rad.Q){ delete r.disk[file] } // VERY IMPORTANT! Clean up memory, but not if there is already queued writes on it!\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tf.split = function(){\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.wf = S);\n\t\t\t\tf.text = '';\n\t\t\t\tif(!f.count){ f.count = 0;\n\t\t\t\t\tRadix.map(rad, function count(){ f.count++ }); // TODO: Perf? Any faster way to get total length?\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.wfc = f.count);\n\t\t\t\tf.limit = Math.ceil(f.count/2);\n\t\t\t\tvar SC = f.count;\n\t\t\t\tf.count = 0;\n\t\t\t\tDBG && (DBG.wf1 = +new Date);\n\t\t\t\tf.sub = Radix();\n\t\t\t\tRadix.map(rad, f.slice, {reverse: 1}); // IMPORTANT: DO THIS IN REVERSE, SO LAST HALF OF DATA MOVED TO NEW FILE BEFORE DROPPING FROM CURRENT FILE.\n\t\t\t\tDBG && (DBG.wf2 = +new Date);\n\t\t\t\tr.write(f.end, f.sub, f.both, o);\n\t\t\t\tDBG && (DBG.wf3 = +new Date);\n\t\t\t\tf.hub = Radix();\n\t\t\t\tRadix.map(rad, f.stop);\n\t\t\t\tDBG && (DBG.wf4 = +new Date);\n\t\t\t\tr.write(rad.file, f.hub, f.both, o);\n\t\t\t\tDBG && (DBG.wf5 = +new Date);\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad split\", ename(rad.file), SC);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tf.slice = function(val, key){\n\t\t\t\tf.sub(f.end = key, val);\n\t\t\t\tif(f.limit <= (++f.count)){ return true }\n\t\t\t}\n\t\t\tf.stop = function(val, key){\n\t\t\t\tif(key >= f.end){ return true }\n\t\t\t\tf.hub(key, val);\n\t\t\t}\n\t\t\tf.both = function(err, ok){\n\t\t\t\tDBG && (DBG.wfd = +new Date);\n\t\t\t\tif(b){ cb(err || b); return }\n\t\t\t\tif(a){ cb(err, ok); return }\n\t\t\t\ta = true;\n\t\t\t\tb = err;\n\t\t\t}\n\t\t\tf.each = function(val, key, k, pre){\n\t\t\t\tif(u !== val){ f.count++ }\n\t\t\t\tif(opt.max <= (val||'').length){ return cb(\"Data too big!\"), true }\n\t\t\t\tvar enc = Radisk.encode(pre.length) +'#'+ Radisk.encode(k) + (u === val? '' : ':'+ Radisk.encode(val)) +'\\n';\n\t\t\t\tif((opt.chunk < f.text.length + enc.length) && (1 < f.count) && !o.force){\n\t\t\t\t\treturn f.split();\n\t\t\t\t}\n\t\t\t\tf.text += enc;\n\t\t\t}\n\t\t\t//console.only.i && console.log('writing');\n\t\t\tif(opt.jsonify){ r.write.jsonify(f, rad, cb, o, DBG); return } // temporary testing idea\n\t\t\tif(!Radix.map(rad, f.each, true)){ f.write() }\n\t\t}\n\n\t\tr.write.jsonify = function(f, rad, cb, o, DBG){\n\t\t\tvar raw;\n\t\t\tvar S = +new Date;\n\t\t\tDBG && (DBG.w = S);\n\t\t\ttry{raw = JSON.stringify(rad.$);\n\t\t\t}catch(e){ cb(\"Cannot radisk!\"); return }\n\t\t\tDBG && (DBG.ws = +new Date);\n\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad stringified JSON\");\n\t\t\tif(opt.chunk < raw.length && !o.force){\n\t\t\t\tvar c = 0;\n\t\t\t\tRadix.map(rad, function(){\n\t\t\t\t\tif(c++){ return true } // more than 1 item\n\t\t\t\t});\n\t\t\t\tif(c > 1){\n\t\t\t\t\treturn f.split();\n\t\t\t\t}\n\t\t\t}\n\t\t\tf.text = raw;\n\t\t\tf.write();\n\t\t}\n\n\t\tr.range = function(tree, o){\n\t\t\tif(!tree || !o){ return }\n\t\t\tif(u === o.start && u === o.end){ return tree }\n\t\t\tif(atomic(tree)){ return tree }\n\t\t\tvar sub = Radix();\n\t\t\tRadix.map(tree, function(v,k){ sub(k,v) }, o); // ONLY PLACE THAT TAKES TREE, maybe reduce API for better perf?\n\t\t\treturn sub('');\n\t\t}\n\n\t\t;(function(){\n\t\t\tr.read = function(key, cb, o, DBG){\n\t\t\t\to = o || {};\n\t\t\t\tvar g = {key: key};\n\t\t\t\tg.find = function(file){ var tmp;\n\t\t\t\t\tg.file = file || (file = opt.code.from);\n\t\t\t\t\tDBG && (DBG = DBG[file] = DBG[file] || {});\n\t\t\t\t\tDBG && (DBG.rf = DBG.rf || +new Date);\n\t\t\t\t\tif(tmp = r.disk[g.file = file]){ g.check(u, tmp); return }\n\t\t\t\t\tr.parse(file, g.check, u, DBG);\n\t\t\t\t}\n\t\t\t\tg.get = function(err, disk, info){\n\t\t\t\t\tDBG && (DBG.rgl = +new Date);\n\t\t\t\t\tDBG && (DBG.rg = DBG.rg || +new Date);\n\t\t\t\t\tif(g.err = err || g.err){ cb(err); return }\n\t\t\t\t\tvar file = g.file = (disk||'').file || g.file;\n\t\t\t\t\tif(!disk && file !== opt.code.from){ // corrupt file?\n\t\t\t\t\t\tr.find.bad(file); // remove from dir list\n\t\t\t\t\t\tr.read(key, cb, o); // try again\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdisk = r.disk[file] || (r.disk[file] = disk);\n\t\t\t\t\tif(!disk){ cb(file === opt.code.from? u : \"No file!\"); return }\n\t\t\t\t\tdisk.file || (disk.file = file);\n\t\t\t\t\tvar data = r.range(disk(key), o);\n\t\t\t\t\tDBG && (DBG.rr = +new Date);\n\t\t\t\t\to.unit = disk.unit;\n\t\t\t\t\to.chunks = (o.chunks || 0) + 1;\n\t\t\t\t\to.parsed = (o.parsed || 0) + ((info||'').parsed||(o.chunks*opt.chunk));\n\t\t\t\t\to.more = 1;\n\t\t\t\t\to.next = u;\n\t\t\t\t\tRadix.map(r.list, function next(v,f){\n\t\t\t\t\t\tif(!v || file === f){ return }\n\t\t\t\t\t\to.next = f;\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}, o.reverse? {reverse: 1, end: file} : {start: file});\n\t\t\t\t\tDBG && (DBG.rl = +new Date);\n\t\t\t\t\tif(!o.next){ o.more = 0 }\n\t\t\t\t\tif(o.next){\n\t\t\t\t\t\tif(!o.reverse && ((key < o.next && 0 != o.next.indexOf(key)) || (u !== o.end && (o.end || '\\uffff') < o.next))){ o.more = 0 }\n\t\t\t\t\t\tif(o.reverse && ((key > o.next && 0 != key.indexOf(o.next)) || ((u !== o.start && (o.start || '') > o.next && file <= o.start)))){ o.more = 0 }\n\t\t\t\t\t}\n\t\t\t\t\t//console.log(5, process.memoryUsage().heapUsed);\n\t\t\t\t\tif(!o.more){ cb(g.err, data, o); return }\n\t\t\t\t\tif(data){ cb(g.err, data, o) }\n\t\t\t\t\tif(o.parsed >= o.limit){ return }\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tDBG && (DBG.rm = S);\n\t\t\t\t\tvar next = o.next;\n\t\t\t\t\ttimediate(function(){\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad more');\n\t\t\t\t\t\tr.parse(next, g.check);\n\t\t\t\t\t},0);\n\t\t\t\t}\n\t\t\t\tg.check = function(err, disk, info){\n\t\t\t\t\t//console.log(4, process.memoryUsage().heapUsed);\n\t\t\t\t\tg.get(err, disk, info);\n\t\t\t\t\tif(!disk || disk.check){ return } disk.check = 1;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t(info || (info = {})).file || (info.file = g.file);\n\t\t\t\t\tRadix.map(disk, function(val, key){\n\t\t\t\t\t\t// assume in memory for now, since both write/read already call r.find which will init it.\n\t\t\t\t\t\tr.find(key, function(file){\n\t\t\t\t\t\t\tif((file || (file = opt.code.from)) === info.file){ return }\n\t\t\t\t\t\t\tvar id = (''+Math.random()).slice(-3);\n\t\t\t\t\t\t\tpuff(function(){\n\t\t\t\t\t\t\tr.save(key, val, function ack(err, ok){\n\t\t\t\t\t\t\t\tif(err){ r.save(key, val, ack); return } // ad infinitum???\n\t\t\t\t\t\t\t\t// TODO: NOTE!!! Mislocated data could be because of a synchronous `put` from the `g.get(` other than perf shouldn't we do the check first before acking?\n\t\t\t\t\t\t\t\tconsole.STAT && console.STAT(\"MISLOCATED DATA CORRECTED\", id, ename(key), ename(info.file), ename(file));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},0);\n\t\t\t\t\t\t})\n\t\t\t\t\t});\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad check\");\n\t\t\t\t}\n\t\t\t\tr.find(key || (o.reverse? (o.end||'') : (o.start||'')), g.find); \n\t\t\t}\n\t\t\tfunction rev(a,b){ return b }\n\t\t\tvar revo = {reverse: true};\n\t\t}());\n\n\t\t;(function(){\n\t\t\t/*\n\t\t\t\tLet us start by assuming we are the only process that is\n\t\t\t\tchanging the directory or bucket. Not because we do not want\n\t\t\t\tto be multi-process/machine, but because we want to experiment\n\t\t\t\twith how much performance and scale we can get out of only one.\n\t\t\t\tThen we can work on the harder problem of being multi-process.\n\t\t\t*/\n\t\t\tvar RPC = 0;\n\t\t\tvar Q = {}, s = String.fromCharCode(31);\n\t\t\tr.parse = function(file, cb, raw, DBG){ var q;\n\t\t\t\tif(!file){ return cb(); }\n\t\t\t\tif(q = Q[file]){ q.push(cb); return } q = Q[file] = [cb];\n\t\t\t\tvar p = function Parse(){}, info = {file: file};\n\t\t\t\t(p.disk = Radix()).file = file;\n\t\t\t\tp.read = function(err, data){ var tmp;\n\t\t\t\t\tDBG && (DBG.rpg = +new Date);\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'read disk', JSON.stringify(file), ++RPC, 'total all parses.');\n\t\t\t\t\t//console.log(2, process.memoryUsage().heapUsed);\n\t\t\t\t\tif((p.err = err) || (p.not = !data)){\n\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif('string' !== typeof data){\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tif(opt.max <= data.length){\n\t\t\t\t\t\t\t\tp.err = \"Chunk too big!\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata = data.toString(); // If it crashes, it crashes here. How!?? We check size first!\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}catch(e){ p.err = e }\n\t\t\t\t\t\tif(p.err){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tinfo.parsed = data.length;\n\t\t\t\t\tDBG && (DBG.rpl = info.parsed);\n\t\t\t\t\tDBG && (DBG.rpa = q.length);\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tif(!(opt.jsonify || '{' === data[0])){\n\t\t\t\t\t\tp.radec(err, data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tparse(data, function(err, tree){\n\t\t\t\t\t\t//console.log(3, process.memoryUsage().heapUsed);\n\t\t\t\t\t\tif(!err){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.disk.$ = tree;\n\t\t\t\t\t\t\tconsole.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'rad parsed JSON');\n\t\t\t\t\t\t\tDBG && (DBG.rpd = +new Date);\n\t\t\t\t\t\t\tp.map(q, p.ack); // hmmm, v8 profiler can't see into this cause of try/catch?\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif('{' === data[0]){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.err = tmp || \"JSON error!\";\n\t\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.radec(err, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tp.map = function(){ // switch to setTimeout.each now?\n\t\t\t\t\tif(!q || !q.length){ return }\n\t\t\t\t\t//var i = 0, l = q.length, ack;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tvar err = p.err, data = p.not? u : p.disk;\n\t\t\t\t\tvar i = 0, ack; while(i < 9 && (ack = q[i++])){ ack(err, data, info) } // too much?\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad packs', ename(file));\n\t\t\t\t\tconsole.STAT && console.STAT(S, i, 'rad packs #', ename(file)); \n\t\t\t\t\tif(!(q = q.slice(i)).length){ return }\n\t\t\t\t\tpuff(p.map, 0);\n\t\t\t\t}\n\t\t\t\tp.ack = function(cb){\n\t\t\t\t\tif(!cb){ return }\n\t\t\t\t\tif(p.err || p.not){\n\t\t\t\t\t\tcb(p.err, u, info);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcb(u, p.disk, info);\n\t\t\t\t}\n\t\t\t\tp.radec = function(err, data){\n\t\t\t\t\tdelete Q[file];\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tvar tmp = p.split(data), pre = [], i, k, v;\n\t\t\t\t\tif(!tmp || 0 !== tmp[1]){\n\t\t\t\t\t\tp.err = \"File '\"+file+\"' does not have root radix! \";\n\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\treturn; \n\t\t\t\t\t}\n\t\t\t\t\twhile(tmp){\n\t\t\t\t\t\tk = v = u;\n\t\t\t\t\t\ti = tmp[1];\n\t\t\t\t\t\ttmp = p.split(tmp[2])||'';\n\t\t\t\t\t\tif('#' == tmp[0]){\n\t\t\t\t\t\t\tk = tmp[1];\n\t\t\t\t\t\t\tpre = pre.slice(0,i);\n\t\t\t\t\t\t\tif(i <= pre.length){\n\t\t\t\t\t\t\t\tpre.push(k);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmp = p.split(tmp[2])||'';\n\t\t\t\t\t\tif('\\n' == tmp[0]){ continue }\n\t\t\t\t\t\tif('=' == tmp[0] || ':' == tmp[0]){ v = tmp[1] }\n\t\t\t\t\t\tif(u !== k && u !== v){ p.disk(pre.join(''), v) }\n\t\t\t\t\t\ttmp = p.split(tmp[2]);\n\t\t\t\t\t}\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'parsed RAD');\n\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t};\n\t\t\t\tp.split = function(t){\n\t\t\t\t\tif(!t){ return }\n\t\t\t\t\tvar l = [], o = {}, i = -1, a = '', b, c;\n\t\t\t\t\ti = t.indexOf(s);\n\t\t\t\t\tif(!t[i]){ return }\n\t\t\t\t\ta = t.slice(0, i);\n\t\t\t\t\tl[0] = a;\n\t\t\t\t\tl[1] = b = Radisk.decode(t.slice(i), o);\n\t\t\t\t\tl[2] = t.slice(i + o.i);\n\t\t\t\t\treturn l;\n\t\t\t\t}\n\t\t\t\tif(r.disk){ raw || (raw = (r.disk[file]||'').raw) }\n\t\t\t\tvar S = +new Date, SM, SL;\n\t\t\t\tDBG && (DBG.rp = S);\n\t\t\t\tif(raw){ return puff(function(){ p.read(u, raw) }, 0) }\n\t\t\t\topt.store.get(ename(file), p.read);\n\t\t\t\t// TODO: What if memory disk gets filled with updates, and we get an old one back?\n\t\t\t}\n\t\t}());\n\n\t\t;(function(){\n\t\t\tvar dir, f = String.fromCharCode(28), Q;\n\t\t\tr.find = function(key, cb){\n\t\t\t\tif(!dir){\n\t\t\t\t\tif(Q){ Q.push([key, cb]); return } Q = [[key, cb]];\n\t\t\t\t\tr.parse(f, init);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tRadix.map(r.list = dir, function(val, key){\n\t\t\t\t\tif(!val){ return }\n\t\t\t\t\treturn cb(key) || true;\n\t\t\t\t}, {reverse: 1, end: key}) || cb(opt.code.from);\n\t\t\t}\n\t\t\tr.find.add = function(file, cb){\n\t\t\t\tvar has = dir(file);\n\t\t\t\tif(has || file === f){ cb(u, 1); return }\n\t\t\t\tdir(file, 1);\n\t\t\t\tcb.found = (cb.found || 0) + 1;\n\t\t\t\tr.write(f, dir, function(err, ok){\n\t\t\t\t\tif(err){ cb(err); return }\n\t\t\t\t\tcb.found = (cb.found || 0) - 1;\n\t\t\t\t\tif(0 !== cb.found){ return }\n\t\t\t\t\tcb(u, 1);\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\tr.find.bad = function(file, cb){\n\t\t\t\tdir(file, 0);\n\t\t\t\tr.write(f, dir, cb||noop);\n\t\t\t}\n\t\t\tfunction init(err, disk){\n\t\t\t\tif(err){\n\t\t\t\t\topt.log('list', err);\n\t\t\t\t\tsetTimeout(function(){ r.parse(f, init) }, 1000);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(disk){ drain(disk); return }\n\t\t\t\tdir = dir || disk || Radix();\n\t\t\t\tif(!opt.store.list){ drain(dir); return }\n\t\t\t\t// import directory.\n\t\t\t\topt.store.list(function(file){\n\t\t\t\t\tif(!file){ drain(dir); return }\n\t\t\t\t\tr.find.add(file, noop);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction drain(rad, tmp){\n\t\t\t\tdir = dir || rad;\n\t\t\t\tdir.file = f;\n\t\t\t\ttmp = Q; Q = null;\n\t\t\t\tmap(tmp, function(arg){\n\t\t\t\t\tr.find(arg[0], arg[1]);\n\t\t\t\t});\n\t\t\t}\n\t\t}());\n\n\t\tvar noop = function(){}, RAD, u;\n\t\tRadisk.has[opt.file] = r;\n\t\treturn r;\n\t}\n\n\t;(function(){\n\t\tvar _ = String.fromCharCode(31), u;\n\t\tRadisk.encode = function(d, o, s){ s = s || _;\n\t\t\tvar t = s, tmp;\n\t\t\tif(typeof d == 'string'){\n\t\t\t\tvar i = d.indexOf(s);\n\t\t\t\twhile(i != -1){ t += s; i = d.indexOf(s, i+1) }\n\t\t\t\treturn t + '\"' + d + s;\n\t\t\t} else\n\t\t\tif(d && d['#'] && 1 == Object.keys(d).length){\n\t\t\t\treturn t + '#' + tmp + t;\n\t\t\t} else\n\t\t\tif('number' == typeof d){\n\t\t\t\treturn t + '+' + (d||0) + t;\n\t\t\t} else\n\t\t\tif(null === d){\n\t\t\t\treturn t + ' ' + t;\n\t\t\t} else\n\t\t\tif(true === d){\n\t\t\t\treturn t + '+' + t;\n\t\t\t} else\n\t\t\tif(false === d){\n\t\t\t\treturn t + '-' + t;\n\t\t\t}// else\n\t\t\t//if(binary){}\n\t\t}\n\t\tRadisk.decode = function(t, o, s){ s = s || _;\n\t\t\tvar d = '', i = -1, n = 0, c, p;\n\t\t\tif(s !== t[0]){ return }\n\t\t\twhile(s === t[++i]){ ++n }\n\t\t\tp = t[c = n] || true;\n\t\t\twhile(--n >= 0){ i = t.indexOf(s, i+1) }\n\t\t\tif(i == -1){ i = t.length }\n\t\t\td = t.slice(c+1, i);\n\t\t\tif(o){ o.i = i+1 }\n\t\t\tif('\"' === p){\n\t\t\t\treturn d;\n\t\t\t} else\n\t\t\tif('#' === p){\n\t\t\t\treturn {'#':d};\n\t\t\t} else\n\t\t\tif('+' === p){\n\t\t\t\tif(0 === d.length){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn parseFloat(d);\n\t\t\t} else\n\t\t\tif(' ' === p){\n\t\t\t\treturn null;\n\t\t\t} else\n\t\t\tif('-' === p){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}());\n\n\tif(typeof window !== \"undefined\"){\n\t var Gun = window.Gun;\n\t var Radix = window.Radix;\n\t window.Radisk = Radisk;\n\t} else { \n\t var Gun = require('../gun');\n\t\tvar Radix = require('./radix');\n\t\t//var Radix = require('./radix2'); Radisk = require('./radisk2');\n\t\ttry{ module.exports = Radisk }catch(e){}\n\t}\n\n\tRadisk.Radix = Radix;\n\n}());","var Gun = (typeof window !== \"undefined\")? window.Gun : require('../gun');\n\nGun.on('create', function(root){\n if(Gun.TESTING){ root.opt.file = 'radatatest' }\n this.to.next(root);\n var opt = root.opt, empty = {}, u;\n if(false === opt.rad || false === opt.radisk){ return }\n if((u+'' != typeof process) && 'false' === ''+(process.env||'').RAD){ return }\n var Radisk = (Gun.window && Gun.window.Radisk) || require('./radisk');\n var Radix = Radisk.Radix;\n var dare = Radisk(opt), esc = String.fromCharCode(27);\n var ST = 0;\n \n root.on('put', function(msg){\n this.to.next(msg);\n if((msg._||'').rad){ return } // don't save what just came from a read.\n //if(msg['@']){ return } // WHY DID I NOT ADD THIS?\n var id = msg['#'], put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], tmp;\n var DBG = (msg._||'').DBG; DBG && (DBG.sp = DBG.sp || +new Date);\n //var lot = (msg._||'').lot||''; count[id] = (count[id] || 0) + 1; \n var S = (msg._||'').RPS || ((msg._||'').RPS = +new Date);\n //console.log(\"PUT ------->>>\", soul,key, val, state);\n //dare(soul+esc+key, {':': val, '>': state}, dare.one[id] || function(err, ok){\n dare(soul+esc+key, {':': val, '>': state}, function(err, ok){\n //console.log(\"<<<------- PAT\", soul,key, val, state, 'in', +new Date - S);\n DBG && (DBG.spd = DBG.spd || +new Date);\n console.STAT && console.STAT(S, +new Date - S, 'put');\n //if(!err && count[id] !== lot.s){ console.log(err = \"Disk count not same as ram count.\"); console.STAT && console.STAT(+new Date, lot.s - count[id], 'put ack != count') } delete count[id];\n if(err){ root.on('in', {'@': id, err: err, DBG: DBG}); return }\n root.on('in', {'@': id, ok: ok, DBG: DBG});\n //}, id, DBG && (DBG.r = DBG.r || {}));\n }, false && id, DBG && (DBG.r = DBG.r || {}));\n DBG && (DBG.sps = DBG.sps || +new Date);\n });\n var count = {}, obj_empty = Object.empty;\n \n root.on('get', function(msg){\n this.to.next(msg);\n var ctx = msg._||'', DBG = ctx.DBG = msg.DBG; DBG && (DBG.sg = +new Date);\n var id = msg['#'], get = msg.get, soul = msg.get['#'], has = msg.get['.']||'', o = {}, graph, lex, key, tmp, force;\n if('string' == typeof soul){\n key = soul;\n } else \n if(soul){\n if(u !== (tmp = soul['*'])){ o.limit = force = 1 }\n if(u !== soul['>']){ o.start = soul['>'] }\n if(u !== soul['<']){ o.end = soul['<'] }\n key = force? (''+tmp) : tmp || soul['='];\n force = null;\n }\n if(key && !o.limit){ // a soul.has must be on a soul, and not during soul*\n if('string' == typeof has){\n key = key+esc+(o.atom = has);\n } else \n if(has){\n if(u !== has['>']){ o.start = has['>']; o.limit = 1 }\n if(u !== has['<']){ o.end = has['<']; o.limit = 1 }\n if(u !== (tmp = has['*'])){ o.limit = force = 1 }\n if(key){ key = key+esc + (force? (''+(tmp||'')) : tmp || (o.atom = has['='] || '')) }\n }\n }\n if((tmp = get['%']) || o.limit){\n o.limit = (tmp <= (o.pack || (1000 * 100)))? tmp : 1;\n }\n if(has['-'] || (soul||{})['-'] || get['-']){ o.reverse = true }\n if((tmp = (root.next||'')[soul]) && tmp.put){\n if(o.atom){\n tmp = (tmp.next||'')[o.atom] ;\n if(tmp && tmp.rad){ return }\n } else\n if(tmp && tmp.rad){ return }\n }\n var now = Gun.state();\n var S = (+new Date), C = 0, SPT = 0; // STATS!\n DBG && (DBG.sgm = S);\n //var GID = String.random(3); console.log(\"GET ------->>>\", GID, key, o, '?', get);\n dare(key||'', function(err, data, info){\n //console.log(\"<<<------- GOT\", GID, +new Date - S, err, data);\n DBG && (DBG.sgr = +new Date);\n DBG && (DBG.sgi = info);\n try{opt.store.stats.get.time[statg % 50] = (+new Date) - S; ++statg;\n opt.store.stats.get.count++;\n if(err){ opt.store.stats.get.err = err }\n }catch(e){} // STATS!\n //if(u === data && info.chunks > 1){ return } // if we already sent a chunk, ignore ending empty responses. // this causes tests to fail.\n console.STAT && console.STAT(S, +new Date - S, 'got', JSON.stringify(key)); S = +new Date;\n info = info || '';\n var va, ve;\n if(info.unit && data && u !== (va = data[':']) && u !== (ve = data['>'])){ // new format\n var tmp = key.split(esc), so = tmp[0], ha = tmp[1];\n (graph = graph || {})[so] = Gun.state.ify(graph[so], ha, ve, va, so);\n root.$.get(so).get(ha)._.rad = now;\n // REMEMBER TO ADD _rad TO NODE/SOUL QUERY!\n } else\n if(data){ // old code path\n if(typeof data !== 'string'){\n if(o.atom){\n data = u;\n } else {\n Radix.map(data, each, o); // IS A RADIX TREE, NOT FUNCTION!\n }\n }\n if(!graph && data){ each(data, '') }\n // TODO: !has what about soul lookups?\n if(!o.atom && !has & 'string' == typeof soul && !o.limit && !o.more){\n root.$.get(soul)._.rad = now;\n }\n }\n DBG && (DBG.sgp = +new Date);\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // Or benchmark by reusing first start date.\n if(console.STAT && (ST = +new Date - S) > 9){ console.STAT(S, ST, 'got prep time'); console.STAT(S, C, 'got prep #') } SPT += ST; C = 0; S = +new Date;\n var faith = function(){}; faith.faith = true; faith.rad = get; // HNPERF: We're testing performance improvement by skipping going through security again, but this should be audited.\n root.on('in', {'@': id, put: graph, '%': info.more? 1 : u, err: err? err : u, _: faith, DBG: DBG});\n console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'got emit', Object.keys(graph||{}).length);\n graph = u; // each is outside our scope, we have to reset graph to nothing!\n }, o, DBG && (DBG.r = DBG.r || {}));\n DBG && (DBG.sgd = +new Date);\n console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'get call'); // TODO: Perf: this was half a second??????\n function each(val, has, a,b){ // TODO: THIS CODE NEEDS TO BE FASTER!!!!\n C++;\n if(!val){ return }\n has = (key+has).split(esc);\n var soul = has.slice(0,1)[0];\n has = has.slice(-1)[0];\n if(o.limit && o.limit <= o.count){ return true }\n var va, ve, so = soul, ha = has;\n //if(u !== (va = val[':']) && u !== (ve = val['>'])){ // THIS HANDLES NEW CODE!\n if('string' != typeof val){ // THIS HANDLES NEW CODE!\n va = val[':']; ve = val['>'];\n (graph = graph || {})[so] = Gun.state.ify(graph[so], ha, ve, va, so);\n //root.$.get(so).get(ha)._.rad = now;\n o.count = (o.count || 0) + ((va||'').length || 9);\n return;\n }\n o.count = (o.count || 0) + val.length;\n var tmp = val.lastIndexOf('>');\n var state = Radisk.decode(val.slice(tmp+1), null, esc);\n val = Radisk.decode(val.slice(0,tmp), null, esc);\n (graph = graph || {})[soul] = Gun.state.ify(graph[soul], has, state, val, soul);\n }\n });\n var val_is = Gun.valid;\n (opt.store||{}).stats = {get:{time:{}, count:0}, put: {time:{}, count:0}}; // STATS!\n var statg = 0, statp = 0; // STATS!\n});",";(function(){\n/* // from @jabis\nif (navigator.storage && navigator.storage.estimate) {\n const quota = await navigator.storage.estimate();\n // quota.usage -> Number of bytes used.\n // quota.quota -> Maximum number of bytes available.\n const percentageUsed = (quota.usage / quota.quota) * 100;\n console.log(`You've used ${percentageUsed}% of the available storage.`);\n const remaining = quota.quota - quota.usage;\n console.log(`You can write up to ${remaining} more bytes.`);\n}\n*/\n function Store(opt){\n opt = opt || {};\n opt.file = String(opt.file || 'radata');\n var store = Store[opt.file], db = null, u;\n\n if(store){\n console.log(\"Warning: reusing same IndexedDB store and options as 1st.\");\n return Store[opt.file];\n }\n store = Store[opt.file] = function(){};\n\n try{opt.indexedDB = opt.indexedDB || Store.indexedDB || indexedDB}catch(e){}\n try{if(!opt.indexedDB || 'file:' == location.protocol){\n var s = store.d || (store.d = {});\n store.put = function(f, d, cb){ s[f] = d; setTimeout(function(){ cb(null, 1) },250) };\n store.get = function(f, cb){ setTimeout(function(){ cb(null, s[f] || u) },5) };\n console.log('Warning: No indexedDB exists to persist data to!');\n return store;\n }}catch(e){}\n \n\n store.start = function(){\n var o = indexedDB.open(opt.file, 1);\n o.onupgradeneeded = function(eve){ (eve.target.result).createObjectStore(opt.file) }\n o.onsuccess = function(){ db = o.result }\n o.onerror = function(eve){ console.log(eve||1); }\n }; store.start();\n\n store.put = function(key, data, cb){\n if(!db){ setTimeout(function(){ store.put(key, data, cb) },1); return }\n var tx = db.transaction([opt.file], 'readwrite');\n var obj = tx.objectStore(opt.file);\n var req = obj.put(data, ''+key);\n req.onsuccess = obj.onsuccess = tx.onsuccess = function(){ cb(null, 1) }\n req.onabort = obj.onabort = tx.onabort = function(eve){ cb(eve||'put.tx.abort') }\n req.onerror = obj.onerror = tx.onerror = function(eve){ cb(eve||'put.tx.error') }\n }\n\n store.get = function(key, cb){\n if(!db){ setTimeout(function(){ store.get(key, cb) },9); return }\n var tx = db.transaction([opt.file], 'readonly');\n var obj = tx.objectStore(opt.file);\n var req = obj.get(''+key);\n req.onsuccess = function(){ cb(null, req.result) }\n req.onabort = function(eve){ cb(eve||4) }\n req.onerror = function(eve){ cb(eve||5) }\n }\n setInterval(function(){ db && db.close(); db = null; store.start() }, 1000 * 15); // reset webkit bug?\n return store;\n }\n\n if(typeof window !== \"undefined\"){\n (Store.window = window).RindexedDB = Store;\n Store.indexedDB = window.indexedDB; // safari bug\n } else {\n try{ module.exports = Store }catch(e){}\n }\n\n try{\n var Gun = Store.window.Gun || require('../gun');\n Gun.on('create', function(root){\n this.to.next(root);\n root.opt.store = root.opt.store || Store(root.opt);\n });\n }catch(e){}\n\n}());","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","/**\n * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2022 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n totalWeight += obj.weight;\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '6.6.2';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["USE","arg","req","require","slice","R","mod","path","exports","p","split","toString","replace","MODULE","module","String","random","l","c","s","charAt","Math","floor","length","match","t","o","tmp","u","=","hash","i","charCodeAt","sT","sI","check","has","Object","prototype","hasOwnProperty","plain","constructor","call","empty","n","k","indexOf","keys","push","setTimeout","setImmediate","f","MessageChannel","port1","onmessage","e","data","q","port2","postMessage","performance","now","Date","hold","poll","turn","T","each","S","L","r","splice","onto","tag","as","to","this","_","next","be","off","the","last","back","on","v","Infinity","State","N","drift","D","NI","is","ify","soul","opt","dup","max","age","id","dt","track","it","was","drop","ed","console","STAT","cb","lack","clearTimeout","err","Gun","$","create","version","chain","toJSON","valid","state","ask","universe","msg","out","at","gun","DBG","text_rand","put","ctx","acks","fire","ok","stop","crack","root","ack","get","uc","ua","nts","NTS","ue","faith","miss","latch","hatch","CT","all","stun","nl","pk","nj","kl","node","states","ni","pop","pd","ERR","cut","key","val","ham","C","graph","vertex","state_is","known","MD","Hf","aid","ph","#","@",".",":",">","map","pa","pm","state_ify","end","CF","once","JSON","stringify","window","log","sort","F","gk","go","ram","ga","%","FOO","g","peers","Array","forEach","url","obj_each","from","uuid","apply","arguments","join","w","GUN","only","yes","link","cat","$$","tat","echo","pass","sat","lex","unlink","change","linked","ev","sub","in","obj_has","via","VIA","seen","$$$","any","lat","rid","cache","jam","eve","super","wait","test","not","a","run","add","v2020","ran","todo","d","ref","walk","name","reverse","up","resolve","noop","eas","act","subs","nix","none","one","neat","set","item","parse","parseAsync","json","sucks","stringifyAsync","mesh","gap","memory","pack","puff","dup_check","dup_track","hear","raw","peer","say","dam","SH","P","m","flush","batch","tail","send","wire","queue","ash","h","hp","leap","yo","near","SI","hd","loop","SMIA","sorta","text","ss","$put","meta","y","way","yh","yr","ps","pl","wr","pid","yp","ST","/","res","hi","met","bye","time","close","souls","SUBS","##","Mesh","WebSocket","env","websocket","webkitWebSocket","mozWebSocket","open","doc","document","onclose","reconnect","onerror","onopen","defer","retry","tried","hidden","store","localStorage","setItem","removeItem","getItem","lg","disk","size","prefix","file","DEP","warn","Type","fn","bi","b","Boolean","num","list_is","parseFloat","list","slit","A","B","obj_map","index","obj","boj","del","obj_is","copy","x","ll","lle","ii","getTime","fn_is","Val","text_is","bi_is","num_is","rel","rel_","obj_put","Node","soul_","text_random","obj_del","obj_copy","N_","Graph","nf","obj_empty","arr","shell","concat","prev","invalid","self","SEA","location","protocol","host","hostname","btoa","Buffer","global","atob","SeaArray","assign","enc","start","buf","Uint8Array","padStart","fromCharCode","SafeBuffer","props","[object Object]","TypeError","input","bytes","byte","parseInt","words","Uint16Array","dec","info","byteLength","ArrayBuffer","alloc","fill","allocUnsafe","isArray","reduce","ret","api","Promise","rej","crypto","msCrypto","subtle","webkitSubtle","TextEncoder","TextDecoder","len","getRandomValues","randomBytes","Crypto","WebCrypto","ossl","directory","shim","pbkdf2","iter","ks","ecdsa","pair","namedCurve","sign","ecdh","jwk","pub","kty","crv","ext","key_ops","keyToJwk","keyBytes","alg","recall","validity","hook","async","digest","encode","__shim","sha","work","salt","epub","Function","toLowerCase","rsha","importKey","deriveBits","iterations","throw","ecdhSubtle","sa","generateKey","then","priv","exportKey","privateKey","publicKey","dh","epriv","I","what","how","why","verify","sig","slow_leak","fallback","fall_verify","knownKeys","O","unpack","fall_soul","fall_key","fall_val","fall_state","sha256hash","combo","jwkKey","aeskey","encrypt","rand","iv","ct","aes","decrypt","bufiv","bufct","tagLength","decode","secret","pubKeyData","keysToEcdhJwk","public","privKeyData","privKey","derivedBits","rawBits","derivedKey","certify","certificants","policy","authority","certificant","expiry","readPolicy","read","writePolicy","write","block","blacklist","ban","readBlock","writeBlock","rb","wb","keyid","pb","sha1","sha1hash","User","user","args","alias","filter","ing","pubs","already","leave","proof","sea","auth","ek","sS","sessionStorage","obj_ify","tries","shift","half","lol","upt","shuffle","z","remember","plugin","proxy","Proxy","DANGER","delete","alive","gunRoot","authRecall","trust","theirPubkey","grant","sec","no","own","hexStr","base64","substring","hexToBase64","link_is","certificate","value","cert","packed","~","secure","pubcut","stringy","fl","shuffle_attack","func","limit","inThrottle","context","inDebounce","newObj","includes","isNode","process","userAgent","navigator","isElectron","animals","adjectives","gunOnceDefined","_k","_a","undefined","gunAsAnotherUser","gun2","radisk","values","getHash","str","format","_context","Error","_this","base64ToHex","capitalize","toUpperCase","generateName","result","hex","getCaret","el","selectionStart","selection","focus","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","injectCss","getElementById","sheet","createElement","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sParameterName","sURLVariables","search","decodeURIComponent","formatTime","date","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","nowStr","toLocaleDateString","dayDifference","round","weekday","getProfileLink","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","isMobile","vendor","substr","throttle","debounce","delay","sample","sampleSize","temp","shuffled","min","called","omit","yson","isNaN","trim","done","revive","M","j","sl","ai","replacer","space","YSON","Radix","radix","unit","kk","__","debug","rap","pre","rev","branch","pt","tree","error","object","Radisk","ename","until","chunk","code","jsonify","timediate","save","find","sf","mix","sml","sm","bad","compare","tags","st","Q","sto","sal","ne","RPC","RWC","rad","force","wd","wa","wp","wf","count","wfc","ceil","SC","wf1","wf2","both","wf3","hub","wf4","wf5","wfd","ws","range","rf","rgl","rg","rr","chunks","parsed","more","rl","rm","rpg","rpl","rpa","radec","rpd","rp","dir","init","drain","found","require$$2","require$$0","TESTING","RAD","require$$1","dare","esc","sp","RPS","spd","sps","sg","atom","va","lastIndexOf","sgm","sgr","sgi","stats","statg","ve","so","ha","sgp","sgd","Store","db","indexedDB","onupgradeneeded","target","createObjectStore","onsuccess","tx","transaction","objectStore","onabort","setInterval","RindexedDB","ELECTRON_GUN_URL","DEFAULT_PEERS","https://gun-rs.iris.to/gun","https://gun-us.herokuapp.com/gun","loc","is_localhost_but_not_dev","startsWith","endsWith","enabled","urlRegex","visibility","Session","getKey","encryptedUrl","encryptedUrlHash","publicState","lastSeen","toISOString","connect","remove","disconnect","peerFromGun","getSaved","util","defaults","reset","isMixedContent","disable","predicate","connectToLocalElectron","maxConnectedPeers","_this2","checkGunPeerCount","peersFromGun","connectedPeers","readyState","bufferedAmount","unconnectedPeers","addedToGun","_this3","_this4","opts","myOpts","currentUser","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","Attribute","guessTypeOf","getUuid","getUniqueIdValidators","isUniqueType","_proto","equals","uri","session","DEFAULT_PERMISSIONS","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","_context4","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","_context5","getOurSecretChannelId","_context6","getTheirSecretChannelId","_context7","getChannels","listenToChatLinks","keypair","_context9","getMyChatLinks","handleChannel","ourSecretChannelId","_context8","encryptedChatId","chatId","_context10","_context11","getMessages","_context12","_this5","theirSecretChannelId","messageReceived","userState","_context13","selfAuthored","messages","_context14","decrypted","getLatestMsg","callbackIfLatest","_this6","latest","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","_this7","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","_this8","theirMsgsLastSeenTime","removeParticipant","permissions","_context21","_this9","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","_context22","_context23","putGroup","_context25","_context26","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","_context33","_loop","_context32","_this10","_context31","_context35","_context34","hasWritePermission","_context38","_this11","_context37","_context40","_context39","_this12","subscription","_context42","theirSecretUuid","_b","_this13","_context41","_context44","_context43","_this14","setTyping","isTyping","timeout","setTypingTimeout","_this15","getTyping","typing","_this16","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","_opts","_context46","chatLinks","chatLinkSubscriptions","links","channels","formatChatLink","_this17","encPub","requestId","_context45","createChatLink","_context47","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","_this18","getActivity","status","isActive","querySelectorAll","getAttribute","lastActive","indicator","msgEl","parentElement","msgClass","msgContent","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","timerUpdate","pubKey","activityDate","isOnline","_context48","_context51","_context50","_context49","removeGroupChatLink","removePrivateChatLink","deleteChannel","_context52","deleteGroup","_context53","Map","1","_dereq_","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","observer","nextTick","element","createTextNode","observe","characterData","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","oldQueue","task","2","immediate","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","reject","getThen","thenable","onError","onSuccess","tryCatch","reason","iterable","resolved","allResolver","outValue","race","response","3","4","_typeof","Symbol","iterator","idb","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","getIDB","createBlob","parts","properties","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","append","getBlob","Promise$1","executeCallback","executeTwoCallbacks","errorCallback","normalizeKey","getCallback","supportsBlobs","dbContexts","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","_getConnection","upgradeNeeded","forages","dbArgs","openreq","storeName","oldVersion","ex","newVersion","onversionchange","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isUpgrade","incVersion","_decodeBlob","encodedBlob","bin","_binStringToArrayBuffer","_isEncodedBlob","__local_forage_encoded_blob","_fullyReady","_initReady","_dbInfo","createTransaction","mode","retries","forage","_tryReconnect","asyncStorage","_driver","_initStorage","ready","initPromises","ignoreErrors","_defaultConfig","_support","isSafari","openDatabase","platform","hasFetch","fetch","IDBKeyRange","isIndexedDBValid","iterate","openCursor","iterationNumber","cursor","txn","blob","oncomplete","matchedChrome","matchedEdge","_checkBlobSupportWithoutCaching","_checkBlobSupport","blobSupport","reader","FileReader","onloadend","readAsBinaryString","clear","advanced","openKeyCursor","advance","dropInstance","currentConfig","config","isCurrentDb","dbPromise","deleteObjectStore","_forage2","deleteDatabase","onblocked","BASE_CHARS","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER_LENGTH","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","buffer","bufferToString","base64String","localforageSerializer","serialize","valueType","marker","fileReader","onload","SERIALIZED_MARKER","readAsArrayBuffer","deserialize","blobType","matcher","Int8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint32Array","Float32Array","Float64Array","createDbTable","executeSql","tryExecuteSql","sqlStatement","SYNTAX_ERR","results","rows","_setItem","retriesLeft","originalValue","serializer","sqlError","QUOTA_ERR","getAllStoreNames","storeNames","webSQLStorage","dbInfoPromise","description","operationInfo","dropTable","operations","_getKeyPrefix","defaultConfig","keyPrefix","localStorageWrapper","checkIfLocalStorageThrows","isLocalStorageValid","keyPrefixLength","itemKey","array","searchElement","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","localforage_js","LocalForage","driverTypeKey","instance","Constructor","_classCallCheck","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","configureMissingMethods","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","oldDriverSetDone","currentDriverIndex","driverPromiseLoop","initDriver","supports","libraryMethodsAndProperties","createInstance","notInLocalForage","Set","localForage","local","loaded","loadLocalForage","_context3","newResult","_context2","on_subscriptions","_loop3","map_subscriptions","_loop2","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","counter","blockedUsers","isBlocked","_v","callbacks","groupName","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","sum","_cached_map","cached","cacheKey","myEvent","_cached_on","_cached_count","_cached_fn","callbackId","myCallbacks","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","publicVapidKey","urlBase64ToUint8Array","repeat","rawData","outputArray","_subscribe","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","_subscribeToWebPush","serviceWorker","getRegistration","active","getSubscription","addWebPushSubscriptionsToChats","channelIds","privateState","_addWebPushSubscription","saveToGun","myKey","_getWebPushSubscriptions","getEpub","getNotificationText","_getNotificationText","notification","profile","action","changeUnseenNotificationCount","_sendIrisNotification","recipient","_sendWebPushNotification","subscriptions","title","payload","endpoint","method","headers","content-type","_ret","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","notificationSetting","getMyName","participantProfiles","icon","silent","onclick","sendWebPushNotification","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","sendIrisNotification","changeChatUnseenCount","chat","chatNode","unseen","subscribeToWebPush","getWebPushSubscriptions","removeSubscription","getTag","isString","isNumber","isObject","isDefined","isBlank","hasOwn","KeyStore","_keys","_keyMap","totalWeight","createKey","weight","keyId","src","getFn","createKeyPath","createKeyId","INVALID_KEY_WEIGHT_VALUE","Config","isCaseSensitive","includeScore","shouldSort","sortFn","score","idx","includeMatches","findAllMatches","minMatchCharLength","threshold","distance","useExtendedSearch","deepGet","isObjectLike","isBoolean","baseToString","ignoreLocation","ignoreFieldNorm","fieldNormWeight","SPACE","FuseIndex","norm","mantissa","pow","numTokens","isCreated","setIndexRecords","docs","records","_keysMap","docIndex","_addString","_addObject","record","keyIndex","subRecords","stack","nestedArrIndex","subRecord","createIndex","myIndex","setKeys","setSources","computeScore$1","pattern","errors","currentLocation","expectedLocation","accuracy","proximity","abs","createPatternAlphabet","mask","char","BitapSearch","addChunk","startIndex","alphabet","remainder","isMatch","indices","allIndices","totalScore","hasMatches","patternAlphabet","patternLen","textLen","currentThreshold","bestLocation","computeMatches","matchMask","lastBitArr","finalScore","binMax","binMin","binMid","finish","bitArr","charMatch","matchmask","convertMaskToIndices","BaseMatch","getMatch","multiRegex","singleRegex","exp","matches","FuzzyMatch","_bitapSearch","searchIn","IncludeMatch","searchers","searchersLen","SPACE_RE","MultiMatchSet","registeredSearchers","createSearcher","searcherClass","condition","isExpression","query","convertToExplicit","$and","auto","isQueryPath","isPath","isLeaf","LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY","searcher","operator","transformMatches","refIndex","transformScore","Fuse","_keyStore","setCollection","_docs","_myIndex","removeAt","_searchStringList","_searchObjectList","_searchLogical","Number","EPSILON","computeScore","transformers","transformer","expression","evaluate","_findMatches","getValueForItemAtKeyId","resultMap","expResults","parseIndex","parseQuery","register","queryItem","token","isMultiMatch","isSingleMatch","numMatches","qLen","pLen","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","electron","multicast","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","autofollow","logOut","_reg$active","unsubscribe","localforage","href","r1","r2","r1done","r2done","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","existsSync","privKeyFile","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","errorMsg","ValidationError","SignedMessage","signedData","_validate","_getArray","authorOrRecipient","_getIterable","elementValue","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","attr","signerKeyHash","timestamp","rating","maxRating","minRating","isPositive","isNegative","isNeutral","signingKey","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","setReaction","reaction","rootContact","private","static","staticState"],"mappings":"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,QACA,WACA,WACA,UACA,OACA,MACA,WACA,cACA,UACA,SACA,YACA,aACA,YACA,UACA,YACA,UACA,aACA,aACA,WACA,OACA,YACA,QACA,YACA,MACA,SACA,cACA,QACA,SACA,MACA,SACA,OACA,QACA,UACA,WACA,UACA,YACA,OACA,SACA,SACA,YACA,OACA,QACA,WACA,MACA,UACA,SACA,WACA,OACA,YACA,SACA,OACA,QACA,YACA,SACA,UACA,MACA,QACA,WACA,MACA,MACA,SACA,SACA,SACA,QACA,UACA,OACA,WACA,OACA,MACA,aACA,OACA,MACA,OACA,WACA,YACA,UACA,QACA,SACA,SACA,UACA,OACA,WACA,QACA,SACA,UACA,cACA,SACA,OACA,UACA,aACA,OACA,QACA,UACA,UACA,UACA,OACA,UACA,OACA,WACA,QACA,UACA,eACA,WACA,SACA,QACA,WACA,cACA,QACA,SACA,SACA,SACA,SACA,MACA,YACA,aACA,WACA,aACA,OACA,OACA,QACA,MACA,QACA,UACA,UACA,WACA,OACA,QACA,UACA,QACA,UACA,SACA,SACA,OACA,SACA,QACA,UACA,SACA,OACA,QACA,WACA,OACA,QACA,WACA,SACA,SACA,UACA,WACA,SACA,WACA,SACA,YACA,SACA,WACA,aACA,UACA,OACA,SACA,OACA,cACA,OACA,UACA,WACA,SACA,QACA,WACA,OACA,QACA,OACA,SACA,UACA,OACA,cACA,SACA,UACA,UACA,YACA,OACA,UACA,QACA,MACA,KACA,QACA,UACA,WACA,SACA,aACA,YACA,UACA,UACA,UACA,UACA,QACA,WACA,MACA,SACA,OACA,WACA,UACA,YACA,WACA,OACA,YACA,WACA,SACA,QACA,UACA,YACA,SACA,OACA,SACA,QACA,SACA,SACA,SACA,UACA,MACA,cACA,QACA,WACA,UACA,aACA,aACA,SACA,OACA,UACA,YACA,WACA,aACA,SACA,UACA,UACA,WACA,WACA,QACA,QACA,QACA,SACA,WACA,aACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,OACA,UACA,SACA,YACA,QACA,WACA,WACA,WACA,QACA,QACA,WACA,UACA,OACA,QACA,YACA,YACA,OACA,QACA,QACA,YACA,UACA,UACA,OACA,SACA,OACA,QACA,SACA,OACA,WACA,SACA,QACA,OACA,SACA,SACA,gBACA,QACA,SACA,QACA,OACA,UACA,UACA,SACA,OACA,UACA,SACA,QACA,UACA,YACA,UACA,aACA,WACA,OACA,YACA,SACA,aACA,OACA,OACA,UACA,MACA,QACA,SACA,MACA,SACA,UACA,MACA,SACA,SACA,QACA,WACA,QACA,QACA,MACA,QACA,QACA,MACA,WAGIC,EAAa,CACjB,UACA,MACA,WACA,MACA,QACA,WACA,QACA,OACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,OACA,QACA,QACA,OACA,OACA,UACA,SACA,SACA,QACA,SACA,OACA,OACA,SACA,UACA,SACA,QACA,UACA,OACA,QACA,MACA,QACA,SACA,QACA,SACA,MACA,QACA,SACA,UACA,SACA,OACA,OACA,OACA,SACA,MACA,SACA,QACA,UACA,SACA,SACA,QACA,WACA,OACA,UACA,QACA,QACA,OACA,OACA,OACA,SACA,MACA,QACA,QACA,QACA,OACA,QACA,QACA,WACA,QACA,MACA,QACA,QACA,OACA,WACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,OACA,UACA,UACA,OACA,QACA,UACA,QACA,QACA,WACA,aACA,SACA,SACA,OACA,YACA,aACA,YACA,aACA,SACA,YACA,QACA,QACA,OACA,SACA,QACA,OACA,QACA,QACA,SACA,SACA,QACA,YACA,QACA,UACA,aACA,QACA,SACA,SACA,OACA,MACA,MACA,QACA,SACA,UACA,UACA,QACA,QACA,YACA,SACA,QACA,QACA,YACA,QACA,QACA,WACA,SACA,OACA,QACA,SACA,SACA,SACA,QACA,SACA,OACA,MACA,SACA,SACA,QACA,UACA,UACA,WACA,UACA,QACA,MACA,aACA,QACA,YACA,YACA,WACA,SACA,QACA,YACA,WACA,UACA,YACA,YACA,YACA,QACA,cACA,UACA,OACA,SACA,UACA,UACA,aACA,WACA,WACA,WACA,SACA,OACA,MACA,UACA,SACA,aACA,UACA,UACA,YACA,aACA,UACA,YACA,QACA,WACA,UACA,OACA,QACA,WACA,cACA,QACA,WACA,QACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,OACA,WACA,WACA,cACA,cACA,aACA,aACA,aACA,QACA,SACA,aACA,cACA,YACA,eACA,UACA,YACA,OACA,WACA,YACA,OACA,WACA,QACA,SACA,WACA,OACA,QACA,UACA,UACA,YACA,QACA,SACA,OACA,SACA,SACA,QACA,WACA,UACA,WACA,QACA,WACA,QACA,UACA,WACA,aACA,aACA,aACA,YACA,QACA,YACA,UACA,OACA,QACA,OACA,MACA,MACA,QACA,OACA,QACA,YACA,QACA,QACA,SACA,YACA,OACA,QACA,WACA,UACA,QACA,QACA,WACA,MACA,SACA,YACA,OACA,OACA,UACA,OACA,MACA,MACA,SACA,YACA,MACA,OACA,OACA,QACA,QACA,WACA,OACA,SACA,OACA,QACA,aACA,gBACA,UACA,YACA,UACA,OACA,QACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,UACA,QACA,SACA,YACA,SACA,WACA,OACA,UACA,OACA,YACA,OACA,UACA,SACA,SACA,YACA,WACA,UACA,QACA,OACA,UACA,QACA,UACA,QACA,UACA,aACA,OACA,SACA,WACA,YACA,cACA,aACA,SACA,UACA,WACA,SACA,UACA,SACA,SACA,QACA,QACA,QACA,MACA,SACA,UACA,WACA,QACA,QACA,cACA,aACA,QACA,OACA,WACA,cACA,MACA,SACA,QACA,WACA,WACA,aACA,QACA,MACA,UACA,QACA,eACA,SACA,OACA,OACA,QACA,QACA,SACA,YACA,UACA,cACA,WACA,SACA,cACA,OACA,cACA,eACA,WACA,WACA,MACA,WACA,cACA,WACA,UACA,OACA,QACA,OACA,OACA,aACA,OACA,YACA,YACA,QACA,UACA,UACA,SACA,gBACA,WACA,SACA,UACA,SACA,WACA,OACA,OACA,aACA,OACA,WACA,YACA,WACA,WACA,MACA,QACA,UACA,MACA,aACA,SACA,WACA,UACA,WACA,aACA,QACA,OACA,SACA,QACA,SACA,QACA,WACA,SACA,SACA,YACA,WACA,QACA,UACA,WACA,YACA,QACA,OACA,YACA,WACA,YACA,QACA,OACA,SACA,WACA,SACA,QACA,QACA,SACA,UACA,eACA,SACA,QACA,MACA,SACA,QACA,UACA,cACA,SACA,UACA,UACA,aACA,YACA,WACA,QACA,WACA,UACA,UACA,SACA,SACA,aACA,UACA,aACA,aACA,UACA,UACA,MACA,QACA,YACA,cACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,UACA,OACA,OACA,MACA,aACA,OACA,QACA,WACA,aACA,OACA,QACA,QACA,QACA,UACA,SACA,UACA,WACA,QACA,WACA,OACA,OACA,SACA,WACA,UACA,QACA,UACA,QACA,aACA,WACA,QACA,QACA,cACA,OACA,UACA,UACA,OACA,WACA,UACA,QACA,YACA,QACA,UACA,SACA,OACA,WACA,OACA,YACA,QACA,WACA,WACA,QACA,QACA,UACA,SACA,MACA,YACA,WACA,YACA,OACA,QACA,cACA,MACA,UACA,QACA,OACA,WACA,eACA,QACA,OACA,OACA,QACA,UACA,SACA,YACA,gBACA,UACA,UACA,aACA,QACA,QACA,SACA,QACA,WACA,OACA,SACA,UACA,MACA,QACA,OACA,YACA,OACA,YACA,eACA,UACA,UACA,UACA,YACA,QACA,YACA,cACA,UACA,WACA,WACA,eACA,UACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,YACA,UACA,OACA,OACA,SACA,SACA,UACA,OACA,YACA,QACA,YACA,OACA,MACA,cACA,QACA,UACA,UACA,aACA,YACA,SACA,OACA,SACA,YACA,MACA,SACA,QACA,WACA,QACA,QACA,iBACA,SACA,aACA,gBACA,aACA,QACA,QACA,OACA,OACA,YACA,UACA,WACA,aACA,SACA,WACA,OACA,UACA,WACA,aACA,UACA,WACA,UACA,WACA,UACA,WACA,UACA,YACA,MACA,YACA,aACA,YACA,WACA,QACA,WACA,WACA,WACA,MACA,UACA,QACA,WACA,aACA,UACA,UACA,QACA,SACA,iBACA,YACA,YACA,aACA,YACA,OACA,SACA,WACA,SACA,cACA,cACA,OACA,SACA,WACA,UACA,SACA,aACA,UACA,cACA,gBACA,QACA,UACA,WACA,UACA,QACA,QACA,cACA,UACA,UACA,SACA,SACA,OACA,QACA,MACA,QACA,WACA,QACA,gBACA,UACA,aACA,aACA,SACA,WACA,WACA,WACA,QACA,aACA,UACA,OACA,QACA,aACA,QACA,WACA,OACA,WACA,YACA,QACA,aACA,UACA,YACA,SACA,YACA,SACA,SACA,UACA,aACA,eACA,YACA,QACA,WACA,WACA,OACA,WACA,SACA,aACA,YACA,WACA,MACA,gBACA,SACA,aACA,UACA,QACA,gBACA,SACA,WACA,aACA,SACA,WACA,SACA,OACA,WACA,WACA,aACA,WACA,eACA,YACA,UACA,WACA,WACA,aACA,YACA,UACA,OACA,WACA,SACA,QACA,QACA,aACA,QACA,SACA,QACA,YACA,OACA,WACA,SACA,SACA,WACA,SACA,UACA,OACA,WACA,WACA,QACA,SACA,QACA,aACA,YACA,eACA,WACA,cACA,YACA,SACA,eACA,gBACA,WACA,cACA,UACA,YACA,WACA,cACA,YACA,WACA,WACA,YACA,SACA,cACA,aACA,SACA,QACA,eACA,aACA,UACA,WACA,QACA,YACA,cACA,aACA,cACA,SACA,YACA,aACA,aACA,aACA,SACA,aACA,SACA,gBACA,QACA,WACA,aACA,QACA,aACA,kBACA,WACA,UACA,cACA,UACA,WACA,SACA,aACA,QACA,UACA,WACA,QACA,aACA,cACA,UACA,cACA,SACA,WACA,QACA,OACA,QACA,WACA,aACA,UACA,aACA,aACA,YACA,OACA,SACA,gBACA,UACA,aACA,cACA,SACA,SACA,cACA,OACA,UACA,OACA,aACA,QACA,OACA,QACA,SACA,SACA,UACA,SACA,UACA,QACA,SACA,WACA,QACA,YACA,SACA,WACA,SACA,UACA,cACA,WACA,UACA,YACA,WACA,QACA,WACA,OACA,eACA,YACA,cACA,cACA,aACA,WACA,cACA,OACA,QACA,WACA,SACA,WACA,iBACA,UACA,aACA,UACA,YACA,WACA,QACA,aACA,UACA,UACA,MACA,WACA,YACA,cACA,cACA,eACA,cACA,YACA,WACA,UACA,cACA,gBACA,OACA,WACA,UACA,WACA,aACA,aACA,UACA,YACA,aACA,QACA,UACA,WACA,QACA,eACA,OACA,UACA,SACA,cACA,cACA,WACA,QACA,UACA,WACA,QACA,UACA,UACA,SACA,UACA,WACA,UACA,SACA,WACA,YACA,OACA,WACA,SACA,aACA,cACA,YACA,OACA,UACA,QACA,QACA,YACA,SACA,QACA,UACA,MACA,aACA,YACA,UACA,QACA,SACA,aACA,SACA,UACA,YACA,WACA,iBACA,eACA,WACA,QACA,UACA,QACA,UACA,WACA,QACA,QACA,WACA,WACA,QACA,WACA,OACA,UACA,gBACA,UACA,UACA,aACA,UACA,SACA,cACA,gBACA,eACA,aACA,aACA,QACA,WACA,UACA,SACA,UACA,SACA,OACA,UACA,aACA,eACA,QACA,YACA,WACA,aACA,eACA,OACA,aACA,UACA,UACA,aACA,QACA,QACA,WACA,gBACA,WACA,QACA,eACA,WACA,aACA,UACA,aACA,YACA,UACA,SACA,cACA,UACA,WACA,UACA,YACA,UACA,SACA,UACA,UACA,WACA,cACA,WACA,gBACA,aACA,QACA,WACA,YACA,aACA,SACA,SACA,YACA,WACA,SACA,SACA,SACA,eACA,QACA,aACA,YACA,OACA,YACA,SACA,QACA,UACA,YACA,aACA,WACA,eACA,gBACA,SACA,aACA,QACA,WACA,SACA,gBACA,SACA,aACA,UACA,QACA,SACA,cACA,aACA,aACA,eACA,WACA,YACA,UACA,aACA,UACA,WACA,UACA,QACA,SACA,YACA,WACA,OACA,WACA,UACA,OACA,UACA,YACA,cACA,aACA,SACA,YACA,aACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,UACA,UACA,SACA,cACA,YACA,YACA,WACA,SACA,UACA,SACA,YACA,UACA,cACA,SACA,aACA,MACA,WACA,OACA,KACA,WACA,aACA,UACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,aACA,YACA,eACA,cACA,WACA,OACA,aACA,SACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,SACA,MACA,QACA,WACA,aACA,YACA,WACA,WACA,QACA,YACA,UACA,eACA,WACA,WACA,eACA,aACA,UACA,QACA,UACA,UACA,WACA,aACA,SACA,UACA,SACA,UACA,SACA,SACA,UACA,eACA,YACA,UACA,YACA,SACA,cACA,YACA,WACA,aACA,SACA,UACA,YACA,iBACA,QACA,SACA,WACA,cACA,QACA,OACA,WACA,cACA,aACA,aACA,aACA,YACA,QACA,aACA,QACA,SACA,YACA,OACA,UACA,WACA,SACA,YACA,QACA,UACA,OACA,YACA,YACA,WACA,OACA,SACA,UACA,UACA,WACA,YACA,aACA,WACA,cACA,SACA,OACA,cACA,OACA,WACA,UACA,OACA,OACA,MACA,SACA,QACA,OACA,eACA,YACA,OACA,QACA,WACA,QACA,UACA,YACA,SACA,SACA,WACA,SACA,QACA,QACA,SACA,WACA,UACA,OACA,OACA,OACA,WACA,OACA,UACA,QACA,SACA,YACA,WACA,WACA,YACA,SACA,QACA,QACA,aACA,QACA,QACA,SACA,SACA,QACA,SACA,YACA,WACA,SACA,UACA,OACA,YACA,UA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"} \ No newline at end of file +{"version":3,"file":"iris.umd.production.min.js","sources":["../node_modules/gun/gun.js","../node_modules/gun/sea.js","../src/lodash.ts","../src/util.ts","../node_modules/gun/lib/yson.js","../node_modules/gun/lib/radix.js","../node_modules/gun/lib/radisk.js","../node_modules/gun/lib/store.js","../node_modules/gun/lib/rindexed.js","../src/peers.ts","../src/global.ts","../src/Attribute.ts","../src/public.ts","../src/Channel.ts","../src/private.ts","../node_modules/localforage/dist/localforage.js","../src/Node.ts","../src/local.ts","../src/blockedUsers.ts","../src/group.ts","../src/notifications.ts","../node_modules/fuse.js/dist/fuse.esm.js","../src/electron.ts","../src/session.ts","../src/Key.ts","../src/static.ts","../src/SignedMessage.ts","../src/index.ts"],"sourcesContent":[";(function(){\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n\t;USE(function(module){\n\t\t// Shim for generic javascript utilities.\n\t\tString.random = function(l, c){\n\t\t\tvar s = '';\n\t\t\tl = l || 24; // you are not going to make a 0 length random number, so no need to check type\n\t\t\tc = c || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz';\n\t\t\twhile(l-- > 0){ s += c.charAt(Math.floor(Math.random() * c.length)) }\n\t\t\treturn s;\n\t\t}\n\t\tString.match = function(t, o){ var tmp, u;\n\t\t\tif('string' !== typeof t){ return false }\n\t\t\tif('string' == typeof o){ o = {'=': o} }\n\t\t\to = o || {};\n\t\t\ttmp = (o['='] || o['*'] || o['>'] || o['<']);\n\t\t\tif(t === tmp){ return true }\n\t\t\tif(u !== o['=']){ return false }\n\t\t\ttmp = (o['*'] || o['>']);\n\t\t\tif(t.slice(0, (tmp||'').length) === tmp){ return true }\n\t\t\tif(u !== o['*']){ return false }\n\t\t\tif(u !== o['>'] && u !== o['<']){\n\t\t\t\treturn (t >= o['>'] && t <= o['<'])? true : false;\n\t\t\t}\n\t\t\tif(u !== o['>'] && t >= o['>']){ return true }\n\t\t\tif(u !== o['<'] && t <= o['<']){ return true }\n\t\t\treturn false;\n\t\t}\n\t\tString.hash = function(s, c){ // via SO\n\t\t\tif(typeof s !== 'string'){ return }\n\t c = c || 0; // CPU schedule hashing by\n\t if(!s.length){ return c }\n\t for(var i=0,l=s.length,n; i= (check.now() - l)) && c++ < 3333){ f(); return }\n\t\t\t\tsI(function(){ l = check.now(); f() },c=0)\n\t\t\t}\n\t\t}());\n\t\t;(function(){ // Too many polls block, this \"threads\" them in turns over a single thread in time.\n\t\t\tvar sT = setTimeout, t = sT.turn = sT.turn || function(f){ 1 == s.push(f) && p(T) }\n\t\t\t, s = t.s = [], p = sT.poll, i = 0, f, T = function(){\n\t\t\t\tif(f = s[i++]){ f() }\n\t\t\t\tif(i == s.length || 99 == i){\n\t\t\t\t\ts = t.s = s.slice(i);\n\t\t\t\t\ti = 0;\n\t\t\t\t}\n\t\t\t\tif(s.length){ p(T) }\n\t\t\t}\n\t\t}());\n\t\t;(function(){\n\t\t\tvar u, sT = setTimeout, T = sT.turn;\n\t\t\t(sT.each = sT.each || function(l,f,e,S){ S = S || 9; (function t(s,L,r){\n\t\t\t if(L = (s = (l||[]).splice(0,S)).length){\n\t\t\t \tfor(var i = 0; i < L; i++){\n\t\t\t \t\tif(u !== (r = f(s[i]))){ break }\n\t\t\t \t}\n\t\t\t \tif(u === r){ T(t); return }\n\t\t\t } e && e(r);\n\t\t\t}())})();\n\t\t}());\n\t})(USE, './shim');\n\n\t;USE(function(module){\n\t\t// On event emitter generic javascript utility.\n\t\tmodule.exports = function onto(tag, arg, as){\n\t\t\tif(!tag){ return {to: onto} }\n\t\t\tvar u, f = 'function' == typeof arg, tag = (this.tag || (this.tag = {}))[tag] || f && (\n\t\t\t\tthis.tag[tag] = {tag: tag, to: onto._ = { next: function(arg){ var tmp;\n\t\t\t\t\tif(tmp = this.to){ tmp.next(arg) }\n\t\t\t}}});\n\t\t\tif(f){\n\t\t\t\tvar be = {\n\t\t\t\t\toff: onto.off ||\n\t\t\t\t\t(onto.off = function(){\n\t\t\t\t\t\tif(this.next === onto._.next){ return !0 }\n\t\t\t\t\t\tif(this === this.the.last){\n\t\t\t\t\t\t\tthis.the.last = this.back;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.to.back = this.back;\n\t\t\t\t\t\tthis.next = onto._.next;\n\t\t\t\t\t\tthis.back.to = this.to;\n\t\t\t\t\t\tif(this.the.last === this.the){\n\t\t\t\t\t\t\tdelete this.on.tag[this.the.tag];\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tto: onto._,\n\t\t\t\t\tnext: arg,\n\t\t\t\t\tthe: tag,\n\t\t\t\t\ton: this,\n\t\t\t\t\tas: as,\n\t\t\t\t};\n\t\t\t\t(be.back = tag.last || tag).to = be;\n\t\t\t\treturn tag.last = be;\n\t\t\t}\n\t\t\tif((tag = tag.to) && u !== arg){ tag.next(arg) }\n\t\t\treturn tag;\n\t\t};\n\t})(USE, './onto');\n\n\t;USE(function(module){\n\t\t// Valid values are a subset of JSON: null, binary, number (!Infinity), text,\n\t\t// or a soul relation. Arrays need special algorithms to handle concurrency,\n\t\t// so they are not supported directly. Use an extension that supports them if\n\t\t// needed but research their problems first.\n\t\tmodule.exports = function (v) {\n\t\t // \"deletes\", nulling out keys.\n\t\t return v === null ||\n\t\t\t\"string\" === typeof v ||\n\t\t\t\"boolean\" === typeof v ||\n\t\t\t// we want +/- Infinity to be, but JSON does not support it, sad face.\n\t\t\t// can you guess what v === v checks for? ;)\n\t\t\t(\"number\" === typeof v && v != Infinity && v != -Infinity && v === v) ||\n\t\t\t(!!v && \"string\" == typeof v[\"#\"] && Object.keys(v).length === 1 && v[\"#\"]);\n\t\t}\n\t})(USE, './valid');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\t\tfunction State(){\n\t\t\tvar t = +new Date;\n\t\t\tif(last < t){\n\t\t\t\treturn N = 0, last = t + State.drift;\n\t\t\t}\n\t\t\treturn last = t + ((N += 1) / D) + State.drift;\n\t\t}\n\t\tState.drift = 0;\n\t\tvar NI = -Infinity, N = 0, D = 999, last = NI, u; // WARNING! In the future, on machines that are D times faster than 2016AD machines, you will want to increase D by another several orders of magnitude so the processing speed never out paces the decimal resolution (increasing an integer effects the state accuracy).\n\t\tState.is = function(n, k, o){ // convenience function to get the state on a key on a node and return it.\n\t\t\tvar tmp = (k && n && n._ && n._['>']) || o;\n\t\t\tif(!tmp){ return }\n\t\t\treturn ('number' == typeof (tmp = tmp[k]))? tmp : NI;\n\t\t}\n\t\tState.ify = function(n, k, s, v, soul){ // put a key's state on a node.\n\t\t\t(n = n || {})._ = n._ || {}; // safety check or init.\n\t\t\tif(soul){ n._['#'] = soul } // set a soul if specified.\n\t\t\tvar tmp = n._['>'] || (n._['>'] = {}); // grab the states data.\n\t\t\tif(u !== k && k !== '_'){\n\t\t\t\tif('number' == typeof s){ tmp[k] = s } // add the valid state.\n\t\t\t\tif(u !== v){ n[k] = v } // Note: Not its job to check for valid values!\n\t\t\t}\n\t\t\treturn n;\n\t\t}\n\t\tmodule.exports = State;\n\t})(USE, './state');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\t\tfunction Dup(opt){\n\t\t\tvar dup = {s:{}}, s = dup.s;\n\t\t\topt = opt || {max: 999, age: 1000 * 9};//*/ 1000 * 9 * 3};\n\t\t\tdup.check = function(id){\n\t\t\t\tif(!s[id]){ return false }\n\t\t\t\treturn dt(id);\n\t\t\t}\n\t\t\tvar dt = dup.track = function(id){\n\t\t\t\tvar it = s[id] || (s[id] = {});\n\t\t\t\tit.was = dup.now = +new Date;\n\t\t\t\tif(!dup.to){ dup.to = setTimeout(dup.drop, opt.age + 9) }\n\t\t\t\tif(dt.ed){ dt.ed(id) }\n\t\t\t\treturn it;\n\t\t\t}\n\t\t\tdup.drop = function(age){\n\t\t\t\tdup.to = null;\n\t\t\t\tdup.now = +new Date;\n\t\t\t\tvar l = Object.keys(s);\n\t\t\t\tconsole.STAT && console.STAT(dup.now, +new Date - dup.now, 'dup drop keys'); // prev ~20% CPU 7% RAM 300MB // now ~25% CPU 7% RAM 500MB\n\t\t\t\tsetTimeout.each(l, function(id){ var it = s[id]; // TODO: .keys( is slow?\n\t\t\t\t\tif(it && (age || opt.age) > (dup.now - it.was)){ return }\n\t\t\t\t\tdelete s[id];\n\t\t\t\t},0,99);\n\t\t\t}\n\t\t\treturn dup;\n\t\t}\n\t\tmodule.exports = Dup;\n\t})(USE, './dup');\n\n\t;USE(function(module){\n\t\t// request / response module, for asking and acking messages.\n\t\tUSE('./onto'); // depends upon onto!\n\t\tmodule.exports = function ask(cb, as){\n\t\t\tif(!this.on){ return }\n\t\t\tvar lack = (this.opt||{}).lack || 9000;\n\t\t\tif(!('function' == typeof cb)){\n\t\t\t\tif(!cb){ return }\n\t\t\t\tvar id = cb['#'] || cb, tmp = (this.tag||'')[id];\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tif(as){\n\t\t\t\t\ttmp = this.on(id, as);\n\t\t\t\t\tclearTimeout(tmp.err);\n\t\t\t\t\ttmp.err = setTimeout(function(){ tmp.off() }, lack);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar id = (as && as['#']) || random(9);\n\t\t\tif(!cb){ return id }\n\t\t\tvar to = this.on(id, cb, as);\n\t\t\tto.err = to.err || setTimeout(function(){ to.off();\n\t\t\t\tto.next({err: \"Error: No ACK yet.\", lack: true});\n\t\t\t}, lack);\n\t\t\treturn id;\n\t\t}\n\t\tvar random = String.random || function(){ return Math.random().toString(36).slice(2) }\n\t})(USE, './ask');\n\n\t;USE(function(module){\n\n\t\tfunction Gun(o){\n\t\t\tif(o instanceof Gun){ return (this._ = {$: this}).$ }\n\t\t\tif(!(this instanceof Gun)){ return new Gun(o) }\n\t\t\treturn Gun.create(this._ = {$: this, opt: o});\n\t\t}\n\n\t\tGun.is = function($){ return ($ instanceof Gun) || ($ && $._ && ($ === $._.$)) || false }\n\n\t\tGun.version = 0.2020;\n\n\t\tGun.chain = Gun.prototype;\n\t\tGun.chain.toJSON = function(){};\n\n\t\tUSE('./shim');\n\t\tGun.valid = USE('./valid');\n\t\tGun.state = USE('./state');\n\t\tGun.on = USE('./onto');\n\t\tGun.dup = USE('./dup');\n\t\tGun.ask = USE('./ask');\n\n\t\t;(function(){\n\t\t\tGun.create = function(at){\n\t\t\t\tat.root = at.root || at;\n\t\t\t\tat.graph = at.graph || {};\n\t\t\t\tat.on = at.on || Gun.on;\n\t\t\t\tat.ask = at.ask || Gun.ask;\n\t\t\t\tat.dup = at.dup || Gun.dup();\n\t\t\t\tvar gun = at.$.opt(at.opt);\n\t\t\t\tif(!at.once){\n\t\t\t\t\tat.on('in', universe, at);\n\t\t\t\t\tat.on('out', universe, at);\n\t\t\t\t\tat.on('put', map, at);\n\t\t\t\t\tGun.on('create', at);\n\t\t\t\t\tat.on('create', at);\n\t\t\t\t}\n\t\t\t\tat.once = 1;\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tfunction universe(msg){\n\t\t\t\t// TODO: BUG! msg.out = null being set!\n\t\t\t\t//if(!F){ var eve = this; setTimeout(function(){ universe.call(eve, msg,1) },Math.random() * 100);return; } // ADD F TO PARAMS!\n\t\t\t\tif(!msg){ return }\n\t\t\t\tif(msg.out === universe){ this.to.next(msg); return }\n\t\t\t\tvar eve = this, as = eve.as, at = as.at || as, gun = at.$, dup = at.dup, tmp, DBG = msg.DBG;\n\t\t\t\t(tmp = msg['#']) || (tmp = msg['#'] = text_rand(9));\n\t\t\t\tif(dup.check(tmp)){ return } dup.track(tmp);\n\t\t\t\ttmp = msg._; msg._ = ('function' == typeof tmp)? tmp : function(){};\n\t\t\t\t(msg.$ && (msg.$ === (msg.$._||'').$)) || (msg.$ = gun);\n\t\t\t\tif(msg['@'] && !msg.put){ ack(msg) }\n\t\t\t\tif(!at.ask(msg['@'], msg)){ // is this machine listening for an ack?\n\t\t\t\t\tDBG && (DBG.u = +new Date);\n\t\t\t\t\tif(msg.put){ put(msg); return } else\n\t\t\t\t\tif(msg.get){ Gun.on.get(msg, gun) }\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.uc = +new Date);\n\t\t\t\teve.to.next(msg);\n\t\t\t\tDBG && (DBG.ua = +new Date);\n\t\t\t\tif(msg.nts || msg.NTS){ return } // TODO: This shouldn't be in core, but fast way to prevent NTS spread. Delete this line after all peers have upgraded to newer versions.\n\t\t\t\tmsg.out = universe; at.on('out', msg);\n\t\t\t\tDBG && (DBG.ue = +new Date);\n\t\t\t}\n\t\t\tfunction put(msg){\n\t\t\t\tif(!msg){ return }\n\t\t\t\tvar ctx = msg._||'', root = ctx.root = ((ctx.$ = msg.$||'')._||'').root;\n\t\t\t\tif(msg['@'] && ctx.faith && !ctx.miss){ // TODO: AXE may split/route based on 'put' what should we do here? Detect @ in AXE? I think we don't have to worry, as DAM will route it on @.\n\t\t\t\t\tmsg.out = universe;\n\t\t\t\t\troot.on('out', msg);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.latch = root.hatch; ctx.match = root.hatch = [];\n\t\t\t\tvar put = msg.put;\n\t\t\t\tvar DBG = ctx.DBG = msg.DBG, S = +new Date; CT = CT || S;\n\t\t\t\tif(put['#'] && put['.']){ /*root && root.on('put', msg);*/ return } // TODO: BUG! This needs to call HAM instead.\n\t\t\t\tDBG && (DBG.p = S);\n\t\t\t\tctx['#'] = msg['#'];\n\t\t\t\tctx.msg = msg;\n\t\t\t\tctx.all = 0;\n\t\t\t\tctx.stun = 1;\n\t\t\t\tvar nl = Object.keys(put);//.sort(); // TODO: This is unbounded operation, large graphs will be slower. Write our own CPU scheduled sort? Or somehow do it in below? Keys itself is not O(1) either, create ES5 shim over ?weak map? or custom which is constant.\n\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).pk = +new Date) - S, 'put sort');\n\t\t\t\tvar ni = 0, nj, kl, soul, node, states, err, tmp;\n\t\t\t\t(function pop(o){\n\t\t\t\t\tif(nj != ni){ nj = ni;\n\t\t\t\t\t\tif(!(soul = nl[ni])){\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).pd = +new Date) - S, 'put');\n\t\t\t\t\t\t\tfire(ctx);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!(node = put[soul])){ err = ERR+cut(soul)+\"no node.\" } else\n\t\t\t\t\t\tif(!(tmp = node._)){ err = ERR+cut(soul)+\"no meta.\" } else\n\t\t\t\t\t\tif(soul !== tmp['#']){ err = ERR+cut(soul)+\"soul not same.\" } else\n\t\t\t\t\t\tif(!(states = tmp['>'])){ err = ERR+cut(soul)+\"no state.\" }\n\t\t\t\t\t\tkl = Object.keys(node||{}); // TODO: .keys( is slow\n\t\t\t\t\t}\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tmsg.err = ctx.err = err; // invalid data should error and stun the message.\n\t\t\t\t\t\tfire(ctx);\n\t\t\t\t\t\t//console.log(\"handle error!\", err) // handle!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar i = 0, key; o = o || 0;\n\t\t\t\t\twhile(o++ < 9 && (key = kl[i++])){\n\t\t\t\t\t\tif('_' === key){ continue }\n\t\t\t\t\t\tvar val = node[key], state = states[key];\n\t\t\t\t\t\tif(u === state){ err = ERR+cut(key)+\"on\"+cut(soul)+\"no state.\"; break }\n\t\t\t\t\t\tif(!valid(val)){ err = ERR+cut(key)+\"on\"+cut(soul)+\"bad \"+(typeof val)+cut(val); break }\n\t\t\t\t\t\t//ctx.all++; //ctx.ack[soul+key] = '';\n\t\t\t\t\t\tham(val, key, soul, state, msg);\n\t\t\t\t\t\t++C; // courtesy count;\n\t\t\t\t\t}\n\t\t\t\t\tif((kl = kl.slice(i)).length){ turn(pop); return }\n\t\t\t\t\t++ni; kl = null; pop(o);\n\t\t\t\t}());\n\t\t\t} Gun.on.put = put;\n\t\t\t// TODO: MARK!!! clock below, reconnect sync, SEA certify wire merge, User.auth taking multiple times, // msg put, put, say ack, hear loop...\n\t\t\t// WASIS BUG! local peer not ack. .off other people: .open\n\t\t\tfunction ham(val, key, soul, state, msg){\n\t\t\t\tvar ctx = msg._||'', root = ctx.root, graph = root.graph, lot, tmp;\n\t\t\t\tvar vertex = graph[soul] || empty, was = state_is(vertex, key, 1), known = vertex[key];\n\t\t\t\t\n\t\t\t\tvar DBG = ctx.DBG; if(tmp = console.STAT){ if(!graph[soul] || !known){ tmp.has = (tmp.has || 0) + 1 } }\n\n\t\t\t\tvar now = State(), u;\n\t\t\t\tif(state > now){\n\t\t\t\t\tsetTimeout(function(){ ham(val, key, soul, state, msg) }, (tmp = state - now) > MD? MD : tmp); // Max Defer 32bit. :(\n\t\t\t\t\tconsole.STAT && console.STAT(((DBG||ctx).Hf = +new Date), tmp, 'future');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(state < was){ /*old;*/ if(true || !ctx.miss){ return } } // but some chains have a cache miss that need to re-fire. // TODO: Improve in future. // for AXE this would reduce rebroadcast, but GUN does it on message forwarding. // TURNS OUT CACHE MISS WAS NOT NEEDED FOR NEW CHAINS ANYMORE!!! DANGER DANGER DANGER, ALWAYS RETURN! (or am I missing something?)\n\t\t\t\tif(!ctx.faith){ // TODO: BUG? Can this be used for cache miss as well? // Yes this was a bug, need to check cache miss for RAD tests, but should we care about the faith check now? Probably not.\n\t\t\t\t\tif(state === was && (val === known || L(val) <= L(known))){ /*console.log(\"same\");*/ /*same;*/ if(!ctx.miss){ return } } // same\n\t\t\t\t}\n\t\t\t\tctx.stun++; // TODO: 'forget' feature in SEA tied to this, bad approach, but hacked in for now. Any changes here must update there.\n\t\t\t\tvar aid = msg['#']+ctx.all++, id = {toString: function(){ return aid }, _: ctx}; id.toJSON = id.toString; // this *trick* makes it compatible between old & new versions.\n\t\t\t\troot.dup.track(id)['#'] = msg['#']; // fixes new OK acks for RPC like RTC.\n\t\t\t\tDBG && (DBG.ph = DBG.ph || +new Date);\n\t\t\t\troot.on('put', {'#': id, '@': msg['@'], put: {'#': soul, '.': key, ':': val, '>': state}, ok: msg.ok, _: ctx});\n\t\t\t}\n\t\t\tfunction map(msg){\n\t\t\t\tvar DBG; if(DBG = (msg._||'').DBG){ DBG.pa = +new Date; DBG.pm = DBG.pm || +new Date}\n \tvar eve = this, root = eve.as, graph = root.graph, ctx = msg._, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n \tif((tmp = ctx.msg) && (tmp = tmp.put) && (tmp = tmp[soul])){ state_ify(tmp, key, state, val, soul) } // necessary! or else out messages do not get SEA transforms.\n \t//var bytes = ((graph[soul]||'')[key]||'').length||1;\n\t\t\t\tgraph[soul] = state_ify(graph[soul], key, state, val, soul);\n\t\t\t\tif(tmp = (root.next||'')[soul]){\n\t\t\t\t\t//tmp.bytes = (tmp.bytes||0) + ((val||'').length||1) - bytes;\n\t\t\t\t\t//if(tmp.bytes > 2**13){ Gun.log.once('byte-limit', \"Note: In the future, GUN peers will enforce a ~4KB query limit. Please see https://gun.eco/docs/Page\") }\n\t\t\t\t\ttmp.on('in', msg)\n\t\t\t\t}\n\t\t\t\tfire(ctx);\n\t\t\t\teve.to.next(msg);\n\t\t\t}\n\t\t\tfunction fire(ctx, msg){ var root;\n\t\t\t\tif(ctx.stop){ return }\n\t\t\t\tif(!ctx.err && 0 < --ctx.stun){ return } // TODO: 'forget' feature in SEA tied to this, bad approach, but hacked in for now. Any changes here must update there.\n\t\t\t\tctx.stop = 1;\n\t\t\t\tif(!(root = ctx.root)){ return }\n\t\t\t\tvar tmp = ctx.match; tmp.end = 1;\n\t\t\t\tif(tmp === root.hatch){ if(!(tmp = ctx.latch) || tmp.end){ delete root.hatch } else { root.hatch = tmp } }\n\t\t\t\tctx.hatch && ctx.hatch(); // TODO: rename/rework how put & this interact.\n\t\t\t\tsetTimeout.each(ctx.match, function(cb){cb && cb()}); \n\t\t\t\tif(!(msg = ctx.msg) || ctx.err || msg.err){ return }\n\t\t\t\tmsg.out = universe;\n\t\t\t\tctx.root.on('out', msg);\n\n\t\t\t\tCF(); // courtesy check;\n\t\t\t}\n\t\t\tfunction ack(msg){ // aggregate ACKs.\n\t\t\t\tvar id = msg['@'] || '', ctx, ok, tmp;\n\t\t\t\tif(!(ctx = id._)){\n\t\t\t\t\tvar dup = (dup = msg.$) && (dup = dup._) && (dup = dup.root) && (dup = dup.dup);\n\t\t\t\t\tif(!(dup = dup.check(id))){ return }\n\t\t\t\t\tmsg['@'] = dup['#'] || msg['@']; // This doesn't do anything anymore, backtrack it to something else?\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tctx.acks = (ctx.acks||0) + 1;\n\t\t\t\tif(ctx.err = msg.err){\n\t\t\t\t\tmsg['@'] = ctx['#'];\n\t\t\t\t\tfire(ctx); // TODO: BUG? How it skips/stops propagation of msg if any 1 item is error, this would assume a whole batch/resync has same malicious intent.\n\t\t\t\t}\n\t\t\t\tctx.ok = msg.ok || ctx.ok;\n\t\t\t\tif(!ctx.stop && !ctx.crack){ ctx.crack = ctx.match && ctx.match.push(function(){back(ctx)}) } // handle synchronous acks. NOTE: If a storage peer ACKs synchronously then the PUT loop has not even counted up how many items need to be processed, so ctx.STOP flags this and adds only 1 callback to the end of the PUT loop.\n\t\t\t\tback(ctx);\n\t\t\t}\n\t\t\tfunction back(ctx){\n\t\t\t\tif(!ctx || !ctx.root){ return }\n\t\t\t\tif(ctx.stun || ctx.acks !== ctx.all){ return }\n\t\t\t\tctx.root.on('in', {'@': ctx['#'], err: ctx.err, ok: ctx.err? u : ctx.ok || {'':1}});\n\t\t\t}\n\n\t\t\tvar ERR = \"Error: Invalid graph!\";\n\t\t\tvar cut = function(s){ return \" '\"+(''+s).slice(0,9)+\"...' \" }\n\t\t\tvar L = JSON.stringify, MD = 2147483647, State = Gun.state;\n\t\t\tvar C = 0, CT, CF = function(){if(C>999 && (C/-(CT - (CT = +new Date))>1)){Gun.window && console.log(\"Warning: You're syncing 1K+ records a second, faster than DOM can update - consider limiting query.\");CF=function(){C=0}}};\n\n\t\t}());\n\n\t\t;(function(){\n\t\t\tGun.on.get = function(msg, gun){\n\t\t\t\tvar root = gun._, get = msg.get, soul = get['#'], node = root.graph[soul], has = get['.'];\n\t\t\t\tvar next = root.next || (root.next = {}), at = next[soul];\n\n\t\t\t\t// TODO: Azarattum bug, what is in graph is not same as what is in next. Fix!\n\n\t\t\t\t// queue concurrent GETs?\n\t\t\t\t// TODO: consider tagging original message into dup for DAM.\n\t\t\t\t// TODO: ^ above? In chat app, 12 messages resulted in same peer asking for `#user.pub` 12 times. (same with #user GET too, yipes!) // DAM note: This also resulted in 12 replies from 1 peer which all had same ##hash but none of them deduped because each get was different.\n\t\t\t\t// TODO: Moving quick hacks fixing these things to axe for now.\n\t\t\t\t// TODO: a lot of GET #foo then GET #foo.\"\" happening, why?\n\t\t\t\t// TODO: DAM's ## hash check, on same get ACK, producing multiple replies still, maybe JSON vs YSON?\n\t\t\t\t// TMP note for now: viMZq1slG was chat LEX query #.\n\t\t\t\t/*if(gun !== (tmp = msg.$) && (tmp = (tmp||'')._)){\n\t\t\t\t\tif(tmp.Q){ tmp.Q[msg['#']] = ''; return } // chain does not need to ask for it again.\n\t\t\t\t\ttmp.Q = {};\n\t\t\t\t}*/\n\t\t\t\t/*if(u === has){\n\t\t\t\t\tif(at.Q){\n\t\t\t\t\t\t//at.Q[msg['#']] = '';\n\t\t\t\t\t\t//return;\n\t\t\t\t\t}\n\t\t\t\t\tat.Q = {};\n\t\t\t\t}*/\n\t\t\t\tvar ctx = msg._||{}, DBG = ctx.DBG = msg.DBG;\n\t\t\t\tDBG && (DBG.g = +new Date);\n\t\t\t\t//console.log(\"GET:\", get, node, has);\n\t\t\t\tif(!node){ return root.on('get', msg) }\n\t\t\t\tif(has){\n\t\t\t\t\tif('string' != typeof has || u === node[has]){\n\t\t\t\t\t\tif(!((at||'').next||'')[has]){ root.on('get', msg); return }\n\t\t\t\t\t}\n\t\t\t\t\tnode = state_ify({}, has, state_is(node, has), node[has], soul);\n\t\t\t\t\t// If we have a key in-memory, do we really need to fetch?\n\t\t\t\t\t// Maybe... in case the in-memory key we have is a local write\n\t\t\t\t\t// we still need to trigger a pull/merge from peers.\n\t\t\t\t}\n\t\t\t\t//Gun.window? Gun.obj.copy(node) : node; // HNPERF: If !browser bump Performance? Is this too dangerous to reference root graph? Copy / shallow copy too expensive for big nodes. Gun.obj.to(node); // 1 layer deep copy // Gun.obj.copy(node); // too slow on big nodes\n\t\t\t\tnode && ack(msg, node);\n\t\t\t\troot.on('get', msg); // send GET to storage adapters.\n\t\t\t}\n\t\t\tfunction ack(msg, node){\n\t\t\t\tvar S = +new Date, ctx = msg._||{}, DBG = ctx.DBG = msg.DBG;\n\t\t\t\tvar to = msg['#'], id = text_rand(9), keys = Object.keys(node||'').sort(), soul = ((node||'')._||'')['#'], kl = keys.length, j = 0, root = msg.$._.root, F = (node === root.graph[soul]);\n\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||ctx).gk = +new Date) - S, 'got keys');\n\t\t\t\t// PERF: Consider commenting this out to force disk-only reads for perf testing? // TODO: .keys( is slow\n\t\t\t\tnode && (function go(){\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tvar i = 0, k, put = {}, tmp;\n\t\t\t\t\twhile(i < 9 && (k = keys[i++])){\n\t\t\t\t\t\tstate_ify(put, k, state_is(node, k), node[k], soul);\n\t\t\t\t\t}\n\t\t\t\t\tkeys = keys.slice(i);\n\t\t\t\t\t(tmp = {})[soul] = put; put = tmp;\n\t\t\t\t\tvar faith; if(F){ faith = function(){}; faith.ram = faith.faith = true; } // HNPERF: We're testing performance improvement by skipping going through security again, but this should be audited.\n\t\t\t\t\ttmp = keys.length;\n\t\t\t\t\tconsole.STAT && console.STAT(S, -(S - (S = +new Date)), 'got copied some');\n\t\t\t\t\tDBG && (DBG.ga = +new Date);\n\t\t\t\t\troot.on('in', {'@': to, '#': id, put: put, '%': (tmp? (id = text_rand(9)) : u), $: root.$, _: faith, DBG: DBG, FOO: 1});\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'got in');\n\t\t\t\t\tif(!tmp){ return }\n\t\t\t\t\tsetTimeout.turn(go);\n\t\t\t\t}());\n\t\t\t\tif(!node){ root.on('in', {'@': msg['#']}) } // TODO: I don't think I like this, the default lS adapter uses this but \"not found\" is a sensitive issue, so should probably be handled more carefully/individually.\n\t\t\t} Gun.on.get.ack = ack;\n\t\t}());\n\n\t\t;(function(){\n\t\t\tGun.chain.opt = function(opt){\n\t\t\t\topt = opt || {};\n\t\t\t\tvar gun = this, at = gun._, tmp = opt.peers || opt;\n\t\t\t\tif(!Object.plain(opt)){ opt = {} }\n\t\t\t\tif(!Object.plain(at.opt)){ at.opt = opt }\n\t\t\t\tif('string' == typeof tmp){ tmp = [tmp] }\n\t\t\t\tif(!Object.plain(at.opt.peers)){ at.opt.peers = {}}\n\t\t\t\tif(tmp instanceof Array){\n\t\t\t\t\topt.peers = {};\n\t\t\t\t\ttmp.forEach(function(url){\n\t\t\t\t\t\tvar p = {}; p.id = p.url = url;\n\t\t\t\t\t\topt.peers[url] = at.opt.peers[url] = at.opt.peers[url] || p;\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tobj_each(opt, function each(k){ var v = this[k];\n\t\t\t\t\tif((this && this.hasOwnProperty(k)) || 'string' == typeof v || Object.empty(v)){ this[k] = v; return }\n\t\t\t\t\tif(v && v.constructor !== Object && !(v instanceof Array)){ return }\n\t\t\t\t\tobj_each(v, each);\n\t\t\t\t});\n\t\t\t\tat.opt.from = opt;\n\t\t\t\tGun.on('opt', at);\n\t\t\t\tat.opt.uuid = at.opt.uuid || function uuid(l){ return Gun.state().toString(36).replace('.','') + String.random(l||12) }\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t}());\n\n\t\tvar obj_each = function(o,f){ Object.keys(o).forEach(f,o) }, text_rand = String.random, turn = setTimeout.turn, valid = Gun.valid, state_is = Gun.state.is, state_ify = Gun.state.ify, u, empty = {}, C;\n\n\t\tGun.log = function(){ return (!Gun.log.off && C.log.apply(C, arguments)), [].slice.call(arguments).join(' ') };\n\t\tGun.log.once = function(w,s,o){ return (o = Gun.log.once)[w] = o[w] || 0, o[w]++ || Gun.log(s) };\n\n\t\tif(typeof window !== \"undefined\"){ (window.GUN = window.Gun = Gun).window = window }\n\t\ttry{ if(typeof MODULE !== \"undefined\"){ MODULE.exports = Gun } }catch(e){}\n\t\tmodule.exports = Gun;\n\t\t\n\t\t(Gun.window||{}).console = (Gun.window||{}).console || {log: function(){}};\n\t\t(C = console).only = function(i, s){ return (C.only.i && i === C.only.i && C.only.i++) && (C.log.apply(C, arguments) || s) };\n\n\t\t;\"Please do not remove welcome log unless you are paying for a monthly sponsorship, thanks!\";\n\t\tGun.log.once(\"welcome\", \"Hello wonderful person! :) Thanks for using GUN, please ask for help on http://chat.gun.eco if anything takes you longer than 5min to figure out!\");\n\t})(USE, './root');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.back = function(n, opt){ var tmp;\n\t\t\tn = n || 1;\n\t\t\tif(-1 === n || Infinity === n){\n\t\t\t\treturn this._.root.$;\n\t\t\t} else\n\t\t\tif(1 === n){\n\t\t\t\treturn (this._.back || this._).$;\n\t\t\t}\n\t\t\tvar gun = this, at = gun._;\n\t\t\tif(typeof n === 'string'){\n\t\t\t\tn = n.split('.');\n\t\t\t}\n\t\t\tif(n instanceof Array){\n\t\t\t\tvar i = 0, l = n.length, tmp = at;\n\t\t\t\tfor(i; i < l; i++){\n\t\t\t\t\ttmp = (tmp||empty)[n[i]];\n\t\t\t\t}\n\t\t\t\tif(u !== tmp){\n\t\t\t\t\treturn opt? gun : tmp;\n\t\t\t\t} else\n\t\t\t\tif((tmp = at.back)){\n\t\t\t\t\treturn tmp.$.back(n, opt);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif('function' == typeof n){\n\t\t\t\tvar yes, tmp = {back: at};\n\t\t\t\twhile((tmp = tmp.back)\n\t\t\t\t&& u === (yes = n(tmp, opt))){}\n\t\t\t\treturn yes;\n\t\t\t}\n\t\t\tif('number' == typeof n){\n\t\t\t\treturn (at.back || at).$.back(n - 1);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tvar empty = {}, u;\n\t})(USE, './back');\n\n\t;USE(function(module){\n\t\t// WARNING: GUN is very simple, but the JavaScript chaining API around GUN\n\t\t// is complicated and was extremely hard to build. If you port GUN to another\n\t\t// language, consider implementing an easier API to build.\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.chain = function(sub){\n\t\t\tvar gun = this, at = gun._, chain = new (sub || gun).constructor(gun), cat = chain._, root;\n\t\t\tcat.root = root = at.root;\n\t\t\tcat.id = ++root.once;\n\t\t\tcat.back = gun._;\n\t\t\tcat.on = Gun.on;\n\t\t\tcat.on('in', Gun.on.in, cat); // For 'in' if I add my own listeners to each then I MUST do it before in gets called. If I listen globally for all incoming data instead though, regardless of individual listeners, I can transform the data there and then as well.\n\t\t\tcat.on('out', Gun.on.out, cat); // However for output, there isn't really the global option. I must listen by adding my own listener individually BEFORE this one is ever called.\n\t\t\treturn chain;\n\t\t}\n\n\t\tfunction output(msg){\n\t\t\tvar put, get, at = this.as, back = at.back, root = at.root, tmp;\n\t\t\tif(!msg.$){ msg.$ = at.$ }\n\t\t\tthis.to.next(msg);\n\t\t\tif(at.err){ at.on('in', {put: at.put = u, $: at.$}); return }\n\t\t\tif(get = msg.get){\n\t\t\t\t/*if(u !== at.put){\n\t\t\t\t\tat.on('in', at);\n\t\t\t\t\treturn;\n\t\t\t\t}*/\n\t\t\t\tif(root.pass){ root.pass[at.id] = at; } // will this make for buggy behavior elsewhere?\n\t\t\t\tif(at.lex){ Object.keys(at.lex).forEach(function(k){ tmp[k] = at.lex[k] }, tmp = msg.get = msg.get || {}) }\n\t\t\t\tif(get['#'] || at.soul){\n\t\t\t\t\tget['#'] = get['#'] || at.soul;\n\t\t\t\t\t//root.graph[get['#']] = root.graph[get['#']] || {_:{'#':get['#'],'>':{}}};\n\t\t\t\t\tmsg['#'] || (msg['#'] = text_rand(9)); // A3120 ?\n\t\t\t\t\tback = (root.$.get(get['#'])._);\n\t\t\t\t\tif(!(get = get['.'])){ // soul\n\t\t\t\t\t\ttmp = back.ask && back.ask['']; // check if we have already asked for the full node\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[''] = back; // add a flag that we are now.\n\t\t\t\t\t\tif(u !== back.put){ // if we already have data,\n\t\t\t\t\t\t\tback.on('in', back); // send what is cached down the chain\n\t\t\t\t\t\t\tif(tmp){ return } // and don't ask for it again.\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmsg.$ = back.$;\n\t\t\t\t\t} else\n\t\t\t\t\tif(obj_has(back.put, get)){ // TODO: support #LEX !\n\t\t\t\t\t\ttmp = back.ask && back.ask[get];\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[get] = back.$.get(get)._;\n\t\t\t\t\t\tback.on('in', {get: get, put: {'#': back.soul, '.': get, ':': back.put[get], '>': state_is(root.graph[back.soul], get)}});\n\t\t\t\t\t\tif(tmp){ return }\n\t\t\t\t\t}\n\t\t\t\t\t\t/*put = (back.$.get(get)._);\n\t\t\t\t\t\tif(!(tmp = put.ack)){ put.ack = -1 }\n\t\t\t\t\t\tback.on('in', {\n\t\t\t\t\t\t\t$: back.$,\n\t\t\t\t\t\t\tput: Gun.state.ify({}, get, Gun.state(back.put, get), back.put[get]),\n\t\t\t\t\t\t\tget: back.get\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif(tmp){ return }\n\t\t\t\t\t} else\n\t\t\t\t\tif('string' != typeof get){\n\t\t\t\t\t\tvar put = {}, meta = (back.put||{})._;\n\t\t\t\t\t\tGun.obj.map(back.put, function(v,k){\n\t\t\t\t\t\t\tif(!Gun.text.match(k, get)){ return }\n\t\t\t\t\t\t\tput[k] = v;\n\t\t\t\t\t\t})\n\t\t\t\t\t\tif(!Gun.obj.empty(put)){\n\t\t\t\t\t\t\tput._ = meta;\n\t\t\t\t\t\t\tback.on('in', {$: back.$, put: put, get: back.get})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp = at.lex){\n\t\t\t\t\t\t\ttmp = (tmp._) || (tmp._ = function(){});\n\t\t\t\t\t\t\tif(back.ack < tmp.ask){ tmp.ask = back.ack }\n\t\t\t\t\t\t\tif(tmp.ask){ return }\n\t\t\t\t\t\t\ttmp.ask = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t\troot.ask(ack, msg); // A3120 ?\n\t\t\t\t\treturn root.on('in', msg);\n\t\t\t\t}\n\t\t\t\t//if(root.now){ root.now[at.id] = root.now[at.id] || true; at.pass = {} }\n\t\t\t\tif(get['.']){\n\t\t\t\t\tif(at.get){\n\t\t\t\t\t\tmsg = {get: {'.': at.get}, $: at.$};\n\t\t\t\t\t\t(back.ask || (back.ask = {}))[at.get] = msg.$._; // TODO: PERFORMANCE? More elegant way?\n\t\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t\t}\n\t\t\t\t\tmsg = {get: at.lex? msg.get : {}, $: at.$};\n\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t}\n\t\t\t\t(at.ask || (at.ask = {}))[''] = at;\t //at.ack = at.ack || -1;\n\t\t\t\tif(at.get){\n\t\t\t\t\tget['.'] = at.get;\n\t\t\t\t\t(back.ask || (back.ask = {}))[at.get] = msg.$._; // TODO: PERFORMANCE? More elegant way?\n\t\t\t\t\treturn back.on('out', msg);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn back.on('out', msg);\n\t\t}; Gun.on.out = output;\n\n\t\tfunction input(msg, cat){ cat = cat || this.as; // TODO: V8 may not be able to optimize functions with different parameter calls, so try to do benchmark to see if there is any actual difference.\n\t\t\tvar root = cat.root, gun = msg.$ || (msg.$ = cat.$), at = (gun||'')._ || empty, tmp = msg.put||'', soul = tmp['#'], key = tmp['.'], change = (u !== tmp['='])? tmp['='] : tmp[':'], state = tmp['>'] || -Infinity, sat; // eve = event, at = data at, cat = chain at, sat = sub at (children chains).\n\t\t\tif(u !== msg.put && (u === tmp['#'] || u === tmp['.'] || (u === tmp[':'] && u === tmp['=']) || u === tmp['>'])){ // convert from old format\n\t\t\t\tif(!valid(tmp)){\n\t\t\t\t\tif(!(soul = ((tmp||'')._||'')['#'])){ console.log(\"chain not yet supported for\", tmp, '...', msg, cat); return; }\n\t\t\t\t\tgun = cat.root.$.get(soul);\n\t\t\t\t\treturn setTimeout.each(Object.keys(tmp).sort(), function(k){ // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync?\n\t\t\t\t\t\tif('_' == k || u === (state = state_is(tmp, k))){ return }\n\t\t\t\t\t\tcat.on('in', {$: gun, put: {'#': soul, '.': k, '=': tmp[k], '>': state}, VIA: msg});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcat.on('in', {$: at.back.$, put: {'#': soul = at.back.soul, '.': key = at.has || at.get, '=': tmp, '>': state_is(at.back.put, key)}, via: msg}); // TODO: This could be buggy! It assumes/approxes data, other stuff could have corrupted it.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif((msg.seen||'')[cat.id]){ return } (msg.seen || (msg.seen = function(){}))[cat.id] = cat; // help stop some infinite loops\n\n\t\t\tif(cat !== at){ // don't worry about this when first understanding the code, it handles changing contexts on a message. A soul chain will never have a different context.\n\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); // make copy of message\n\t\t\t\ttmp.get = cat.get || tmp.get;\n\t\t\t\tif(!cat.soul && !cat.has){ // if we do not recognize the chain type\n\t\t\t\t\ttmp.$$$ = tmp.$$$ || cat.$; // make a reference to wherever it came from.\n\t\t\t\t} else\n\t\t\t\tif(at.soul){ // a has (property) chain will have a different context sometimes if it is linked (to a soul chain). Anything that is not a soul or has chain, will always have different contexts.\n\t\t\t\t\ttmp.$ = cat.$;\n\t\t\t\t\ttmp.$$ = tmp.$$ || at.$;\n\t\t\t\t}\n\t\t\t\tmsg = tmp; // use the message with the new context instead;\n\t\t\t}\n\t\t\tunlink(msg, cat);\n\n\t\t\tif(((cat.soul/* && (cat.ask||'')['']*/) || msg.$$) && state >= state_is(root.graph[soul], key)){ // The root has an in-memory cache of the graph, but if our peer has asked for the data then we want a per deduplicated chain copy of the data that might have local edits on it.\n\t\t\t\t(tmp = root.$.get(soul)._).put = state_ify(tmp.put, key, state, change, soul);\n\t\t\t}\n\t\t\tif(!at.soul /*&& (at.ask||'')['']*/ && state >= state_is(root.graph[soul], key) && (sat = (root.$.get(soul)._.next||'')[key])){ // Same as above here, but for other types of chains. // TODO: Improve perf by preventing echoes recaching.\n\t\t\t\tsat.put = change; // update cache\n\t\t\t\tif('string' == typeof (tmp = valid(change))){\n\t\t\t\t\tsat.put = root.$.get(tmp)._.put || change; // share same cache as what we're linked to.\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.to && this.to.next(msg); // 1st API job is to call all chain listeners.\n\t\t\t// TODO: Make input more reusable by only doing these (some?) calls if we are a chain we recognize? This means each input listener would be responsible for when listeners need to be called, which makes sense, as they might want to filter.\n\t\t\tcat.any && setTimeout.each(Object.keys(cat.any), function(any){ (any = cat.any[any]) && any(msg) },0,99); // 1st API job is to call all chain listeners. // TODO: .keys( is slow // BUG: Some re-in logic may depend on this being sync.\n\t\t\tcat.echo && setTimeout.each(Object.keys(cat.echo), function(lat){ (lat = cat.echo[lat]) && lat.on('in', msg) },0,99); // & linked at chains // TODO: .keys( is slow // BUG: Some re-in logic may depend on this being sync.\n\n\t\t\tif(((msg.$$||'')._||at).soul){ // comments are linear, but this line of code is non-linear, so if I were to comment what it does, you'd have to read 42 other comments first... but you can't read any of those comments until you first read this comment. What!? // shouldn't this match link's check?\n\t\t\t\t// is there cases where it is a $$ that we do NOT want to do the following? \n\t\t\t\tif((sat = cat.next) && (sat = sat[key])){ // TODO: possible trick? Maybe have `ionmap` code set a sat? // TODO: Maybe we should do `cat.ask` instead? I guess does not matter.\n\t\t\t\t\ttmp = {}; Object.keys(msg).forEach(function(k){ tmp[k] = msg[k] });\n\t\t\t\t\ttmp.$ = (msg.$$||msg.$).get(tmp.get = key); delete tmp.$$; delete tmp.$$$;\n\t\t\t\t\tsat.on('in', tmp);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlink(msg, cat);\n\t\t}; Gun.on.in = input;\n\n\t\tfunction link(msg, cat){ cat = cat || this.as || msg.$._;\n\t\t\tif(msg.$$ && this !== Gun.on){ return } // $$ means we came from a link, so we are at the wrong level, thus ignore it unless overruled manually by being called directly.\n\t\t\tif(!msg.put || cat.soul){ return } // But you cannot overrule being linked to nothing, or trying to link a soul chain - that must never happen.\n\t\t\tvar put = msg.put||'', link = put['=']||put[':'], tmp;\n\t\t\tvar root = cat.root, tat = root.$.get(put['#']).get(put['.'])._;\n\t\t\tif('string' != typeof (link = valid(link))){\n\t\t\t\tif(this === Gun.on){ (tat.echo || (tat.echo = {}))[cat.id] = cat } // allow some chain to explicitly force linking to simple data.\n\t\t\t\treturn; // by default do not link to data that is not a link.\n\t\t\t}\n\t\t\tif((tat.echo || (tat.echo = {}))[cat.id] // we've already linked ourselves so we do not need to do it again. Except... (annoying implementation details)\n\t\t\t\t&& !(root.pass||'')[cat.id]){ return } // if a new event listener was added, we need to make a pass through for it. The pass will be on the chain, not always the chain passed down. \n\t\t\tif(tmp = root.pass){ if(tmp[link+cat.id]){ return } tmp[link+cat.id] = 1 } // But the above edge case may \"pass through\" on a circular graph causing infinite passes, so we hackily add a temporary check for that.\n\n\t\t\t(tat.echo||(tat.echo={}))[cat.id] = cat; // set ourself up for the echo! // TODO: BUG? Echo to self no longer causes problems? Confirm.\n\n\t\t\tif(cat.has){ cat.link = link }\n\t\t\tvar sat = root.$.get(tat.link = link)._; // grab what we're linking to.\n\t\t\t(sat.echo || (sat.echo = {}))[tat.id] = tat; // link it.\n\t\t\tvar tmp = cat.ask||''; // ask the chain for what needs to be loaded next!\n\t\t\tif(tmp[''] || cat.lex){ // we might need to load the whole thing // TODO: cat.lex probably has edge case bugs to it, need more test coverage.\n\t\t\t\tsat.on('out', {get: {'#': link}});\n\t\t\t}\n\t\t\tsetTimeout.each(Object.keys(tmp), function(get, sat){ // if sub chains are asking for data. // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync?\n\t\t\t\tif(!get || !(sat = tmp[get])){ return }\n\t\t\t\tsat.on('out', {get: {'#': link, '.': get}}); // go get it.\n\t\t\t},0,99);\n\t\t}; Gun.on.link = link;\n\n\t\tfunction unlink(msg, cat){ // ugh, so much code for seemingly edge case behavior.\n\t\t\tvar put = msg.put||'', change = (u !== put['='])? put['='] : put[':'], root = cat.root, link, tmp;\n\t\t\tif(u === change){ // 1st edge case: If we have a brand new database, no data will be found.\n\t\t\t\t// TODO: BUG! because emptying cache could be async from below, make sure we are not emptying a newer cache. So maybe pass an Async ID to check against?\n\t\t\t\t// TODO: BUG! What if this is a map? // Warning! Clearing things out needs to be robust against sync/async ops, or else you'll see `map val get put` test catastrophically fail because map attempts to link when parent graph is streamed before child value gets set. Need to differentiate between lack acks and force clearing.\n\t\t\t\tif(cat.soul && u !== cat.put){ return } // data may not be found on a soul, but if a soul already has data, then nothing can clear the soul as a whole.\n\t\t\t\t//if(!cat.has){ return }\n\t\t\t\ttmp = (msg.$$||msg.$||'')._||'';\n\t\t\t\tif(msg['@'] && (u !== tmp.put || u !== cat.put)){ return } // a \"not found\" from other peers should not clear out data if we have already found it.\n\t\t\t\t//if(cat.has && u === cat.put && !(root.pass||'')[cat.id]){ return } // if we are already unlinked, do not call again, unless edge case. // TODO: BUG! This line should be deleted for \"unlink deeply nested\".\n\t\t\t\tif(link = cat.link || msg.linked){\n\t\t\t\t\tdelete (root.$.get(link)._.echo||'')[cat.id];\n\t\t\t\t}\n\t\t\t\tif(cat.has){ // TODO: Empty out links, maps, echos, acks/asks, etc.?\n\t\t\t\t\tcat.link = null;\n\t\t\t\t}\n\t\t\t\tcat.put = u; // empty out the cache if, for example, alice's car's color no longer exists (relative to alice) if alice no longer has a car.\n\t\t\t\t// TODO: BUG! For maps, proxy this so the individual sub is triggered, not all subs.\n\t\t\t\tsetTimeout.each(Object.keys(cat.next||''), function(get, sat){ // empty out all sub chains. // TODO: .keys( is slow // BUG? ?Some re-in logic may depend on this being sync? // TODO: BUG? This will trigger deeper put first, does put logic depend on nested order? // TODO: BUG! For map, this needs to be the isolated child, not all of them.\n\t\t\t\t\tif(!(sat = cat.next[get])){ return }\n\t\t\t\t\t//if(cat.has && u === sat.put && !(root.pass||'')[sat.id]){ return } // if we are already unlinked, do not call again, unless edge case. // TODO: BUG! This line should be deleted for \"unlink deeply nested\".\n\t\t\t\t\tif(link){ delete (root.$.get(link).get(get)._.echo||'')[sat.id] }\n\t\t\t\t\tsat.on('in', {get: get, put: u, $: sat.$}); // TODO: BUG? Add recursive seen check?\n\t\t\t\t},0,99);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(cat.soul){ return } // a soul cannot unlink itself.\n\t\t\tif(msg.$$){ return } // a linked chain does not do the unlinking, the sub chain does. // TODO: BUG? Will this cancel maps?\n\t\t\tlink = valid(change); // need to unlink anytime we are not the same link, though only do this once per unlink (and not on init).\n\t\t\ttmp = msg.$._||'';\n\t\t\tif(link === tmp.link || (cat.has && !tmp.link)){\n\t\t\t\tif((root.pass||'')[cat.id] && 'string' !== typeof link){\n\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete (tmp.echo||'')[cat.id];\n\t\t\tunlink({get: cat.get, put: u, $: msg.$, linked: msg.linked = msg.linked || tmp.link}, cat); // unlink our sub chains.\n\t\t}; Gun.on.unlink = unlink;\n\n\t\tfunction ack(msg, ev){\n\t\t\t//if(!msg['%'] && (this||'').off){ this.off() } // do NOT memory leak, turn off listeners! Now handled by .ask itself\n\t\t\t// manhattan:\n\t\t\tvar as = this.as, at = as.$._, root = at.root, get = as.get||'', tmp = (msg.put||'')[get['#']]||'';\n\t\t\tif(!msg.put || ('string' == typeof get['.'] && u === tmp[get['.']])){\n\t\t\t\tif(u !== at.put){ return }\n\t\t\t\tif(!at.soul && !at.has){ return } // TODO: BUG? For now, only core-chains will handle not-founds, because bugs creep in if non-core chains are used as $ but we can revisit this later for more powerful extensions.\n\t\t\t\tat.ack = (at.ack || 0) + 1;\n\t\t\t\tat.on('in', {\n\t\t\t\t\tget: at.get,\n\t\t\t\t\tput: at.put = u,\n\t\t\t\t\t$: at.$,\n\t\t\t\t\t'@': msg['@']\n\t\t\t\t});\n\t\t\t\t/*(tmp = at.Q) && setTimeout.each(Object.keys(tmp), function(id){ // TODO: Temporary testing, not integrated or being used, probably delete.\n\t\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); tmp['@'] = id; // copy message\n\t\t\t\t\troot.on('in', tmp);\n\t\t\t\t}); delete at.Q;*/\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t(msg._||{}).miss = 1;\n\t\t\tGun.on.put(msg);\n\t\t\treturn; // eom\n\t\t}\n\n\t\tvar empty = {}, u, text_rand = String.random, valid = Gun.valid, obj_has = function(o, k){ return o && Object.prototype.hasOwnProperty.call(o, k) }, state = Gun.state, state_is = state.is, state_ify = state.ify;\n\t})(USE, './chain');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.get = function(key, cb, as){\n\t\t\tvar gun, tmp;\n\t\t\tif(typeof key === 'string'){\n\t\t\t\tif(key.length == 0) {\t\n\t\t\t\t\t(gun = this.chain())._.err = {err: Gun.log('0 length key!', key)};\n\t\t\t\t\tif(cb){ cb.call(gun, gun._.err) }\n\t\t\t\t\treturn gun;\n\t\t\t\t}\n\t\t\t\tvar back = this, cat = back._;\n\t\t\t\tvar next = cat.next || empty;\n\t\t\t\tif(!(gun = next[key])){\n\t\t\t\t\tgun = key && cache(key, back);\n\t\t\t\t}\n\t\t\t\tgun = gun && gun.$;\n\t\t\t} else\n\t\t\tif('function' == typeof key){\n\t\t\t\tif(true === cb){ return soul(this, key, cb, as), this }\n\t\t\t\tgun = this;\n\t\t\t\tvar cat = gun._, opt = cb || {}, root = cat.root, id;\n\t\t\t\topt.at = cat;\n\t\t\t\topt.ok = key;\n\t\t\t\tvar wait = {}; // can we assign this to the at instead, like in once?\n\t\t\t\t//var path = []; cat.$.back(at => { at.get && path.push(at.get.slice(0,9))}); path = path.reverse().join('.');\n\t\t\t\tfunction any(msg, eve, f){\n\t\t\t\t\tif(any.stun){ return }\n\t\t\t\t\tif((tmp = root.pass) && !tmp[id]){ return }\n\t\t\t\t\tvar at = msg.$._, sat = (msg.$$||'')._, data = (sat||at).put, odd = (!at.has && !at.soul), test = {}, link, tmp;\n\t\t\t\t\tif(odd || u === data){ // handles non-core\n\t\t\t\t\t\tdata = (u === ((tmp = msg.put)||'')['='])? (u === (tmp||'')[':'])? tmp : tmp[':'] : tmp['='];\n\t\t\t\t\t}\n\t\t\t\t\tif(link = ('string' == typeof (tmp = Gun.valid(data)))){\n\t\t\t\t\t\tdata = (u === (tmp = root.$.get(tmp)._.put))? opt.not? u : data : tmp;\n\t\t\t\t\t}\n\t\t\t\t\tif(opt.not && u === data){ return }\n\t\t\t\t\tif(u === opt.stun){\n\t\t\t\t\t\tif((tmp = root.stun) && tmp.on){\n\t\t\t\t\t\t\tcat.$.back(function(a){ // our chain stunned?\n\t\t\t\t\t\t\t\ttmp.on(''+a.id, test = {});\n\t\t\t\t\t\t\t\tif((test.run || 0) < any.id){ return test } // if there is an earlier stun on gapless parents/self.\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t!test.run && tmp.on(''+at.id, test = {}); // this node stunned?\n\t\t\t\t\t\t\t!test.run && sat && tmp.on(''+sat.id, test = {}); // linked node stunned?\n\t\t\t\t\t\t\tif(any.id > test.run){\n\t\t\t\t\t\t\t\tif(!test.stun || test.stun.end){\n\t\t\t\t\t\t\t\t\ttest.stun = tmp.on('stun');\n\t\t\t\t\t\t\t\t\ttest.stun = test.stun && test.stun.last;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(test.stun && !test.stun.end){\n\t\t\t\t\t\t\t\t\t//if(odd && u === data){ return }\n\t\t\t\t\t\t\t\t\t//if(u === msg.put){ return } // \"not found\" acks will be found if there is stun, so ignore these.\n\t\t\t\t\t\t\t\t\t(test.stun.add || (test.stun.add = {}))[id] = function(){ any(msg,eve,1) } // add ourself to the stun callback list that is called at end of the write.\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(/*odd &&*/ u === data){ f = 0 } // if data not found, keep waiting/trying.\n\t\t\t\t\t\t/*if(f && u === data){\n\t\t\t\t\t\t\tcat.on('out', opt.out);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}*/\n\t\t\t\t\t\tif((tmp = root.hatch) && !tmp.end && u === opt.hatch && !f){ // quick hack! // What's going on here? Because data is streamed, we get things one by one, but a lot of developers would rather get a callback after each batch instead, so this does that by creating a wait list per chain id that is then called at the end of the batch by the hatch code in the root put listener.\n\t\t\t\t\t\t\tif(wait[at.$._.id]){ return } wait[at.$._.id] = 1;\n\t\t\t\t\t\t\ttmp.push(function(){any(msg,eve,1)});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}; wait = {}; // end quick hack.\n\t\t\t\t\t}\n\t\t\t\t\t// call:\n\t\t\t\t\tif(root.pass){ if(root.pass[id+at.id]){ return } root.pass[id+at.id] = 1 }\n\t\t\t\t\tif(opt.on){ opt.ok.call(at.$, data, at.get, msg, eve || any); return } // TODO: Also consider breaking `this` since a lot of people do `=>` these days and `.call(` has slower performance.\n\t\t\t\t\tif(opt.v2020){ opt.ok(msg, eve || any); return }\n\t\t\t\t\tObject.keys(msg).forEach(function(k){ tmp[k] = msg[k] }, tmp = {}); msg = tmp; msg.put = data; // 2019 COMPATIBILITY! TODO: GET RID OF THIS!\n\t\t\t\t\topt.ok.call(opt.as, msg, eve || any); // is this the right\n\t\t\t\t};\n\t\t\t\tany.at = cat;\n\t\t\t\t//(cat.any||(cat.any=function(msg){ setTimeout.each(Object.keys(cat.any||''), function(act){ (act = cat.any[act]) && act(msg) },0,99) }))[id = String.random(7)] = any; // maybe switch to this in future?\n\t\t\t\t(cat.any||(cat.any={}))[id = String.random(7)] = any;\n\t\t\t\tany.off = function(){ any.stun = 1; if(!cat.any){ return } delete cat.any[id] }\n\t\t\t\tany.rid = rid; // logic from old version, can we clean it up now?\n\t\t\t\tany.id = opt.run || ++root.once; // used in callback to check if we are earlier than a write. // will this ever cause an integer overflow?\n\t\t\t\ttmp = root.pass; (root.pass = {})[id] = 1; // Explanation: test trade-offs want to prevent recursion so we add/remove pass flag as it gets fulfilled to not repeat, however map map needs many pass flags - how do we reconcile?\n\t\t\t\topt.out = opt.out || {get: {}};\n\t\t\t\tcat.on('out', opt.out);\n\t\t\t\troot.pass = tmp;\n\t\t\t\treturn gun;\n\t\t\t} else\n\t\t\tif('number' == typeof key){\n\t\t\t\treturn this.get(''+key, cb, as);\n\t\t\t} else\n\t\t\tif('string' == typeof (tmp = valid(key))){\n\t\t\t\treturn this.get(tmp, cb, as);\n\t\t\t} else\n\t\t\tif(tmp = this.get.next){\n\t\t\t\tgun = tmp(this, key);\n\t\t\t}\n\t\t\tif(!gun){\n\t\t\t\t(gun = this.chain())._.err = {err: Gun.log('Invalid get request!', key)}; // CLEAN UP\n\t\t\t\tif(cb){ cb.call(gun, gun._.err) }\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tif(cb && 'function' == typeof cb){\n\t\t\t\tgun.get(cb, as);\n\t\t\t}\n\t\t\treturn gun;\n\t\t}\n\t\tfunction cache(key, back){\n\t\t\tvar cat = back._, next = cat.next, gun = back.chain(), at = gun._;\n\t\t\tif(!next){ next = cat.next = {} }\n\t\t\tnext[at.get = key] = at;\n\t\t\tif(back === cat.root.$){\n\t\t\t\tat.soul = key;\n\t\t\t\t//at.put = {};\n\t\t\t} else\n\t\t\tif(cat.soul || cat.has){\n\t\t\t\tat.has = key;\n\t\t\t\t//if(obj_has(cat.put, key)){\n\t\t\t\t\t//at.put = cat.put[key];\n\t\t\t\t//}\n\t\t\t}\n\t\t\treturn at;\n\t\t}\n\t\tfunction soul(gun, cb, opt, as){\n\t\t\tvar cat = gun._, acks = 0, tmp;\n\t\t\tif(tmp = cat.soul || cat.link){ return cb(tmp, as, cat) }\n\t\t\tif(cat.jam){ return cat.jam.push([cb, as]) }\n\t\t\tcat.jam = [[cb,as]];\n\t\t\tgun.get(function go(msg, eve){\n\t\t\t\tif(u === msg.put && !cat.root.opt.super && (tmp = Object.keys(cat.root.opt.peers).length) && ++acks <= tmp){ // TODO: super should not be in core code, bring AXE up into core instead to fix? // TODO: .keys( is slow\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\teve.rid(msg);\n\t\t\t\tvar at = ((at = msg.$) && at._) || {}, i = 0, as;\n\t\t\t\ttmp = cat.jam; delete cat.jam; // tmp = cat.jam.splice(0, 100);\n\t\t\t\t//if(tmp.length){ process.nextTick(function(){ go(msg, eve) }) }\n\t\t\t\twhile(as = tmp[i++]){ //Gun.obj.map(tmp, function(as, cb){\n\t\t\t\t\tvar cb = as[0], id; as = as[1];\n\t\t\t\t\tcb && cb(id = at.link || at.soul || Gun.valid(msg.put) || ((msg.put||{})._||{})['#'], as, msg, eve);\n\t\t\t\t} //);\n\t\t\t}, {out: {get: {'.':true}}});\n\t\t\treturn gun;\n\t\t}\n\t\tfunction rid(at){\n\t\t\tvar cat = this.at || this.on;\n\t\t\tif(!at || cat.soul || cat.has){ return this.off() }\n\t\t\tif(!(at = (at = (at = at.$ || at)._ || at).id)){ return }\n\t\t\tvar map = cat.map, tmp, seen;\n\t\t\t//if(!map || !(tmp = map[at]) || !(tmp = tmp.at)){ return }\n\t\t\tif(tmp = (seen = this.seen || (this.seen = {}))[at]){ return true }\n\t\t\tseen[at] = true;\n\t\t\treturn;\n\t\t\t//tmp.echo[cat.id] = {}; // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.\n\t\t\t//obj.del(map, at); // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.\n\t\t\treturn;\n\t\t}\n\t\tvar empty = {}, valid = Gun.valid, u;\n\t})(USE, './get');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tGun.chain.put = function(data, cb, as){ // I rewrote it :)\n\t\t\tvar gun = this, at = gun._, root = at.root;\n\t\t\tas = as || {};\n\t\t\tas.root = at.root;\n\t\t\tas.run || (as.run = root.once);\n\t\t\tstun(as, at.id); // set a flag for reads to check if this chain is writing.\n\t\t\tas.ack = as.ack || cb;\n\t\t\tas.via = as.via || gun;\n\t\t\tas.data = as.data || data;\n\t\t\tas.soul || (as.soul = at.soul || ('string' == typeof cb && cb));\n\t\t\tvar s = as.state = as.state || Gun.state();\n\t\t\tif('function' == typeof data){ data(function(d){ as.data = d; gun.put(u,u,as) }); return gun }\n\t\t\tif(!as.soul){ return get(as), gun }\n\t\t\tas.$ = root.$.get(as.soul); // TODO: This may not allow user chaining and similar?\n\t\t\tas.todo = [{it: as.data, ref: as.$}];\n\t\t\tas.turn = as.turn || turn;\n\t\t\tas.ran = as.ran || ran;\n\t\t\t//var path = []; as.via.back(at => { at.get && path.push(at.get.slice(0,9)) }); path = path.reverse().join('.');\n\t\t\t// TODO: Perf! We only need to stun chains that are being modified, not necessarily written to.\n\t\t\t(function walk(){\n\t\t\t\tvar to = as.todo, at = to.pop(), d = at.it, cid = at.ref && at.ref._.id, v, k, cat, tmp, g;\n\t\t\t\tstun(as, at.ref);\n\t\t\t\tif(tmp = at.todo){\n\t\t\t\t\tk = tmp.pop(); d = d[k];\n\t\t\t\t\tif(tmp.length){ to.push(at) }\n\t\t\t\t}\n\t\t\t\tk && (to.path || (to.path = [])).push(k);\n\t\t\t\tif(!(v = valid(d)) && !(g = Gun.is(d))){\n\t\t\t\t\tif(!Object.plain(d)){ ran.err(as, \"Invalid data: \"+ check(d) +\" at \" + (as.via.back(function(at){at.get && tmp.push(at.get)}, tmp = []) || tmp.join('.'))+'.'+(to.path||[]).join('.')); return }\n\t\t\t\t\tvar seen = as.seen || (as.seen = []), i = seen.length;\n\t\t\t\t\twhile(i--){ if(d === (tmp = seen[i]).it){ v = d = tmp.link; break } }\n\t\t\t\t}\n\t\t\t\tif(k && v){ at.node = state_ify(at.node, k, s, d) } // handle soul later.\n\t\t\t\telse {\n\t\t\t\t\tif(!as.seen){ ran.err(as, \"Data at root of graph must be a node (an object).\"); return }\n\t\t\t\t\tas.seen.push(cat = {it: d, link: {}, todo: g? [] : Object.keys(d).sort().reverse(), path: (to.path||[]).slice(), up: at}); // Any perf reasons to CPU schedule this .keys( ?\n\t\t\t\t\tat.node = state_ify(at.node, k, s, cat.link);\n\t\t\t\t\t!g && cat.todo.length && to.push(cat);\n\t\t\t\t\t// ---------------\n\t\t\t\t\tvar id = as.seen.length;\n\t\t\t\t\t(as.wait || (as.wait = {}))[id] = '';\n\t\t\t\t\ttmp = (cat.ref = (g? d : k? at.ref.get(k) : at.ref))._;\n\t\t\t\t\t(tmp = (d && (d._||'')['#']) || tmp.soul || tmp.link)? resolve({soul: tmp}) : cat.ref.get(resolve, {run: as.run, /*hatch: 0,*/ v2020:1, out:{get:{'.':' '}}}); // TODO: BUG! This should be resolve ONLY soul to prevent full data from being loaded. // Fixed now?\n\t\t\t\t\t//setTimeout(function(){ if(F){ return } console.log(\"I HAVE NOT BEEN CALLED!\", path, id, cat.ref._.id, k) }, 9000); var F; // MAKE SURE TO ADD F = 1 below!\n\t\t\t\t\tfunction resolve(msg, eve){\n\t\t\t\t\t\tvar end = cat.link['#'];\n\t\t\t\t\t\tif(eve){ eve.off(); eve.rid(msg) } // TODO: Too early! Check all peers ack not found.\n\t\t\t\t\t\t// TODO: BUG maybe? Make sure this does not pick up a link change wipe, that it uses the changign link instead.\n\t\t\t\t\t\tvar soul = end || msg.soul || (tmp = (msg.$$||msg.$)._||'').soul || tmp.link || ((tmp = tmp.put||'')._||'')['#'] || tmp['#'] || (((tmp = msg.put||'') && msg.$$)? tmp['#'] : (tmp['=']||tmp[':']||'')['#']);\n\t\t\t\t\t\t!end && stun(as, msg.$);\n\t\t\t\t\t\tif(!soul && !at.link['#']){ // check soul link above us\n\t\t\t\t\t\t\t(at.wait || (at.wait = [])).push(function(){ resolve(msg, eve) }) // wait\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!soul){\n\t\t\t\t\t\t\tsoul = [];\n\t\t\t\t\t\t\t(msg.$$||msg.$).back(function(at){\n\t\t\t\t\t\t\t\tif(tmp = at.soul || at.link){ return soul.push(tmp) }\n\t\t\t\t\t\t\t\tsoul.push(at.get);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsoul = soul.reverse().join('/');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcat.link['#'] = soul;\n\t\t\t\t\t\t!g && (((as.graph || (as.graph = {}))[soul] = (cat.node || (cat.node = {_:{}})))._['#'] = soul);\n\t\t\t\t\t\tdelete as.wait[id];\n\t\t\t\t\t\tcat.wait && setTimeout.each(cat.wait, function(cb){ cb && cb() });\n\t\t\t\t\t\tas.ran(as);\n\t\t\t\t\t};\n\t\t\t\t\t// ---------------\n\t\t\t\t}\n\t\t\t\tif(!to.length){ return as.ran(as) }\n\t\t\t\tas.turn(walk);\n\t\t\t}());\n\t\t\treturn gun;\n\t\t}\n\n\t\tfunction stun(as, id){\n\t\t\tif(!id){ return } id = (id._||'').id||id;\n\t\t\tvar run = as.root.stun || (as.root.stun = {on: Gun.on}), test = {}, tmp;\n\t\t\tas.stun || (as.stun = run.on('stun', function(){ }));\n\t\t\tif(tmp = run.on(''+id)){ tmp.the.last.next(test) }\n\t\t\tif(test.run >= as.run){ return }\n\t\t\trun.on(''+id, function(test){\n\t\t\t\tif(as.stun.end){\n\t\t\t\t\tthis.off();\n\t\t\t\t\tthis.to.next(test);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttest.run = test.run || as.run;\n\t\t\t\ttest.stun = test.stun || as.stun; return;\n\t\t\t\tif(this.to.to){\n\t\t\t\t\tthis.the.last.next(test);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttest.stun = as.stun;\n\t\t\t});\n\t\t}\n\n\t\tfunction ran(as){\n\t\t\tif(as.err){ ran.end(as.stun, as.root); return } // move log handle here.\n\t\t\tif(as.todo.length || as.end || !Object.empty(as.wait)){ return } as.end = 1;\n\t\t\t//(as.retry = function(){ as.acks = 0;\n\t\t\tvar cat = (as.$.back(-1)._), root = cat.root, ask = cat.ask(function(ack){\n\t\t\t\troot.on('ack', ack);\n\t\t\t\tif(ack.err && !ack.lack){ Gun.log(ack) }\n\t\t\t\tif(++acks > (as.acks || 0)){ this.off() } // Adjustable ACKs! Only 1 by default.\n\t\t\t\tif(!as.ack){ return }\n\t\t\t\tas.ack(ack, this);\n\t\t\t}, as.opt), acks = 0, stun = as.stun, tmp;\n\t\t\t(tmp = function(){ // this is not official yet, but quick solution to hack in for now.\n\t\t\t\tif(!stun){ return }\n\t\t\t\tran.end(stun, root);\n\t\t\t\tsetTimeout.each(Object.keys(stun = stun.add||''), function(cb){ if(cb = stun[cb]){cb()} }); // resume the stunned reads // Any perf reasons to CPU schedule this .keys( ?\n\t\t\t}).hatch = tmp; // this is not official yet ^\n\t\t\t//console.log(1, \"PUT\", as.run, as.graph);\n\t\t\tif(as.ack && !as.ok){ as.ok = as.acks || 9 } // TODO: In future! Remove this! This is just old API support.\n\t\t\t(as.via._).on('out', {put: as.out = as.graph, ok: as.ok && {'@': as.ok+1}, opt: as.opt, '#': ask, _: tmp});\n\t\t\t//})();\n\t\t}; ran.end = function(stun,root){\n\t\t\tstun.end = noop; // like with the earlier id, cheaper to make this flag a function so below callbacks do not have to do an extra type check.\n\t\t\tif(stun.the.to === stun && stun === stun.the.last){ delete root.stun }\n\t\t\tstun.off();\n\t\t}; ran.err = function(as, err){\n\t\t\t(as.ack||noop).call(as, as.out = { err: as.err = Gun.log(err) });\n\t\t\tas.ran(as);\n\t\t}\n\n\t\tfunction get(as){\n\t\t\tvar at = as.via._, tmp;\n\t\t\tas.via = as.via.back(function(at){\n\t\t\t\tif(at.soul || !at.get){ return at.$ }\n\t\t\t\ttmp = as.data; (as.data = {})[at.get] = tmp;\n\t\t\t});\n\t\t\tif(!as.via || !as.via._.soul){\n\t\t\t\tas.via = at.root.$.get(((as.data||'')._||'')['#'] || at.$.back('opt.uuid')())\n\t\t\t}\n\t\t\tas.via.put(as.data, as.ack, as);\n\t\t\t\n\n\t\t\treturn;\n\t\t\tif(at.get && at.back.soul){\n\t\t\t\ttmp = as.data;\n\t\t\t\tas.via = at.back.$;\n\t\t\t\t(as.data = {})[at.get] = tmp; \n\t\t\t\tas.via.put(as.data, as.ack, as);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tfunction check(d, tmp){ return ((d && (tmp = d.constructor) && tmp.name) || typeof d) }\n\n\t\tvar u, empty = {}, noop = function(){}, turn = setTimeout.turn, valid = Gun.valid, state_ify = Gun.state.ify;\n\t\tvar iife = function(fn,as){fn.call(as||empty)}\n\t})(USE, './put');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./root');\n\t\tUSE('./chain');\n\t\tUSE('./back');\n\t\tUSE('./put');\n\t\tUSE('./get');\n\t\tmodule.exports = Gun;\n\t})(USE, './index');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.chain.on = function(tag, arg, eas, as){ // don't rewrite!\n\t\t\tvar gun = this, cat = gun._, root = cat.root, act, off, id, tmp;\n\t\t\tif(typeof tag === 'string'){\n\t\t\t\tif(!arg){ return cat.on(tag) }\n\t\t\t\tact = cat.on(tag, arg, eas || cat, as);\n\t\t\t\tif(eas && eas.$){\n\t\t\t\t\t(eas.subs || (eas.subs = [])).push(act);\n\t\t\t\t}\n\t\t\t\treturn gun;\n\t\t\t}\n\t\t\tvar opt = arg;\n\t\t\t(opt = (true === opt)? {change: true} : opt || {}).not = 1; opt.on = 1;\n\t\t\t//opt.at = cat;\n\t\t\t//opt.ok = tag;\n\t\t\t//opt.last = {};\n\t\t\tvar wait = {}; // can we assign this to the at instead, like in once?\n\t\t\tgun.get(tag, opt);\n\t\t\t/*gun.get(function on(data,key,msg,eve){ var $ = this;\n\t\t\t\tif(tmp = root.hatch){ // quick hack!\n\t\t\t\t\tif(wait[$._.id]){ return } wait[$._.id] = 1;\n\t\t\t\t\ttmp.push(function(){on.call($, data,key,msg,eve)});\n\t\t\t\t\treturn;\n\t\t\t\t}; wait = {}; // end quick hack.\n\t\t\t\ttag.call($, data,key,msg,eve);\n\t\t\t}, opt); // TODO: PERF! Event listener leak!!!?*/\n\t\t\t/*\n\t\t\tfunction one(msg, eve){\n\t\t\t\tif(one.stun){ return }\n\t\t\t\tvar at = msg.$._, data = at.put, tmp;\n\t\t\t\tif(tmp = at.link){ data = root.$.get(tmp)._.put }\n\t\t\t\tif(opt.not===u && u === data){ return }\n\t\t\t\tif(opt.stun===u && (tmp = root.stun) && (tmp = tmp[at.id] || tmp[at.back.id]) && !tmp.end){ // Remember! If you port this into `.get(cb` make sure you allow stun:0 skip option for `.put(`.\n\t\t\t\t\ttmp[id] = function(){one(msg,eve)};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//tmp = one.wait || (one.wait = {}); console.log(tmp[at.id] === ''); if(tmp[at.id] !== ''){ tmp[at.id] = tmp[at.id] || setTimeout(function(){tmp[at.id]='';one(msg,eve)},1); return } delete tmp[at.id];\n\t\t\t\t// call:\n\t\t\t\tif(opt.as){\n\t\t\t\t\topt.ok.call(opt.as, msg, eve || one);\n\t\t\t\t} else {\n\t\t\t\t\topt.ok.call(at.$, data, msg.get || at.get, msg, eve || one);\n\t\t\t\t}\n\t\t\t};\n\t\t\tone.at = cat;\n\t\t\t(cat.act||(cat.act={}))[id = String.random(7)] = one;\n\t\t\tone.off = function(){ one.stun = 1; if(!cat.act){ return } delete cat.act[id] }\n\t\t\tcat.on('out', {get: {}});*/\n\t\t\treturn gun;\n\t\t}\n\t\t// Rules:\n\t\t// 1. If cached, should be fast, but not read while write.\n\t\t// 2. Should not retrigger other listeners, should get triggered even if nothing found.\n\t\t// 3. If the same callback passed to many different once chains, each should resolve - an unsubscribe from the same callback should not effect the state of the other resolving chains, if you do want to cancel them all early you should mutate the callback itself with a flag & check for it at top of callback\n\t\tGun.chain.once = function(cb, opt){ opt = opt || {}; // avoid rewriting\n\t\t\tif(!cb){ return none(this,opt) }\n\t\t\tvar gun = this, cat = gun._, root = cat.root, data = cat.put, id = String.random(7), one, tmp;\n\t\t\tgun.get(function(data,key,msg,eve){\n\t\t\t\tvar $ = this, at = $._, one = (at.one||(at.one={}));\n\t\t\t\tif(eve.stun){ return } if('' === one[id]){ return }\n\t\t\t\tif(true === (tmp = Gun.valid(data))){ once(); return }\n\t\t\t\tif('string' == typeof tmp){ return } // TODO: BUG? Will this always load?\n\t\t\t\tclearTimeout((cat.one||'')[id]); // clear \"not found\" since they only get set on cat.\n\t\t\t\tclearTimeout(one[id]); one[id] = setTimeout(once, opt.wait||99); // TODO: Bug? This doesn't handle plural chains.\n\t\t\t\tfunction once(f){\n\t\t\t\t\tif(!at.has && !at.soul){ at = {put: data, get: key} } // handles non-core messages.\n\t\t\t\t\tif(u === (tmp = at.put)){ tmp = ((msg.$$||'')._||'').put }\n\t\t\t\t\tif('string' == typeof Gun.valid(tmp)){\n\t\t\t\t\t\ttmp = root.$.get(tmp)._.put;\n\t\t\t\t\t\tif(tmp === u && !f){\n\t\t\t\t\t\t\tone[id] = setTimeout(function(){ once(1) }, opt.wait||99); // TODO: Quick fix. Maybe use ack count for more predictable control?\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//console.log(\"AND VANISHED\", data);\n\t\t\t\t\tif(eve.stun){ return } if('' === one[id]){ return } one[id] = '';\n\t\t\t\t\tif(cat.soul || cat.has){ eve.off() } // TODO: Plural chains? // else { ?.off() } // better than one check?\n\t\t\t\t\tcb.call($, tmp, at.get);\n\t\t\t\t\tclearTimeout(one[id]); // clear \"not found\" since they only get set on cat. // TODO: This was hackily added, is it necessary or important? Probably not, in future try removing this. Was added just as a safety for the `&& !f` check.\n\t\t\t\t};\n\t\t\t}, {on: 1});\n\t\t\treturn gun;\n\t\t}\n\t\tfunction none(gun,opt,chain){\n\t\t\tGun.log.once(\"valonce\", \"Chainable val is experimental, its behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.\");\n\t\t\t(chain = gun.chain())._.nix = gun.once(function(data, key){ chain._.on('in', this._) });\n\t\t\tchain._.lex = gun._.lex; // TODO: Better approach in future? This is quick for now.\n\t\t\treturn chain;\n\t\t}\n\n\t\tGun.chain.off = function(){\n\t\t\t// make off more aggressive. Warning, it might backfire!\n\t\t\tvar gun = this, at = gun._, tmp;\n\t\t\tvar cat = at.back;\n\t\t\tif(!cat){ return }\n\t\t\tat.ack = 0; // so can resubscribe.\n\t\t\tif(tmp = cat.next){\n\t\t\t\tif(tmp[at.get]){\n\t\t\t\t\tdelete tmp[at.get];\n\t\t\t\t} else {\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TODO: delete cat.one[map.id]?\n\t\t\tif(tmp = cat.ask){\n\t\t\t\tdelete tmp[at.get];\n\t\t\t}\n\t\t\tif(tmp = cat.put){\n\t\t\t\tdelete tmp[at.get];\n\t\t\t}\n\t\t\tif(tmp = at.soul){\n\t\t\t\tdelete cat.root.graph[tmp];\n\t\t\t}\n\t\t\tif(tmp = at.map){\n\t\t\t\tObject.keys(tmp).forEach(function(i,at){ at = tmp[i]; //obj_map(tmp, function(at){\n\t\t\t\t\tif(at.link){\n\t\t\t\t\t\tcat.root.$.get(at.link).off();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(tmp = at.next){\n\t\t\t\tObject.keys(tmp).forEach(function(i,neat){ neat = tmp[i]; //obj_map(tmp, function(neat){\n\t\t\t\t\tneat.$.off();\n\t\t\t\t});\n\t\t\t}\n\t\t\tat.on('off', {});\n\t\t\treturn gun;\n\t\t}\n\t\tvar empty = {}, noop = function(){}, u;\n\t})(USE, './on');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index'), next = Gun.chain.get.next;\n\t\tGun.chain.get.next = function(gun, lex){ var tmp;\n\t\t\tif(!Object.plain(lex)){ return (next||noop)(gun, lex) }\n\t\t\tif(tmp = ((tmp = lex['#'])||'')['='] || tmp){ return gun.get(tmp) }\n\t\t\t(tmp = gun.chain()._).lex = lex; // LEX!\n\t\t\tgun.on('in', function(eve){\n\t\t\t\tif(String.match(eve.get|| (eve.put||'')['.'], lex['.'] || lex['#'] || lex)){\n\t\t\t\t\ttmp.on('in', eve);\n\t\t\t\t}\n\t\t\t\tthis.to.next(eve);\n\t\t\t});\n\t\t\treturn tmp.$;\n\t\t}\n\t\tGun.chain.map = function(cb, opt, t){\n\t\t\tvar gun = this, cat = gun._, lex, chain;\n\t\t\tif(Object.plain(cb)){ lex = cb['.']? cb : {'.': cb}; cb = u }\n\t\t\tif(!cb){\n\t\t\t\tif(chain = cat.each){ return chain }\n\t\t\t\t(cat.each = chain = gun.chain())._.lex = lex || chain._.lex || cat.lex;\n\t\t\t\tchain._.nix = gun.back('nix');\n\t\t\t\tgun.on('in', map, chain._);\n\t\t\t\treturn chain;\n\t\t\t}\n\t\t\tGun.log.once(\"mapfn\", \"Map functions are experimental, their behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.\");\n\t\t\tchain = gun.chain();\n\t\t\tgun.map().on(function(data, key, msg, eve){\n\t\t\t\tvar next = (cb||noop).call(this, data, key, msg, eve);\n\t\t\t\tif(u === next){ return }\n\t\t\t\tif(data === next){ return chain._.on('in', msg) }\n\t\t\t\tif(Gun.is(next)){ return chain._.on('in', next._) }\n\t\t\t\tvar tmp = {}; Object.keys(msg.put).forEach(function(k){ tmp[k] = msg.put[k] }, tmp); tmp['='] = next; \n\t\t\t\tchain._.on('in', {get: key, put: tmp});\n\t\t\t});\n\t\t\treturn chain;\n\t\t}\n\t\tfunction map(msg){ this.to.next(msg);\n\t\t\tvar cat = this.as, gun = msg.$, at = gun._, put = msg.put, tmp;\n\t\t\tif(!at.soul && !msg.$$){ return } // this line took hundreds of tries to figure out. It only works if core checks to filter out above chains during link tho. This says \"only bother to map on a node\" for this layer of the chain. If something is not a node, map should not work.\n\t\t\tif((tmp = cat.lex) && !String.match(msg.get|| (put||'')['.'], tmp['.'] || tmp['#'] || tmp)){ return }\n\t\t\tGun.on.link(msg, cat);\n\t\t}\n\t\tvar noop = function(){}, event = {stun: noop, off: noop}, u;\n\t})(USE, './map');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.chain.set = function(item, cb, opt){\n\t\t\tvar gun = this, root = gun.back(-1), soul, tmp;\n\t\t\tcb = cb || function(){};\n\t\t\topt = opt || {}; opt.item = opt.item || item;\n\t\t\tif(soul = ((item||'')._||'')['#']){ (item = {})['#'] = soul } // check if node, make link.\n\t\t\tif('string' == typeof (tmp = Gun.valid(item))){ return gun.get(soul = tmp).put(item, cb, opt) } // check if link\n\t\t\tif(!Gun.is(item)){\n\t\t\t\tif(Object.plain(item)){\n\t\t\t\t\titem = root.get(soul = gun.back('opt.uuid')()).put(item);\n\t\t\t\t}\n\t\t\t\treturn gun.get(soul || root.back('opt.uuid')(7)).put(item, cb, opt);\n\t\t\t}\n\t\t\tgun.put(function(go){\n\t\t\t\titem.get(function(soul, o, msg){ // TODO: BUG! We no longer have this option? & go error not handled?\n\t\t\t\t\tif(!soul){ return cb.call(gun, {err: Gun.log('Only a node can be linked! Not \"' + msg.put + '\"!')}) }\n\t\t\t\t\t(tmp = {})[soul] = {'#': soul}; go(tmp);\n\t\t\t\t},true);\n\t\t\t})\n\t\t\treturn item;\n\t\t}\n\t})(USE, './set');\n\n\t;USE(function(module){\n\t\tUSE('./shim');\n\n\t\tvar noop = function(){}\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u, d = +new Date; try{ cb(u, JSON.parse(t,r), json.sucks(+new Date - d)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u, d = +new Date; try{ cb(u, JSON.stringify(v,r,s), json.sucks(+new Date - d)) }catch(e){ cb(e) } }\n\t\tjson.sucks = function(d){ if(d > 99){ console.log(\"Warning: JSON blocking CPU detected. Add `gun/lib/yson.js` to fix.\"); json.sucks = noop } }\n\n\t\tfunction Mesh(root){\n\t\t\tvar mesh = function(){};\n\t\t\tvar opt = root.opt || {};\n\t\t\topt.log = opt.log || console.log;\n\t\t\topt.gap = opt.gap || opt.wait || 0;\n\t\t\topt.max = opt.max || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;\n\t\t\topt.pack = opt.pack || (opt.max * 0.01 * 0.01);\n\t\t\topt.puff = opt.puff || 9; // IDEA: do a start/end benchmark, divide ops/result.\n\t\t\tvar puff = setTimeout.turn || setTimeout;\n\n\t\t\tvar dup = root.dup, dup_check = dup.check, dup_track = dup.track;\n\n\t\t\tvar ST = +new Date, LT = ST;\n\n\t\t\tvar hear = mesh.hear = function(raw, peer){\n\t\t\t\tif(!raw){ return }\n\t\t\t\tif(opt.max <= raw.length){ return mesh.say({dam: '!', err: \"Message too big!\"}, peer) }\n\t\t\t\tif(mesh === this){\n\t\t\t\t\t/*if('string' == typeof raw){ try{\n\t\t\t\t\t\tvar stat = console.STAT || {};\n\t\t\t\t\t\t//console.log('HEAR:', peer.id, (raw||'').slice(0,250), ((raw||'').length / 1024 / 1024).toFixed(4));\n\t\t\t\t\t\t\n\t\t\t\t\t\t//console.log(setTimeout.turn.s.length, 'stacks', parseFloat((-(LT - (LT = +new Date))/1000).toFixed(3)), 'sec', parseFloat(((LT-ST)/1000 / 60).toFixed(1)), 'up', stat.peers||0, 'peers', stat.has||0, 'has', stat.memhused||0, stat.memused||0, stat.memax||0, 'heap mem max');\n\t\t\t\t\t}catch(e){ console.log('DBG err', e) }}*/\n\t\t\t\t\thear.d += raw.length||0 ; ++hear.c } // STATS!\n\t\t\t\tvar S = peer.SH = +new Date;\n\t\t\t\tvar tmp = raw[0], msg;\n\t\t\t\t//raw && raw.slice && console.log(\"hear:\", ((peer.wire||'').headers||'').origin, raw.length, raw.slice && raw.slice(0,50)); //tc-iamunique-tc-package-ds1\n\t\t\t\tif('[' === tmp){\n\t\t\t\t\tparse(raw, function(err, msg){\n\t\t\t\t\t\tif(err || !msg){ return mesh.say({dam: '!', err: \"DAM JSON parse error.\"}, peer) }\n\t\t\t\t\t\tconsole.STAT && console.STAT(+new Date, msg.length, '# on hear batch');\n\t\t\t\t\t\tvar P = opt.puff;\n\t\t\t\t\t\t(function go(){\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\tvar i = 0, m; while(i < P && (m = msg[i++])){ mesh.hear(m, peer) }\n\t\t\t\t\t\t\tmsg = msg.slice(i); // slicing after is faster than shifting during.\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'hear loop');\n\t\t\t\t\t\t\tflush(peer); // force send all synchronously batched acks.\n\t\t\t\t\t\t\tif(!msg.length){ return }\n\t\t\t\t\t\t\tpuff(go, 0);\n\t\t\t\t\t\t}());\n\t\t\t\t\t});\n\t\t\t\t\traw = ''; // \n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif('{' === tmp || ((raw['#'] || Object.plain(raw)) && (msg = raw))){\n\t\t\t\t\tif(msg){ return hear.one(msg, peer, S) }\n\t\t\t\t\tparse(raw, function(err, msg){\n\t\t\t\t\t\tif(err || !msg){ return mesh.say({dam: '!', err: \"DAM JSON parse error.\"}, peer) }\n\t\t\t\t\t\thear.one(msg, peer, S);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\thear.one = function(msg, peer, S){ // S here is temporary! Undo.\n\t\t\t\tvar id, hash, tmp, ash, DBG;\n\t\t\t\tif(msg.DBG){ msg.DBG = DBG = {DBG: msg.DBG} }\n\t\t\t\tDBG && (DBG.h = S);\n\t\t\t\tDBG && (DBG.hp = +new Date);\n\t\t\t\tif(!(id = msg['#'])){ id = msg['#'] = String.random(9) }\n\t\t\t\tif(tmp = dup_check(id)){ return }\n\t\t\t\t// DAM logic:\n\t\t\t\tif(!(hash = msg['##']) && false && u !== msg.put){ /*hash = msg['##'] = Type.obj.hash(msg.put)*/ } // disable hashing for now // TODO: impose warning/penalty instead (?)\n\t\t\t\tif(hash && (tmp = msg['@'] || (msg.get && id)) && dup.check(ash = tmp+hash)){ return } // Imagine A <-> B <=> (C & D), C & D reply with same ACK but have different IDs, B can use hash to dedup. Or if a GET has a hash already, we shouldn't ACK if same.\n\t\t\t\t(msg._ = function(){}).via = mesh.leap = peer;\n\t\t\t\tif((tmp = msg['><']) && 'string' == typeof tmp){ tmp.slice(0,99).split(',').forEach(function(k){ this[k] = 1 }, (msg._).yo = {}) } // Peers already sent to, do not resend.\n\t\t\t\t// DAM ^\n\t\t\t\tif(tmp = msg.dam){\n\t\t\t\t\tif(tmp = mesh.hear[tmp]){\n\t\t\t\t\t\ttmp(msg, peer, root);\n\t\t\t\t\t}\n\t\t\t\t\tdup_track(id);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(tmp = msg.ok){ msg._.near = tmp['/'] }\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.is = S); peer.SI = id;\n\t\t\t\tdup_track.ed = function(d){\n\t\t\t\t\tif(id !== d){ return }\n\t\t\t\t\tdup_track.ed = 0;\n\t\t\t\t\tif(!(d = dup.s[id])){ return }\n\t\t\t\t\td.via = peer;\n\t\t\t\t\tif(msg.get){ d.it = msg }\n\t\t\t\t}\n\t\t\t\troot.on('in', mesh.last = msg);\n\t\t\t\tDBG && (DBG.hd = +new Date);\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, msg.get? 'msg get' : msg.put? 'msg put' : 'msg');\n\t\t\t\tdup_track(id); // in case 'in' does not call track.\n\t\t\t\tif(ash){ dup_track(ash) } //dup.track(tmp+hash, true).it = it(msg);\n\t\t\t\tmesh.leap = mesh.last = null; // warning! mesh.leap could be buggy.\n\t\t\t}\n\t\t\tvar tomap = function(k,i,m){m(k,true)};\n\t\t\thear.c = hear.d = 0;\n\n\t\t\t;(function(){\n\t\t\t\tvar SMIA = 0;\n\t\t\t\tvar loop;\n\t\t\t\tmesh.hash = function(msg, peer){ var h, s, t;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tjson(msg.put, function hash(err, text){\n\t\t\t\t\t\tvar ss = (s || (s = t = text||'')).slice(0, 32768); // 1024 * 32\n\t\t\t\t\t h = String.hash(ss, h); s = s.slice(32768);\n\t\t\t\t\t if(s){ puff(hash, 0); return }\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say json+hash');\n\t\t\t\t\t msg._.$put = t;\n\t\t\t\t\t msg['##'] = h;\n\t\t\t\t\t mesh.say(msg, peer);\n\t\t\t\t\t delete msg._.$put;\n\t\t\t\t\t}, sort);\n\t\t\t\t}\n\t\t\t\tfunction sort(k, v){ var tmp;\n\t\t\t\t\tif(!(v instanceof Object)){ return v }\n\t\t\t\t\tObject.keys(v).sort().forEach(sorta, {to: tmp = {}, on: v});\n\t\t\t\t\treturn tmp;\n\t\t\t\t} function sorta(k){ this.to[k] = this.on[k] }\n\n\t\t\t\tvar say = mesh.say = function(msg, peer){ var tmp;\n\t\t\t\t\tif((tmp = this) && (tmp = tmp.to) && tmp.next){ tmp.next(msg) } // compatible with middleware adapters.\n\t\t\t\t\tif(!msg){ return false }\n\t\t\t\t\tvar id, hash, raw, ack = msg['@'];\n//if(opt.super && (!ack || !msg.put)){ return } // TODO: MANHATTAN STUB //OBVIOUSLY BUG! But squelch relay. // :( get only is 100%+ CPU usage :(\n\t\t\t\t\tvar meta = msg._||(msg._=function(){});\n\t\t\t\t\tvar DBG = msg.DBG, S = +new Date; meta.y = meta.y || S; if(!peer){ DBG && (DBG.y = S) }\n\t\t\t\t\tif(!(id = msg['#'])){ id = msg['#'] = String.random(9) }\n\t\t\t\t\t!loop && dup_track(id);//.it = it(msg); // track for 9 seconds, default. Earth<->Mars would need more! // always track, maybe move this to the 'after' logic if we split function.\n\t\t\t\t\t//if(msg.put && (msg.err || (dup.s[id]||'').err)){ return false } // TODO: in theory we should not be able to stun a message, but for now going to check if it can help network performance preventing invalid data to relay.\n\t\t\t\t\tif(!(hash = msg['##']) && u !== msg.put && !meta.via && ack){ mesh.hash(msg, peer); return } // TODO: Should broadcasts be hashed?\n\t\t\t\t\tif(!peer && ack){ peer = ((tmp = dup.s[ack]) && (tmp.via || ((tmp = tmp.it) && (tmp = tmp._) && tmp.via))) || ((tmp = mesh.last) && ack === tmp['#'] && mesh.leap) } // warning! mesh.leap could be buggy! mesh last check reduces this. // TODO: CLEAN UP THIS LINE NOW? `.it` should be reliable.\n\t\t\t\t\tif(!peer && ack){ // still no peer, then ack daisy chain 'tunnel' got lost.\n\t\t\t\t\t\tif(dup.s[ack]){ return } // in dups but no peer hints that this was ack to ourself, ignore.\n\t\t\t\t\t\tconsole.STAT && console.STAT(+new Date, ++SMIA, 'total no peer to ack to'); // TODO: Delete this now. Dropping lost ACKs is protocol fine now.\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} // TODO: Temporary? If ack via trace has been lost, acks will go to all peers, which trashes browser bandwidth. Not relaying the ack will force sender to ask for ack again. Note, this is technically wrong for mesh behavior.\n\t\t\t\t\tif(ack && !msg.put && !hash && ((dup.s[ack]||'').it||'')['##']){ return false } // If we're saying 'not found' but a relay had data, do not bother sending our not found. // Is this correct, return false? // NOTE: ADD PANIC TEST FOR THIS!\n\t\t\t\t\tif(!peer && mesh.way){ return mesh.way(msg) }\n\t\t\t\t\tDBG && (DBG.yh = +new Date);\n\t\t\t\t\tif(!(raw = meta.raw)){ mesh.raw(msg, peer); return }\n\t\t\t\t\tDBG && (DBG.yr = +new Date);\n\t\t\t\t\tif(!peer || !peer.id){\n\t\t\t\t\t\tif(!Object.plain(peer || opt.peers)){ return false }\n\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\tvar P = opt.puff, ps = opt.peers, pl = Object.keys(peer || opt.peers || {}); // TODO: .keys( is slow\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'peer keys');\n\t\t\t\t\t\t;(function go(){\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\t//Type.obj.map(peer || opt.peers, each); // in case peer is a peer list.\n\t\t\t\t\t\t\tloop = 1; var wr = meta.raw; meta.raw = raw; // quick perf hack\n\t\t\t\t\t\t\tvar i = 0, p; while(i < 9 && (p = (pl||'')[i++])){\n\t\t\t\t\t\t\t\tif(!(p = ps[p] || (peer||'')[p])){ continue }\n\t\t\t\t\t\t\t\tmesh.say(msg, p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmeta.raw = wr; loop = 0;\n\t\t\t\t\t\t\tpl = pl.slice(i); // slicing after is faster than shifting during.\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say loop');\n\t\t\t\t\t\t\tif(!pl.length){ return }\n\t\t\t\t\t\t\tpuff(go, 0);\n\t\t\t\t\t\t\tack && dup_track(ack); // keep for later\n\t\t\t\t\t\t}());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: PERF: consider splitting function here, so say loops do less work.\n\t\t\t\t\tif(!peer.wire && mesh.wire){ mesh.wire(peer) }\n\t\t\t\t\tif(id === peer.last){ return } peer.last = id; // was it just sent?\n\t\t\t\t\tif(peer === meta.via){ return false } // don't send back to self.\n\t\t\t\t\tif((tmp = meta.yo) && (tmp[peer.url] || tmp[peer.pid] || tmp[peer.id]) /*&& !o*/){ return false }\n\t\t\t\t\tconsole.STAT && console.STAT(S, ((DBG||meta).yp = +new Date) - (meta.y || S), 'say prep');\n\t\t\t\t\t!loop && ack && dup_track(ack); // streaming long responses needs to keep alive the ack.\n\t\t\t\t\tif(peer.batch){\n\t\t\t\t\t\tpeer.tail = (tmp = peer.tail || 0) + raw.length;\n\t\t\t\t\t\tif(peer.tail <= opt.pack){\n\t\t\t\t\t\t\tpeer.batch += (tmp?',':'')+raw;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tflush(peer);\n\t\t\t\t\t}\n\t\t\t\t\tpeer.batch = '['; // Prevents double JSON!\n\t\t\t\t\tvar ST = +new Date;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tconsole.STAT && console.STAT(ST, +new Date - ST, '0ms TO');\n\t\t\t\t\t\tflush(peer);\n\t\t\t\t\t}, opt.gap); // TODO: queuing/batching might be bad for low-latency video game performance! Allow opt out?\n\t\t\t\t\tsend(raw, peer);\n\t\t\t\t\tconsole.STAT && (ack === peer.SI) && console.STAT(S, +new Date - peer.SH, 'say ack');\n\t\t\t\t}\n\t\t\t\tmesh.say.c = mesh.say.d = 0;\n\t\t\t\t// TODO: this caused a out-of-memory crash!\n\t\t\t\tmesh.raw = function(msg, peer){ // TODO: Clean this up / delete it / move logic out!\n\t\t\t\t\tif(!msg){ return '' }\n\t\t\t\t\tvar meta = (msg._) || {}, put, tmp;\n\t\t\t\t\tif(tmp = meta.raw){ return tmp }\n\t\t\t\t\tif('string' == typeof msg){ return msg }\n\t\t\t\t\tvar hash = msg['##'], ack = msg['@'];\n\t\t\t\t\tif(hash && ack){\n\t\t\t\t\t\tif(!meta.via && dup_check(ack+hash)){ return false } // for our own out messages, memory & storage may ack the same thing, so dedup that. Tho if via another peer, we already tracked it upon hearing, so this will always trigger false positives, so don't do that!\n\t\t\t\t\t\tif(tmp = (dup.s[ack]||'').it){\n\t\t\t\t\t\t\tif(hash === tmp['##']){ return false } // if ask has a matching hash, acking is optional.\n\t\t\t\t\t\t\tif(!tmp['##']){ tmp['##'] = hash } // if none, add our hash to ask so anyone we relay to can dedup. // NOTE: May only check against 1st ack chunk, 2nd+ won't know and still stream back to relaying peers which may then dedup. Any way to fix this wasted bandwidth? I guess force rate limiting breaking change, that asking peer has to ask for next lexical chunk.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!msg.dam && !msg['@']){\n\t\t\t\t\t\tvar i = 0, to = []; tmp = opt.peers;\n\t\t\t\t\t\tfor(var k in tmp){ var p = tmp[k]; // TODO: Make it up peers instead!\n\t\t\t\t\t\t\tto.push(p.url || p.pid || p.id);\n\t\t\t\t\t\t\tif(++i > 6){ break }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(i > 1){ msg['><'] = to.join() } // TODO: BUG! This gets set regardless of peers sent to! Detect?\n\t\t\t\t\t}\n\t\t\t\t\tif(msg.put && (tmp = msg.ok)){ msg.ok = {'@':(tmp['@']||1)-1, '/': (tmp['/']==msg._.near)? mesh.near : tmp['/']}; }\n\t\t\t\t\tif(put = meta.$put){\n\t\t\t\t\t\ttmp = {}; Object.keys(msg).forEach(function(k){ tmp[k] = msg[k] });\n\t\t\t\t\t\ttmp.put = ':])([:';\n\t\t\t\t\t\tjson(tmp, function(err, raw){\n\t\t\t\t\t\t\tif(err){ return } // TODO: Handle!!\n\t\t\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t\t\ttmp = raw.indexOf('\"put\":\":])([:\"');\n\t\t\t\t\t\t\tres(u, raw = raw.slice(0, tmp+6) + put + raw.slice(tmp + 14));\n\t\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'say slice');\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tjson(msg, res);\n\t\t\t\t\tfunction res(err, raw){\n\t\t\t\t\t\tif(err){ return } // TODO: Handle!!\n\t\t\t\t\t\tmeta.raw = raw; //if(meta && (raw||'').length < (999 * 99)){ meta.raw = raw } // HNPERF: If string too big, don't keep in memory.\n\t\t\t\t\t\tmesh.say(msg, peer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}());\n\n\t\t\tfunction flush(peer){\n\t\t\t\tvar tmp = peer.batch, t = 'string' == typeof tmp, l;\n\t\t\t\tif(t){ tmp += ']' }// TODO: Prevent double JSON!\n\t\t\t\tpeer.batch = peer.tail = null;\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tif(t? 3 > tmp.length : !tmp.length){ return } // TODO: ^\n\t\t\t\tif(!t){try{tmp = (1 === tmp.length? tmp[0] : JSON.stringify(tmp));\n\t\t\t\t}catch(e){return opt.log('DAM JSON stringify error', e)}}\n\t\t\t\tif(!tmp){ return }\n\t\t\t\tsend(tmp, peer);\n\t\t\t}\n\t\t\t// for now - find better place later.\n\t\t\tfunction send(raw, peer){ try{\n\t\t\t\tvar wire = peer.wire;\n\t\t\t\tif(peer.say){\n\t\t\t\t\tpeer.say(raw);\n\t\t\t\t} else\n\t\t\t\tif(wire.send){\n\t\t\t\t\twire.send(raw);\n\t\t\t\t}\n\t\t\t\tmesh.say.d += raw.length||0; ++mesh.say.c; // STATS!\n\t\t\t}catch(e){\n\t\t\t\t(peer.queue = peer.queue || []).push(raw);\n\t\t\t}}\n\n\t\t\tmesh.near = 0;\n\t\t\tmesh.hi = function(peer){\n\t\t\t\tvar wire = peer.wire, tmp;\n\t\t\t\tif(!wire){ mesh.wire((peer.length && {url: peer, id: peer}) || peer); return }\n\t\t\t\tif(peer.id){\n\t\t\t\t\topt.peers[peer.url || peer.id] = peer;\n\t\t\t\t} else {\n\t\t\t\t\ttmp = peer.id = peer.id || peer.url || String.random(9);\n\t\t\t\t\tmesh.say({dam: '?', pid: root.opt.pid}, opt.peers[tmp] = peer);\n\t\t\t\t\tdelete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self\n\t\t\t\t}\n\t\t\t\tif(!peer.met){\n\t\t\t\t\tmesh.near++;\n\t\t\t\t\tpeer.met = +(new Date);\n\t\t\t\t\troot.on('hi', peer)\n\t\t\t\t}\n\t\t\t\t// @rogowski I need this here by default for now to fix go1dfish's bug\n\t\t\t\ttmp = peer.queue; peer.queue = [];\n\t\t\t\tsetTimeout.each(tmp||[],function(msg){\n\t\t\t\t\tsend(msg, peer);\n\t\t\t\t},0,9);\n\t\t\t\t//Type.obj.native && Type.obj.native(); // dirty place to check if other JS polluted.\n\t\t\t}\n\t\t\tmesh.bye = function(peer){\n\t\t\t\tpeer.met && --mesh.near;\n\t\t\t\tdelete peer.met;\n\t\t\t\troot.on('bye', peer);\n\t\t\t\tvar tmp = +(new Date); tmp = (tmp - (peer.met||tmp));\n\t\t\t\tmesh.bye.time = ((mesh.bye.time || tmp) + tmp) / 2;\n\t\t\t}\n\t\t\tmesh.hear['!'] = function(msg, peer){ opt.log('Error:', msg.err) }\n\t\t\tmesh.hear['?'] = function(msg, peer){\n\t\t\t\tif(msg.pid){\n\t\t\t\t\tif(!peer.pid){ peer.pid = msg.pid }\n\t\t\t\t\tif(msg['@']){ return }\n\t\t\t\t}\n\t\t\t\tmesh.say({dam: '?', pid: opt.pid, '@': msg['#']}, peer);\n\t\t\t\tdelete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self\n\t\t\t}\n\t\t\tmesh.hear['mob'] = function(msg, peer){ // NOTE: AXE will overload this with better logic.\n\t\t\t\tif(!msg.peers){ return }\n\t\t\t\tvar peers = Object.keys(msg.peers), one = peers[(Math.random()*peers.length) >> 0];\n\t\t\t\tif(!one){ return }\n\t\t\t\tmesh.bye(peer);\n\t\t\t\tmesh.hi(one);\n\t\t\t}\n\n\t\t\troot.on('create', function(root){\n\t\t\t\troot.opt.pid = root.opt.pid || String.random(9);\n\t\t\t\tthis.to.next(root);\n\t\t\t\troot.on('out', mesh.say);\n\t\t\t});\n\n\t\t\troot.on('bye', function(peer, tmp){\n\t\t\t\tpeer = opt.peers[peer.id || peer] || peer;\n\t\t\t\tthis.to.next(peer);\n\t\t\t\tpeer.bye? peer.bye() : (tmp = peer.wire) && tmp.close && tmp.close();\n\t\t\t\tdelete opt.peers[peer.id];\n\t\t\t\tpeer.wire = null;\n\t\t\t});\n\n\t\t\tvar gets = {};\n\t\t\troot.on('bye', function(peer, tmp){ this.to.next(peer);\n\t\t\t\tif(tmp = console.STAT){ tmp.peers = mesh.near; }\n\t\t\t\tif(!(tmp = peer.url)){ return } gets[tmp] = true;\n\t\t\t\tsetTimeout(function(){ delete gets[tmp] },opt.lack || 9000);\n\t\t\t});\n\t\t\troot.on('hi', function(peer, tmp){ this.to.next(peer);\n\t\t\t\tif(tmp = console.STAT){ tmp.peers = mesh.near }\n\t\t\t\tif(opt.super){ return } // temporary (?) until we have better fix/solution?\n\t\t\t\tvar souls = Object.keys(root.next||''); // TODO: .keys( is slow\n\t\t\t\tif(souls.length > 9999 && !console.SUBS){ console.log(console.SUBS = \"Warning: You have more than 10K live GETs, which might use more bandwidth than your screen can show - consider `.off()`.\") }\n\t\t\t\tsetTimeout.each(souls, function(soul){ var node = root.next[soul];\n\t\t\t\t\tif(opt.super || (node.ask||'')['']){ mesh.say({get: {'#': soul}}, peer); return }\n\t\t\t\t\tsetTimeout.each(Object.keys(node.ask||''), function(key){ if(!key){ return }\n\t\t\t\t\t\t// is the lack of ## a !onion hint?\n\t\t\t\t\t\tmesh.say({'##': String.hash((root.graph[soul]||'')[key]), get: {'#': soul, '.': key}}, peer);\n\t\t\t\t\t\t// TODO: Switch this so Book could route?\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn mesh;\n\t\t}\n\t var empty = {}, ok = true, u;\n\n\t try{ module.exports = Mesh }catch(e){}\n\n\t})(USE, './mesh');\n\n\t;USE(function(module){\n\t\tvar Gun = USE('./index');\n\t\tGun.Mesh = USE('./mesh');\n\n\t\t// TODO: resync upon reconnect online/offline\n\t\t//window.ononline = window.onoffline = function(){ console.log('online?', navigator.onLine) }\n\n\t\tGun.on('opt', function(root){\n\t\t\tthis.to.next(root);\n\t\t\tif(root.once){ return }\n\t\t\tvar opt = root.opt;\n\t\t\tif(false === opt.WebSocket){ return }\n\n\t\t\tvar env = Gun.window || {};\n\t\t\tvar websocket = opt.WebSocket || env.WebSocket || env.webkitWebSocket || env.mozWebSocket;\n\t\t\tif(!websocket){ return }\n\t\t\topt.WebSocket = websocket;\n\n\t\t\tvar mesh = opt.mesh = opt.mesh || Gun.Mesh(root);\n\n\t\t\tvar wire = mesh.wire || opt.wire;\n\t\t\tmesh.wire = opt.wire = open;\n\t\t\tfunction open(peer){ try{\n\t\t\t\tif(!peer || !peer.url){ return wire && wire(peer) }\n\t\t\t\tvar url = peer.url.replace(/^http/, 'ws');\n\t\t\t\tvar wire = peer.wire = new opt.WebSocket(url);\n\t\t\t\twire.onclose = function(){\n\t\t\t\t\treconnect(peer);\n\t\t\t\t\topt.mesh.bye(peer);\n\t\t\t\t};\n\t\t\t\twire.onerror = function(err){\n\t\t\t\t\treconnect(peer);\n\t\t\t\t};\n\t\t\t\twire.onopen = function(){\n\t\t\t\t\topt.mesh.hi(peer);\n\t\t\t\t}\n\t\t\t\twire.onmessage = function(msg){\n\t\t\t\t\tif(!msg){ return }\n\t\t\t\t\topt.mesh.hear(msg.data || msg, peer);\n\t\t\t\t};\n\t\t\t\treturn wire;\n\t\t\t}catch(e){ opt.mesh.bye(peer) }}\n\n\t\t\tsetTimeout(function(){ !opt.super && root.on('out', {dam:'hi'}) },1); // it can take a while to open a socket, so maybe no longer lazy load for perf reasons?\n\n\t\t\tvar wait = 2 * 999;\n\t\t\tfunction reconnect(peer){\n\t\t\t\tclearTimeout(peer.defer);\n\t\t\t\tif(!opt.peers[peer.url]){ return }\n\t\t\t\tif(doc && peer.retry <= 0){ return }\n\t\t\t\tpeer.retry = (peer.retry || opt.retry+1 || 60) - ((-peer.tried + (peer.tried = +new Date) < wait*4)?1:0);\n\t\t\t\tpeer.defer = setTimeout(function to(){\n\t\t\t\t\tif(doc && doc.hidden){ return setTimeout(to,wait) }\n\t\t\t\t\topen(peer);\n\t\t\t\t}, wait);\n\t\t\t}\n\t\t\tvar doc = (''+u !== typeof document) && document;\n\t\t});\n\t\tvar noop = function(){}, u;\n\t})(USE, './websocket');\n\n\t;USE(function(module){\n\t\tif(typeof Gun === 'undefined'){ return }\n\n\t\tvar noop = function(){}, store, u;\n\t\ttry{store = (Gun.window||noop).localStorage}catch(e){}\n\t\tif(!store){\n\t\t\tGun.log(\"Warning: No localStorage exists to persist data to!\");\n\t\t\tstore = {setItem: function(k,v){this[k]=v}, removeItem: function(k){delete this[k]}, getItem: function(k){return this[k]}};\n\t\t}\n\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n\t\tGun.on('create', function lg(root){\n\t\t\tthis.to.next(root);\n\t\t\tvar opt = root.opt, graph = root.graph, acks = [], disk, to, size, stop;\n\t\t\tif(false === opt.localStorage){ return }\n\t\t\topt.prefix = opt.file || 'gun/';\n\t\t\ttry{ disk = lg[opt.prefix] = lg[opt.prefix] || JSON.parse(size = store.getItem(opt.prefix)) || {}; // TODO: Perf! This will block, should we care, since limited to 5MB anyways?\n\t\t\t}catch(e){ disk = lg[opt.prefix] = {}; }\n\t\t\tsize = (size||'').length;\n\n\t\t\troot.on('get', function(msg){\n\t\t\t\tthis.to.next(msg);\n\t\t\t\tvar lex = msg.get, soul, data, tmp, u;\n\t\t\t\tif(!lex || !(soul = lex['#'])){ return }\n\t\t\t\tdata = disk[soul] || u;\n\t\t\t\tif(data && (tmp = lex['.']) && !Object.plain(tmp)){ // pluck!\n\t\t\t\t\tdata = Gun.state.ify({}, tmp, Gun.state.is(data, tmp), data[tmp], soul);\n\t\t\t\t}\n\t\t\t\t//if(data){ (tmp = {})[soul] = data } // back into a graph.\n\t\t\t\t//setTimeout(function(){\n\t\t\t\tGun.on.get.ack(msg, data); //root.on('in', {'@': msg['#'], put: tmp, lS:1});// || root.$});\n\t\t\t\t//}, Math.random() * 10); // FOR TESTING PURPOSES!\n\t\t\t});\n\n\t\t\troot.on('put', function(msg){\n\t\t\t\tthis.to.next(msg); // remember to call next middleware adapter\n\t\t\t\tvar put = msg.put, soul = put['#'], key = put['.'], id = msg['#'], ok = msg.ok||'', tmp; // pull data off wire envelope\n\t\t\t\tdisk[soul] = Gun.state.ify(disk[soul], key, put['>'], put[':'], soul); // merge into disk object\n\t\t\t\tif(stop && size > (4999880)){ root.on('in', {'@': id, err: \"localStorage max!\"}); return; }\n\t\t\t\t//if(!msg['@']){ acks.push(id) } // then ack any non-ack write. // TODO: use batch id.\n\t\t\t\tif(!msg['@'] && (!msg._.via || Math.random() < (ok['@'] / ok['/']))){ acks.push(id) } // then ack any non-ack write. // TODO: use batch id.\n\t\t\t\tif(to){ return }\n\t\t\t\tto = setTimeout(flush, 9+(size / 333)); // 0.1MB = 0.3s, 5MB = 15s \n\t\t\t});\n\t\t\tfunction flush(){\n\t\t\t\tif(!acks.length && ((setTimeout.turn||'').s||'').length){ setTimeout(flush,99); return; } // defer if \"busy\" && no saves.\n\t\t\t\tvar err, ack = acks; clearTimeout(to); to = false; acks = [];\n\t\t\t\tjson(disk, function(err, tmp){\n\t\t\t\t\ttry{!err && store.setItem(opt.prefix, tmp);\n\t\t\t\t\t}catch(e){ err = stop = e || \"localStorage failure\" }\n\t\t\t\t\tif(err){\n\t\t\t\t\t\tGun.log(err + \" Consider using GUN's IndexedDB plugin for RAD for more storage space, https://gun.eco/docs/RAD#install\");\n\t\t\t\t\t\troot.on('localStorage:error', {err: err, get: opt.prefix, put: disk});\n\t\t\t\t\t}\n\t\t\t\t\tsize = tmp.length;\n\n\t\t\t\t\t//if(!err && !Object.empty(opt.peers)){ return } // only ack if there are no peers. // Switch this to probabilistic mode\n\t\t\t\t\tsetTimeout.each(ack, function(id){\n\t\t\t\t\t\troot.on('in', {'@': id, err: err, ok: 0}); // localStorage isn't reliable, so make its `ok` code be a low number.\n\t\t\t\t\t},0,99);\n\t\t\t\t})\n\t\t\t}\n\t\t\n\t\t});\n\t})(USE, './localStorage');\n\n}());\n\n/* BELOW IS TEMPORARY FOR OLD INTERNAL COMPATIBILITY, THEY ARE IMMEDIATELY DEPRECATED AND WILL BE REMOVED IN NEXT VERSION */\n;(function(){\n\tvar u;\n\tif(''+u == typeof Gun){ return }\n\tvar DEP = function(n){ console.warn(\"Warning! Deprecated internal utility will break in next version:\", n) }\n\t// Generic javascript utilities.\n\tvar Type = Gun;\n\t//Type.fns = Type.fn = {is: function(fn){ return (!!fn && fn instanceof Function) }}\n\tType.fn = Type.fn || {is: function(fn){ DEP('fn'); return (!!fn && 'function' == typeof fn) }}\n\tType.bi = Type.bi || {is: function(b){ DEP('bi');return (b instanceof Boolean || typeof b == 'boolean') }}\n\tType.num = Type.num || {is: function(n){ DEP('num'); return !list_is(n) && ((n - parseFloat(n) + 1) >= 0 || Infinity === n || -Infinity === n) }}\n\tType.text = Type.text || {is: function(t){ DEP('text'); return (typeof t == 'string') }}\n\tType.text.ify = Type.text.ify || function(t){ DEP('text.ify');\n\t\tif(Type.text.is(t)){ return t }\n\t\tif(typeof JSON !== \"undefined\"){ return JSON.stringify(t) }\n\t\treturn (t && t.toString)? t.toString() : t;\n\t}\n\tType.text.random = Type.text.random || function(l, c){ DEP('text.random');\n\t\tvar s = '';\n\t\tl = l || 24; // you are not going to make a 0 length random number, so no need to check type\n\t\tc = c || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz';\n\t\twhile(l > 0){ s += c.charAt(Math.floor(Math.random() * c.length)); l-- }\n\t\treturn s;\n\t}\n\tType.text.match = Type.text.match || function(t, o){ var tmp, u; DEP('text.match');\n\t\tif('string' !== typeof t){ return false }\n\t\tif('string' == typeof o){ o = {'=': o} }\n\t\to = o || {};\n\t\ttmp = (o['='] || o['*'] || o['>'] || o['<']);\n\t\tif(t === tmp){ return true }\n\t\tif(u !== o['=']){ return false }\n\t\ttmp = (o['*'] || o['>'] || o['<']);\n\t\tif(t.slice(0, (tmp||'').length) === tmp){ return true }\n\t\tif(u !== o['*']){ return false }\n\t\tif(u !== o['>'] && u !== o['<']){\n\t\t\treturn (t >= o['>'] && t <= o['<'])? true : false;\n\t\t}\n\t\tif(u !== o['>'] && t >= o['>']){ return true }\n\t\tif(u !== o['<'] && t <= o['<']){ return true }\n\t\treturn false;\n\t}\n\tType.text.hash = Type.text.hash || function(s, c){ // via SO\n\t\tDEP('text.hash');\n\t\tif(typeof s !== 'string'){ return }\n\t c = c || 0;\n\t if(!s.length){ return c }\n\t for(var i=0,l=s.length,n; i B){ return 1 }\n\t\t\telse { return 0 }\n\t\t}\n\t}\n\tType.list.map = Type.list.map || function(l, c, _){ DEP('list.map'); return obj_map(l, c, _) }\n\tType.list.index = 1; // change this to 0 if you want non-logical, non-mathematical, non-matrix, non-convenient array notation\n\tType.obj = Type.boj || {is: function(o){ DEP('obj'); return o? (o instanceof Object && o.constructor === Object) || Object.prototype.toString.call(o).match(/^\\[object (\\w+)\\]$/)[1] === 'Object' : false }}\n\tType.obj.put = Type.obj.put || function(o, k, v){ DEP('obj.put'); return (o||{})[k] = v, o }\n\tType.obj.has = Type.obj.has || function(o, k){ DEP('obj.has'); return o && Object.prototype.hasOwnProperty.call(o, k) }\n\tType.obj.del = Type.obj.del || function(o, k){ DEP('obj.del'); \n\t\tif(!o){ return }\n\t\to[k] = null;\n\t\tdelete o[k];\n\t\treturn o;\n\t}\n\tType.obj.as = Type.obj.as || function(o, k, v, u){ DEP('obj.as'); return o[k] = o[k] || (u === v? {} : v) }\n\tType.obj.ify = Type.obj.ify || function(o){ DEP('obj.ify'); \n\t\tif(obj_is(o)){ return o }\n\t\ttry{o = JSON.parse(o);\n\t\t}catch(e){o={}};\n\t\treturn o;\n\t}\n\t;(function(){ var u;\n\t\tfunction map(v,k){\n\t\t\tif(obj_has(this,k) && u !== this[k]){ return }\n\t\t\tthis[k] = v;\n\t\t}\n\t\tType.obj.to = Type.obj.to || function(from, to){ DEP('obj.to'); \n\t\t\tto = to || {};\n\t\t\tobj_map(from, map, to);\n\t\t\treturn to;\n\t\t}\n\t}());\n\tType.obj.copy = Type.obj.copy || function(o){ DEP('obj.copy'); // because http://web.archive.org/web/20140328224025/http://jsperf.com/cloning-an-object/2\n\t\treturn !o? o : JSON.parse(JSON.stringify(o)); // is shockingly faster than anything else, and our data has to be a subset of JSON anyways!\n\t}\n\t;(function(){\n\t\tfunction empty(v,i){ var n = this.n, u;\n\t\t\tif(n && (i === n || (obj_is(n) && obj_has(n, i)))){ return }\n\t\t\tif(u !== i){ return true }\n\t\t}\n\t\tType.obj.empty = Type.obj.empty || function(o, n){ DEP('obj.empty'); \n\t\t\tif(!o){ return true }\n\t\t\treturn obj_map(o,empty,{n:n})? false : true;\n\t\t}\n\t}());\n\t;(function(){\n\t\tfunction t(k,v){\n\t\t\tif(2 === arguments.length){\n\t\t\t\tt.r = t.r || {};\n\t\t\t\tt.r[k] = v;\n\t\t\t\treturn;\n\t\t\t} t.r = t.r || [];\n\t\t\tt.r.push(k);\n\t\t};\n\t\tvar keys = Object.keys, map, u;\n\t\tObject.keys = Object.keys || function(o){ return map(o, function(v,k,t){t(k)}) }\n\t\tType.obj.map = map = Type.obj.map || function(l, c, _){ DEP('obj.map'); \n\t\t\tvar u, i = 0, x, r, ll, lle, f = 'function' == typeof c;\n\t\t\tt.r = u;\n\t\t\tif(keys && obj_is(l)){\n\t\t\t\tll = keys(l); lle = true;\n\t\t\t}\n\t\t\t_ = _ || {};\n\t\t\tif(list_is(l) || ll){\n\t\t\t\tx = (ll || l).length;\n\t\t\t\tfor(;i < x; i++){\n\t\t\t\t\tvar ii = (i + Type.list.index);\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tr = lle? c.call(_, l[ll[i]], ll[i], t) : c.call(_, l[i], ii, t);\n\t\t\t\t\t\tif(r !== u){ return r }\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if(Type.test.is(c,l[i])){ return ii } // should implement deep equality testing!\n\t\t\t\t\t\tif(c === l[lle? ll[i] : i]){ return ll? ll[i] : ii } // use this for now\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor(i in l){\n\t\t\t\t\tif(f){\n\t\t\t\t\t\tif(obj_has(l,i)){\n\t\t\t\t\t\t\tr = _? c.call(_, l[i], i, t) : c(l[i], i, t);\n\t\t\t\t\t\t\tif(r !== u){ return r }\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if(a.test.is(c,l[i])){ return i } // should implement deep equality testing!\n\t\t\t\t\t\tif(c === l[i]){ return i } // use this for now\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn f? t.r : Type.list.index? 0 : -1;\n\t\t}\n\t}());\n\tType.time = Type.time || {};\n\tType.time.is = Type.time.is || function(t){ DEP('time'); return t? t instanceof Date : (+new Date().getTime()) }\n\n\tvar fn_is = Type.fn.is;\n\tvar list_is = Type.list.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_has = obj.has, obj_map = obj.map;\n\n\tvar Val = {};\n\tVal.is = function(v){ DEP('val.is'); // Valid values are a subset of JSON: null, binary, number (!Infinity), text, or a soul relation. Arrays need special algorithms to handle concurrency, so they are not supported directly. Use an extension that supports them if needed but research their problems first.\n\t\tif(v === u){ return false }\n\t\tif(v === null){ return true } // \"deletes\", nulling out keys.\n\t\tif(v === Infinity){ return false } // we want this to be, but JSON does not support it, sad face.\n\t\tif(text_is(v) // by \"text\" we mean strings.\n\t\t|| bi_is(v) // by \"binary\" we mean boolean.\n\t\t|| num_is(v)){ // by \"number\" we mean integers or decimals.\n\t\t\treturn true; // simple values are valid.\n\t\t}\n\t\treturn Val.link.is(v) || false; // is the value a soul relation? Then it is valid and return it. If not, everything else remaining is an invalid data type. Custom extensions can be built on top of these primitives to support other types.\n\t}\n\tVal.link = Val.rel = {_: '#'};\n\t;(function(){\n\t\tVal.link.is = function(v){ DEP('val.link.is'); // this defines whether an object is a soul relation or not, they look like this: {'#': 'UUID'}\n\t\t\tif(v && v[rel_] && !v._ && obj_is(v)){ // must be an object.\n\t\t\t\tvar o = {};\n\t\t\t\tobj_map(v, map, o);\n\t\t\t\tif(o.id){ // a valid id was found.\n\t\t\t\t\treturn o.id; // yay! Return it.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false; // the value was not a valid soul relation.\n\t\t}\n\t\tfunction map(s, k){ var o = this; // map over the object...\n\t\t\tif(o.id){ return o.id = false } // if ID is already defined AND we're still looping through the object, it is considered invalid.\n\t\t\tif(k == rel_ && text_is(s)){ // the key should be '#' and have a text value.\n\t\t\t\to.id = s; // we found the soul!\n\t\t\t} else {\n\t\t\t\treturn o.id = false; // if there exists anything else on the object that isn't the soul, then it is considered invalid.\n\t\t\t}\n\t\t}\n\t}());\n\tVal.link.ify = function(t){ DEP('val.link.ify'); return obj_put({}, rel_, t) } // convert a soul into a relation and return it.\n\tType.obj.has._ = '.';\n\tvar rel_ = Val.link._, u;\n\tvar bi_is = Type.bi.is;\n\tvar num_is = Type.num.is;\n\tvar text_is = Type.text.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_put = obj.put, obj_map = obj.map;\n\n\tType.val = Type.val || Val;\n\n\tvar Node = {_: '_'};\n\tNode.soul = function(n, o){ DEP('node.soul'); return (n && n._ && n._[o || soul_]) } // convenience function to check to see if there is a soul on a node and return it.\n\tNode.soul.ify = function(n, o){ DEP('node.soul.ify'); // put a soul on an object.\n\t\to = (typeof o === 'string')? {soul: o} : o || {};\n\t\tn = n || {}; // make sure it exists.\n\t\tn._ = n._ || {}; // make sure meta exists.\n\t\tn._[soul_] = o.soul || n._[soul_] || text_random(); // put the soul on it.\n\t\treturn n;\n\t}\n\tNode.soul._ = Val.link._;\n\t;(function(){\n\t\tNode.is = function(n, cb, as){ DEP('node.is'); var s; // checks to see if an object is a valid node.\n\t\t\tif(!obj_is(n)){ return false } // must be an object.\n\t\t\tif(s = Node.soul(n)){ // must have a soul on it.\n\t\t\t\treturn !obj_map(n, map, {as:as,cb:cb,s:s,n:n});\n\t\t\t}\n\t\t\treturn false; // nope! This was not a valid node.\n\t\t}\n\t\tfunction map(v, k){ // we invert this because the way we check for this is via a negation.\n\t\t\tif(k === Node._){ return } // skip over the metadata.\n\t\t\tif(!Val.is(v)){ return true } // it is true that this is an invalid node.\n\t\t\tif(this.cb){ this.cb.call(this.as, v, k, this.n, this.s) } // optionally callback each key/value.\n\t\t}\n\t}());\n\t;(function(){\n\t\tNode.ify = function(obj, o, as){ DEP('node.ify'); // returns a node from a shallow object.\n\t\t\tif(!o){ o = {} }\n\t\t\telse if(typeof o === 'string'){ o = {soul: o} }\n\t\t\telse if('function' == typeof o){ o = {map: o} }\n\t\t\tif(o.map){ o.node = o.map.call(as, obj, u, o.node || {}) }\n\t\t\tif(o.node = Node.soul.ify(o.node || {}, o)){\n\t\t\t\tobj_map(obj, map, {o:o,as:as});\n\t\t\t}\n\t\t\treturn o.node; // This will only be a valid node if the object wasn't already deep!\n\t\t}\n\t\tfunction map(v, k){ var o = this.o, tmp, u; // iterate over each key/value.\n\t\t\tif(o.map){\n\t\t\t\ttmp = o.map.call(this.as, v, ''+k, o.node);\n\t\t\t\tif(u === tmp){\n\t\t\t\t\tobj_del(o.node, k);\n\t\t\t\t} else\n\t\t\t\tif(o.node){ o.node[k] = tmp }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(Val.is(v)){\n\t\t\t\to.node[k] = v;\n\t\t\t}\n\t\t}\n\t}());\n\tvar obj = Type.obj, obj_is = obj.is, obj_del = obj.del, obj_map = obj.map;\n\tvar text = Type.text, text_random = text.random;\n\tvar soul_ = Node.soul._;\n\tvar u;\n\tType.node = Type.node || Node;\n\n\tvar State = Type.state;\n\tState.lex = function(){ DEP('state.lex'); return State().toString(36).replace('.','') }\n\tState.to = function(from, k, to){ DEP('state.to'); \n\t\tvar val = (from||{})[k];\n\t\tif(obj_is(val)){\n\t\t\tval = obj_copy(val);\n\t\t}\n\t\treturn State.ify(to, k, State.is(from, k), val, Node.soul(from));\n\t}\n\t;(function(){\n\t\tState.map = function(cb, s, as){ DEP('state.map'); var u; // for use with Node.ify\n\t\t\tvar o = obj_is(o = cb || s)? o : null;\n\t\t\tcb = fn_is(cb = cb || s)? cb : null;\n\t\t\tif(o && !cb){\n\t\t\t\ts = num_is(s)? s : State();\n\t\t\t\to[N_] = o[N_] || {};\n\t\t\t\tobj_map(o, map, {o:o,s:s});\n\t\t\t\treturn o;\n\t\t\t}\n\t\t\tas = as || obj_is(s)? s : u;\n\t\t\ts = num_is(s)? s : State();\n\t\t\treturn function(v, k, o, opt){\n\t\t\t\tif(!cb){\n\t\t\t\t\tmap.call({o: o, s: s}, v,k);\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\tcb.call(as || this || {}, v, k, o, opt);\n\t\t\t\tif(obj_has(o,k) && u === o[k]){ return }\n\t\t\t\tmap.call({o: o, s: s}, v,k);\n\t\t\t}\n\t\t}\n\t\tfunction map(v,k){\n\t\t\tif(N_ === k){ return }\n\t\t\tState.ify(this.o, k, this.s) ;\n\t\t}\n\t}());\n\tvar obj = Type.obj, obj_as = obj.as, obj_has = obj.has, obj_is = obj.is, obj_map = obj.map, obj_copy = obj.copy;\n\tvar num = Type.num, num_is = num.is;\n\tvar fn = Type.fn, fn_is = fn.is;\n\tvar N_ = Node._, u;\n\n\tvar Graph = {};\n\t;(function(){\n\t\tGraph.is = function(g, cb, fn, as){ DEP('graph.is'); // checks to see if an object is a valid graph.\n\t\t\tif(!g || !obj_is(g) || obj_empty(g)){ return false } // must be an object.\n\t\t\treturn !obj_map(g, map, {cb:cb,fn:fn,as:as}); // makes sure it wasn't an empty object.\n\t\t}\n\t\tfunction map(n, s){ // we invert this because the way'? we check for this is via a negation.\n\t\t\tif(!n || s !== Node.soul(n) || !Node.is(n, this.fn, this.as)){ return true } // it is true that this is an invalid graph.\n\t\t\tif(!this.cb){ return }\n\t\t\tnf.n = n; nf.as = this.as; // sequential race conditions aren't races.\n\t\t\tthis.cb.call(nf.as, n, s, nf);\n\t\t}\n\t\tfunction nf(fn){ // optional callback for each node.\n\t\t\tif(fn){ Node.is(nf.n, fn, nf.as) } // where we then have an optional callback for each key/value.\n\t\t}\n\t}());\n\t;(function(){\n\t\tGraph.ify = function(obj, env, as){ DEP('graph.ify'); \n\t\t\tvar at = {path: [], obj: obj};\n\t\t\tif(!env){\n\t\t\t\tenv = {};\n\t\t\t} else\n\t\t\tif(typeof env === 'string'){\n\t\t\t\tenv = {soul: env};\n\t\t\t} else\n\t\t\tif('function' == typeof env){\n\t\t\t\tenv.map = env;\n\t\t\t}\n\t\t\tif(typeof as === 'string'){\n\t\t\t\tenv.soul = env.soul || as;\n\t\t\t\tas = u;\n\t\t\t}\n\t\t\tif(env.soul){\n\t\t\t\tat.link = Val.link.ify(env.soul);\n\t\t\t}\n\t\t\tenv.shell = (as||{}).shell;\n\t\t\tenv.graph = env.graph || {};\n\t\t\tenv.seen = env.seen || [];\n\t\t\tenv.as = env.as || as;\n\t\t\tnode(env, at);\n\t\t\tenv.root = at.node;\n\t\t\treturn env.graph;\n\t\t}\n\t\tfunction node(env, at){ var tmp;\n\t\t\tif(tmp = seen(env, at)){ return tmp }\n\t\t\tat.env = env;\n\t\t\tat.soul = soul;\n\t\t\tif(Node.ify(at.obj, map, at)){\n\t\t\t\tat.link = at.link || Val.link.ify(Node.soul(at.node));\n\t\t\t\tif(at.obj !== env.shell){\n\t\t\t\t\tenv.graph[Val.link.is(at.link)] = at.node;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn at;\n\t\t}\n\t\tfunction map(v,k,n){\n\t\t\tvar at = this, env = at.env, is, tmp;\n\t\t\tif(Node._ === k && obj_has(v,Val.link._)){\n\t\t\t\treturn n._; // TODO: Bug?\n\t\t\t}\n\t\t\tif(!(is = valid(v,k,n, at,env))){ return }\n\t\t\tif(!k){\n\t\t\t\tat.node = at.node || n || {};\n\t\t\t\tif(obj_has(v, Node._) && Node.soul(v)){ // ? for safety ?\n\t\t\t\t\tat.node._ = obj_copy(v._);\n\t\t\t\t}\n\t\t\t\tat.node = Node.soul.ify(at.node, Val.link.is(at.link));\n\t\t\t\tat.link = at.link || Val.link.ify(Node.soul(at.node));\n\t\t\t}\n\t\t\tif(tmp = env.map){\n\t\t\t\ttmp.call(env.as || {}, v,k,n, at);\n\t\t\t\tif(obj_has(n,k)){\n\t\t\t\t\tv = n[k];\n\t\t\t\t\tif(u === v){\n\t\t\t\t\t\tobj_del(n, k);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(!(is = valid(v,k,n, at,env))){ return }\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!k){ return at.node }\n\t\t\tif(true === is){\n\t\t\t\treturn v;\n\t\t\t}\n\t\t\ttmp = node(env, {obj: v, path: at.path.concat(k)});\n\t\t\tif(!tmp.node){ return }\n\t\t\treturn tmp.link; //{'#': Node.soul(tmp.node)};\n\t\t}\n\t\tfunction soul(id){ var at = this;\n\t\t\tvar prev = Val.link.is(at.link), graph = at.env.graph;\n\t\t\tat.link = at.link || Val.link.ify(id);\n\t\t\tat.link[Val.link._] = id;\n\t\t\tif(at.node && at.node[Node._]){\n\t\t\t\tat.node[Node._][Val.link._] = id;\n\t\t\t}\n\t\t\tif(obj_has(graph, prev)){\n\t\t\t\tgraph[id] = graph[prev];\n\t\t\t\tobj_del(graph, prev);\n\t\t\t}\n\t\t}\n\t\tfunction valid(v,k,n, at,env){ var tmp;\n\t\t\tif(Val.is(v)){ return true }\n\t\t\tif(obj_is(v)){ return 1 }\n\t\t\tif(tmp = env.invalid){\n\t\t\t\tv = tmp.call(env.as || {}, v,k,n);\n\t\t\t\treturn valid(v,k,n, at,env);\n\t\t\t}\n\t\t\tenv.err = \"Invalid value at '\" + at.path.concat(k).join('.') + \"'!\";\n\t\t\tif(Type.list.is(v)){ env.err += \" Use `.set(item)` instead of an Array.\" }\n\t\t}\n\t\tfunction seen(env, at){\n\t\t\tvar arr = env.seen, i = arr.length, has;\n\t\t\twhile(i--){ has = arr[i];\n\t\t\t\tif(at.obj === has.obj){ return has }\n\t\t\t}\n\t\t\tarr.push(at);\n\t\t}\n\t}());\n\tGraph.node = function(node){ DEP('graph.node'); \n\t\tvar soul = Node.soul(node);\n\t\tif(!soul){ return }\n\t\treturn obj_put({}, soul, node);\n\t}\n\t;(function(){\n\t\tGraph.to = function(graph, root, opt){ DEP('graph.to'); \n\t\t\tif(!graph){ return }\n\t\t\tvar obj = {};\n\t\t\topt = opt || {seen: {}};\n\t\t\tobj_map(graph[root], map, {obj:obj, graph: graph, opt: opt});\n\t\t\treturn obj;\n\t\t}\n\t\tfunction map(v,k){ var tmp, obj;\n\t\t\tif(Node._ === k){\n\t\t\t\tif(obj_empty(v, Val.link._)){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.obj[k] = obj_copy(v);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!(tmp = Val.link.is(v))){\n\t\t\t\tthis.obj[k] = v;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(obj = this.opt.seen[tmp]){\n\t\t\t\tthis.obj[k] = obj;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.obj[k] = this.opt.seen[tmp] = Graph.to(this.graph, tmp, this.opt);\n\t\t}\n\t}());\n\tvar fn_is = Type.fn.is;\n\tvar obj = Type.obj, obj_is = obj.is, obj_del = obj.del, obj_has = obj.has, obj_empty = obj.empty, obj_put = obj.put, obj_map = obj.map, obj_copy = obj.copy;\n\tvar u;\n\tType.graph = Type.graph || Graph;\n}());",";(function(){\n\n var window = this || self || window;\n\n /* UNBUILD */\n function USE(arg, req){\n return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){\n arg(mod = {exports: {}});\n USE[R(path)] = mod.exports;\n }\n function R(p){\n return p.split('/').slice(-1).toString().replace('.js','');\n }\n }\n if(typeof module !== \"undefined\"){ var MODULE = module }\n /* UNBUILD */\n\n ;USE(function(module){\n // Security, Encryption, and Authorization: SEA.js\n // MANDATORY READING: https://gun.eco/explainers/data/security.html\n // IT IS IMPLEMENTED IN A POLYFILL/SHIM APPROACH.\n // THIS IS AN EARLY ALPHA!\n\n if(typeof window !== \"undefined\"){ module.window = window }\n\n var tmp = module.window || module, u;\n var SEA = tmp.SEA || {};\n\n if(SEA.window = module.window){ SEA.window.SEA = SEA }\n\n try{ if(u+'' !== typeof MODULE){ MODULE.exports = SEA } }catch(e){}\n module.exports = SEA;\n })(USE, './root');\n\n ;USE(function(module){\n var SEA = USE('./root');\n try{ if(SEA.window){\n if(location.protocol.indexOf('s') < 0\n && location.host.indexOf('localhost') < 0\n && ! /^127\\.\\d+\\.\\d+\\.\\d+$/.test(location.hostname)\n && location.protocol.indexOf('file:') < 0){\n console.warn('HTTPS needed for WebCrypto in SEA, redirecting...');\n location.protocol = 'https:'; // WebCrypto does NOT work without HTTPS!\n }\n } }catch(e){}\n })(USE, './https');\n\n ;USE(function(module){\n var u;\n if(u+''== typeof btoa){\n if(u+'' == typeof Buffer){\n try{ global.Buffer = USE(\"buffer\", 1).Buffer }catch(e){ console.log(\"Please `npm install buffer` or add it to your package.json !\") }\n }\n global.btoa = function(data){ return Buffer.from(data, \"binary\").toString(\"base64\") };\n global.atob = function(data){ return Buffer.from(data, \"base64\").toString(\"binary\") };\n }\n })(USE, './base64');\n\n ;USE(function(module){\n USE('./base64');\n // This is Array extended to have .toString(['utf8'|'hex'|'base64'])\n function SeaArray() {}\n Object.assign(SeaArray, { from: Array.from })\n SeaArray.prototype = Object.create(Array.prototype)\n SeaArray.prototype.toString = function(enc, start, end) { enc = enc || 'utf8'; start = start || 0;\n const length = this.length\n if (enc === 'hex') {\n const buf = new Uint8Array(this)\n return [ ...Array(((end && (end + 1)) || length) - start).keys()]\n .map((i) => buf[ i + start ].toString(16).padStart(2, '0')).join('')\n }\n if (enc === 'utf8') {\n return Array.from(\n { length: (end || length) - start },\n (_, i) => String.fromCharCode(this[ i + start])\n ).join('')\n }\n if (enc === 'base64') {\n return btoa(this)\n }\n }\n module.exports = SeaArray;\n })(USE, './array');\n\n ;USE(function(module){\n USE('./base64');\n // This is Buffer implementation used in SEA. Functionality is mostly\n // compatible with NodeJS 'safe-buffer' and is used for encoding conversions\n // between binary and 'hex' | 'utf8' | 'base64'\n // See documentation and validation for safe implementation in:\n // https://github.com/feross/safe-buffer#update\n var SeaArray = USE('./array');\n function SafeBuffer(...props) {\n console.warn('new SafeBuffer() is depreciated, please use SafeBuffer.from()')\n return SafeBuffer.from(...props)\n }\n SafeBuffer.prototype = Object.create(Array.prototype)\n Object.assign(SafeBuffer, {\n // (data, enc) where typeof data === 'string' then enc === 'utf8'|'hex'|'base64'\n from() {\n if (!Object.keys(arguments).length || arguments[0]==null) {\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n }\n const input = arguments[0]\n let buf\n if (typeof input === 'string') {\n const enc = arguments[1] || 'utf8'\n if (enc === 'hex') {\n const bytes = input.match(/([\\da-fA-F]{2})/g)\n .map((byte) => parseInt(byte, 16))\n if (!bytes || !bytes.length) {\n throw new TypeError('Invalid first argument for type \\'hex\\'.')\n }\n buf = SeaArray.from(bytes)\n } else if (enc === 'utf8' || 'binary' === enc) { // EDIT BY MARK: I think this is safe, tested it against a couple \"binary\" strings. This lets SafeBuffer match NodeJS Buffer behavior more where it safely btoas regular strings.\n const length = input.length\n const words = new Uint16Array(length)\n Array.from({ length: length }, (_, i) => words[i] = input.charCodeAt(i))\n buf = SeaArray.from(words)\n } else if (enc === 'base64') {\n const dec = atob(input)\n const length = dec.length\n const bytes = new Uint8Array(length)\n Array.from({ length: length }, (_, i) => bytes[i] = dec.charCodeAt(i))\n buf = SeaArray.from(bytes)\n } else if (enc === 'binary') { // deprecated by above comment\n buf = SeaArray.from(input) // some btoas were mishandled.\n } else {\n console.info('SafeBuffer.from unknown encoding: '+enc)\n }\n return buf\n }\n const byteLength = input.byteLength // what is going on here? FOR MARTTI\n const length = input.byteLength ? input.byteLength : input.length\n if (length) {\n let buf\n if (input instanceof ArrayBuffer) {\n buf = new Uint8Array(input)\n }\n return SeaArray.from(buf || input)\n }\n },\n // This is 'safe-buffer.alloc' sans encoding support\n alloc(length, fill = 0 /*, enc*/ ) {\n return SeaArray.from(new Uint8Array(Array.from({ length: length }, () => fill)))\n },\n // This is normal UNSAFE 'buffer.alloc' or 'new Buffer(length)' - don't use!\n allocUnsafe(length) {\n return SeaArray.from(new Uint8Array(Array.from({ length : length })))\n },\n // This puts together array of array like members\n concat(arr) { // octet array\n if (!Array.isArray(arr)) {\n throw new TypeError('First argument must be Array containing ArrayBuffer or Uint8Array instances.')\n }\n return SeaArray.from(arr.reduce((ret, item) => ret.concat(Array.from(item)), []))\n }\n })\n SafeBuffer.prototype.from = SafeBuffer.from\n SafeBuffer.prototype.toString = SeaArray.prototype.toString\n\n module.exports = SafeBuffer;\n })(USE, './buffer');\n\n ;USE(function(module){\n const SEA = USE('./root')\n const api = {Buffer: USE('./buffer')}\n var o = {}, u;\n\n // ideally we can move away from JSON entirely? unlikely due to compatibility issues... oh well.\n JSON.parseAsync = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n JSON.stringifyAsync = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\n api.parse = function(t,r){ return new Promise(function(res, rej){\n JSON.parseAsync(t,function(err, raw){ err? rej(err) : res(raw) },r);\n })}\n api.stringify = function(v,r,s){ return new Promise(function(res, rej){\n JSON.stringifyAsync(v,function(err, raw){ err? rej(err) : res(raw) },r,s);\n })}\n\n if(SEA.window){\n api.crypto = window.crypto || window.msCrypto\n api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle;\n api.TextEncoder = window.TextEncoder;\n api.TextDecoder = window.TextDecoder;\n api.random = (len) => api.Buffer.from(api.crypto.getRandomValues(new Uint8Array(api.Buffer.alloc(len))));\n }\n if(!api.TextDecoder)\n {\n const { TextEncoder, TextDecoder } = USE((u+'' == typeof MODULE?'.':'')+'./lib/text-encoding', 1);\n api.TextDecoder = TextDecoder;\n api.TextEncoder = TextEncoder;\n }\n if(!api.crypto)\n {\n try\n {\n var crypto = USE('crypto', 1);\n Object.assign(api, {\n crypto,\n random: (len) => api.Buffer.from(crypto.randomBytes(len))\n }); \n const { Crypto: WebCrypto } = USE('@peculiar/webcrypto', 1);\n api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH\n }\n catch(e){\n console.log(\"Please `npm install @peculiar/webcrypto` or add it to your package.json !\");\n }}\n\n module.exports = api\n })(USE, './shim');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var s = {};\n s.pbkdf2 = {hash: {name : 'SHA-256'}, iter: 100000, ks: 64};\n s.ecdsa = {\n pair: {name: 'ECDSA', namedCurve: 'P-256'},\n sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}\n };\n s.ecdh = {name: 'ECDH', namedCurve: 'P-256'};\n\n // This creates Web Cryptography API compliant JWK for sign/verify purposes\n s.jwk = function(pub, d){ // d === priv\n pub = pub.split('.');\n var x = pub[0], y = pub[1];\n var jwk = {kty: \"EC\", crv: \"P-256\", x: x, y: y, ext: true};\n jwk.key_ops = d ? ['sign'] : ['verify'];\n if(d){ jwk.d = d }\n return jwk;\n };\n \n s.keyToJwk = function(keyBytes) {\n const keyB64 = keyBytes.toString('base64');\n const k = keyB64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=/g, '');\n return { kty: 'oct', k: k, ext: false, alg: 'A256GCM' };\n }\n\n s.recall = {\n validity: 12 * 60 * 60, // internally in seconds : 12 hours\n hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)\n };\n\n s.check = function(t){ return (typeof t == 'string') && ('SEA{' === t.slice(0,4)) }\n s.parse = async function p(t){ try {\n var yes = (typeof t == 'string');\n if(yes && 'SEA{' === t.slice(0,4)){ t = t.slice(3) }\n return yes ? await shim.parse(t) : t;\n } catch (e) {}\n return t;\n }\n\n SEA.opt = s;\n module.exports = s\n })(USE, './settings');\n\n ;USE(function(module){\n var shim = USE('./shim');\n module.exports = async function(d, o){\n var t = (typeof d == 'string')? d : await shim.stringify(d);\n var hash = await shim.subtle.digest({name: o||'SHA-256'}, new shim.TextEncoder().encode(t));\n return shim.Buffer.from(hash);\n }\n })(USE, './sha256');\n\n ;USE(function(module){\n // This internal func returns SHA-1 hashed data for KeyID generation\n const __shim = USE('./shim')\n const subtle = __shim.subtle\n const ossl = __shim.ossl ? __shim.ossl : subtle\n const sha1hash = (b) => ossl.digest({name: 'SHA-1'}, new ArrayBuffer(b))\n module.exports = sha1hash\n })(USE, './sha1');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.work = SEA.work || (async (data, pair, cb, opt) => { try { // used to be named `proof`\n var salt = (pair||{}).epub || pair; // epub not recommended, salt should be random!\n opt = opt || {};\n if(salt instanceof Function){\n cb = salt;\n salt = u;\n }\n data = (typeof data == 'string')? data : await shim.stringify(data);\n if('sha' === (opt.name||'').toLowerCase().slice(0,3)){\n var rsha = shim.Buffer.from(await sha(data, opt.name), 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(rsha) }catch(e){console.log(e)} }\n return rsha;\n }\n salt = salt || shim.random(9);\n var key = await (shim.ossl || shim.subtle).importKey('raw', new shim.TextEncoder().encode(data), {name: opt.name || 'PBKDF2'}, false, ['deriveBits']);\n var work = await (shim.ossl || shim.subtle).deriveBits({\n name: opt.name || 'PBKDF2',\n iterations: opt.iterations || S.pbkdf2.iter,\n salt: new shim.TextEncoder().encode(opt.salt || salt),\n hash: opt.hash || S.pbkdf2.hash,\n }, key, opt.length || (S.pbkdf2.ks * 8))\n data = shim.random(data.length) // Erase data in case of passphrase\n var r = shim.Buffer.from(work, 'binary').toString(opt.encode || 'base64')\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.work;\n })(USE, './work');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n\n SEA.name = SEA.name || (async (cb, opt) => { try {\n if(cb){ try{ cb() }catch(e){console.log(e)} }\n return;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n //SEA.pair = async (data, proof, cb) => { try {\n SEA.pair = SEA.pair || (async (cb, opt) => { try {\n\n var ecdhSubtle = shim.ossl || shim.subtle;\n // First: ECDSA keys for signing/verifying...\n var sa = await shim.subtle.generateKey({name: 'ECDSA', namedCurve: 'P-256'}, true, [ 'sign', 'verify' ])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n //const { d: priv } = await shim.subtle.exportKey('jwk', keys.privateKey)\n var key = {};\n key.priv = (await shim.subtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await shim.subtle.exportKey('jwk', keys.publicKey);\n //const pub = Buff.from([ x, y ].join(':')).toString('base64') // old\n key.pub = pub.x+'.'+pub.y; // new\n // x and y are already base64\n // pub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n \n // To include PGPv4 kind of keyId:\n // const pubId = await SEA.keyid(keys.pub)\n // Next: ECDH keys for encryption/decryption...\n\n try{\n var dh = await ecdhSubtle.generateKey({name: 'ECDH', namedCurve: 'P-256'}, true, ['deriveKey'])\n .then(async (keys) => {\n // privateKey scope doesn't leak out from here!\n var key = {};\n key.epriv = (await ecdhSubtle.exportKey('jwk', keys.privateKey)).d;\n var pub = await ecdhSubtle.exportKey('jwk', keys.publicKey);\n //const epub = Buff.from([ ex, ey ].join(':')).toString('base64') // old\n key.epub = pub.x+'.'+pub.y; // new\n // ex and ey are already base64\n // epub is UTF8 but filename/URL safe (https://www.ietf.org/rfc/rfc3986.txt)\n // but split on a non-base64 letter.\n return key;\n })\n }catch(e){\n if(SEA.window){ throw e }\n if(e == 'Error: ECDH is not a supported algorithm'){ console.log('Ignoring ECDH...') }\n else { throw e }\n } dh = dh || {};\n\n var r = { pub: sa.pub, priv: sa.priv, /* pubId, */ epub: dh.epub, epriv: dh.epriv }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.pair;\n })(USE, './pair');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.sign = SEA.sign || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n if(!(pair||opt).priv){\n if(!SEA.I){ throw 'No signing key.' }\n pair = await SEA.I(null, {what: data, how: 'sign', why: opt.why});\n }\n if(u === data){ throw '`undefined` not allowed.' }\n var json = await S.parse(data);\n var check = opt.check = opt.check || json;\n if(SEA.verify && (SEA.opt.check(check) || (check && check.s && check.m))\n && u !== await SEA.verify(check, pair)){ // don't sign if we already signed it.\n var r = await S.parse(check);\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n var pub = pair.pub;\n var priv = pair.priv;\n var jwk = S.jwk(pub, priv);\n var hash = await sha(json);\n var sig = await (shim.ossl || shim.subtle).importKey('jwk', jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, ['sign'])\n .then((key) => (shim.ossl || shim.subtle).sign({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, new Uint8Array(hash))) // privateKey scope doesn't leak out from here!\n var r = {m: json, s: shim.Buffer.from(sig, 'binary').toString(opt.encode || 'base64')}\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.sign;\n })(USE, './sign');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha = USE('./sha256');\n var u;\n\n SEA.verify = SEA.verify || (async (data, pair, cb, opt) => { try {\n var json = await S.parse(data);\n if(false === pair){ // don't verify!\n var raw = await S.parse(json.m);\n if(cb){ try{ cb(raw) }catch(e){console.log(e)} }\n return raw;\n }\n opt = opt || {};\n // SEA.I // verify is free! Requires no user permission.\n var pub = pair.pub || pair;\n var key = SEA.opt.slow_leak? await SEA.opt.slow_leak(pub) : await (shim.ossl || shim.subtle).importKey('jwk', S.jwk(pub), {name: 'ECDSA', namedCurve: 'P-256'}, false, ['verify']);\n var hash = await sha(json.m);\n var buf, sig, check, tmp; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64'); // NEW DEFAULT!\n sig = new Uint8Array(buf);\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash));\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){\n if(SEA.opt.fallback){\n return await SEA.opt.fall_verify(data, pair, cb, opt);\n }\n }\n var r = check? await S.parse(json.m) : u;\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e); // mismatched owner FOR MARTTI\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.verify;\n // legacy & ossl memory leak mitigation:\n\n var knownKeys = {};\n var keyForPair = SEA.opt.slow_leak = pair => {\n if (knownKeys[pair]) return knownKeys[pair];\n var jwk = S.jwk(pair);\n knownKeys[pair] = (shim.ossl || shim.subtle).importKey(\"jwk\", jwk, {name: 'ECDSA', namedCurve: 'P-256'}, false, [\"verify\"]);\n return knownKeys[pair];\n };\n\n var O = SEA.opt;\n SEA.opt.fall_verify = async function(data, pair, cb, opt, f){\n if(f === SEA.opt.fallback){ throw \"Signature did not match\" } f = f || 1;\n var tmp = data||'';\n data = SEA.opt.unpack(data) || data;\n var json = await S.parse(data), pub = pair.pub || pair, key = await SEA.opt.slow_leak(pub);\n var hash = (f <= SEA.opt.fallback)? shim.Buffer.from(await shim.subtle.digest({name: 'SHA-256'}, new shim.TextEncoder().encode(await S.parse(json.m)))) : await sha(json.m); // this line is old bad buggy code but necessary for old compatibility.\n var buf; var sig; var check; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64') // NEW DEFAULT!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n if(!check){ throw \"Signature did not match.\" }\n }catch(e){ try{\n buf = shim.Buffer.from(json.s, 'utf8') // AUTO BACKWARD OLD UTF8 DATA!\n sig = new Uint8Array(buf)\n check = await (shim.ossl || shim.subtle).verify({name: 'ECDSA', hash: {name: 'SHA-256'}}, key, sig, new Uint8Array(hash))\n }catch(e){\n if(!check){ throw \"Signature did not match.\" }\n }\n }\n var r = check? await S.parse(json.m) : u;\n O.fall_soul = tmp['#']; O.fall_key = tmp['.']; O.fall_val = data; O.fall_state = tmp['>'];\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n }\n SEA.opt.fallback = 2;\n\n })(USE, './verify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n var S = USE('./settings');\n var sha256hash = USE('./sha256');\n\n const importGen = async (key, salt, opt) => {\n //const combo = shim.Buffer.concat([shim.Buffer.from(key, 'utf8'), salt || shim.random(8)]).toString('utf8') // old\n opt = opt || {};\n const combo = key + (salt || shim.random(8)).toString('utf8'); // new\n const hash = shim.Buffer.from(await sha256hash(combo), 'binary')\n \n const jwkKey = S.keyToJwk(hash) \n return await shim.subtle.importKey('jwk', jwkKey, {name:'AES-GCM'}, false, ['encrypt', 'decrypt'])\n }\n module.exports = importGen;\n })(USE, './aeskey');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n var u;\n\n SEA.encrypt = SEA.encrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(u === data){ throw '`undefined` not allowed.' }\n if(!key){\n if(!SEA.I){ throw 'No encryption key.' }\n pair = await SEA.I(null, {what: data, how: 'encrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var msg = (typeof data == 'string')? data : await shim.stringify(data);\n var rand = {s: shim.random(9), iv: shim.random(15)}; // consider making this 9 and 15 or 18 or 12 to reduce == padding.\n var ct = await aeskey(key, rand.s, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).encrypt({ // Keeping the AES key scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(rand.iv)\n }, aes, new shim.TextEncoder().encode(msg)));\n var r = {\n ct: shim.Buffer.from(ct, 'binary').toString(opt.encode || 'base64'),\n iv: rand.iv.toString(opt.encode || 'base64'),\n s: rand.s.toString(opt.encode || 'base64')\n }\n if(!opt.raw){ r = 'SEA' + await shim.stringify(r) }\n\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.encrypt;\n })(USE, './encrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n var aeskey = USE('./aeskey');\n\n SEA.decrypt = SEA.decrypt || (async (data, pair, cb, opt) => { try {\n opt = opt || {};\n var key = (pair||opt).epriv || pair;\n if(!key){\n if(!SEA.I){ throw 'No decryption key.' }\n pair = await SEA.I(null, {what: data, how: 'decrypt', why: opt.why});\n key = pair.epriv || pair;\n }\n var json = await S.parse(data);\n var buf, bufiv, bufct; try{\n buf = shim.Buffer.from(json.s, opt.encode || 'base64');\n bufiv = shim.Buffer.from(json.iv, opt.encode || 'base64');\n bufct = shim.Buffer.from(json.ct, opt.encode || 'base64');\n var ct = await aeskey(key, buf, opt).then((aes) => (/*shim.ossl ||*/ shim.subtle).decrypt({ // Keeping aesKey scope as private as possible...\n name: opt.name || 'AES-GCM', iv: new Uint8Array(bufiv), tagLength: 128\n }, aes, new Uint8Array(bufct)));\n }catch(e){\n if('utf8' === opt.encode){ throw \"Could not decrypt\" }\n if(SEA.opt.fallback){\n opt.encode = 'utf8';\n return await SEA.decrypt(data, pair, cb, opt);\n }\n }\n var r = await S.parse(new shim.TextDecoder('utf8').decode(ct));\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) { \n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.decrypt;\n })(USE, './decrypt');\n\n ;USE(function(module){\n var SEA = USE('./root');\n var shim = USE('./shim');\n var S = USE('./settings');\n // Derive shared secret from other's pub and my epub/epriv \n SEA.secret = SEA.secret || (async (key, pair, cb, opt) => { try {\n opt = opt || {};\n if(!pair || !pair.epriv || !pair.epub){\n if(!SEA.I){ throw 'No secret mix.' }\n pair = await SEA.I(null, {what: key, how: 'secret', why: opt.why});\n }\n var pub = key.epub || key;\n var epub = pair.epub;\n var epriv = pair.epriv;\n var ecdhSubtle = shim.ossl || shim.subtle;\n var pubKeyData = keysToEcdhJwk(pub);\n var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },{name: 'ECDH', namedCurve: 'P-256'}); // Thanks to @sirpy !\n var privKeyData = keysToEcdhJwk(epub, epriv);\n var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveBits']).then(async (privKey) => {\n // privateKey scope doesn't leak out from here!\n var derivedBits = await ecdhSubtle.deriveBits(props, privKey, 256);\n var rawBits = new Uint8Array(derivedBits);\n var derivedKey = await ecdhSubtle.importKey('raw', rawBits,{ name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]);\n return ecdhSubtle.exportKey('jwk', derivedKey).then(({ k }) => k);\n })\n var r = derived;\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n console.log(e);\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n // can this be replaced with settings.jwk?\n var keysToEcdhJwk = (pub, d) => { // d === priv\n //var [ x, y ] = shim.Buffer.from(pub, 'base64').toString('utf8').split(':') // old\n var [ x, y ] = pub.split('.') // new\n var jwk = d ? { d: d } : {}\n return [ // Use with spread returned value...\n 'jwk',\n Object.assign(\n jwk,\n { x: x, y: y, kty: 'EC', crv: 'P-256', ext: true }\n ), // ??? refactor\n {name: 'ECDH', namedCurve: 'P-256'}\n ]\n }\n\n module.exports = SEA.secret;\n })(USE, './secret');\n\n ;USE(function(module){\n var SEA = USE('./root');\n // This is to certify that a group of \"certificants\" can \"put\" anything at a group of matched \"paths\" to the certificate authority's graph\n SEA.certify = SEA.certify || (async (certificants, policy = {}, authority, cb, opt = {}) => { try {\n /*\n The Certify Protocol was made out of love by a Vietnamese code enthusiast. Vietnamese people around the world deserve respect!\n IMPORTANT: A Certificate is like a Signature. No one knows who (authority) created/signed a cert until you put it into their graph.\n \"certificants\": '*' or a String (Bob.pub) || an Object that contains \"pub\" as a key || an array of [object || string]. These people will have the rights.\n \"policy\": A string ('inbox'), or a RAD/LEX object {'*': 'inbox'}, or an Array of RAD/LEX objects or strings. RAD/LEX object can contain key \"?\" with indexOf(\"*\") > -1 to force key equals certificant pub. This rule is used to check against soul+'/'+key using Gun.text.match or String.match.\n \"authority\": Key pair or priv of the certificate authority.\n \"cb\": A callback function after all things are done.\n \"opt\": If opt.expiry (a timestamp) is set, SEA won't sync data after opt.expiry. If opt.block is set, SEA will look for block before syncing.\n */\n console.log('SEA.certify() is an early experimental community supported method that may change API behavior without warning in any future version.')\n\n certificants = (() => {\n var data = []\n if (certificants) {\n if ((typeof certificants === 'string' || Array.isArray(certificants)) && certificants.indexOf('*') > -1) return '*'\n if (typeof certificants === 'string') return certificants\n if (Array.isArray(certificants)) {\n if (certificants.length === 1 && certificants[0]) return typeof certificants[0] === 'object' && certificants[0].pub ? certificants[0].pub : typeof certificants[0] === 'string' ? certificants[0] : null\n certificants.map(certificant => {\n if (typeof certificant ==='string') data.push(certificant)\n else if (typeof certificant === 'object' && certificant.pub) data.push(certificant.pub)\n })\n }\n\n if (typeof certificants === 'object' && certificants.pub) return certificants.pub\n return data.length > 0 ? data : null\n }\n return\n })()\n\n if (!certificants) return console.log(\"No certificant found.\")\n\n const expiry = opt.expiry && (typeof opt.expiry === 'number' || typeof opt.expiry === 'string') ? parseFloat(opt.expiry) : null\n const readPolicy = (policy || {}).read ? policy.read : null\n const writePolicy = (policy || {}).write ? policy.write : typeof policy === 'string' || Array.isArray(policy) || policy[\"+\"] || policy[\"#\"] || policy[\".\"] || policy[\"=\"] || policy[\"*\"] || policy[\">\"] || policy[\"<\"] ? policy : null\n // The \"blacklist\" feature is now renamed to \"block\". Why ? BECAUSE BLACK LIVES MATTER!\n // We can now use 3 keys: block, blacklist, ban\n const block = (opt || {}).block || (opt || {}).blacklist || (opt || {}).ban || {}\n const readBlock = block.read && (typeof block.read === 'string' || (block.read || {})['#']) ? block.read : null\n const writeBlock = typeof block === 'string' ? block : block.write && (typeof block.write === 'string' || block.write['#']) ? block.write : null\n\n if (!readPolicy && !writePolicy) return console.log(\"No policy found.\")\n\n // reserved keys: c, e, r, w, rb, wb\n const data = JSON.stringify({\n c: certificants,\n ...(expiry ? {e: expiry} : {}), // inject expiry if possible\n ...(readPolicy ? {r: readPolicy } : {}), // \"r\" stands for read, which means read permission.\n ...(writePolicy ? {w: writePolicy} : {}), // \"w\" stands for write, which means write permission.\n ...(readBlock ? {rb: readBlock} : {}), // inject READ block if possible\n ...(writeBlock ? {wb: writeBlock} : {}), // inject WRITE block if possible\n })\n\n const certificate = await SEA.sign(data, authority, null, {raw:1})\n\n var r = certificate\n if(!opt.raw){ r = 'SEA'+JSON.stringify(r) }\n if(cb){ try{ cb(r) }catch(e){console.log(e)} }\n return r;\n } catch(e) {\n SEA.err = e;\n if(SEA.throw){ throw e }\n if(cb){ cb() }\n return;\n }});\n\n module.exports = SEA.certify;\n })(USE, './certify');\n\n ;USE(function(module){\n var shim = USE('./shim');\n // Practical examples about usage found in tests.\n var SEA = USE('./root');\n SEA.work = USE('./work');\n SEA.sign = USE('./sign');\n SEA.verify = USE('./verify');\n SEA.encrypt = USE('./encrypt');\n SEA.decrypt = USE('./decrypt');\n SEA.certify = USE('./certify');\n //SEA.opt.aeskey = USE('./aeskey'); // not official! // this causes problems in latest WebCrypto.\n\n SEA.random = SEA.random || shim.random;\n\n // This is Buffer used in SEA and usable from Gun/SEA application also.\n // For documentation see https://nodejs.org/api/buffer.html\n SEA.Buffer = SEA.Buffer || USE('./buffer');\n\n // These SEA functions support now ony Promises or\n // async/await (compatible) code, use those like Promises.\n //\n // Creates a wrapper library around Web Crypto API\n // for various AES, ECDSA, PBKDF2 functions we called above.\n // Calculate public key KeyID aka PGPv4 (result: 8 bytes as hex string)\n SEA.keyid = SEA.keyid || (async (pub) => {\n try {\n // base64('base64(x):base64(y)') => shim.Buffer(xy)\n const pb = shim.Buffer.concat(\n pub.replace(/-/g, '+').replace(/_/g, '/').split('.')\n .map((t) => shim.Buffer.from(t, 'base64'))\n )\n // id is PGPv4 compliant raw key\n const id = shim.Buffer.concat([\n shim.Buffer.from([0x99, pb.length / 0x100, pb.length % 0x100]), pb\n ])\n const sha1 = await sha1hash(id)\n const hash = shim.Buffer.from(sha1, 'binary')\n return hash.toString('hex', hash.length - 8) // 16-bit ID as hex\n } catch (e) {\n console.log(e)\n throw e\n }\n });\n // all done!\n // Obviously it is missing MANY necessary features. This is only an alpha release.\n // Please experiment with it, audit what I've done so far, and complain about what needs to be added.\n // SEA should be a full suite that is easy and seamless to use.\n // Again, scroll naer the top, where I provide an EXAMPLE of how to create a user and sign in.\n // Once logged in, the rest of the code you just read handled automatically signing/validating data.\n // But all other behavior needs to be equally easy, like opinionated ways of\n // Adding friends (trusted public keys), sending private messages, etc.\n // Cheers! Tell me what you think.\n ((SEA.window||{}).GUN||{}).SEA = SEA;\n\n module.exports = SEA\n // -------------- END SEA MODULES --------------------\n // -- BEGIN SEA+GUN MODULES: BUNDLED BY DEFAULT UNTIL OTHERS USE SEA ON OWN -------\n })(USE, './sea');\n\n ;USE(function(module){\n var SEA = USE('./sea'), Gun, u;\n if(SEA.window){\n Gun = SEA.window.GUN || {chain:{}};\n } else {\n Gun = USE((u+'' == typeof MODULE?'.':'')+'./gun', 1);\n }\n SEA.GUN = Gun;\n\n function User(root){ \n this._ = {$: this};\n }\n User.prototype = (function(){ function F(){}; F.prototype = Gun.chain; return new F() }()) // Object.create polyfill\n User.prototype.constructor = User;\n\n // let's extend the gun chain with a `user` function.\n // only one user can be logged in at a time, per gun instance.\n Gun.chain.user = function(pub){\n var gun = this, root = gun.back(-1), user;\n if(pub){\n pub = SEA.opt.pub((pub._||'')['#']) || pub;\n return root.get('~'+pub);\n }\n if(user = root.back('user')){ return user }\n var root = (root._), at = root, uuid = at.opt.uuid || lex;\n (at = (user = at.user = gun.chain(new User))._).opt = {};\n at.opt.uuid = function(cb){\n var id = uuid(), pub = root.user;\n if(!pub || !(pub = pub.is) || !(pub = pub.pub)){ return id }\n id = '~' + pub + '/' + id;\n if(cb && cb.call){ cb(null, id) }\n return id;\n }\n return user;\n }\n function lex(){ return Gun.state().toString(36).replace('.','') }\n Gun.User = User;\n User.GUN = Gun;\n User.SEA = Gun.SEA = SEA;\n module.exports = User;\n })(USE, './user');\n\n ;USE(function(module){\n var u, Gun = (''+u != typeof window)? (window.Gun||{chain:{}}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n Gun.chain.then = function(cb, opt){\n var gun = this, p = (new Promise(function(res, rej){\n gun.once(res, opt);\n }));\n return cb? p.then(cb) : p;\n }\n })(USE, './then');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n\n // Well first we have to actually create a user. That is what this function does.\n User.prototype.create = function(...args){\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = pair && (pair.pub || pair.epub) ? pair.pub : typeof args[0] === 'string' ? args[0] : null;\n var pass = pair && (pair.pub || pair.epub) ? pair : alias && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n cb = cb || noop;\n opt = opt || {};\n if(false !== opt.check){\n var err;\n if(!alias){ err = \"No user.\" }\n if((pass||'').length < 8){ err = \"Password too short!\" }\n if(err){\n cb({err: Gun.log(err)});\n return gun;\n }\n }\n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n var act = {}, u;\n act.a = function(pubs){\n act.pubs = pubs;\n if(pubs && !opt.already){\n // If we can enforce that a user name is already taken, it might be nice to try, but this is not guaranteed.\n var ack = {err: Gun.log('User already created!')};\n cat.ing = false;\n (cb || noop)(ack);\n gun.leave();\n return;\n }\n act.salt = String.random(64); // pseudo-randomly create a salt, then use PBKDF2 function to extend the password with it.\n SEA.work(pass, act.salt, act.b); // this will take some short amount of time to produce a proof, which slows brute force attacks.\n }\n act.b = function(proof){\n act.proof = proof;\n pair ? act.c(pair) : SEA.pair(act.c) // generate a brand new key pair or use the existing.\n }\n act.c = function(pair){\n var tmp\n act.pair = pair || {};\n if(tmp = cat.root.user){\n tmp._.sea = pair;\n tmp.is = {pub: pair.pub, epub: pair.epub, alias: alias};\n }\n // the user's public key doesn't need to be signed. But everything else needs to be signed with it! // we have now automated it! clean up these extra steps now!\n act.data = {pub: pair.pub};\n act.d();\n }\n act.d = function(){\n act.data.alias = alias;\n act.e();\n }\n act.e = function(){\n act.data.epub = act.pair.epub; \n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, act.proof, act.f, {raw:1}); // to keep the private key safe, we AES encrypt it with the proof of work!\n }\n act.f = function(auth){\n act.data.auth = JSON.stringify({ek: auth, s: act.salt}); \n act.g(act.data.auth);\n }\n act.g = function(auth){ var tmp;\n act.data.auth = act.data.auth || auth;\n root.get(tmp = '~'+act.pair.pub).put(act.data).on(act.h); // awesome, now we can actually save the user with their public key as their ID.\n var link = {}; link[tmp] = {'#': tmp}; root.get('~@'+alias).put(link).get(tmp).on(act.i); // next up, we want to associate the alias with the public key. So we add it to the alias list.\n }\n act.h = function(data, key, msg, eve){\n eve.off(); act.h.ok = 1; act.i();\n }\n act.i = function(data, key, msg, eve){\n if(eve){ act.i.ok = 1; eve.off() }\n if(!act.h.ok || !act.i.ok){ return }\n cat.ing = false;\n cb({ok: 0, pub: act.pair.pub}); // callback that the user has been created. (Note: ok = 0 because we didn't wait for disk to ack)\n if(noop === cb){ pair ? gun.auth(pair) : gun.auth(alias, pass) } // if no callback is passed, auto-login after signing up.\n }\n root.get('~@'+alias).once(act.a);\n return gun;\n }\n User.prototype.leave = function(opt, cb){\n var gun = this, user = (gun.back(-1)._).user;\n if(user){\n delete user.is;\n delete user._.is;\n delete user._.sea;\n }\n if(SEA.window){\n try{var sS = {};\n sS = window.sessionStorage;\n delete sS.recall;\n delete sS.pair;\n }catch(e){};\n }\n return gun;\n }\n })(USE, './create');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n // now that we have created a user, we want to authenticate them!\n User.prototype.auth = function(...args){ // TODO: this PR with arguments need to be cleaned up / refactored.\n var pair = typeof args[0] === 'object' && (args[0].pub || args[0].epub) ? args[0] : typeof args[1] === 'object' && (args[1].pub || args[1].epub) ? args[1] : null;\n var alias = !pair && typeof args[0] === 'string' ? args[0] : null;\n var pass = (alias || (pair && !(pair.priv && pair.epriv))) && typeof args[1] === 'string' ? args[1] : null;\n var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair\n var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb\n \n var gun = this, cat = (gun._), root = gun.back(-1);\n \n if(cat.ing){\n (cb || noop)({err: Gun.log(\"User is already being created or authenticated!\"), wait: true});\n return gun;\n }\n cat.ing = true;\n \n var act = {}, u, tries = 9;\n act.a = function(data){\n if(!data){ return act.b() }\n if(!data.pub){\n var tmp = []; Object.keys(data).forEach(function(k){ if('_'==k){ return } tmp.push(data[k]) })\n return act.b(tmp);\n }\n if(act.name){ return act.f(data) }\n act.c((act.data = data).auth);\n }\n act.b = function(list){\n var get = (act.list = (act.list||[]).concat(list||[])).shift();\n if(u === get){\n if(act.name){ return act.err('Your user account is not published for dApps to access, please consider syncing it online, or allowing local access by adding your device as a peer.') }\n if(alias && tries--){\n root.get('~@'+alias).once(act.a);\n return;\n }\n return act.err('Wrong user or password.') \n }\n root.get(get).once(act.a);\n }\n act.c = function(auth){\n if(u === auth){ return act.b() }\n if('string' == typeof auth){ return act.c(obj_ify(auth)) } // in case of legacy\n SEA.work(pass, (act.auth = auth).s, act.d, act.enc); // the proof of work is evidence that we've spent some time/effort trying to log in, this slows brute force.\n }\n act.d = function(proof){\n SEA.decrypt(act.auth.ek, proof, act.e, act.enc);\n }\n act.e = function(half){\n if(u === half){\n if(!act.enc){ // try old format\n act.enc = {encode: 'utf8'};\n return act.c(act.auth);\n } act.enc = null; // end backwards\n return act.b();\n }\n act.half = half;\n act.f(act.data);\n }\n act.f = function(pair){\n var half = act.half || {}, data = act.data || {};\n act.g(act.lol = {pub: pair.pub || data.pub, epub: pair.epub || data.epub, priv: pair.priv || half.priv, epriv: pair.epriv || half.epriv});\n }\n act.g = function(pair){\n if(!pair || !pair.pub || !pair.epub){ return act.b() }\n act.pair = pair;\n var user = (root._).user, at = (user._);\n var tmp = at.tag;\n var upt = at.opt;\n at = user._ = root.get('~'+pair.pub)._;\n at.opt = upt;\n // add our credentials in-memory only to our root user instance\n user.is = {pub: pair.pub, epub: pair.epub, alias: alias || pair.pub};\n at.sea = act.pair;\n cat.ing = false;\n try{if(pass && u == (obj_ify(cat.root.graph['~'+pair.pub].auth)||'')[':']){ opt.shuffle = opt.change = pass; } }catch(e){} // migrate UTF8 & Shuffle!\n opt.change? act.z() : (cb || noop)(at);\n if(SEA.window && ((gun.back('user')._).opt||opt).remember){\n // TODO: this needs to be modular.\n try{var sS = {};\n sS = window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n sS.recall = true;\n sS.pair = JSON.stringify(pair); // auth using pair is more reliable than alias/pass\n }catch(e){}\n }\n try{\n if(root._.tag.auth){ // auth handle might not be registered yet\n (root._).on('auth', at) // TODO: Deprecate this, emit on user instead! Update docs when you do.\n } else { setTimeout(function(){ (root._).on('auth', at) },1) } // if not, hackily add a timeout.\n //at.on('auth', at) // Arrgh, this doesn't work without event \"merge\" code, but \"merge\" code causes stack overflow and crashes after logging in & trying to write data.\n }catch(e){\n Gun.log(\"Your 'auth' callback crashed with:\", e);\n }\n }\n act.h = function(data){\n if(!data){ return act.b() }\n alias = data.alias\n if(!alias)\n alias = data.alias = \"~\" + pair.pub \n if(!data.auth){\n return act.g(pair);\n }\n pair = null;\n act.c((act.data = data).auth);\n }\n act.z = function(){\n // password update so encrypt private key using new pwd + salt\n act.salt = String.random(64); // pseudo-random\n SEA.work(opt.change, act.salt, act.y);\n }\n act.y = function(proof){\n SEA.encrypt({priv: act.pair.priv, epriv: act.pair.epriv}, proof, act.x, {raw:1});\n }\n act.x = function(auth){\n act.w(JSON.stringify({ek: auth, s: act.salt}));\n }\n act.w = function(auth){\n if(opt.shuffle){ // delete in future!\n console.log('migrate core account from UTF8 & shuffle');\n var tmp = {}; Object.keys(act.data).forEach(function(k){ tmp[k] = act.data[k] });\n delete tmp._;\n tmp.auth = auth;\n root.get('~'+act.pair.pub).put(tmp);\n } // end delete\n root.get('~'+act.pair.pub).get('auth').put(auth, cb || noop);\n }\n act.err = function(e){\n var ack = {err: Gun.log(e || 'User cannot be found!')};\n cat.ing = false;\n (cb || noop)(ack);\n }\n act.plugin = function(name){\n if(!(act.name = name)){ return act.err() }\n var tmp = [name];\n if('~' !== name[0]){\n tmp[1] = '~'+name;\n tmp[2] = '~@'+name;\n }\n act.b(tmp);\n }\n if(pair){\n if(pair.priv && pair.epriv)\n act.g(pair);\n else\n root.get('~'+pair.pub).once(act.h);\n } else\n if(alias){\n root.get('~@'+alias).once(act.a);\n } else\n if(!alias && !pass){\n SEA.name(act.plugin);\n }\n return gun;\n }\n function obj_ify(o){\n if('string' != typeof o){ return o }\n try{o = JSON.parse(o);\n }catch(e){o={}};\n return o;\n }\n })(USE, './auth');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN;\n User.prototype.recall = function(opt, cb){\n var gun = this, root = gun.back(-1), tmp;\n opt = opt || {};\n if(opt && opt.sessionStorage){\n if(SEA.window){\n try{\n var sS = {};\n sS = window.sessionStorage; // TODO: FIX BUG putting on `.is`!\n if(sS){\n (root._).opt.remember = true;\n ((gun.back('user')._).opt||opt).remember = true;\n if(sS.recall || sS.pair) root.user().auth(JSON.parse(sS.pair), cb); // pair is more reliable than alias/pass\n }\n }catch(e){}\n }\n return gun;\n }\n /*\n TODO: copy mhelander's expiry code back in.\n Although, we should check with community,\n should expiry be core or a plugin?\n */\n return gun;\n }\n })(USE, './recall');\n\n ;USE(function(module){\n var User = USE('./user'), SEA = User.SEA, Gun = User.GUN, noop = function(){};\n User.prototype.pair = function(){\n var user = this, proxy; // undeprecated, hiding with proxies.\n try{ proxy = new Proxy({DANGER:'\\u2620'}, {get: function(t,p,r){\n if(!user.is || !(user._||'').sea){ return }\n return user._.sea[p];\n }})}catch(e){}\n return proxy;\n }\n // If authenticated user wants to delete his/her account, let's support it!\n User.prototype.delete = async function(alias, pass, cb){\n console.log(\"user.delete() IS DEPRECATED AND WILL BE MOVED TO A MODULE!!!\");\n var gun = this, root = gun.back(-1), user = gun.back('user');\n try {\n user.auth(alias, pass, function(ack){\n var pub = (user.is||{}).pub;\n // Delete user data\n user.map().once(function(){ this.put(null) });\n // Wipe user data from memory\n user.leave();\n (cb || noop)({ok: 0});\n });\n } catch (e) {\n Gun.log('User.delete failed! Error:', e);\n }\n return gun;\n }\n User.prototype.alive = async function(){\n console.log(\"user.alive() IS DEPRECATED!!!\");\n const gunRoot = this.back(-1)\n try {\n // All is good. Should we do something more with actual recalled data?\n await authRecall(gunRoot)\n return gunRoot._.user._\n } catch (e) {\n const err = 'No session!'\n Gun.log(err)\n throw { err }\n }\n }\n User.prototype.trust = async function(user){\n console.log(\"`.trust` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n // TODO: BUG!!! SEA `node` read listener needs to be async, which means core needs to be async too.\n //gun.get('alice').get('age').trust(bob);\n if (Gun.is(user)) {\n user.get('pub').get((ctx, ev) => {\n console.log(ctx, ev)\n })\n }\n user.get('trust').get(path).put(theirPubkey);\n\n // do a lookup on this gun chain directly (that gets bob's copy of the data)\n // do a lookup on the metadata trust table for this path (that gets all the pubkeys allowed to write on this path)\n // do a lookup on each of those pubKeys ON the path (to get the collab data \"layers\")\n // THEN you perform Jachen's mix operation\n // and return the result of that to...\n }\n User.prototype.grant = function(to, cb){\n console.log(\"`.grant` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user._.sea, path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('grant').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('grant').get(pair.pub).get(path).put(enc);\n }\n var pub = to.get('pub').then();\n var epub = to.get('epub').then();\n pub = await pub; epub = await epub;\n var dh = await SEA.secret(epub, pair);\n enc = await SEA.encrypt(sec, dh);\n user.get('grant').get(pub).get(path).put(enc, cb);\n }());\n return gun;\n }\n User.prototype.secret = function(data, cb){\n console.log(\"`.secret` API MAY BE DELETED OR CHANGED OR RENAMED, DO NOT USE!\");\n var gun = this, user = gun.back(-1).user(), pair = user.pair(), path = '';\n gun.back(function(at){ if(at.is){ return } path += (at.get||'') });\n (async function(){\n var enc, sec = await user.get('trust').get(pair.pub).get(path).then();\n sec = await SEA.decrypt(sec, pair);\n if(!sec){\n sec = SEA.random(16).toString();\n enc = await SEA.encrypt(sec, pair);\n user.get('trust').get(pair.pub).get(path).put(enc);\n }\n enc = await SEA.encrypt(data, sec);\n gun.put(enc, cb);\n }());\n return gun;\n }\n\n /**\n * returns the decrypted value, encrypted by secret\n * @returns {Promise}\n // Mark needs to review 1st before officially supported\n User.prototype.decrypt = function(cb) {\n let gun = this,\n path = ''\n gun.back(function(at) {\n if (at.is) {\n return\n }\n path += at.get || ''\n })\n return gun\n .then(async data => {\n if (data == null) {\n return\n }\n const user = gun.back(-1).user()\n const pair = user.pair()\n let sec = await user\n .get('trust')\n .get(pair.pub)\n .get(path)\n sec = await SEA.decrypt(sec, pair)\n if (!sec) {\n return data\n }\n let decrypted = await SEA.decrypt(data, sec)\n return decrypted\n })\n .then(res => {\n cb && cb(res)\n return res\n })\n }\n */\n module.exports = User\n })(USE, './share');\n\n ;USE(function(module){\n var SEA = USE('./sea'), S = USE('./settings'), noop = function() {}, u;\n var Gun = (''+u != typeof window)? (window.Gun||{on:noop}) : USE((''+u === typeof MODULE?'.':'')+'./gun', 1);\n // After we have a GUN extension to make user registration/login easy, we then need to handle everything else.\n\n // We do this with a GUN adapter, we first listen to when a gun instance is created (and when its options change)\n Gun.on('opt', function(at){\n if(!at.sea){ // only add SEA once per instance, on the \"at\" context.\n at.sea = {own: {}};\n at.on('put', check, at); // SEA now runs its firewall on HAM diffs, not all i/o.\n }\n this.to.next(at); // make sure to call the \"next\" middleware adapter.\n });\n\n // Alright, this next adapter gets run at the per node level in the graph database.\n // correction: 2020 it gets run on each key/value pair in a node upon a HAM diff.\n // This will let us verify that every property on a node has a value signed by a public key we trust.\n // If the signature does not match, the data is just `undefined` so it doesn't get passed on.\n // If it does match, then we transform the in-memory \"view\" of the data into its plain value (without the signature).\n // Now NOTE! Some data is \"system\" data, not user data. Example: List of public keys, aliases, etc.\n // This data is self-enforced (the value can only match its ID), but that is handled in the `security` function.\n // From the self-enforced data, we can see all the edges in the graph that belong to a public key.\n // Example: ~ASDF is the ID of a node with ASDF as its public key, signed alias and salt, and\n // its encrypted private key, but it might also have other signed values on it like `profile = ` edge.\n // Using that directed edge's ID, we can then track (in memory) which IDs belong to which keys.\n // Here is a problem: Multiple public keys can \"claim\" any node's ID, so this is dangerous!\n // This means we should ONLY trust our \"friends\" (our key ring) public keys, not any ones.\n // I have not yet added that to SEA yet in this alpha release. That is coming soon, but beware in the meanwhile!\n\n function check(msg){ // REVISE / IMPROVE, NO NEED TO PASS MSG/EVE EACH SUB?\n var eve = this, at = eve.as, put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], id = msg['#'], tmp;\n if(!soul || !key){ return }\n if((msg._||'').faith && (at.opt||'').faith && 'function' == typeof msg._){\n SEA.opt.pack(put, function(raw){\n SEA.verify(raw, false, function(data){ // this is synchronous if false\n put['='] = SEA.opt.unpack(data);\n eve.to.next(msg);\n })})\n return \n }\n var no = function(why){ at.on('in', {'@': id, err: msg.err = why}) }; // exploit internal relay stun for now, maybe violates spec, but testing for now. // Note: this may be only the sharded message, not original batch.\n //var no = function(why){ msg.ack(why) };\n (msg._||'').DBG && ((msg._||'').DBG.c = +new Date);\n if(0 <= soul.indexOf(' {\n if (certificate.m && certificate.s && certificant && pub)\n // now verify certificate\n return SEA.verify(certificate, pub, data => { // check if \"pub\" (of the graph owner) really issued this cert\n if (u !== data && u !== data.e && msg.put['>'] && msg.put['>'] > parseFloat(data.e)) return no(\"Certificate expired.\") // certificate expired\n // \"data.c\" = a list of certificants/certified users\n // \"data.w\" = lex WRITE permission, in the future, there will be \"data.r\" which means lex READ permission\n if (u !== data && data.c && data.w && (data.c === certificant || data.c.indexOf('*' || certificant) > -1)) {\n // ok, now \"certificant\" is in the \"certificants\" list, but is \"path\" allowed? Check path\n let path = soul.indexOf('/') > -1 ? soul.replace(soul.substring(0, soul.indexOf('/') + 1), '') : ''\n String.match = String.match || Gun.text.match\n const w = Array.isArray(data.w) ? data.w : typeof data.w === 'object' || typeof data.w === 'string' ? [data.w] : []\n for (const lex of w) {\n if ((String.match(path, lex['#']) && String.match(key, lex['.'])) || (!lex['.'] && String.match(path, lex['#'])) || (!lex['#'] && String.match(key, lex['.'])) || String.match((path ? path + '/' + key : key), lex['#'] || lex)) {\n // is Certificant forced to present in Path\n if (lex['+'] && lex['+'].indexOf('*') > -1 && path && path.indexOf(certificant) == -1 && key.indexOf(certificant) == -1) return no(`Path \"${path}\" or key \"${key}\" must contain string \"${certificant}\".`)\n // path is allowed, but is there any WRITE block? Check it out\n if (data.wb && (typeof data.wb === 'string' || ((data.wb || {})['#']))) { // \"data.wb\" = path to the WRITE block\n var root = eve.as.root.$.back(-1)\n if (typeof data.wb === 'string' && '~' !== data.wb.slice(0, 1)) root = root.get('~' + pub)\n return root.get(data.wb).get(certificant).once(value => { // TODO: INTENT TO DEPRECATE.\n if (value && (value === 1 || value === true)) return no(`Certificant ${certificant} blocked.`)\n return cb(data)\n })\n }\n return cb(data)\n }\n }\n return no(\"Certificate verification fail.\")\n }\n })\n return\n }\n \n if ('pub' === key && '~' + pub === soul) {\n if (val === pub) return eve.to.next(msg) // the account MUST match `pub` property that equals the ID of the public key.\n return no(\"Account not same!\")\n }\n\n if ((tmp = user.is) && tmp.pub && !raw['*'] && !raw['+'] && (pub === tmp.pub || (pub !== tmp.pub && ((msg._.msg || {}).opt || {}).cert))){\n SEA.opt.pack(msg.put, packed => {\n SEA.sign(packed, (user._).sea, async function(data) {\n if (u === data) return no(SEA.err || 'Signature fail.')\n msg.put[':'] = {':': tmp = SEA.opt.unpack(data.m), '~': data.s}\n msg.put['='] = tmp\n \n // if writing to own graph, just allow it\n if (pub === user.is.pub) {\n if (tmp = link_is(val)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n }\n \n // if writing to other's graph, check if cert exists then try to inject cert into put, also inject self pub so that everyone can verify the put\n if (pub !== user.is.pub && ((msg._.msg || {}).opt || {}).cert) {\n const cert = await S.parse(msg._.msg.opt.cert)\n // even if cert exists, we must verify it\n if (cert && cert.m && cert.s)\n verify(cert, user.is.pub, _ => {\n msg.put[':']['+'] = cert // '+' is a certificate\n msg.put[':']['*'] = user.is.pub // '*' is pub of the user who puts\n JSON.stringifyAsync(msg.put[':'], function(err,s){\n if(err){ return no(err || \"Stringify error.\") }\n msg.put[':'] = s;\n return eve.to.next(msg);\n })\n return\n })\n }\n }, {raw: 1})\n })\n return;\n }\n\n SEA.opt.pack(msg.put, packed => {\n SEA.verify(packed, raw['*'] || pub, function(data){ var tmp;\n data = SEA.opt.unpack(data);\n if (u === data) return no(\"Unverified data.\") // make sure the signature matches the account it claims to be on. // reject any updates that are signed with a mismatched account.\n if ((tmp = link_is(data)) && pub === SEA.opt.pub(tmp)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1\n \n // check if cert ('+') and putter's pub ('*') exist\n if (raw['+'] && raw['+']['m'] && raw['+']['s'] && raw['*'])\n // now verify certificate\n verify(raw['+'], raw['*'], _ => {\n msg.put['='] = data;\n return eve.to.next(msg);\n })\n else {\n msg.put['='] = data;\n return eve.to.next(msg);\n }\n });\n })\n return\n };\n check.any = function(eve, msg, val, key, soul, at, no, user){ var tmp, pub;\n if(at.opt.secure){ return no(\"Soul missing public key at '\" + key + \"'.\") }\n // TODO: Ask community if should auto-sign non user-graph data.\n at.on('secure', function(msg){ this.off();\n if(!at.opt.secure){ return eve.to.next(msg) }\n no(\"Data cannot be changed.\");\n }).on.on('secure', msg);\n return;\n }\n\n var valid = Gun.valid, link_is = function(d,l){ return 'string' == typeof (l = valid(d)) && l }, state_ify = (Gun.state||'').ify;\n\n var pubcut = /[^\\w_-]/; // anything not alphanumeric or _ -\n SEA.opt.pub = function(s){\n if(!s){ return }\n s = s.split('~');\n if(!s || !(s = s[1])){ return }\n s = s.split(pubcut).slice(0,2);\n if(!s || 2 != s.length){ return }\n if('@' === (s[0]||'')[0]){ return }\n s = s.slice(0,2).join('.');\n return s;\n }\n SEA.opt.stringy = function(t){\n // TODO: encrypt etc. need to check string primitive. Make as breaking change.\n }\n SEA.opt.pack = function(d,cb,k, n,s){ var tmp, f; // pack for verifying\n if(SEA.opt.check(d)){ return cb(d) }\n if(d && d['#'] && d['.'] && d['>']){ tmp = d[':']; f = 1 }\n JSON.parseAsync(f? tmp : d, function(err, meta){\n var sig = ((u !== (meta||'')[':']) && (meta||'')['~']); // or just ~ check?\n if(!sig){ cb(d); return }\n cb({m: {'#':s||d['#'],'.':k||d['.'],':':(meta||'')[':'],'>':d['>']||Gun.state.is(n, k)}, s: sig});\n });\n }\n var O = SEA.opt;\n SEA.opt.unpack = function(d, k, n){ var tmp;\n if(u === d){ return }\n if(d && (u !== (tmp = d[':']))){ return tmp }\n k = k || O.fall_key; if(!n && O.fall_val){ n = {}; n[k] = O.fall_val }\n if(!k || !n){ return }\n if(d === n[k]){ return d }\n if(!SEA.opt.check(n[k])){ return d }\n var soul = (n && n._ && n._['#']) || O.fall_soul, s = Gun.state.is(n, k) || O.fall_state;\n if(d && 4 === d.length && soul === d[0] && k === d[1] && fl(s) === fl(d[3])){\n return d[2];\n }\n if(s < SEA.opt.shuffle_attack){\n return d;\n }\n }\n SEA.opt.shuffle_attack = 1546329600000; // Jan 1, 2019\n var fl = Math.floor; // TODO: Still need to fix inconsistent state issue.\n // TODO: Potential bug? If pub/priv key starts with `-`? IDK how possible.\n\n })(USE, './index');\n}());\n","// @ts-nocheck\nexport default {\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, limit: number) => {\n let inDebounce: boolean;\n return function() {\n const args = arguments;\n const context = this;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), limit);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n },\n defaults: (obj: any, defaults: any) => {\n Object.keys(defaults).forEach(key => {\n if (obj[key] === undefined) {\n obj[key] = defaults[key];\n }\n });\n return obj;\n },\n pickBy: (obj: any, predicate: Function) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (predicate(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n}","// @ts-nocheck\n/* eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\nimport _ from './lodash';\n\n// eslint-disable-line no-unused-vars\n\nlet isNode = false;\ntry {\n isNode = Object.prototype.toString.call(global.process) === `[object process]`;\n} catch (e) { null; }\n\nconst userAgent = !isNode && navigator && navigator.userAgent && navigator.userAgent.toLowerCase();\nconst isElectron = (userAgent && userAgent.indexOf(' electron/') > -1);\n\nconst isMobile = !isNode && (function() {\n if (isElectron) { return false; }\n let check = false;\n (function(a) {if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;})(navigator.userAgent || navigator.vendor || '');\n return check;\n})();\n\nfunction gunAsAnotherUser(gun: any, key: any, f: Function) { // Hacky way to use multiple users with gun\n const gun2 = new Gun({radisk: false, peers: Object.keys(gun._.opt.peers)}); // TODO: copy other options too\n const user = gun2.user();\n user.auth(key);\n setTimeout(() => {\n // @ts-ignore\n const peers = Object.values(gun2.back('opt.peers'));\n peers.forEach(peer => {\n // @ts-ignore\n gun2.on('bye', peer);\n });\n }, 20000);\n return f(user);\n}\n\nfunction gunOnceDefined(node: any) {\n return new Promise(resolve => {\n node.on((val: any, _k: any, _a: any, eve: any) => {\n if (val !== undefined) {\n eve.off();\n resolve(val);\n }\n });\n });\n}\n\nconst animals = [\n 'canidae',\n 'felidae',\n 'cat',\n 'cattle',\n 'dog',\n 'donkey',\n 'goat',\n 'horse',\n 'pig',\n 'rabbit',\n 'aardvark',\n 'aardwolf',\n 'albatross',\n 'alligator',\n 'alpaca',\n 'amphibian',\n 'anaconda',\n 'angelfish',\n 'anglerfish',\n 'ant',\n 'anteater',\n 'antelope',\n 'antlion',\n 'ape',\n 'aphid',\n 'armadillo',\n 'asp',\n 'baboon',\n 'badger',\n 'bandicoot',\n 'barnacle',\n 'barracuda',\n 'basilisk',\n 'bass',\n 'bat',\n 'bear',\n 'beaver',\n 'bedbug',\n 'bee',\n 'beetle',\n 'bird',\n 'bison',\n 'blackbird',\n 'boa',\n 'boar',\n 'bobcat',\n 'bobolink',\n 'bonobo',\n 'booby',\n 'bovid',\n 'bug',\n 'butterfly',\n 'buzzard',\n 'camel',\n 'canid',\n 'capybara',\n 'cardinal',\n 'caribou',\n 'carp',\n 'cat',\n 'catshark',\n 'caterpillar',\n 'catfish',\n 'cattle',\n 'centipede',\n 'cephalopod',\n 'chameleon',\n 'cheetah',\n 'chickadee',\n 'chicken',\n 'chimpanzee',\n 'chinchilla',\n 'chipmunk',\n 'clam',\n 'clownfish',\n 'cobra',\n 'cockroach',\n 'cod',\n 'condor',\n 'constrictor',\n 'coral',\n 'cougar',\n 'cow',\n 'coyote',\n 'crab',\n 'crane',\n 'crawdad',\n 'crayfish',\n 'cricket',\n 'crocodile',\n 'crow',\n 'cuckoo',\n 'cicada',\n 'damselfly',\n 'deer',\n 'dingo',\n 'dinosaur',\n 'dog',\n 'dolphin',\n 'donkey',\n 'dormouse',\n 'dove',\n 'dragonfly',\n 'dragon',\n 'duck',\n 'eagle',\n 'earthworm',\n 'earwig',\n 'echidna',\n 'eel',\n 'egret',\n 'elephant',\n 'elk',\n 'emu',\n 'ermine',\n 'falcon',\n 'ferret',\n 'finch',\n 'firefly',\n 'fish',\n 'flamingo',\n 'flea',\n 'fly',\n 'flyingfish',\n 'fowl',\n 'fox',\n 'frog',\n 'gamefowl',\n 'galliform',\n 'gazelle',\n 'gecko',\n 'gerbil',\n 'gibbon',\n 'giraffe',\n 'goat',\n 'goldfish',\n 'goose',\n 'gopher',\n 'gorilla',\n 'grasshopper',\n 'grouse',\n 'guan',\n 'guanaco',\n 'guineafowl',\n 'gull',\n 'guppy',\n 'haddock',\n 'halibut',\n 'hamster',\n 'hare',\n 'harrier',\n 'hawk',\n 'hedgehog',\n 'heron',\n 'herring',\n 'hippopotamus',\n 'hookworm',\n 'hornet',\n 'horse',\n 'hoverfly',\n 'hummingbird',\n 'hyena',\n 'iguana',\n 'impala',\n 'jackal',\n 'jaguar',\n 'jay',\n 'jellyfish',\n 'junglefowl',\n 'kangaroo',\n 'kingfisher',\n 'kite',\n 'kiwi',\n 'koala',\n 'koi',\n 'krill',\n 'ladybug',\n 'lamprey',\n 'landfowl',\n 'lark',\n 'leech',\n 'lemming',\n 'lemur',\n 'leopard',\n 'leopon',\n 'limpet',\n 'lion',\n 'lizard',\n 'llama',\n 'lobster',\n 'locust',\n 'loon',\n 'louse',\n 'lungfish',\n 'lynx',\n 'macaw',\n 'mackerel',\n 'magpie',\n 'mammal',\n 'manatee',\n 'mandrill',\n 'marlin',\n 'marmoset',\n 'marmot',\n 'marsupial',\n 'marten',\n 'mastodon',\n 'meadowlark',\n 'meerkat',\n 'mink',\n 'minnow',\n 'mite',\n 'mockingbird',\n 'mole',\n 'mollusk',\n 'mongoose',\n 'monkey',\n 'moose',\n 'mosquito',\n 'moth',\n 'mouse',\n 'mule',\n 'muskox',\n 'narwhal',\n 'newt',\n 'nightingale',\n 'ocelot',\n 'octopus',\n 'opossum',\n 'orangutan',\n 'orca',\n 'ostrich',\n 'otter',\n 'owl',\n 'ox',\n 'panda',\n 'panther',\n 'parakeet',\n 'parrot',\n 'parrotfish',\n 'partridge',\n 'peacock',\n 'peafowl',\n 'pelican',\n 'penguin',\n 'perch',\n 'pheasant',\n 'pig',\n 'pigeon',\n 'pike',\n 'pinniped',\n 'piranha',\n 'planarian',\n 'platypus',\n 'pony',\n 'porcupine',\n 'porpoise',\n 'possum',\n 'prawn',\n 'primate',\n 'ptarmigan',\n 'puffin',\n 'puma',\n 'python',\n 'quail',\n 'quelea',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'rat',\n 'rattlesnake',\n 'raven',\n 'reindeer',\n 'reptile',\n 'rhinoceros',\n 'roadrunner',\n 'rodent',\n 'rook',\n 'rooster',\n 'roundworm',\n 'sailfish',\n 'salamander',\n 'salmon',\n 'sawfish',\n 'scallop',\n 'scorpion',\n 'seahorse',\n 'shark',\n 'sheep',\n 'shrew',\n 'shrimp',\n 'silkworm',\n 'silverfish',\n 'skink',\n 'skunk',\n 'sloth',\n 'slug',\n 'smelt',\n 'snail',\n 'snake',\n 'snipe',\n 'sole',\n 'sparrow',\n 'spider',\n 'spoonbill',\n 'squid',\n 'squirrel',\n 'starfish',\n 'stingray',\n 'stoat',\n 'stork',\n 'sturgeon',\n 'swallow',\n 'swan',\n 'swift',\n 'swordfish',\n 'swordtail',\n 'tahr',\n 'takin',\n 'tapir',\n 'tarantula',\n 'tarsier',\n 'termite',\n 'tern',\n 'thrush',\n 'tick',\n 'tiger',\n 'tiglon',\n 'toad',\n 'tortoise',\n 'toucan',\n 'trout',\n 'tuna',\n 'turkey',\n 'turtle',\n 'tyrannosaurus',\n 'urial',\n 'vicuna',\n 'viper',\n 'vole',\n 'vulture',\n 'wallaby',\n 'walrus',\n 'wasp',\n 'warbler',\n 'weasel',\n 'whale',\n 'whippet',\n 'whitefish',\n 'wildcat',\n 'wildebeest',\n 'wildfowl',\n 'wolf',\n 'wolverine',\n 'wombat',\n 'woodpecker',\n 'worm',\n 'wren',\n 'xerinae',\n 'yak',\n 'zebra',\n 'alpaca',\n 'cat',\n 'cattle',\n 'chicken',\n 'dog',\n 'donkey',\n 'ferret',\n 'gayal',\n 'goldfish',\n 'guppy',\n 'horse',\n 'koi',\n 'llama',\n 'sheep',\n 'yak',\n 'unicorn',\n];\n\nconst adjectives = [\n 'average',\n 'big',\n 'colossal',\n 'fat',\n 'giant',\n 'gigantic',\n 'great',\n 'huge',\n 'immense',\n 'large',\n 'little',\n 'long',\n 'mammoth',\n 'massive',\n 'miniature',\n 'petite',\n 'puny',\n 'short',\n 'small',\n 'tall',\n 'tiny',\n 'boiling',\n 'breezy',\n 'broken',\n 'bumpy',\n 'chilly',\n 'cold',\n 'cool',\n 'creepy',\n 'crooked',\n 'cuddly',\n 'curly',\n 'damaged',\n 'damp',\n 'dirty',\n 'dry',\n 'dusty',\n 'filthy',\n 'flaky',\n 'fluffy',\n 'wet',\n 'broad',\n 'chubby',\n 'crooked',\n 'curved',\n 'deep',\n 'flat',\n 'high',\n 'hollow',\n 'low',\n 'narrow',\n 'round',\n 'shallow',\n 'skinny',\n 'square',\n 'steep',\n 'straight',\n 'wide',\n 'ancient',\n 'brief',\n 'early',\n 'fast',\n 'late',\n 'long',\n 'modern',\n 'old',\n 'quick',\n 'rapid',\n 'short',\n 'slow',\n 'swift',\n 'young',\n 'abundant',\n 'empty',\n 'few',\n 'heavy',\n 'light',\n 'many',\n 'numerous',\n 'Sound',\n 'cooing',\n 'deafening',\n 'faint',\n 'harsh',\n 'hissing',\n 'hushed',\n 'husky',\n 'loud',\n 'melodic',\n 'moaning',\n 'mute',\n 'noisy',\n 'purring',\n 'quiet',\n 'raspy',\n 'resonant',\n 'screeching',\n 'shrill',\n 'silent',\n 'soft',\n 'squealing',\n 'thundering',\n 'voiceless',\n 'whispering',\n 'bitter',\n 'delicious',\n 'fresh',\n 'juicy',\n 'ripe',\n 'rotten',\n 'salty',\n 'sour',\n 'spicy',\n 'stale',\n 'sticky',\n 'strong',\n 'sweet',\n 'tasteless',\n 'tasty',\n 'thirsty',\n 'fluttering',\n 'fuzzy',\n 'greasy',\n 'grubby',\n 'hard',\n 'hot',\n 'icy',\n 'loose',\n 'melted',\n 'plastic',\n 'prickly',\n 'rainy',\n 'rough',\n 'scattered',\n 'shaggy',\n 'shaky',\n 'sharp',\n 'shivering',\n 'silky',\n 'slimy',\n 'slippery',\n 'smooth',\n 'soft',\n 'solid',\n 'steady',\n 'sticky',\n 'tender',\n 'tight',\n 'uneven',\n 'weak',\n 'wet',\n 'wooden',\n 'afraid',\n 'angry',\n 'annoyed',\n 'anxious',\n 'arrogant',\n 'ashamed',\n 'awful',\n 'bad',\n 'bewildered',\n 'bored',\n 'combative',\n 'condemned',\n 'confused',\n 'creepy',\n 'cruel',\n 'dangerous',\n 'defeated',\n 'defiant',\n 'depressed',\n 'disgusted',\n 'disturbed',\n 'eerie',\n 'embarrassed',\n 'envious',\n 'evil',\n 'fierce',\n 'foolish',\n 'frantic',\n 'frightened',\n 'grieving',\n 'helpless',\n 'homeless',\n 'hungry',\n 'hurt',\n 'ill',\n 'jealous',\n 'lonely',\n 'mysterious',\n 'naughty',\n 'nervous',\n 'obnoxious',\n 'outrageous',\n 'panicky',\n 'repulsive',\n 'scary',\n 'scornful',\n 'selfish',\n 'sore',\n 'tense',\n 'terrible',\n 'thoughtless',\n 'tired',\n 'troubled',\n 'upset',\n 'uptight',\n 'weary',\n 'wicked',\n 'worried',\n 'agreeable',\n 'amused',\n 'brave',\n 'calm',\n 'charming',\n 'cheerful',\n 'comfortable',\n 'cooperative',\n 'courageous',\n 'delightful',\n 'determined',\n 'eager',\n 'elated',\n 'enchanting',\n 'encouraging',\n 'energetic',\n 'enthusiastic',\n 'excited',\n 'exuberant',\n 'fair',\n 'faithful',\n 'fantastic',\n 'fine',\n 'friendly',\n 'funny',\n 'gentle',\n 'glorious',\n 'good',\n 'happy',\n 'healthy',\n 'helpful',\n 'hilarious',\n 'jolly',\n 'joyous',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'obedient',\n 'perfect',\n 'pleasant',\n 'proud',\n 'relieved',\n 'silly',\n 'smiling',\n 'splendid',\n 'successful',\n 'thoughtful',\n 'victorious',\n 'vivacious',\n 'witty',\n 'wonderful',\n 'zealous',\n 'zany',\n 'other',\n 'good',\n 'new',\n 'old',\n 'great',\n 'high',\n 'small',\n 'different',\n 'large',\n 'local',\n 'social',\n 'important',\n 'long',\n 'young',\n 'national',\n 'british',\n 'right',\n 'early',\n 'possible',\n 'big',\n 'little',\n 'political',\n 'able',\n 'late',\n 'general',\n 'full',\n 'far',\n 'low',\n 'public',\n 'available',\n 'bad',\n 'main',\n 'sure',\n 'clear',\n 'major',\n 'economic',\n 'only',\n 'likely',\n 'real',\n 'black',\n 'particular',\n 'international',\n 'special',\n 'difficult',\n 'certain',\n 'open',\n 'whole',\n 'white',\n 'free',\n 'short',\n 'easy',\n 'strong',\n 'european',\n 'central',\n 'similar',\n 'human',\n 'common',\n 'necessary',\n 'single',\n 'personal',\n 'hard',\n 'private',\n 'poor',\n 'financial',\n 'wide',\n 'foreign',\n 'simple',\n 'recent',\n 'concerned',\n 'american',\n 'various',\n 'close',\n 'fine',\n 'english',\n 'wrong',\n 'present',\n 'royal',\n 'natural',\n 'individual',\n 'nice',\n 'french',\n 'nihilist',\n 'solipsist',\n 'materialist',\n 'surrealist',\n 'heroic',\n 'awesome',\n 'hedonist',\n 'absurd',\n 'current',\n 'modern',\n 'labour',\n 'legal',\n 'happy',\n 'final',\n 'red',\n 'normal',\n 'serious',\n 'previous',\n 'total',\n 'prime',\n 'significant',\n 'industrial',\n 'sorry',\n 'dead',\n 'specific',\n 'appropriate',\n 'top',\n 'soviet',\n 'basic',\n 'military',\n 'original',\n 'successful',\n 'aware',\n 'hon',\n 'popular',\n 'heavy',\n 'professional',\n 'direct',\n 'dark',\n 'cold',\n 'ready',\n 'green',\n 'useful',\n 'effective',\n 'western',\n 'traditional',\n 'scottish',\n 'german',\n 'independent',\n 'deep',\n 'interesting',\n 'considerable',\n 'involved',\n 'physical',\n 'hot',\n 'existing',\n 'responsible',\n 'complete',\n 'medical',\n 'blue',\n 'extra',\n 'past',\n 'male',\n 'interested',\n 'fair',\n 'essential',\n 'beautiful',\n 'civil',\n 'primary',\n 'obvious',\n 'future',\n 'environmental',\n 'positive',\n 'senior',\n 'nuclear',\n 'annual',\n 'relevant',\n 'huge',\n 'rich',\n 'commercial',\n 'safe',\n 'regional',\n 'practical',\n 'official',\n 'separate',\n 'key',\n 'chief',\n 'regular',\n 'due',\n 'additional',\n 'active',\n 'powerful',\n 'complex',\n 'standard',\n 'impossible',\n 'light',\n 'warm',\n 'middle',\n 'fresh',\n 'sexual',\n 'front',\n 'domestic',\n 'actual',\n 'united',\n 'technical',\n 'ordinary',\n 'cheap',\n 'strange',\n 'internal',\n 'excellent',\n 'quiet',\n 'soft',\n 'potential',\n 'northern',\n 'religious',\n 'quick',\n 'very',\n 'famous',\n 'cultural',\n 'proper',\n 'broad',\n 'joint',\n 'formal',\n 'limited',\n 'conservative',\n 'lovely',\n 'usual',\n 'ltd',\n 'unable',\n 'rural',\n 'initial',\n 'substantial',\n 'bright',\n 'average',\n 'leading',\n 'reasonable',\n 'immediate',\n 'suitable',\n 'equal',\n 'detailed',\n 'working',\n 'overall',\n 'female',\n 'afraid',\n 'democratic',\n 'growing',\n 'sufficient',\n 'scientific',\n 'eastern',\n 'correct',\n 'inc',\n 'irish',\n 'expensive',\n 'educational',\n 'mental',\n 'dangerous',\n 'critical',\n 'increased',\n 'familiar',\n 'unlikely',\n 'double',\n 'perfect',\n 'slow',\n 'tiny',\n 'dry',\n 'historical',\n 'thin',\n 'daily',\n 'southern',\n 'increasing',\n 'wild',\n 'alone',\n 'urban',\n 'empty',\n 'married',\n 'narrow',\n 'liberal',\n 'supposed',\n 'upper',\n 'apparent',\n 'tall',\n 'busy',\n 'bloody',\n 'prepared',\n 'russian',\n 'moral',\n 'careful',\n 'clean',\n 'attractive',\n 'japanese',\n 'vital',\n 'thick',\n 'alternative',\n 'fast',\n 'ancient',\n 'elderly',\n 'rare',\n 'external',\n 'capable',\n 'brief',\n 'wonderful',\n 'grand',\n 'typical',\n 'entire',\n 'grey',\n 'constant',\n 'vast',\n 'surprised',\n 'ideal',\n 'terrible',\n 'academic',\n 'funny',\n 'minor',\n 'pleased',\n 'severe',\n 'ill',\n 'corporate',\n 'negative',\n 'permanent',\n 'weak',\n 'brown',\n 'fundamental',\n 'odd',\n 'crucial',\n 'inner',\n 'used',\n 'criminal',\n 'contemporary',\n 'sharp',\n 'sick',\n 'near',\n 'roman',\n 'massive',\n 'unique',\n 'secondary',\n 'parliamentary',\n 'african',\n 'unknown',\n 'subsequent',\n 'angry',\n 'alive',\n 'guilty',\n 'lucky',\n 'enormous',\n 'well',\n 'yellow',\n 'unusual',\n 'net',\n 'tough',\n 'dear',\n 'extensive',\n 'glad',\n 'remaining',\n 'agricultural',\n 'alright',\n 'healthy',\n 'italian',\n 'principal',\n 'tired',\n 'efficient',\n 'comfortable',\n 'chinese',\n 'relative',\n 'friendly',\n 'conventional',\n 'willing',\n 'sudden',\n 'proposed',\n 'voluntary',\n 'slight',\n 'valuable',\n 'dramatic',\n 'golden',\n 'temporary',\n 'federal',\n 'keen',\n 'flat',\n 'silent',\n 'indian',\n 'worried',\n 'pale',\n 'statutory',\n 'welsh',\n 'dependent',\n 'firm',\n 'wet',\n 'competitive',\n 'armed',\n 'radical',\n 'outside',\n 'acceptable',\n 'sensitive',\n 'living',\n 'pure',\n 'global',\n 'emotional',\n 'sad',\n 'secret',\n 'rapid',\n 'adequate',\n 'fixed',\n 'sweet',\n 'administrative',\n 'wooden',\n 'remarkable',\n 'comprehensive',\n 'surprising',\n 'solid',\n 'rough',\n 'mere',\n 'mass',\n 'brilliant',\n 'maximum',\n 'absolute',\n 'electronic',\n 'visual',\n 'electric',\n 'cool',\n 'spanish',\n 'literary',\n 'continuing',\n 'supreme',\n 'chemical',\n 'genuine',\n 'exciting',\n 'written',\n 'advanced',\n 'extreme',\n 'classical',\n 'fit',\n 'favourite',\n 'widespread',\n 'confident',\n 'straight',\n 'proud',\n 'numerous',\n 'opposite',\n 'distinct',\n 'mad',\n 'helpful',\n 'given',\n 'disabled',\n 'consistent',\n 'anxious',\n 'nervous',\n 'awful',\n 'stable',\n 'constitutional',\n 'satisfied',\n 'conscious',\n 'developing',\n 'strategic',\n 'holy',\n 'smooth',\n 'dominant',\n 'remote',\n 'theoretical',\n 'outstanding',\n 'pink',\n 'pretty',\n 'clinical',\n 'minimum',\n 'honest',\n 'impressive',\n 'related',\n 'residential',\n 'extraordinary',\n 'plain',\n 'visible',\n 'accurate',\n 'distant',\n 'still',\n 'greek',\n 'complicated',\n 'musical',\n 'precise',\n 'gentle',\n 'broken',\n 'live',\n 'silly',\n 'fat',\n 'tight',\n 'monetary',\n 'round',\n 'psychological',\n 'violent',\n 'unemployed',\n 'inevitable',\n 'junior',\n 'sensible',\n 'grateful',\n 'pleasant',\n 'dirty',\n 'structural',\n 'welcome',\n 'deaf',\n 'above',\n 'continuous',\n 'blind',\n 'overseas',\n 'mean',\n 'entitled',\n 'delighted',\n 'loose',\n 'occasional',\n 'evident',\n 'desperate',\n 'fellow',\n 'universal',\n 'square',\n 'steady',\n 'classic',\n 'equivalent',\n 'intellectual',\n 'victorian',\n 'level',\n 'ultimate',\n 'creative',\n 'lost',\n 'medieval',\n 'clever',\n 'linguistic',\n 'convinced',\n 'judicial',\n 'raw',\n 'sophisticated',\n 'asleep',\n 'vulnerable',\n 'illegal',\n 'outer',\n 'revolutionary',\n 'bitter',\n 'changing',\n 'australian',\n 'native',\n 'imperial',\n 'strict',\n 'wise',\n 'informal',\n 'flexible',\n 'collective',\n 'frequent',\n 'experimental',\n 'spiritual',\n 'intense',\n 'rational',\n 'generous',\n 'inadequate',\n 'prominent',\n 'logical',\n 'bare',\n 'historic',\n 'modest',\n 'dutch',\n 'acute',\n 'electrical',\n 'valid',\n 'weekly',\n 'gross',\n 'automatic',\n 'loud',\n 'reliable',\n 'mutual',\n 'liable',\n 'multiple',\n 'ruling',\n 'curious',\n 'sole',\n 'managing',\n 'pregnant',\n 'latin',\n 'nearby',\n 'exact',\n 'underlying',\n 'identical',\n 'satisfactory',\n 'marginal',\n 'distinctive',\n 'electoral',\n 'urgent',\n 'presidential',\n 'controversial',\n 'everyday',\n 'encouraging',\n 'organic',\n 'continued',\n 'expected',\n 'statistical',\n 'desirable',\n 'innocent',\n 'improved',\n 'exclusive',\n 'marked',\n 'experienced',\n 'unexpected',\n 'superb',\n 'sheer',\n 'disappointed',\n 'frightened',\n 'gastric',\n 'romantic',\n 'naked',\n 'reluctant',\n 'magnificent',\n 'convenient',\n 'established',\n 'closed',\n 'uncertain',\n 'artificial',\n 'diplomatic',\n 'tremendous',\n 'marine',\n 'mechanical',\n 'retail',\n 'institutional',\n 'mixed',\n 'required',\n 'biological',\n 'known',\n 'functional',\n 'straightforward',\n 'superior',\n 'digital',\n 'spectacular',\n 'unhappy',\n 'confused',\n 'unfair',\n 'aggressive',\n 'spare',\n 'painful',\n 'abstract',\n 'asian',\n 'associated',\n 'legislative',\n 'monthly',\n 'intelligent',\n 'hungry',\n 'explicit',\n 'nasty',\n 'just',\n 'faint',\n 'coloured',\n 'ridiculous',\n 'amazing',\n 'comparable',\n 'successive',\n 'realistic',\n 'back',\n 'decent',\n 'decentralized',\n 'bitcoin',\n 'cypherpunk',\n 'unnecessary',\n 'flying',\n 'random',\n 'influential',\n 'dull',\n 'genetic',\n 'neat',\n 'marvellous',\n 'crazy',\n 'damp',\n 'giant',\n 'secure',\n 'bottom',\n 'skilled',\n 'subtle',\n 'elegant',\n 'brave',\n 'lesser',\n 'parallel',\n 'steep',\n 'intensive',\n 'casual',\n 'tropical',\n 'lonely',\n 'partial',\n 'preliminary',\n 'concrete',\n 'alleged',\n 'assistant',\n 'vertical',\n 'upset',\n 'delicate',\n 'mild',\n 'occupational',\n 'excessive',\n 'progressive',\n 'exceptional',\n 'integrated',\n 'striking',\n 'continental',\n 'okay',\n 'harsh',\n 'combined',\n 'fierce',\n 'handsome',\n 'characteristic',\n 'chronic',\n 'compulsory',\n 'interim',\n 'objective',\n 'splendid',\n 'magic',\n 'systematic',\n 'obliged',\n 'payable',\n 'fun',\n 'horrible',\n 'primitive',\n 'fascinating',\n 'ideological',\n 'metropolitan',\n 'surrounding',\n 'estimated',\n 'peaceful',\n 'premier',\n 'operational',\n 'technological',\n 'kind',\n 'advisory',\n 'hostile',\n 'precious',\n 'accessible',\n 'determined',\n 'excited',\n 'impressed',\n 'provincial',\n 'smart',\n 'endless',\n 'isolated',\n 'drunk',\n 'geographical',\n 'like',\n 'dynamic',\n 'boring',\n 'forthcoming',\n 'unfortunate',\n 'definite',\n 'super',\n 'notable',\n 'indirect',\n 'stiff',\n 'wealthy',\n 'awkward',\n 'lively',\n 'neutral',\n 'artistic',\n 'content',\n 'mature',\n 'colonial',\n 'ambitious',\n 'evil',\n 'magnetic',\n 'verbal',\n 'legitimate',\n 'sympathetic',\n 'empirical',\n 'head',\n 'shallow',\n 'vague',\n 'naval',\n 'depressed',\n 'shared',\n 'added',\n 'shocked',\n 'mid',\n 'worthwhile',\n 'qualified',\n 'missing',\n 'blank',\n 'absent',\n 'favourable',\n 'polish',\n 'israeli',\n 'developed',\n 'profound',\n 'representative',\n 'enthusiastic',\n 'dreadful',\n 'rigid',\n 'reduced',\n 'cruel',\n 'coastal',\n 'peculiar',\n 'swiss',\n 'crude',\n 'extended',\n 'selected',\n 'eager',\n 'canadian',\n 'bold',\n 'relaxed',\n 'corresponding',\n 'running',\n 'planned',\n 'applicable',\n 'immense',\n 'allied',\n 'comparative',\n 'uncomfortable',\n 'conservation',\n 'productive',\n 'beneficial',\n 'bored',\n 'charming',\n 'minimal',\n 'mobile',\n 'turkish',\n 'orange',\n 'rear',\n 'passive',\n 'suspicious',\n 'overwhelming',\n 'fatal',\n 'resulting',\n 'symbolic',\n 'registered',\n 'neighbouring',\n 'calm',\n 'irrelevant',\n 'patient',\n 'compact',\n 'profitable',\n 'rival',\n 'loyal',\n 'moderate',\n 'distinguished',\n 'interior',\n 'noble',\n 'insufficient',\n 'eligible',\n 'mysterious',\n 'varying',\n 'managerial',\n 'molecular',\n 'olympic',\n 'linear',\n 'prospective',\n 'printed',\n 'parental',\n 'diverse',\n 'elaborate',\n 'furious',\n 'fiscal',\n 'burning',\n 'useless',\n 'semantic',\n 'embarrassed',\n 'inherent',\n 'philosophical',\n 'deliberate',\n 'awake',\n 'variable',\n 'promising',\n 'unpleasant',\n 'varied',\n 'sacred',\n 'selective',\n 'inclined',\n 'tender',\n 'hidden',\n 'worthy',\n 'intermediate',\n 'sound',\n 'protective',\n 'fortunate',\n 'slim',\n 'defensive',\n 'divine',\n 'stuck',\n 'driving',\n 'invisible',\n 'misleading',\n 'circular',\n 'mathematical',\n 'inappropriate',\n 'liquid',\n 'persistent',\n 'solar',\n 'doubtful',\n 'manual',\n 'architectural',\n 'intact',\n 'incredible',\n 'devoted',\n 'prior',\n 'tragic',\n 'respectable',\n 'optimistic',\n 'convincing',\n 'unacceptable',\n 'decisive',\n 'competent',\n 'spatial',\n 'respective',\n 'binding',\n 'relieved',\n 'nursing',\n 'toxic',\n 'select',\n 'redundant',\n 'integral',\n 'then',\n 'probable',\n 'amateur',\n 'fond',\n 'passing',\n 'specified',\n 'territorial',\n 'horizontal',\n 'inland',\n 'cognitive',\n 'regulatory',\n 'miserable',\n 'resident',\n 'polite',\n 'scared',\n 'gothic',\n 'civilian',\n 'instant',\n 'lengthy',\n 'adverse',\n 'korean',\n 'unconscious',\n 'anonymous',\n 'aesthetic',\n 'orthodox',\n 'static',\n 'unaware',\n 'costly',\n 'fantastic',\n 'foolish',\n 'fashionable',\n 'causal',\n 'compatible',\n 'wee',\n 'implicit',\n 'dual',\n 'ok',\n 'cheerful',\n 'subjective',\n 'forward',\n 'surviving',\n 'exotic',\n 'purple',\n 'cautious',\n 'visiting',\n 'aggregate',\n 'ethical',\n 'teenage',\n 'dying',\n 'disastrous',\n 'delicious',\n 'confidential',\n 'underground',\n 'thorough',\n 'grim',\n 'autonomous',\n 'atomic',\n 'frozen',\n 'colourful',\n 'injured',\n 'uniform',\n 'ashamed',\n 'glorious',\n 'wicked',\n 'coherent',\n 'rising',\n 'shy',\n 'novel',\n 'balanced',\n 'delightful',\n 'arbitrary',\n 'adjacent',\n 'worrying',\n 'weird',\n 'unchanged',\n 'rolling',\n 'evolutionary',\n 'intimate',\n 'sporting',\n 'disciplinary',\n 'formidable',\n 'lexical',\n 'noisy',\n 'gradual',\n 'accused',\n 'homeless',\n 'supporting',\n 'coming',\n 'renewed',\n 'excess',\n 'retired',\n 'rubber',\n 'chosen',\n 'outdoor',\n 'embarrassing',\n 'preferred',\n 'bizarre',\n 'appalling',\n 'agreed',\n 'imaginative',\n 'governing',\n 'accepted',\n 'vocational',\n 'mighty',\n 'puzzled',\n 'worldwide',\n 'organisational',\n 'sunny',\n 'eldest',\n 'eventual',\n 'spontaneous',\n 'vivid',\n 'rude',\n 'faithful',\n 'ministerial',\n 'innovative',\n 'controlled',\n 'conceptual',\n 'unwilling',\n 'civic',\n 'meaningful',\n 'alive',\n 'brainy',\n 'breakable',\n 'busy',\n 'careful',\n 'cautious',\n 'clever',\n 'concerned',\n 'crazy',\n 'curious',\n 'dead',\n 'different',\n 'difficult',\n 'doubtful',\n 'easy',\n 'famous',\n 'fragile',\n 'helpful',\n 'helpless',\n 'important',\n 'impossible',\n 'innocent',\n 'inquisitive',\n 'modern',\n 'open',\n 'outstanding',\n 'poor',\n 'powerful',\n 'puzzled',\n 'real',\n 'rich',\n 'shy',\n 'sleepy',\n 'super',\n 'tame',\n 'uninterested',\n 'wandering',\n 'wild',\n 'wrong',\n 'adorable',\n 'alert',\n 'average',\n 'beautiful',\n 'blonde',\n 'bloody',\n 'blushing',\n 'bright',\n 'clean',\n 'clear',\n 'cloudy',\n 'colorful',\n 'crowded',\n 'cute',\n 'dark',\n 'drab',\n 'distinct',\n 'dull',\n 'elegant',\n 'fancy',\n 'filthy',\n 'glamorous',\n 'gleaming',\n 'graceful',\n 'grotesque',\n 'homely',\n 'light',\n 'misty',\n 'motionless',\n 'muddy',\n 'plain',\n 'poised',\n 'quaint',\n 'shiny',\n 'smoggy',\n 'sparkling',\n 'spotless',\n 'stormy',\n 'strange',\n 'ugly',\n 'unsightly',\n 'unusual',\n 'bad',\n 'better',\n 'beautiful',\n 'big',\n 'black',\n 'blue',\n 'bright',\n 'clumsy',\n 'crazy',\n 'dizzy',\n 'dull',\n 'fat',\n 'frail',\n 'friendly',\n 'funny',\n 'great',\n 'green',\n 'gigantic',\n 'gorgeous',\n 'grumpy',\n 'handsome',\n 'happy',\n 'horrible',\n 'itchy',\n 'jittery',\n 'jolly',\n 'kind',\n 'long',\n 'lazy',\n 'magnificent',\n 'magenta',\n 'many',\n 'mighty',\n 'mushy',\n 'nasty',\n 'new',\n 'nice',\n 'nosy',\n 'nutty',\n 'nutritious',\n 'odd',\n 'orange',\n 'ordinary',\n 'pretty',\n 'precious',\n 'prickly',\n 'purple',\n 'quaint',\n 'quiet',\n 'quick',\n 'quickest',\n 'rainy',\n 'rare',\n 'ratty',\n 'red',\n 'roasted',\n 'robust',\n 'round',\n 'sad',\n 'scary',\n 'scrawny',\n 'short',\n 'silly',\n 'stingy',\n 'strange',\n 'striped',\n 'spotty',\n 'tart',\n 'tall',\n 'tame',\n 'tan',\n 'tender',\n 'testy',\n 'tricky',\n 'tough',\n 'ugly',\n 'ugliest',\n 'vast',\n 'watery',\n 'wasteful',\n 'wonderful',\n 'yellow',\n 'yummy',\n 'zany',\n];\n\nexport default {\n gunOnceDefined,\n gunAsAnotherUser,\n async getHash (str: string, format = `base64`) {\n if (!str) {\n return undefined;\n }\n const hash = await Gun.SEA.work(str, undefined, undefined, {name: `SHA-256`});\n if (!hash) {\n throw new Error(`Gun.SEA.work failed for ${str}`);\n }\n if (hash.length > 44) {\n throw new Error(`Gun.SEA.work returned an invalid SHA-256 hash longer than 44 chars: ${hash}. This is probably due to a sea.js bug on Safari.`);\n }\n if (format === `hex`) {\n return this.base64ToHex(hash);\n }\n return hash;\n },\n\n capitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n },\n\n generateName() {\n return `${this.capitalize(_.sample(adjectives)!)} ${this.capitalize(_.sample(animals)!)}`;\n },\n\n base64ToHex(str: string) {\n const raw = atob(str);\n let result = '';\n for (let i = 0; i < raw.length; i++) {\n const hex = raw.charCodeAt(i).toString(16);\n result += (hex.length === 2 ? hex : `0${ hex}`);\n }\n return result;\n },\n\n getCaret(el: HTMLInputElement) {\n if (el.selectionStart) {\n return el.selectionStart;\n } else { // @ts-ignore\n if (document.selection) {\n el.focus();\n // @ts-ignore\n const r = document.selection.createRange();\n if (r === null) {\n return 0;\n }\n // @ts-ignore\n const re = el.createTextRange(), rc = re.duplicate();\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n return rc.text.length;\n }\n }\n return 0;\n },\n\n injectCss() {\n const elementId = `irisStyle`;\n if (document.getElementById(elementId)) {\n return;\n }\n const sheet = document.createElement(`style`);\n sheet.id = elementId;\n sheet.innerHTML = `\n .iris-follow-button .hover {\n display: none;\n }\n\n .iris-follow-button.following:hover .hover {\n display: inline;\n }\n\n .iris-follow-button.following:hover .nonhover {\n display: none;\n }\n\n .iris-identicon * {\n box-sizing: border-box;\n }\n\n .iris-identicon {\n vertical-align: middle;\n border-radius: 50%;\n text-align: center;\n display: inline-block;\n position: relative;\n max-width: 100%;\n }\n\n .iris-distance {\n z-index: 2;\n position: absolute;\n left:0%;\n top:2px;\n width: 100%;\n text-align: right;\n color: #fff;\n text-shadow: 0 0 1px #000;\n font-size: 75%;\n line-height: 75%;\n font-weight: bold;\n }\n\n .iris-pie {\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: 0px 0px 0px 0px #82FF84;\n padding-bottom: 100%;\n max-width: 100%;\n -webkit-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n }\n\n .iris-card {\n padding: 10px;\n background-color: #f7f7f7;\n color: #777;\n border: 1px solid #ddd;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n }\n\n .iris-card a {\n -webkit-transition: color 150ms;\n transition: color 150ms;\n text-decoration: none;\n color: #337ab7;\n }\n\n .iris-card a:hover, .iris-card a:active {\n text-decoration: underline;\n color: #23527c;\n }\n\n .iris-pos {\n color: #3c763d;\n }\n\n .iris-neg {\n color: #a94442;\n }\n\n .iris-identicon img {\n position: absolute;\n top: 0;\n left: 0;\n max-width: 100%;\n border-radius: 50%;\n border-color: transparent;\n border-style: solid;\n }\n\n .iris-chat-open-button {\n background-color: #1e1e1e;\n color: #fff;\n padding: 15px;\n cursor: pointer;\n user-select: none;\n }\n\n .iris-chat-open-button svg {\n width: 1em;\n }\n\n .iris-chat-open-button, .iris-chat-box {\n position: fixed;\n bottom: 0.5rem;\n right: 0.5rem;\n border-radius: 8px;\n font-family: system-ui;\n font-size: 15px;\n }\n\n .iris-chat-box {\n background-color: #fff;\n max-height: 25rem;\n box-shadow: 2px 2px 20px rgba(0, 0, 0, 0.2);\n height: calc(100% - 44px);\n display: flex;\n flex-direction: column;\n width: 320px;\n color: rgb(38, 38, 38);\n }\n\n .iris-chat-box.minimized {\n height: auto;\n }\n\n .iris-chat-box.minimized .iris-chat-header {\n border-radius: 8px;\n cursor: pointer;\n }\n\n .iris-chat-box.minimized .iris-chat-messages, .iris-chat-box.minimized .iris-typing-indicator, .iris-chat-box.minimized .iris-chat-input-wrapper, .iris-chat-box.minimized .iris-chat-minimize, .iris-chat-box.minimized .iris-chat-close {\n display: none;\n }\n\n .iris-chat-header {\n background-color: #1e1e1e;\n height: 44px;\n color: #fff;\n border-radius: 8px 8px 0 0;\n text-align: center;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n flex: none;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .iris-chat-header-text {\n flex: 1;\n }\n\n .iris-online-indicator {\n color: #bfbfbf;\n margin-right: 5px;\n font-size: 12px;\n user-select: none;\n flex: none;\n }\n\n .iris-online-indicator.yes {\n color: #80bf5f;\n }\n\n .iris-typing-indicator {\n display: none;\n background-color: rgba(255, 255, 255, 0.5);\n font-size: 12px;\n padding: 2px;\n color: #777;\n }\n\n .iris-typing-indicator.yes {\n display: block;\n }\n\n .iris-chat-messages {\n flex: 1;\n padding: 15px;\n overflow-y: scroll;\n }\n\n .iris-chat-input-wrapper {\n flex: none;\n padding: 15px;\n background-color: #efefef;\n display: flex;\n flex-direction: row;\n border-radius: 0 0 8px 8px;\n }\n\n .iris-chat-input-wrapper textarea {\n padding: 15px 8px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0);\n width: auto;\n font-size: 15px;\n resize: none;\n flex: 1;\n }\n\n .iris-chat-input-wrapper textarea:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-input-wrapper button svg {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n width: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n }\n\n .iris-chat-input-wrapper button, .iris-chat-input-wrapper button:hover, .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n flex: none;\n color: #999;\n background-color: transparent;\n font-size: 30px;\n padding: 5px;\n border: 1px solid rgba(0,0,0,0);\n border-radius: 4px;\n margin-left: 5px;\n }\n\n .iris-chat-input-wrapper button:active, .iris-chat-input-wrapper button:focus {\n outline: none;\n border: 1px solid #6dd0ed;\n }\n\n .iris-chat-message {\n display: flex;\n flex-direction: column;\n margin-bottom: 2px;\n overflow-wrap: break-word;\n }\n\n .iris-msg-content {\n background-color: #efefef;\n padding: 6px 10px;\n border-radius: 8px;\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n flex: none;\n max-width: 75%;\n }\n\n .emoji {\n font-size: 1.3em;\n line-height: 1em;\n }\n\n .iris-chat-message .emoji-only {\n font-size: 3em;\n text-align: center;\n }\n\n .iris-seen {\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n }\n\n .iris-seen.yes {\n color: #4fc3f7;\n }\n\n .iris-seen svg {\n width: 18px;\n }\n\n .iris-delivered-checkmark {\n display: none;\n }\n\n .delivered .iris-delivered-checkmark {\n display: initial;\n }\n\n .iris-chat-minimize, .iris-chat-close {\n user-select: none;\n cursor: pointer;\n width: 45px;\n line-height: 44px;\n }\n\n .iris-chat-message.their {\n align-items: flex-start;\n }\n\n .iris-chat-message.their + .iris-chat-message.our .iris-msg-content, .day-separator + .iris-chat-message.our .iris-msg-content {\n margin-top: 15px;\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.their:first-of-type .iris-msg-content {\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our:first-of-type .iris-msg-content {\n border-radius: 8px 0px 8px 8px;\n }\n\n .iris-chat-message.our + .iris-chat-message.their .iris-msg-content, .day-separator + .iris-chat-message.their .iris-msg-content {\n margin-top: 15px;\n border-radius: 0px 8px 8px 8px;\n }\n\n .iris-chat-message.our {\n align-items: flex-end;\n }\n\n .iris-chat-message.our .iris-msg-content {\n background-color: #c5ecf7;\n }\n\n .iris-chat-message .time {\n text-align: right;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.45);\n }\n\n .iris-non-string {\n color: blue;\n }\n\n .day-separator {\n display: inline-block;\n border-radius: 8px;\n background-color: rgba(227, 249, 255, 0.91);\n padding: 6px 10px;\n margin-top: 15px;\n margin-left: auto;\n margin-right: auto;\n text-transform: uppercase;\n font-size: 13px;\n color: rgba(74, 74, 74, 0.88);\n box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);\n user-select: none;\n }\n\n .day-separator:first-of-type {\n margin-top: 0;\n }\n\n *[contenteditable=\"true\"]:not(:focus) {\n cursor: pointer;\n }\n\n *[contenteditable=\"true\"] {\n outline: none;\n }\n\n [placeholder]:empty:before {\n content: attr(placeholder);\n color: #999;\n }\n\n [placeholder]:empty:focus {\n cursor: text;\n }\n `;\n document.head.prepend(sheet);\n },\n\n getUrlParameter(sParam: string, sParams: string) {\n const sPageURL = sParams || window.location.search.substring(1);\n const sURLVariables = sPageURL.split('&');\n let sParameterName, i;\n\n for (i = 0; i < sURLVariables.length; i++) {\n sParameterName = sURLVariables[i].split('=');\n if (sParameterName[0] === sParam) {\n return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);\n }\n }\n return;\n },\n\n formatTime(date: Date) {\n // @ts-ignore\n const t: any = date.toLocaleTimeString(undefined, {timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n formatDate(date: Date) {\n const t = date.toLocaleString(undefined, {dateStyle: 'short', timeStyle: 'short'});\n const s = t.split(':');\n if (s.length === 3) { // safari tries to display seconds\n return `${s[0] }:${ s[1] }${s[2].slice(2)}`;\n }\n return t;\n },\n\n getDaySeparatorText(date: Date, dateStr: string, now?: Date, nowStr?: string) {\n if (!now) {\n now = new Date();\n // @ts-ignore\n nowStr = now.toLocaleDateString({dateStyle: 'short'});\n }\n if (dateStr === nowStr) {\n return 'today';\n }\n const dayDifference = Math.round((now - date) / (1000 * 60 * 60 * 24));\n if (dayDifference === 0) {\n return 'today';\n }\n if (dayDifference === 1) {\n return 'yesterday';\n }\n if (dayDifference <= 5) {\n return date.toLocaleDateString(undefined, {weekday: 'long'});\n }\n return dateStr;\n },\n\n getProfileLink(pub: string) {\n return `${window.location.origin}/#/profile/${encodeURIComponent(pub)}`;\n },\n\n truncateString(s: string, length = 30) {\n return s.length > length ? `${s.slice(0, length)}...` : s;\n },\n\n createElement(type: string, cls?: string, parent?: HTMLElement) {\n const el = document.createElement(type);\n if (cls) {\n el.setAttribute('class', cls);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n },\n\n isNode,\n isElectron,\n isMobile,\n\n throttle: (func: Function, limit: number) => {\n let inThrottle: boolean;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n func.apply(context, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, limit);\n }\n };\n },\n debounce: (func: Function, delay: number) => {\n let inDebounce: boolean;\n return function() {\n const context = this;\n const args = arguments;\n clearTimeout(inDebounce);\n inDebounce = setTimeout(() => func.apply(context, args), delay);\n };\n },\n sample: (arr: any[]) => arr[Math.floor(Math.random() * arr.length)],\n sampleSize: (arr: any[], size: number) => {\n const shuffled = arr.slice(0);\n let i = arr.length;\n let min = i - size;\n let temp;\n let index;\n while (i-- > min) {\n index = Math.floor((i + 1) * Math.random());\n temp = shuffled[index];\n shuffled[index] = shuffled[i];\n shuffled[i] = temp;\n }\n return shuffled.slice(min);\n },\n defer: (func: Function) => setTimeout(func, 0),\n once: (func: Function) => {\n let called = false;\n return function() {\n if (called) {\n return;\n }\n called = true;\n func.apply(this, arguments);\n };\n },\n omit: (obj: any, keys: string[]) => {\n const newObj = {};\n Object.keys(obj).forEach(key => {\n if (!keys.includes(key)) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n }\n};\n",";(function(){\n// JSON: JavaScript Object Notation\n// YSON: Yielding javaScript Object Notation\nvar yson = {}, u, sI = setTimeout.turn || (typeof setImmediate != ''+u && setImmediate) || setTimeout;\n\nyson.parseAsync = function(text, done, revive, M){\n\tif('string' != typeof text){ try{ done(u,JSON.parse(text)) }catch(e){ done(e) } return }\n\tvar ctx = {i: 0, text: text, done: done, l: text.length, up: []};\n\t//M = 1024 * 1024 * 100;\n\t//M = M || 1024 * 64;\n\tM = M || 1024 * 32;\n\tparse();\n\tfunction parse(){\n\t\t//var S = +new Date;\n\t\tvar s = ctx.text;\n\t\tvar i = ctx.i, l = ctx.l, j = 0;\n\t\tvar w = ctx.w, b, tmp;\n\t\twhile(j++ < M){\n\t\t\tvar c = s[i++];\n\t\t\tif(i > l){\n\t\t\t\tctx.end = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(w){\n\t\t\t\ti = s.indexOf('\"', i-1); c = s[i];\n\t\t\t\ttmp = 0; while('\\\\' == s[i-(++tmp)]){}; tmp = !(tmp % 2);//tmp = ('\\\\' == s[i-1]); // json is stupid\n\t\t\t\tb = b || tmp;\n\t\t\t\tif('\"' == c && !tmp){\n\t\t\t\t\tw = u;\n\t\t\t\t\ttmp = ctx.s;\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\ttmp = s.slice(ctx.sl, i);\n\t\t\t\t\t\tif(b || (1+tmp.indexOf('\\\\'))){ tmp = JSON.parse('\"'+tmp+'\"') } // escape + unicode :( handling\n\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\tctx.at.push(ctx.s = tmp);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(!ctx.at){ ctx.end = j = M; tmp = u }\n\t\t\t\t\t\t\t(ctx.at||{})[ctx.s] = ctx.s = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.s = u;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.s = s.slice(ctx.sl, i);\n\t\t\t\t\t\tif(b || (1+ctx.s.indexOf('\\\\'))){ ctx.s = JSON.parse('\"'+ctx.s+'\"'); } // escape + unicode :( handling\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = b = u;\n\t\t\t\t}\n\t\t\t\t++i;\n\t\t\t} else {\n\t\t\t\tswitch(c){\n\t\t\t\tcase '\"':\n\t\t\t\t\tctx.sl = i;\n\t\t\t\t\tw = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ':':\n\t\t\t\t\tctx.ai = i;\n\t\t\t\t\tctx.a = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ',':\n\t\t\t\t\tif(ctx.a || ctx.at instanceof Array){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.at[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\tctx.a = true;\n\t\t\t\t\t\tctx.ai = i;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '{':\n\t\t\t\t\tctx.up.push(ctx.at||(ctx.at = {}));\n\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\tctx.at.push(ctx.at = {});\n\t\t\t\t\t} else\n\t\t\t\t\tif(u !== (tmp = ctx.s)){\n\t\t\t\t\t\tctx.at[tmp] = ctx.at = {};\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tbreak;\n\t\t\t\tcase '}':\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif(!ctx.at){ ctx.end = j = M; tmp = u }\n\t\t\t\t\t\t\t\t\t(ctx.at||{})[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tctx.at = ctx.up.pop();\n\t\t\t\t\tbreak;\n\t\t\t\tcase '[':\n\t\t\t\t\tif(u !== (tmp = ctx.s)){\n\t\t\t\t\t\tctx.up.push(ctx.at);\n\t\t\t\t\t\tctx.at[tmp] = ctx.at = [];\n\t\t\t\t\t} else\n\t\t\t\t\tif(!ctx.at){\n\t\t\t\t\t\tctx.up.push(ctx.at = []);\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = true;\n\t\t\t\t\tctx.ai = i;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ']':\n\t\t\t\t\tif(ctx.a){\n\t\t\t\t\t\tif(tmp = s.slice(ctx.ai, i-1)){\n\t\t\t\t\t\t\tif(u !== (tmp = value(tmp))){\n\t\t\t\t\t\t\t\tif(ctx.at instanceof Array){\n\t\t\t\t\t\t\t\t\tctx.at.push(tmp);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tctx.at[ctx.s] = tmp;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.a = u;\n\t\t\t\t\tctx.at = ctx.up.pop();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tctx.s = u;\n\t\tctx.i = i;\n\t\tctx.w = w;\n\t\tif(ctx.end){\n\t\t\ttmp = ctx.at;\n\t\t\tif(u === tmp){\n\t\t\t\ttry{ tmp = JSON.parse(text)\n\t\t\t\t}catch(e){ return ctx.done(e) }\n\t\t\t}\n\t\t\tctx.done(u, tmp);\n\t\t} else {\n\t\t\tsI(parse);\n\t\t}\n\t}\n}\nfunction value(s){\n\tvar n = parseFloat(s);\n\tif(!isNaN(n)){\n\t\treturn n;\n\t}\n\ts = s.trim();\n\tif('true' == s){\n\t\treturn true;\n\t}\n\tif('false' == s){\n\t\treturn false;\n\t}\n\tif('null' == s){\n\t\treturn null;\n\t}\n}\n\nyson.stringifyAsync = function(data, done, replacer, space, ctx){\n\t//try{done(u, JSON.stringify(data, replacer, space))}catch(e){done(e)}return;\n\tctx = ctx || {};\n\tctx.text = ctx.text || \"\";\n\tctx.up = [ctx.at = {d: data}];\n\tctx.done = done;\n\tctx.i = 0;\n\tvar j = 0;\n\tify();\n\tfunction ify(){\n\t\tvar at = ctx.at, data = at.d, add = '', tmp;\n\t\tif(at.i && (at.i - at.j) > 0){ add += ',' }\n\t\tif(u !== (tmp = at.k)){ add += JSON.stringify(tmp) + ':' } //'\"'+tmp+'\":' } // only if backslash\n\t\tswitch(typeof data){\n\t\tcase 'boolean':\n\t\t\tadd += ''+data;\n\t\t\tbreak;\n\t\tcase 'string':\n\t\t\tadd += JSON.stringify(data); //ctx.text += '\"'+data+'\"';//JSON.stringify(data); // only if backslash\n\t\t\tbreak;\n\t\tcase 'number':\n\t\t\tadd += (isNaN(data)? 'null' : data);\n\t\t\tbreak;\n\t\tcase 'object':\n\t\t\tif(!data){\n\t\t\t\tadd += 'null';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(data instanceof Array){\t\n\t\t\t\tadd += '[';\n\t\t\t\tat = {i: -1, as: data, up: at, j: 0};\n\t\t\t\tat.l = data.length;\n\t\t\t\tctx.up.push(ctx.at = at);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif('function' != typeof (data||'').toJSON){\n\t\t\t\tadd += '{';\n\t\t\t\tat = {i: -1, ok: Object.keys(data).sort(), as: data, up: at, j: 0};\n\t\t\t\tat.l = at.ok.length;\n\t\t\t\tctx.up.push(ctx.at = at);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(tmp = data.toJSON()){\n\t\t\t\tadd += tmp;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// let this & below pass into default case...\n\t\tcase 'function':\n\t\t\tif(at.as instanceof Array){\n\t\t\t\tadd += 'null';\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault: // handle wrongly added leading `,` if previous item not JSON-able.\n\t\t\tadd = '';\n\t\t\tat.j++;\n\t\t}\n\t\tctx.text += add;\n\t\twhile(1+at.i >= at.l){\n\t\t\tctx.text += (at.ok? '}' : ']');\n\t\t\tat = ctx.at = at.up;\n\t\t}\n\t\tif(++at.i < at.l){\n\t\t\tif(tmp = at.ok){\n\t\t\t\tat.d = at.as[at.k = tmp[at.i]];\n\t\t\t} else {\n\t\t\t\tat.d = at.as[at.i];\n\t\t\t}\n\t\t\tif(++j < 9){ return ify() } else { j = 0 }\n\t\t\tsI(ify);\n\t\t\treturn;\n\t\t}\n\t\tctx.done(u, ctx.text);\n\t}\n}\nif(typeof window != ''+u){ window.YSON = yson }\ntry{ if(typeof module != ''+u){ module.exports = yson } }catch(e){}\nif(typeof JSON != ''+u){\n\tJSON.parseAsync = yson.parseAsync;\n\tJSON.stringifyAsync = yson.stringifyAsync;\n}\n\n}());",";(function(){\n\n\tfunction Radix(){\n\t\tvar radix = function(key, val, t){\n\t\t\tradix.unit = 0;\n\t\t\tif(!t && u !== val){ \n\t\t\t\tradix.last = (''+key < radix.last)? radix.last : ''+key;\n\t\t\t\tdelete (radix.$||{})[_];\n\t\t\t}\n\t\t\tt = t || radix.$ || (radix.$ = {});\n\t\t\tif(!key && Object.keys(t).length){ return t }\n\t\t\tkey = ''+key;\n\t\t\tvar i = 0, l = key.length-1, k = key[i], at, tmp;\n\t\t\twhile(!(at = t[k]) && i < l){\n\t\t\t\tk += key[++i];\n\t\t\t}\n\t\t\tif(!at){\n\t\t\t\tif(!each(t, function(r, s){\n\t\t\t\t\tvar ii = 0, kk = '';\n\t\t\t\t\tif((s||'').length){ while(s[ii] == key[ii]){\n\t\t\t\t\t\tkk += s[ii++];\n\t\t\t\t\t} }\n\t\t\t\t\tif(kk){\n\t\t\t\t\t\tif(u === val){\n\t\t\t\t\t\t\tif(ii <= l){ return }\n\t\t\t\t\t\t\t(tmp || (tmp = {}))[s.slice(ii)] = r;\n\t\t\t\t\t\t\t//(tmp[_] = function $(){ $.sort = Object.keys(tmp).sort(); return $ }()); // get rid of this one, cause it is on read?\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar __ = {};\n\t\t\t\t\t\t__[s.slice(ii)] = r;\n\t\t\t\t\t\tii = key.slice(ii);\n\t\t\t\t\t\t('' === ii)? (__[''] = val) : ((__[ii] = {})[''] = val);\n\t\t\t\t\t\t//(__[_] = function $(){ $.sort = Object.keys(__).sort(); return $ }());\n\t\t\t\t\t\tt[kk] = __;\n\t\t\t\t\t\tif(Radix.debug && 'undefined' === ''+kk){ console.log(0, kk); debugger }\n\t\t\t\t\t\tdelete t[s];\n\t\t\t\t\t\t//(t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }());\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t})){\n\t\t\t\t\tif(u === val){ return; }\n\t\t\t\t\t(t[k] || (t[k] = {}))[''] = val;\n\t\t\t\t\tif(Radix.debug && 'undefined' === ''+k){ console.log(1, k); debugger }\n\t\t\t\t\t//(t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }());\n\t\t\t\t}\n\t\t\t\tif(u === val){\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t} else \n\t\t\tif(i == l){\n\t\t\t\t//if(u === val){ return (u === (tmp = at['']))? at : tmp } // THIS CODE IS CORRECT, below is\n\t\t\t\tif(u === val){ return (u === (tmp = at['']))? at : ((radix.unit = 1) && tmp) } // temporary help??\n\t\t\t\tat[''] = val;\n\t\t\t\t//(at[_] = function $(){ $.sort = Object.keys(at).sort(); return $ }());\n\t\t\t} else {\n\t\t\t\tif(u !== val){ delete at[_] }\n\t\t\t\t//at && (at[_] = function $(){ $.sort = Object.keys(at).sort(); return $ }());\n\t\t\t\treturn radix(key.slice(++i), val, at || (at = {}));\n\t\t\t}\n\t\t}\n\t\treturn radix;\n\t};\n\n\tRadix.map = function rap(radix, cb, opt, pre){\n\t\ttry {\n\t\t\tpre = pre || []; // TODO: BUG: most out-of-memory crashes come from here.\n\t\t\tvar t = ('function' == typeof radix)? radix.$ || {} : radix;\n\t\t\t//!opt && console.log(\"WHAT IS T?\", JSON.stringify(t).length);\n\t\t\tif(!t){ return }\n\t\t\tif('string' == typeof t){ if(Radix.debug){ throw ['BUG:', radix, cb, opt, pre] } return; }\n\t\t\tvar keys = (t[_]||no).sort || (t[_] = function $(){ $.sort = Object.keys(t).sort(); return $ }()).sort, rev; // ONLY 17% of ops are pre-sorted!\n\t\t\t//var keys = Object.keys(t).sort();\n\t\t\topt = (true === opt)? {branch: true} : (opt || {});\n\t\t\tif(rev = opt.reverse){ keys = keys.slice(0).reverse() }\n\t\t\tvar start = opt.start, end = opt.end, END = '\\uffff';\n\t\t\tvar i = 0, l = keys.length;\n\t\t\tfor(;i < l; i++){ var key = keys[i], tree = t[key], tmp, p, pt;\n\t\t\t\tif(!tree || '' === key || _ === key || 'undefined' === key){ continue }\n\t\t\t\tp = pre.slice(0); p.push(key);\n\t\t\t\tpt = p.join('');\n\t\t\t\tif(u !== start && pt < (start||'').slice(0,pt.length)){ continue }\n\t\t\t\tif(u !== end && (end || END) < pt){ continue }\n\t\t\t\tif(rev){ // children must be checked first when going in reverse.\n\t\t\t\t\ttmp = rap(tree, cb, opt, p);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tif(u !== (tmp = tree[''])){\n\t\t\t\t\tvar yes = 1;\n\t\t\t\t\tif(u !== start && pt < (start||'')){ yes = 0 }\n\t\t\t\t\tif(u !== end && pt > (end || END)){ yes = 0 }\n\t\t\t\t\tif(yes){\n\t\t\t\t\t\ttmp = cb(tmp, pt, key, pre);\n\t\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\tif(opt.branch){\n\t\t\t\t\ttmp = cb(u, pt, key, pre);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tpre = p;\n\t\t\t\tif(!rev){\n\t\t\t\t\ttmp = rap(tree, cb, opt, pre);\n\t\t\t\t\tif(u !== tmp){ return tmp }\n\t\t\t\t}\n\t\t\t\tpre.pop();\n\t\t\t}\n\t\t} catch (e) { console.error(e); }\n\t};\n\n\tif(typeof window !== \"undefined\"){\n\t window.Radix = Radix;\n\t} else { \n\t\ttry{ module.exports = Radix }catch(e){}\n\t}\n\tvar each = Radix.object = function(o, f, r){\n\t\tfor(var k in o){\n\t\t\tif(!o.hasOwnProperty(k)){ continue }\n\t\t\tif((r = f(o[k], k)) !== u){ return r }\n\t\t}\n\t}, no = {}, u;\n\tvar _ = String.fromCharCode(24);\n\t\n}());\n",";(function(){\n\n\tfunction Radisk(opt){\n\n\t\topt = opt || {};\n\t\topt.log = opt.log || console.log;\n\t\topt.file = String(opt.file || 'radata');\n\t\tvar has = (Radisk.has || (Radisk.has = {}))[opt.file];\n\t\tif(has){ return has }\n\n\t\topt.max = opt.max || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;\n\t\topt.until = opt.until || opt.wait || 250;\n\t\topt.batch = opt.batch || (10 * 1000);\n\t\topt.chunk = opt.chunk || (1024 * 1024 * 1); // 1MB\n\t\topt.code = opt.code || {};\n\t\topt.code.from = opt.code.from || '!';\n\t\topt.jsonify = true;\n\n\n\t\tfunction ename(t){ return encodeURIComponent(t).replace(/\\*/g, '%2A') } // TODO: Hash this also, but allow migration!\n\t\tfunction atomic(v){ return u !== v && (!v || 'object' != typeof v) }\n\t\tvar timediate = (''+u === typeof setImmediate)? setTimeout : setImmediate;\n\t\tvar puff = setTimeout.turn || timediate, u;\n\t\tvar map = Radix.object;\n\t\tvar ST = 0;\n\n\t\tif(!opt.store){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `opt.store` interface with `{get: fn, put: fn (, list: fn)}`!\");\n\t\t}\n\t\tif(!opt.store.put){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `store.put` interface with `(file, data, cb)`!\");\n\t\t}\n\t\tif(!opt.store.get){\n\t\t\treturn opt.log(\"ERROR: Radisk needs `store.get` interface with `(file, cb)`!\");\n\t\t}\n\t\tif(!opt.store.list){\n\t\t\t//opt.log(\"WARNING: `store.list` interface might be needed!\");\n\t\t}\n\n\t\tif(''+u != typeof require){ require('./yson') }\n\t\tvar parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }\n\t\tvar json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }\n\t\t/*\n\t\t\tAny and all storage adapters should...\n\t\t\t1. Because writing to disk takes time, we should batch data to disk. This improves performance, and reduces potential disk corruption.\n\t\t\t2. If a batch exceeds a certain number of writes, we should immediately write to disk when physically possible. This caps total performance, but reduces potential loss.\n\t\t*/\n\t\tvar r = function(key, data, cb, tag, DBG){\n\t\t\tif('function' === typeof data){\n\t\t\t\tvar o = cb || {};\n\t\t\t\tcb = data;\n\t\t\t\tr.read(key, cb, o, DBG || tag);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t//var tmp = (tmp = r.batch = r.batch || {})[key] = tmp[key] || {};\n\t\t\t//var tmp = (tmp = r.batch = r.batch || {})[key] = data;\n\t\t\tr.save(key, data, cb, tag, DBG);\n\t\t}\n\t\tr.save = function(key, data, cb, tag, DBG){\n\t\t\tvar s = {key: key}, tags, f, d, q;\n\t\t\ts.find = function(file){ var tmp;\n\t\t\t\ts.file = file || (file = opt.code.from);\n\t\t\t\tDBG && (DBG = DBG[file] = DBG[file] || {});\n\t\t\t\tDBG && (DBG.sf = DBG.sf || +new Date);\n\t\t\t\t//console.only.i && console.log('found', file);\n\t\t\t\tif(tmp = r.disk[file]){ s.mix(u, tmp); return }\n\t\t\t\tr.parse(file, s.mix, u, DBG);\n\t\t\t}\n\t\t\ts.mix = function(err, disk){\n\t\t\t\tDBG && (DBG.sml = +new Date);\n\t\t\t\tDBG && (DBG.sm = DBG.sm || +new Date);\n\t\t\t\tif(s.err = err || s.err){ cb(err); return } // TODO: HANDLE BATCH EMIT\n\t\t\t\tvar file = s.file = (disk||'').file || s.file, tmp;\n\t\t\t\tif(!disk && file !== opt.code.from){ // corrupt file?\n\t\t\t\t\tr.find.bad(file); // remove from dir list\n\t\t\t\t\tr.save(key, data, cb, tag); // try again\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t(disk = r.disk[file] || (r.disk[file] = disk || Radix())).file || (disk.file = file);\n\t\t\t\tif(opt.compare){\n\t\t\t\t\tdata = opt.compare(disk(key), data, key, file);\n\t\t\t\t\tif(u === data){ cb(err, -1); return } // TODO: HANDLE BATCH EMIT\n\t\t\t\t}\n\t\t\t\t(s.disk = disk)(key, data);\n\t\t\t\tif(tag){\n\t\t\t\t\t(tmp = (tmp = disk.tags || (disk.tags = {}))[tag] || (tmp[tag] = r.tags[tag] || (r.tags[tag] = {})))[file] || (tmp[file] = r.one[tag] || (r.one[tag] = cb));\n\t\t\t\t\tcb = null;\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.st = DBG.st || +new Date);\n\t\t\t\t//console.only.i && console.log('mix', disk.Q);\n\t\t\t\tif(disk.Q){ cb && disk.Q.push(cb); return } disk.Q = (cb? [cb] : []);\n\t\t\t\tdisk.to = setTimeout(s.write, opt.until);\n\t\t\t}\n\t\t\ts.write = function(){\n\t\t\t\tDBG && (DBG.sto = DBG.sto || +new Date);\n\t\t\t\tvar file = f = s.file, disk = d = s.disk;\n\t\t\t\tq = s.q = disk.Q;\n\t\t\t\ttags = s.tags = disk.tags;\n\t\t\t\tdelete disk.Q;\n\t\t\t\tdelete r.disk[file];\n\t\t\t\tdelete disk.tags;\n\t\t\t\t//console.only.i && console.log('write', file, disk, 'was saving:', key, data);\n\t\t\t\tr.write(file, disk, s.ack, u, DBG);\n\t\t\t}\n\t\t\ts.ack = function(err, ok){\n\t\t\t\tDBG && (DBG.sa = DBG.sa || +new Date);\n\t\t\t\tDBG && (DBG.sal = q.length);\n\t\t\t\tvar ack, tmp;\n\t\t\t\t// TODO!!!! CHANGE THIS INTO PUFF!!!!!!!!!!!!!!!!\n\t\t\t\tfor(var id in r.tags){\n\t\t\t\t\tif(!r.tags.hasOwnProperty(id)){ continue } var tag = r.tags[id];\n\t\t\t\t\tif((tmp = r.disk[f]) && (tmp = tmp.tags) && tmp[tag]){ continue }\n\t\t\t\t\tack = tag[f];\n\t\t\t\t\tdelete tag[f];\n\t\t\t\t\tvar ne; for(var k in tag){ if(tag.hasOwnProperty(k)){ ne = true; break } } // is not empty?\n\t\t\t\t\tif(ne){ continue } //if(!obj_empty(tag)){ continue }\n\t\t\t\t\tdelete r.tags[tag];\n\t\t\t\t\tack && ack(err, ok);\n\t\t\t\t}\n\t\t\t\t!q && (q = '');\n\t\t\t\tvar l = q.length, i = 0;\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\t// TODO: PERF: Why is acks so slow, what work do they do??? CHECK THIS!!\n\t\t\t\tvar S = +new Date;\n\t\t\t\tfor(;i < l; i++){ (ack = q[i]) && ack(err, ok) }\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad acks', ename(s.file));\n\t\t\t\tconsole.STAT && console.STAT(S, q.length, 'rad acks #', ename(s.file));\n\t\t\t}\n\t\t\tcb || (cb = function(err, ok){ // test delete!\n\t\t\t\tif(!err){ return }\n\t\t\t});\n\t\t\t//console.only.i && console.log('save', key);\n\t\t\tr.find(key, s.find);\n }\n r.disk = {};\n r.one = {};\n r.tags = {};\n\n\t\t/*\n\t\t\tAny storage engine at some point will have to do a read in order to write.\n\t\t\tThis is true of even systems that use an append only log, if they support updates.\n\t\t\tTherefore it is unavoidable that a read will have to happen,\n\t\t\tthe question is just how long you delay it.\n\t\t*/\n\t\tvar RWC = 0;\n\t\tr.write = function(file, rad, cb, o, DBG){\n\t\t\tif(!rad){ cb('No radix!'); return }\n\t\t\to = ('object' == typeof o)? o : {force: o};\n\t\t\tvar f = function Fractal(){}, a, b;\n\t\t\tf.text = '';\n\t\t\tf.file = file = rad.file || (rad.file = file);\n\t\t\tif(!file){ cb('What file?'); return }\n\t\t\tf.write = function(){\n\t\t\t\tvar text = rad.raw = f.text;\n\t\t\t\tr.disk[file = rad.file || f.file || file] = rad;\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.wd = S);\n\t\t\t\t//console.only.i && console.log('add', file);\n\t\t\t\tr.find.add(file, function add(err){\n\t\t\t\t\tDBG && (DBG.wa = +new Date);\n\t\t\t\t\tif(err){ cb(err); return }\n\t\t\t\t\t//console.only.i && console.log('disk', file, text);\n\t\t\t\t\topt.store.put(ename(file), text, function safe(err, ok){\n\t\t\t\t\t\tDBG && (DBG.wp = +new Date);\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, ST = +new Date - S, \"wrote disk\", JSON.stringify(file), ++RWC, 'total all writes.');\n\t\t\t\t\t\t//console.only.i && console.log('done', err, ok || 1, cb);\n\t\t\t\t\t\tcb(err, ok || 1);\n\t\t\t\t\t\tif(!rad.Q){ delete r.disk[file] } // VERY IMPORTANT! Clean up memory, but not if there is already queued writes on it!\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tf.split = function(){\n\t\t\t\tvar S = +new Date;\n\t\t\t\tDBG && (DBG.wf = S);\n\t\t\t\tf.text = '';\n\t\t\t\tif(!f.count){ f.count = 0;\n\t\t\t\t\tRadix.map(rad, function count(){ f.count++ }); // TODO: Perf? Any faster way to get total length?\n\t\t\t\t}\n\t\t\t\tDBG && (DBG.wfc = f.count);\n\t\t\t\tf.limit = Math.ceil(f.count/2);\n\t\t\t\tvar SC = f.count;\n\t\t\t\tf.count = 0;\n\t\t\t\tDBG && (DBG.wf1 = +new Date);\n\t\t\t\tf.sub = Radix();\n\t\t\t\tRadix.map(rad, f.slice, {reverse: 1}); // IMPORTANT: DO THIS IN REVERSE, SO LAST HALF OF DATA MOVED TO NEW FILE BEFORE DROPPING FROM CURRENT FILE.\n\t\t\t\tDBG && (DBG.wf2 = +new Date);\n\t\t\t\tr.write(f.end, f.sub, f.both, o);\n\t\t\t\tDBG && (DBG.wf3 = +new Date);\n\t\t\t\tf.hub = Radix();\n\t\t\t\tRadix.map(rad, f.stop);\n\t\t\t\tDBG && (DBG.wf4 = +new Date);\n\t\t\t\tr.write(rad.file, f.hub, f.both, o);\n\t\t\t\tDBG && (DBG.wf5 = +new Date);\n\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad split\", ename(rad.file), SC);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tf.slice = function(val, key){\n\t\t\t\tf.sub(f.end = key, val);\n\t\t\t\tif(f.limit <= (++f.count)){ return true }\n\t\t\t}\n\t\t\tf.stop = function(val, key){\n\t\t\t\tif(key >= f.end){ return true }\n\t\t\t\tf.hub(key, val);\n\t\t\t}\n\t\t\tf.both = function(err, ok){\n\t\t\t\tDBG && (DBG.wfd = +new Date);\n\t\t\t\tif(b){ cb(err || b); return }\n\t\t\t\tif(a){ cb(err, ok); return }\n\t\t\t\ta = true;\n\t\t\t\tb = err;\n\t\t\t}\n\t\t\tf.each = function(val, key, k, pre){\n\t\t\t\tif(u !== val){ f.count++ }\n\t\t\t\tif(opt.max <= (val||'').length){ return cb(\"Data too big!\"), true }\n\t\t\t\tvar enc = Radisk.encode(pre.length) +'#'+ Radisk.encode(k) + (u === val? '' : ':'+ Radisk.encode(val)) +'\\n';\n\t\t\t\tif((opt.chunk < f.text.length + enc.length) && (1 < f.count) && !o.force){\n\t\t\t\t\treturn f.split();\n\t\t\t\t}\n\t\t\t\tf.text += enc;\n\t\t\t}\n\t\t\t//console.only.i && console.log('writing');\n\t\t\tif(opt.jsonify){ r.write.jsonify(f, rad, cb, o, DBG); return } // temporary testing idea\n\t\t\tif(!Radix.map(rad, f.each, true)){ f.write() }\n\t\t}\n\n\t\tr.write.jsonify = function(f, rad, cb, o, DBG){\n\t\t\tvar raw;\n\t\t\tvar S = +new Date;\n\t\t\tDBG && (DBG.w = S);\n\t\t\ttry{raw = JSON.stringify(rad.$);\n\t\t\t}catch(e){ cb(\"Cannot radisk!\"); return }\n\t\t\tDBG && (DBG.ws = +new Date);\n\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad stringified JSON\");\n\t\t\tif(opt.chunk < raw.length && !o.force){\n\t\t\t\tvar c = 0;\n\t\t\t\tRadix.map(rad, function(){\n\t\t\t\t\tif(c++){ return true } // more than 1 item\n\t\t\t\t});\n\t\t\t\tif(c > 1){\n\t\t\t\t\treturn f.split();\n\t\t\t\t}\n\t\t\t}\n\t\t\tf.text = raw;\n\t\t\tf.write();\n\t\t}\n\n\t\tr.range = function(tree, o){\n\t\t\tif(!tree || !o){ return }\n\t\t\tif(u === o.start && u === o.end){ return tree }\n\t\t\tif(atomic(tree)){ return tree }\n\t\t\tvar sub = Radix();\n\t\t\tRadix.map(tree, function(v,k){ sub(k,v) }, o); // ONLY PLACE THAT TAKES TREE, maybe reduce API for better perf?\n\t\t\treturn sub('');\n\t\t}\n\n\t\t;(function(){\n\t\t\tr.read = function(key, cb, o, DBG){\n\t\t\t\to = o || {};\n\t\t\t\tvar g = {key: key};\n\t\t\t\tg.find = function(file){ var tmp;\n\t\t\t\t\tg.file = file || (file = opt.code.from);\n\t\t\t\t\tDBG && (DBG = DBG[file] = DBG[file] || {});\n\t\t\t\t\tDBG && (DBG.rf = DBG.rf || +new Date);\n\t\t\t\t\tif(tmp = r.disk[g.file = file]){ g.check(u, tmp); return }\n\t\t\t\t\tr.parse(file, g.check, u, DBG);\n\t\t\t\t}\n\t\t\t\tg.get = function(err, disk, info){\n\t\t\t\t\tDBG && (DBG.rgl = +new Date);\n\t\t\t\t\tDBG && (DBG.rg = DBG.rg || +new Date);\n\t\t\t\t\tif(g.err = err || g.err){ cb(err); return }\n\t\t\t\t\tvar file = g.file = (disk||'').file || g.file;\n\t\t\t\t\tif(!disk && file !== opt.code.from){ // corrupt file?\n\t\t\t\t\t\tr.find.bad(file); // remove from dir list\n\t\t\t\t\t\tr.read(key, cb, o); // try again\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdisk = r.disk[file] || (r.disk[file] = disk);\n\t\t\t\t\tif(!disk){ cb(file === opt.code.from? u : \"No file!\"); return }\n\t\t\t\t\tdisk.file || (disk.file = file);\n\t\t\t\t\tvar data = r.range(disk(key), o);\n\t\t\t\t\tDBG && (DBG.rr = +new Date);\n\t\t\t\t\to.unit = disk.unit;\n\t\t\t\t\to.chunks = (o.chunks || 0) + 1;\n\t\t\t\t\to.parsed = (o.parsed || 0) + ((info||'').parsed||(o.chunks*opt.chunk));\n\t\t\t\t\to.more = 1;\n\t\t\t\t\to.next = u;\n\t\t\t\t\tRadix.map(r.list, function next(v,f){\n\t\t\t\t\t\tif(!v || file === f){ return }\n\t\t\t\t\t\to.next = f;\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}, o.reverse? {reverse: 1, end: file} : {start: file});\n\t\t\t\t\tDBG && (DBG.rl = +new Date);\n\t\t\t\t\tif(!o.next){ o.more = 0 }\n\t\t\t\t\tif(o.next){\n\t\t\t\t\t\tif(!o.reverse && ((key < o.next && 0 != o.next.indexOf(key)) || (u !== o.end && (o.end || '\\uffff') < o.next))){ o.more = 0 }\n\t\t\t\t\t\tif(o.reverse && ((key > o.next && 0 != key.indexOf(o.next)) || ((u !== o.start && (o.start || '') > o.next && file <= o.start)))){ o.more = 0 }\n\t\t\t\t\t}\n\t\t\t\t\t//console.log(5, process.memoryUsage().heapUsed);\n\t\t\t\t\tif(!o.more){ cb(g.err, data, o); return }\n\t\t\t\t\tif(data){ cb(g.err, data, o) }\n\t\t\t\t\tif(o.parsed >= o.limit){ return }\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tDBG && (DBG.rm = S);\n\t\t\t\t\tvar next = o.next;\n\t\t\t\t\ttimediate(function(){\n\t\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad more');\n\t\t\t\t\t\tr.parse(next, g.check);\n\t\t\t\t\t},0);\n\t\t\t\t}\n\t\t\t\tg.check = function(err, disk, info){\n\t\t\t\t\t//console.log(4, process.memoryUsage().heapUsed);\n\t\t\t\t\tg.get(err, disk, info);\n\t\t\t\t\tif(!disk || disk.check){ return } disk.check = 1;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\t(info || (info = {})).file || (info.file = g.file);\n\t\t\t\t\tRadix.map(disk, function(val, key){\n\t\t\t\t\t\t// assume in memory for now, since both write/read already call r.find which will init it.\n\t\t\t\t\t\tr.find(key, function(file){\n\t\t\t\t\t\t\tif((file || (file = opt.code.from)) === info.file){ return }\n\t\t\t\t\t\t\tvar id = (''+Math.random()).slice(-3);\n\t\t\t\t\t\t\tpuff(function(){\n\t\t\t\t\t\t\tr.save(key, val, function ack(err, ok){\n\t\t\t\t\t\t\t\tif(err){ r.save(key, val, ack); return } // ad infinitum???\n\t\t\t\t\t\t\t\t// TODO: NOTE!!! Mislocated data could be because of a synchronous `put` from the `g.get(` other than perf shouldn't we do the check first before acking?\n\t\t\t\t\t\t\t\tconsole.STAT && console.STAT(\"MISLOCATED DATA CORRECTED\", id, ename(key), ename(info.file), ename(file));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},0);\n\t\t\t\t\t\t})\n\t\t\t\t\t});\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, \"rad check\");\n\t\t\t\t}\n\t\t\t\tr.find(key || (o.reverse? (o.end||'') : (o.start||'')), g.find); \n\t\t\t}\n\t\t\tfunction rev(a,b){ return b }\n\t\t\tvar revo = {reverse: true};\n\t\t}());\n\n\t\t;(function(){\n\t\t\t/*\n\t\t\t\tLet us start by assuming we are the only process that is\n\t\t\t\tchanging the directory or bucket. Not because we do not want\n\t\t\t\tto be multi-process/machine, but because we want to experiment\n\t\t\t\twith how much performance and scale we can get out of only one.\n\t\t\t\tThen we can work on the harder problem of being multi-process.\n\t\t\t*/\n\t\t\tvar RPC = 0;\n\t\t\tvar Q = {}, s = String.fromCharCode(31);\n\t\t\tr.parse = function(file, cb, raw, DBG){ var q;\n\t\t\t\tif(!file){ return cb(); }\n\t\t\t\tif(q = Q[file]){ q.push(cb); return } q = Q[file] = [cb];\n\t\t\t\tvar p = function Parse(){}, info = {file: file};\n\t\t\t\t(p.disk = Radix()).file = file;\n\t\t\t\tp.read = function(err, data){ var tmp;\n\t\t\t\t\tDBG && (DBG.rpg = +new Date);\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'read disk', JSON.stringify(file), ++RPC, 'total all parses.');\n\t\t\t\t\t//console.log(2, process.memoryUsage().heapUsed);\n\t\t\t\t\tif((p.err = err) || (p.not = !data)){\n\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif('string' !== typeof data){\n\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\tif(opt.max <= data.length){\n\t\t\t\t\t\t\t\tp.err = \"Chunk too big!\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdata = data.toString(); // If it crashes, it crashes here. How!?? We check size first!\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}catch(e){ p.err = e }\n\t\t\t\t\t\tif(p.err){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tinfo.parsed = data.length;\n\t\t\t\t\tDBG && (DBG.rpl = info.parsed);\n\t\t\t\t\tDBG && (DBG.rpa = q.length);\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tif(!(opt.jsonify || '{' === data[0])){\n\t\t\t\t\t\tp.radec(err, data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tparse(data, function(err, tree){\n\t\t\t\t\t\t//console.log(3, process.memoryUsage().heapUsed);\n\t\t\t\t\t\tif(!err){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.disk.$ = tree;\n\t\t\t\t\t\t\tconsole.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'rad parsed JSON');\n\t\t\t\t\t\t\tDBG && (DBG.rpd = +new Date);\n\t\t\t\t\t\t\tp.map(q, p.ack); // hmmm, v8 profiler can't see into this cause of try/catch?\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif('{' === data[0]){\n\t\t\t\t\t\t\tdelete Q[file];\n\t\t\t\t\t\t\tp.err = tmp || \"JSON error!\";\n\t\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.radec(err, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tp.map = function(){ // switch to setTimeout.each now?\n\t\t\t\t\tif(!q || !q.length){ return }\n\t\t\t\t\t//var i = 0, l = q.length, ack;\n\t\t\t\t\tvar S = +new Date;\n\t\t\t\t\tvar err = p.err, data = p.not? u : p.disk;\n\t\t\t\t\tvar i = 0, ack; while(i < 9 && (ack = q[i++])){ ack(err, data, info) } // too much?\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'rad packs', ename(file));\n\t\t\t\t\tconsole.STAT && console.STAT(S, i, 'rad packs #', ename(file)); \n\t\t\t\t\tif(!(q = q.slice(i)).length){ return }\n\t\t\t\t\tpuff(p.map, 0);\n\t\t\t\t}\n\t\t\t\tp.ack = function(cb){\n\t\t\t\t\tif(!cb){ return }\n\t\t\t\t\tif(p.err || p.not){\n\t\t\t\t\t\tcb(p.err, u, info);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcb(u, p.disk, info);\n\t\t\t\t}\n\t\t\t\tp.radec = function(err, data){\n\t\t\t\t\tdelete Q[file];\n\t\t\t\t\tS = +new Date;\n\t\t\t\t\tvar tmp = p.split(data), pre = [], i, k, v;\n\t\t\t\t\tif(!tmp || 0 !== tmp[1]){\n\t\t\t\t\t\tp.err = \"File '\"+file+\"' does not have root radix! \";\n\t\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t\t\treturn; \n\t\t\t\t\t}\n\t\t\t\t\twhile(tmp){\n\t\t\t\t\t\tk = v = u;\n\t\t\t\t\t\ti = tmp[1];\n\t\t\t\t\t\ttmp = p.split(tmp[2])||'';\n\t\t\t\t\t\tif('#' == tmp[0]){\n\t\t\t\t\t\t\tk = tmp[1];\n\t\t\t\t\t\t\tpre = pre.slice(0,i);\n\t\t\t\t\t\t\tif(i <= pre.length){\n\t\t\t\t\t\t\t\tpre.push(k);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmp = p.split(tmp[2])||'';\n\t\t\t\t\t\tif('\\n' == tmp[0]){ continue }\n\t\t\t\t\t\tif('=' == tmp[0] || ':' == tmp[0]){ v = tmp[1] }\n\t\t\t\t\t\tif(u !== k && u !== v){ p.disk(pre.join(''), v) }\n\t\t\t\t\t\ttmp = p.split(tmp[2]);\n\t\t\t\t\t}\n\t\t\t\t\tconsole.STAT && console.STAT(S, +new Date - S, 'parsed RAD');\n\t\t\t\t\tp.map(q, p.ack);\n\t\t\t\t};\n\t\t\t\tp.split = function(t){\n\t\t\t\t\tif(!t){ return }\n\t\t\t\t\tvar l = [], o = {}, i = -1, a = '', b, c;\n\t\t\t\t\ti = t.indexOf(s);\n\t\t\t\t\tif(!t[i]){ return }\n\t\t\t\t\ta = t.slice(0, i);\n\t\t\t\t\tl[0] = a;\n\t\t\t\t\tl[1] = b = Radisk.decode(t.slice(i), o);\n\t\t\t\t\tl[2] = t.slice(i + o.i);\n\t\t\t\t\treturn l;\n\t\t\t\t}\n\t\t\t\tif(r.disk){ raw || (raw = (r.disk[file]||'').raw) }\n\t\t\t\tvar S = +new Date, SM, SL;\n\t\t\t\tDBG && (DBG.rp = S);\n\t\t\t\tif(raw){ return puff(function(){ p.read(u, raw) }, 0) }\n\t\t\t\topt.store.get(ename(file), p.read);\n\t\t\t\t// TODO: What if memory disk gets filled with updates, and we get an old one back?\n\t\t\t}\n\t\t}());\n\n\t\t;(function(){\n\t\t\tvar dir, f = String.fromCharCode(28), Q;\n\t\t\tr.find = function(key, cb){\n\t\t\t\tif(!dir){\n\t\t\t\t\tif(Q){ Q.push([key, cb]); return } Q = [[key, cb]];\n\t\t\t\t\tr.parse(f, init);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tRadix.map(r.list = dir, function(val, key){\n\t\t\t\t\tif(!val){ return }\n\t\t\t\t\treturn cb(key) || true;\n\t\t\t\t}, {reverse: 1, end: key}) || cb(opt.code.from);\n\t\t\t}\n\t\t\tr.find.add = function(file, cb){\n\t\t\t\tvar has = dir(file);\n\t\t\t\tif(has || file === f){ cb(u, 1); return }\n\t\t\t\tdir(file, 1);\n\t\t\t\tcb.found = (cb.found || 0) + 1;\n\t\t\t\tr.write(f, dir, function(err, ok){\n\t\t\t\t\tif(err){ cb(err); return }\n\t\t\t\t\tcb.found = (cb.found || 0) - 1;\n\t\t\t\t\tif(0 !== cb.found){ return }\n\t\t\t\t\tcb(u, 1);\n\t\t\t\t}, true);\n\t\t\t}\n\t\t\tr.find.bad = function(file, cb){\n\t\t\t\tdir(file, 0);\n\t\t\t\tr.write(f, dir, cb||noop);\n\t\t\t}\n\t\t\tfunction init(err, disk){\n\t\t\t\tif(err){\n\t\t\t\t\topt.log('list', err);\n\t\t\t\t\tsetTimeout(function(){ r.parse(f, init) }, 1000);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(disk){ drain(disk); return }\n\t\t\t\tdir = dir || disk || Radix();\n\t\t\t\tif(!opt.store.list){ drain(dir); return }\n\t\t\t\t// import directory.\n\t\t\t\topt.store.list(function(file){\n\t\t\t\t\tif(!file){ drain(dir); return }\n\t\t\t\t\tr.find.add(file, noop);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction drain(rad, tmp){\n\t\t\t\tdir = dir || rad;\n\t\t\t\tdir.file = f;\n\t\t\t\ttmp = Q; Q = null;\n\t\t\t\tmap(tmp, function(arg){\n\t\t\t\t\tr.find(arg[0], arg[1]);\n\t\t\t\t});\n\t\t\t}\n\t\t}());\n\n\t\tvar noop = function(){}, RAD, u;\n\t\tRadisk.has[opt.file] = r;\n\t\treturn r;\n\t}\n\n\t;(function(){\n\t\tvar _ = String.fromCharCode(31), u;\n\t\tRadisk.encode = function(d, o, s){ s = s || _;\n\t\t\tvar t = s, tmp;\n\t\t\tif(typeof d == 'string'){\n\t\t\t\tvar i = d.indexOf(s);\n\t\t\t\twhile(i != -1){ t += s; i = d.indexOf(s, i+1) }\n\t\t\t\treturn t + '\"' + d + s;\n\t\t\t} else\n\t\t\tif(d && d['#'] && 1 == Object.keys(d).length){\n\t\t\t\treturn t + '#' + tmp + t;\n\t\t\t} else\n\t\t\tif('number' == typeof d){\n\t\t\t\treturn t + '+' + (d||0) + t;\n\t\t\t} else\n\t\t\tif(null === d){\n\t\t\t\treturn t + ' ' + t;\n\t\t\t} else\n\t\t\tif(true === d){\n\t\t\t\treturn t + '+' + t;\n\t\t\t} else\n\t\t\tif(false === d){\n\t\t\t\treturn t + '-' + t;\n\t\t\t}// else\n\t\t\t//if(binary){}\n\t\t}\n\t\tRadisk.decode = function(t, o, s){ s = s || _;\n\t\t\tvar d = '', i = -1, n = 0, c, p;\n\t\t\tif(s !== t[0]){ return }\n\t\t\twhile(s === t[++i]){ ++n }\n\t\t\tp = t[c = n] || true;\n\t\t\twhile(--n >= 0){ i = t.indexOf(s, i+1) }\n\t\t\tif(i == -1){ i = t.length }\n\t\t\td = t.slice(c+1, i);\n\t\t\tif(o){ o.i = i+1 }\n\t\t\tif('\"' === p){\n\t\t\t\treturn d;\n\t\t\t} else\n\t\t\tif('#' === p){\n\t\t\t\treturn {'#':d};\n\t\t\t} else\n\t\t\tif('+' === p){\n\t\t\t\tif(0 === d.length){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn parseFloat(d);\n\t\t\t} else\n\t\t\tif(' ' === p){\n\t\t\t\treturn null;\n\t\t\t} else\n\t\t\tif('-' === p){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}());\n\n\tif(typeof window !== \"undefined\"){\n\t var Gun = window.Gun;\n\t var Radix = window.Radix;\n\t window.Radisk = Radisk;\n\t} else { \n\t var Gun = require('../gun');\n\t\tvar Radix = require('./radix');\n\t\t//var Radix = require('./radix2'); Radisk = require('./radisk2');\n\t\ttry{ module.exports = Radisk }catch(e){}\n\t}\n\n\tRadisk.Radix = Radix;\n\n}());","var Gun = (typeof window !== \"undefined\")? window.Gun : require('../gun');\n\nGun.on('create', function(root){\n if(Gun.TESTING){ root.opt.file = 'radatatest' }\n this.to.next(root);\n var opt = root.opt, empty = {}, u;\n if(false === opt.rad || false === opt.radisk){ return }\n if((u+'' != typeof process) && 'false' === ''+(process.env||'').RAD){ return }\n var Radisk = (Gun.window && Gun.window.Radisk) || require('./radisk');\n var Radix = Radisk.Radix;\n var dare = Radisk(opt), esc = String.fromCharCode(27);\n var ST = 0;\n \n root.on('put', function(msg){\n this.to.next(msg);\n if((msg._||'').rad){ return } // don't save what just came from a read.\n //if(msg['@']){ return } // WHY DID I NOT ADD THIS?\n var id = msg['#'], put = msg.put, soul = put['#'], key = put['.'], val = put[':'], state = put['>'], tmp;\n var DBG = (msg._||'').DBG; DBG && (DBG.sp = DBG.sp || +new Date);\n //var lot = (msg._||'').lot||''; count[id] = (count[id] || 0) + 1; \n var S = (msg._||'').RPS || ((msg._||'').RPS = +new Date);\n //console.log(\"PUT ------->>>\", soul,key, val, state);\n //dare(soul+esc+key, {':': val, '>': state}, dare.one[id] || function(err, ok){\n dare(soul+esc+key, {':': val, '>': state}, function(err, ok){\n //console.log(\"<<<------- PAT\", soul,key, val, state, 'in', +new Date - S);\n DBG && (DBG.spd = DBG.spd || +new Date);\n console.STAT && console.STAT(S, +new Date - S, 'put');\n //if(!err && count[id] !== lot.s){ console.log(err = \"Disk count not same as ram count.\"); console.STAT && console.STAT(+new Date, lot.s - count[id], 'put ack != count') } delete count[id];\n if(err){ root.on('in', {'@': id, err: err, DBG: DBG}); return }\n root.on('in', {'@': id, ok: ok, DBG: DBG});\n //}, id, DBG && (DBG.r = DBG.r || {}));\n }, false && id, DBG && (DBG.r = DBG.r || {}));\n DBG && (DBG.sps = DBG.sps || +new Date);\n });\n var count = {}, obj_empty = Object.empty;\n \n root.on('get', function(msg){\n this.to.next(msg);\n var ctx = msg._||'', DBG = ctx.DBG = msg.DBG; DBG && (DBG.sg = +new Date);\n var id = msg['#'], get = msg.get, soul = msg.get['#'], has = msg.get['.']||'', o = {}, graph, lex, key, tmp, force;\n if('string' == typeof soul){\n key = soul;\n } else \n if(soul){\n if(u !== (tmp = soul['*'])){ o.limit = force = 1 }\n if(u !== soul['>']){ o.start = soul['>'] }\n if(u !== soul['<']){ o.end = soul['<'] }\n key = force? (''+tmp) : tmp || soul['='];\n force = null;\n }\n if(key && !o.limit){ // a soul.has must be on a soul, and not during soul*\n if('string' == typeof has){\n key = key+esc+(o.atom = has);\n } else \n if(has){\n if(u !== has['>']){ o.start = has['>']; o.limit = 1 }\n if(u !== has['<']){ o.end = has['<']; o.limit = 1 }\n if(u !== (tmp = has['*'])){ o.limit = force = 1 }\n if(key){ key = key+esc + (force? (''+(tmp||'')) : tmp || (o.atom = has['='] || '')) }\n }\n }\n if((tmp = get['%']) || o.limit){\n o.limit = (tmp <= (o.pack || (1000 * 100)))? tmp : 1;\n }\n if(has['-'] || (soul||{})['-'] || get['-']){ o.reverse = true }\n if((tmp = (root.next||'')[soul]) && tmp.put){\n if(o.atom){\n tmp = (tmp.next||'')[o.atom] ;\n if(tmp && tmp.rad){ return }\n } else\n if(tmp && tmp.rad){ return }\n }\n var now = Gun.state();\n var S = (+new Date), C = 0, SPT = 0; // STATS!\n DBG && (DBG.sgm = S);\n //var GID = String.random(3); console.log(\"GET ------->>>\", GID, key, o, '?', get);\n dare(key||'', function(err, data, info){\n //console.log(\"<<<------- GOT\", GID, +new Date - S, err, data);\n DBG && (DBG.sgr = +new Date);\n DBG && (DBG.sgi = info);\n try{opt.store.stats.get.time[statg % 50] = (+new Date) - S; ++statg;\n opt.store.stats.get.count++;\n if(err){ opt.store.stats.get.err = err }\n }catch(e){} // STATS!\n //if(u === data && info.chunks > 1){ return } // if we already sent a chunk, ignore ending empty responses. // this causes tests to fail.\n console.STAT && console.STAT(S, +new Date - S, 'got', JSON.stringify(key)); S = +new Date;\n info = info || '';\n var va, ve;\n if(info.unit && data && u !== (va = data[':']) && u !== (ve = data['>'])){ // new format\n var tmp = key.split(esc), so = tmp[0], ha = tmp[1];\n (graph = graph || {})[so] = Gun.state.ify(graph[so], ha, ve, va, so);\n root.$.get(so).get(ha)._.rad = now;\n // REMEMBER TO ADD _rad TO NODE/SOUL QUERY!\n } else\n if(data){ // old code path\n if(typeof data !== 'string'){\n if(o.atom){\n data = u;\n } else {\n Radix.map(data, each, o); // IS A RADIX TREE, NOT FUNCTION!\n }\n }\n if(!graph && data){ each(data, '') }\n // TODO: !has what about soul lookups?\n if(!o.atom && !has & 'string' == typeof soul && !o.limit && !o.more){\n root.$.get(soul)._.rad = now;\n }\n }\n DBG && (DBG.sgp = +new Date);\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // TODO: PERF NOTES! This is like 0.2s, but for each ack, or all? Can you cache these preps?\n // Or benchmark by reusing first start date.\n if(console.STAT && (ST = +new Date - S) > 9){ console.STAT(S, ST, 'got prep time'); console.STAT(S, C, 'got prep #') } SPT += ST; C = 0; S = +new Date;\n var faith = function(){}; faith.faith = true; faith.rad = get; // HNPERF: We're testing performance improvement by skipping going through security again, but this should be audited.\n root.on('in', {'@': id, put: graph, '%': info.more? 1 : u, err: err? err : u, _: faith, DBG: DBG});\n console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'got emit', Object.keys(graph||{}).length);\n graph = u; // each is outside our scope, we have to reset graph to nothing!\n }, o, DBG && (DBG.r = DBG.r || {}));\n DBG && (DBG.sgd = +new Date);\n console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'get call'); // TODO: Perf: this was half a second??????\n function each(val, has, a,b){ // TODO: THIS CODE NEEDS TO BE FASTER!!!!\n C++;\n if(!val){ return }\n has = (key+has).split(esc);\n var soul = has.slice(0,1)[0];\n has = has.slice(-1)[0];\n if(o.limit && o.limit <= o.count){ return true }\n var va, ve, so = soul, ha = has;\n //if(u !== (va = val[':']) && u !== (ve = val['>'])){ // THIS HANDLES NEW CODE!\n if('string' != typeof val){ // THIS HANDLES NEW CODE!\n va = val[':']; ve = val['>'];\n (graph = graph || {})[so] = Gun.state.ify(graph[so], ha, ve, va, so);\n //root.$.get(so).get(ha)._.rad = now;\n o.count = (o.count || 0) + ((va||'').length || 9);\n return;\n }\n o.count = (o.count || 0) + val.length;\n var tmp = val.lastIndexOf('>');\n var state = Radisk.decode(val.slice(tmp+1), null, esc);\n val = Radisk.decode(val.slice(0,tmp), null, esc);\n (graph = graph || {})[soul] = Gun.state.ify(graph[soul], has, state, val, soul);\n }\n });\n var val_is = Gun.valid;\n (opt.store||{}).stats = {get:{time:{}, count:0}, put: {time:{}, count:0}}; // STATS!\n var statg = 0, statp = 0; // STATS!\n});",";(function(){\n/* // from @jabis\nif (navigator.storage && navigator.storage.estimate) {\n const quota = await navigator.storage.estimate();\n // quota.usage -> Number of bytes used.\n // quota.quota -> Maximum number of bytes available.\n const percentageUsed = (quota.usage / quota.quota) * 100;\n console.log(`You've used ${percentageUsed}% of the available storage.`);\n const remaining = quota.quota - quota.usage;\n console.log(`You can write up to ${remaining} more bytes.`);\n}\n*/\n function Store(opt){\n opt = opt || {};\n opt.file = String(opt.file || 'radata');\n var store = Store[opt.file], db = null, u;\n\n if(store){\n console.log(\"Warning: reusing same IndexedDB store and options as 1st.\");\n return Store[opt.file];\n }\n store = Store[opt.file] = function(){};\n\n try{opt.indexedDB = opt.indexedDB || Store.indexedDB || indexedDB}catch(e){}\n try{if(!opt.indexedDB || 'file:' == location.protocol){\n var s = store.d || (store.d = {});\n store.put = function(f, d, cb){ s[f] = d; setTimeout(function(){ cb(null, 1) },250) };\n store.get = function(f, cb){ setTimeout(function(){ cb(null, s[f] || u) },5) };\n console.log('Warning: No indexedDB exists to persist data to!');\n return store;\n }}catch(e){}\n \n\n store.start = function(){\n var o = indexedDB.open(opt.file, 1);\n o.onupgradeneeded = function(eve){ (eve.target.result).createObjectStore(opt.file) }\n o.onsuccess = function(){ db = o.result }\n o.onerror = function(eve){ console.log(eve||1); }\n }; store.start();\n\n store.put = function(key, data, cb){\n if(!db){ setTimeout(function(){ store.put(key, data, cb) },1); return }\n var tx = db.transaction([opt.file], 'readwrite');\n var obj = tx.objectStore(opt.file);\n var req = obj.put(data, ''+key);\n req.onsuccess = obj.onsuccess = tx.onsuccess = function(){ cb(null, 1) }\n req.onabort = obj.onabort = tx.onabort = function(eve){ cb(eve||'put.tx.abort') }\n req.onerror = obj.onerror = tx.onerror = function(eve){ cb(eve||'put.tx.error') }\n }\n\n store.get = function(key, cb){\n if(!db){ setTimeout(function(){ store.get(key, cb) },9); return }\n var tx = db.transaction([opt.file], 'readonly');\n var obj = tx.objectStore(opt.file);\n var req = obj.get(''+key);\n req.onsuccess = function(){ cb(null, req.result) }\n req.onabort = function(eve){ cb(eve||4) }\n req.onerror = function(eve){ cb(eve||5) }\n }\n setInterval(function(){ db && db.close(); db = null; store.start() }, 1000 * 15); // reset webkit bug?\n return store;\n }\n\n if(typeof window !== \"undefined\"){\n (Store.window = window).RindexedDB = Store;\n Store.indexedDB = window.indexedDB; // safari bug\n } else {\n try{ module.exports = Store }catch(e){}\n }\n\n try{\n var Gun = Store.window.Gun || require('../gun');\n Gun.on('create', function(root){\n this.to.next(root);\n root.opt.store = root.opt.store || Store(root.opt);\n });\n }catch(e){}\n\n}());","import Session from './session';\nimport _ from './lodash';\nimport Gun from 'gun';\nimport util from './util';\nimport publicState from './global';\n\nconst ELECTRON_GUN_URL = 'http://localhost:8767/gun';\nlet maxConnectedPeers = 1;\n\ntype Peer = {\n url?: string;\n enabled?: boolean;\n from?: string;\n visibility?: string;\n}\n\ntype Peers = {\n [key: string]: Peer\n}\n\nconst DEFAULT_PEERS: Peers = {\n 'https://gun-rs.iris.to/gun': {},\n 'https://gun-us.herokuapp.com/gun': {},\n};\n\nconst loc = window.location;\nconst host = loc.host;\nconst is_localhost_but_not_dev = host.startsWith('localhost') && host !== 'localhost:8080';\nif (loc.hostname.endsWith('herokuapp.com') || is_localhost_but_not_dev) {\n Object.keys(DEFAULT_PEERS).forEach(url => DEFAULT_PEERS[url].enabled = false);\n DEFAULT_PEERS[`${loc.origin}/gun`] = {enabled: true};\n}\n\nconst urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([\\/\\w .-]*)*\\/?$/;\n\n/**\n * Networking and peer management utilities\n */\nexport default {\n known: {} as Peers,\n\n /** */\n async add(peer: Peer) {\n if (peer.url && !urlRegex.test(peer.url)) {\n throw new Error(`Invalid url ${peer.url}`);\n }\n\n if (peer.from) {\n Object.keys(this.known).forEach(k => {\n if (this.known[k].from === peer.from) { // remove previous peer url from the same user\n delete this.known[k];\n }\n });\n }\n const url = peer.url || '';\n this.known[url] = this.known[url] || _.omit(peer, ['url']);\n if (peer.visibility === 'public') {\n // rolling some crypto operations to obfuscate actual url in case we want to remove it\n let secret = await Gun.SEA.secret(Session.getKey().epub, Session.getKey()) || '';\n let encryptedUrl = await Gun.SEA.encrypt(peer.url, secret);\n let encryptedUrlHash = await Gun.SEA.work(encryptedUrl, null, null, {name: 'SHA-256'});\n publicState().user().get('peers').get(encryptedUrlHash).put({url: peer.url, lastSeen: new Date().toISOString()});\n }\n if (peer.enabled !== false) {\n peer.url && this.connect(peer.url); // this calls savePeers()\n } else {\n this.save();\n }\n },\n\n /** */\n remove(url: string) {\n delete this.known[url];\n this.save();\n },\n\n /** */\n disconnect(peerFromGun: any) {\n publicState().on('bye', peerFromGun);\n peerFromGun.url = '';\n },\n\n save() {\n localStorage.setItem('gunPeers', JSON.stringify(this.known));\n },\n\n getSaved() {\n let p: any = localStorage.getItem('gunPeers');\n if (p && p !== 'undefined') {\n p = JSON.parse(p);\n } else {\n p = DEFAULT_PEERS;\n }\n if (util.isElectron) {\n p[ELECTRON_GUN_URL] = {};\n }\n Object.keys(p).forEach(k => _.defaults(p[k], {enabled: true}));\n return p;\n },\n\n /** */\n reset() {\n localStorage.setItem('gunPeers', '');\n this.known = this.getSaved();\n },\n\n /** */\n connect(url: string) {\n if (this.isMixedContent(url)) { return; }\n if (this.known[url]) {\n this.known[url].enabled = true;\n publicState().opt({peers: [url]});\n this.save();\n } else {\n this.add({url});\n }\n },\n\n /** */\n disable(url: string, peerFromGun: any) {\n this.known[url].enabled = false;\n if (peerFromGun) {\n this.disconnect(peerFromGun);\n }\n this.save();\n },\n\n isMixedContent(url: string) {\n return window.location.protocol === 'https:' && (url.indexOf('http:') === 0);\n },\n\n random() {\n const connectToLocalElectron = util.isElectron && this.known[ELECTRON_GUN_URL] && this.known[ELECTRON_GUN_URL].enabled !== false;\n const sampleSize = connectToLocalElectron ? Math.max(maxConnectedPeers - 1, 1) : maxConnectedPeers;\n const sample = _.sampleSize(\n Object.keys(\n _.pickBy(this.known, (peer: any, url: string) => {\n return !this.isMixedContent(url) && peer.enabled && !(util.isElectron && url === ELECTRON_GUN_URL);\n })\n ), sampleSize\n );\n if (sample && connectToLocalElectron) {\n sample.push(ELECTRON_GUN_URL);\n }\n return sample;\n },\n\n checkGunPeerCount() {\n let peersFromGun = publicState().back('opt.peers');\n let connectedPeers = Object.values(peersFromGun).filter((peer: any) => {\n if (peer && peer.wire && peer.wire.constructor.name !== 'WebSocket') {\n console.log('WebRTC peer', peer);\n }\n return peer && peer.wire && peer.wire.readyState === 1 && peer.wire.bufferedAmount === 0 && peer.wire.constructor.name === 'WebSocket';\n });\n if (connectedPeers.length < maxConnectedPeers) {\n let unconnectedPeers = Object.keys(this.known).filter(url => {\n let addedToGun = Object.values(peersFromGun).map((peer:any) => peer.url).indexOf(url) > -1;\n let enabled = this.known[url].enabled;\n const mixedContent = (window.location.protocol === 'https:' && (url.indexOf('http:') === 0));\n return !mixedContent && enabled && !addedToGun;\n });\n if (unconnectedPeers.length) {\n const sample = String(_.sample(unconnectedPeers));\n this.connect(sample);\n }\n }\n if (connectedPeers.length > maxConnectedPeers) {\n this.disconnect(_.sample(connectedPeers));\n }\n },\n\n init() {\n this.known = this.getSaved();\n /* use the default value of 1 for now because of memory issue\n local().get('settings').get('maxConnectedPeers').on(n => {\n if (n !== undefined) maxConnectedPeers = n;\n });\n */\n setInterval(() => this.checkGunPeerCount(), 1000);\n }\n};\n","import Gun from 'gun';\nimport 'gun/sea';\nimport 'gun/lib/yson';\nimport 'gun/lib/radix';\nimport 'gun/lib/radisk';\nimport 'gun/lib/store';\nimport 'gun/lib/rindexed';\nimport peers from \"./peers\";\n\nlet global: any;\n\nexport default function(opts: any = {}) {\n if (!global) {\n const myOpts = Object.assign({ peers: (opts.peers || peers.random()), localStorage: false, retry:Infinity }, opts);\n if (opts.peers) {\n opts.peers.forEach((url: string) => peers.add({url}));\n }\n peers.init();\n global = new Gun(myOpts);\n }\n return global;\n}","// @ts-nocheck\n\n/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nconst UNIQUE_ID_VALIDATORS = {\n email: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n bitcoin: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n bitcoin_address: /^[13][a-km-zA-HJ-NP-Z0-9]{26,33}$/,\n ip: /^(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$/,\n ipv6: /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/,\n gpg_fingerprint: null,\n gpg_keyid: null,\n google_oauth2: null,\n tel: /^\\d{7,}$/,\n phone: /^\\d{7,}$/,\n keyID: null,\n url: /[-a-zA-Z0-9@:%_\\+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_\\+.~#?&//=]*)?/gi,\n account: /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i,\n uuid: /[0-9a-f]{8}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{4}\\-[0-9a-f]{12}/\n};\n\n// TODO this class could perhaps be removed\n\nclass Attribute {\n constructor(a, b) {\n if (typeof a === `object`) {\n if (typeof a.value !== `string`) { throw new Error(`param1.value must be a string, got ${typeof a.value}: ${JSON.stringify(a.value)}`); }\n if (typeof a.type !== `string`) { throw new Error(`param1.type must be a string, got ${typeof a.type}: ${JSON.stringify(a.type)}`); }\n b = a.value;\n a = a.type;\n }\n if (typeof a !== `string`) { throw new Error(`First param must be a string, got ${typeof a}: ${JSON.stringify(a)}`); }\n if (!a.length) { throw new Error(`First param string is empty`); }\n if (b) {\n if (typeof b !== `string`) { throw new Error(`Second parameter must be a string, got ${typeof b}: ${JSON.stringify(b)}`); }\n if (!b.length) { throw new Error(`Second param string is empty`); }\n this.type = a;\n this.value = b;\n } else {\n this.value = a;\n const t = Attribute.guessTypeOf(this.value);\n if (t) {\n this.type = t;\n } else {\n throw new Error(`Type of attribute was omitted and could not be guessed`);\n }\n }\n }\n\n static getUuid() {\n const b = a => a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, b);\n return new Attribute(`uuid`, b());\n }\n\n static getUniqueIdValidators() {\n return UNIQUE_ID_VALIDATORS;\n }\n\n static isUniqueType(type) {\n return Object.keys(UNIQUE_ID_VALIDATORS).indexOf(type) > -1;\n }\n\n isUniqueType() {\n return Attribute.isUniqueType(this.type);\n }\n\n static guessTypeOf(value) {\n for (const key in UNIQUE_ID_VALIDATORS) {\n if (value.match(UNIQUE_ID_VALIDATORS[key])) {\n return key;\n }\n }\n }\n\n static equals(a, b) {\n return a.equals(b);\n }\n\n equals(a) {\n return a && this.type === a.type && this.value === a.value;\n }\n\n uri() {\n return `${encodeURIComponent(this.value)}:${encodeURIComponent(this.type)}`;\n }\n}\n\nexport default Attribute;\n","import publicState from './global';\nimport session from './session';\n\nlet currentUser: any;\n\n/**\n * Get a public space where only the specified user (public key) can write. Others can read.\n * @param pub The public key of the user. Defaults to the current user from session.\n * @returns {Node} The user space.\n */\nexport default function(pub?: string) {\n if (!currentUser) {\n currentUser = publicState().user();\n currentUser.auth(session.getKey());\n }\n return pub ? publicState().user(pub) : currentUser;\n}\n","// @ts-nocheck\n\nimport Gun from 'gun';\nimport 'gun/sea';\nimport util from './util';\nimport Attribute from './Attribute';\nimport session from './session';\nimport publicState from './global';\nimport userState from './public';\n\n// TODO: extract Group channels into their own class\n\nconst DEFAULT_PERMISSIONS = {read: true, write: true, admin: false};\n\n/**\n* Private communication channel between two or more participants ([Gun](https://github.com/amark/gun) public keys). Can be used independently of other Iris stuff.\n*\n* Used as a core element of [iris-messenger](https://github.com/irislib/iris-messenger).\n*\n* You can use iris.private(pub) to always use the same Channel object for a given pub.\n*\n* ---\n*\n* #### Key-value API\n* `channel.put(key, value)` and `channel.on(key, callback)`.\n*\n* Note that each participant has their own versions of each key-value — they don't overwrite each other. `channel.on()` callback returns them all by default and has a parameter that indicates whose value you got.\n*\n* While values are encrypted, encryption of keys is not implemented yet.\n*\n* #### Message API\n* `channel.send()` and `channel.getMessages()` for timestamp-indexed chat-style messaging.\n*\n* Message data is encrypted, but timestamps are public so that peers can return your messages in a sequential order.\n*\n* ---\n*\n* You can open a channel with yourself for a private key-value space or a \"note to self\" type chat with yourself.\n*\n* **Privacy disclaimer:** Channel ids, data values and messages are encrypted, but message timestamps are unencrypted so that peers can return them to you in a sequential order. By looking at the unencrypted timestamps (or Gun subscriptions), it is possible to guess who are communicating with each other. This could be improved by indexing messages by *day* only, so making the guess would be more difficult, while you could still return them in a semi-sequential order.\n*\n* @param {Object} options\n* @param {string} options.key your keypair\n* @param {Object} options.gun [gun](https://github.com/amark/gun) instance\n* @param options.participants (optional) string or string array or permissions object ({'pub1':{read:true,write:true,admin:false},'pub2'...}) of participant public keys (your own key is included by default)\n* @param {string} options.chatLink (optional) chat link instead of participants list\n* @param {string} options.uuid (group channels only) unique channel identifier. Leave out for new channel.\n* @param {string} options.name (group channels only) channel name\n* @example\n* // Copy & paste this to console at https://iris.to or other page that has gun, sea and iris-lib\n* // Due to an unsolved bug, someoneElse's messages only start showing up after a reload\n*\n* var gun1 = new Gun('https://gun-us.herokuapp.com/gun');\n* var gun2 = new Gun('https://gun-us.herokuapp.com/gun');\n* var myKey = await iris.Key.getDefault();\n* var someoneElse = localStorage.getItem('someoneElsesKey');\n* if (someoneElse) {\n* someoneElse = JSON.parse(someoneElse);\n* } else {\n* someoneElse = await iris.Key.generate();\n* localStorage.setItem('someoneElsesKey', JSON.stringify(someoneElse));\n* }\n*\n* iris.Channel.initUser(gun1, myKey); // saves myKey.epub to gun.user().get('epub')\n* iris.Channel.initUser(gun2, someoneElse);\n*\n* var ourChannel = new iris.Channel({key: myKey, gun: gun1, participants: someoneElse.pub});\n* var theirChannel = new iris.Channel({key: someoneElse, gun: gun2, participants: myKey.pub});\n*\n* var myChannels = {}; // you can list them in a user interface\n* function printMessage(msg, info) {\n* console.log(`[${new Date(msg.time).toLocaleString()}] ${info.from.slice(0,8)}: ${msg.text}`)\n* }\n* iris.Channel.getChannels(gun1, myKey, channel => {\n* var pub = channel.getCurrentParticipants()[0];\n* gun1.user(pub).get('profile').get('name').on(name => channel.name = name);\n* myChannels[pub] = channel;\n* channel.getMessages(printMessage);\n* channel.on('mood', (mood, from) => console.log(from.slice(0,8) + ' is feeling ' + mood));\n* });\n*\n* // you can play with these in the console:\n* ourChannel.send('message from myKey');\n* theirChannel.send('message from someoneElse');\n*\n* ourChannel.put('mood', 'blessed');\n* theirChannel.put('mood', 'happy');\n*\n* @example https://github.com/irislib/iris-lib/blob/master/__tests__/Channel.js\n*/\nclass Channel {\n // TODO: these should be done in a cleaner way\n latestTime: any;\n theirMsgsLastSeenDate: any;\n myLastSeenTime: any;\n theirMsgsLastSeenTime: any;\n notificationSetting: any;\n messageIds: any; // this is used from session.processMessage\n latest: any;\n uuid: any;\n name: any;\n attachments: any;\n\n theirSecretUuids = {};\n theirGroupSecrets = {};\n secrets = {};\n ourSecretChannelIds = {};\n theirSecretChannelIds = {};\n messages = {};\n chatLinks = {};\n groupSubscriptions = {};\n directSubscriptions = {};\n getParticipantsCallbacks = {};\n myGroupSecret: any;\n participants: any;\n\n constructor(options: any) {\n this.myGroupSecret = options.myGroupSecret;\n\n if (options.chatLink) {\n this.useChatLink(options);\n }\n\n if (typeof options.participants === `string`) {\n this.addParticipant(options.participants, options.save);\n } else if (Array.isArray(options.participants)) {\n const o = {};\n options.participants.forEach(p => o[p] = Object.assign({}, DEFAULT_PERMISSIONS));\n options.participants = o;\n }\n if (typeof options.participants === `object`) { // it's a group channel\n const keys = Object.keys(options.participants);\n keys.forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, options.save, Object.assign({}, DEFAULT_PERMISSIONS, options.participants[k]));\n }\n });\n options.participants[session.getKey().pub] = options.participants[session.getKey().pub] || Object.assign({}, DEFAULT_PERMISSIONS);\n if (options.uuid) {\n this.uuid = options.uuid;\n this.name = options.name;\n } else {\n options.uuid = Attribute.getUuid().value;\n this.uuid = options.uuid;\n options.participants[session.getKey().pub].admin = true;\n options.participants[session.getKey().pub].founder = true;\n }\n this.getChatLinks({subscribe: true});\n }\n this.participants = options.participants;\n if (options.uuid) { // It's a group channel\n // share secret uuid with other participants. since secret is already non-deterministic, maybe uuid could also be?\n // generate channel-specific secret and share it with other participants\n // put() keys should be encrypted first? so you could do put(uuid, secret)\n // what if you join the channel with 2 unconnected devices? on reconnect, the older secret would be overwritten and messages unreadable. maybe participants should store each others' old keys? or maybe you should store them and re-encrypt old stuff when key changes? return them with map() instead?\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n // need to make put(), on(), send() and getMessages() behave differently when it's a group and retain the old versions for mutual signaling\n }\n this.onTheir(`participants`, (participants, k, from) => {\n let hasAdmin = false;\n const keys = Object.keys(this.participants);\n for (let i = 0; i < keys.length; i++) {\n if (this.participants[keys[i]].admin || this.participants[keys[i]].inviter) {\n hasAdmin = true;\n break;\n }\n }\n if (!hasAdmin) {\n keys.forEach(k => this.participants[k].admin = true); // if no admins, make everyone admin\n }\n if (this.participants[from] && (this.participants[from].admin || this.participants[from].inviter)) {\n if (typeof participants === `object`) {\n if (JSON.stringify(this.participants) === JSON.stringify(participants)) { return; }\n this.participants = participants;\n delete this.participants[from].inviter;\n Object.keys(participants).forEach(k => {\n if (k !== session.getKey().pub) {\n this.addParticipant(k, true, Object.assign({}, DEFAULT_PERMISSIONS, participants[k]), true);\n }\n });\n this.participantsChanged();\n options.saved = true;\n }\n }\n });\n if (!options.saved && (options.save === undefined || options.save === true)) {\n this.save();\n }\n }\n\n useChatLink(options) {\n const s = options.chatLink.split('?');\n if (s.length === 2) {\n const chatWith = util.getUrlParameter('chatWith', s[1]);\n const channelId = util.getUrlParameter('channelId', s[1]);\n const inviter = util.getUrlParameter('inviter', s[1]);\n const pub = inviter || chatWith;\n if (chatWith) {\n options.participants = pub;\n } else if (channelId && inviter && inviter !== session.getKey().pub) { // TODO! initializing it twice breaks things - new secret is generated\n options.uuid = channelId;\n options.participants = {};\n options.participants[inviter] = Object.assign({inviter: true}, DEFAULT_PERMISSIONS);\n }\n if (pub !== session.getKey().pub) {\n const sharedSecret = util.getUrlParameter('s', s[1]);\n const linkId = util.getUrlParameter('k', s[1]);\n if (sharedSecret && linkId) {\n this.save(); // save the channel first so it's there before inviter subscribes to it\n options.saved = true;\n publicState().user(pub).get('chatLinks').get(linkId).get('encryptedSharedKey').on(async encrypted => {\n const sharedKey = await Gun.SEA.decrypt(encrypted, sharedSecret);\n const encryptedChatRequest = await Gun.SEA.encrypt(session.getKey().pub, sharedSecret); // TODO encrypt is not deterministic, it uses salt\n const channelRequestId = await util.getHash(encryptedChatRequest);\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').get(channelRequestId.slice(0, 12)).put(encryptedChatRequest);\n });\n });\n }\n }\n }\n }\n\n getTheirSecretUuid(pub) {\n return new Promise(resolve => {\n if (!this.theirSecretUuids[pub]) {\n this.onTheirDirect(this.uuid, s => {\n this.theirSecretUuids[pub] = s;\n resolve(this.theirSecretUuids[pub]);\n }, pub);\n } else {\n resolve(this.theirSecretUuids[pub]);\n }\n });\n }\n\n getTheirGroupSecret(pub) {\n if (pub === session.getKey().pub) { return this.getMyGroupSecret(); }\n return new Promise(resolve => {\n if (!this.theirGroupSecrets[pub]) {\n this.onTheirDirect(`S${this.uuid}`, s => {\n this.theirGroupSecrets[pub] = s;\n resolve(this.theirGroupSecrets[pub]);\n }, pub);\n } else {\n resolve(this.theirGroupSecrets[pub]);\n }\n });\n }\n\n changeMyGroupSecret() {\n this.myGroupSecret = Gun.SEA.random(32).toString('base64');\n // TODO: secret should be archived and probably messages should include the encryption key id so past messages don't become unreadable\n this.putDirect(`S${this.uuid}`, this.myGroupSecret);\n }\n\n /**\n * Unsubscribe messages from a channel participants\n *\n * @param {string} participant public key\n */\n async mute(participant) {\n publicState().user(participant).get(this.theirSecretUuids[participant]).off();\n // TODO: persist\n }\n\n /**\n * Mute user and prevent them from seeing your further (and maybe past) messages\n *\n * @param {string} participant public key\n */\n async block(participant) {\n this.mute(participant);\n this.putDirect(this.uuid, null);\n this.putDirect(`S${this.uuid}`, null);\n delete this.secrets[participant];\n delete this.ourSecretChannelIds[participant];\n delete this.theirSecretChannelIds[participant];\n this.changeMyGroupSecret();\n }\n\n async getMySecretUuid() {\n if (!this.mySecretUuid) {\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const mySecretHash = await util.getHash(mySecret);\n this.mySecretUuid = await util.getHash(mySecretHash + this.uuid);\n }\n return this.mySecretUuid;\n }\n\n /**\n * List participants of the channel (other than you)\n */\n getCurrentParticipants() {\n return Object.keys(this.secrets);\n }\n\n /**\n * Subscribe to the changing list of participants by channel admins\n */\n getParticipants(callback) {\n if (this.getParticipantsCallbackId) {\n this.getParticipantsCallbackId++;\n } else {\n this.getParticipantsCallbackId = 1;\n }\n this.getParticipantsCallbacks[this.getParticipantsCallbackId] = callback;\n if (this.participants) {\n callback(this.participants);\n }\n }\n\n participantsChanged() {\n Object.keys(this.getParticipantsCallbacks).forEach(id => {\n this.getParticipantsCallbacks[id](this.participants);\n });\n }\n\n /**\n * Returns either the uuid of a group channel or the public key of a direct channel.\n */\n getId() {\n return this.uuid || this.getCurrentParticipants()[0];\n }\n\n async getSecret(pub) {\n if (!this.secrets[pub]) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n this.secrets[pub] = await Gun.SEA.secret(epub, session.getKey());\n }\n return this.secrets[pub];\n }\n\n /**\n *\n */\n static async getOurSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pub);\n }\n\n /**\n *\n */\n static async getTheirSecretChannelId(pub, pair) {\n const epub = await util.gunOnceDefined(publicState().user(pub).get(`epub`));\n const secret = await Gun.SEA.secret(epub, pair);\n return util.getHash(secret + pair.pub);\n }\n\n /**\n * Calls back with Channels that you have initiated or written to.\n * @param {Object} keypair Gun.SEA keypair that the gun instance is authenticated with\n * @param callback callback function that is called for each public key you have a channel with\n */\n static async getChannels(callback, listenToChatLinks = true) {\n const keypair = session.getKey();\n const mySecret = await Gun.SEA.secret(keypair.epub, keypair);\n if (listenToChatLinks) {\n Channel.getMyChatLinks( undefined, undefined, true);\n }\n const seen = {};\n\n const handleChannel = async (value, ourSecretChannelId) => {\n if (value && !seen[ourSecretChannelId]) {\n seen[ourSecretChannelId] = true;\n if (ourSecretChannelId.length > 44) {\n publicState().user().get(`chats`).get(ourSecretChannelId).put(null);\n return;\n }\n const encryptedChatId = await util.gunOnceDefined(publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`));\n const chatId = await Gun.SEA.decrypt(encryptedChatId, mySecret);\n if (!chatId) {\n return;\n }\n if (chatId.pub || typeof chatId === `string`) {\n callback(new Channel({\n key: keypair,\n participants: chatId.pub || chatId,\n save: false\n }));\n } else if (chatId.uuid && chatId.participants && chatId.myGroupSecret) {\n callback(new Channel({\n key: keypair,\n participants: chatId.participants,\n uuid: chatId.uuid,\n myGroupSecret: chatId.myGroupSecret,\n save: false\n }));\n }\n }\n };\n\n publicState().user().get(`chats`).map().on(handleChannel);\n }\n\n getMyGroupSecret() { // group secret could be deterministic: hash(encryptToSelf(uuid + iterator))\n if (!this.myGroupSecret) {\n this.changeMyGroupSecret();\n }\n return this.myGroupSecret;\n }\n\n async getOurSecretChannelId(pub) {\n if (!this.ourSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.ourSecretChannelIds[pub] = await util.getHash(secret + pub);\n }\n return this.ourSecretChannelIds[pub];\n }\n\n async getTheirSecretChannelId(pub) {\n if (!this.theirSecretChannelIds[pub]) {\n const secret = await this.getSecret(pub);\n this.theirSecretChannelIds[pub] = await util.getHash(secret + session.getKey().pub);\n }\n return this.theirSecretChannelIds[pub];\n }\n\n /**\n * Get messages from the channel\n */\n async getMessages(callback) { // TODO: save callback and apply it when new participants are added to channel\n this.getCurrentParticipants().forEach(async pub => {\n if (pub !== session.getKey().pub) {\n // Subscribe to their messages\n let theirSecretChannelId;\n if (this.uuid) {\n theirSecretChannelId = await this.getTheirSecretUuid(pub);\n } else {\n theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n }\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid || pub, false, key, pub);});\n }\n if (!this.uuid) {\n // Subscribe to our messages\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, pub, true, key, session.getKey().pub);});\n }\n });\n if (this.uuid) {\n // Subscribe to our messages\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).map().once((data, key) => {this.messageReceived(callback, data, this.uuid, true, key, session.getKey().pub);});\n }\n }\n\n async messageReceived(callback, data, channelId, selfAuthored, key, from) {\n if (this.messages[key] || !data) {\n return;\n }\n const secret = this.uuid ? (await this.getTheirGroupSecret(from)) : (await this.getSecret(channelId));\n const decrypted = await Gun.SEA.decrypt(data, secret);\n if (typeof decrypted !== `object`) {\n return;\n }\n const info = {selfAuthored, channelId, from};\n this.messages[key] = decrypted;\n callback(decrypted, info);\n }\n\n /**\n * Get latest message in this channel. Useful for channel listing.\n */\n async getLatestMsg(callback) {\n const callbackIfLatest = async (msg, info) => {\n if (!this.latest) {\n this.latest = msg;\n callback(msg, info);\n } else {\n const t = (typeof this.latest.time === `string` ? this.latest.time : this.latest.time.toISOString());\n if (t < msg.time) {\n this.latest = msg;\n callback(msg, info);\n }\n }\n };\n this.onMy('latestMsg', msg => callbackIfLatest(msg, {selfAuthored: true, from: session.getKey().pub}));\n this.onTheir('latestMsg', (msg, k, from) => callbackIfLatest(msg, {selfAuthored: false, from}));\n }\n\n /**\n * Useful for notifications\n * @param {integer} time last seen msg time (default: now)\n */\n async setMyMsgsLastSeenTime(time?: string) {\n time = time || new Date().toISOString();\n return this.put(`msgsLastSeenTime`, time);\n }\n\n /**\n * Useful for notifications\n */\n async getMyMsgsLastSeenTime(callback) {\n this.onMy(`msgsLastSeenTime`, time => {\n this.myMsgsLastSeenTime = time;\n if (callback) {\n callback(this.myMsgsLastSeenTime);\n }\n });\n }\n\n /**\n * For \"seen\" status indicator\n */\n async getTheirMsgsLastSeenTime(callback) {\n this.onTheir(`msgsLastSeenTime`, time => {\n this.theirMsgsLastSeenTime = time;\n if (callback) {\n callback(this.theirMsgsLastSeenTime);\n }\n });\n }\n\n async removeParticipant(pub) {\n this.addParticipant(pub, true, {read: false, write: false});\n }\n\n /**\n * Add a public key to the channel or update its permissions\n * @param {string} pub\n */\n async addParticipant(pub: string, save = true, permissions?: any, subscribe?: boolean) {\n if (this.uuid) {\n return;\n }\n if (permissions === undefined) {\n permissions = DEFAULT_PERMISSIONS;\n }\n if (this.secrets[pub] && JSON.stringify(this.secrets[pub]) === JSON.stringify(permissions)) { // TODO: should be this.participants[pub]\n return;\n }\n this.secrets[pub] = null;\n this.getSecret(pub);\n const ourSecretChannelId = await this.getOurSecretChannelId(pub);\n if (save) {\n // Save their public key in encrypted format, so in channel listing we know who we are channeling with\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n publicState().user().get(`chats`).get(ourSecretChannelId).get(`pub`).put(await Gun.SEA.encrypt({pub}, mySecret));\n }\n if (this.uuid) {\n this.participants[pub] = permissions;\n if (save) {\n this.putDirect(`S${this.uuid}`, this.getMyGroupSecret());\n this.getMySecretUuid().then(s => {\n this.putDirect(this.uuid, s); // TODO: encrypt keys in put()\n });\n this.onTheirDirect(this.uuid, (s, k, from) => {\n this.theirSecretUuids[from] = s;\n });\n this.onTheirDirect(`S${this.uuid}`, (s, k, from) => {\n this.theirGroupSecrets[from] = s;\n });\n this.save();\n }\n }\n if (subscribe) {\n Object.values(this.directSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (!o.from || o.from === pub) {\n this._onTheirDirectFromUser(pub, o.key, o.callback);\n }\n });\n });\n Object.values(this.groupSubscriptions).forEach(arr => {\n arr.forEach(o => {\n if (o.from && o.from !== pub) { return; }\n if (permissions.write) {\n this._onTheirGroupFromUser(pub, o.key, o.callback);\n } else { // unsubscribe\n o.event && o.event.off();\n }\n });\n });\n }\n }\n\n /**\n * Send a message to the channel\n * @param msg string or {time, text, ...} object\n */\n async send(msg) {\n if (typeof msg === `string`) {\n msg = msg.trim();\n if (msg.length === 0) {\n return;\n }\n msg = {\n time: (new Date()).toISOString(),\n text: msg\n };\n } else if (typeof msg === `object`) {\n msg.time = msg.time || (new Date()).toISOString();\n } else {\n throw new Error(`msg param must be a string or an object`);\n }\n //publicState().user().get('message').set(temp);\n if (this.uuid) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(mySecretUuid).get(`latestMsg`).put(encrypted);\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(msg), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(`msgs`).get(`${msg.time}`).put(encrypted);\n userState().get(`chats`).get(ourSecretChannelId).get(`latestMsg`).put(encrypted);\n }\n }\n }\n\n /**\n * Save the channel to our channels list without sending a message\n */\n async save() {\n if (this.uuid) {\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get('msgs').get('a').put(null);\n this.put(`participants`, this.participants); // public participants list\n const mySecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n userState().get(`chats`).get(mySecretUuid).get(`pub`).put(await Gun.SEA.encrypt({\n uuid: this.uuid,\n myGroupSecret: this.getMyGroupSecret(),\n participants: this.participants // private participants list\n }, mySecret));\n this.participantsChanged();\n } else {\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get('msgs').get('a').put(null);\n }\n }\n }\n\n /**\n * Save a key-value pair, encrypt value. Each participant in the Channel writes to their own version of the key-value pair — they don't overwrite the same one.\n * @param {string} key\n * @param value\n */\n async put(key, value) {\n return (this.uuid ? this.putGroup : this.putDirect).call(this, key, value);\n }\n\n async putGroup(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), this.getMyGroupSecret());\n const mySecretUuid = await this.getMySecretUuid();\n userState().get(`chats`).get(mySecretUuid).get(key).put(encrypted);\n }\n\n async putDirect(key, value) {\n if (key === `msgs`) { throw new Error(`Sorry, you can't overwrite the msgs field which is used for .send()`); }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const encrypted = await Gun.SEA.encrypt(JSON.stringify(value), (await this.getSecret(keys[i])));\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n userState().get(`chats`).get(ourSecretChannelId).get(key).put(encrypted);\n }\n }\n\n /**\n * Subscribe to a key-value pair. Callback returns every participant's value unless you limit it with *from* param.\n * @param {string} key\n * @param {function} callback\n * @param {string} from public key whose value you want, or *\"me\"* for your value only, or *\"them\"* for the value of others only\n */\n async on(key: string, callback: Function, from?: string) {\n return (this.uuid ? this.onGroup : this.onDirect).call(this, key, callback, from);\n }\n\n async onDirect(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMy(key, (val: any) => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheir(key, (val: any, k: string, pub: string) => callback(val, pub));\n }\n }\n\n async onGroup(key: string, callback: Function, from?: string) {\n if (!from || from === `me` || from === session.getKey().pub) {\n this.onMyGroup(key, val => callback(val, session.getKey().pub));\n }\n if (!from || (from !== `me` && from !== session.getKey().pub)) {\n this.onTheirGroup(key, (val, k, pub) => callback(val, pub));\n }\n }\n\n async onMy(key: string, callback: Function) {\n return (this.uuid ? this.onMyGroup : this.onMyDirect).call(this, key, callback);\n }\n\n async onMyDirect(key: string, callback: Function) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const keys = this.getCurrentParticipants();\n for (let i = 0;i < keys.length;i++) {\n const ourSecretChannelId = await this.getOurSecretChannelId(keys[i]);\n publicState().user().get(`chats`).get(ourSecretChannelId).get(key).on(async (data: any) => {\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(keys[i])));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key);\n }\n });\n break;\n }\n }\n\n async onMyGroup(key, callback) {\n if (typeof callback !== 'function') {\n throw new Error(`onMy callback must be a function, got ${typeof callback}`);\n }\n const mySecretUuid = await this.getMySecretUuid();\n const mySecret = await this.getMyGroupSecret();\n publicState().user().get(`chats`).get(mySecretUuid).get(key).on(async data => {\n const decrypted = await Gun.SEA.decrypt(data, mySecret);\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, session.getKey().pub);\n }\n });\n }\n\n async onTheir(key: string, callback: Function, from: string) {\n return (this.uuid ? this.onTheirGroup : this.onTheirDirect).call(this, key, callback, from);\n }\n\n async _onTheirDirectFromUser(key: string, callback: Function, pub: string) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretChannelId = await this.getTheirSecretChannelId(pub);\n publicState().user(pub).get(`chats`).get(theirSecretChannelId).get(key).on(async (data: any) => {\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirDirect(key: string, callback: Function, from: string) { // TODO: subscribe to new channel participants\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.directSubscriptions, key)) {\n this.directSubscriptions[key] = [];\n }\n this.directSubscriptions[key].push({key, callback, from});\n const participants = this.getCurrentParticipants();\n participants.forEach(async pub => {\n if (from && pub !== from) { return; }\n this._onTheirDirectFromUser(pub, key, callback);\n });\n }\n\n hasWritePermission(pub) {\n return !this.uuid || (this.participants && this.participants[pub] && this.participants[pub].write);\n }\n\n async _onTheirGroupFromUser(pub: string, key: string, callback: Function, subscription: any) {\n if (!this.hasWritePermission(pub)) { return; }\n const theirSecretUuid = await this.getTheirSecretUuid(pub);\n publicState().user(pub).get(`chats`).get(theirSecretUuid).get(key).on(async (data: any, _a: any, _b: any, e: Event) => {\n if (subscription) { subscription.event = e; }\n if (!this.hasWritePermission(pub)) { return; }\n const decrypted = await Gun.SEA.decrypt(data, (await this.getTheirGroupSecret(pub)));\n if (decrypted) {\n callback(typeof decrypted.v !== `undefined` ? decrypted.v : decrypted, key, pub);\n }\n });\n }\n\n async onTheirGroup(key, callback, from) {\n if (typeof callback !== 'function') {\n throw new Error(`onTheir callback must be a function, got ${typeof callback}`);\n }\n if (!Object.prototype.hasOwnProperty.call(this.groupSubscriptions, key)) {\n this.groupSubscriptions[key] = [];\n }\n const subscription = {key, callback, from};\n this.groupSubscriptions[key].push(subscription);\n\n this.getParticipants(participants => {\n Object.keys(participants).forEach(async pub => {\n if (from && pub !== from) { return; }\n if (!(participants[pub] && participants[pub].write)) { return; }\n this._onTheirGroupFromUser(pub, key, callback, subscription);\n });\n });\n }\n\n /**\n * Set typing status\n */\n setTyping(isTyping, timeout = 5) {\n isTyping = typeof isTyping === `undefined` ? true : isTyping;\n timeout = timeout * 1000;\n this.put(`typing`, isTyping ? new Date().toISOString() : new Date(0).toISOString());\n clearTimeout(this.setTypingTimeout);\n this.setTypingTimeout = setTimeout(() => this.put(`typing`, false), timeout);\n }\n\n /**\n * Get typing status\n */\n getTyping(callback, timeout = 5) { // TODO callback not called on setTyping(false), at least for self chat\n timeout = timeout * 1000;\n this.onTheir(`typing`, (typing, key, pub) => {\n if (callback) {\n const isTyping = typing && new Date() - new Date(typing) <= timeout;\n callback(isTyping, pub);\n this.getTypingTimeouts = this.getTypingTimeouts || {};\n clearTimeout(this.getTypingTimeouts[pub]);\n if (isTyping) {\n this.getTypingTimeouts[pub] = setTimeout(() => callback(false, pub), timeout);\n }\n }\n });\n }\n\n /**\n * Add a chat button to page\n * @param options {label, channelOptions}\n */\n static addChatButton(options = {}) {\n options = Object.assign({label: 'Chat'}, options);\n if (!options.channelOptions) {\n throw new Error('addChatButton missing options.channelOptions param');\n }\n util.injectCss();\n let channel, box;\n const btn = util.createElement('div', 'iris-chat-open-button', document.body);\n btn.setAttribute('id', 'iris-chat-open-button');\n btn.innerHTML = ` ${options.label}`;\n btn.addEventListener('click', () => {\n btn.setAttribute('style', 'display: none');\n if (!channel) {\n channel = new Channel(options.channelOptions);\n box = channel.getChatBox();\n document.body.appendChild(box);\n } else {\n box.setAttribute('style', ''); // show\n }\n });\n }\n\n /**\n * Get a simple link that points to the channel.\n *\n * Direct channel: both users need to give their simple links. Use createChatLink() to get a two-way link that needs to be given by one user only.\n *\n * Group channel: Works only if the link recipient has been already added onto the channel participants list.\n */\n getSimpleLink(urlRoot = 'https://iris.to/') {\n if (this.uuid) {\n return `${urlRoot}?channelId=${this.uuid}&inviter=${session.getKey().pub}`;\n }\n return `${urlRoot}?chatWith=${this.getCurrentParticipants()[0]}`;\n }\n\n /**\n *\n */\n async getChatLinks(opts: any = {}) {\n let {callback, urlRoot, subscribe} = opts;\n urlRoot = urlRoot || 'https://iris.to/';\n if (!this.uuid) { throw new Error('Only group channels may have chat links'); }\n const chatLinks: any[] = [];\n const chatLinkSubscriptions = {};\n this.on('chatLinks', (links: any, from: string) => {\n // TODO: check admin permissions\n if (!links || typeof links !== 'object') { return; }\n Object.keys(links).forEach(linkId => {\n const link = links[linkId];\n if (link === null) {\n chatLinkSubscriptions[linkId] && chatLinkSubscriptions[linkId].off(); // unsubscribe removed chat link\n delete chatLinkSubscriptions[linkId];\n callback && callback({id: linkId, url: null});\n return;\n }\n if (chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n chatLinks.push(linkId);\n const url = Channel.formatChatLink({urlRoot, inviter: from, channelId: this.uuid, sharedSecret: link.sharedSecret, linkId});\n callback && callback({url, id: linkId});\n if (subscribe) {\n publicState().user(link.sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId, a, e) => {\n if (!encPub || typeof encPub !== 'string' || encPub.length < 10) { return; }\n chatLinkSubscriptions[linkId] = e;\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, link.sharedSecret);\n this.addParticipant(pub, undefined, undefined, true);\n }\n });\n }\n });\n });\n }\n\n async createChatLink(urlRoot = 'https://iris.to/') {\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(session.getKey().epub, session.getKey());\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n await util.gunAsAnotherUser(publicState(), sharedKey, user => {\n return user.get('chatRequests').put({a: 1}).then();\n });\n\n this.chatLinks[linkId] = {sharedKey, sharedSecret};\n this.put('chatLinks', this.chatLinks);\n userState().get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, channelId: this.uuid, inviter: session.getKey().pub, sharedSecret, linkId});\n }\n\n /**\n * Get a channel box element that you can add to your page\n */\n getChatBox() {\n util.injectCss();\n let minimized = false;\n\n const chatBox = util.createElement('div', 'iris-chat-box');\n const header = util.createElement('div', 'iris-chat-header', chatBox);\n const minimize = util.createElement('span', 'iris-chat-minimize', header);\n minimize.innerText = '—';\n minimize.addEventListener('click', e => {\n e.stopPropagation();\n chatBox.setAttribute('class', 'iris-chat-box minimized');\n minimized = true;\n });\n const headerText = util.createElement('div', 'iris-chat-header-text', header);\n const onlineIndicator = util.createElement('span', 'iris-online-indicator', headerText);\n onlineIndicator.innerHTML = '●';\n const nameEl = util.createElement('span', undefined, headerText);\n const close = util.createElement('span', 'iris-chat-close', header);\n close.innerHTML = '×';\n close.addEventListener('click', () => {\n chatBox.setAttribute('style', 'display: none');\n const openChatBtn = document.getElementById('iris-chat-open-button');\n if (openChatBtn) {\n openChatBtn.setAttribute('style', ''); // show\n }\n });\n header.addEventListener('click', () => {\n if (minimized) {\n chatBox.setAttribute('class', 'iris-chat-box');\n minimized = false;\n }\n });\n\n const messages = util.createElement('div', 'iris-chat-messages', chatBox);\n\n const typingIndicator = util.createElement('div', 'iris-typing-indicator', chatBox);\n typingIndicator.innerText = 'typing...';\n this.getTyping(isTyping => {\n typingIndicator.setAttribute('class', `iris-typing-indicator${ isTyping ? ' yes' : ''}`);\n });\n\n const inputWrapper = util.createElement('div', 'iris-chat-input-wrapper', chatBox);\n const textArea = util.createElement('textarea', undefined, inputWrapper);\n textArea.setAttribute('rows', '1');\n textArea.setAttribute('placeholder', 'Type a message');\n if (util.isMobile) {\n const sendBtn = util.createElement('button', undefined, inputWrapper);\n sendBtn.innerHTML = `\n \n `;\n sendBtn.addEventListener('click', () => {\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n });\n }\n\n const participants = this.getCurrentParticipants();\n if (participants.length) {\n const pub = participants[0];\n publicState().user(pub).get('profile').get('name').on(name => nameEl.innerText = name);\n Channel.getActivity(publicState(), pub, status => {\n const cls = `iris-online-indicator${ status.isActive ? ' yes' : ''}`;\n onlineIndicator.setAttribute('class', cls);\n const undelivered = messages.querySelectorAll('.iris-chat-message:not(.delivered)');\n undelivered.forEach(msg => {\n if (msg.getAttribute('data-time') <= status.lastActive) {\n const c = msg.getAttribute('class');\n msg.setAttribute('class', `${c } delivered`);\n }\n });\n });\n }\n\n this.getTheirMsgsLastSeenTime(time => {\n const unseen = messages.querySelectorAll('.iris-seen:not(.yes)');\n unseen.forEach(indicator => {\n const msgEl = indicator.parentElement.parentElement.parentElement;\n if (msgEl.getAttribute('data-time') <= time) {\n const msgClass = msgEl.getAttribute('class');\n if (msgClass.indexOf('delivered') === -1) {\n msgEl.setAttribute('class', `${msgClass } delivered`);\n }\n indicator.setAttribute('class', 'iris-seen yes');\n }\n });\n });\n\n this.getMessages((msg, info) => {\n const msgContent = util.createElement('div', 'iris-msg-content');\n msgContent.innerText = msg.text;\n const time = util.createElement('div', 'time', msgContent);\n time.innerText = util.formatTime(new Date(msg.time));\n if (info.selfAuthored) {\n const cls = this.theirMsgsLastSeenTime >= msg.time ? 'iris-seen yes' : 'iris-seen';\n const seenIndicator = util.createElement('span', cls, time);\n seenIndicator.innerHTML = ' ';\n }\n msgContent.innerHTML = msgContent.innerHTML.replace(/\\n/g, '
\\n');\n\n const msgEl = util.createElement('div', `${info.selfAuthored ? 'our' : 'their'} iris-chat-message`);\n msgEl.appendChild(msgContent);\n msgEl.setAttribute('data-time', msg.time);\n for (let i = messages.children.length; i >= 0; i--) {\n if (i === 0) {\n messages.insertBefore(msgEl, messages.firstChild);\n } else {\n const t = messages.children[i - 1].getAttribute('data-time');\n if (t && t < msg.time) {\n messages.children[i - 1].insertAdjacentElement('afterend', msgEl);\n break;\n }\n }\n }\n messages.scrollTop = messages.scrollHeight;\n });\n\n textArea.addEventListener('keyup', event => {\n Channel.setActivity(publicState(), true); // TODO\n this.setMyMsgsLastSeenTime(); // TODO\n if (event.keyCode === 13) {\n event.preventDefault();\n const content = textArea.value;\n const caret = util.getCaret(textArea);\n if (event.shiftKey) {\n textArea.value = `${content.substring(0, caret - 1) }\\n${ content.substring(caret, content.length)}`;\n } else {\n textArea.value = content.substring(0, caret - 1) + content.substring(caret, content.length);\n this.send(textArea.value);\n textArea.value = '';\n this.setTyping(false);\n }\n } else {\n this.setTyping(!!textArea.value.length);\n }\n });\n\n return chatBox;\n }\n\n /**\n * Set the user's online/active status\n * @param {string} activity string: set the activity status every 3 seconds, null/false: stop updating\n */\n static setActivity(activity) {\n if (publicState().irisActivityStatus === activity) { return; }\n publicState().irisActivityStatus = activity;\n clearTimeout(publicState().setActivityTimeout);\n const update = () => {\n publicState().user().get(`activity`).put({status: activity, time: new Date(Gun.state()).toISOString()});\n };\n update();\n function timerUpdate() {\n update();\n publicState().setActivityTimeout = setTimeout(timerUpdate, 3000);\n }\n if (activity) {\n timerUpdate();\n }\n }\n\n /**\n * Get the online status of a user.\n *\n * @param {string} pubKey public key of the user\n * @param {boolean} callback receives a boolean each time the user's online status changes\n */\n static getActivity(pubKey, callback) {\n let timeout;\n publicState().user(pubKey).get(`activity`).on(activity => {\n if (!activity || !(activity.time && activity.status)) { return; }\n clearTimeout(timeout);\n const now = new Date(Gun.state());\n const activityDate = new Date(activity.time);\n const isActive = activityDate > new Date(now.getTime() - 10 * 1000) && activityDate < new Date(now.getTime() + 30 * 1000);\n callback({isActive, lastActive: activity.time, status: activity.status});\n if (isActive) {\n timeout = setTimeout(() => callback({isOnline: false, lastActive: activity.time}), 10000);\n }\n });\n }\n\n static formatChatLink({urlRoot, chatWith, channelId, inviter, sharedSecret, linkId}) {\n const enc = encodeURIComponent;\n if (channelId && inviter) {\n return `${urlRoot}?channelId=${enc(channelId)}&inviter=${enc(inviter)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n return `${urlRoot}?chatWith=${enc(chatWith)}&s=${enc(sharedSecret)}&k=${enc(linkId)}`;\n }\n\n /**\n * Creates a channel link that can be used for two-way communication, i.e. only one link needs to be exchanged.\n */\n static async createChatLink(urlRoot = 'https://iris.to/') {\n const user = publicState().user();\n const key = session.getKey();\n\n // We create a new Gun user whose private key is shared with the chat link recipients.\n // Chat link recipients can contact you by writing their public key to the shared key's user space.\n const sharedKey = await Gun.SEA.pair();\n const sharedKeyString = JSON.stringify(sharedKey);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const encryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, sharedSecret);\n const ownerSecret = await Gun.SEA.secret(key.epub, key);\n const ownerEncryptedSharedKey = await Gun.SEA.encrypt(sharedKeyString, ownerSecret);\n let linkId = await util.getHash(encryptedSharedKey);\n linkId = linkId.slice(0, 12);\n\n // User has to exist, in order for .get(chatRequests).on() to be ever triggered\n util.gunAsAnotherUser(publicState(), sharedKey, user => {\n user.get('chatRequests').put({a: 1});\n });\n\n user.get('chatLinks').get(linkId).put({encryptedSharedKey, ownerEncryptedSharedKey});\n\n return Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n }\n\n /**\n *\n */\n static async getMyChatLinks(urlRoot = 'https://iris.to/', callback: Function, subscribe = false) {\n const key = session.getKey();\n const user = publicState().user();\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const chatLinks = [];\n user.get('chatLinks').map().on((data, linkId) => {\n if (!data || chatLinks.indexOf(linkId) !== -1) { return; }\n const channels = [];\n user.get('chatLinks').get(linkId).get('ownerEncryptedSharedKey').on(async enc => {\n if (!enc || chatLinks.indexOf(linkId) !== -1) { return; }\n chatLinks.push(linkId);\n const sharedKey = await Gun.SEA.decrypt(enc, mySecret);\n const sharedSecret = await Gun.SEA.secret(sharedKey.epub, sharedKey);\n const url = Channel.formatChatLink({urlRoot, chatWith: key.pub, sharedSecret, linkId});\n if (callback) {\n callback({url, id: linkId});\n }\n if (subscribe) {\n publicState().user(sharedKey.pub).get('chatRequests').map().on(async (encPub, requestId) => {\n if (!encPub) { return; }\n const s = JSON.stringify(encPub);\n if (channels.indexOf(s) === -1) {\n channels.push(s);\n const pub = await Gun.SEA.decrypt(encPub, sharedSecret);\n const channel = new Channel({key, participants: pub});\n channel.save();\n }\n util.gunAsAnotherUser(publicState(), sharedKey, user => { // remove the channel request after reading\n user.get('chatRequests').get(requestId).put(null);\n });\n });\n }\n });\n });\n }\n\n /**\n *\n */\n removeGroupChatLink(linkId) {\n this.chatLinks[linkId] = null;\n this.put('chatLinks', this.chatLinks);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static removePrivateChatLink(key, linkId) {\n publicState().user().auth(key);\n publicState().user().get('chatLinks').get(linkId).put(null);\n }\n\n /**\n *\n */\n static async deleteChannel(key, pub) {\n publicState().user().auth(key);\n const channelId = await Channel.getOurSecretChannelId(pub, key);\n publicState().user().get('channels').get(channelId).put(null);\n publicState().user().get('channels').get(channelId).off();\n }\n\n /**\n *\n */\n static async deleteGroup(key, uuid) {\n const mySecret = await Gun.SEA.secret(key.epub, key);\n const mySecretHash = await util.getHash(mySecret);\n const mySecretUuid = await util.getHash(mySecretHash + uuid);\n publicState().user().auth(key);\n publicState().user().get('channels').get(mySecretUuid).put(null);\n publicState().user().get('channels').get(mySecretUuid).off();\n }\n}\n\nexport default Channel;\n","import Channel from './Channel';\nimport session from './session';\n\nconst channels = new Map();\n\n/**\n * Private channel that only you and publicKey can read/write.\n * @param publicKey\n * @returns {Channel}\n */\nexport default function(publicKey = session.getKey(), chatLink?: string): Channel {\n let channel = channels.get(publicKey);\n if (!channel) {\n channel = new Channel({participants: publicKey, chatLink})\n channels.set(publicKey, channel);\n }\n return channel;\n}","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","// @ts-nocheck\n\nimport localForage from 'localforage';\nimport _ from './lodash';\n\ntype MyEventListener = {\n off: Function\n};\n\n// Localforage returns null if an item is not found, so we represent null with this uuid instead.\n// not foolproof, but good enough for now.\nconst LOCALFORAGE_NULL = \"c2fc1ad0-f76f-11ec-b939-0242ac120002\";\nconst notInLocalForage = new Set();\n\nlocalForage.config({\n driver: [localForage.LOCALSTORAGE, localForage.INDEXEDDB, localForage.WEBSQL]\n})\n\n/**\n Our very own implementation of the Gun API\n */\nexport default class Node {\n id: string;\n parent: Node | null;\n children = new Map();\n on_subscriptions = new Map();\n map_subscriptions = new Map();\n value: any = undefined;\n counter = 0;\n loaded = false;\n\n /** */\n constructor(id: string = '', parent: Node|null = null) {\n this.id = id;\n this.parent = parent;\n }\n\n saveLocalForage = _.throttle(async () => {\n if (!this.loaded) {\n await this.loadLocalForage();\n }\n if (this.children.size) {\n const children = Array.from(this.children.keys());\n localForage.setItem(this.id, children);\n } else if (this.value === undefined) {\n localForage.removeItem(this.id);\n } else {\n localForage.setItem(this.id, this.value === null ? LOCALFORAGE_NULL : this.value);\n }\n }, 500);\n\n loadLocalForage = _.throttle(async () => {\n if (notInLocalForage.has(this.id)) {\n return undefined;\n }\n // try to get the value from localforage\n let result = await localForage.getItem(this.id);\n // getItem returns null if not found\n if (result === null) {\n result = undefined;\n notInLocalForage.add(this.id);\n } else if (result === LOCALFORAGE_NULL) {\n result = null;\n } else if (Array.isArray(result)) {\n // result is a list of children\n const newResult = {};\n await Promise.all(result.map(async key => {\n newResult[key] = await this.get(key).once();\n }));\n result = newResult;\n } else {\n // result is a value\n this.value = result;\n }\n this.loaded = true;\n return result;\n }, 500);\n\n doCallbacks = _.throttle(() => {\n for (const [id, callback] of this.on_subscriptions) {\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n if (this.parent) {\n for (const [id, callback] of this.parent.on_subscriptions) {\n const event = { off: () => this.parent.on_subscriptions.delete(id) };\n this.parent.once(callback, event, false);\n }\n for (const [id, callback] of this.parent.map_subscriptions) {\n const event = { off: () => this.parent.map_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n }\n }, 40);\n\n /**\n *\n * @param key\n * @returns {Node}\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n get(key) {\n const existing = this.children.get(key);\n if (existing) {\n return existing;\n }\n const new_node = new Node(`${this.id}/${key}`, this);\n this.children.set(key, new_node);\n this.saveLocalForage();\n return new_node;\n }\n\n /**\n * Set a value to the node. If the value is an object, it will be converted to child nodes.\n * @param value\n * @example node.get('users').get('alice').put({name: 'Alice'})\n */\n put(value) {\n if (Array.isArray(value)) {\n throw new Error('Sorry, we don\\'t deal with arrays');\n }\n if (typeof value === 'object' && value !== null) {\n this.value = undefined;\n for (const key in value) {\n this.get(key).put(value[key]);\n }\n _.defer(() => this.doCallbacks(), 100);\n return;\n }\n this.children = new Map();\n this.value = value;\n this.doCallbacks();\n this.saveLocalForage();\n }\n\n // protip: the code would be a lot cleaner if you separated the Node API from storage adapters.\n /**\n * Return a value without subscribing to it\n * @param callback\n * @param event\n * @param returnIfUndefined\n * @returns {Promise<*>}\n */\n async once(callback?: Function, event?: MyEventListener, returnIfUndefined = true): Promise {\n let result: any;\n if (this.children.size) {\n // return an object containing all children\n result = {};\n await Promise.all(Array.from(this.children.keys()).map(async key => {\n result[key] = await this.get(key).once(undefined, event);\n }));\n } else if (this.value !== undefined) {\n result = this.value;\n } else {\n result = await this.loadLocalForage();\n }\n if (result !== undefined || returnIfUndefined) {\n callback && callback(result, this.id.slice(this.id.lastIndexOf('/') + 1), null, event);\n return result;\n }\n }\n\n /**\n * Subscribe to a value\n * @param callback\n */\n on(callback: Function): void {\n const id = this.counter++;\n this.on_subscriptions.set(id, callback);\n const event = { off: () => this.on_subscriptions.delete(id) };\n this.once(callback, event, false);\n }\n\n /**\n * Subscribe to the children of a node. Callback is called separately for each child.\n * @param callback\n * @returns {Promise}\n */\n async map(callback: Function) {\n const id = this.counter++;\n this.map_subscriptions.set(id, callback);\n const event = { off: () => this.map_subscriptions.delete(id) };\n if (!this.loaded) {\n // ensure that the list of children is loaded\n await this.loadLocalForage();\n }\n for (const child of this.children.values()) {\n child.once(callback, event, false);\n }\n }\n}","import Node from './Node';\n\nlet local: Node;\n\n/**\n * Get a state that is only synced in memory and local storage.\n *\n * Useful for storing things like UI state, local indexes or logged in user.\n * @returns {Node}\n */\nexport default function() {\n if (!local) {\n local = new Node();\n }\n return local;\n}","import local from './local';\n\nlet blockedUsers: { [key: string]: boolean } = {};\n\nexport default function() {\n if (!blockedUsers) {\n blockedUsers = {};\n local().get('block').map((isBlocked: boolean, user: string) => {\n if (isBlocked === blockedUsers[user]) { return; }\n if (isBlocked) {\n blockedUsers[user] = isBlocked;\n local().get('groups').map((_v: any, k: string) => {\n local().get('groups').get(k).get(user).put(false);\n });\n } else {\n delete blockedUsers[user];\n }\n });\n }\n return blockedUsers;\n}","import local from \"./local\";\nimport userSpace from './public';\nimport blockedUsers from './blockedUsers';\n\nlet counter = 0;\nconst cache = new Map>();\nconst callbacks = new Map();\n\ntype Event = {\n off: () => void;\n}\n\n/**\n * Aggregates public data from all users in the group.\n *\n * For example, the public message feed, message replies and likes are aggregated using this.\n * @param groupName\n * @returns object\n */\nexport default function(groupName = 'everyone') {\n return {\n get(path: string, callback: any) {\n const groupNode = local().get('groups').get(groupName);\n const follows: { [key: string]: boolean; } = {};\n requestAnimationFrame(() => {\n groupNode.map((isFollowing: any, user: string) => {\n if (blockedUsers()[user]) { return; } // TODO: allow to specifically query blocked users?\n if (follows[user] && follows[user] === isFollowing) { return; }\n follows[user] = isFollowing;\n if (isFollowing) { // TODO: callback on unfollow, for unsubscribe\n let node = userSpace(user);\n if (path && path !== '/') {\n node = path.split('/').reduce((sum:any, s:string) => sum.get(decodeURIComponent(s)), node);\n }\n callback(node, user);\n }\n });\n });\n },\n\n _cached_map(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.map((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(key, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n // TODO: this should probably store just the most recent value, not everyone's value\n // TODO: for counting of likes etc, use this.count() instead\n _cached_on(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string, x: any) => {\n const item = {value, key, from};\n cached.set(from, item);\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(value, key, x, myEvent, from);\n }\n }));\n } else {\n for (let item of cached.values()) {\n callback(item.value, item.key, 0, myEvent, item.from);\n }\n }\n },\n\n _cached_count(cached: Map | undefined, cacheKey: string, path: string, myEvent: Event, callback: Function) {\n if (!cached) {\n const cached = new Map();\n cache.set(cacheKey, cached);\n this.get(path, (node: any, from: string) => node.on((value: any, key: string) => {\n value ? cached.set(from, true) : cached.delete(from);\n const count = cached.size;\n for (let cb of callbacks.get(cacheKey).values()) {\n cb(count, key, null, myEvent, from);\n }\n }));\n } else {\n callback(cached.size, path.split('/').pop(), null, myEvent);\n }\n },\n\n _cached_fn(fn: string, path: string, callback: Function) {\n const cacheKey = `${fn}:${groupName}:${path}`;\n\n let callbackId = counter++;\n if (callbacks.has(cacheKey)) {\n callbacks.get(cacheKey).set(callbackId, callback);\n } else {\n callbacks.set(cacheKey, new Map([[callbackId, callback]]));\n }\n\n const myEvent = {off: () => {\n let myCallbacks = callbacks.get(cacheKey);\n myCallbacks && myCallbacks.delete(callbackId);\n }};\n\n const cached = cache.get(cacheKey);\n\n switch (fn) {\n case 'map':\n this._cached_map(cached, cacheKey, path, myEvent, callback);\n break;\n case 'on':\n this._cached_on(cached, cacheKey, path, myEvent, callback);\n break;\n case 'count':\n this._cached_count(cached, cacheKey, path, myEvent, callback);\n break;\n }\n },\n\n map(path: string, callback: Function) { // group queries are slow, so we cache them\n this._cached_fn('map', path, callback);\n },\n\n on(path: string, callback: Function) {\n this._cached_fn('on', path, callback);\n },\n\n count(path: string, callback: Function) {\n this._cached_fn('count', path, callback);\n }\n }\n}","// @ts-nocheck\n\nimport _ from './lodash';\nimport Gun from 'gun';\n\nimport session from './session';\nimport util from './util';\nimport publicState from './global';\nimport privateState from './private';\nimport local from './local';\nimport group from './group';\n\nconst NOTIFICATION_SERVICE_URL = 'https://iris-notifications.herokuapp.com/notify';\n// const notificationSound = new Audio('../../assets/audio/notification.mp3'); // TODO\nlet loginTime;\nlet unseenMsgsTotal = 0;\nlet unseenNotificationCount = 0;\nconst webPushSubscriptions = {};\n\nfunction desktopNotificationsEnabled() {\n return window.Notification && Notification.permission === 'granted';\n}\n\nfunction notifyMsg(msg, info, channelId, onClick) {\n function shouldNotify() {\n if (msg.timeObj < loginTime) { return false; }\n if (info.selfAuthored) { return false; }\n if (document.visibilityState === 'visible') { return false; }\n const channel = privateState(channelId);\n if (channel.notificationSetting === 'nothing') { return false; }\n if (channel.notificationSetting === 'mentions' && !msg.text.includes(session.getMyName())) { return false; }\n return true;\n }\n function shouldDesktopNotify() {\n if (!desktopNotificationsEnabled()) { return false; }\n return shouldNotify();\n }\n function shouldAudioNotify() {\n return shouldNotify();\n }\n if (shouldAudioNotify()) {\n //notificationSound.play(); // TODO\n }\n if (shouldDesktopNotify()) {\n let body, title;\n const channel = privateState(channelId);\n if (channel.uuid) {\n title = channel.participantProfiles[info.from].name;\n body = `${name}: ${msg.text}`;\n } else {\n title = 'Message'\n body = msg.text;\n }\n body = util.truncateString(body, 50);\n let desktopNotification = new Notification(title, { // TODO: replace with actual name\n icon: '/assets/img/icon128.png',\n body,\n silent: true\n });\n desktopNotification.onclick = function() {\n changeUnseenNotificationCount(-1);\n onClick && onClick();\n window.focus();\n };\n }\n}\n\nfunction changeChatUnseenMsgsCount(chatId, change) {\n const chat = privateState(chatId);\n if (!chat) return;\n const chatNode = local().get('channels').get(chatId);\n if (change) {\n unseenMsgsTotal += change;\n chat.unseen += change;\n } else {\n unseenMsgsTotal = unseenMsgsTotal - (chat.unseen || 0);\n chat.unseen = 0;\n }\n chatNode.get('unseen').put(chat.unseen);\n unseenMsgsTotal = unseenMsgsTotal >= 0 ? unseenMsgsTotal : 0;\n local().get('unseenMsgsTotal').put(unseenMsgsTotal);\n}\n\nconst publicVapidKey = 'BMqSvZArOIdn7vGkYplSpkZ70-Qt8nhYbey26WVa3LF3SwzblSzm3n3HHycpNkAKVq7MCkrzFuTFs_en7Y_J2MI';\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\nasync function subscribe(reg) {\n try {\n const subscription = await reg.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(publicVapidKey)\n });\n addWebPushSubscription(subscription);\n } catch (e) {\n console.error('web push subscription error', e);\n }\n}\n\nasync function subscribeToWebPush() {\n console.log('subscribing to web push', navigator.serviceWorker);\n if (!desktopNotificationsEnabled() || !navigator.serviceWorker) { return false; }\n await navigator.serviceWorker.ready;\n const reg = await navigator.serviceWorker.getRegistration();\n reg.active.postMessage({key: session.getKey()});\n const sub = await reg.pushManager.getSubscription();\n sub ? addWebPushSubscription(sub) : subscribe(reg);\n}\n\nconst addWebPushSubscriptionsToChats = _.debounce(() => {\n const arr = Object.values(webPushSubscriptions);\n session.channelIds.forEach(channelId => {\n privateState(channelId).put('webPushSubscriptions', arr);\n });\n}, 5000);\n\nfunction removeSubscription(hash) {\n delete webPushSubscriptions[hash];\n publicState().user().get('webPushSubscriptions').get(hash).put(null);\n addWebPushSubscriptionsToChats();\n}\n\nasync function addWebPushSubscription(s, saveToGun = true) {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n const enc = await Gun.SEA.encrypt(s, mySecret);\n const hash = await util.getHash(JSON.stringify(s));\n if (saveToGun) {\n publicState().user().get('webPushSubscriptions').get(hash).put(enc);\n }\n webPushSubscriptions[hash] = s;\n addWebPushSubscriptionsToChats();\n}\n\nasync function getWebPushSubscriptions() {\n const myKey = session.getKey();\n const mySecret = await Gun.SEA.secret(myKey.epub, myKey);\n publicState().user().get('webPushSubscriptions').map().on(async enc => {\n if (!enc) { return; }\n const s = await Gun.SEA.decrypt(enc, mySecret);\n addWebPushSubscription(s, false);\n });\n}\n\nfunction getEpub(user) {\n return new Promise(resolve => {\n publicState().user(user).get('epub').on(async (epub,k,x,e) => {\n if (epub) {\n e.off();\n resolve(epub);\n }\n });\n });\n}\n\nasync function getNotificationText(notification) {\n const profile = await publicState().user(notification.from).get('profile').once();\n const name = (profile && profile.name) || 'someone';\n const event = notification.event || notification.action;\n let eventText;\n if (event === 'like') eventText = `${name} liked your post`;\n else if (event === 'reply') eventText = `${name} replied to your post`;\n else if (event === 'mention') eventText = `${name} mentioned you in their post`;\n else if (event === 'follow') eventText = `${name} started following you`;\n else eventText = `${name} sent you a notification: ${event}`;\n return eventText;\n}\n\nfunction subscribeToIrisNotifications(onClick?: Function) {\n let notificationsSeenTime: any;\n let notificationsShownTime: any;\n publicState().user().get('notificationsSeenTime').on(v => {\n notificationsSeenTime = v;\n console.log(v);\n });\n publicState().user().get('notificationsShownTime').on(v => notificationsShownTime = v);\n const setNotificationsShownTime = _.debounce(() => {\n publicState().user().get('notificationsShownTime').put(new Date().toISOString());\n }, 1000);\n const alreadyHave = new Set();\n group().on(`notifications/${session.getPubKey()}`, async (encryptedNotification, k, x, e, from) => {\n const id = from.slice(0,30) + encryptedNotification.slice(0,30);\n if (alreadyHave.has(id)) { return; }\n alreadyHave.add(id);\n const epub = await getEpub(from);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const notification = await Gun.SEA.decrypt(encryptedNotification, secret);\n if (!notification || typeof notification !== 'object') { return; }\n setNotificationsShownTime();\n notification.from = from;\n local().get('notifications').get(notification.time).put(notification);\n if (!notificationsSeenTime || (notificationsSeenTime < notification.time)) {\n changeUnseenNotificationCount(1);\n }\n if (!notificationsShownTime || notificationsShownTime < notification.time) {\n console.log('was new!');\n const text = await getNotificationText(notification);\n let desktopNotification = new Notification(text, {\n icon: '/assets/img/icon128.png',\n body: text,\n silent: true\n });\n desktopNotification.onclick = function() {\n const link = notification.target ? `/post/${notification.target}` : `/profile/${notification.from}`;\n onClick && onClick(link);\n changeUnseenNotificationCount(-1);\n window.focus();\n };\n }\n });\n}\n\nfunction changeUnseenNotificationCount(change) {\n if (!change) {\n unseenNotificationCount = 0;\n publicState().user().get('notificationsSeenTime').put(new Date().toISOString());\n } else {\n unseenNotificationCount += change;\n unseenNotificationCount = Math.max(unseenNotificationCount, 0);\n }\n local().get('unseenNotificationCount').put(unseenNotificationCount);\n}\n\nasync function sendIrisNotification(recipient, notification) {\n if (!(recipient && notification)) { return; } // TODO: use typescript or sth :D\n if (typeof notification === 'object') { notification.time = new Date().toISOString() }\n const epub = await getEpub(recipient);\n const secret = await Gun.SEA.secret(epub, session.getKey());\n const enc = await Gun.SEA.encrypt(notification, secret);\n publicState().user().get('notifications').get(recipient).put(enc);\n}\n\nasync function sendWebPushNotification(recipient, notification) {\n console.log('sending web push notification to', recipient, notification);\n const channel = privateState(recipient);\n const myKey = session.getKey();\n const shouldWebPush = (recipient === myKey.pub) || !(channel.activity && channel.activity.isActive);\n if (shouldWebPush && channel.webPushSubscriptions) {\n const subscriptions = [];\n const participants = Object.keys(channel.webPushSubscriptions);\n for (let i = 0; i < participants.length; i++) {\n const participant = participants[i];\n const secret = await channel.getSecret(participant);\n const payload = {\n title: await Gun.SEA.encrypt(notification.title, secret),\n body: await Gun.SEA.encrypt(notification.body, secret),\n from:{pub: myKey.pub, epub: myKey.epub}\n };\n channel.webPushSubscriptions[participant].forEach(s => {\n if (s && s.endpoint) {\n subscriptions.push({subscription: s, payload});\n }\n });\n }\n if (subscriptions.length === 0) {return;}\n fetch(NOTIFICATION_SERVICE_URL, {\n method: 'POST',\n body: JSON.stringify({subscriptions}),\n headers: {\n 'content-type': 'application/json'\n }\n }).catch(() => {});\n }\n}\n\nfunction init() {\n loginTime = new Date();\n unseenMsgsTotal = 0;\n}\n\nexport default {init, notifyMsg, getNotificationText, sendWebPushNotification, changeUnseenNotificationCount, subscribeToIrisNotifications, sendIrisNotification, changeChatUnseenCount: changeChatUnseenMsgsCount, webPushSubscriptions, subscribeToWebPush, getWebPushSubscriptions, removeSubscription};\n","/**\n * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2022 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n totalWeight += obj.weight;\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '6.6.2';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","import util from \"./util\";\nimport Gun from \"gun\";\n\nconst electron = util.isElectron ? new Gun({peers: ['http://localhost:8768/gun'], file: 'State.electron', multicast:false, localStorage: false}).get('state') : null;\n\nexport default electron;","// @ts-nocheck\nimport Gun from 'gun';\nimport notifications from './notifications';\nimport Channel from './Channel';\nimport util from './util';\nimport _ from './lodash';\nimport Fuse from \"fuse.js\";\nimport localforage from 'localforage';\nimport local from './local';\nimport electron from './electron';\nimport user from './public';\nimport privateState from './private';\nimport blockedUsers from './blockedUsers';\n\nlet key: any;\nlet myName: string;\nlet latestChatLink: string;\nlet onlineTimeout: any;\nlet ourActivity: any;\nlet noFollows: boolean;\nlet noFollowers: boolean;\nlet searchIndex: any;\nlet initCalled: boolean;\nconst searchableItems: any = {};\nconst getExtendedFollowsCalled = new Map();\n\nconst DEFAULT_FOLLOW = 'hyECQHwSo7fgr2MVfPyakvayPeixxsaAWVtZ-vbaiSc.TXIp8MnCtrnW6n2MrYquWPcc-DTmZzMBmc2yaGv9gIU';\n\nconst DEFAULT_SETTINGS = {\n electron: {\n openAtLogin: true,\n minimizeOnClose: true\n },\n local: {\n enableWebtorrent: !util.isMobile,\n enablePublicPeerDiscovery: true,\n autoplayWebtorrent: true,\n maxConnectedPeers: util.isElectron ? 2 : 1\n }\n}\n\n/**\n * User session management utilities.\n */\nexport default {\n /**\n * Log in with a key from localStorage.\n *\n * If no key is found and options.autologin is not false, a new user will be created.\n *\n * If options.autofollow is not false, the default follow will be added.\n * @param options\n */\n init(options: any = {}) {\n if (initCalled) { return; }\n initCalled = true;\n let localStorageKey = localStorage.getItem('chatKeyPair');\n if (localStorageKey) {\n this.login(JSON.parse(localStorageKey));\n } else if (options.autologin !== false) {\n this.loginAsNewUser(options);\n } else {\n this.clearIndexedDB();\n }\n setTimeout(() => {\n local().get('block').map(() => {\n this.updateSearchIndex();\n });\n this.updateSearchIndex();\n });\n setInterval(() => {\n if (this.taskQueue.length) {\n //console.log('this.taskQueue', this.taskQueue.length);\n const t = this.taskQueue.shift();\n t && t();\n }\n }, 10);\n },\n\n DEFAULT_SETTINGS,\n DEFAULT_FOLLOW,\n\n taskQueue: [] as any[],\n\n updateSearchIndex: _.throttle(() => {\n const options = {keys: ['name'], includeScore: true, includeMatches: true, threshold: 0.3};\n const values = Object.values(_.omit(searchableItems, Object.keys(blockedUsers())));\n searchIndex = new Fuse(values, options);\n local().get('searchIndexUpdated').put(true);\n }, 2000, {leading:true}),\n\n saveSearchResult: _.throttle(k => {\n local().get('contacts').get(k).put({followDistance: searchableItems[k].followDistance,followerCount: searchableItems[k].followers.size});\n }, 1000, {leading:true}),\n\n addFollow(callback: Function, k: string, followDistance: number, follower?: string) {\n if (searchableItems[k]) {\n if (searchableItems[k].followDistance > followDistance) {\n searchableItems[k].followDistance = followDistance;\n }\n follower && searchableItems[k].followers.add(follower);\n } else {\n searchableItems[k] = {key: k, followDistance, followers: new Set(follower && [follower])};\n this.taskQueue.push(() => {\n user(k).get('profile').get('name').on((name: string) => {\n searchableItems[k].name = name;\n local().get('contacts').get(k).get('name').put(name);\n callback && callback(k, searchableItems[k]);\n });\n });\n }\n this.saveSearchResult(k);\n callback && callback(k, searchableItems[k]);\n this.updateSearchIndex();\n this.updateNoFollows();\n this.updateNoFollowers();\n },\n\n removeFollow(k: string, followDistance: number, follower: string) {\n if (searchableItems[k]) {\n searchableItems[k].followers.delete(follower);\n if (followDistance === 1) {\n local().get('groups').get('follows').get(k).put(false);\n }\n this.updateNoFollows();\n this.updateNoFollowers();\n }\n },\n\n getExtendedFollows(callback: Function, k = key.pub, maxDepth = 3, currentDepth = 1) {\n const called = getExtendedFollowsCalled.get(k);\n if (called && called <= currentDepth) {\n return;\n }\n getExtendedFollowsCalled.set(k, currentDepth);\n\n this.addFollow(callback, k, currentDepth - 1);\n\n user(k).get('follow').map().on((isFollowing: boolean, followedKey: string) => { // TODO: unfollow\n if (isFollowing) {\n this.addFollow(callback, followedKey, currentDepth, k);\n if (currentDepth < maxDepth) {\n this.taskQueue.push(() => this.getExtendedFollows(callback, followedKey, maxDepth, currentDepth + 1));\n }\n } else {\n this.removeFollow(followedKey, currentDepth, k);\n }\n });\n\n return searchableItems;\n },\n\n updateNoFollows: _.throttle(() => {\n const v = Object.keys(searchableItems).length <= 1;\n if (v !== noFollows) {\n noFollows = v;\n local().get('noFollows').put(noFollows);\n }\n }, 1000, {leading:true}),\n\n updateNoFollowers: _.throttle(() => {\n const v = !(searchableItems[key.pub] && (searchableItems[key.pub].followers.size > 0));\n if (v !== noFollowers) {\n noFollowers = v;\n local().get('noFollowers').put(noFollowers);\n }\n }, 1000, {leading:true}),\n\n getSearchIndex() {\n return searchIndex;\n },\n\n setOurOnlineStatus() {\n const activeRoute = window.location.hash;\n Channel.setActivity(ourActivity = 'active');\n const setActive = _.debounce(() => {\n const chatId = activeRoute && activeRoute.replace('#/profile/','').replace('#/chat/','');\n const chat = privateState(chatId);\n if (chat && !ourActivity) {\n chat.setMyMsgsLastSeenTime();\n }\n Channel.setActivity(ourActivity = 'active');\n clearTimeout(onlineTimeout);\n onlineTimeout = setTimeout(() => Channel.setActivity(ourActivity = 'online'), 30000);\n }, 1000);\n document.addEventListener(\"touchmove\", setActive);\n document.addEventListener(\"mousemove\", setActive);\n document.addEventListener(\"keypress\", setActive);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === 'visible') {\n Channel.setActivity(ourActivity = 'active');\n const chatId = location.pathname.slice(1).replace('chat/','');\n const chat = activeRoute && privateState(chatId);\n if (chat) {\n chat.setMyMsgsLastSeenTime();\n notifications.changeChatUnseenCount(chatId, 0);\n }\n } else {\n Channel.setActivity(ourActivity = 'online');\n }\n });\n setActive();\n window.addEventListener(\"beforeunload\", () => {\n Channel.setActivity(ourActivity = null);\n });\n },\n\n updateGroups() {\n this.getExtendedFollows((k: string, info: any) => {\n if (info.followDistance <= 1) {\n local().get('groups').get('follows').get(k).put(true);\n }\n local().get('groups').get('everyone').get(k).put(true);\n if (k === this.getPubKey()) {\n this.updateNoFollowers();\n }\n });\n },\n\n /**\n * Log in with a private key.\n * @param key\n */\n login(k: any) {\n const shouldRefresh = !!key;\n key = k;\n localStorage.setItem('chatKeyPair', JSON.stringify(k));\n user().auth(key);\n user().put({epub: key.epub});\n user().get('likes').put({a:null}); // gun bug?\n user().get('msgs').put({a:null}); // gun bug?\n user().get('replies').put({a:null}); // gun bug?\n notifications.subscribeToWebPush();\n notifications.getWebPushSubscriptions();\n notifications.subscribeToIrisNotifications();\n Channel.getMyChatLinks( undefined, (chatLink: any) => {\n local().get('chatLinks').get(chatLink.id).put(chatLink.url);\n latestChatLink = chatLink.url;\n });\n this.setOurOnlineStatus();\n Channel.getChannels( (c: Channel) => this.addChannel(c));\n user().get('profile').get('name').on((name: any) => {\n if (name && typeof name === 'string') {\n myName = name;\n }\n });\n notifications.init();\n local().get('loggedIn').put(true);\n local().get('settings').once().then(settings => {\n if (!settings) {\n local().get('settings').put(DEFAULT_SETTINGS.local);\n } else if (settings.enableWebtorrent === undefined || settings.autoplayWebtorrent === undefined) {\n local().get('settings').get('enableWebtorrent').put(DEFAULT_SETTINGS.local.enableWebtorrent);\n local().get('settings').get('autoplayWebtorrent').put(DEFAULT_SETTINGS.local.autoplayWebtorrent);\n }\n });\n user().get('block').map().on((isBlocked: boolean, user: string) => {\n local().get('block').get(user).put(isBlocked);\n if (isBlocked) {\n delete searchableItems[user];\n }\n });\n this.updateGroups();\n if (shouldRefresh) {\n location.reload();\n }\n if (electron) {\n electron.get('settings').on(electron => {\n local().get('settings').get('electron').put(electron);\n });\n electron.get('user').put(key.pub);\n }\n local().get('filters').get('group').once().then(v => {\n if (!v) {\n local().get('filters').get('group').put('follows');\n }\n });\n },\n\n /**\n * Create a new user account and log in.\n * @param options {Object} - Options for the new account.\n * @returns {Promise<*>}\n */\n loginAsNewUser(options: any = {}) {\n const name = options.name || util.generateName();\n console.log('loginAsNewUser name', name);\n return Gun.SEA.pair().then(k => {\n this.login(k);\n user().get('profile').put({a:null});\n user().get('profile').get('name').put(name);\n local().get('filters').put({a:null});\n local().get('filters').get('group').put('follows');\n Channel.createChatLink().then(l => latestChatLink = l);\n setTimeout(() => {\n if (options.autofollow !== false) {\n console.log('autofollowing', DEFAULT_FOLLOW);\n user().get('follow').get(DEFAULT_FOLLOW).put(true);\n }\n }, 1000); // maybe wait for login return instead\n });\n },\n\n /**\n * Log out the current user.\n * @returns {Promise}\n */\n async logOut() {\n if (electron) {\n electron.get('user').put(null);\n }\n // TODO: remove subscription from your channels\n if (navigator.serviceWorker) {\n const reg = await navigator.serviceWorker.getRegistration();\n if (reg && reg.pushManager) {\n reg.active?.postMessage({key: null});\n const sub = await reg.pushManager.getSubscription();\n if (sub) {\n const hash = await util.getHash(JSON.stringify(sub));\n notifications.removeSubscription(hash);\n sub.unsubscribe && sub.unsubscribe();\n }\n }\n }\n this.clearIndexedDB();\n localStorage.clear(); // TODO clear only iris data\n localforage.clear().then(() => {\n window.location.hash = '';\n window.location.href = '/';\n location.reload();\n });\n },\n\n clearIndexedDB() {\n return new Promise(resolve => {\n const r1 = window.indexedDB.deleteDatabase('local()');\n const r2 = window.indexedDB.deleteDatabase('radata');\n let r1done = false;\n let r2done = false;\n const check = () => {\n r1done && r2done && resolve(undefined);\n }\n r1.onerror = r2.onerror = e => console.error(e);\n //r1.onblocked = r2.onblocked = e => console.error('blocked', e);\n r1.onsuccess = () => {\n r1done = true;\n check();\n }\n r2.onsuccess = () => {\n r2done = true;\n check();\n }\n });\n },\n\n getMyChatLink() {\n return latestChatLink || util.getProfileLink(key.pub);\n },\n\n /**\n * Get the keypair of the logged in user.\n * @returns {*}\n */\n getKey() { return key; },\n\n /**\n * Get the public key of the logged in user.\n * @returns {*}\n */\n getPubKey() {\n return key && key.pub;\n },\n\n /**\n * Get the name of the logged in user.\n * @returns {*}\n */\n getMyName() { return myName; }, // TODO maybe remove and use iris.user().get('profile').get('name') instead?\n\n myPeerUrl: (ip: string) => `http://${ip}:8767/gun`,\n\n async shareMyPeerUrl(channel: Channel) {\n const myIp = await local().get('settings').get('electron').get('publicIp').once();\n myIp && channel.put && channel.put('my_peer', this.myPeerUrl(myIp));\n },\n\n newChannel(pub: string, chatLink?: string) {\n if (!pub || this.channelIds.has(pub)) {\n return;\n }\n const chat = privateState(pub, chatLink);\n this.addChannel(chat);\n return chat;\n },\n\n addChannel(chat: Channel) {\n this.taskQueue.push(() => {\n let pub = chat.getId();\n if (this.channelIds.has(pub)) { return; }\n this.channelIds.add(pub);\n const chatNode = local().get('channels').get(pub);\n chatNode.get('latestTime').on((t: string) => {\n if (t && (!chat.latestTime || t > chat.latestTime)) {\n chat.latestTime = t;\n } else {\n // chatNode.get('latestTime').put(chat.latestTime); // omg recursion\n }\n });\n chatNode.get('theirMsgsLastSeenTime').on((t: string) => {\n if (!t) { return; }\n const d = new Date(t);\n if (!chat.theirMsgsLastSeenDate || chat.theirMsgsLastSeenDate < d) {\n chat.theirMsgsLastSeenDate = d;\n }\n });\n chat.getLatestMsg && chat.getLatestMsg((latest: any, info: any) => {\n this.processMessage(pub, latest, info);\n });\n notifications.changeChatUnseenCount(pub, 0);\n chat.notificationSetting = 'all';\n chat.onMy('notificationSetting', (val: any) => {\n chat.notificationSetting = val;\n });\n //$(\".chat-list\").append(el);\n chat.theirMsgsLastSeenTime = '';\n chat.getTheirMsgsLastSeenTime((time: any) => {\n if (chat && time && time >= chat.theirMsgsLastSeenTime) {\n chat.theirMsgsLastSeenTime = time;\n chatNode.get('theirMsgsLastSeenTime').put(time);\n }\n });\n chat.getMyMsgsLastSeenTime((time: any) => {\n chat.myLastSeenTime = new Date(time);\n if (chat.latest && chat.myLastSeenTime >= chat.latest.time) {\n notifications.changeChatUnseenCount(pub, 0);\n }\n });\n chat.isTyping = false;\n chat.getTyping(isTyping => {\n chat.isTyping = isTyping;\n local().get('channels').get(pub).get('isTyping').put(isTyping);\n });\n chat.online = {};\n Channel.getActivity(pub, (activity) => {\n if (chat) {\n chatNode.put({theirLastActiveTime: activity && activity.lastActive, activity: activity && activity.isActive && activity.status});\n chat.activity = activity;\n }\n });\n if (chat.uuid) {\n let isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n chat.participantProfiles = {};\n chat.on('name', v => {\n chat.name = v;\n searchableItems[chat.uuid] = {name: v, uuid: chat.uuid};\n local().get('channels').get(chat.uuid).get('name').put(v);\n });\n chat.on('photo', v => {\n searchableItems[chat.uuid] = searchableItems[chat.uuid] || {};\n searchableItems[chat.uuid].photo = v;\n local().get('channels').get(chat.uuid).get('photo').put(v)\n });\n chat.on('about', v => local().get('channels').get(chat.uuid).get('about').put(v));\n chat.getParticipants(participants => {\n delete participants.undefined; // TODO fix where it comes from\n if (typeof participants === 'object') {\n let keys = Object.keys(participants);\n keys.forEach((k, i) => {\n let hue = 360 / Math.max(keys.length, 2) * i; // TODO use css filter brightness\n chat.participantProfiles[k] = {permissions: participants[k], color: `hsl(${hue}, 98%, ${isDarkMode ? 80 : 33}%)`};\n user(k).get('profile').get('name').on(name => {\n chat.participantProfiles[k].name = name;\n });\n });\n }\n local().get('channels').get(chat.uuid).get('participants').put(participants);\n });\n chat.inviteLinks = {};\n chat.getChatLinks({callback: ({url, id}) => {\n console.log('got chat link', id, url);\n chat.inviteLinks[id] = url; // TODO use State\n local().get('inviteLinksChanged').put(true);\n }});\n } else {\n local().get('groups').get('everyone').get(pub).put(true);\n this.addFollow(null, pub, Infinity);\n user(pub).get('profile').get('name').on(v => local().get('channels').get(pub).get('name').put(v))\n }\n if (chat.put) {\n chat.onTheir('webPushSubscriptions', (s, k, from) => {\n if (!Array.isArray(s)) { return; }\n chat.webPushSubscriptions = chat.webPushSubscriptions || {};\n chat.webPushSubscriptions[from || pub] = s;\n });\n const arr = Object.values(notifications.webPushSubscriptions);\n setTimeout(() => chat.put('webPushSubscriptions', arr), 5000);\n this.shareMyPeerUrl(chat);\n }\n chat.onTheir('call', call => {\n local().get('call').put({pub, call});\n });\n local().get('channels').get(pub).put({enabled:true});\n /* Disable private peer discovery, since they're not connecting anyway\n if (chat.onTheir) {\n chat.onTheir('my_peer', (url, k, from) => {\n console.log('Got private peer url', url, 'from', from);\n peers.addPeer({url, from})\n });\n }\n */\n\n });\n },\n\n // TODO: should perhaps be in Channel\n processMessage(chatId: string, msg: any, info: any, onClickNotification?: Function) {\n const chat = privateState(chatId);\n chat.messageIds = chat.messageIds || {};\n if (chat.messageIds[msg.time + info.from]) return;\n chat.messageIds[msg.time + info.from] = true;\n if (info) {\n msg = Object.assign(msg, info);\n }\n if (msg.invite) {\n const chatLink = `https://iris.to/?channelId=${msg.invite.group}&inviter=${chatId}`;\n this.newChannel(msg.invite.group, chatLink);\n return;\n }\n msg.selfAuthored = info.selfAuthored;\n local().get('channels').get(chatId).get('msgs').get(msg.time + (msg.from && msg.from.slice(0, 10))).put(JSON.stringify(msg));\n msg.timeObj = new Date(msg.time);\n if (!info.selfAuthored && msg.timeObj > chat.myLastSeenTime) {\n if (window.location.hash !== `#/chat/${ chatId}` || document.visibilityState !== 'visible') {\n notifications.changeChatUnseenCount(chatId, 1);\n } else if (ourActivity === 'active') {\n chat.setMyMsgsLastSeenTime();\n }\n }\n if (!info.selfAuthored && msg.time > chat.theirMsgsLastSeenTime) {\n local().get('channels').get(chatId).get('theirMsgsLastSeenTime').put(msg.time);\n }\n if (!chat.latestTime || (msg.time > chat.latestTime)) {\n local().get('channels').get(chatId).put({\n latestTime: msg.time,\n latest: {time: msg.time, text: msg.text, selfAuthored: info.selfAuthored}\n });\n }\n // TODO: onclickNotification should do route(`/chat/${ pub}`);\n notifications.notifyMsg(msg, info, chatId, onClickNotification);\n },\n\n subscribeToMsgs(pub) {\n const c = privateState(pub);\n if (c.subscribed) { return; }\n c.subscribed = true;\n c.getMessages((msg, info) => {\n this.processMessage(pub, msg, info);\n });\n },\n\n /**\n * Known private channels with other users\n */\n channelIds: new Set(),\n};\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport util from './util';\nimport Gun from 'gun'; // eslint-disable-line no-unused-vars\nimport 'gun/sea';\n// eslint-disable-line no-unused-vars\n\nlet myKey: any;\n\nclass Key {\n static async getActiveKey(datadir = `.`, keyfile = `iris.key`, fs?: any) {\n if (myKey) {\n return myKey;\n }\n if (fs) {\n const privKeyFile = `${datadir}/${keyfile}`;\n if (fs.existsSync(privKeyFile)) {\n const f = fs.readFileSync(privKeyFile, `utf8`);\n myKey = Key.fromString(f);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check ${datadir}/${keyfile}`);\n }\n } else {\n const str = window.localStorage.getItem(`iris.myKey`);\n if (str) {\n myKey = Key.fromString(str);\n } else {\n const newKey = await Key.generate();\n myKey = myKey || newKey; // eslint-disable-line require-atomic-updates\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n if (!myKey) {\n throw new Error(`loading default key failed - check localStorage iris.myKey`);\n }\n }\n return myKey;\n }\n\n static getDefault(datadir = `.`, keyfile = `iris.key`) {\n return Key.getActiveKey(datadir, keyfile);\n }\n\n static async getActivePub(datadir = `.`, keyfile = `iris.key`) {\n const key = await Key.getActiveKey(datadir, keyfile);\n return key.pub;\n }\n\n static setActiveKey(key: any, save = true, datadir = `.`, keyfile = `iris.key`, fs: any) {\n myKey = key;\n if (!save) return;\n if (util.isNode) {\n const privKeyFile = `${datadir}/${keyfile}`;\n fs.writeFileSync(privKeyFile, Key.toString(myKey));\n fs.chmodSync(privKeyFile, 400);\n } else {\n window.localStorage.setItem(`iris.myKey`, Key.toString(myKey));\n }\n }\n\n static toString(key: any) {\n return JSON.stringify(key);\n }\n\n static getId(key: any) {\n if (!(key && key.pub)) {\n throw new Error(`missing param`);\n }\n return key.pub; // hack until GUN supports lookups by keyID\n //return util.getHash(key.pub);\n }\n\n static fromString(str: string) {\n return JSON.parse(str);\n }\n\n static generate() {\n return Gun.SEA.pair();\n }\n\n static async sign(msg: any, pair: any) {\n const sig = await Gun.SEA.sign(msg, pair);\n return `a${sig}`;\n }\n\n static verify(msg: any, pubKey: any) {\n return Gun.SEA.verify(msg.slice(1), pubKey);\n }\n}\n\nexport default Key;\n","import publicSpace from './global';\nimport util from './util';\n\n/**\n * Content-addressed storage\n */\nexport default {\n /**\n * Get a file identified by its hash\n * @param hash\n * @param callback\n * @returns {Promise}\n */\n get(hash: string, callback: Function) {\n return new Promise((resolve, reject) => {\n if (!hash) {\n reject('No hash provided');\n }\n if (typeof hash !== 'string') {\n reject('Hash must be a string');\n }\n publicSpace().get('#').get(hash).on((v: any, _k: string, _x: any, e: any) => {\n if (v) {\n e.off();\n callback && callback(v);\n resolve(v);\n }\n });\n });\n },\n\n /**\n * Store a file and return its hash\n * @param value\n * @returns {Promise}\n */\n async put(value: any) {\n const hash = await util.getHash(value);\n publicSpace().get('#').get(hash).put(value);\n return hash;\n }\n}","// @ts-nocheck\n\n/*jshint unused: false */\n`use strict`;\nimport util from './util';\nimport Attribute from './Attribute';\nimport Key from './Key';\n\nconst errorMsg = `Invalid message:`;\n\nclass ValidationError extends Error {}\n\n/**\n* Signed message object. Your friends can index and relay your messages, while others can still verify that they were signed by you.\n*\n* Fields: signedData, signer (public key) and signature.\n*\n* signedData has an author, signer, type, time and optionally other fields.\n*\n* signature covers the utf8 string representation of signedData. Since messages are digitally signed, users only need to care about the message signer and not who relayed it or whose index it was found from.\n*\n* signer is the entity that verified its origin. In other words: message author and signer can be different entities, and only the signer needs to use Iris.\n*\n* For example, a crawler can import and sign other people's messages from Twitter. Only the users who trust the crawler will see the messages.\n*\n* Constructor: creates a message from the param obj.signedData that must contain at least the mandatory fields: author, type and time.\n* @param obj\n*\n* @example\n* https://github.com/irislib/iris-lib/blob/master/__tests__/SignedMessage.js\n*\n* Verification message:\n* {\n* signedData: {\n* author: {name:'Alice', key:'ABCD1234'},\n* recipient: {\n* name: 'Bob',\n* email: ['bob@example.com', 'bob.saget@example.com'],\n* bitcoin: '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'\n* },\n* type: 'verification'\n* },\n* signer: 'ABCD1234',\n* signature: '1234ABCD'\n* }\n*/\nclass SignedMessage {\n signedData: any;\n pubKey: any;\n sig: any;\n\n constructor(obj: any) {\n this.signedData = obj.signedData;\n this.pubKey = obj.pubKey;\n if (obj.sig) {\n if (typeof obj.sig !== `string`) {\n throw new ValidationError(`SignedMessage signature must be a string`);\n }\n this.sig = obj.sig;\n this.getHash();\n }\n this._validate();\n }\n\n static _getArray(authorOrRecipient) {\n const arr = [];\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n arr.push(new Attribute(type, value));\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n arr.push(new Attribute(type, elementValue));\n }\n }\n }\n return arr;\n }\n\n static _getIterable(authorOrRecipient) {\n return {\n *[Symbol.iterator]() {\n const keys = Object.keys(authorOrRecipient);\n for (let i = 0;i < keys.length;i++) {\n const type = keys[i];\n const value = authorOrRecipient[keys[i]];\n if (typeof value === `string`) {\n yield new Attribute(type, value);\n } else { // array\n for (let j = 0;j < value.length;j++) {\n const elementValue = value[j];\n yield new Attribute(type, elementValue);\n }\n }\n }\n }\n };\n }\n\n getAuthorIterable() {\n return SignedMessage._getIterable(this.signedData.author);\n }\n\n getRecipientIterable() {\n return SignedMessage._getIterable(this.signedData.recipient);\n }\n\n getAuthorArray() {\n return SignedMessage._getArray(this.signedData.author);\n }\n\n getRecipientArray() {\n return this.signedData.recipient ? SignedMessage._getArray(this.signedData.recipient) : [];\n }\n\n getSignerKeyID() {\n return this.pubKey; // hack until gun supports keyID lookups\n //return util.getHash(this.pubKey);\n }\n\n _validate() {\n if (!this.signedData) {throw new ValidationError(`${errorMsg} Missing signedData`);}\n if (typeof this.signedData !== `object`) {throw new ValidationError(`${errorMsg} signedData must be an object`);}\n const d = this.signedData;\n\n if (!d.type) {throw new ValidationError(`${errorMsg} Missing type definition`);}\n if (!d.author) {throw new ValidationError(`${errorMsg} Missing author`);}\n if (typeof d.author !== `object`) {throw new ValidationError(`${errorMsg} Author must be object`);}\n if (Array.isArray(d.author)) {throw new ValidationError(`${errorMsg} Author must not be an array`);}\n if (Object.keys(d.author).length === 0) {throw new ValidationError(`${errorMsg} Author empty`);}\n if (this.pubKey) {\n this.signerKeyHash = this.getSignerKeyID();\n }\n for (const attr in d.author) {\n const t = typeof d.author[attr];\n if (t !== `string`) {\n if (Array.isArray(d.author[attr])) {\n for (let i = 0;i < d.author[attr].length;i++) {\n if (typeof d.author[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Author attribute must be string, got ${attr}: [${d.author[attr][i]}]`);}\n if (d.author[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} author ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Author attribute must be string or array, got ${attr}: ${d.author[attr]}`);\n }\n }\n if (attr === `keyID`) {\n if (t !== `string`) {throw new ValidationError(`${errorMsg} Author keyID must be string, got ${t}`);}\n if (this.signerKeyHash && d.author[attr] !== this.signerKeyHash) {throw new ValidationError(`${errorMsg} If message has a keyID author, it must be signed by the same key`);}\n }\n }\n if (d.recipient) {\n if (typeof d.recipient !== `object`) {throw new ValidationError(`${errorMsg} Recipient must be object`);}\n if (Array.isArray(d.recipient)) {throw new ValidationError(`${errorMsg} Recipient must not be an array`);}\n if (Object.keys(d.recipient).length === 0) {throw new ValidationError(`${errorMsg} Recipient empty`);}\n for (const attr in d.recipient) {\n const t = typeof d.recipient[attr];\n if (t !== `string`) {\n if (Array.isArray(d.recipient[attr])) {\n for (let i = 0;i < d.recipient[attr].length;i++) {\n if (typeof d.recipient[attr][i] !== `string`) {throw new ValidationError(`${errorMsg} Recipient attribute must be string, got ${attr}: [${d.recipient[attr][i]}]`);}\n if (d.recipient[attr][i].length === 0) {\n throw new ValidationError(`${errorMsg} recipient ${attr} in array[${i}] is empty`);\n }\n }\n } else {\n throw new ValidationError(`${errorMsg} Recipient attribute must be string or array, got ${attr}: ${d.recipient[attr]}`);\n }\n }\n }\n }\n if (!(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Missing time field`);}\n\n if (!Date.parse(d.time || d.timestamp)) {throw new ValidationError(`${errorMsg} Invalid time field`);}\n\n if (d.type === `rating`) {\n if (isNaN(d.rating)) {throw new ValidationError(`${errorMsg} Invalid rating`);}\n if (isNaN(d.maxRating)) {throw new ValidationError(`${errorMsg} Invalid maxRating`);}\n if (isNaN(d.minRating)) {throw new ValidationError(`${errorMsg} Invalid minRating`);}\n if (d.rating > d.maxRating) {throw new ValidationError(`${errorMsg} Rating is above maxRating`);}\n if (d.rating < d.minRating) {throw new ValidationError(`${errorMsg} Rating is below minRating`);}\n if (typeof d.context !== `string` || !d.context.length) {throw new ValidationError(`${errorMsg} Rating messages must have a context field`);}\n }\n\n if (d.type === `verification` || d.type === `unverification`) {\n if (d.recipient.length < 2) {throw new ValidationError(`${errorMsg} At least 2 recipient attributes are needed for a connection / disconnection. Got: ${d.recipient}`);}\n }\n\n return true;\n }\n\n isPositive() {\n return this.signedData.type === `rating` && this.signedData.rating > (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNegative() {\n return this.signedData.type === `rating` && this.signedData.rating < (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n isNeutral() {\n return this.signedData.type === `rating` && this.signedData.rating === (this.signedData.maxRating + this.signedData.minRating) / 2;\n }\n\n /**\n * @param {Object} key Gun.SEA keypair to sign the message with\n */\n async sign(key) {\n this.sig = await Key.sign(this.signedData, key);\n this.pubKey = key.pub;\n await this.getHash();\n return true;\n }\n\n /**\n * Create an iris message. SignedMessage time is automatically set. If signingKey is specified and author omitted, signingKey will be used as author.\n * @param {Object} signedData message data object including author, recipient and other possible attributes\n * @param {Object} signingKey optionally, you can set the key to sign the message with\n * @returns {Promise} message\n */\n static async create(signedData, signingKey) {\n if (!signedData.author && signingKey) {\n signedData.author = {keyID: Key.getId(signingKey)};\n }\n signedData.time = signedData.time || (new Date()).toISOString();\n const m = new SignedMessage({signedData});\n if (signingKey) {\n await m.sign(signingKey);\n }\n return m;\n }\n\n static createVerification(signedData, signingKey) {\n signedData.type = `verification`;\n return SignedMessage.create(signedData, signingKey);\n }\n\n static createRating(signedData, signingKey) {\n signedData.type = `rating`;\n signedData.context = signedData.context || `iris`;\n signedData.maxRating = signedData.maxRating || 10;\n signedData.minRating = signedData.minRating || -10;\n return SignedMessage.create(signedData, signingKey);\n }\n\n getAuthor(index) {\n for (const a of this.getAuthorIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n getRecipient(index) {\n if (!this.signedData.recipient) {\n return undefined;\n }\n for (const a of this.getRecipientIterable()) {\n if (a.isUniqueType()) {\n return index.getContacts(a);\n }\n }\n }\n\n /**\n * @returns {string} base64 sha256 hash of message\n */\n async getHash() {\n if (this.sig && !this.hash) {\n this.hash = await util.getHash(this.sig);\n }\n return this.hash;\n }\n\n getId() {\n return this.getHash();\n }\n\n static async fromSig(obj) {\n if (!obj.sig) {\n throw new Error(`Missing signature in object:`, obj);\n }\n if (!obj.pubKey) {\n throw new Error(`Missing pubKey in object:`);\n }\n //const signedData = await Key.verify(obj.sig, obj.pubKey); // disable sig verification while migrating to new gun :(\n const signedData = JSON.parse(obj.sig.slice(4)).m;\n const o = {signedData, sig: obj.sig, pubKey: obj.pubKey};\n return new SignedMessage(o);\n }\n\n /**\n * @return {boolean} true if message signature is valid. Otherwise throws ValidationError.\n */\n async verify() {\n if (!this.pubKey) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .pubKey`);\n }\n if (!this.sig) {\n throw new ValidationError(`${errorMsg} SignedMessage has no .sig`);\n }\n this.signedData = await Key.verify(this.sig, this.pubKey);\n if (!this.signedData) {\n throw new ValidationError(`${errorMsg} Invalid signature`);\n }\n if (this.hash) {\n if (this.hash !== (await util.getHash(this.sig))) {\n throw new ValidationError(`${errorMsg} Invalid message hash`);\n }\n } else {\n this.getHash();\n }\n return true;\n }\n\n /**\n * @returns {string}\n */\n serialize() {\n return {sig: this.sig, pubKey: this.pubKey};\n }\n\n toString() {\n return JSON.stringify(this.serialize());\n }\n\n /**\n * @returns {Promise}\n */\n static async deserialize(s) {\n return SignedMessage.fromSig(s);\n }\n\n static async fromString(s) {\n return SignedMessage.fromSig(JSON.parse(s));\n }\n\n static async setReaction(gun, msg, reaction) {\n const hash = await msg.getHash();\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`reactions`).get(hash).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n gun.get(`messagesByHash`).get(hash).get(`reactions`).get(this.rootContact.value).put(reaction);\n }\n}\n\nexport default SignedMessage;\n","/*eslint no-useless-escape: \"off\", camelcase: \"off\" */\n\nimport Gun from 'gun';\nimport 'gun/sea';\n\nimport session from './session';\nimport peers from './peers';\nimport util from './util';\nimport local from './local';\nimport global from './global';\nimport publicState from './public';\nimport group from './group';\nimport electron from './electron';\nimport privateState from './private';\nimport staticState from './static';\nimport notifications from './notifications';\n\nimport SignedMessage from './SignedMessage';\nimport Channel from './Channel';\nimport Node from './Node';\n\nexport default {\n local,\n global,\n\n group,\n public: publicState,\n private: privateState,\n static: staticState,\n electron,\n peers,\n session,\n util,\n notifications,\n\n SEA: Gun.SEA,\n Gun,\n SignedMessage,\n Channel,\n Node,\n};"],"names":["USE","arg","req","require","slice","R","mod","path","exports","p","split","toString","replace","MODULE","module","String","random","l","c","s","charAt","Math","floor","length","match","t","o","tmp","u","=","hash","i","charCodeAt","sT","sI","check","has","Object","prototype","hasOwnProperty","plain","constructor","call","empty","n","k","indexOf","keys","push","setTimeout","setImmediate","f","MessageChannel","port1","onmessage","e","data","q","port2","postMessage","performance","now","Date","hold","poll","turn","T","each","S","L","r","splice","onto","tag","as","to","this","_","next","be","off","the","last","back","on","v","Infinity","State","N","drift","D","NI","is","ify","soul","opt","dup","max","age","id","dt","track","it","was","drop","ed","console","STAT","cb","lack","clearTimeout","err","Gun","$","create","version","chain","toJSON","valid","state","ask","universe","msg","out","at","gun","DBG","text_rand","put","ctx","acks","fire","ok","stop","crack","root","ack","get","uc","ua","nts","NTS","ue","faith","miss","latch","hatch","CT","all","stun","nl","pk","nj","kl","node","states","ni","pop","pd","ERR","cut","key","val","ham","C","graph","vertex","state_is","known","MD","Hf","aid","ph","#","@",".",":",">","map","pa","pm","state_ify","end","CF","once","JSON","stringify","window","log","sort","F","gk","go","ram","ga","%","FOO","g","peers","Array","forEach","url","obj_each","from","uuid","apply","arguments","join","w","GUN","only","yes","link","cat","$$","tat","echo","pass","sat","lex","unlink","change","linked","ev","sub","in","obj_has","via","VIA","seen","$$$","any","lat","rid","cache","jam","eve","super","wait","test","not","a","run","add","v2020","ran","todo","d","ref","walk","name","reverse","up","resolve","noop","eas","act","subs","nix","none","one","neat","set","item","parse","parseAsync","json","sucks","stringifyAsync","mesh","gap","memory","pack","puff","dup_check","dup_track","hear","raw","peer","say","dam","SH","P","m","flush","batch","tail","send","wire","queue","ash","h","hp","leap","yo","near","SI","hd","loop","SMIA","sorta","text","ss","$put","meta","y","way","yh","yr","ps","pl","wr","pid","yp","ST","/","res","hi","met","bye","time","close","souls","SUBS","##","Mesh","WebSocket","env","websocket","webkitWebSocket","mozWebSocket","open","doc","document","onclose","reconnect","onerror","onopen","defer","retry","tried","hidden","store","localStorage","setItem","removeItem","getItem","lg","disk","size","prefix","file","DEP","warn","Type","fn","bi","b","Boolean","num","list_is","parseFloat","list","slit","A","B","obj_map","index","obj","boj","del","obj_is","copy","x","ll","lle","ii","getTime","fn_is","Val","text_is","bi_is","num_is","rel","rel_","obj_put","Node","soul_","text_random","obj_del","obj_copy","N_","Graph","nf","obj_empty","arr","shell","concat","prev","invalid","self","SEA","location","protocol","host","hostname","btoa","Buffer","global","atob","SeaArray","assign","enc","start","buf","Uint8Array","padStart","fromCharCode","SafeBuffer","props","[object Object]","TypeError","input","bytes","byte","parseInt","words","Uint16Array","dec","info","byteLength","ArrayBuffer","alloc","fill","allocUnsafe","isArray","reduce","ret","api","Promise","rej","crypto","msCrypto","subtle","webkitSubtle","TextEncoder","TextDecoder","len","getRandomValues","randomBytes","Crypto","WebCrypto","ossl","directory","shim","pbkdf2","iter","ks","ecdsa","pair","namedCurve","sign","ecdh","jwk","pub","kty","crv","ext","key_ops","keyToJwk","keyBytes","alg","recall","validity","hook","async","digest","encode","__shim","sha","work","salt","epub","Function","toLowerCase","rsha","importKey","deriveBits","iterations","throw","ecdhSubtle","sa","generateKey","then","priv","exportKey","privateKey","publicKey","dh","epriv","I","what","how","why","verify","sig","slow_leak","fallback","fall_verify","knownKeys","O","unpack","fall_soul","fall_key","fall_val","fall_state","sha256hash","combo","jwkKey","aeskey","encrypt","rand","iv","ct","aes","decrypt","bufiv","bufct","tagLength","decode","secret","pubKeyData","keysToEcdhJwk","public","privKeyData","privKey","derivedBits","rawBits","derivedKey","certify","certificants","policy","authority","certificant","expiry","readPolicy","read","writePolicy","write","block","blacklist","ban","readBlock","writeBlock","rb","wb","keyid","pb","sha1","sha1hash","User","user","args","alias","filter","ing","pubs","already","leave","proof","sea","auth","ek","sS","sessionStorage","obj_ify","tries","shift","half","lol","upt","shuffle","z","remember","plugin","proxy","Proxy","DANGER","delete","alive","gunRoot","authRecall","trust","theirPubkey","grant","sec","no","own","hexStr","base64","substring","hexToBase64","link_is","certificate","value","cert","packed","~","secure","pubcut","stringy","fl","shuffle_attack","func","limit","inThrottle","context","inDebounce","newObj","includes","isNode","process","userAgent","navigator","isElectron","animals","adjectives","gunOnceDefined","_k","_a","undefined","gunAsAnotherUser","gun2","radisk","values","getHash","str","format","_context","Error","_this","base64ToHex","capitalize","toUpperCase","generateName","result","hex","getCaret","el","selectionStart","selection","focus","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","injectCss","getElementById","sheet","createElement","innerHTML","head","prepend","getUrlParameter","sParam","sParams","sParameterName","sURLVariables","search","decodeURIComponent","formatTime","date","toLocaleTimeString","timeStyle","formatDate","toLocaleString","dateStyle","getDaySeparatorText","dateStr","nowStr","toLocaleDateString","dayDifference","round","weekday","getProfileLink","origin","encodeURIComponent","truncateString","type","cls","parent","setAttribute","appendChild","isMobile","vendor","substr","throttle","debounce","delay","sample","sampleSize","temp","shuffled","min","called","omit","yson","isNaN","trim","done","revive","M","j","sl","ai","replacer","space","YSON","Radix","radix","unit","kk","__","debug","rap","pre","rev","branch","pt","tree","error","object","Radisk","ename","until","chunk","code","jsonify","timediate","save","find","sf","mix","sml","sm","bad","compare","tags","st","Q","sto","sal","ne","RPC","RWC","rad","force","wd","wa","wp","wf","count","wfc","ceil","SC","wf1","wf2","both","wf3","hub","wf4","wf5","wfd","ws","range","rf","rgl","rg","rr","chunks","parsed","more","rl","rm","rpg","rpl","rpa","radec","rpd","rp","dir","init","drain","found","require$$2","require$$0","TESTING","RAD","require$$1","dare","esc","sp","RPS","spd","sps","sg","atom","va","lastIndexOf","sgm","sgr","sgi","stats","statg","ve","so","ha","sgp","sgd","Store","db","indexedDB","onupgradeneeded","target","createObjectStore","onsuccess","tx","transaction","objectStore","onabort","setInterval","RindexedDB","ELECTRON_GUN_URL","DEFAULT_PEERS","https://gun-rs.iris.to/gun","https://gun-us.herokuapp.com/gun","loc","is_localhost_but_not_dev","startsWith","endsWith","enabled","urlRegex","visibility","Session","getKey","encryptedUrl","encryptedUrlHash","publicState","lastSeen","toISOString","connect","remove","disconnect","peerFromGun","getSaved","util","defaults","reset","isMixedContent","disable","predicate","connectToLocalElectron","maxConnectedPeers","_this2","checkGunPeerCount","peersFromGun","connectedPeers","readyState","bufferedAmount","unconnectedPeers","addedToGun","_this3","_this4","opts","myOpts","currentUser","UNIQUE_ID_VALIDATORS","email","bitcoin","bitcoin_address","ip","ipv6","gpg_fingerprint","gpg_keyid","google_oauth2","tel","phone","keyID","account","Attribute","guessTypeOf","getUuid","getUniqueIdValidators","isUniqueType","_proto","equals","uri","session","DEFAULT_PERMISSIONS","admin","Channel","options","myGroupSecret","chatLink","useChatLink","participants","addParticipant","founder","getChatLinks","subscribe","putDirect","getMyGroupSecret","getMySecretUuid","onTheirDirect","theirSecretUuids","theirGroupSecrets","onTheir","hasAdmin","inviter","participantsChanged","saved","chatWith","channelId","sharedSecret","linkId","encrypted","sharedKey","encryptedChatRequest","channelRequestId","getTheirSecretUuid","getTheirGroupSecret","changeMyGroupSecret","mute","participant","secrets","ourSecretChannelIds","theirSecretChannelIds","mySecretUuid","_context4","mySecret","mySecretHash","getCurrentParticipants","getParticipants","callback","getParticipantsCallbackId","getParticipantsCallbacks","getId","getSecret","_context5","getOurSecretChannelId","_context6","getTheirSecretChannelId","_context7","getChannels","listenToChatLinks","keypair","_context9","getMyChatLinks","handleChannel","ourSecretChannelId","_context8","encryptedChatId","chatId","_context10","_context11","getMessages","_context12","_this5","theirSecretChannelId","messageReceived","userState","_context13","selfAuthored","messages","_context14","decrypted","getLatestMsg","callbackIfLatest","_this6","latest","onMy","setMyMsgsLastSeenTime","getMyMsgsLastSeenTime","_this7","myMsgsLastSeenTime","getTheirMsgsLastSeenTime","_this8","theirMsgsLastSeenTime","removeParticipant","permissions","_context21","_this9","directSubscriptions","_onTheirDirectFromUser","groupSubscriptions","_onTheirGroupFromUser","event","_context22","_context23","putGroup","_context25","_context26","onGroup","onDirect","onMyGroup","onTheirGroup","onMyDirect","_context33","_loop","_context32","_this10","_context31","_context35","_context34","hasWritePermission","_context38","_this11","_context37","_context40","_context39","_this12","subscription","_context42","theirSecretUuid","_b","_this13","_context41","_context44","_context43","_this14","setTyping","isTyping","timeout","setTypingTimeout","_this15","getTyping","typing","_this16","getTypingTimeouts","addChatButton","label","channelOptions","channel","box","btn","body","addEventListener","getChatBox","getSimpleLink","urlRoot","_opts","_context46","chatLinks","chatLinkSubscriptions","links","channels","formatChatLink","_this17","encPub","requestId","_context45","createChatLink","_context47","sharedKeyString","encryptedSharedKey","ownerSecret","ownerEncryptedSharedKey","minimized","chatBox","header","minimize","innerText","stopPropagation","headerText","onlineIndicator","nameEl","openChatBtn","typingIndicator","inputWrapper","textArea","sendBtn","_this18","getActivity","status","isActive","querySelectorAll","getAttribute","lastActive","indicator","msgEl","parentElement","msgClass","msgContent","children","insertBefore","firstChild","insertAdjacentElement","scrollTop","scrollHeight","setActivity","keyCode","preventDefault","content","caret","shiftKey","activity","irisActivityStatus","setActivityTimeout","update","timerUpdate","pubKey","activityDate","isOnline","_context48","_context51","_context50","_context49","removeGroupChatLink","removePrivateChatLink","deleteChannel","_context52","deleteGroup","_context53","Map","1","_dereq_","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","observer","nextTick","element","createTextNode","observe","characterData","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","oldQueue","task","2","immediate","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","returnValue","reject","getThen","thenable","onError","onSuccess","tryCatch","reason","iterable","resolved","allResolver","outValue","race","response","3","4","_typeof","Symbol","iterator","idb","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","getIDB","createBlob","parts","properties","Blob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","append","getBlob","Promise$1","executeCallback","executeTwoCallbacks","errorCallback","normalizeKey","getCallback","supportsBlobs","dbContexts","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","_getConnection","upgradeNeeded","forages","dbArgs","openreq","storeName","oldVersion","ex","newVersion","onversionchange","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isUpgrade","incVersion","_decodeBlob","encodedBlob","bin","_binStringToArrayBuffer","_isEncodedBlob","__local_forage_encoded_blob","_fullyReady","_initReady","_dbInfo","createTransaction","mode","retries","forage","_tryReconnect","asyncStorage","_driver","_initStorage","ready","initPromises","ignoreErrors","_defaultConfig","_support","isSafari","openDatabase","platform","hasFetch","fetch","IDBKeyRange","isIndexedDBValid","iterate","openCursor","iterationNumber","cursor","txn","blob","oncomplete","matchedChrome","matchedEdge","_checkBlobSupportWithoutCaching","_checkBlobSupport","blobSupport","reader","FileReader","onloadend","readAsBinaryString","clear","advanced","openKeyCursor","advance","dropInstance","currentConfig","config","isCurrentDb","dbPromise","deleteObjectStore","_forage2","deleteDatabase","onblocked","BASE_CHARS","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER_LENGTH","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","buffer","bufferToString","base64String","localforageSerializer","serialize","valueType","marker","fileReader","onload","SERIALIZED_MARKER","readAsArrayBuffer","deserialize","blobType","matcher","Int8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint32Array","Float32Array","Float64Array","createDbTable","executeSql","tryExecuteSql","sqlStatement","SYNTAX_ERR","results","rows","_setItem","retriesLeft","originalValue","serializer","sqlError","QUOTA_ERR","getAllStoreNames","storeNames","webSQLStorage","dbInfoPromise","description","operationInfo","dropTable","operations","_getKeyPrefix","defaultConfig","keyPrefix","localStorageWrapper","checkIfLocalStorageThrows","isLocalStorageValid","keyPrefixLength","itemKey","array","searchElement","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","localforage_js","LocalForage","driverTypeKey","instance","Constructor","_classCallCheck","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","configureMissingMethods","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","oldDriverSetDone","currentDriverIndex","driverPromiseLoop","initDriver","supports","libraryMethodsAndProperties","createInstance","notInLocalForage","Set","localForage","local","loaded","loadLocalForage","_context3","newResult","_context2","on_subscriptions","_loop3","map_subscriptions","_loop2","existing","new_node","saveLocalForage","doCallbacks","returnIfUndefined","counter","blockedUsers","isBlocked","_v","callbacks","groupName","groupNode","follows","requestAnimationFrame","isFollowing","userSpace","sum","_cached_map","cached","cacheKey","myEvent","_cached_on","_cached_count","_cached_fn","callbackId","myCallbacks","loginTime","unseenMsgsTotal","unseenNotificationCount","webPushSubscriptions","desktopNotificationsEnabled","Notification","permission","publicVapidKey","urlBase64ToUint8Array","repeat","rawData","outputArray","_subscribe","reg","pushManager","userVisibleOnly","applicationServerKey","addWebPushSubscription","_subscribeToWebPush","serviceWorker","getRegistration","active","getSubscription","addWebPushSubscriptionsToChats","channelIds","privateState","_addWebPushSubscription","saveToGun","myKey","_getWebPushSubscriptions","getEpub","getNotificationText","_getNotificationText","notification","profile","action","changeUnseenNotificationCount","_sendIrisNotification","recipient","_sendWebPushNotification","subscriptions","title","payload","endpoint","method","headers","content-type","_ret","notifyMsg","onClick","shouldNotify","timeObj","visibilityState","notificationSetting","getMyName","participantProfiles","icon","silent","onclick","sendWebPushNotification","subscribeToIrisNotifications","notificationsSeenTime","notificationsShownTime","setNotificationsShownTime","alreadyHave","group","getPubKey","encryptedNotification","sendIrisNotification","changeChatUnseenCount","chat","chatNode","unseen","subscribeToWebPush","getWebPushSubscriptions","removeSubscription","getTag","isString","isNumber","isObject","isDefined","isBlank","hasOwn","KeyStore","_keys","_keyMap","totalWeight","createKey","weight","keyId","src","getFn","createKeyPath","createKeyId","INVALID_KEY_WEIGHT_VALUE","Config","isCaseSensitive","includeScore","shouldSort","sortFn","score","idx","includeMatches","findAllMatches","minMatchCharLength","threshold","distance","useExtendedSearch","deepGet","isObjectLike","isBoolean","baseToString","ignoreLocation","ignoreFieldNorm","fieldNormWeight","SPACE","FuseIndex","norm","mantissa","pow","numTokens","isCreated","setIndexRecords","docs","records","_keysMap","docIndex","_addString","_addObject","record","keyIndex","subRecords","stack","nestedArrIndex","subRecord","createIndex","myIndex","setKeys","setSources","computeScore$1","pattern","errors","currentLocation","expectedLocation","accuracy","proximity","abs","createPatternAlphabet","mask","char","BitapSearch","addChunk","startIndex","alphabet","remainder","isMatch","indices","allIndices","totalScore","hasMatches","patternAlphabet","patternLen","textLen","currentThreshold","bestLocation","computeMatches","matchMask","lastBitArr","finalScore","binMax","binMin","binMid","finish","bitArr","charMatch","matchmask","convertMaskToIndices","BaseMatch","getMatch","multiRegex","singleRegex","exp","matches","FuzzyMatch","_bitapSearch","searchIn","IncludeMatch","searchers","searchersLen","SPACE_RE","MultiMatchSet","registeredSearchers","createSearcher","searcherClass","condition","isExpression","query","convertToExplicit","$and","auto","isQueryPath","isPath","isLeaf","LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY","searcher","operator","transformMatches","refIndex","transformScore","Fuse","_keyStore","setCollection","_docs","_myIndex","removeAt","_searchStringList","_searchObjectList","_searchLogical","Number","EPSILON","computeScore","transformers","transformer","expression","evaluate","_findMatches","getValueForItemAtKeyId","resultMap","expResults","parseIndex","parseQuery","register","queryItem","token","isMultiMatch","isSingleMatch","numMatches","qLen","pLen","myName","latestChatLink","onlineTimeout","ourActivity","noFollows","noFollowers","searchIndex","initCalled","electron","multicast","searchableItems","getExtendedFollowsCalled","DEFAULT_FOLLOW","DEFAULT_SETTINGS","openAtLogin","minimizeOnClose","enableWebtorrent","enablePublicPeerDiscovery","autoplayWebtorrent","localStorageKey","login","autologin","loginAsNewUser","clearIndexedDB","updateSearchIndex","taskQueue","saveSearchResult","followDistance","followerCount","followers","addFollow","follower","updateNoFollows","updateNoFollowers","removeFollow","getExtendedFollows","maxDepth","currentDepth","followedKey","getSearchIndex","setOurOnlineStatus","activeRoute","setActive","pathname","notifications","updateGroups","shouldRefresh","addChannel","settings","reload","autofollow","logOut","_reg$active","unsubscribe","localforage","href","r1","r2","r1done","r2done","getMyChatLink","myPeerUrl","shareMyPeerUrl","myIp","newChannel","latestTime","theirMsgsLastSeenDate","processMessage","myLastSeenTime","online","theirLastActiveTime","isDarkMode","matchMedia","photo","hue","color","inviteLinks","onClickNotification","messageIds","invite","subscribeToMsgs","subscribed","publicSpace","_x","Key","getActiveKey","datadir","keyfile","fs","existsSync","privKeyFile","readFileSync","fromString","generate","newKey","writeFileSync","chmodSync","getDefault","getActivePub","setActiveKey","errorMsg","ValidationError","SignedMessage","signedData","_validate","_getArray","authorOrRecipient","_getIterable","elementValue","getAuthorIterable","author","getRecipientIterable","getAuthorArray","getRecipientArray","getSignerKeyID","attr","signerKeyHash","timestamp","rating","maxRating","minRating","isPositive","isNegative","isNeutral","signingKey","createVerification","createRating","getAuthor","getContacts","getRecipient","fromSig","setReaction","reaction","rootContact","private","static","staticState"],"mappings":"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,QACA,WACA,WACA,UACA,OACA,MACA,WACA,cACA,UACA,SACA,YACA,aACA,YACA,UACA,YACA,UACA,aACA,aACA,WACA,OACA,YACA,QACA,YACA,MACA,SACA,cACA,QACA,SACA,MACA,SACA,OACA,QACA,UACA,WACA,UACA,YACA,OACA,SACA,SACA,YACA,OACA,QACA,WACA,MACA,UACA,SACA,WACA,OACA,YACA,SACA,OACA,QACA,YACA,SACA,UACA,MACA,QACA,WACA,MACA,MACA,SACA,SACA,SACA,QACA,UACA,OACA,WACA,OACA,MACA,aACA,OACA,MACA,OACA,WACA,YACA,UACA,QACA,SACA,SACA,UACA,OACA,WACA,QACA,SACA,UACA,cACA,SACA,OACA,UACA,aACA,OACA,QACA,UACA,UACA,UACA,OACA,UACA,OACA,WACA,QACA,UACA,eACA,WACA,SACA,QACA,WACA,cACA,QACA,SACA,SACA,SACA,SACA,MACA,YACA,aACA,WACA,aACA,OACA,OACA,QACA,MACA,QACA,UACA,UACA,WACA,OACA,QACA,UACA,QACA,UACA,SACA,SACA,OACA,SACA,QACA,UACA,SACA,OACA,QACA,WACA,OACA,QACA,WACA,SACA,SACA,UACA,WACA,SACA,WACA,SACA,YACA,SACA,WACA,aACA,UACA,OACA,SACA,OACA,cACA,OACA,UACA,WACA,SACA,QACA,WACA,OACA,QACA,OACA,SACA,UACA,OACA,cACA,SACA,UACA,UACA,YACA,OACA,UACA,QACA,MACA,KACA,QACA,UACA,WACA,SACA,aACA,YACA,UACA,UACA,UACA,UACA,QACA,WACA,MACA,SACA,OACA,WACA,UACA,YACA,WACA,OACA,YACA,WACA,SACA,QACA,UACA,YACA,SACA,OACA,SACA,QACA,SACA,SACA,SACA,UACA,MACA,cACA,QACA,WACA,UACA,aACA,aACA,SACA,OACA,UACA,YACA,WACA,aACA,SACA,UACA,UACA,WACA,WACA,QACA,QACA,QACA,SACA,WACA,aACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,OACA,UACA,SACA,YACA,QACA,WACA,WACA,WACA,QACA,QACA,WACA,UACA,OACA,QACA,YACA,YACA,OACA,QACA,QACA,YACA,UACA,UACA,OACA,SACA,OACA,QACA,SACA,OACA,WACA,SACA,QACA,OACA,SACA,SACA,gBACA,QACA,SACA,QACA,OACA,UACA,UACA,SACA,OACA,UACA,SACA,QACA,UACA,YACA,UACA,aACA,WACA,OACA,YACA,SACA,aACA,OACA,OACA,UACA,MACA,QACA,SACA,MACA,SACA,UACA,MACA,SACA,SACA,QACA,WACA,QACA,QACA,MACA,QACA,QACA,MACA,WAGIC,EAAa,CACjB,UACA,MACA,WACA,MACA,QACA,WACA,QACA,OACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,OACA,QACA,QACA,OACA,OACA,UACA,SACA,SACA,QACA,SACA,OACA,OACA,SACA,UACA,SACA,QACA,UACA,OACA,QACA,MACA,QACA,SACA,QACA,SACA,MACA,QACA,SACA,UACA,SACA,OACA,OACA,OACA,SACA,MACA,SACA,QACA,UACA,SACA,SACA,QACA,WACA,OACA,UACA,QACA,QACA,OACA,OACA,OACA,SACA,MACA,QACA,QACA,QACA,OACA,QACA,QACA,WACA,QACA,MACA,QACA,QACA,OACA,WACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,OACA,UACA,UACA,OACA,QACA,UACA,QACA,QACA,WACA,aACA,SACA,SACA,OACA,YACA,aACA,YACA,aACA,SACA,YACA,QACA,QACA,OACA,SACA,QACA,OACA,QACA,QACA,SACA,SACA,QACA,YACA,QACA,UACA,aACA,QACA,SACA,SACA,OACA,MACA,MACA,QACA,SACA,UACA,UACA,QACA,QACA,YACA,SACA,QACA,QACA,YACA,QACA,QACA,WACA,SACA,OACA,QACA,SACA,SACA,SACA,QACA,SACA,OACA,MACA,SACA,SACA,QACA,UACA,UACA,WACA,UACA,QACA,MACA,aACA,QACA,YACA,YACA,WACA,SACA,QACA,YACA,WACA,UACA,YACA,YACA,YACA,QACA,cACA,UACA,OACA,SACA,UACA,UACA,aACA,WACA,WACA,WACA,SACA,OACA,MACA,UACA,SACA,aACA,UACA,UACA,YACA,aACA,UACA,YACA,QACA,WACA,UACA,OACA,QACA,WACA,cACA,QACA,WACA,QACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,OACA,WACA,WACA,cACA,cACA,aACA,aACA,aACA,QACA,SACA,aACA,cACA,YACA,eACA,UACA,YACA,OACA,WACA,YACA,OACA,WACA,QACA,SACA,WACA,OACA,QACA,UACA,UACA,YACA,QACA,SACA,OACA,SACA,SACA,QACA,WACA,UACA,WACA,QACA,WACA,QACA,UACA,WACA,aACA,aACA,aACA,YACA,QACA,YACA,UACA,OACA,QACA,OACA,MACA,MACA,QACA,OACA,QACA,YACA,QACA,QACA,SACA,YACA,OACA,QACA,WACA,UACA,QACA,QACA,WACA,MACA,SACA,YACA,OACA,OACA,UACA,OACA,MACA,MACA,SACA,YACA,MACA,OACA,OACA,QACA,QACA,WACA,OACA,SACA,OACA,QACA,aACA,gBACA,UACA,YACA,UACA,OACA,QACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,UACA,QACA,SACA,YACA,SACA,WACA,OACA,UACA,OACA,YACA,OACA,UACA,SACA,SACA,YACA,WACA,UACA,QACA,OACA,UACA,QACA,UACA,QACA,UACA,aACA,OACA,SACA,WACA,YACA,cACA,aACA,SACA,UACA,WACA,SACA,UACA,SACA,SACA,QACA,QACA,QACA,MACA,SACA,UACA,WACA,QACA,QACA,cACA,aACA,QACA,OACA,WACA,cACA,MACA,SACA,QACA,WACA,WACA,aACA,QACA,MACA,UACA,QACA,eACA,SACA,OACA,OACA,QACA,QACA,SACA,YACA,UACA,cACA,WACA,SACA,cACA,OACA,cACA,eACA,WACA,WACA,MACA,WACA,cACA,WACA,UACA,OACA,QACA,OACA,OACA,aACA,OACA,YACA,YACA,QACA,UACA,UACA,SACA,gBACA,WACA,SACA,UACA,SACA,WACA,OACA,OACA,aACA,OACA,WACA,YACA,WACA,WACA,MACA,QACA,UACA,MACA,aACA,SACA,WACA,UACA,WACA,aACA,QACA,OACA,SACA,QACA,SACA,QACA,WACA,SACA,SACA,YACA,WACA,QACA,UACA,WACA,YACA,QACA,OACA,YACA,WACA,YACA,QACA,OACA,SACA,WACA,SACA,QACA,QACA,SACA,UACA,eACA,SACA,QACA,MACA,SACA,QACA,UACA,cACA,SACA,UACA,UACA,aACA,YACA,WACA,QACA,WACA,UACA,UACA,SACA,SACA,aACA,UACA,aACA,aACA,UACA,UACA,MACA,QACA,YACA,cACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,UACA,OACA,OACA,MACA,aACA,OACA,QACA,WACA,aACA,OACA,QACA,QACA,QACA,UACA,SACA,UACA,WACA,QACA,WACA,OACA,OACA,SACA,WACA,UACA,QACA,UACA,QACA,aACA,WACA,QACA,QACA,cACA,OACA,UACA,UACA,OACA,WACA,UACA,QACA,YACA,QACA,UACA,SACA,OACA,WACA,OACA,YACA,QACA,WACA,WACA,QACA,QACA,UACA,SACA,MACA,YACA,WACA,YACA,OACA,QACA,cACA,MACA,UACA,QACA,OACA,WACA,eACA,QACA,OACA,OACA,QACA,UACA,SACA,YACA,gBACA,UACA,UACA,aACA,QACA,QACA,SACA,QACA,WACA,OACA,SACA,UACA,MACA,QACA,OACA,YACA,OACA,YACA,eACA,UACA,UACA,UACA,YACA,QACA,YACA,cACA,UACA,WACA,WACA,eACA,UACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,YACA,UACA,OACA,OACA,SACA,SACA,UACA,OACA,YACA,QACA,YACA,OACA,MACA,cACA,QACA,UACA,UACA,aACA,YACA,SACA,OACA,SACA,YACA,MACA,SACA,QACA,WACA,QACA,QACA,iBACA,SACA,aACA,gBACA,aACA,QACA,QACA,OACA,OACA,YACA,UACA,WACA,aACA,SACA,WACA,OACA,UACA,WACA,aACA,UACA,WACA,UACA,WACA,UACA,WACA,UACA,YACA,MACA,YACA,aACA,YACA,WACA,QACA,WACA,WACA,WACA,MACA,UACA,QACA,WACA,aACA,UACA,UACA,QACA,SACA,iBACA,YACA,YACA,aACA,YACA,OACA,SACA,WACA,SACA,cACA,cACA,OACA,SACA,WACA,UACA,SACA,aACA,UACA,cACA,gBACA,QACA,UACA,WACA,UACA,QACA,QACA,cACA,UACA,UACA,SACA,SACA,OACA,QACA,MACA,QACA,WACA,QACA,gBACA,UACA,aACA,aACA,SACA,WACA,WACA,WACA,QACA,aACA,UACA,OACA,QACA,aACA,QACA,WACA,OACA,WACA,YACA,QACA,aACA,UACA,YACA,SACA,YACA,SACA,SACA,UACA,aACA,eACA,YACA,QACA,WACA,WACA,OACA,WACA,SACA,aACA,YACA,WACA,MACA,gBACA,SACA,aACA,UACA,QACA,gBACA,SACA,WACA,aACA,SACA,WACA,SACA,OACA,WACA,WACA,aACA,WACA,eACA,YACA,UACA,WACA,WACA,aACA,YACA,UACA,OACA,WACA,SACA,QACA,QACA,aACA,QACA,SACA,QACA,YACA,OACA,WACA,SACA,SACA,WACA,SACA,UACA,OACA,WACA,WACA,QACA,SACA,QACA,aACA,YACA,eACA,WACA,cACA,YACA,SACA,eACA,gBACA,WACA,cACA,UACA,YACA,WACA,cACA,YACA,WACA,WACA,YACA,SACA,cACA,aACA,SACA,QACA,eACA,aACA,UACA,WACA,QACA,YACA,cACA,aACA,cACA,SACA,YACA,aACA,aACA,aACA,SACA,aACA,SACA,gBACA,QACA,WACA,aACA,QACA,aACA,kBACA,WACA,UACA,cACA,UACA,WACA,SACA,aACA,QACA,UACA,WACA,QACA,aACA,cACA,UACA,cACA,SACA,WACA,QACA,OACA,QACA,WACA,aACA,UACA,aACA,aACA,YACA,OACA,SACA,gBACA,UACA,aACA,cACA,SACA,SACA,cACA,OACA,UACA,OACA,aACA,QACA,OACA,QACA,SACA,SACA,UACA,SACA,UACA,QACA,SACA,WACA,QACA,YACA,SACA,WACA,SACA,UACA,cACA,WACA,UACA,YACA,WACA,QACA,WACA,OACA,eACA,YACA,cACA,cACA,aACA,WACA,cACA,OACA,QACA,WACA,SACA,WACA,iBACA,UACA,aACA,UACA,YACA,WACA,QACA,aACA,UACA,UACA,MACA,WACA,YACA,cACA,cACA,eACA,cACA,YACA,WACA,UACA,cACA,gBACA,OACA,WACA,UACA,WACA,aACA,aACA,UACA,YACA,aACA,QACA,UACA,WACA,QACA,eACA,OACA,UACA,SACA,cACA,cACA,WACA,QACA,UACA,WACA,QACA,UACA,UACA,SACA,UACA,WACA,UACA,SACA,WACA,YACA,OACA,WACA,SACA,aACA,cACA,YACA,OACA,UACA,QACA,QACA,YACA,SACA,QACA,UACA,MACA,aACA,YACA,UACA,QACA,SACA,aACA,SACA,UACA,YACA,WACA,iBACA,eACA,WACA,QACA,UACA,QACA,UACA,WACA,QACA,QACA,WACA,WACA,QACA,WACA,OACA,UACA,gBACA,UACA,UACA,aACA,UACA,SACA,cACA,gBACA,eACA,aACA,aACA,QACA,WACA,UACA,SACA,UACA,SACA,OACA,UACA,aACA,eACA,QACA,YACA,WACA,aACA,eACA,OACA,aACA,UACA,UACA,aACA,QACA,QACA,WACA,gBACA,WACA,QACA,eACA,WACA,aACA,UACA,aACA,YACA,UACA,SACA,cACA,UACA,WACA,UACA,YACA,UACA,SACA,UACA,UACA,WACA,cACA,WACA,gBACA,aACA,QACA,WACA,YACA,aACA,SACA,SACA,YACA,WACA,SACA,SACA,SACA,eACA,QACA,aACA,YACA,OACA,YACA,SACA,QACA,UACA,YACA,aACA,WACA,eACA,gBACA,SACA,aACA,QACA,WACA,SACA,gBACA,SACA,aACA,UACA,QACA,SACA,cACA,aACA,aACA,eACA,WACA,YACA,UACA,aACA,UACA,WACA,UACA,QACA,SACA,YACA,WACA,OACA,WACA,UACA,OACA,UACA,YACA,cACA,aACA,SACA,YACA,aACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,UACA,UACA,SACA,cACA,YACA,YACA,WACA,SACA,UACA,SACA,YACA,UACA,cACA,SACA,aACA,MACA,WACA,OACA,KACA,WACA,aACA,UACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,aACA,YACA,eACA,cACA,WACA,OACA,aACA,SACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,SACA,MACA,QACA,WACA,aACA,YACA,WACA,WACA,QACA,YACA,UACA,eACA,WACA,WACA,eACA,aACA,UACA,QACA,UACA,UACA,WACA,aACA,SACA,UACA,SACA,UACA,SACA,SACA,UACA,eACA,YACA,UACA,YACA,SACA,cACA,YACA,WACA,aACA,SACA,UACA,YACA,iBACA,QACA,SACA,WACA,cACA,QACA,OACA,WACA,cACA,aACA,aACA,aACA,YACA,QACA,aACA,QACA,SACA,YACA,OACA,UACA,WACA,SACA,YACA,QACA,UACA,OACA,YACA,YACA,WACA,OACA,SACA,UACA,UACA,WACA,YACA,aACA,WACA,cACA,SACA,OACA,cACA,OACA,WACA,UACA,OACA,OACA,MACA,SACA,QACA,OACA,eACA,YACA,OACA,QACA,WACA,QACA,UACA,YACA,SACA,SACA,WACA,SACA,QACA,QACA,SACA,WACA,UACA,OACA,OACA,OACA,WACA,OACA,UACA,QACA,SACA,YACA,WACA,WACA,YACA,SACA,QACA,QACA,aACA,QACA,QACA,SACA,SACA,QACA,SACA,YACA,WACA,SACA,UACA,OACA,YACA,UACA,MACA,SACA,YACA,MACA,QACA,OACA,SACA,SACA,QACA,QACA,OACA,MACA,QACA,WACA,QACA,QACA,QACA,WACA,WACA,SACA,WACA,QACA,WACA,QACA,UACA,QACA,OACA,OACA,OACA,cACA,UACA,OACA,SACA,QACA,QACA,MACA,OACA,OACA,QACA,aACA,MACA,SACA,WACA,SACA,WACA,UACA,SACA,SACA,QACA,QACA,WACA,QACA,OACA,QACA,MACA,UACA,SACA,QACA,MACA,QACA,UACA,QACA,QACA,SACA,UACA,UACA,SACA,OACA,OACA,OACA,MACA,SACA,QACA,SACA,QACA,OACA,UACA,OACA,SACA,WACA,YACA,SACA,QACA,UAGa,CACbC,eAryDF,SAAwBzd,GACtB,OAAO,IAAI6R,SAAQ,SAAA1L,GACjBnG,EAAKtE,IAAG,SAAC8E,EAAUkd,EAASC,EAASzY,QACvB0Y,IAARpd,IACF0E,EAAI5J,MACJ6K,EAAQ3F,WAiyDdqd,iBArzDF,SAA0B1f,EAAUoC,EAAU9G,GAC5C,IAAMqkB,EAAO,IAAIxgB,EAAI,CAACygB,QAAQ,EAAOnb,MAAOjK,OAAOU,KAAK8E,EAAIhD,EAAEkB,IAAIuG,SAC5D2W,EAAOuE,EAAKvE,OAUlB,OATAA,EAAKU,KAAK1Z,GACVhH,YAAW,WAEKZ,OAAOqlB,OAAOF,EAAKriB,KAAK,cAChCqH,SAAQ,SAAA8E,GAEZkW,EAAKpiB,GAAG,MAAOkM,QAEhB,KACInO,EAAE8f,IA0yDH0E,iBAASC,EAAaC,qHAAM,YAANA,IAAAA,YACrBD,GAAGE,SAAA,MAAA,8BACCR,GAAS,OAAA,OAAAQ,SAEC9gB,EAAIiS,IAAI+E,KAAK4J,OAAKN,OAAWA,EAAW,CAAC5X,iBAAiB,OAAnE,GAAJ5N,UACGgmB,SAAA,MAAA,MACD,IAAIC,iCAAiCH,GAAM,OAAA,KAE/C9lB,EAAKP,OAAS,KAAEumB,UAAA,MAAA,MACZ,IAAIC,6EAA6EjmB,uDAAwD,QAAA,WAE7I+lB,GAAgBC,UAAA,MAAA,yBACXE,EAAKC,YAAYnmB,IAAK,QAAA,yBAExBA,GAAI,QAAA,UAAA,6BAGbomB,oBAAW/mB,GACT,OAAOA,EAAEC,OAAO,GAAG+mB,cAAgBhnB,EAAEf,MAAM,IAG7CgoB,wBACE,OAAUxjB,KAAKsjB,WAAWrjB,EAASqiB,QAAiBtiB,KAAKsjB,WAAWrjB,EAASoiB,KAG/EgB,qBAAYL,GAGV,IAFA,IAAMvW,EAAMoI,KAAKmO,GACbS,EAAS,GACJtmB,EAAI,EAAGA,EAAIsP,EAAI9P,OAAQQ,IAAK,CACnC,IAAMumB,EAAMjX,EAAIrP,WAAWD,GAAGpB,SAAS,IACvC0nB,GAA0B,IAAfC,EAAI/mB,OAAe+mB,MAAWA,EAE3C,OAAOD,GAGTE,kBAASC,GACP,GAAIA,EAAGC,eACL,OAAOD,EAAGC,eAEV,GAAI5T,SAAS6T,UAAW,CACtBF,EAAGG,QAEH,IAAMrkB,EAAIuQ,SAAS6T,UAAUE,cAC7B,GAAU,OAANtkB,EACF,OAAO,EAGT,IAAMukB,EAAKL,EAAGM,kBAAmBC,EAAKF,EAAGG,YAGzC,OAFAH,EAAGI,eAAe3kB,EAAE4kB,eACpBH,EAAGI,YAAY,aAAcN,GACtBE,EAAGlW,KAAKtR,OAGnB,OAAO,GAGT6nB,qBAEE,IAAIvU,SAASwU,4BAAb,CAGA,IAAMC,EAAQzU,SAAS0U,uBACvBD,EAAMnjB,eACNmjB,EAAME,+nRA+WN3U,SAAS4U,KAAKC,QAAQJ,KAGxBK,yBAAgBC,EAAgBC,GAC9B,IAEIC,EAAgB/nB,EADdgoB,GADWF,GAAWle,OAAOuN,SAAS8Q,OAAOxE,UAAU,IAC9B9kB,MAAM,KAGrC,IAAKqB,EAAI,EAAGA,EAAIgoB,EAAcxoB,OAAQQ,IAEpC,IADA+nB,EAAiBC,EAAchoB,GAAGrB,MAAM,MACrB,KAAOkpB,EACxB,YAA6BtC,IAAtBwC,EAAe,IAA0BG,mBAAmBH,EAAe,KAMxFI,oBAAWC,GAET,IAAM1oB,EAAS0oB,EAAKC,wBAAmB9C,EAAW,CAAC+C,UAAW,UACxDlpB,EAAIM,EAAEf,MAAM,KAClB,OAAiB,IAAbS,EAAEI,OACMJ,EAAE,OAAQA,EAAE,GAAMA,EAAE,GAAGf,MAAM,GAElCqB,GAGT6oB,oBAAWH,GACT,IAAM1oB,EAAI0oB,EAAKI,oBAAejD,EAAW,CAACkD,UAAW,QAASH,UAAW,UACnElpB,EAAIM,EAAEf,MAAM,KAClB,OAAiB,IAAbS,EAAEI,OACMJ,EAAE,OAAQA,EAAE,GAAMA,EAAE,GAAGf,MAAM,GAElCqB,GAGTgpB,6BAAoBN,EAAYO,EAAiB7mB,EAAY8mB,GAM3D,GALK9mB,IAGH8mB,GAFA9mB,EAAM,IAAIC,MAEG8mB,mBAAmB,CAACJ,UAAW,WAE1CE,IAAYC,EACd,MAAO,QAET,IAAME,EAAgBxpB,KAAKypB,OAAOjnB,EAAMsmB,UACxC,OAAsB,IAAlBU,EACK,QAEa,IAAlBA,EACK,YAELA,GAAiB,EACZV,EAAKS,wBAAmBtD,EAAW,CAACyD,QAAS,SAE/CL,GAGTM,wBAAehO,GACb,OAAUrR,OAAOuN,SAAS+R,qBAAoBC,mBAAmBlO,IAGnEmO,wBAAehqB,EAAWI,GACxB,gBADwBA,IAAAA,EAAS,IAC1BJ,EAAEI,OAASA,EAAYJ,EAAEf,MAAM,EAAGmB,SAAeJ,GAG1DooB,uBAAc6B,EAAcC,EAAcC,GACxC,IAAM9C,EAAK3T,SAAS0U,cAAc6B,GAOlC,OANIC,GACF7C,EAAG+C,aAAa,QAASF,GAEvBC,GACFA,EAAOE,YAAYhD,GAEdA,GAGT5B,OAAAA,EACAI,WAAAA,EACAyE,UA1zEgB7E,GAAW,WAC3B,GAAII,EAAc,OAAO,EACzB,IACU/X,EADN9M,GAAQ,EAEZ,OADU8M,EAA87D8X,UAAUD,WAAaC,UAAU2E,QAAU,IAAj+D,2TAA2T3c,KAAKE,IAAM,0kDAA0kDF,KAAKE,EAAE0c,OAAO,EAAG,OAAKxpB,GAAQ,GACz7DA,EAJoB,GA4zE3BypB,SAAU,SAACvF,EAAgBC,GACzB,IAAIC,EACJ,OAAO,WACL,IAAMrD,EAAOpW,UACP0Z,EAAU5hB,KACX2hB,IACHF,EAAKxZ,MAAM2Z,EAAStD,GACpBqD,GAAa,EACbtjB,YAAW,WAAA,OAAMsjB,GAAa,IAAOD,MAI3CuF,SAAU,SAACxF,EAAgByF,GACzB,IAAIrF,EACJ,OAAO,WACL,IAAMD,EAAU5hB,KACVse,EAAOpW,UACbhG,aAAa2f,GACbA,EAAaxjB,YAAW,WAAA,OAAMojB,EAAKxZ,MAAM2Z,EAAStD,KAAO4I,KAG7DC,OAAQ,SAACpT,GAAU,OAAKA,EAAItX,KAAKC,MAAMD,KAAKL,SAAW2X,EAAIpX,UAC3DyqB,WAAY,SAACrT,EAAY9C,GAMvB,IALA,IAGIoW,EACAlV,EAJEmV,EAAWvT,EAAIvY,MAAM,GACvB2B,EAAI4W,EAAIpX,OACR4qB,EAAMpqB,EAAI8T,EAGP9T,KAAMoqB,GAEXF,EAAOC,EADPnV,EAAQ1V,KAAKC,OAAOS,EAAI,GAAKV,KAAKL,WAElCkrB,EAASnV,GAASmV,EAASnqB,GAC3BmqB,EAASnqB,GAAKkqB,EAEhB,OAAOC,EAAS9rB,MAAM+rB,IAExBjX,MAAO,SAACmR,GAAc,OAAKpjB,WAAWojB,EAAM,IAC5C7a,KAAM,SAAC6a,GACL,IAAI+F,GAAS,EACb,OAAO,WACDA,IAGJA,GAAS,EACT/F,EAAKxZ,MAAMjI,KAAMkI,cAGrBuf,KAAM,SAACrV,EAAUjU,GACf,IAAM2jB,EAAS,GAMf,OALArkB,OAAOU,KAAKiU,GAAKxK,SAAQ,SAAAvC,GAClBlH,EAAK4jB,SAAS1c,KACjByc,EAAOzc,GAAO+M,EAAI/M,OAGfyc,uBCn4ET,WAGF,IAAe9kB,EAAX0qB,EAAO,GAAOpqB,EAAKe,WAAWgB,aAAgBf,cAAgB,GAAGtB,GAAKsB,cAAiBD,WA8I3F,SAAS2iB,EAAMzkB,GACd,IAAIyB,EAAI6T,WAAWtV,GACnB,OAAIorB,MAAM3pB,GAIP,SADHzB,EAAIA,EAAEqrB,SAIH,SAAWrrB,IAGX,QAAUA,EACL,UADR,GATQyB,EA/IT0pB,EAAK7b,WAAa,SAASoC,EAAM4Z,EAAMC,EAAQC,GAC9C,GAAG,iBAAmB9Z,EAAtB,CACA,IAAI5K,EAAM,CAAClG,EAAG,EAAG8Q,KAAMA,EAAM4Z,KAAMA,EAAMxrB,EAAG4R,EAAKtR,OAAQqO,GAAI,IAG7D+c,EAAIA,GAAK,MAET,SAASnc,IAKR,IAHA,IAEe6F,EAAG1U,EAFdR,EAAI8G,EAAI4K,KACR9Q,EAAIkG,EAAIlG,EAAGd,EAAIgH,EAAIhH,EAAG2rB,EAAI,EAC1B5f,EAAI/E,EAAI+E,EACN4f,IAAMD,GAAE,CACb,IAAIzrB,EAAIC,EAAEY,KACV,GAAGA,EAAId,EAAE,CACRgH,EAAIqD,KAAM,EACV,MAED,GAAG0B,EAAE,CAEK,IADTjL,EAAIZ,EAAE2B,QAAQ,IAAKf,EAAE,GAAIb,EAAIC,EAAEY,GAC/BJ,EAAM,EAAS,MAAQR,EAAEY,IAAKJ,KAAUA,IAAQA,EAAM,GACtD0U,EAAIA,GAAK1U,EACN,KAAOT,GAAMS,IACfqL,EAAIpL,EACJD,EAAMsG,EAAI9G,EACP8G,EAAIgH,GACNtN,EAAMR,EAAEf,MAAM6H,EAAI4kB,GAAI9qB,IACnBsU,GAAM,EAAE1U,EAAImB,QAAQ,SAASnB,EAAM8J,KAAK+E,MAAM,IAAI7O,EAAI,MACtDsG,EAAIL,cAAc2E,MACpBtE,EAAIL,GAAG5E,KAAKiF,EAAI9G,EAAIQ,IAEhBsG,EAAIL,KAAKK,EAAIqD,IAAMshB,EAAID,EAAGhrB,EAAMC,IACnCqG,EAAIL,IAAI,IAAIK,EAAI9G,GAAK8G,EAAI9G,EAAIQ,GAE/BsG,EAAI9G,EAAIS,IAERqG,EAAI9G,EAAIA,EAAEf,MAAM6H,EAAI4kB,GAAI9qB,IACrBsU,GAAM,EAAEpO,EAAI9G,EAAE2B,QAAQ,SAASmF,EAAI9G,EAAIsK,KAAK+E,MAAM,IAAIvI,EAAI9G,EAAE,OAEhE8G,EAAIgH,EAAIoH,EAAIzU,KAEXG,OAEF,OAAOb,GACP,IAAK,IACJ+G,EAAI4kB,GAAK9qB,EACTiL,GAAI,EACJ,MACD,IAAK,IACJ/E,EAAI6kB,GAAK/qB,EACTkG,EAAIgH,GAAI,EACR,MACD,IAAK,KACDhH,EAAIgH,GAAKhH,EAAIL,cAAc2E,SAC1B5K,EAAMR,EAAEf,MAAM6H,EAAI6kB,GAAI/qB,EAAE,KACvBH,KAAOD,EAAMikB,EAAMjkB,MAClBsG,EAAIL,cAAc2E,MACpBtE,EAAIL,GAAG5E,KAAKrB,GAEZsG,EAAIL,GAAGK,EAAI9G,GAAKQ,GAKpBsG,EAAIgH,EAAIrN,EACLqG,EAAIL,cAAc2E,QACpBtE,EAAIgH,GAAI,EACRhH,EAAI6kB,GAAK/qB,GAEV,MACD,IAAK,IACJkG,EAAI2H,GAAG5M,KAAKiF,EAAIL,KAAKK,EAAIL,GAAK,KAC3BK,EAAIL,cAAc2E,MACpBtE,EAAIL,GAAG5E,KAAKiF,EAAIL,GAAK,IAEnBhG,KAAOD,EAAMsG,EAAI9G,KACnB8G,EAAIL,GAAGjG,GAAOsG,EAAIL,GAAK,IAExBK,EAAIgH,EAAIrN,EACR,MACD,IAAK,IACDqG,EAAIgH,IACHtN,EAAMR,EAAEf,MAAM6H,EAAI6kB,GAAI/qB,EAAE,KACvBH,KAAOD,EAAMikB,EAAMjkB,MAClBsG,EAAIL,cAAc2E,MACpBtE,EAAIL,GAAG5E,KAAKrB,IAERsG,EAAIL,KAAKK,EAAIqD,IAAMshB,EAAID,EAAGhrB,EAAMC,IACnCqG,EAAIL,IAAI,IAAIK,EAAI9G,GAAKQ,IAK1BsG,EAAIgH,EAAIrN,EACRqG,EAAIL,GAAKK,EAAI2H,GAAG/F,MAChB,MACD,IAAK,IACDjI,KAAOD,EAAMsG,EAAI9G,IACnB8G,EAAI2H,GAAG5M,KAAKiF,EAAIL,IAChBK,EAAIL,GAAGjG,GAAOsG,EAAIL,GAAK,IAEpBK,EAAIL,IACPK,EAAI2H,GAAG5M,KAAKiF,EAAIL,GAAK,IAEtBK,EAAIgH,GAAI,EACRhH,EAAI6kB,GAAK/qB,EACT,MACD,IAAK,IACDkG,EAAIgH,IACHtN,EAAMR,EAAEf,MAAM6H,EAAI6kB,GAAI/qB,EAAE,KACvBH,KAAOD,EAAMikB,EAAMjkB,MAClBsG,EAAIL,cAAc2E,MACpBtE,EAAIL,GAAG5E,KAAKrB,GAEZsG,EAAIL,GAAGK,EAAI9G,GAAKQ,GAKpBsG,EAAIgH,EAAIrN,EACRqG,EAAIL,GAAKK,EAAI2H,GAAG/F,OAQnB,GAHA5B,EAAI9G,EAAIS,EACRqG,EAAIlG,EAAIA,EACRkG,EAAI+E,EAAIA,EACL/E,EAAIqD,IAAI,CAEV,GAAG1J,KADHD,EAAMsG,EAAIL,IAET,IAAKjG,EAAM8J,KAAK+E,MAAMqC,GACrB,MAAMtP,GAAI,OAAO0E,EAAIwkB,KAAKlpB,GAE5B0E,EAAIwkB,KAAK7qB,EAAGD,QAEZO,EAAGsO,GAlILA,QAL6B,IAAKic,EAAK7qB,EAAE6J,KAAK+E,MAAMqC,IAAQ,MAAMtP,GAAIkpB,EAAKlpB,KA4J5E+oB,EAAK1b,eAAiB,SAASpN,EAAMipB,EAAMM,EAAUC,EAAO/kB,IAE3DA,EAAMA,GAAO,IACT4K,KAAO5K,EAAI4K,MAAQ,GACvB5K,EAAI2H,GAAK,CAAC3H,EAAIL,GAAK,CAAC2H,EAAG/L,IACvByE,EAAIwkB,KAAOA,EACXxkB,EAAIlG,EAAI,EACR,IAAI6qB,EAAI,GAER,SAAS/mB,IACR,IAAwClE,EAApCiG,EAAKK,EAAIL,GAAIpE,EAAOoE,EAAG2H,EAAGJ,EAAM,GAGpC,OAFGvH,EAAG7F,GAAM6F,EAAG7F,EAAI6F,EAAGglB,EAAK,IAAIzd,GAAO,KACnCvN,KAAOD,EAAMiG,EAAG/E,KAAKsM,GAAO1D,KAAKC,UAAU/J,GAAO,YACvC6B,GACd,IAAK,UACJ2L,GAAO,GAAG3L,EACV,MACD,IAAK,SACJ2L,GAAO1D,KAAKC,UAAUlI,GACtB,MACD,IAAK,SACJ2L,GAAQod,MAAM/oB,GAAO,OAASA,EAC9B,MACD,IAAK,SACJ,IAAIA,EAAK,CACR2L,GAAO,OACP,MAED,GAAG3L,aAAgB+I,MAAM,CACxB4C,GAAO,KACPvH,EAAK,CAAC7F,GAAI,EAAG2C,GAAIlB,EAAMoM,GAAIhI,EAAIglB,EAAG,IAC/B3rB,EAAIuC,EAAKjC,OACZ0G,EAAI2H,GAAG5M,KAAKiF,EAAIL,GAAKA,GACrB,MAED,GAAG,mBAAsBpE,GAAM,IAAI6D,OAAO,CACzC8H,GAAO,KACPvH,EAAK,CAAC7F,GAAI,EAAGqG,GAAI/F,OAAOU,KAAKS,GAAMqI,OAAQnH,GAAIlB,EAAMoM,GAAIhI,EAAIglB,EAAG,IAC7D3rB,EAAI2G,EAAGQ,GAAG7G,OACb0G,EAAI2H,GAAG5M,KAAKiF,EAAIL,GAAKA,GACrB,MAED,GAAGjG,EAAM6B,EAAK6D,SAAS,CACtB8H,GAAOxN,EACP,MAGF,IAAK,WACJ,GAAGiG,EAAGlD,cAAc6H,MAAM,CACzB4C,GAAO,OACP,MAEF,QACCA,EAAM,GACNvH,EAAGglB,IAGJ,IADA3kB,EAAI4K,MAAQ1D,EACN,EAAEvH,EAAG7F,GAAK6F,EAAG3G,GAClBgH,EAAI4K,MAASjL,EAAGQ,GAAI,IAAM,IAC1BR,EAAKK,EAAIL,GAAKA,EAAGgI,GAElB,KAAKhI,EAAG7F,EAAI6F,EAAG3G,EAMd,OAJC2G,EAAG2H,GADD5N,EAAMiG,EAAGQ,IACJR,EAAGlD,GAAGkD,EAAG/E,EAAIlB,EAAIiG,EAAG7F,IAEpB6F,EAAGlD,GAAGkD,EAAG7F,KAEZ6qB,EAAI,EAAW/mB,KAAe+mB,EAAI,OACvC1qB,EAAG2D,IAGJoC,EAAIwkB,KAAK7qB,EAAGqG,EAAI4K,MA/DjBhN,WAkES8F,QAAU,GAAG/J,IAAI+J,OAAOshB,KAAOX,GACzC,IAAgCxrB,UAAiBwrB,EAAQ,MAAM/oB,WACrDkI,MAAQ,GAAG7J,IACpB6J,KAAKgF,WAAa6b,EAAK7b,WACvBhF,KAAKmF,eAAiB0b,EAAK1b,gBAhP3B,sBCAC,WAED,SAASsc,IACR,IAAIC,EAAQ,SAASljB,EAAKC,EAAKzI,GAO9B,GANA0rB,EAAMC,KAAO,EACT3rB,GAAKG,IAAMsI,IACdijB,EAAMjoB,KAAQ,GAAG+E,EAAMkjB,EAAMjoB,KAAOioB,EAAMjoB,KAAO,GAAG+E,SAC5CkjB,EAAMlmB,GAAG,IAAIpC,IAEtBpD,EAAIA,GAAK0rB,EAAMlmB,IAAMkmB,EAAMlmB,EAAI,KAC3BgD,GAAO5H,OAAOU,KAAKtB,GAAGF,OAAS,OAAOE,EAG1C,IADA,IAAyCmG,EAAIjG,EAAzCI,EAAI,EAAGd,GADXgJ,EAAM,GAAGA,GACU1I,OAAO,EAAGsB,EAAIoH,EAAIlI,KAC7B6F,EAAKnG,EAAEoB,KAAOd,EAAId,GACzB4B,GAAKoH,IAAMlI,GAEZ,GAAI6F,EAkCJ,CAAA,GAAG7F,GAAKd,EAQP,OAFGW,IAAMsI,UAAatC,EAAG/C,GAElBsoB,EAAMljB,EAAI7J,QAAQ2B,GAAImI,EAAKtC,IAAOA,EAAK,KAN9C,GAAGhG,IAAMsI,EAAM,OAAQtI,KAAOD,EAAMiG,EAAG,KAAOA,GAAOulB,EAAMC,KAAO,IAAMzrB,EACxEiG,EAAG,IAAMsC,MArCH,CACN,IAAI/F,EAAK1C,GAAG,SAAS6C,EAAGnD,GACvB,IAAIqW,EAAK,EAAG6V,EAAK,GACjB,IAAIlsB,GAAG,IAAII,OAAS,KAAMJ,EAAEqW,IAAOvN,EAAIuN,IACtC6V,GAAMlsB,EAAEqW,KAET,GAAG6V,EAAG,CACL,GAAGzrB,IAAMsI,EAAI,CACZ,GAAGsN,GAAMvW,EAAI,OAGb,OAFCU,IAAQA,EAAM,KAAKR,EAAEf,MAAMoX,IAAOlT,EAE5BA,EAER,IAAIgpB,EAAK,GAST,OARAA,EAAGnsB,EAAEf,MAAMoX,IAAOlT,EAEjB,MADDkT,EAAKvN,EAAI7J,MAAMoX,IACD8V,EAAG,IAAMpjB,GAASojB,EAAG9V,GAAM,IAAI,IAAMtN,EAEnDzI,EAAE4rB,GAAMC,EACLJ,EAAMK,OAAS,aAAgB,GAAGF,GAAK3mB,QAAQkF,IAAI,EAAGyhB,UAClD5rB,EAAEN,IAEF,MAEN,CACF,GAAGS,IAAMsI,EAAM,QACdzI,EAAEoB,KAAOpB,EAAEoB,GAAK,KAAK,IAAMqH,EACzBgjB,EAAMK,OAAS,aAAgB,GAAG1qB,GAAI6D,QAAQkF,IAAI,EAAG/I,GAGzD,GAAGjB,IAAMsI,EACR,OAAOvI,IAcV,OAAOwrB,EAiDR,GA9CAD,EAAMhiB,IAAM,SAASsiB,EAAIL,EAAOvmB,EAAIb,EAAK0nB,GACxC,IACCA,EAAMA,GAAO,GACb,IAAIhsB,EAAK,mBAAqB0rB,EAAQA,EAAMlmB,GAAK,GAAKkmB,EAEtD,IAAI1rB,EAAI,OACR,GAAG,iBAAmBA,EAAE,CAAE,GAAGyrB,EAAMK,MAAQ,KAAM,CAAC,OAAQJ,EAAOvmB,EAAIb,EAAK0nB,GAAO,OACjF,IAAwGC,EAApG3qB,GAAQtB,EAAEoD,IAAIugB,GAAIvZ,OAASpK,EAAEoD,GAAK,SAASoC,IAAqC,OAAhCA,EAAE4E,KAAOxJ,OAAOU,KAAKtB,GAAGoK,OAAe5E,EAArD,IAA4D4E,MAG/F6hB,GADH3nB,GAAO,IAASA,EAAM,CAAC4nB,QAAQ,GAAS5nB,GAAO,IAClC4J,WAAU5M,EAAOA,EAAK3C,MAAM,GAAGuP,WAG5C,IAFA,IAAIkK,EAAQ9T,EAAI8T,MAAOvO,EAAMvF,EAAIuF,IAC7BvJ,EAAI,EAAGd,EAAI8B,EAAKxB,OACfQ,EAAId,EAAGc,IAAI,CAAE,IAAkCJ,EAAKlB,EAAGmtB,EAAtC3jB,EAAMlH,EAAKhB,GAAI8rB,EAAOpsB,EAAEwI,GAC7C,GAAI4jB,GAAQ,KAAO5jB,GAAOpF,IAAMoF,GAAO,cAAgBA,KACvDxJ,EAAIgtB,EAAIrtB,MAAM,IAAM4C,KAAKiH,GACzB2jB,EAAKntB,EAAEsM,KAAK,MACTnL,IAAMiY,GAAS+T,GAAM/T,GAAO,IAAIzZ,MAAM,EAAEwtB,EAAGrsB,SAC3CK,IAAM0J,IAAQA,GAP0B,KAOZsiB,IAA/B,CACA,GAAGF,IACF/rB,EAAM6rB,EAAIK,EAAMjnB,EAAIb,EAAKtF,GACtBmB,IAAMD,GAAM,OAAOA,EAEvB,GAAGC,KAAOD,EAAMksB,EAAK,KAAK,CACzB,IAAI1gB,EAAM,EAGV,GAFGvL,IAAMiY,GAAS+T,GAAM/T,GAAO,MAAM1M,EAAM,GACxCvL,IAAM0J,GAAOsiB,GAAMtiB,GAfoB,OAeN6B,EAAM,GACvCA,IACFxL,EAAMiF,EAAGjF,EAAKisB,EAAI3jB,EAAKwjB,GACpB7rB,IAAMD,GAAM,OAAOA,OAGxB,GAAGoE,EAAI4nB,SACNhsB,EAAMiF,EAAGhF,EAAGgsB,EAAI3jB,EAAKwjB,GAClB7rB,IAAMD,GAAM,OAAOA,EAGvB,GADA8rB,EAAMhtB,GACFitB,IACH/rB,EAAM6rB,EAAIK,EAAMjnB,EAAIb,EAAK0nB,GACtB7rB,IAAMD,GAAM,OAAOA,EAEvB8rB,EAAI5jB,QAEJ,MAAOtG,GAAKmD,QAAQonB,MAAMvqB,KAGR,oBAAXoI,OACRA,OAAOuhB,MAAQA,OAEhB,IAAKpsB,UAAiBosB,EAAO,MAAM3pB,IAEpC,IAKY3B,EALRuC,EAAO+oB,EAAMa,OAAS,SAASrsB,EAAGyB,EAAGmB,GACxC,IAAI,IAAIzB,KAAKnB,EACZ,GAAIA,EAAEa,eAAeM,KACjByB,EAAInB,EAAEzB,EAAEmB,GAAIA,MAAQjB,EAAI,OAAO0C,GAElC8gB,EAAK,GACJvgB,EAAI9D,OAAOkZ,aAAa,IAzH5B,yBCAC,WAED,SAAS+T,EAAOjoB,IAEfA,EAAMA,GAAO,IACT6F,IAAM7F,EAAI6F,KAAOlF,QAAQkF,IAC7B7F,EAAIgQ,KAAOhV,OAAOgF,EAAIgQ,MAAQ,UAC9B,IAAI3T,GAAO4rB,EAAO5rB,MAAQ4rB,EAAO5rB,IAAM,KAAK2D,EAAIgQ,MAChD,GAAG3T,EAAM,OAAOA,EAWhB,SAAS6rB,EAAMxsB,GAAI,OAAOypB,mBAAmBzpB,GAAGb,QAAQ,MAAO,OAT/DmF,EAAIE,IAAMF,EAAIE,KAA4D,IAApDF,EAAIgL,OAAsB,IAAbhL,EAAIgL,OAAe,IAAO,KAC7DhL,EAAImoB,MAAQnoB,EAAImoB,OAASnoB,EAAI+I,MAAQ,IACrC/I,EAAI8L,MAAQ9L,EAAI8L,WAChB9L,EAAIooB,MAAQpoB,EAAIooB,eAChBpoB,EAAIqoB,KAAOroB,EAAIqoB,MAAQ,GACvBroB,EAAIqoB,KAAKzhB,KAAO5G,EAAIqoB,KAAKzhB,MAAQ,IACjC5G,EAAIsoB,SAAU,EAKd,IAAIC,EAAa,GAAG1sB,UAAasB,aAAeD,WAAaC,aACzD+N,EAAOhO,WAAWgB,MAAQqqB,EAC1BpjB,EAAMgiB,EAAMa,OACZra,EAAK,EAET,IAAI3N,EAAIuP,MACP,OAAOvP,EAAI6F,IAAI,qFAEhB,IAAI7F,EAAIuP,MAAMtN,IACb,OAAOjC,EAAI6F,IAAI,sEAEhB,IAAI7F,EAAIuP,MAAM7M,IACb,OAAO1C,EAAI6F,IAAI,gEAOhB,IAAI4E,EAAQ/E,KAAKgF,YAAc,SAAShP,EAAEmF,EAAGtC,GAAW,IAAKsC,OAARhF,EAAc6J,KAAK+E,MAAM/O,EAAE6C,IAAK,MAAMf,GAAIqD,EAAGrD,KAO9Fe,EAAI,SAAS2F,EAAKzG,EAAMoD,EAAInC,EAAKqD,GACpC,GAAG,mBAAsBtE,EAQzBc,EAAEiqB,KAAKtkB,EAAKzG,EAAMoD,EAAInC,EAAKqD,OAR3B,CACC,IAAIpG,EAAIkF,GAAM,GAEdtC,EAAE4d,KAAKjY,EADPrD,EAAKpD,EACW9B,EAAGoG,GAAOrD,KAO5BH,EAAEiqB,KAAO,SAAStkB,EAAKzG,EAAMoD,EAAInC,EAAKqD,GACrC,IAA0B3E,EAAMM,EAA5BtC,EAAI,CAAC8I,IAAKA,EACdukB,KAAS,SAASzY,GAAO,IAAIpU,EAC5BR,EAAE4U,KAAOA,IAASA,EAAOhQ,EAAIqoB,KAAKzhB,MAClC7E,IAAQA,EAAMA,EAAIiO,GAAQjO,EAAIiO,IAAS,IACvCjO,IAAQA,EAAI2mB,GAAK3mB,EAAI2mB,KAAO,IAAI3qB,OAE7BnC,EAAM2C,EAAEsR,KAAKG,IAAQ5U,EAAEutB,IAAI9sB,EAAGD,GACjC2C,EAAEkM,MAAMuF,EAAM5U,EAAEutB,IAAK9sB,EAAGkG,IAEzB4mB,IAAQ,SAAS3nB,EAAK6O,GAGrB,GAFA9N,IAAQA,EAAI6mB,KAAO,IAAI7qB,MACvBgE,IAAQA,EAAI8mB,GAAK9mB,EAAI8mB,KAAO,IAAI9qB,MAC7B3C,EAAE4F,IAAMA,GAAO5F,EAAE4F,IAAMH,EAAGG,OAA7B,CACA,IAA+CpF,EAA3CoU,EAAO5U,EAAE4U,MAAQH,GAAM,IAAIG,MAAQ5U,EAAE4U,KACzC,IAAIH,GAAQG,IAAShQ,EAAIqoB,KAAKzhB,KAG7B,OAFArI,EAAEkqB,KAAKK,IAAI9Y,QACXzR,EAAEiqB,KAAKtkB,EAAKzG,EAAMoD,EAAInC,IAGtBmR,EAAOtR,EAAEsR,KAAKG,KAAUzR,EAAEsR,KAAKG,GAAQH,GAAQsX,MAAUnX,OAASH,EAAKG,KAAOA,GAC5EhQ,EAAI+oB,UACNtrB,EAAOuC,EAAI+oB,QAAQlZ,EAAK3L,GAAMzG,EAAMyG,EAAK8L,GACtCnU,IAAM4B,GAAOoD,EAAGG,GAAM,KAEzB5F,EAAEyU,KAAOA,GAAM3L,EAAKzG,GAClBiB,KACD9C,GAAOA,EAAMiU,EAAKmZ,OAASnZ,EAAKmZ,KAAO,KAAKtqB,KAAS9C,EAAI8C,GAAOH,EAAEyqB,KAAKtqB,KAASH,EAAEyqB,KAAKtqB,GAAO,MAAMsR,KAAUpU,EAAIoU,GAAQzR,EAAE8L,IAAI3L,KAASH,EAAE8L,IAAI3L,GAAOmC,IACvJA,EAAK,MAENkB,IAAQA,EAAIknB,GAAKlnB,EAAIknB,KAAO,IAAIlrB,MAE7B8R,EAAKqZ,EAAIroB,GAAMgP,EAAKqZ,EAAEjsB,KAAK4D,IAAcgP,EAAKqZ,EAAKroB,EAAI,CAACA,GAAM,GACjEgP,EAAKjR,GAAK1B,WAAW9B,EAAEihB,MAAOrc,EAAImoB,WAEnC9L,MAAU,WACTta,IAAQA,EAAIonB,IAAMpnB,EAAIonB,MAAQ,IAAIprB,MAClC,IAAIiS,EAAO5S,EAAIhC,EAAE4U,KAAMH,EAAWzU,EAAEyU,KACpCnS,EAAItC,EAAEsC,EAAImS,EAAKqZ,EACR9tB,EAAE4tB,KAAOnZ,EAAKmZ,YACdnZ,EAAKqZ,SACL3qB,EAAEsR,KAAKG,UACPH,EAAKmZ,KAEZzqB,EAAE8d,MAAMrM,EAAMH,EAAMzU,EAAEqH,IAAK5G,EAAGkG,IAE/BU,IAAQ,SAASzB,EAAKqB,GAGrB,IAAII,EAAK7G,EAET,IAAI,IAAIwE,KAJR2B,IAAQA,EAAI6W,GAAK7W,EAAI6W,KAAO,IAAI7a,MAChCgE,IAAQA,EAAIqnB,IAAM1rB,EAAElC,QAGN+C,EAAEyqB,KACf,GAAIzqB,EAAEyqB,KAAKxsB,eAAe4D,GAA1B,CAA2C,IAAI1B,EAAMH,EAAEyqB,KAAK5oB,GAC5D,MAAIxE,EAAM2C,EAAEsR,KAAKzS,MAAQxB,EAAMA,EAAIotB,OAASptB,EAAI8C,IAAhD,CAGA,IAAI2qB,EAAI,IAAI,IAAIvsB,KAFhB2F,EAAM/D,EAAItB,UACHsB,EAAItB,GACUsB,EAAM,GAAGA,EAAIlC,eAAeM,GAAG,CAAEusB,GAAK,EAAM,MAC9DA,WACI9qB,EAAEyqB,KAAKtqB,GACd+D,GAAOA,EAAIzB,EAAKqB,MAEhB3E,IAAMA,EAAI,IAUX,IATA,IAAIxC,EAAIwC,EAAElC,OAAQQ,EAAI,EAQlBqC,GAAK,IAAIN,KACR/B,EAAId,EAAGc,KAAOyG,EAAM/E,EAAE1B,KAAOyG,EAAIzB,EAAKqB,GAC3C1B,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,WAAY6pB,EAAM9sB,EAAE4U,OACnErP,QAAQC,MAAQD,QAAQC,KAAKvC,EAAGX,EAAElC,OAAQ,aAAc0sB,EAAM9sB,EAAE4U,SAEjEnP,IAAOA,EAAK,SAASG,EAAKqB,MAI1B9D,EAAEkqB,KAAKvkB,EAAK9I,EAAEqtB,OAEblqB,EAAEsR,KAAO,GACTtR,EAAE8L,IAAM,GACR9L,EAAEyqB,KAAO,GAQX,IAyMKM,EACAJ,EAAQ9tB,EA1MTmuB,EAAM,EACVhrB,EAAE8d,MAAQ,SAASrM,EAAMwZ,EAAK3oB,EAAIlF,EAAGoG,GACpC,GAAIynB,EAAJ,CACA7tB,EAAK,iBAAmBA,EAAIA,EAAI,CAAC8tB,MAAO9tB,GACxC,IAA8BuN,EAAGoH,EAA7BlT,EAAI,aACRA,EAAE0P,KAAO,GACT1P,EAAE4S,KAAOA,EAAOwZ,EAAIxZ,OAASwZ,EAAIxZ,KAAOA,GACpCA,GACJ5S,EAAEif,MAAQ,WACT,IAAIvP,EAAO0c,EAAIle,IAAMlO,EAAE0P,KACvBvO,EAAEsR,KAAKG,EAAOwZ,EAAIxZ,MAAQ5S,EAAE4S,MAAQA,GAAQwZ,EAC5C,IAAInrB,GAAK,IAAIN,KACbgE,IAAQA,EAAI2nB,GAAKrrB,GAEjBE,EAAEkqB,KAAKrf,IAAI4G,GAAM,SAAahP,GAC7Be,IAAQA,EAAI4nB,IAAM,IAAI5rB,MACnBiD,EAAMH,EAAGG,GAEZhB,EAAIuP,MAAMtN,IAAIimB,EAAMlY,GAAOlD,GAAM,SAAc9L,EAAKqB,GACnDN,IAAQA,EAAI6nB,IAAM,IAAI7rB,MACtB4C,QAAQC,MAAQD,QAAQC,KAAKvC,EAAGsP,GAAM,IAAI5P,KAAOM,EAAG,aAAcqH,KAAKC,UAAUqK,KAASuZ,EAAK,qBAE/F1oB,EAAGG,EAAKqB,GAAM,GACVmnB,EAAIN,UAAW3qB,EAAEsR,KAAKG,UAI7B5S,EAAEzC,MAAQ,WACT,IAAI0D,GAAK,IAAIN,KACbgE,IAAQA,EAAI8nB,GAAKxrB,GACjBjB,EAAE0P,KAAO,GACL1P,EAAE0sB,QAAQ1sB,EAAE0sB,MAAQ,EACvB3C,EAAMhiB,IAAIqkB,GAAK,WAAkBpsB,EAAE0sB,YAEpC/nB,IAAQA,EAAIgoB,IAAM3sB,EAAE0sB,OACpB1sB,EAAEmjB,MAAQjlB,KAAK0uB,KAAK5sB,EAAE0sB,MAAM,GAC5B,IAAIG,EAAK7sB,EAAE0sB,MAcX,OAbA1sB,EAAE0sB,MAAQ,EACV/nB,IAAQA,EAAImoB,KAAO,IAAInsB,MACvBX,EAAE6K,IAAMkf,IACRA,EAAMhiB,IAAIqkB,EAAKpsB,EAAE/C,MAAO,CAACuP,QAAS,IAClC7H,IAAQA,EAAIooB,KAAO,IAAIpsB,MACvBQ,EAAE8d,MAAMjf,EAAEmI,IAAKnI,EAAE6K,IAAK7K,EAAEgtB,KAAMzuB,GAC9BoG,IAAQA,EAAIsoB,KAAO,IAAItsB,MACvBX,EAAEktB,IAAMnD,IACRA,EAAMhiB,IAAIqkB,EAAKpsB,EAAEkF,MACjBP,IAAQA,EAAIwoB,KAAO,IAAIxsB,MACvBQ,EAAE8d,MAAMmN,EAAIxZ,KAAM5S,EAAEktB,IAAKltB,EAAEgtB,KAAMzuB,GACjCoG,IAAQA,EAAIyoB,KAAO,IAAIzsB,MACvB4C,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,YAAa6pB,EAAMsB,EAAIxZ,MAAOia,IACtE,GAER7sB,EAAE/C,MAAQ,SAAS8J,EAAKD,GAEvB,GADA9G,EAAE6K,IAAI7K,EAAEmI,IAAMrB,EAAKC,GAChB/G,EAAEmjB,SAAYnjB,EAAE0sB,MAAS,OAAO,GAEpC1sB,EAAEkF,KAAO,SAAS6B,EAAKD,GACtB,GAAGA,GAAO9G,EAAEmI,IAAM,OAAO,EACzBnI,EAAEktB,IAAIpmB,EAAKC,IAEZ/G,EAAEgtB,KAAO,SAASppB,EAAKqB,GACtBN,IAAQA,EAAI0oB,KAAO,IAAI1sB,MACpBuS,EAAIzP,EAAGG,GAAOsP,GACdpH,EAAIrI,EAAGG,EAAKqB,IACf6G,GAAI,EACJoH,EAAItP,IAEL5D,EAAEgB,KAAO,SAAS+F,EAAKD,EAAKpH,EAAG4qB,GAE9B,GADG7rB,IAAMsI,GAAM/G,EAAE0sB,QACd9pB,EAAIE,MAAQiE,GAAK,IAAI3I,OAAS,OAAOqF,EAAG,kBAAkB,EAC7D,IAAIgT,EAAMoU,EAAOnQ,OAAO4P,EAAIlsB,QAAS,IAAKysB,EAAOnQ,OAAOhb,IAAMjB,IAAMsI,EAAK,GAAK,IAAK8jB,EAAOnQ,OAAO3T,IAAO,KACxG,GAAInE,EAAIooB,MAAQhrB,EAAE0P,KAAKtR,OAASqY,EAAIrY,QAAY,EAAI4B,EAAE0sB,QAAWnuB,EAAE8tB,MAClE,OAAOrsB,EAAEzC,QAEVyC,EAAE0P,MAAQ+G,GAGR7T,EAAIsoB,QAAU/pB,EAAE8d,MAAMiM,QAAQlrB,EAAGosB,EAAK3oB,EAAIlF,EAAGoG,GAC5ColB,EAAMhiB,IAAIqkB,EAAKpsB,EAAEgB,MAAM,IAAQhB,EAAEif,SAvE1Bxb,EAAG,mBALJA,EAAG,cA+EdtC,EAAE8d,MAAMiM,QAAU,SAASlrB,EAAGosB,EAAK3oB,EAAIlF,EAAGoG,GACzC,IAAIuJ,EACAjN,GAAK,IAAIN,KACbgE,IAAQA,EAAIkF,EAAI5I,GAChB,IAAIiN,EAAM5F,KAAKC,UAAU6jB,EAAItoB,GAC5B,MAAM1D,GAA0B,YAAtBqD,EAAG,kBAGd,GAFAkB,IAAQA,EAAI2oB,IAAM,IAAI3sB,MACtB4C,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,wBAC5C2B,EAAIooB,MAAQ9c,EAAI9P,SAAWG,EAAE8tB,MAAM,CACrC,IAAItuB,EAAI,EAIR,GAHAgsB,EAAMhiB,IAAIqkB,GAAK,WACd,GAAGruB,IAAM,OAAO,KAEdA,EAAI,EACN,OAAOiC,EAAEzC,QAGXyC,EAAE0P,KAAOxB,EACTlO,EAAEif,SAGH9d,EAAEosB,MAAQ,SAAS7C,EAAMnsB,GACxB,GAAImsB,GAASnsB,EAAb,CACA,GAAGE,IAAMF,EAAEmY,OAASjY,IAAMF,EAAE4J,IAAM,OAAOuiB,EACzC,GA1O0BjsB,KAAXyD,EA0OLwoB,MA1O6BxoB,GAAK,iBAAmBA,GA0O7C,OAAOwoB,EA1O1B,IAAgBxoB,EA2OX2I,EAAMkf,IAEV,OADAA,EAAMhiB,IAAI2iB,GAAM,SAASxoB,EAAExC,GAAImL,EAAInL,EAAEwC,KAAM3D,GACpCsM,EAAI,MAIX1J,EAAE4d,KAAO,SAASjY,EAAKrD,EAAIlF,EAAGoG,GAC7BpG,EAAIA,GAAK,GACT,IAAI2K,EAAI,CAACpC,IAAKA,EACdukB,KAAS,SAASzY,GAAO,IAAIpU,EAC5B0K,EAAE0J,KAAOA,IAASA,EAAOhQ,EAAIqoB,KAAKzhB,MAClC7E,IAAQA,EAAMA,EAAIiO,GAAQjO,EAAIiO,IAAS,IACvCjO,IAAQA,EAAI6oB,GAAK7oB,EAAI6oB,KAAO,IAAI7sB,OAC7BnC,EAAM2C,EAAEsR,KAAKvJ,EAAE0J,KAAOA,IAAQ1J,EAAElK,MAAMP,EAAGD,GAC5C2C,EAAEkM,MAAMuF,EAAM1J,EAAElK,MAAOP,EAAGkG,IAE3BW,IAAQ,SAAS1B,EAAK6O,EAAMiF,GAG3B,GAFA/S,IAAQA,EAAI8oB,KAAO,IAAI9sB,MACvBgE,IAAQA,EAAI+oB,GAAK/oB,EAAI+oB,KAAO,IAAI/sB,MAC7BuI,EAAEtF,IAAMA,GAAOsF,EAAEtF,IAAMH,EAAGG,OAA7B,CACA,IAAIgP,EAAO1J,EAAE0J,MAAQH,GAAM,IAAIG,MAAQ1J,EAAE0J,KACzC,IAAIH,GAAQG,IAAShQ,EAAIqoB,KAAKzhB,KAG7B,OAFArI,EAAEkqB,KAAKK,IAAI9Y,QACXzR,EAAE4d,KAAKjY,EAAKrD,EAAIlF,GAIjB,GADAkU,EAAOtR,EAAEsR,KAAKG,KAAUzR,EAAEsR,KAAKG,GAAQH,GACvC,CACAA,EAAKG,OAASH,EAAKG,KAAOA,GAC1B,IAAIvS,EAAOc,EAAEosB,MAAM9a,EAAK3L,GAAMvI,GAmB9B,GAlBAoG,IAAQA,EAAIgpB,IAAM,IAAIhtB,MACtBpC,EAAE0rB,KAAOxX,EAAKwX,KACd1rB,EAAEqvB,QAAUrvB,EAAEqvB,QAAU,GAAK,EAC7BrvB,EAAEsvB,QAAUtvB,EAAEsvB,QAAU,KAAOnW,GAAM,IAAImW,QAAStvB,EAAEqvB,OAAOhrB,EAAIooB,OAC/DzsB,EAAEuvB,KAAO,EACTvvB,EAAEoD,KAAOlD,EACTsrB,EAAMhiB,IAAI5G,EAAEoS,MAAM,SAAcrR,EAAElC,GACjC,GAAIkC,GAAK0Q,IAAS5S,EAElB,OADAzB,EAAEoD,KAAO3B,EACF,IACLzB,EAAEiO,QAAS,CAACA,QAAS,EAAGrE,IAAKyK,GAAQ,CAAC8D,MAAO9D,IAChDjO,IAAQA,EAAIopB,IAAM,IAAIptB,MAClBpC,EAAEoD,OAAOpD,EAAEuvB,KAAO,GACnBvvB,EAAEoD,QACApD,EAAEiO,UAAa1F,EAAMvI,EAAEoD,MAAQ,GAAKpD,EAAEoD,KAAKhC,QAAQmH,IAAUrI,IAAMF,EAAE4J,MAAQ5J,EAAE4J,KAAO,KAAY5J,EAAEoD,QAASpD,EAAEuvB,KAAO,GACvHvvB,EAAEiO,UAAa1F,EAAMvI,EAAEoD,MAAQ,GAAKmF,EAAInH,QAAQpB,EAAEoD,OAAYlD,IAAMF,EAAEmY,QAAUnY,EAAEmY,OAAS,IAAMnY,EAAEoD,MAAQiR,GAAQrU,EAAEmY,SAAWnY,EAAEuvB,KAAO,IAGzIvvB,EAAEuvB,MAEN,GADGztB,GAAOoD,EAAGyF,EAAEtF,IAAKvD,EAAM9B,KACvBA,EAAEsvB,QAAUtvB,EAAE4kB,OAAjB,CACA,IAAIliB,GAAK,IAAIN,KACbgE,IAAQA,EAAIqpB,GAAK/sB,GACjB,IAAIU,EAAOpD,EAAEoD,KACbwpB,GAAU,WACT5nB,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,YAC/CE,EAAEkM,MAAM1L,EAAMuH,EAAElK,SACf,SATWyE,EAAGyF,EAAEtF,IAAKvD,EAAM9B,QArBlBkF,EAAGmP,IAAShQ,EAAIqoB,KAAKzhB,KAAM/K,EAAI,cAgC3CO,MAAU,SAAS4E,EAAK6O,EAAMiF,GAG7B,GADAxO,EAAE5D,IAAI1B,EAAK6O,EAAMiF,GACbjF,IAAQA,EAAKzT,MAAjB,CAAkCyT,EAAKzT,MAAQ,EAC/C,IAAIiC,GAAK,IAAIN,MACZ+W,IAASA,EAAO,KAAK9E,OAAS8E,EAAK9E,KAAO1J,EAAE0J,MAC7CmX,EAAMhiB,IAAI0K,GAAM,SAAS1L,EAAKD,GAE7B3F,EAAEkqB,KAAKvkB,GAAK,SAAS8L,GACpB,IAAIA,IAASA,EAAOhQ,EAAIqoB,KAAKzhB,SAAWkO,EAAK9E,KAA7C,CACA,IAAI5P,GAAM,GAAG9E,KAAKL,UAAUZ,OAAO,GACnC6Q,GAAK,WACL3M,EAAEiqB,KAAKtkB,EAAKC,GAAK,SAAS1B,EAAIzB,EAAKqB,GAC/BrB,EAAMzC,EAAEiqB,KAAKtkB,EAAKC,EAAK1B,GAE1B9B,QAAQC,MAAQD,QAAQC,KAAK,4BAA6BR,EAAI8nB,EAAMhkB,GAAMgkB,EAAMpT,EAAK9E,MAAOkY,EAAMlY,SAEjG,UAGJrP,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,gBAEhDE,EAAEkqB,KAAKvkB,IAAQvI,EAAEiO,QAAUjO,EAAE4J,KAAK,GAAO5J,EAAEmY,OAAO,IAAMxN,EAAEmiB,OAcvDa,EAAM,EACNJ,EAAI,GAAI9tB,EAAIJ,OAAOkZ,aAAa,IACpC3V,EAAEkM,MAAQ,SAASuF,EAAMnP,EAAIyK,EAAKvJ,GAAM,IAAIrE,EAC3C,IAAIsS,EAAO,OAAOnP,IAClB,GAAGnD,EAAIwrB,EAAElZ,GAAQtS,EAAET,KAAK4D,OAAxB,CAAsCnD,EAAIwrB,EAAElZ,GAAQ,CAACnP,GACrD,IAAInG,EAAI,aAAoBoa,EAAO,CAAC9E,KAAMA,IACzCtV,EAAEmV,KAAOsX,KAASnX,KAAOA,EAC1BtV,EAAEyhB,KAAO,SAASnb,EAAKvD,GAItB,GAHAsE,IAAQA,EAAIspB,KAAO,IAAIttB,MACvB4C,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,YAAaqH,KAAKC,UAAUqK,KAASsZ,EAAK,sBAErF5uB,EAAEsG,IAAMA,KAAStG,EAAEuO,KAAOxL,GAG7B,cAFOyrB,EAAElZ,QACTtV,EAAEyK,IAAIzH,EAAGhD,EAAE+H,KAGZ,GAAG,iBAAoBhF,EAAK,CAC3B,IACIuC,EAAIE,KAAOzC,EAAKjC,OAClBd,EAAEsG,IAAM,iBAERvD,EAAOA,EAAK7C,WAEb,MAAM4C,GAAI9C,EAAEsG,IAAMxD,EACnB,GAAG9C,EAAEsG,IAGJ,cAFOkoB,EAAElZ,QACTtV,EAAEyK,IAAIzH,EAAGhD,EAAE+H,KAIbqS,EAAKmW,OAASxtB,EAAKjC,OACnBuG,IAAQA,EAAIupB,IAAMxW,EAAKmW,QACvBlpB,IAAQA,EAAIwpB,IAAM7tB,EAAElC,QACpB6C,GAAK,IAAIN,KACJiC,EAAIsoB,SAAW,MAAQ7qB,EAAK,GAIjCgN,EAAMhN,GAAM,SAASuD,EAAK8mB,GAEzB,OAAI9mB,EAQD,MAAQvD,EAAK,WACRyrB,EAAElZ,GACTtV,EAAEsG,IAAa,mBACftG,EAAEyK,IAAIzH,EAAGhD,EAAE+H,WAGZ/H,EAAE8wB,MAAMxqB,EAAKvD,WAbLyrB,EAAElZ,GACTtV,EAAEmV,KAAK3O,EAAI4mB,EACXnnB,QAAQC,OAAS+M,GAAM,IAAI5P,KAAOM,GAAK,GAAKsC,QAAQC,KAAKvC,EAAGsP,EAAI,mBAChE5L,IAAQA,EAAI0pB,KAAO,IAAI1tB,WACvBrD,EAAEyK,IAAIzH,EAAGhD,EAAE+H,SAVZ/H,EAAE8wB,MAAMxqB,EAAKvD,IAsBf/C,EAAEyK,IAAM,WACP,GAAIzH,GAAMA,EAAElC,OAAZ,CAIgB,IAFhB,IAEWiH,EAFPpE,GAAK,IAAIN,KACTiD,EAAMtG,EAAEsG,IAAKvD,EAAO/C,EAAEuO,IAAKpN,EAAInB,EAAEmV,KACjC7T,EAAI,EAAcA,EAAI,IAAMyG,EAAM/E,EAAE1B,OAAQyG,EAAIzB,EAAKvD,EAAMqX,GAC/DnU,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,YAAa6pB,EAAMlY,IAClErP,QAAQC,MAAQD,QAAQC,KAAKvC,EAAGrC,EAAG,cAAeksB,EAAMlY,KACnDtS,EAAIA,EAAErD,MAAM2B,IAAIR,QACrB0P,EAAKxQ,EAAEyK,IAAK,KAEbzK,EAAE+H,IAAM,SAAS5B,GACZA,IACDnG,EAAEsG,KAAOtG,EAAEuO,IACbpI,EAAGnG,EAAEsG,IAAKnF,EAAGiZ,GAGdjU,EAAGhF,EAAGnB,EAAEmV,KAAMiF,KAEfpa,EAAE8wB,MAAQ,SAASxqB,EAAKvD,UAChByrB,EAAElZ,GACT3R,GAAK,IAAIN,KACT,IAAmC/B,EAAGc,EAAGwC,EAArC1D,EAAMlB,EAAEC,MAAM8C,GAAOiqB,EAAM,GAC/B,IAAI9rB,GAAO,IAAMA,EAAI,GAGpB,OAFAlB,EAAEsG,IAAM,SAASgP,EAAK,oCACtBtV,EAAEyK,IAAIzH,EAAGhD,EAAE+H,KAGZ,KAAM7G,GACLkB,EAAIwC,EAAIzD,EACRG,EAAIJ,EAAI,GAEL,MADHA,EAAMlB,EAAEC,MAAMiB,EAAI,KAAK,IACT,KACbkB,EAAIlB,EAAI,GAELI,IADH0rB,EAAMA,EAAIrtB,MAAM,EAAE2B,IACNR,QACXksB,EAAIzqB,KAAKH,IAIR,OADHlB,EAAMlB,EAAEC,MAAMiB,EAAI,KAAK,IACR,KACZ,KAAOA,EAAI,IAAM,KAAOA,EAAI,KAAK0D,EAAI1D,EAAI,IACzCC,IAAMiB,GAAKjB,IAAMyD,GAAI5E,EAAEmV,KAAK6X,EAAI1gB,KAAK,IAAK1H,GAC7C1D,EAAMlB,EAAEC,MAAMiB,EAAI,KAEnB+E,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,cAC/C3D,EAAEyK,IAAIzH,EAAGhD,EAAE+H,MAEZ/H,EAAEC,MAAQ,SAASe,GAClB,GAAIA,EAAJ,KACoBM,EAAQkN,EAAxBhO,EAAI,GAAIS,EAAI,GAEhB,GADAK,EAAIN,EAAEqB,QAAQ3B,GACVM,EAAEM,GAKN,OAJAkN,EAAIxN,EAAErB,MAAM,EAAG2B,GACfd,EAAE,GAAKgO,EACPhO,EAAE,GAAS+sB,EAAO/M,OAAOxf,EAAErB,MAAM2B,GAAIL,GACrCT,EAAE,GAAKQ,EAAErB,MAAM2B,EAAIL,EAAEK,GACdd,IAELqD,EAAEsR,OAAOvE,IAAQA,GAAO/M,EAAEsR,KAAKG,IAAO,IAAI1E,MAC7C,IAAIjN,GAAK,IAAIN,KAEb,GADAgE,IAAQA,EAAI2pB,GAAKrtB,GACdiN,EAAM,OAAOJ,GAAK,WAAYxQ,EAAEyhB,KAAKtgB,EAAGyP,KAAQ,GACnDtL,EAAIuP,MAAM7M,IAAIwlB,EAAMlY,GAAOtV,EAAEyhB,QAK7B,WACD,IAAIwP,EAAkCzC,EAA7B9rB,EAAIpC,OAAOkZ,aAAa,IA4BjC,SAAS0X,EAAK5qB,EAAK6O,GAClB,GAAG7O,EAGF,OAFAhB,EAAI6F,IAAI,OAAQ7E,QAChB9D,YAAW,WAAYqB,EAAEkM,MAAMrN,EAAGwuB,KAAS,KAGzC/b,EAAOgc,EAAMhc,IAChB8b,EAAMA,GAAO9b,GAAQsX,IACjBnnB,EAAIuP,MAAMoB,KAEd3Q,EAAIuP,MAAMoB,MAAK,SAASX,GACnBA,EACJzR,EAAEkqB,KAAKrf,IAAI4G,EAAMjG,GADN8hB,EAAMF,MAHGE,EAAMF,IAO5B,SAASE,EAAMrC,EAAK5tB,IACnB+vB,EAAMA,GAAOnC,GACTxZ,KAAO5S,EACXxB,EAAMstB,EAAGA,EAAI,KACb/jB,EAAIvJ,GAAK,SAAS1B,GACjBqE,EAAEkqB,KAAKvuB,EAAI,GAAIA,EAAI,OA/CrBqE,EAAEkqB,KAAO,SAASvkB,EAAKrD,GACtB,IAAI8qB,EACH,OAAGzC,OAAIA,EAAEjsB,KAAK,CAACiH,EAAKrD,KAAeqoB,EAAI,CAAC,CAAChlB,EAAKrD,SAC9CtC,EAAEkM,MAAMrN,EAAGwuB,IAGZzE,EAAMhiB,IAAI5G,EAAEoS,KAAOgb,GAAK,SAASxnB,EAAKD,GACrC,GAAIC,EACJ,OAAOtD,EAAGqD,KAAQ,IAChB,CAAC0F,QAAS,EAAGrE,IAAKrB,KAASrD,EAAGb,EAAIqoB,KAAKzhB,OAE3CrI,EAAEkqB,KAAKrf,IAAM,SAAS4G,EAAMnP,GACjB8qB,EAAI3b,IACJA,IAAS5S,EAAIyD,EAAGhF,EAAG,IAC7B8vB,EAAI3b,EAAM,GACVnP,EAAGirB,OAASjrB,EAAGirB,OAAS,GAAK,EAC7BvtB,EAAE8d,MAAMjf,EAAGuuB,GAAK,SAAS3qB,EAAKqB,GAC1BrB,EAAMH,EAAGG,IACZH,EAAGirB,OAASjrB,EAAGirB,OAAS,GAAK,EAC1B,IAAMjrB,EAAGirB,OACZjrB,EAAGhF,EAAG,OACJ,KAEJ0C,EAAEkqB,KAAKK,IAAM,SAAS9Y,EAAMnP,GAC3B8qB,EAAI3b,EAAM,GACVzR,EAAE8d,MAAMjf,EAAGuuB,EAAK9qB,GAAIkJ,IA3BrB,OAsDwBlO,EAArBkO,EAAO,aAEX,OADAke,EAAO5rB,IAAI2D,EAAIgQ,MAAQzR,EAChBA,EA2DR,GAvDKO,EAAI9D,OAAOkZ,aAAa,IAC5B+T,EAAOnQ,OAAS,SAAStO,EAAG7N,EAAGP,GAC9B,IAAIM,EAD8BN,EAAIA,GAAK0D,EAE3C,GAAe,iBAAL0K,EAAc,CAEvB,IADA,IAAIxN,EAAIwN,EAAEzM,QAAQ3B,IACN,GAANY,GAAUN,GAAKN,EAAGY,EAAIwN,EAAEzM,QAAQ3B,EAAGY,EAAE,GAC3C,OAAON,EAAI,IAAM8N,EAAIpO,EAEtB,OAAGoO,GAAKA,EAAE,MAAQ,GAAKlN,OAAOU,KAAKwM,GAAGhO,OAC9BE,EAAI,SAPDE,EAOaF,EAErB,iBAAmB8N,EACd9N,EAAI,KAAO8N,GAAG,GAAK9N,EAExB,OAAS8N,EACJ9N,EAAI,IAAMA,GAEf,IAAS8N,EACJ9N,EAAI,IAAMA,GAEf,IAAU8N,EACL9N,EAAI,IAAMA,OADlB,GAKDusB,EAAO/M,OAAS,SAASxf,EAAGC,EAAGP,GAC9B,IAAIoO,EAAuBrO,EAAGT,EAAlBsB,GAAK,EAAGa,EAAI,EACxB,IAFkCzB,EAAIA,GAAK0D,KAElCpD,EAAE,GAAX,CACA,KAAMN,IAAMM,IAAIM,MAAOa,EAEvB,IADAnC,EAAIgB,EAAEP,EAAI0B,KAAM,IACRA,GAAK,GAAIb,EAAIN,EAAEqB,QAAQ3B,EAAGY,EAAE,GAIpC,OAHS,GAANA,IAAUA,EAAIN,EAAEF,QACnBgO,EAAI9N,EAAErB,MAAMc,EAAE,EAAGa,GACdL,IAAIA,EAAEK,EAAIA,EAAE,GACZ,MAAQtB,EACH8O,EAEL,MAAQ9O,EACH,CAACoK,IAAI0E,GAEV,MAAQ9O,EACP,IAAM8O,EAAEhO,QAGJkV,WAAWlH,GAEhB,MAAQ9O,EACH,KAEL,MAAQA,QAAX,IAMmB,oBAAXkL,OAAuB,CAE/B,IAAIuhB,EAAQvhB,OAAOuhB,MACnBvhB,OAAOqiB,OAASA,MACX,CAEFd,EAAQ4E,EAEZ,IAAKhxB,UAAiBktB,EAAQ,MAAMzqB,KAhEnC,IACGsB,EAkELmpB,EAAOd,MAAQA,EAzlBf,MCAGlmB,EAAyB,oBAAX2E,OAAyBA,OAAO3E,IAAM+qB,IAEpD3sB,GAAG,UAAU,SAASmD,GACnBvB,EAAIgrB,UAAUzpB,EAAKxC,IAAIgQ,KAAO,cACjCnR,KAAKD,GAAGG,KAAKyD,OACO3G,EAAhBmE,EAAMwC,EAAKxC,IACf,IAAG,IAAUA,EAAIwpB,MAAO,IAAUxpB,EAAI0hB,SAClC7lB,EAAE,WAAailB,SAAY,SAAY,IAAIA,QAAQtS,KAAK,IAAI0d,KAAhE,CACA,IAAIjE,EAAUhnB,EAAI2E,QAAU3E,EAAI2E,OAAOqiB,QAAWkE,EAC9ChF,EAAQc,EAAOd,MACfiF,EAAOnE,EAAOjoB,GAAMqsB,EAAMrxB,OAAOkZ,aAAa,IAC9CvG,EAAK,EAETnL,EAAKnD,GAAG,OAAO,SAASsC,GAEpB,GADA9C,KAAKD,GAAGG,KAAK4C,KACTA,EAAI7C,GAAG,IAAI0qB,IAAf,KAEIppB,EAAKuB,EAAI,KAAMM,EAAMN,EAAIM,IAAKlC,EAAOkC,EAAI,KAAMiC,EAAMjC,EAAI,KAAMkC,EAAMlC,EAAI,KAAMT,EAAQS,EAAI,KAC3FF,GAAOJ,EAAI7C,GAAG,IAAIiD,IAAKA,IAAQA,EAAIuqB,GAAKvqB,EAAIuqB,KAAO,IAAIvuB,MAE3D,IAAIM,GAAKsD,EAAI7C,GAAG,IAAIytB,OAAS5qB,EAAI7C,GAAG,IAAIytB,KAAO,IAAIxuB,MAGnDquB,EAAKrsB,EAAKssB,EAAInoB,EAAK,CAACe,IAAKd,EAAKe,IAAK1D,IAAQ,SAASR,EAAKqB,GAErDN,IAAQA,EAAIyqB,IAAMzqB,EAAIyqB,MAAQ,IAAIzuB,MAClC4C,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,OAEtCmE,EAAKnD,GAAG,KAAd2B,EAAoB,CAAC+D,IAAK3E,EAAIY,IAAKA,EAAKe,IAAKA,GAClC,CAACgD,IAAK3E,EAAIiC,GAAIA,EAAIN,IAAKA,OAEtC,EAAaA,IAAQA,EAAIxD,EAAIwD,EAAIxD,GAAK,KACzCwD,IAAQA,EAAI0qB,IAAM1qB,EAAI0qB,MAAQ,IAAI1uB,UAItCyE,EAAKnD,GAAG,OAAO,SAASsC,GACpB9C,KAAKD,GAAGG,KAAK4C,GACb,IAAqBI,GAAXJ,EAAI7C,GAAG,IAAciD,IAAMJ,EAAII,IAAKA,IAAQA,EAAI2qB,IAAM,IAAI3uB,UACmBuG,EAAOJ,EAAUtI,EAAK6tB,EAAzGrpB,EAAKuB,EAAI,KAAMe,EAAMf,EAAIe,IAAK3C,EAAO4B,EAAIe,IAAI,KAAMrG,EAAMsF,EAAIe,IAAI,MAAM,GAAI/G,EAAI,GA0BnF,GAzBG,iBAAmBoE,EAClBmE,EAAMnE,EAEPA,IACIlE,KAAOD,EAAMmE,EAAK,QAAQpE,EAAE4kB,MAAQkJ,EAAQ,GAC5C5tB,IAAMkE,EAAK,OAAOpE,EAAEmY,MAAQ/T,EAAK,MACjClE,IAAMkE,EAAK,OAAOpE,EAAE4J,IAAMxF,EAAK,MAClCmE,EAAMulB,EAAQ,GAAG7tB,EAAOA,GAAOmE,EAAK,KACpC0pB,EAAQ,MAETvlB,IAAQvI,EAAE4kB,QACN,iBAAmBlkB,EAClB6H,EAAMA,EAAImoB,GAAK1wB,EAAEgxB,KAAOtwB,GAEzBA,IACIR,IAAMQ,EAAI,OAAOV,EAAEmY,MAAQzX,EAAI,KAAMV,EAAE4kB,MAAQ,GAC/C1kB,IAAMQ,EAAI,OAAOV,EAAE4J,IAAMlJ,EAAI,KAAMV,EAAE4kB,MAAQ,GAC7C1kB,KAAOD,EAAMS,EAAI,QAAQV,EAAE4kB,MAAQkJ,EAAQ,GAC3CvlB,IAAMA,EAAMA,EAAImoB,GAAO5C,EAAQ,IAAI7tB,GAAK,IAAOA,IAAQD,EAAEgxB,KAAOtwB,EAAI,MAAQ,UAGnFT,EAAM8G,EAAI,OAAS/G,EAAE4kB,SACrB5kB,EAAE4kB,MAAS3kB,IAAQD,EAAEsP,WAAwBrP,EAAM,IAEpDS,EAAI,OAAS0D,GAAM,IAAI,MAAQ2C,EAAI,QAAO/G,EAAEiO,SAAU,IACrDhO,GAAO4G,EAAKzD,MAAM,IAAIgB,KAAUnE,EAAIqG,IACpC,GAAGtG,EAAEgxB,MAED,IADA/wB,GAAOA,EAAImD,MAAM,IAAIpD,EAAEgxB,QACb/wB,EAAI4tB,IAAM,YAExB,GAAG5tB,GAAOA,EAAI4tB,IAAM,OAExB,IAAI1rB,EAAMmD,EAAIO,QACVnD,GAAM,IAAIN,KAAOsG,EAAI,EAkDzB,SAASjG,EAAK+F,EAAK9H,EAAK6M,EAAEoH,GAEtB,GADAjM,IACIF,EAAJ,CAEA,IAGIyoB,EAHA7sB,GADJ1D,GAAO6H,EAAI7H,GAAK1B,MAAM0xB,IACPhyB,MAAM,EAAE,GAAG,GAE1B,GADAgC,EAAMA,EAAIhC,OAAO,GAAG,GACjBsB,EAAE4kB,OAAS5kB,EAAE4kB,OAAS5kB,EAAEmuB,MAAQ,OAAO,EAG1C,GAAG,iBAAmB3lB,EAKlB,OAHCG,EAAQA,GAAS,IAJLvE,GAIekB,EAAIO,MAAM1B,IAAIwE,EAJ7BvE,GAAW1D,EAGJ8H,EAAI,KAAxByoB,EAAKzoB,EAAI,KAHIpE,QAMbpE,EAAEmuB,OAASnuB,EAAEmuB,OAAS,KAAO8C,GAAI,IAAIpxB,QAAU,IAGnDG,EAAEmuB,OAASnuB,EAAEmuB,OAAS,GAAK3lB,EAAI3I,OAC/B,IAAII,EAAMuI,EAAI0oB,YAAY,KACtBrrB,EAAQymB,EAAO/M,OAAO/W,EAAI9J,MAAMuB,EAAI,GAAI,KAAMywB,GAClDloB,EAAM8jB,EAAO/M,OAAO/W,EAAI9J,MAAM,EAAEuB,GAAM,KAAMywB,IAC3C/nB,EAAQA,GAAS,IAAIvE,GAAQkB,EAAIO,MAAM1B,IAAIwE,EAAMvE,GAAO1D,EAAKmF,EAAO2C,EAAKpE,IArE9EgC,IAAQA,EAAI+qB,IAAMzuB,GAElB+tB,EAAKloB,GAAK,IAAI,SAASlD,EAAKvD,EAAMqX,GAE9B/S,IAAQA,EAAIgrB,KAAO,IAAIhvB,MACvBgE,IAAQA,EAAIirB,IAAMlY,GAClB,IAAI9U,EAAIuP,MAAM0d,MAAMvqB,IAAIuL,KAAKif,EAAQ,KAAQ,IAAInvB,KAAQM,IAAK6uB,EAC1DltB,EAAIuP,MAAM0d,MAAMvqB,IAAIonB,QACjB9oB,IAAMhB,EAAIuP,MAAM0d,MAAMvqB,IAAI1B,IAAMA,GACtC,MAAMxD,IAIP,IAAIovB,EAAIO,EACR,GAHAxsB,QAAQC,MAAQD,QAAQC,KAAKvC,GAAI,IAAIN,KAAOM,EAAG,MAAOqH,KAAKC,UAAUzB,IAAO7F,GAAK,IAAIN,MACrF+W,EAAOA,GAAQ,IAEPuS,MAAQ5pB,GAAQ5B,KAAO+wB,EAAKnvB,EAAK,OAAS5B,KAAOsxB,EAAK1vB,EAAK,MAAM,CACrE,IAAI7B,EAAMsI,EAAIvJ,MAAM0xB,GAAMe,EAAKxxB,EAAI,GAAIyxB,EAAKzxB,EAAI,IAC/C0I,EAAQA,GAAS,IAAI8oB,GAAMnsB,EAAIO,MAAM1B,IAAIwE,EAAM8oB,GAAKC,EAAIF,EAAIP,EAAIQ,GACjE5qB,EAAKtB,EAAEwB,IAAI0qB,GAAI1qB,IAAI2qB,GAAIvuB,EAAE0qB,IAAM1rB,OAGhCL,IACoB,iBAATA,IACH9B,EAAEgxB,KACDlvB,EAAO5B,EAEPsrB,EAAMhiB,IAAI1H,EAAMW,EAAMzC,KAG1B2I,GAAS7G,GAAOW,EAAKX,EAAM,KAE3B9B,EAAEgxB,OAAStwB,EAAM,iBAAmB0D,IAASpE,EAAE4kB,QAAU5kB,EAAEuvB,OAC3D1oB,EAAKtB,EAAEwB,IAAI3C,GAAMjB,EAAE0qB,IAAM1rB,IAGjCiE,IAAQA,EAAIurB,KAAO,IAAIvvB,MAOpB4C,QAAQC,OAAS+M,GAAM,IAAI5P,KAAOM,GAAK,IAAIsC,QAAQC,KAAKvC,EAAGsP,EAAI,iBAAkBhN,QAAQC,KAAKvC,EAAGgG,EAAG,eAA2BA,EAAI,EAAGhG,GAAK,IAAIN,KAClJ,IAAIiF,EAAQ,aAAcA,EAAMA,OAAQ,EAAMA,EAAMwmB,IAAM9mB,EAC1DF,EAAKnD,GAAG,KAAM,CAAC0F,IAAK3E,EAAI6B,IAAKqC,EAAO8B,IAAK0O,EAAKoW,KAAM,EAAIrvB,EAAGmF,IAAKA,GAAWnF,EAAGiD,EAAGkE,EAAOjB,IAAKA,IAC7FpB,QAAQC,OAAS+M,GAAM,IAAI5P,KAAOM,GAAK,GAAKsC,QAAQC,KAAKvC,EAAGsP,EAAI,WAAYrR,OAAOU,KAAKsH,GAAO,IAAI9I,QACnG8I,EAAQzI,IACTF,EAAGoG,IAAQA,EAAIxD,EAAIwD,EAAIxD,GAAK,KAC/BwD,IAAQA,EAAIwrB,KAAO,IAAIxvB,MACvB4C,QAAQC,OAAS+M,GAAM,IAAI5P,KAAOM,GAAK,GAAKsC,QAAQC,KAAKvC,EAAGsP,EAAI,gBAyBnE3N,EAAIuP,OAAO,IAAI0d,MAAQ,CAACvqB,IAAI,CAACuL,KAAK,GAAI6b,MAAM,GAAI7nB,IAAK,CAACgM,KAAK,GAAI6b,MAAM,IACtE,IAAIoD,EAAQ,sBCpJd,WAYA,SAASM,EAAMxtB,IACbA,EAAMA,GAAO,IACTgQ,KAAOhV,OAAOgF,EAAIgQ,MAAQ,UAC9B,IAAIT,EAAQie,EAAMxtB,EAAIgQ,MAAOyd,EAAK,KAElC,GAAGle,EAED,OADA5O,QAAQkF,IAAI,6DACL2nB,EAAMxtB,EAAIgQ,MAEnBT,EAAQie,EAAMxtB,EAAIgQ,MAAQ,aAE1B,IAAIhQ,EAAI0tB,UAAY1tB,EAAI0tB,WAAaF,EAAME,WAAaA,UAAU,MAAMlwB,IACxE,IAAI,IAAIwC,EAAI0tB,WAAa,SAAWva,SAASC,SAAS,CACpD,IAAIhY,EAAImU,EAAM/F,IAAM+F,EAAM/F,EAAI,IAI9B,OAHA+F,EAAMtN,IAAM,SAAS7E,EAAGoM,EAAG3I,GAAKzF,EAAEgC,GAAKoM,EAAGtM,YAAW,WAAY2D,EAAG,KAAM,KAAK,MAC/E0O,EAAM7M,IAAM,SAAStF,EAAGyD,GAAK3D,YAAW,WAAY2D,EAAG,KAAMzF,EAAEgC,SAZzBvB,KAYoC,IAC1E8E,QAAQkF,IAAI,oDACL0J,GACP,MAAM/R,IA8BR,OA3BA+R,EAAMuE,MAAQ,WACZ,IAAInY,EAAI+xB,UAAU9e,KAAK5O,EAAIgQ,KAAM,GACjCrU,EAAEgyB,gBAAkB,SAAS9kB,GAAOA,EAAI+kB,OAAa,OAAEC,kBAAkB7tB,EAAIgQ,OAC7ErU,EAAEmyB,UAAY,WAAYL,EAAK9xB,EAAE2mB,QACjC3mB,EAAEsT,QAAU,SAASpG,GAAMlI,QAAQkF,IAAIgD,GAAK,KAC3C0G,EAAMuE,QAETvE,EAAMtN,IAAM,SAASiC,EAAKzG,EAAMoD,GAC9B,GAAI4sB,EAAJ,CACA,IAAIM,EAAKN,EAAGO,YAAY,CAAChuB,EAAIgQ,MAAO,aAChCiB,EAAM8c,EAAGE,YAAYjuB,EAAIgQ,MACzB7V,EAAM8W,EAAIhP,IAAIxE,EAAM,GAAGyG,GAC3B/J,EAAI2zB,UAAY7c,EAAI6c,UAAYC,EAAGD,UAAY,WAAYjtB,EAAG,KAAM,IACpE1G,EAAI+zB,QAAUjd,EAAIid,QAAUH,EAAGG,QAAU,SAASrlB,GAAMhI,EAAGgI,GAAK,iBAChE1O,EAAI8U,QAAUgC,EAAIhC,QAAU8e,EAAG9e,QAAU,SAASpG,GAAMhI,EAAGgI,GAAK,sBANvD3L,YAAW,WAAYqS,EAAMtN,IAAIiC,EAAKzG,EAAMoD,KAAM,IAS7D0O,EAAM7M,IAAM,SAASwB,EAAKrD,GACxB,GAAI4sB,EAAJ,CACA,IAEItzB,EAFKszB,EAAGO,YAAY,CAAChuB,EAAIgQ,MAAO,YACvBie,YAAYjuB,EAAIgQ,MACftN,IAAI,GAAGwB,GACrB/J,EAAI2zB,UAAY,WAAYjtB,EAAG,KAAM1G,EAAImoB,SACzCnoB,EAAI+zB,QAAU,SAASrlB,GAAMhI,EAAGgI,GAAK,IACrC1O,EAAI8U,QAAU,SAASpG,GAAMhI,EAAGgI,GAAK,SAN5B3L,YAAW,WAAYqS,EAAM7M,IAAIwB,EAAKrD,KAAM,IAQvDstB,aAAY,WAAYV,GAAMA,EAAGvf,QAASuf,EAAK,KAAMle,EAAMuE,UAAW,MAC/DvE,EAGT,GAAqB,oBAAX3J,QACP4nB,EAAM5nB,OAASA,QAAQwoB,WAAaZ,EACrCA,EAAME,UAAY9nB,OAAO8nB,eAEzB,IAAK3yB,UAAiByyB,EAAO,MAAMhwB,IAGrC,KACYgwB,EAAM5nB,OAAO3E,KAAO+qB,GAC1B3sB,GAAG,UAAU,SAASmD,GACxB3D,KAAKD,GAAGG,KAAKyD,GACbA,EAAKxC,IAAIuP,MAAQ/M,EAAKxC,IAAIuP,OAASie,EAAMhrB,EAAKxC,QAEjD,MAAMxC,KA5ER,UCMK6wB,EAAmB,4BAcnBC,EAAuB,CAC3BC,6BAA8B,GAC9BC,mCAAoC,IAGhCC,EAAM7oB,OAAOuN,SACbE,EAAOob,EAAIpb,KACXqb,EAA2Brb,EAAKsb,WAAW,cAAyB,mBAATtb,GAC7Dob,EAAInb,SAASsb,SAAS,kBAAoBF,KAC5CpyB,OAAOU,KAAKsxB,GAAe7nB,SAAQ,SAAAC,GAAG,OAAI4nB,EAAc5nB,GAAKmoB,SAAU,KACvEP,EAAiBG,EAAIvJ,eAAgB,CAAC2J,SAAS,IAGjD,ICxBIpb,EDwBEqb,EAAW,gEAKF,CACbrqB,MAAO,GAGD2E,aAAImC,+HACJA,EAAK7E,KAAQooB,EAAS9lB,KAAKuC,EAAK7E,MAAIqb,SAAA,MAAA,MAChC,IAAIC,qBAAqBzW,EAAK7E,KAAM,OAWe,GARvD6E,EAAK3E,MACPtK,OAAOU,KAAKilB,EAAKxd,OAAOgC,SAAQ,SAAA3J,GAC1BmlB,EAAKxd,MAAM3H,GAAG8J,OAAS2E,EAAK3E,aACvBqb,EAAKxd,MAAM3H,MAKxBmlB,EAAKxd,MADCiC,EAAM6E,EAAK7E,KAAO,IACNub,EAAKxd,MAAMiC,IAAQ5H,EAAOyM,EAAM,CAAC,QAC3B,WAApBA,EAAKwjB,YAAuBhN,UAAA,MAAA,OAAAA,SAEX9gB,EAAIiS,IAAIiI,OAAO6T,GAAQC,SAAS9W,KAAM6W,GAAQC,UAAS,OAAA,GAAAlN,kBAAAA,UAAA,MAAAA,KAAI,GAAE,QAAtE,OAAN5G,OAAM4G,UACe9gB,EAAIiS,IAAIuH,QAAQlP,EAAK7E,IAAKyU,GAAO,QAA1C,OAAZ+T,SAAYnN,UACa9gB,EAAIiS,IAAI+E,KAAKiX,EAAc,KAAM,KAAM,CAACvlB,KAAM,YAAW,QAAlFwlB,SACJC,IAAclS,OAAOxa,IAAI,SAASA,IAAIysB,GAAkBltB,IAAI,CAACyE,IAAK6E,EAAK7E,IAAK2oB,UAAU,IAAItxB,MAAOuxB,gBAAgB,SAE9F,IAAjB/jB,EAAKsjB,QACPtjB,EAAK7E,KAAOub,EAAKsN,QAAQhkB,EAAK7E,KAE9Bub,EAAKuG,OACN,QAAA,UAAA,6BAIHgH,gBAAO9oB,UACE7H,KAAK4F,MAAMiC,GAClB7H,KAAK2pB,QAIPiH,oBAAWC,GACTN,IAAc/vB,GAAG,MAAOqwB,GACxBA,EAAYhpB,IAAM,IAGpB8hB,gBACEhZ,aAAaC,QAAQ,WAAY/J,KAAKC,UAAU9G,KAAK4F,SAGvDkrB,oBACE,IAAIj1B,EAAS8U,aAAaG,QAAQ,YAUlC,OAREjV,EADEA,GAAW,cAANA,EACHgL,KAAK+E,MAAM/P,GAEX4zB,EAEFsB,EAAK3O,aACPvmB,EAAE2zB,GAAoB,IAExB/xB,OAAOU,KAAKtC,GAAG+L,SAAQ,SAAA3J,GAAC,OPtCfmU,EOsC8BvW,EAAEoC,GPtCtB+yB,EOsC0B,CAAChB,SAAS,GPrCvDvyB,OAAOU,KAAK6yB,GAAUppB,SAAQ,SAAAvC,QACXqd,IAAbtQ,EAAI/M,KACN+M,EAAI/M,GAAO2rB,EAAS3rB,OAGjB+M,EANC,IAACA,EAAU4e,KOuCZn1B,GAITo1B,iBACEtgB,aAAaC,QAAQ,WAAY,IACjC5Q,KAAK4F,MAAQ5F,KAAK8wB,YAIpBJ,iBAAQ7oB,GACF7H,KAAKkxB,eAAerpB,KACpB7H,KAAK4F,MAAMiC,IACb7H,KAAK4F,MAAMiC,GAAKmoB,SAAU,EAC1BO,IAAcpvB,IAAI,CAACuG,MAAO,CAACG,KAC3B7H,KAAK2pB,QAEL3pB,KAAKuK,IAAI,CAAC1C,IAAAA,MAKdspB,iBAAQtpB,EAAagpB,GACnB7wB,KAAK4F,MAAMiC,GAAKmoB,SAAU,EACtBa,GACF7wB,KAAK4wB,WAAWC,GAElB7wB,KAAK2pB,QAGPuH,wBAAerpB,GACb,MAAoC,WAA7Bd,OAAOuN,SAASC,UAAmD,IAAzB1M,EAAI3J,QAAQ,UAG/D9B,sBPjESgW,EAAUgf,EACXtP,SOiEAuP,EAAyBN,EAAK3O,YAAcpiB,KAAK4F,MAAM4pB,KAA8D,IAAzCxvB,KAAK4F,MAAM4pB,GAAkBQ,QACzG5I,EAAaiK,EAAyB50B,KAAK4E,IAAIiwB,EAAuB,GA9HxD,EA+HdnK,EP9GI,SAACpT,EAAY9C,GAMvB,IALA,IAGIoW,EACAlV,EAJEmV,EAAWvT,EAAIvY,MAAM,GACvB2B,EAAI4W,EAAIpX,OACR4qB,EAAMpqB,EAAI8T,EAGP9T,KAAMoqB,GAEXF,EAAOC,EADPnV,EAAQ1V,KAAKC,OAAOS,EAAI,GAAKV,KAAKL,WAElCkrB,EAASnV,GAASmV,EAASnqB,GAC3BmqB,EAASnqB,GAAKkqB,EAEhB,OAAOC,EAAS9rB,MAAM+rB,GOkGPtnB,CACbxC,OAAOU,MPrEFiU,EOsEMpS,KAAK4F,MPtEDwrB,EOsEQ,SAAC1kB,EAAW7E,GAC/B,OAAQ0pB,EAAKL,eAAerpB,IAAQ6E,EAAKsjB,WAAae,EAAK3O,YAAcva,IAAQ2nB,IPtEjF1N,EAAS,GACfrkB,OAAOU,KAAKiU,GAAKxK,SAAQ,SAAAvC,GACnB+rB,EAAUhf,EAAI/M,MAChByc,EAAOzc,GAAO+M,EAAI/M,OAGfyc,IOkEFsF,GAKL,OAHID,GAAUkK,GACZlK,EAAO/oB,KAAKoxB,GAEPrI,GAGTqK,wCACMC,EAAelB,IAAchwB,KAAK,aAClCmxB,EAAiBj0B,OAAOqlB,OAAO2O,GAAcjT,QAAO,SAAC9R,GAIvD,OAHIA,GAAQA,EAAKU,MAAuC,cAA/BV,EAAKU,KAAKvP,YAAYiN,MAC7ChJ,QAAQkF,IAAI,cAAe0F,GAEtBA,GAAQA,EAAKU,MAAiC,IAAzBV,EAAKU,KAAKukB,YAAkD,IAA7BjlB,EAAKU,KAAKwkB,gBAAuD,cAA/BllB,EAAKU,KAAKvP,YAAYiN,QAErH,GAAI4mB,EAAe/0B,OApJC,EAoJ2B,CAC7C,IAAIk1B,EAAmBp0B,OAAOU,KAAK6B,KAAK4F,OAAO4Y,QAAO,SAAA3W,GACpD,IAAIiqB,EAAar0B,OAAOqlB,OAAO2O,GAAcnrB,KAAI,SAACoG,GAAQ,OAAKA,EAAK7E,OAAK3J,QAAQ2J,IAAQ,EACrFmoB,EAAU+B,EAAKnsB,MAAMiC,GAAKmoB,QAE9B,QADmD,WAA7BjpB,OAAOuN,SAASC,UAAmD,IAAzB1M,EAAI3J,QAAQ,WACpD8xB,IAAY8B,KAEtC,GAAID,EAAiBl1B,OAAQ,CAC3B,IAAMwqB,EAAShrB,OAAO8D,EAAS4xB,IAC/B7xB,KAAK0wB,QAAQvJ,IAGbuK,EAAe/0B,OAhKC,GAiKlBqD,KAAK4wB,WAAW3wB,EAASyxB,KAI7B3E,2BACE/sB,KAAK4F,MAAQ5F,KAAK8wB,WAMlBxB,aAAY,WAAA,OAAM0C,EAAKR,sBAAqB,kBCxKxBS,GACtB,YADsBA,IAAAA,EAAY,KAC7Brd,EAAQ,CACX,IAAMsd,EAASz0B,OAAOsX,OAAO,CAAErN,MAAQuqB,EAAKvqB,OAASA,EAAMtL,SAAWuU,cAAc,EAAOJ,MAAM7P,UAAYuxB,GACzGA,EAAKvqB,OACPuqB,EAAKvqB,MAAME,SAAQ,SAACC,GAAW,OAAKH,EAAM6C,IAAI,CAAC1C,IAAAA,OAEjDH,EAAMqlB,OACNnY,EAAS,IAAIxS,EAAI8vB,GAEnB,OAAOtd,EChBT,ICDIud,EDCEC,EAAuB,CAC3BC,MAAO,qFACPC,QAAS,oCACTC,gBAAiB,oCACjBC,GAAI,sFACJC,KAAM,uCACNC,gBAAiB,KACjBC,UAAW,KACXC,cAAe,KACfC,IAAK,WACLC,MAAO,WACPC,MAAO,KACPlrB,IAAK,oFACLmrB,QAAS,qFACThrB,KAAM,oEAKFirB,aACJ,WAAY5oB,EAAGoH,GACb,oBAAWpH,EAAgB,CACzB,oBAAWA,EAAE2W,MAAsB,MAAM,IAAImC,mDAAmD9Y,EAAE2W,WAAUna,KAAKC,UAAUuD,EAAE2W,QAC7H,oBAAW3W,EAAEmc,KAAqB,MAAM,IAAIrD,kDAAkD9Y,EAAEmc,UAAS3f,KAAKC,UAAUuD,EAAEmc,OAC1H/U,EAAIpH,EAAE2W,MACN3W,EAAIA,EAAEmc,KAER,oBAAWnc,EAAkB,MAAM,IAAI8Y,kDAAkD9Y,OAAMxD,KAAKC,UAAUuD,IAC9G,IAAKA,EAAE1N,OAAU,MAAM,IAAIwmB,qCAC3B,GAAI1R,EAAG,CACL,oBAAWA,EAAkB,MAAM,IAAI0R,uDAAuD1R,OAAM5K,KAAKC,UAAU2K,IACnH,IAAKA,EAAE9U,OAAU,MAAM,IAAIwmB,sCAC3BnjB,KAAKwmB,KAAOnc,EACZrK,KAAKghB,MAAQvP,MACR,CACLzR,KAAKghB,MAAQ3W,EACb,IAAMxN,EAAIo2B,EAAUC,YAAYlzB,KAAKghB,OACrC,IAAInkB,EAGF,MAAM,IAAIsmB,gEAFVnjB,KAAKwmB,KAAO3pB,GAKjBo2B,EAEME,QAAP,WAEE,OAAO,IAAIF,SADD,SAAJxhB,EAAIpH,GAAC,OAAIA,GAAKA,EAAoB,GAAhB5N,KAAKL,UAAiBiO,EAAI,GAAGtO,SAAS,KAAO,CAAC,MAAQ,KAAO,KAAO,KAAO,MAAMC,QAAQ,SAAUyV,GAC9FA,KAC9BwhB,EAEMG,sBAAP,WACE,OAAOhB,GACRa,EAEMI,aAAP,SAAoB7M,GAClB,OAAO/oB,OAAOU,KAAKi0B,GAAsBl0B,QAAQsoB,IAAS,GAC3D,kBAwBA,OAxBA8M,EAEDD,aAAA,WACE,OAAOJ,EAAUI,aAAarzB,KAAKwmB,OACpCyM,EAEMC,YAAP,SAAmBlS,GACjB,IAAK,IAAM3b,KAAO+sB,EAChB,GAAIpR,EAAMpkB,MAAMw1B,EAAqB/sB,IACnC,OAAOA,GAGZ4tB,EAEMM,OAAP,SAAclpB,EAAGoH,GACf,OAAOpH,EAAEkpB,OAAO9hB,IACjB6hB,EAEDC,OAAA,SAAOlpB,GACL,OAAOA,GAAKrK,KAAKwmB,OAASnc,EAAEmc,MAAQxmB,KAAKghB,QAAU3W,EAAE2W,OACtDsS,EAEDE,IAAA,WACE,OAAUlN,mBAAmBtmB,KAAKghB,WAAUsF,mBAAmBtmB,KAAKwmB,uBCzEhDpO,GAKtB,OAJK+Z,IACHA,EAAc5B,IAAclS,QAChBU,KAAK0U,GAAQrD,UAEpBhY,EAAMmY,IAAclS,KAAKjG,GAAO+Z,ECHzC,IAAMuB,EAAsB,CAACpW,MAAM,EAAME,OAAO,EAAMmW,OAAO,GA8EvDC,aA0BJ,WAAYC,cAOV,GApBF7zB,sBAAmB,GACnBA,uBAAoB,GACpBA,aAAU,GACVA,yBAAsB,GACtBA,2BAAwB,GACxBA,cAAW,GACXA,eAAY,GACZA,wBAAqB,GACrBA,yBAAsB,GACtBA,8BAA2B,GAKzBA,KAAK8zB,cAAgBD,EAAQC,cAEzBD,EAAQE,UACV/zB,KAAKg0B,YAAYH,oBAGRA,EAAQI,aACjBj0B,KAAKk0B,eAAeL,EAAQI,aAAcJ,EAAQlK,WAC7C,GAAIhiB,MAAM4O,QAAQsd,EAAQI,cAAe,CAC9C,IAAMn3B,EAAI,GACV+2B,EAAQI,aAAarsB,SAAQ,SAAA/L,GAAC,OAAIiB,EAAEjB,GAAK4B,OAAOsX,OAAO,GAAI2e,MAC3DG,EAAQI,aAAen3B,mBAEd+2B,EAAQI,eACJx2B,OAAOU,KAAK01B,EAAQI,cAC5BrsB,SAAQ,SAAA3J,GACPA,IAAMw1B,GAAQrD,SAAShY,KACzBgL,EAAK8Q,eAAej2B,EAAG41B,EAAQlK,KAAMlsB,OAAOsX,OAAO,GAAI2e,EAAqBG,EAAQI,aAAah2B,QAGrG41B,EAAQI,aAAaR,GAAQrD,SAAShY,KAAOyb,EAAQI,aAAaR,GAAQrD,SAAShY,MAAQ3a,OAAOsX,OAAO,GAAI2e,GACzGG,EAAQ7rB,MACVhI,KAAKgI,KAAO6rB,EAAQ7rB,KACpBhI,KAAK8K,KAAO+oB,EAAQ/oB,OAEpB+oB,EAAQ7rB,KAAOirB,EAAUE,UAAUnS,MACnChhB,KAAKgI,KAAO6rB,EAAQ7rB,KACpB6rB,EAAQI,aAAaR,GAAQrD,SAAShY,KAAKub,OAAQ,EACnDE,EAAQI,aAAaR,GAAQrD,SAAShY,KAAK+b,SAAU,GAEvDn0B,KAAKo0B,aAAa,CAACC,WAAW,KAEhCr0B,KAAKi0B,aAAeJ,EAAQI,aACxBJ,EAAQ7rB,OAKVhI,KAAKs0B,cAAct0B,KAAKgI,KAAQhI,KAAKu0B,oBACrCv0B,KAAKw0B,kBAAkBva,MAAK,SAAA1d,GAC1B6mB,EAAKkR,UAAUlR,EAAKpb,KAAMzL,MAE5ByD,KAAKy0B,cAAcz0B,KAAKgI,MAAM,SAACzL,EAAG0B,EAAG8J,GACnCqb,EAAKsR,iBAAiB3sB,GAAQxL,KAEhCyD,KAAKy0B,kBAAkBz0B,KAAKgI,MAAQ,SAACzL,EAAG0B,EAAG8J,GACzCqb,EAAKuR,kBAAkB5sB,GAAQxL,MAInCyD,KAAK40B,wBAAwB,SAACX,EAAch2B,EAAG8J,GAG7C,IAFA,IAAI8sB,GAAW,EACT12B,EAAOV,OAAOU,KAAKilB,EAAK6Q,cACrB92B,EAAI,EAAGA,EAAIgB,EAAKxB,OAAQQ,IAC/B,GAAIimB,EAAK6Q,aAAa91B,EAAKhB,IAAIw2B,OAASvQ,EAAK6Q,aAAa91B,EAAKhB,IAAI23B,QAAS,CAC1ED,GAAW,EACX,MAMJ,GAHKA,GACH12B,EAAKyJ,SAAQ,SAAA3J,GAAC,OAAImlB,EAAK6Q,aAAah2B,GAAG01B,OAAQ,KAE7CvQ,EAAK6Q,aAAalsB,KAAUqb,EAAK6Q,aAAalsB,GAAM4rB,OAASvQ,EAAK6Q,aAAalsB,GAAM+sB,2BAC5Eb,EAA2B,CACpC,GAAIptB,KAAKC,UAAUsc,EAAK6Q,gBAAkBptB,KAAKC,UAAUmtB,GAAiB,OAC1E7Q,EAAK6Q,aAAeA,SACb7Q,EAAK6Q,aAAalsB,GAAM+sB,QAC/Br3B,OAAOU,KAAK81B,GAAcrsB,SAAQ,SAAA3J,GAC5BA,IAAMw1B,GAAQrD,SAAShY,KACzBgL,EAAK8Q,eAAej2B,GAAG,EAAMR,OAAOsX,OAAO,GAAI2e,EAAqBO,EAAah2B,KAAK,MAG1FmlB,EAAK2R,sBACLlB,EAAQmB,OAAQ,MAIjBnB,EAAQmB,YAA2BtS,IAAjBmR,EAAQlK,OAAuC,IAAjBkK,EAAQlK,MAC3D3pB,KAAK2pB,OAER,kBA2gCA,OA3gCA2J,EAEDU,YAAA,SAAYH,GACV,IAAMt3B,EAAIs3B,EAAQE,SAASj4B,MAAM,KACjC,GAAiB,IAAbS,EAAEI,OAAc,CAClB,IAAMs4B,EAAWlE,EAAKhM,gBAAgB,WAAYxoB,EAAE,IAC9C24B,EAAYnE,EAAKhM,gBAAgB,YAAaxoB,EAAE,IAChDu4B,EAAU/D,EAAKhM,gBAAgB,UAAWxoB,EAAE,IAC5C6b,EAAM0c,GAAWG,EAQvB,GAPIA,EACFpB,EAAQI,aAAe7b,EACd8c,GAAaJ,GAAWA,IAAYrB,GAAQrD,SAAShY,MAC9Dyb,EAAQ7rB,KAAOktB,EACfrB,EAAQI,aAAe,GACvBJ,EAAQI,aAAaa,GAAWr3B,OAAOsX,OAAO,CAAC+f,SAAS,GAAOpB,IAE7Dtb,IAAQqb,GAAQrD,SAAShY,IAAK,CAChC,IAAM+c,EAAepE,EAAKhM,gBAAgB,IAAKxoB,EAAE,IAC3C64B,EAASrE,EAAKhM,gBAAgB,IAAKxoB,EAAE,IACvC44B,GAAgBC,IAClBp1B,KAAK2pB,OACLkK,EAAQmB,OAAQ,EAChBzE,IAAclS,KAAKjG,GAAKvU,IAAI,aAAaA,IAAIuxB,GAAQvxB,IAAI,sBAAsBrD,cAAE,kBAAC,WAAM60B,GAAS,UAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAnS,SACvE9gB,EAAIiS,IAAI4H,QAAQoZ,EAAWF,GAAa,OAAjD,OAATG,SAASpS,SACoB9gB,EAAIiS,IAAIuH,QAAQ6X,GAAQrD,SAAShY,IAAK+c,GAAa,OAA5D,OAApBI,SAAoBrS,SACK6N,EAAKhO,QAAQwS,GAAqB,OAA3DC,SACNzE,EAAKpO,iBAAiB4N,IAAe+E,GAAW,SAAAjX,GAC9CA,EAAKxa,IAAI,gBAAgBA,IAAI2xB,EAAiBh6B,MAAM,EAAG,KAAK4H,IAAImyB,MAC/D,QAAA,UAAA,0BACJ,mBAAA,wCAIRjC,EAEDmC,mBAAA,SAAmBrd,cACjB,OAAO,IAAIzB,SAAQ,SAAA1L,GACZsmB,EAAKmD,iBAAiBtc,GAMzBnN,EAAQsmB,EAAKmD,iBAAiBtc,IAL9BmZ,EAAKkD,cAAclD,EAAKvpB,MAAM,SAAAzL,GAC5Bg1B,EAAKmD,iBAAiBtc,GAAO7b,EAC7B0O,EAAQsmB,EAAKmD,iBAAiBtc,MAC7BA,OAKRkb,EAEDoC,oBAAA,SAAoBtd,cAClB,OAAIA,IAAQqb,GAAQrD,SAAShY,IAAcpY,KAAKu0B,mBACzC,IAAI5d,SAAQ,SAAA1L,GACZ8mB,EAAK4C,kBAAkBvc,GAM1BnN,EAAQ8mB,EAAK4C,kBAAkBvc,IAL/B2Z,EAAK0C,kBAAkB1C,EAAK/pB,MAAQ,SAAAzL,GAClCw1B,EAAK4C,kBAAkBvc,GAAO7b,EAC9B0O,EAAQ8mB,EAAK4C,kBAAkBvc,MAC9BA,OAKRkb,EAEDqC,oBAAA,WACE31B,KAAK8zB,cAAgB1xB,EAAIiS,IAAIjY,OAAO,IAAIL,SAAS,UAEjDiE,KAAKs0B,cAAct0B,KAAKgI,KAAQhI,KAAK8zB,gBAGvCR,EAKMsC,KAAI,WAAA,kBAAV,WAAWC,GAAW,6BAAA,OAAA,sBAAA,OACpBtF,IAAclS,KAAKwX,GAAahyB,IAAI7D,KAAK00B,iBAAiBmB,IAAcz1B,MACxE,OAAA,UAAA,+BACD,OAAA,YAAA,gCAHS,GAKVkzB,EAKM7V,MAAK,WAAA,kBAAX,WAAYoY,GAAW,6BAAA,OAAA,sBAAA,OACrB71B,KAAK41B,KAAKC,GACV71B,KAAKs0B,UAAUt0B,KAAKgI,KAAM,MAC1BhI,KAAKs0B,cAAct0B,KAAKgI,KAAQ,aACzBhI,KAAK81B,QAAQD,UACb71B,KAAK+1B,oBAAoBF,UACzB71B,KAAKg2B,sBAAsBH,GAClC71B,KAAK21B,sBAAsB,OAAA,UAAA,+BAC5B,OAAA,YAAA,gCARU,GAQVrC,EAEKkB,2BAAe,kBAArB,aAAA,QAAA,6BAAA,OAAA,sBAAA,OAAA,GACOx0B,KAAKi2B,cAAYC,UAAA,MAAA,OAAAA,SACG9zB,EAAIiS,IAAIiI,OAAOmX,GAAQrD,SAAS9W,KAAMma,GAAQrD,UAAS,OAAhE,OAAR+F,SAAQD,SACanF,EAAKhO,QAAQoT,GAAS,OAA/B,OAAZC,SAAYF,SACQnF,EAAKhO,QAAQqT,EAAep2B,KAAKgI,MAAK,OAAhEhI,KAAKi2B,oBAAY,QAAA,yBAEZj2B,KAAKi2B,cAAY,QAAA,UAAA,+BACzB,OAAA,WAAA,mCAED3C,EAGA+C,uBAAA,WACE,OAAO54B,OAAOU,KAAK6B,KAAK81B,UAG1BxC,EAGAgD,gBAAA,SAAgBC,GACVv2B,KAAKw2B,0BACPx2B,KAAKw2B,4BAELx2B,KAAKw2B,0BAA4B,EAEnCx2B,KAAKy2B,yBAAyBz2B,KAAKw2B,2BAA6BD,EAC5Dv2B,KAAKi0B,cACPsC,EAASv2B,KAAKi0B,eAEjBX,EAEDyB,oBAAA,sBACEt3B,OAAOU,KAAK6B,KAAKy2B,0BAA0B7uB,SAAQ,SAAArG,GACjDywB,EAAKyE,yBAAyBl1B,GAAIywB,EAAKiC,kBAI3CX,EAGAoD,MAAA,WACE,OAAO12B,KAAKgI,MAAQhI,KAAKq2B,yBAAyB,IACnD/C,EAEKqD,qBAAS,kBAAf,WAAgBve,GAAG,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACZpY,KAAK81B,QAAQ1d,IAAIwe,SAAA,MAAA,OAAAA,SACD7F,EAAKxO,eAAegO,IAAclS,KAAKjG,GAAKvU,aAAY,OAAjE,OAAJyV,SAAIsd,SACgBx0B,EAAIiS,IAAIiI,OAAOhD,EAAMma,GAAQrD,UAAS,OAAhEpwB,KAAK81B,QAAQ1d,UAAI,OAAA,yBAEZpY,KAAK81B,QAAQ1d,IAAI,OAAA,UAAA,+BACzB,OAAA,YAAA,mCAEDwb,EAGaiD,sBAAqB,WAAA,kBAAlC,WAAmCze,EAAKL,GAAI,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAA+e,SACvB/F,EAAKxO,eAAegO,IAAclS,KAAKjG,GAAKvU,aAAY,OAAjE,OAAJyV,SAAIwd,SACW10B,EAAIiS,IAAIiI,OAAOhD,EAAMvB,GAAK,OAAnC,yBACLgZ,EAAKhO,eAAiB3K,IAAI,OAAA,UAAA,0BAClC,OAAA,cAAA,gCAJiC,GAMlCwb,EAGamD,wBAAuB,WAAA,kBAApC,WAAqC3e,EAAKL,GAAI,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAif,SACzBjG,EAAKxO,eAAegO,IAAclS,KAAKjG,GAAKvU,aAAY,OAAjE,OAAJyV,SAAI0d,SACW50B,EAAIiS,IAAIiI,OAAOhD,EAAMvB,GAAK,OAAnC,yBACLgZ,EAAKhO,eAAiBhL,EAAKK,MAAI,OAAA,UAAA,0BACvC,OAAA,cAAA,gCAJmC,GAMpCwb,EAKaqD,YAAW,WAAA,kBAAxB,WAAyBV,EAAUW,GAAiB,YAAA,6BAAA,OAAA,sBAAA,OAClB,gBADCA,IAAAA,GAAoB,GAC/CC,EAAU1D,GAAQrD,SAAQgH,SACTh1B,EAAIiS,IAAIiI,OAAO6a,EAAQ7d,KAAM6d,GAAQ,OAAtDhB,SACFe,GACFtD,EAAQyD,oBAAgB3U,OAAWA,GAAW,GAE1CjZ,EAAO,GAEP6tB,aAAa,kBAAG,WAAOtW,EAAOuW,GAAkB,QAAA,6BAAA,OAAA,sBAAA,OAAA,IAChDvW,GAAUvX,EAAK8tB,IAAmBC,UAAA,MACJ,GAAhC/tB,EAAK8tB,IAAsB,IACvBA,EAAmB56B,OAAS,KAAE66B,SAAA,MACoC,OAApEjH,IAAclS,OAAOxa,aAAaA,IAAI0zB,GAAoBn0B,IAAI,yBAAM,OAAA,OAAAo0B,SAGxCzG,EAAKxO,eAAegO,IAAclS,OAAOxa,aAAaA,IAAI0zB,GAAoB1zB,YAAW,OAAlG,OAAf4zB,SAAeD,UACAp1B,EAAIiS,IAAI4H,QAAQwb,EAAiBtB,GAAS,QAAnD,GAANuB,UACKF,UAAA,MAAA,0BAAA,QAGPE,EAAOtf,sBAAcsf,EACvBnB,EAAS,IAAI3C,EAAQ,CACnBvuB,IAAK8xB,EACLlD,aAAcyD,EAAOtf,KAAOsf,EAC5B/N,MAAM,KAEC+N,EAAO1vB,MAAQ0vB,EAAOzD,cAAgByD,EAAO5D,eACtDyC,EAAS,IAAI3C,EAAQ,CACnBvuB,IAAK8xB,EACLlD,aAAcyD,EAAOzD,aACrBjsB,KAAM0vB,EAAO1vB,KACb8rB,cAAe4D,EAAO5D,cACtBnK,MAAM,KAET,QAAA,UAAA,0BAEJ,qBA5BkB,mCA8BnB4G,IAAclS,OAAOxa,aAAayC,MAAM9F,GAAG82B,GAAe,OAAA,UAAA,0BAC3D,OAAA,cAAA,gCAvCuB,GAuCvBhE,EAEDiB,iBAAA,WAIE,OAHKv0B,KAAK8zB,eACR9zB,KAAK21B,sBAEA31B,KAAK8zB,eACbR,EAEKuD,iCAAqB,kBAA3B,WAA4Bze,GAAG,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACxBpY,KAAK+1B,oBAAoB3d,IAAIuf,SAAA,MAAA,OAAAA,SACX33B,KAAK22B,UAAUve,GAAI,OAA5B,OAANkE,SAAMqb,SAC0B5G,EAAKhO,QAAQzG,EAASlE,GAAI,OAAhEpY,KAAK+1B,oBAAoB3d,UAAI,OAAA,yBAExBpY,KAAK+1B,oBAAoB3d,IAAI,OAAA,UAAA,+BACrC,OAAA,YAAA,mCAAAkb,EAEKyD,mCAAuB,kBAA7B,WAA8B3e,GAAG,MAAA,6BAAA,OAAA,sBAAA,OAAA,GAC1BpY,KAAKg2B,sBAAsB5d,IAAIwf,SAAA,MAAA,OAAAA,SACb53B,KAAK22B,UAAUve,GAAI,OAA5B,OAANkE,SAAMsb,SAC4B7G,EAAKhO,QAAQzG,EAASmX,GAAQrD,SAAShY,KAAI,OAAnFpY,KAAKg2B,sBAAsB5d,UAAI,OAAA,yBAE1BpY,KAAKg2B,sBAAsB5d,IAAI,OAAA,UAAA,+BACvC,OAAA,YAAA,mCAEDkb,EAGMuE,YAAW,WAAA,kBAAjB,WAAkBtB,GAAQ,aAAA,6BAAA,OAAA,sBAAA,OAiBrB,GAhBHv2B,KAAKq2B,yBAAyBzuB,mBAAO,kBAAC,WAAMwQ,GAAG,QAAA,6BAAA,OAAA,sBAAA,OAAA,GACzCA,IAAQqb,GAAQrD,SAAShY,KAAG0f,UAAA,MAAA,IAG1BC,EAAK/vB,MAAI8vB,SAAA,MAAA,OAAAA,SACkBC,EAAKtC,mBAAmBrd,GAAI,OAAzD4f,SAAoBF,UAAA,MAAA,OAAA,OAAAA,SAESC,EAAKhB,wBAAwB3e,GAAI,OAA9D4f,SAAoB,QAEtBzH,IAAclS,KAAKjG,GAAKvU,aAAaA,IAAIm0B,GAAsBn0B,YAAYyC,MAAMM,MAAK,SAAChI,EAAMyG,GAAS0yB,EAAKE,gBAAgB1B,EAAU33B,EAAMm5B,EAAK/vB,MAAQoQ,GAAK,EAAO/S,EAAK+S,MAAQ,QAAA,GAE9K2f,EAAK/vB,MAAI8vB,UAAA,MAAA,OAAAA,UAEqBC,EAAKlB,sBAAsBze,GAAI,QAA1Dmf,SACNW,IAAYr0B,aAAaA,IAAI0zB,GAAoB1zB,YAAYyC,MAAMM,MAAK,SAAChI,EAAMyG,GAAS0yB,EAAKE,gBAAgB1B,EAAU33B,EAAMwZ,GAAK,EAAM/S,EAAKouB,GAAQrD,SAAShY,QAAQ,QAAA,UAAA,0BAEzK,mBAAA,qCACGpY,KAAKgI,MAAImwB,SAAA,MAAA,OAAAA,SAEgBn4B,KAAKw0B,kBAAiB,OAA3CyB,SACNiC,IAAYr0B,aAAaA,IAAIoyB,GAAcpyB,YAAYyC,MAAMM,MAAK,SAAChI,EAAMyG,GAAS0yB,EAAKE,gBAAgB1B,EAAU33B,EAAMm5B,EAAK/vB,MAAM,EAAM3C,EAAKouB,GAAQrD,SAAShY,QAAQ,OAAA,UAAA,+BAEzK,OAAA,YAAA,gCAvBgB,GAuBhBkb,EAEK2E,2BAAe,kBAArB,WAAsB1B,EAAU33B,EAAMs2B,EAAWkD,EAAc/yB,EAAK0C,GAAI,UAAA,6BAAA,OAAA,sBAAA,OAAA,IAClE/H,KAAKq4B,SAAShzB,IAASzG,GAAI05B,SAAA,MAAA,0BAAA,OAAA,IAGhBt4B,KAAKgI,MAAIswB,SAAA,MAAA,OAAAA,SAAUt4B,KAAK01B,oBAAoB3tB,GAAK,OAAAuwB,YAAAA,UAAA,MAAA,OAAA,OAAAA,UAAWt4B,KAAK22B,UAAUzB,GAAU,QAAAoD,YAAA,QAAxF,OAANhc,OAAMgc,UACYl2B,EAAIiS,IAAI4H,QAAQrd,EAAM0d,GAAO,QAAtC,oBAATic,WAC2BD,UAAA,MAAA,0BAAA,QAG3BriB,EAAO,CAACmiB,aAAAA,EAAclD,UAAAA,EAAWntB,KAAAA,GACvC/H,KAAKq4B,SAAShzB,GAAOkzB,EACrBhC,EAASgC,EAAWtiB,GAAM,QAAA,UAAA,+BAC3B,OAAA,sBAAA,mCAEDqd,EAGMkF,aAAY,WAAA,kBAAlB,WAAmBjC,GAAQ,aAAA,6BAAA,OAAA,sBAAA,OACnBkC,aAAgB,kBAAG,WAAO31B,EAAKmT,GAAI,6BAAA,OAAA,sBAAA,OAClCyiB,EAAKC,yBAIUD,EAAKC,OAAOvpB,KAAoBspB,EAAKC,OAAOvpB,KAAOspB,EAAKC,OAAOvpB,KAAKqhB,eAC9E3tB,EAAIsM,OACVspB,EAAKC,OAAS71B,EACdyzB,EAASzzB,EAAKmT,KANhByiB,EAAKC,OAAS71B,EACdyzB,EAASzzB,EAAKmT,IAOf,OAAA,UAAA,0BACF,qBAXqB,mCAYtBjW,KAAK44B,KAAK,aAAa,SAAA91B,GAAG,OAAI21B,EAAiB31B,EAAK,CAACs1B,cAAc,EAAMrwB,KAAM0rB,GAAQrD,SAAShY,SAChGpY,KAAK40B,QAAQ,aAAa,SAAC9xB,EAAK7E,EAAG8J,GAAI,OAAK0wB,EAAiB31B,EAAK,CAACs1B,cAAc,EAAOrwB,KAAAA,OAAQ,OAAA,UAAA,+BACjG,OAAA,YAAA,gCAfiB,GAiBlBurB,EAIMuF,sBAAqB,WAAA,kBAA3B,WAA4BzpB,GAAa,6BAAA,OAAA,sBAAA,OACC,OAAxCA,EAAOA,IAAQ,IAAIlQ,MAAOuxB,gCACnBzwB,KAAKoD,uBAAwBgM,IAAK,OAAA,UAAA,+BAC1C,OAAA,YAAA,gCAH0B,GAK3BkkB,EAGMwF,sBAAqB,WAAA,kBAA3B,WAA4BvC,GAAQ,WAAA,6BAAA,OAAA,sBAAA,OAClCv2B,KAAK44B,yBAAyB,SAAAxpB,GAC5B2pB,EAAKC,mBAAqB5pB,EACtBmnB,GACFA,EAASwC,EAAKC,uBAEf,OAAA,UAAA,+BACJ,OAAA,YAAA,gCAP0B,GAS3B1F,EAGM2F,yBAAwB,WAAA,kBAA9B,WAA+B1C,GAAQ,WAAA,6BAAA,OAAA,sBAAA,OACrCv2B,KAAK40B,4BAA4B,SAAAxlB,GAC/B8pB,EAAKC,sBAAwB/pB,EACzBmnB,GACFA,EAAS2C,EAAKC,0BAEf,OAAA,UAAA,+BACJ,OAAA,YAAA,gCAP6B,GAO7B7F,EAEK8F,6BAAiB,kBAAvB,WAAwBhhB,GAAG,6BAAA,OAAA,sBAAA,OACzBpY,KAAKk0B,eAAe9b,GAAK,EAAM,CAACkF,MAAM,EAAOE,OAAO,IAAQ,OAAA,UAAA,+BAC7D,OAAA,YAAA,mCAED8V,EAIMY,eAAc,WAAA,kBAApB,WAAqB9b,EAAauR,EAAa0P,EAAmBhF,GAAmB,eAAA,6BAAA,OAAA,sBAAA,OAAxC,YAAX1K,IAAAA,GAAO,IACnC3pB,KAAKgI,MAAIsxB,SAAA,MAAA,0BAAA,OAKZ,QAFmB5W,IAAhB2W,IACFA,EAAc3F,IAEZ1zB,KAAK81B,QAAQ1d,IAAQvR,KAAKC,UAAU9G,KAAK81B,QAAQ1d,MAAUvR,KAAKC,UAAUuyB,IAAYC,SAAA,MAAA,0BAAA,OAItE,OADpBt5B,KAAK81B,QAAQ1d,GAAO,KACpBpY,KAAK22B,UAAUve,GAAKkhB,UACat5B,KAAK62B,sBAAsBze,GAAI,QAAxC,GAAlBmf,UACF5N,GAAI2P,UAAA,MAAA,OAAAA,UAEiBl3B,EAAIiS,IAAIiI,OAAOmX,GAAQrD,SAAS9W,KAAMma,GAAQrD,UAAS,QACV,OAD9D+F,SAAQmD,KACd/I,IAAclS,OAAOxa,aAAaA,IAAI0zB,GAAoB1zB,WAAUy1B,UAAWl3B,EAAIiS,IAAIuH,QAAQ,CAACxD,IAAAA,GAAM+d,GAAS,QAAAmD,YAAAA,KAA1Cl2B,oBAAG,QAEtEpD,KAAKgI,OACPhI,KAAKi0B,aAAa7b,GAAOihB,EACrB1P,IACF3pB,KAAKs0B,cAAct0B,KAAKgI,KAAQhI,KAAKu0B,oBACrCv0B,KAAKw0B,kBAAkBva,MAAK,SAAA1d,GAC1Bg9B,EAAKjF,UAAUiF,EAAKvxB,KAAMzL,MAE5ByD,KAAKy0B,cAAcz0B,KAAKgI,MAAM,SAACzL,EAAG0B,EAAG8J,GACnCwxB,EAAK7E,iBAAiB3sB,GAAQxL,KAEhCyD,KAAKy0B,kBAAkBz0B,KAAKgI,MAAQ,SAACzL,EAAG0B,EAAG8J,GACzCwxB,EAAK5E,kBAAkB5sB,GAAQxL,KAEjCyD,KAAK2pB,SAGL0K,IACF52B,OAAOqlB,OAAO9iB,KAAKw5B,qBAAqB5xB,SAAQ,SAAAmM,GAC9CA,EAAInM,SAAQ,SAAA9K,GACLA,EAAEiL,MAAQjL,EAAEiL,OAASqQ,GACxBmhB,EAAKE,uBAAuBrhB,EAAKtb,EAAEuI,IAAKvI,EAAEy5B,gBAIhD94B,OAAOqlB,OAAO9iB,KAAK05B,oBAAoB9xB,SAAQ,SAAAmM,GAC7CA,EAAInM,SAAQ,SAAA9K,GACNA,EAAEiL,MAAQjL,EAAEiL,OAASqQ,IACrBihB,EAAY7b,MACd+b,EAAKI,sBAAsBvhB,EAAKtb,EAAEuI,IAAKvI,EAAEy5B,UAEzCz5B,EAAE88B,OAAS98B,EAAE88B,MAAMx5B,cAI1B,QAAA,UAAA,+BACF,OAAA,kBAAA,gCArDmB,GAuDpBkzB,EAIMnmB,KAAI,WAAA,kBAAV,WAAWrK,GAAG,gBAAA,6BAAA,OAAA,sBAAA,OAAA,oBACDA,GAAgB+2B,SAAA,MACR,GACE,KADnB/2B,EAAMA,EAAI8kB,QACFjrB,QAAYk9B,SAAA,MAAA,0BAAA,OAGpB/2B,EAAM,CACJsM,MAAO,IAAIlQ,MAAQuxB,cACnBxiB,KAAMnL,GACN+2B,UAAA,MAAA,OAAA,oBACc/2B,GAAgB+2B,UAAA,MAChC/2B,EAAIsM,KAAOtM,EAAIsM,OAAS,IAAIlQ,MAAQuxB,cAAcoJ,UAAA,MAAA,QAAA,MAE5C,IAAI1W,iDAAgD,QAAA,IAGxDnjB,KAAKgI,MAAI6xB,UAAA,MAAA,OAAAA,UACaz3B,EAAIiS,IAAIuH,QAAQ/U,KAAKC,UAAUhE,GAAM9C,KAAKu0B,oBAAmB,QAAtE,OAATc,SAASwE,UACY75B,KAAKw0B,kBAAiB,QAA3CyB,SACNiC,IAAYr0B,aAAaA,IAAIoyB,GAAcpyB,YAAYA,OAAOf,EAAIsM,MAAQhM,IAAIiyB,GAC9E6C,IAAYr0B,aAAaA,IAAIoyB,GAAcpyB,iBAAiBT,IAAIiyB,GAAWwE,UAAA,MAAA,QAErE17B,EAAO6B,KAAKq2B,yBACTl5B,EAAI,EAAC,QAAA,KAACA,EAAIgB,EAAKxB,SAAMk9B,UAAA,MAC+B,OAD/BA,KACJz3B,EAAIiS,IAAGwlB,KAAShzB,KAAKC,UAAUhE,GAAI+2B,UAAS75B,KAAK22B,UAAUx4B,EAAKhB,IAAG,QAAA,OAAA08B,YAAAA,eAA3Dje,6BAAO,QAAxB,OAATyZ,SAASwE,UACkB75B,KAAK62B,sBAAsB14B,EAAKhB,IAAG,QAA9Do6B,SACNW,IAAYr0B,aAAaA,IAAI0zB,GAAoB1zB,YAAYA,OAAOf,EAAIsM,MAAQhM,IAAIiyB,GACpF6C,IAAYr0B,aAAaA,IAAI0zB,GAAoB1zB,iBAAiBT,IAAIiyB,GAAW,QAJpDl4B,IAAG08B,UAAA,MAAA,QAAA,UAAA,+BAOrC,OAAA,YAAA,gCA9BS,GAgCVvG,EAGM3J,KAAI,WAAA,kBAAV,aAAA,cAAA,6BAAA,OAAA,sBAAA,OAAA,IACM3pB,KAAKgI,MAAI8xB,UAAA,MAAA,OAAAA,SACgB95B,KAAKw0B,kBAAiB,OAEJ,OAFvCyB,SACNiC,IAAYr0B,aAAaA,IAAIoyB,GAAcpyB,IAAI,QAAQA,IAAI,KAAKT,IAAI,MACpEpD,KAAKoD,mBAAoBpD,KAAKi0B,cAAe6F,SACtB13B,EAAIiS,IAAIiI,OAAOmX,GAAQrD,SAAS9W,KAAMma,GAAQrD,UAAS,OACzB,OAD/C+F,SAAQ2D,KACd5B,IAAYr0B,aAAaA,IAAIoyB,GAAcpyB,WAAUi2B,UAAW13B,EAAIiS,IAAIuH,QAAQ,CAC9E5T,KAAMhI,KAAKgI,KACX8rB,cAAe9zB,KAAKu0B,mBACpBN,aAAcj0B,KAAKi0B,cAClBkC,GAAS,QAAA2D,YAAAA,KAJ0C12B,oBAKtDpD,KAAK+0B,sBAAsB+E,UAAA,MAAA,QAErB37B,EAAO6B,KAAKq2B,yBACTl5B,EAAI,EAAC,QAAA,KAACA,EAAIgB,EAAKxB,SAAMm9B,UAAA,MAAA,OAAAA,UACK95B,KAAK62B,sBAAsB14B,EAAKhB,IAAG,QAA9Do6B,SACNW,IAAYr0B,aAAaA,IAAI0zB,GAAoB1zB,IAAI,QAAQA,IAAI,KAAKT,IAAI,MAAM,QAFnDjG,IAAG28B,UAAA,MAAA,QAAA,UAAA,+BAKrC,OAAA,WAAA,gCAnBS,GAqBVxG,EAKMlwB,IAAG,WAAA,kBAAT,WAAUiC,EAAK2b,GAAK,6BAAA,OAAA,sBAAA,OAAA,0BACVhhB,KAAKgI,KAAOhI,KAAK+5B,SAAW/5B,KAAKs0B,WAAWx2B,KAAKkC,KAAMqF,EAAK2b,IAAM,OAAA,UAAA,+BAC3E,OAAA,cAAA,gCAFQ,GAERsS,EAEKyG,oBAAQ,kBAAd,WAAe10B,EAAK2b,GAAK,QAAA,6BAAA,OAAA,sBAAA,OAAA,YACnB3b,GAAc20B,SAAA,MAAA,MAAU,IAAI7W,6EAA4E,OAAA,OAAA6W,SACpF53B,EAAIiS,IAAIuH,QAAQ/U,KAAKC,UAAUka,GAAQhhB,KAAKu0B,oBAAmB,OAAxE,OAATc,SAAS2E,SACYh6B,KAAKw0B,kBAAiB,OAA3CyB,SACNiC,IAAYr0B,aAAaA,IAAIoyB,GAAcpyB,IAAIwB,GAAKjC,IAAIiyB,GAAW,OAAA,UAAA,+BACpE,OAAA,cAAA,mCAAA/B,EAEKgB,qBAAS,kBAAf,WAAgBjvB,EAAK2b,GAAK,YAAA,6BAAA,OAAA,sBAAA,OAAA,YACpB3b,GAAc40B,SAAA,MAAA,MAAU,IAAI9W,6EAA4E,OACtGhlB,EAAO6B,KAAKq2B,yBACTl5B,EAAI,EAAC,OAAA,KAACA,EAAIgB,EAAKxB,SAAMs9B,UAAA,MACiC,OADjCA,KACJ73B,EAAIiS,IAAG4lB,KAASpzB,KAAKC,UAAUka,GAAMiZ,SAASj6B,KAAK22B,UAAUx4B,EAAKhB,IAAG,OAAA,OAAA88B,YAAAA,eAA7Dre,6BAAO,QAAxB,OAATyZ,SAAS4E,UACkBj6B,KAAK62B,sBAAsB14B,EAAKhB,IAAG,QAA9Do6B,SACNW,IAAYr0B,aAAaA,IAAI0zB,GAAoB1zB,IAAIwB,GAAKjC,IAAIiyB,GAAW,QAH5Cl4B,IAAG88B,SAAA,MAAA,QAAA,UAAA,+BAKnC,OAAA,cAAA,mCAED3G,EAMM9yB,GAAE,WAAA,kBAAR,WAAS6E,EAAakxB,EAAoBxuB,GAAa,6BAAA,OAAA,sBAAA,OAAA,0BAC7C/H,KAAKgI,KAAOhI,KAAKk6B,QAAUl6B,KAAKm6B,UAAUr8B,KAAKkC,KAAMqF,EAAKkxB,EAAUxuB,IAAK,OAAA,UAAA,+BAClF,OAAA,gBAAA,gCAFO,GAEPurB,EAEK6G,oBAAQ,kBAAd,WAAe90B,EAAakxB,EAAoBxuB,GAAa,6BAAA,OAAA,sBAAA,OACtDA,UAAQA,GAAiBA,IAAS0rB,GAAQrD,SAAShY,KACtDpY,KAAK44B,KAAKvzB,GAAK,SAACC,GAAQ,OAAKixB,EAASjxB,EAAKmuB,GAAQrD,SAAShY,UAEzDrQ,UAASA,GAAiBA,IAAS0rB,GAAQrD,SAAShY,MACvDpY,KAAK40B,QAAQvvB,GAAK,SAACC,EAAUrH,EAAWma,GAAW,OAAKme,EAASjxB,EAAK8S,MACvE,OAAA,UAAA,+BACF,OAAA,gBAAA,mCAAAkb,EAEK4G,mBAAO,kBAAb,WAAc70B,EAAakxB,EAAoBxuB,GAAa,6BAAA,OAAA,sBAAA,OACrDA,UAAQA,GAAiBA,IAAS0rB,GAAQrD,SAAShY,KACtDpY,KAAKo6B,UAAU/0B,GAAK,SAAAC,GAAG,OAAIixB,EAASjxB,EAAKmuB,GAAQrD,SAAShY,UAEvDrQ,UAASA,GAAiBA,IAAS0rB,GAAQrD,SAAShY,MACvDpY,KAAKq6B,aAAah1B,GAAK,SAACC,EAAKrH,EAAGma,GAAG,OAAKme,EAASjxB,EAAK8S,MACvD,OAAA,UAAA,+BACF,OAAA,gBAAA,mCAAAkb,EAEKsF,gBAAI,kBAAV,WAAWvzB,EAAakxB,GAAkB,6BAAA,OAAA,sBAAA,OAAA,0BAChCv2B,KAAKgI,KAAOhI,KAAKo6B,UAAYp6B,KAAKs6B,YAAYx8B,KAAKkC,KAAMqF,EAAKkxB,IAAS,OAAA,UAAA,+BAChF,OAAA,cAAA,mCAAAjD,EAEKgH,sBAAU,kBAAhB,WAAiBj1B,EAAakxB,GAAkB,iBAAA,6BAAA,OAAA,sBAAA,OAAA,GACtB,mBAAbA,GAAuBgE,SAAA,MAAA,MAC1B,IAAIpX,sDAAsDoT,GAAW,OAEvEp4B,EAAO6B,KAAKq2B,yBAAwBmE,uBACjCr9B,GAAC,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAs9B,SACyBC,EAAK7D,sBAAsB14B,EAAKhB,IAAG,OAMjE,OANGo6B,SACNhH,IAAclS,OAAOxa,aAAaA,IAAI0zB,GAAoB1zB,IAAIwB,GAAK7E,cAAE,kBAAC,WAAO5B,GAAS,MAAA,6BAAA,OAAA,sBAAA,OACxC,OADwC+7B,KAC5Dv4B,EAAIiS,IAAGsmB,KAAS/7B,EAAI+7B,SAASD,EAAK/D,UAAUx4B,EAAKhB,IAAG,OAAA,OAAAw9B,YAAAA,cAA5C1e,6BAAO,QAAjCsc,WAEJhC,WAAgBgC,EAAU93B,EAAoB83B,EAAU93B,EAAI83B,EAAWlzB,GACxE,OAAA,UAAA,0BACF,mBAAA,+DAAE,OAAA,UAAA,yBAPIlI,EAAI,EAAC,OAAA,KAACA,EAAIgB,EAAKxB,SAAM49B,UAAA,MAAA,yBAArBp9B,WAAC,OAAA,mBAAAo9B,UAAA,MAAA,4BAAA,QAAqBp9B,IAAGo9B,SAAA,MAAA,QAAA,UAAA,+BAUnC,OAAA,cAAA,mCAAAjH,EAEK8G,qBAAS,kBAAf,WAAgB/0B,EAAKkxB,GAAQ,QAAA,6BAAA,OAAA,sBAAA,OAAA,GACH,mBAAbA,GAAuBqE,SAAA,MAAA,MAC1B,IAAIzX,sDAAsDoT,GAAW,OAAA,OAAAqE,SAElD56B,KAAKw0B,kBAAiB,OAA/B,OAAZyB,SAAY2E,SACK56B,KAAKu0B,mBAAkB,OAAxC4B,SACN5F,IAAclS,OAAOxa,aAAaA,IAAIoyB,GAAcpyB,IAAIwB,GAAK7E,cAAE,kBAAC,WAAM5B,GAAI,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAi8B,SAChDz4B,EAAIiS,IAAI4H,QAAQrd,EAAMu3B,GAAS,QAAjDoC,WAEJhC,WAAgBgC,EAAU93B,EAAoB83B,EAAU93B,EAAI83B,EAAWlzB,EAAKouB,GAAQrD,SAAShY,KAC9F,OAAA,UAAA,0BACF,mBAAA,oCAAE,OAAA,UAAA,+BACJ,OAAA,cAAA,mCAAAkb,EAEKsB,mBAAO,kBAAb,WAAcvvB,EAAakxB,EAAoBxuB,GAAY,6BAAA,OAAA,sBAAA,OAAA,0BACjD/H,KAAKgI,KAAOhI,KAAKq6B,aAAer6B,KAAKy0B,eAAe32B,KAAKkC,KAAMqF,EAAKkxB,EAAUxuB,IAAK,OAAA,UAAA,+BAC5F,OAAA,gBAAA,mCAAAurB,EAEKmG,kCAAsB,kBAA5B,WAA6Bp0B,EAAakxB,EAAoBne,GAAW,aAAA,6BAAA,OAAA,sBAAA,OAAA,GAClEpY,KAAK86B,mBAAmB1iB,IAAI2iB,SAAA,MAAA,0BAAA,OAAA,OAAAA,SACE/6B,KAAK+2B,wBAAwB3e,GAAI,OAA9D4f,SACNzH,IAAclS,KAAKjG,GAAKvU,aAAaA,IAAIm0B,GAAsBn0B,IAAIwB,GAAK7E,cAAE,kBAAC,WAAO5B,GAAS,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACpFo8B,EAAKF,mBAAmB1iB,IAAI6iB,SAAA,MAAA,0BAAA,OACW,OADXA,KACT74B,EAAIiS,IAAG4mB,KAASr8B,EAAIq8B,SAASD,EAAKrE,UAAUve,GAAI,OAAA,OAAA6iB,YAAAA,cAAxChf,6BAAO,QAAjCsc,WAEJhC,WAAgBgC,EAAU93B,EAAoB83B,EAAU93B,EAAI83B,EAAWlzB,EAAK+S,GAC7E,QAAA,UAAA,0BACF,mBAAA,oCAAE,OAAA,UAAA,+BACJ,OAAA,gBAAA,mCAAAkb,EAEKmB,yBAAa,kBAAnB,WAAoBpvB,EAAakxB,EAAoBxuB,GAAY,WAAA,6BAAA,OAAA,sBAAA,OAAA,GACvC,mBAAbwuB,GAAuB2E,SAAA,MAAA,MAC1B,IAAI/X,yDAAyDoT,GAAW,OAE3E94B,OAAOC,UAAUC,eAAeG,KAAKkC,KAAKw5B,oBAAqBn0B,KAClErF,KAAKw5B,oBAAoBn0B,GAAO,IAElCrF,KAAKw5B,oBAAoBn0B,GAAKjH,KAAK,CAACiH,IAAAA,EAAKkxB,SAAAA,EAAUxuB,KAAAA,IAC9B/H,KAAKq2B,yBACbzuB,mBAAO,kBAAC,WAAMwQ,GAAG,6BAAA,OAAA,sBAAA,OAAA,IACxBrQ,GAAQqQ,IAAQrQ,GAAIozB,SAAA,MAAA,0BAAA,OACxBC,EAAK3B,uBAAuBrhB,EAAK/S,EAAKkxB,GAAU,OAAA,UAAA,0BACjD,mBAAA,oCAAE,OAAA,UAAA,+BACJ,OAAA,gBAAA,mCAAAjD,EAEDwH,mBAAA,SAAmB1iB,GACjB,OAAQpY,KAAKgI,MAAShI,KAAKi0B,cAAgBj0B,KAAKi0B,aAAa7b,IAAQpY,KAAKi0B,aAAa7b,GAAKoF,OAC7F8V,EAEKqG,iCAAqB,kBAA3B,WAA4BvhB,EAAa/S,EAAakxB,EAAoB8E,GAAiB,aAAA,6BAAA,OAAA,sBAAA,OAAA,GACpFr7B,KAAK86B,mBAAmB1iB,IAAIkjB,SAAA,MAAA,0BAAA,OAAA,OAAAA,SACHt7B,KAAKy1B,mBAAmBrd,GAAI,OAApDmjB,SACNhL,IAAclS,KAAKjG,GAAKvU,aAAaA,IAAI03B,GAAiB13B,IAAIwB,GAAK7E,cAAE,kBAAC,WAAO5B,EAAW6jB,EAAS+Y,EAAS78B,GAAQ,MAAA,6BAAA,OAAA,sBAAA,OACnE,GAAzC08B,IAAgBA,EAAazB,MAAQj7B,GACpC88B,EAAKX,mBAAmB1iB,IAAIsjB,SAAA,MAAA,0BAAA,OACW,OADXA,KACTt5B,EAAIiS,IAAGqnB,KAAS98B,EAAI88B,SAASD,EAAK/F,oBAAoBtd,GAAI,OAAA,OAAAsjB,YAAAA,eAAlDzf,6BAAO,SAAjCsc,WAEJhC,WAAgBgC,EAAU93B,EAAoB83B,EAAU93B,EAAI83B,EAAWlzB,EAAK+S,GAC7E,QAAA,UAAA,0BACF,yBAAA,oCAAE,OAAA,UAAA,+BACJ,OAAA,kBAAA,mCAAAkb,EAEK+G,wBAAY,kBAAlB,WAAmBh1B,EAAKkxB,EAAUxuB,GAAI,aAAA,6BAAA,OAAA,sBAAA,OAAA,GACZ,mBAAbwuB,GAAuBoF,SAAA,MAAA,MAC1B,IAAIxY,yDAAyDoT,GAAW,OAE3E94B,OAAOC,UAAUC,eAAeG,KAAKkC,KAAK05B,mBAAoBr0B,KACjErF,KAAK05B,mBAAmBr0B,GAAO,IAGjCrF,KAAK05B,mBAAmBr0B,GAAKjH,KADvBi9B,EAAe,CAACh2B,IAAAA,EAAKkxB,SAAAA,EAAUxuB,KAAAA,IAGrC/H,KAAKs2B,iBAAgB,SAAArC,GACnBx2B,OAAOU,KAAK81B,GAAcrsB,mBAAO,kBAAC,WAAMwQ,GAAG,6BAAA,OAAA,sBAAA,OAAA,IACrCrQ,GAAQqQ,IAAQrQ,GAAI6zB,SAAA,MAAA,0BAAA,OAAA,GAClB3H,EAAa7b,IAAQ6b,EAAa7b,GAAKoF,OAAKoe,SAAA,MAAA,0BAAA,OAClDC,EAAKlC,sBAAsBvhB,EAAK/S,EAAKkxB,EAAU8E,GAAc,OAAA,UAAA,0BAC9D,mBAAA,uCACA,OAAA,UAAA,+BACJ,OAAA,gBAAA,mCAED/H,EAGAwI,UAAA,SAAUC,EAAUC,uBAAAA,IAAAA,EAAU,GAE5BA,GAAoB,IACpBh8B,KAAKoD,cAFL24B,WAAkBA,GAAkCA,IAEtB,IAAI78B,MAAOuxB,cAAgB,IAAIvxB,KAAK,GAAGuxB,eACrEvuB,aAAalC,KAAKi8B,kBAClBj8B,KAAKi8B,iBAAmB59B,YAAW,WAAA,OAAM69B,EAAK94B,cAAc,KAAQ44B,IAGtE1I,EAGA6I,UAAA,SAAU5F,EAAUyF,uBAAAA,IAAAA,EAAU,GAC5BA,GAAoB,IACpBh8B,KAAK40B,kBAAkB,SAACwH,EAAQ/2B,EAAK+S,GACnC,GAAIme,EAAU,CACZ,IAAMwF,EAAWK,GAAU,IAAIl9B,KAAS,IAAIA,KAAKk9B,IAAWJ,EAC5DzF,EAASwF,EAAU3jB,GACnBikB,EAAKC,kBAAoBD,EAAKC,mBAAqB,GACnDp6B,aAAam6B,EAAKC,kBAAkBlkB,IAChC2jB,IACFM,EAAKC,kBAAkBlkB,GAAO/Z,YAAW,WAAA,OAAMk4B,GAAS,EAAOne,KAAM4jB,SAM7EpI,EAIO2I,cAAP,SAAqB1I,GAEnB,YAFmBA,IAAAA,EAAU,MAC7BA,EAAUp2B,OAAOsX,OAAO,CAACynB,MAAO,QAAS3I,IAC5B4I,eACX,MAAM,IAAItZ,MAAM,sDAGlB,IAAIuZ,EAASC,EADb5L,EAAKvM,YAEL,IAAMoY,EAAM7L,EAAKpM,cAAc,MAAO,wBAAyB1U,SAAS4sB,MACxED,EAAIjW,aAAa,KAAM,yBACvBiW,EAAIhY,qcAAuciP,EAAQ2I,MACndI,EAAIE,iBAAiB,SAAS,WAC5BF,EAAIjW,aAAa,QAAS,iBACrB+V,EAKHC,EAAIhW,aAAa,QAAS,KAJ1B+V,EAAU,IAAI9I,EAAQC,EAAQ4I,gBAC9BE,EAAMD,EAAQK,aACd9sB,SAAS4sB,KAAKjW,YAAY+V,QAOhCrJ,EAOA0J,cAAA,SAAcC,GACZ,gBADYA,IAAAA,EAAU,oBAClBj9B,KAAKgI,KACGi1B,gBAAqBj9B,KAAKgI,iBAAgByrB,GAAQrD,SAAShY,IAE7D6kB,eAAoBj9B,KAAKq2B,yBAAyB,IAG9D/C,EAGMc,aAAY,WAAA,kBAAlB,WAAmBnC,2FAEuB,YAFvBA,IAAAA,EAAY,IACxBsE,GAD0B2G,EACMjL,GAAhCsE,SAAmBlC,IAAAA,UACxB4I,GADeA,IAAAA,UACM,mBAChBj9B,KAAKgI,MAAIm1B,SAAA,MAAA,MAAU,IAAIha,MAAM,2CAA0C,OACtEia,EAAmB,GACnBC,EAAwB,GAC9Br9B,KAAKQ,GAAG,aAAa,SAAC88B,EAAYv1B,GAE3Bu1B,GAA0B,iBAAVA,GACrB7/B,OAAOU,KAAKm/B,GAAO11B,SAAQ,SAAAwtB,GACzB,IAAM5sB,EAAO80B,EAAMlI,GACnB,GAAa,OAAT5sB,EAIF,OAHA60B,EAAsBjI,IAAWiI,EAAsBjI,GAAQh1B,aACxDi9B,EAAsBjI,QAC7BmB,GAAYA,EAAS,CAACh1B,GAAI6zB,EAAQvtB,IAAK,QAGzC,IAAmC,IAA/Bu1B,EAAUl/B,QAAQk3B,GAAtB,CACA,IAAMmI,EAAW,GACjBH,EAAUh/B,KAAKg3B,GACf,IAAMvtB,EAAM+rB,EAAQ4J,eAAe,CAACP,QAAAA,EAASnI,QAAS/sB,EAAMmtB,UAAWuI,EAAKz1B,KAAMmtB,aAAc3sB,EAAK2sB,aAAcC,OAAAA,IACnHmB,GAAYA,EAAS,CAAC1uB,IAAAA,EAAKtG,GAAI6zB,IAC3Bf,GACF9D,IAAclS,KAAK7V,EAAK8sB,UAAUld,KAAKvU,IAAI,gBAAgByC,MAAM9F,cAAE,kBAAC,WAAOk9B,EAAQC,EAAWtzB,EAAG1L,GAAC,MAAA,6BAAA,OAAA,sBAAA,OAAA,GAC3F++B,GAA4B,iBAAXA,KAAuBA,EAAO/gC,OAAS,KAAEihC,SAAA,MAAA,0BAAA,OAE/B,GADhCP,EAAsBjI,GAAUz2B,EAC1BpC,EAAIsK,KAAKC,UAAU42B,IACI,IAAzBH,EAASr/B,QAAQ3B,IAASqhC,UAAA,MACX,OAAjBL,EAASn/B,KAAK7B,GAAGqhC,SACCx7B,EAAIiS,IAAI4H,QAAQyhB,EAAQl1B,EAAK2sB,cAAa,OAC5DsI,EAAKvJ,2BAAoBxR,OAAWA,GAAW,GAAM,QAAA,UAAA,0BAExD,yBAAA,2CAGJ,OAAA,UAAA,+BACJ,OAAA,YAAA,gCApCiB,GAoCjB4Q,EAEKuK,0BAAc,kBAApB,WAAqBZ,GAAO,kBAAA,6BAAA,OAAA,sBAAA,OAAqB,gBAA5BA,IAAAA,EAAU,oBAAkBa,SACvB17B,EAAIiS,IAAI0D,OAAM,OACW,OAD3Cud,SACAyI,EAAkBl3B,KAAKC,UAAUwuB,GAAUwI,SACtB17B,EAAIiS,IAAIiI,OAAOgZ,EAAUhc,KAAMgc,GAAU,OAAlD,OAAZH,SAAY2I,UACe17B,EAAIiS,IAAIuH,QAAQmiB,EAAiB5I,GAAa,QAAvD,OAAlB6I,SAAkBF,UACE17B,EAAIiS,IAAIiI,OAAOmX,GAAQrD,SAAS9W,KAAMma,GAAQrD,UAAS,QAAhE,OAAX6N,SAAWH,UACqB17B,EAAIiS,IAAIuH,QAAQmiB,EAAiBE,GAAY,QAAtD,OAAvBC,SAAuBJ,UACV/M,EAAKhO,QAAQib,GAAmB,QAGnD,OAFA5I,GADIA,UACY55B,MAAM,EAAG,IAEzBsiC,UACM/M,EAAKpO,iBAAiB4N,IAAe+E,GAAW,SAAAjX,GACpD,OAAOA,EAAKxa,IAAI,gBAAgBT,IAAI,CAACiH,EAAG,IAAI4P,UAC5C,QAI0F,OAF5Fja,KAAKo9B,UAAUhI,GAAU,CAACE,UAAAA,EAAWH,aAAAA,GACrCn1B,KAAKoD,IAAI,YAAapD,KAAKo9B,WAC3BlF,IAAYr0B,IAAI,aAAaA,IAAIuxB,GAAQhyB,IAAI,CAAC46B,mBAAAA,EAAoBE,wBAAAA,sBAE3DtK,EAAQ4J,eAAe,CAACP,QAAAA,EAAS/H,UAAWl1B,KAAKgI,KAAM8sB,QAASrB,GAAQrD,SAAShY,IAAK+c,aAAAA,EAAcC,OAAAA,KAAQ,QAAA,UAAA,+BACpH,OAAA,YAAA,mCAED9B,EAGAyJ,WAAA,sBACEhM,EAAKvM,YACL,IAAI2Z,GAAY,EAEVC,EAAUrN,EAAKpM,cAAc,MAAO,iBACpC0Z,EAAStN,EAAKpM,cAAc,MAAO,mBAAoByZ,GACvDE,EAAWvN,EAAKpM,cAAc,OAAQ,qBAAsB0Z,GAClEC,EAASC,UAAY,IACrBD,EAASxB,iBAAiB,SAAS,SAAAn+B,GACjCA,EAAE6/B,kBACFJ,EAAQzX,aAAa,QAAS,2BAC9BwX,GAAY,KAEd,IAAMM,EAAa1N,EAAKpM,cAAc,MAAO,wBAAyB0Z,GAChEK,EAAkB3N,EAAKpM,cAAc,OAAQ,wBAAyB8Z,GAC5EC,EAAgB9Z,UAAY,WAC5B,IAAM+Z,EAAS5N,EAAKpM,cAAc,YAAQjC,EAAW+b,GAC/CpvB,EAAQ0hB,EAAKpM,cAAc,OAAQ,kBAAmB0Z,GAC5DhvB,EAAMuV,UAAY,SAClBvV,EAAMytB,iBAAiB,SAAS,WAC9BsB,EAAQzX,aAAa,QAAS,iBAC9B,IAAMiY,EAAc3uB,SAASwU,eAAe,yBACxCma,GACFA,EAAYjY,aAAa,QAAS,OAGtC0X,EAAOvB,iBAAiB,SAAS,WAC3BqB,IACFC,EAAQzX,aAAa,QAAS,iBAC9BwX,GAAY,MAIhB,IAAM9F,EAAWtH,EAAKpM,cAAc,MAAO,qBAAsByZ,GAE3DS,EAAkB9N,EAAKpM,cAAc,MAAO,wBAAyByZ,GAC3ES,EAAgBN,UAAY,YAC5Bv+B,KAAKm8B,WAAU,SAAAJ,GACb8C,EAAgBlY,aAAa,iCAAkCoV,EAAW,OAAS,QAGrF,IAAM+C,EAAe/N,EAAKpM,cAAc,MAAO,0BAA2ByZ,GACpEW,EAAWhO,EAAKpM,cAAc,gBAAYjC,EAAWoc,GAG3D,GAFAC,EAASpY,aAAa,OAAQ,KAC9BoY,EAASpY,aAAa,cAAe,kBACjCoK,EAAKlK,SAAU,CACjB,IAAMmY,EAAUjO,EAAKpM,cAAc,cAAUjC,EAAWoc,GACxDE,EAAQpa,wkBAGRoa,EAAQlC,iBAAiB,SAAS,WAChCmC,EAAK9xB,KAAK4xB,EAAS/d,OACnB+d,EAAS/d,MAAQ,GACjBie,EAAKnD,WAAU,MAInB,IAAM7H,EAAej0B,KAAKq2B,yBAC1B,GAAIpC,EAAat3B,OAAQ,CACvB,IAAMyb,EAAM6b,EAAa,GACzB1D,IAAclS,KAAKjG,GAAKvU,IAAI,WAAWA,IAAI,QAAQrD,IAAG,SAAAsK,GAAI,OAAI6zB,EAAOJ,UAAYzzB,KACjF8oB,EAAQsL,YAAY3O,IAAenY,GAAK,SAAA+mB,GAEtCT,EAAgB/X,aAAa,iCADQwY,EAAOC,SAAW,OAAS,KAE5C/G,EAASgH,iBAAiB,sCAClCz3B,SAAQ,SAAA9E,GAClB,GAAIA,EAAIw8B,aAAa,cAAgBH,EAAOI,WAAY,CACtD,IAAMjjC,EAAIwG,EAAIw8B,aAAa,SAC3Bx8B,EAAI6jB,aAAa,QAAYrqB,uBAqErC,OA/DA0D,KAAKi5B,0BAAyB,SAAA7pB,GACbipB,EAASgH,iBAAiB,wBAClCz3B,SAAQ,SAAA43B,GACb,IAAMC,EAAQD,EAAUE,cAAcA,cAAcA,cACpD,GAAID,EAAMH,aAAa,cAAgBlwB,EAAM,CAC3C,IAAMuwB,EAAWF,EAAMH,aAAa,UACG,IAAnCK,EAASzhC,QAAQ,cACnBuhC,EAAM9Y,aAAa,QAAYgZ,gBAEjCH,EAAU7Y,aAAa,QAAS,wBAKtC3mB,KAAK63B,aAAY,SAAC/0B,EAAKmT,GACrB,IAAM2pB,EAAa7O,EAAKpM,cAAc,MAAO,oBAC7Cib,EAAWrB,UAAYz7B,EAAImL,KAC3B,IAAMmB,EAAO2hB,EAAKpM,cAAc,MAAO,OAAQib,GAC/CxwB,EAAKmvB,UAAYxN,EAAKzL,WAAW,IAAIpmB,KAAK4D,EAAIsM,OAC1C6G,EAAKmiB,eAEerH,EAAKpM,cAAc,OAD7Bsa,EAAK9F,uBAAyBr2B,EAAIsM,KAAO,gBAAkB,YACjBA,GACxCwV,UAAY,8TAE5Bgb,EAAWhb,UAAYgb,EAAWhb,UAAU5oB,QAAQ,MAAO,UAE3D,IAAMyjC,EAAQ1O,EAAKpM,cAAc,OAAU1O,EAAKmiB,aAAe,MAAQ,+BACvEqH,EAAM7Y,YAAYgZ,GAClBH,EAAM9Y,aAAa,YAAa7jB,EAAIsM,MACpC,IAAK,IAAIjS,EAAIk7B,EAASwH,SAASljC,OAAQQ,GAAK,EAAGA,IAC7C,GAAU,IAANA,EACFk7B,EAASyH,aAAaL,EAAOpH,EAAS0H,gBACjC,CACL,IAAMljC,EAAIw7B,EAASwH,SAAS1iC,EAAI,GAAGmiC,aAAa,aAChD,GAAIziC,GAAKA,EAAIiG,EAAIsM,KAAM,CACrBipB,EAASwH,SAAS1iC,EAAI,GAAG6iC,sBAAsB,WAAYP,GAC3D,OAINpH,EAAS4H,UAAY5H,EAAS6H,gBAGhCnB,EAASjC,iBAAiB,SAAS,SAAAlD,GAGjC,GAFAhG,EAAQuM,YAAY5P,KAAe,GACnC0O,EAAKpG,wBACiB,KAAlBe,EAAMwG,QAAgB,CACxBxG,EAAMyG,iBACN,IAAMC,EAAUvB,EAAS/d,MACnBuf,EAAQxP,EAAKpN,SAASob,GACxBnF,EAAM4G,SACRzB,EAAS/d,MAAWsf,EAAQ1f,UAAU,EAAG2f,EAAQ,QAASD,EAAQ1f,UAAU2f,EAAOD,EAAQ3jC,SAE3FoiC,EAAS/d,MAAQsf,EAAQ1f,UAAU,EAAG2f,EAAQ,GAAKD,EAAQ1f,UAAU2f,EAAOD,EAAQ3jC,QACpFsiC,EAAK9xB,KAAK4xB,EAAS/d,OACnB+d,EAAS/d,MAAQ,GACjBie,EAAKnD,WAAU,SAGjBmD,EAAKnD,YAAYiD,EAAS/d,MAAMrkB,WAI7ByhC,GAGTxK,EAIOuM,YAAP,SAAmBM,GACjB,GAAIlQ,IAAcmQ,qBAAuBD,EAAzC,CACAlQ,IAAcmQ,mBAAqBD,EACnCv+B,aAAaquB,IAAcoQ,oBAC3B,IAAMC,EAAS,WACbrQ,IAAclS,OAAOxa,gBAAgBT,IAAI,CAAC+7B,OAAQsB,EAAUrxB,KAAM,IAAIlQ,KAAKkD,EAAIO,SAAS8tB,iBAE1FmQ,IAKIH,GAJJ,SAASI,IACPD,IACArQ,IAAcoQ,mBAAqBtiC,WAAWwiC,EAAa,KAG3DA,KAIJjN,EAMOsL,YAAP,SAAmB4B,EAAQvK,GACzB,IAAIyF,EACJzL,IAAclS,KAAKyiB,GAAQj9B,gBAAgBrD,IAAG,SAAAigC,GAC5C,GAAKA,GAAcA,EAASrxB,MAAQqxB,EAAStB,OAA7C,CACAj9B,aAAa85B,GACb,IAAM/8B,EAAM,IAAIC,KAAKkD,EAAIO,SACnBo+B,EAAe,IAAI7hC,KAAKuhC,EAASrxB,MACjCgwB,EAAW2B,EAAe,IAAI7hC,KAAKD,EAAI4T,UAAY,MAAckuB,EAAe,IAAI7hC,KAAKD,EAAI4T,UAAY,KAC/G0jB,EAAS,CAAC6I,SAAAA,EAAUG,WAAYkB,EAASrxB,KAAM+vB,OAAQsB,EAAStB,SAC5DC,IACFpD,EAAU39B,YAAW,WAAA,OAAMk4B,EAAS,CAACyK,UAAU,EAAOzB,WAAYkB,EAASrxB,SAAQ,WAGxFwkB,EAEM4J,eAAP,gBAAuBP,IAAAA,QAAShI,IAAAA,SAAUC,IAAAA,UAAWJ,IAAAA,QAASK,IAAAA,aAAcC,IAAAA,OACpEpgB,EAAMsR,mBACZ,OAAI4O,GAAaJ,EACLmI,gBAAqBjoB,EAAIkgB,eAAsBlgB,EAAI8f,SAAc9f,EAAImgB,SAAmBngB,EAAIogB,GAE9F6H,eAAoBjoB,EAAIigB,SAAejgB,EAAImgB,SAAmBngB,EAAIogB,IAG9ExB,EAGaiK,eAAc,WAAA,kBAA3B,WAA4BZ,GAAO,sBAAA,6BAAA,OAAA,sBAAA,OAKjC,gBAL0BA,IAAAA,EAAU,oBAC9B5e,EAAOkS,IAAclS,OACrBhZ,EAAMouB,GAAQrD,SAGpB6Q,SACwB7+B,EAAIiS,IAAI0D,OAAM,OACW,OAD3Cud,SACAyI,EAAkBl3B,KAAKC,UAAUwuB,GAAU2L,SACtB7+B,EAAIiS,IAAIiI,OAAOgZ,EAAUhc,KAAMgc,GAAU,OAAlD,OAAZH,SAAY8L,UACe7+B,EAAIiS,IAAIuH,QAAQmiB,EAAiB5I,GAAa,QAAvD,OAAlB6I,SAAkBiD,UACE7+B,EAAIiS,IAAIiI,OAAOjX,EAAIiU,KAAMjU,GAAI,QAAtC,OAAX44B,SAAWgD,UACqB7+B,EAAIiS,IAAIuH,QAAQmiB,EAAiBE,GAAY,QAAtD,OAAvBC,SAAuB+C,UACVlQ,EAAKhO,QAAQib,GAAmB,QAQkC,OAPrF5I,GADIA,UACY55B,MAAM,EAAG,IAGzBu1B,EAAKpO,iBAAiB4N,IAAe+E,GAAW,SAAAjX,GAC9CA,EAAKxa,IAAI,gBAAgBT,IAAI,CAACiH,EAAG,OAGnCgU,EAAKxa,IAAI,aAAaA,IAAIuxB,GAAQhyB,IAAI,CAAC46B,mBAAAA,EAAoBE,wBAAAA,sBAEpDtK,EAAQ4J,eAAe,CAACP,QAAAA,EAAShI,SAAU5vB,EAAI+S,IAAK+c,aAAAA,EAAcC,OAAAA,KAAQ,QAAA,UAAA,0BAClF,OAAA,YAAA,gCAvB0B,GAyB3BxB,EAGayD,eAAc,WAAA,kBAA3B,WAA4B4F,EAA8B1G,EAAoBlC,GAAS,YAAA,6BAAA,OAAA,sBAAA,OAEpD,gBAFP4I,IAAAA,EAAU,6BAAwC5I,IAAAA,GAAY,GAClFhvB,EAAMouB,GAAQrD,SACd/R,EAAOkS,IAAclS,OAAM6iB,SACV9+B,EAAIiS,IAAIiI,OAAOjX,EAAIiU,KAAMjU,GAAI,OAA9C8wB,SACAiH,EAAY,GAClB/e,EAAKxa,IAAI,aAAayC,MAAM9F,IAAG,SAAC5B,EAAMw2B,GACpC,GAAKx2B,IAAuC,IAA/Bw+B,EAAUl/B,QAAQk3B,GAA/B,CACA,IAAMmI,EAAW,GACjBlf,EAAKxa,IAAI,aAAaA,IAAIuxB,GAAQvxB,IAAI,2BAA2BrD,cAAE,kBAAC,WAAMwU,GAAG,UAAA,6BAAA,OAAA,sBAAA,OAAA,GACtEA,IAAsC,IAA/BooB,EAAUl/B,QAAQk3B,IAAc+L,SAAA,MAAA,0BAAA,OACrB,OAAvB/D,EAAUh/B,KAAKg3B,GAAQ+L,SACC/+B,EAAIiS,IAAI4H,QAAQjH,EAAKmhB,GAAS,OAAvC,OAATb,SAAS6L,SACY/+B,EAAIiS,IAAIiI,OAAOgZ,EAAUhc,KAAMgc,GAAU,OAC9DztB,EAAM+rB,EAAQ4J,eAAe,CAACP,QAAAA,EAAShI,SAAU5vB,EAAI+S,IAAK+c,aAD1DA,SACwEC,OAAAA,IAC1EmB,GACFA,EAAS,CAAC1uB,IAAAA,EAAKtG,GAAI6zB,IAEjBf,GACF9D,IAAclS,KAAKiX,EAAUld,KAAKvU,IAAI,gBAAgByC,MAAM9F,cAAE,kBAAC,WAAOk9B,EAAQC,GAAS,MAAA,6BAAA,OAAA,sBAAA,OAAA,GAChFD,GAAM0D,SAAA,MAAA,0BAAA,OACqB,GAA1B7kC,EAAIsK,KAAKC,UAAU42B,IACI,IAAzBH,EAASr/B,QAAQ3B,IAAS6kC,UAAA,MACX,OAAjB7D,EAASn/B,KAAK7B,GAAG6kC,SACCh/B,EAAIiS,IAAI4H,QAAQyhB,EAAQvI,GAAa,OACvC,IAAIvB,EAAQ,CAACvuB,IAAAA,EAAK4uB,sBAC1BtK,OAAO,QAEjBoH,EAAKpO,iBAAiB4N,IAAe+E,GAAW,SAAAjX,GAC9CA,EAAKxa,IAAI,gBAAgBA,IAAI85B,GAAWv6B,IAAI,SAC3C,QAAA,UAAA,0BACJ,qBAAA,oCACF,QAAA,UAAA,0BACF,mBAAA,wCACA,OAAA,UAAA,0BACJ,OAAA,gBAAA,gCAlC0B,GAoC3BkwB,EAGA+N,oBAAA,SAAoBjM,GAClBp1B,KAAKo9B,UAAUhI,GAAU,KACzBp1B,KAAKoD,IAAI,YAAapD,KAAKo9B,WAC3B7M,IAAclS,OAAOxa,IAAI,aAAaA,IAAIuxB,GAAQhyB,IAAI,OAGxDwwB,EAGO0N,sBAAP,SAA6Bj8B,EAAK+vB,GAChC7E,IAAclS,OAAOU,KAAK1Z,GAC1BkrB,IAAclS,OAAOxa,IAAI,aAAaA,IAAIuxB,GAAQhyB,IAAI,OAGxDwwB,EAGa2N,cAAa,WAAA,kBAA1B,WAA2Bl8B,EAAK+S,GAAG,MAAA,6BAAA,OAAA,sBAAA,OACF,OAA/BmY,IAAclS,OAAOU,KAAK1Z,GAAKm8B,SACP5N,EAAQiD,sBAAsBze,EAAK/S,GAAI,OAAzD6vB,SACN3E,IAAclS,OAAOxa,IAAI,YAAYA,IAAIqxB,GAAW9xB,IAAI,MACxDmtB,IAAclS,OAAOxa,IAAI,YAAYA,IAAIqxB,GAAW90B,MAAM,OAAA,UAAA,0BAC3D,OAAA,cAAA,gCALyB,GAO1BwzB,EAGa6N,YAAW,WAAA,kBAAxB,WAAyBp8B,EAAK2C,GAAI,UAAA,6BAAA,OAAA,sBAAA,OAAA,OAAA05B,SACTt/B,EAAIiS,IAAIiI,OAAOjX,EAAIiU,KAAMjU,GAAI,OAAtC,OAAR8wB,SAAQuL,SACa3Q,EAAKhO,QAAQoT,GAAS,OAA/B,OAAZC,SAAYsL,SACS3Q,EAAKhO,QAAQqT,EAAepuB,GAAK,OAAtDiuB,SACN1F,IAAclS,OAAOU,KAAK1Z,GAC1BkrB,IAAclS,OAAOxa,IAAI,YAAYA,IAAIoyB,GAAc7yB,IAAI,MAC3DmtB,IAAclS,OAAOxa,IAAI,YAAYA,IAAIoyB,GAAc71B,MAAM,QAAA,UAAA,0BAC9D,OAAA,cAAA,gCAPuB,QCtsCpBm9B,EAAW,IAAIoE,eAOGtnB,EAA8B0Z,YAA9B1Z,IAAAA,EAAYoZ,GAAQrD,UAC1C,IAAIsM,EAAUa,EAAS15B,IAAIwW,GAK3B,OAJKqiB,IACHA,EAAU,IAAI9I,EAAQ,CAACK,aAAc5Z,EAAW0Z,SAAAA,IAChDwJ,EAAS7xB,IAAI2O,EAAWqiB,IAEnBA,yBCV+DxgC,UAA2S,SAAUyC,EAAE9B,EAAEmB,EAAE0B,GAAG,SAASnD,EAAEO,EAAEE,GAAG,IAAIgB,EAAElB,GAAG,CAAC,IAAID,EAAEC,GAAG,CAA2C,IAAIE,GAAZzB,EAAiB,OAAjBA,IAAgC,GAAG4B,EAAE,OAAOA,EAAEL,GAAE,GAAI,IAAIyB,EAAE,IAAI4kB,MAAM,uBAAuBrmB,EAAE,KAAK,MAAOyB,EAAEirB,KAAK,mBAAoBjrB,EAAG,IAAIlC,EAAE2B,EAAElB,GAAG,CAAClB,QAAQ,IAAIiB,EAAEC,GAAG,GAAGgB,KAAKzB,EAAET,SAAQ,SAAS+C,GAAoB,OAAOpC,EAAlBM,EAAEC,GAAG,GAAG6B,IAAgBA,KAAItC,EAAEA,EAAET,QAAQ+C,EAAE9B,EAAEmB,EAAE0B,GAAG,OAAO1B,EAAElB,GAAGlB,QAAkD,IAA1C,IAAIuB,EAA8B5B,EAAgBuB,EAAE,EAAEA,EAAE4C,EAAE/C,OAAOG,IAAIP,EAAEmD,EAAE5C,IAAI,OAAOP,EAA1b,CAA8b,CAACqlC,EAAE,CAAC,SAASC,EAAQ3lC,EAAON,IAC70B,SAAWgZ,GAEX,IAEIktB,EAyCAC,EA3CAC,EAAWptB,EAAOqtB,kBAAoBrtB,EAAOstB,uBAK/C,GAAIF,EAAU,CACZ,IAAIxa,EAAS,EACT2a,EAAW,IAAIH,EAASI,GACxBC,EAAUztB,EAAO3E,SAASqyB,eAAe,IAC7CH,EAASI,QAAQF,EAAS,CACxBG,eAAe,IAEjBV,EAAgB,WACdO,EAAQzjC,KAAQ4oB,IAAWA,EAAS,QAEjC,GAAK5S,EAAOtW,mBAAiD,IAA1BsW,EAAOpW,eAO/CsjC,EADS,aAAcltB,GAAU,uBAAwBA,EAAO3E,SAAS0U,cAAc,UACvE,WAId,IAAI8d,EAAW7tB,EAAO3E,SAAS0U,cAAc,UAC7C8d,EAASC,mBAAqB,WAC5BN,IAEAK,EAASC,mBAAqB,KAC9BD,EAASE,WAAWC,YAAYH,GAChCA,EAAW,MAEb7tB,EAAO3E,SAAS4yB,gBAAgBjc,YAAY6b,IAG9B,WACdpkC,WAAW+jC,EAAU,QAvBwD,CAC/E,IAAI1F,EAAU,IAAI9nB,EAAOpW,eACzBk+B,EAAQj+B,MAAMC,UAAY0jC,EAC1BN,EAAgB,WACdpF,EAAQ59B,MAAMC,YAAY,IAyBhC,IAAIsO,EAAQ,GAEZ,SAAS+0B,IAEP,IAAIjlC,EAAG2lC,EADPf,GAAW,EAGX,IADA,IAAI5qB,EAAM9J,EAAM1Q,OACTwa,GAAK,CAIV,IAHA2rB,EAAWz1B,EACXA,EAAQ,GACRlQ,GAAK,IACIA,EAAIga,GACX2rB,EAAS3lC,KAEXga,EAAM9J,EAAM1Q,OAEdolC,GAAW,EAGb7lC,EAAON,QACP,SAAmBmnC,GACQ,IAArB11B,EAAMjP,KAAK2kC,IAAgBhB,GAC7BD,OAIDhkC,KAAKkC,UAAuB,IAAX4U,EAAyBA,EAAyB,oBAATR,KAAuBA,KAAyB,oBAAXrN,OAAyBA,OAAS,KAClI,IAAIi8B,EAAE,CAAC,SAASnB,EAAQ3lC,EAAON,GAEjC,IAAIqnC,EAAYpB,EAAQ,GAGxB,SAASqB,KAET,IAAIC,EAAW,GAEXC,EAAW,CAAC,YACZC,EAAY,CAAC,aACbC,EAAU,CAAC,WAIf,SAAS3sB,EAAQ4sB,GACf,GAAwB,mBAAbA,EACT,MAAM,IAAI9tB,UAAU,+BAEtBzV,KAAK2C,MAAQ2gC,EACbtjC,KAAKqN,MAAQ,GACbrN,KAAKwjC,aAAU,EACXD,IAAaL,GACfO,EAAsBzjC,KAAMujC,GAsBhC,SAASG,EAAUC,EAASC,EAAaC,GACvC7jC,KAAK2jC,QAAUA,EACY,mBAAhBC,IACT5jC,KAAK4jC,YAAcA,EACnB5jC,KAAK8jC,cAAgB9jC,KAAK+jC,oBAEF,mBAAfF,IACT7jC,KAAK6jC,WAAaA,EAClB7jC,KAAKgkC,aAAehkC,KAAKikC,mBAgB7B,SAASC,EAAOP,EAASliB,EAAMT,GAC7BiiB,GAAU,WACR,IAAIkB,EACJ,IACEA,EAAc1iB,EAAKT,GACnB,MAAOriB,GACP,OAAOwkC,EAASiB,OAAOT,EAAShlC,GAE9BwlC,IAAgBR,EAClBR,EAASiB,OAAOT,EAAS,IAAIluB,UAAU,uCAEvC0tB,EAASl4B,QAAQ04B,EAASQ,MAoChC,SAASE,EAAQjyB,GAEf,IAAI6H,EAAO7H,GAAOA,EAAI6H,KACtB,GAAI7H,IAAuB,iBAARA,GAAmC,mBAARA,IAAuC,mBAAT6H,EAC1E,OAAO,WACLA,EAAKhS,MAAMmK,EAAKlK,YAKtB,SAASu7B,EAAsBrvB,EAAMkwB,GAEnC,IAAI9c,GAAS,EACb,SAAS+c,EAAQvjB,GACXwG,IAGJA,GAAS,EACT2b,EAASiB,OAAOhwB,EAAM4M,IAGxB,SAASwjB,EAAUxjB,GACbwG,IAGJA,GAAS,EACT2b,EAASl4B,QAAQmJ,EAAM4M,IAOzB,IAAIyC,EAASghB,GAJb,WACEH,EAASE,EAAWD,MAIA,UAAlB9gB,EAAO0b,QACToF,EAAQ9gB,EAAOzC,OAInB,SAASyjB,EAAShjB,EAAMT,GACtB,IAAIje,EAAM,GACV,IACEA,EAAIie,MAAQS,EAAKT,GACjBje,EAAIo8B,OAAS,UACb,MAAOxgC,GACPoE,EAAIo8B,OAAS,QACbp8B,EAAIie,MAAQriB,EAEd,OAAOoE,EAvJT7G,EAAON,QAAU+a,EAcjBA,EAAQjZ,UAAiB,MAAI,SAAUmmC,GACrC,OAAO7jC,KAAKia,KAAK,KAAM4pB,IAEzBltB,EAAQjZ,UAAUuc,KAAO,SAAU2pB,EAAaC,GAC9C,GAA2B,mBAAhBD,GAA8B5jC,KAAK2C,QAAU0gC,GAChC,mBAAfQ,GAA6B7jC,KAAK2C,QAAUygC,EACnD,OAAOpjC,KAET,IAAI2jC,EAAU,IAAI3jC,KAAKnC,YAAYqlC,GAQnC,OAPIljC,KAAK2C,QAAU2gC,EAEjBY,EAAOP,EADQ3jC,KAAK2C,QAAU0gC,EAAYO,EAAcC,EAC9B7jC,KAAKwjC,SAE/BxjC,KAAKqN,MAAMjP,KAAK,IAAIslC,EAAUC,EAASC,EAAaC,IAG/CF,GAaTD,EAAUhmC,UAAUomC,cAAgB,SAAU9iB,GAC5CmiB,EAASl4B,QAAQjL,KAAK2jC,QAAS3iB,IAEjC0iB,EAAUhmC,UAAUqmC,mBAAqB,SAAU/iB,GACjDkjB,EAAOlkC,KAAK2jC,QAAS3jC,KAAK4jC,YAAa5iB,IAEzC0iB,EAAUhmC,UAAUsmC,aAAe,SAAUhjB,GAC3CmiB,EAASiB,OAAOpkC,KAAK2jC,QAAS3iB,IAEhC0iB,EAAUhmC,UAAUumC,kBAAoB,SAAUjjB,GAChDkjB,EAAOlkC,KAAK2jC,QAAS3jC,KAAK6jC,WAAY7iB,IAmBxCmiB,EAASl4B,QAAU,SAAUmJ,EAAM4M,GACjC,IAAIyC,EAASghB,EAASJ,EAASrjB,GAC/B,GAAsB,UAAlByC,EAAO0b,OACT,OAAOgE,EAASiB,OAAOhwB,EAAMqP,EAAOzC,OAEtC,IAAIsjB,EAAW7gB,EAAOzC,MAEtB,GAAIsjB,EACFb,EAAsBrvB,EAAMkwB,OACvB,CACLlwB,EAAKzR,MAAQ0gC,EACbjvB,EAAKovB,QAAUxiB,EAGf,IAFA,IAAI7jB,GAAK,EACLga,EAAM/C,EAAK/G,MAAM1Q,SACZQ,EAAIga,GACX/C,EAAK/G,MAAMlQ,GAAG2mC,cAAc9iB,GAGhC,OAAO5M,GAET+uB,EAASiB,OAAS,SAAUhwB,EAAM8U,GAChC9U,EAAKzR,MAAQygC,EACbhvB,EAAKovB,QAAUta,EAGf,IAFA,IAAI/rB,GAAK,EACLga,EAAM/C,EAAK/G,MAAM1Q,SACZQ,EAAIga,GACX/C,EAAK/G,MAAMlQ,GAAG6mC,aAAa9a,GAE7B,OAAO9U,GAsDTuC,EAAQ1L,QACR,SAAiB+V,GACf,OAAIA,aAAiBhhB,KACZghB,EAEFmiB,EAASl4B,QAAQ,IAAIjL,KAAKkjC,GAAWliB,IAG9CrK,EAAQytB,OACR,SAAgBM,GACd,IAAIf,EAAU,IAAI3jC,KAAKkjC,GACvB,OAAOC,EAASiB,OAAOT,EAASe,IAGlC/tB,EAAQnS,IACR,SAAamgC,GACX,IAAIvwB,EAAOpU,KACX,GAAiD,mBAA7CvC,OAAOC,UAAU3B,SAAS+B,KAAK6mC,GACjC,OAAO3kC,KAAKokC,OAAO,IAAI3uB,UAAU,qBAGnC,IAAI0B,EAAMwtB,EAAShoC,OACf6qB,GAAS,EACb,IAAKrQ,EACH,OAAOnX,KAAKiL,QAAQ,IAQtB,IALA,IAAI6X,EAAS,IAAInb,MAAMwP,GACnBytB,EAAW,EACXznC,GAAK,EACLwmC,EAAU,IAAI3jC,KAAKkjC,KAEd/lC,EAAIga,GACX0tB,EAAYF,EAASxnC,GAAIA,GAE3B,OAAOwmC,EACP,SAASkB,EAAY7jB,EAAO7jB,GAC1BiX,EAAKnJ,QAAQ+V,GAAO/G,MAMpB,SAAwB6qB,GACtBhiB,EAAO3lB,GAAK2nC,IACNF,IAAaztB,GAAQqQ,IACzBA,GAAS,EACT2b,EAASl4B,QAAQ04B,EAAS7gB,OAVW,SAAUoG,GAC5C1B,IACHA,GAAS,EACT2b,EAASiB,OAAOT,EAASza,SAajCvS,EAAQouB,KACR,SAAcJ,GAEZ,GAAiD,mBAA7ClnC,OAAOC,UAAU3B,SAAS+B,KAAK6mC,GACjC,OAAO3kC,KAAKokC,OAAO,IAAI3uB,UAAU,qBAGnC,IAAI0B,EAAMwtB,EAAShoC,OACf6qB,GAAS,EACb,IAAKrQ,EACH,OAAOnX,KAAKiL,QAAQ,IAMtB,IAHA,IAAI9N,GAAK,EACLwmC,EAAU,IAAI3jC,KAAKkjC,KAEd/lC,EAAIga,GAdFnX,KAmBJiL,QAJI05B,EAASxnC,IAIE8c,MAAK,SAAU+qB,GAC5Bxd,IACHA,GAAS,EACT2b,EAASl4B,QAAQ04B,EAASqB,OAE3B,SAAU9b,GACN1B,IACHA,GAAS,EACT2b,EAASiB,OAAOT,EAASza,OAV/B,OAAOya,IAgBP,CAAC/B,EAAI,IAAIqD,EAAE,CAAC,SAASpD,EAAQ3lC,EAAON,IACtC,SAAWgZ,GAEmB,mBAAnBA,EAAO+B,UAChB/B,EAAO+B,QAAUkrB,EAAQ,MAGxB/jC,KAAKkC,UAAuB,IAAX4U,EAAyBA,EAAyB,oBAATR,KAAuBA,KAAyB,oBAAXrN,OAAyBA,OAAS,KAClI,CAACi8B,EAAI,IAAIkC,EAAE,CAAC,SAASrD,EAAQ3lC,EAAON,GAGtC,IAAIupC,EAA4B,mBAAXC,QAAoD,iBAApBA,OAAOC,SAAwB,SAAUjzB,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAyB,mBAAXgzB,QAAyBhzB,EAAIvU,cAAgBunC,QAAUhzB,IAAQgzB,OAAO1nC,UAAY,gBAAkB0U,GA2BlQkzB,EAvBJ,WAEI,IACI,GAAyB,oBAAdzW,UACP,OAAOA,UAEX,GAA+B,oBAApB0W,gBACP,OAAOA,gBAEX,GAA4B,oBAAjBC,aACP,OAAOA,aAEX,GAA0B,oBAAfC,WACP,OAAOA,WAEX,GAA2B,oBAAhBC,YACP,OAAOA,YAEb,MAAO/mC,GACL,QAIEgnC,GAwCV,SAASC,EAAWC,EAAOC,GAEvBD,EAAQA,GAAS,GACjBC,EAAaA,GAAc,GAC3B,IACI,OAAO,IAAIC,KAAKF,EAAOC,GACzB,MAAOnnC,GACL,GAAe,cAAXA,EAAEmM,KACF,MAAMnM,EAIV,IAFA,IACIqnC,EAAU,IADuB,oBAAhBC,YAA8BA,YAAuC,oBAAlBC,cAAgCA,cAA0C,oBAAnBC,eAAiCA,eAAiBC,mBAExKjpC,EAAI,EAAGA,EAAI0oC,EAAMlpC,OAAQQ,GAAK,EACnC6oC,EAAQK,OAAOR,EAAM1oC,IAEzB,OAAO6oC,EAAQM,QAAQR,EAAWtf,OAMnB,oBAAZ7P,SAGPkrB,EAAQ,GAEZ,IAAI0E,EAAY5vB,QAEhB,SAAS6vB,EAAgB7C,EAASpN,GAC1BA,GACAoN,EAAQ1pB,MAAK,SAAUwJ,GACnB8S,EAAS,KAAM9S,MAChB,SAAUyF,GACTqN,EAASrN,MAKrB,SAASud,EAAoB9C,EAASpN,EAAUmQ,GACpB,mBAAbnQ,GACPoN,EAAQ1pB,KAAKsc,GAGY,mBAAlBmQ,GACP/C,EAAe,MAAE+C,GAIzB,SAASC,EAAathC,GAOlB,MALmB,iBAARA,IACPvD,QAAQuP,KAAKhM,EAAM,2CACnBA,EAAMlJ,OAAOkJ,IAGVA,EAGX,SAASuhC,IACL,GAAI1+B,UAAUvL,QAAqD,mBAApCuL,UAAUA,UAAUvL,OAAS,GACxD,OAAOuL,UAAUA,UAAUvL,OAAS,GAO5C,IACIkqC,OAAgB,EAChBC,EAAa,GACb/qC,EAAW0B,OAAOC,UAAU3B,SAwEhC,SAASgrC,EAAgBC,GACrB,IAAIC,EAAYH,EAAWE,EAAOl8B,MAG9Bo8B,EAAoB,GAExBA,EAAkBvD,QAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GACzD8C,EAAkBj8B,QAAUA,EAC5Bi8B,EAAkB9C,OAASA,KAI/B6C,EAAUE,mBAAmB/oC,KAAK8oC,GAM9BD,EAAUG,QAHTH,EAAUG,QAGSH,EAAUG,QAAQntB,MAAK,WACvC,OAAOitB,EAAkBvD,WAHTuD,EAAkBvD,QAQ9C,SAAS0D,EAAkBL,GACvB,IAGIE,EAHYJ,EAAWE,EAAOl8B,MAGAq8B,mBAAmBliC,MAIrD,GAAIiiC,EAEA,OADAA,EAAkBj8B,UACXi8B,EAAkBvD,QAIjC,SAAS2D,EAAiBN,EAAQ7kC,GAC9B,IAGI+kC,EAHYJ,EAAWE,EAAOl8B,MAGAq8B,mBAAmBliC,MAIrD,GAAIiiC,EAEA,OADAA,EAAkB9C,OAAOjiC,GAClB+kC,EAAkBvD,QAIjC,SAAS4D,EAAeP,EAAQQ,GAC5B,OAAO,IAAIjB,GAAU,SAAUt7B,EAASm5B,GAGpC,GAFA0C,EAAWE,EAAOl8B,MAAQg8B,EAAWE,EAAOl8B,OA6NzC,CAEH28B,QAAS,GAET7Y,GAAI,KAEJwY,QAAS,KAETD,mBAAoB,IAnOhBH,EAAOpY,GAAI,CACX,IAAI4Y,EAIA,OAAOv8B,EAAQ+7B,EAAOpY,IAHtBmY,EAAgBC,GAChBA,EAAOpY,GAAGvf,QAMlB,IAAIq4B,EAAS,CAACV,EAAOl8B,MAEjB08B,GACAE,EAAOtpC,KAAK4oC,EAAOzkC,SAGvB,IAAIolC,EAAUrC,EAAIv1B,KAAK9H,MAAMq9B,EAAKoC,GAE9BF,IACAG,EAAQ7Y,gBAAkB,SAAUnwB,GAChC,IAAIiwB,EAAK+Y,EAAQlkB,OACjB,IACImL,EAAGI,kBAAkBgY,EAAOY,WACxBjpC,EAAEkpC,YAAc,GAEhBjZ,EAAGI,kBA3JK,oCA6Jd,MAAO8Y,GACL,GAAgB,oBAAZA,EAAGh9B,KAGH,MAAMg9B,EAFNhmC,QAAQuP,KAAK,iBAAmB21B,EAAOl8B,KAA1B,oCAA4EnM,EAAEkpC,WAAa,eAAiBlpC,EAAEopC,WAAa,sBAAwBf,EAAOY,UAAY,wBAQnMD,EAAQv3B,QAAU,SAAUzR,GACxBA,EAAE0hC,iBACF+D,EAAOuD,EAAQze,QAGnBye,EAAQ1Y,UAAY,WAChB,IAAIL,EAAK+Y,EAAQlkB,OACjBmL,EAAGoZ,gBAAkB,SAAUrpC,GAM3BA,EAAEowB,OAAO1f,SAEbpE,EAAQ2jB,GACRyY,EAAkBL,OAK9B,SAASiB,EAAuBjB,GAC5B,OAAOO,EAAeP,GAAQ,GAGlC,SAASkB,EAAuBlB,GAC5B,OAAOO,EAAeP,GAAQ,GAGlC,SAASmB,EAAiBnB,EAAQoB,GAC9B,IAAKpB,EAAOpY,GACR,OAAO,EAGX,IAAIyZ,GAAcrB,EAAOpY,GAAG0Z,iBAAiBC,SAASvB,EAAOY,WAEzDY,EAAYxB,EAAOzkC,QAAUykC,EAAOpY,GAAGrsB,QAY3C,GAbkBykC,EAAOzkC,QAAUykC,EAAOpY,GAAGrsB,UAMrCykC,EAAOzkC,UAAY6lC,GACnBtmC,QAAQuP,KAAK,iBAAmB21B,EAAOl8B,KAA1B,uCAA8Ek8B,EAAOpY,GAAGrsB,QAAU,eAAiBykC,EAAOzkC,QAAU,KAGrJykC,EAAOzkC,QAAUykC,EAAOpY,GAAGrsB,SAG3BimC,GAAaH,EAAY,CAIzB,GAAIA,EAAY,CACZ,IAAII,EAAazB,EAAOpY,GAAGrsB,QAAU,EACjCkmC,EAAazB,EAAOzkC,UACpBykC,EAAOzkC,QAAUkmC,GAIzB,OAAO,EAGX,OAAO,EAqBX,SAASC,EAAYC,GAEjB,OAAO/C,EAAW,CA9OtB,SAAiCgD,GAI7B,IAHA,IAAIjsC,EAASisC,EAAIjsC,OACbuY,EAAM,IAAIiB,YAAYxZ,GACtBoX,EAAM,IAAIoB,WAAWD,GAChB/X,EAAI,EAAGA,EAAIR,EAAQQ,IACxB4W,EAAI5W,GAAKyrC,EAAIxrC,WAAWD,GAE5B,OAAO+X,EAsOS2zB,CAAwBh0B,KAAK8zB,EAAY/pC,QAC1B,CAAE4nB,KAAMmiB,EAAYniB,OAIvD,SAASsiB,EAAe9nB,GACpB,OAAOA,GAASA,EAAM+nB,4BAO1B,SAASC,EAAYzS,GACjB,IAAIniB,EAAOpU,KAEP2jC,EAAUvvB,EAAK60B,aAAahvB,MAAK,WACjC,IAAIgtB,EAAYH,EAAW1yB,EAAK80B,QAAQp+B,MAExC,GAAIm8B,GAAaA,EAAUG,QACvB,OAAOH,EAAUG,WAKzB,OADAX,EAAoB9C,EAASpN,EAAUA,GAChCoN,EA2CX,SAASwF,EAAkBnC,EAAQoC,EAAM7S,EAAU8S,QAC/B3mB,IAAZ2mB,IACAA,EAAU,GAGd,IACI,IAAIna,EAAK8X,EAAOpY,GAAGO,YAAY6X,EAAOY,UAAWwB,GACjD7S,EAAS,KAAMrH,GACjB,MAAO/sB,GACL,GAAIknC,EAAU,KAAOrC,EAAOpY,IAAmB,sBAAbzsB,EAAI2I,MAA6C,kBAAb3I,EAAI2I,MACtE,OAAOy7B,EAAUt7B,UAAUgP,MAAK,WAC5B,IAAK+sB,EAAOpY,IAAmB,kBAAbzsB,EAAI2I,OAA6Bk8B,EAAOpY,GAAG0Z,iBAAiBC,SAASvB,EAAOY,YAAcZ,EAAOzkC,SAAWykC,EAAOpY,GAAGrsB,QAMpI,OAJIykC,EAAOpY,KACPoY,EAAOzkC,QAAUykC,EAAOpY,GAAGrsB,QAAU,GAGlC2lC,EAAuBlB,MAEnC/sB,MAAK,WACJ,OAzDhB,SAAuB+sB,GACnBD,EAAgBC,GAKhB,IAHA,IAAIC,EAAYH,EAAWE,EAAOl8B,MAC9B28B,EAAUR,EAAUQ,QAEftqC,EAAI,EAAGA,EAAIsqC,EAAQ9qC,OAAQQ,IAAK,CACrC,IAAImsC,EAAS7B,EAAQtqC,GACjBmsC,EAAOJ,QAAQta,KACf0a,EAAOJ,QAAQta,GAAGvf,QAClBi6B,EAAOJ,QAAQta,GAAK,MAK5B,OAFAoY,EAAOpY,GAAK,KAELqZ,EAAuBjB,GAAQ/sB,MAAK,SAAU2U,GAEjD,OADAoY,EAAOpY,GAAKA,EACRuZ,EAAiBnB,GAEVkB,EAAuBlB,GAE3BpY,KACR3U,MAAK,SAAU2U,GAGdoY,EAAOpY,GAAKqY,EAAUrY,GAAKA,EAC3B,IAAK,IAAIzxB,EAAI,EAAGA,EAAIsqC,EAAQ9qC,OAAQQ,IAChCsqC,EAAQtqC,GAAG+rC,QAAQta,GAAKA,KAEtB,OAAE,SAAUzsB,GAElB,MADAmlC,EAAiBN,EAAQ7kC,GACnBA,KA0BSonC,CAAcvC,GAAQ/sB,MAAK,WAC9BkvB,EAAkBnC,EAAQoC,EAAM7S,EAAU8S,EAAU,SAElD,MAAE9S,GAGhBA,EAASp0B,IA+lBjB,IAAIqnC,EAAe,CACfC,QAAS,eACTC,aA9kBJ,SAAsB7V,GAClB,IAAIzf,EAAOpU,KACPgnC,EAAS,CACTpY,GAAI,MAGR,GAAIiF,EACA,IAAK,IAAI12B,KAAK02B,EACVmT,EAAO7pC,GAAK02B,EAAQ12B,GAK5B,IAAI8pC,EAAYH,EAAWE,EAAOl8B,MAG7Bm8B,IAGDH,EAAWE,EAAOl8B,MAFlBm8B,EA/BG,CAEHQ,QAAS,GAET7Y,GAAI,KAEJwY,QAAS,KAETD,mBAAoB,KA6BxBF,EAAUQ,QAAQrpC,KAAKgW,GAGlBA,EAAK60B,aACN70B,EAAK60B,WAAa70B,EAAKu1B,MACvBv1B,EAAKu1B,MAAQX,GAIjB,IAAIY,EAAe,GAEnB,SAASC,IAGL,OAAOtD,EAAUt7B,UAGrB,IAAK,IAAI+c,EAAI,EAAGA,EAAIif,EAAUQ,QAAQ9qC,OAAQqrB,IAAK,CAC/C,IAAIshB,EAASrC,EAAUQ,QAAQzf,GAC3BshB,IAAWl1B,GAEXw1B,EAAaxrC,KAAKkrC,EAAOL,aAAoB,MAAEY,IAKvD,IAAIpC,EAAUR,EAAUQ,QAAQjsC,MAAM,GAItC,OAAO+qC,EAAU/hC,IAAIolC,GAAc3vB,MAAK,WAGpC,OAFA+sB,EAAOpY,GAAKqY,EAAUrY,GAEfqZ,EAAuBjB,MAC/B/sB,MAAK,SAAU2U,GAEd,OADAoY,EAAOpY,GAAKA,EACRuZ,EAAiBnB,EAAQ5yB,EAAK01B,eAAevnC,SAEtC2lC,EAAuBlB,GAE3BpY,KACR3U,MAAK,SAAU2U,GACdoY,EAAOpY,GAAKqY,EAAUrY,GAAKA,EAC3Bxa,EAAK80B,QAAUlC,EAEf,IAAK,IAAI/oC,EAAI,EAAGA,EAAIwpC,EAAQ9qC,OAAQsB,IAAK,CACrC,IAAIqrC,EAAS7B,EAAQxpC,GACjBqrC,IAAWl1B,IAEXk1B,EAAOJ,QAAQta,GAAKoY,EAAOpY,GAC3B0a,EAAOJ,QAAQ3mC,QAAUykC,EAAOzkC,cAsgB5CwnC,SApiCJ,WACI,IAGI,IAAKzE,IAAQA,EAAIv1B,KACb,OAAO,EAMX,IAAIi6B,EAAmC,oBAAjBC,cAAgC,4BAA4B9/B,KAAKgY,UAAUD,aAAe,SAAS/X,KAAKgY,UAAUD,aAAe,aAAa/X,KAAKgY,UAAU+nB,UAE/KC,EAA4B,mBAAVC,QAAsE,IAA9CA,MAAMruC,WAAWmC,QAAQ,gBAQvE,QAAS8rC,GAAYG,IAAkC,oBAAdtb,WAKlB,oBAAhBwb,YACT,MAAO1rC,GACL,OAAO,GAwgCD2rC,GACVC,QAvdJ,SAAiBlF,EAAU9O,GACvB,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACdkvB,EAAkB/0B,EAAK80B,QApenB,YAoeuC,SAAU/mC,EAAKgtB,GACtD,GAAIhtB,EACA,OAAOiiC,EAAOjiC,GAGlB,IACI,IACI7G,EADQ6zB,EAAYC,YAAYhb,EAAK80B,QAAQtB,WACjC4C,aACZC,EAAkB,EAEtBnvC,EAAI2zB,UAAY,WACZ,IAAIyb,EAASpvC,EAAImoB,OAEjB,GAAIinB,EAAQ,CACR,IAAI1pB,EAAQ0pB,EAAO1pB,MACf8nB,EAAe9nB,KACfA,EAAQ0nB,EAAY1nB,IAExB,IAAIyC,EAAS4hB,EAASrkB,EAAO0pB,EAAOrlC,IAAKolC,UAK1B,IAAXhnB,EACAxY,EAAQwY,GAERinB,EAAiB,gBAGrBz/B,KAIR3P,EAAI8U,QAAU,WACVg0B,EAAO9oC,EAAI4tB,QAEjB,MAAOvqB,GACLylC,EAAOzlC,UAGT,MAAEylC,MAKhB,OAFAoC,EAAgB7C,EAASpN,GAElBoN,GAsaP7yB,QAlgBJ,SAAiBzL,EAAKkxB,GAClB,IAAIniB,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACdkvB,EAAkB/0B,EAAK80B,QA5bnB,YA4buC,SAAU/mC,EAAKgtB,GACtD,GAAIhtB,EACA,OAAOiiC,EAAOjiC,GAGlB,IACI,IACI7G,EADQ6zB,EAAYC,YAAYhb,EAAK80B,QAAQtB,WACjC/jC,IAAIwB,GAEpB/J,EAAI2zB,UAAY,WACZ,IAAIjO,EAAQ1lB,EAAImoB,YACFf,IAAV1B,IACAA,EAAQ,MAER8nB,EAAe9nB,KACfA,EAAQ0nB,EAAY1nB,IAExB/V,EAAQ+V,IAGZ1lB,EAAI8U,QAAU,WACVg0B,EAAO9oC,EAAI4tB,QAEjB,MAAOvqB,GACLylC,EAAOzlC,UAGT,MAAEylC,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GA6dP/yB,QApaJ,SAAiBvL,EAAK2b,EAAOuV,GACzB,IAAIniB,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3C,IAAI4C,EACJ5yB,EAAKu1B,QAAQ1vB,MAAK,WAEd,OADA+sB,EAAS5yB,EAAK80B,QACe,kBAAzBntC,EAAS+B,KAAKkjB,GAle9B,SAA2BskB,GACvB,MAA6B,kBAAlBuB,EACAN,EAAUt7B,QAAQ47B,GA5BjC,SAAyCvB,GACrC,OAAO,IAAIiB,GAAU,SAAUt7B,GAC3B,IAAI0/B,EAAMrF,EAAInW,YAzCU,mCAOf,aAmCLyb,EAAOhF,EAAW,CAAC,KACvB+E,EAAIvb,YA3CoB,oCA2CmBhsB,IAAIwnC,EAAM,OAErDD,EAAItb,QAAU,SAAU1wB,GAGpBA,EAAE0hC,iBACF1hC,EAAE6/B,kBACFvzB,GAAQ,IAGZ0/B,EAAIE,WAAa,WACb,IAAIC,EAAgB3oB,UAAUD,UAAUtlB,MAAM,iBAC1CmuC,EAAc5oB,UAAUD,UAAUtlB,MAAM,UAG5CqO,EAAQ8/B,IAAgBD,GAAiBj1B,SAASi1B,EAAc,GAAI,KAAO,QAEzE,OAAE,WACR,OAAO,KAQJE,CAAgC1F,GAAKrrB,MAAK,SAAU+G,GAEvD,OADA6lB,EAAgB7lB,KA8dDiqB,CAAkBjE,EAAOpY,IAAI3U,MAAK,SAAUixB,GAC/C,OAAIA,EACOlqB,GA7TV4pB,EA+TkB5pB,EA9T5B,IAAIulB,GAAU,SAAUt7B,EAASm5B,GACpC,IAAI+G,EAAS,IAAIC,WACjBD,EAAO/6B,QAAUg0B,EACjB+G,EAAOE,UAAY,SAAU1sC,GACzB,IAAIgiB,EAASjM,KAAK/V,EAAEowB,OAAOtL,QAAU,IACrCxY,EAAQ,CACJ89B,6BAA6B,EAC7BnqC,KAAM+hB,EACN6F,KAAMokB,EAAKpkB,QAGnB2kB,EAAOG,mBAAmBV,OAZlC,IAAqBA,KAkUF5pB,KACR/G,MAAK,SAAU+G,GACdmoB,EAAkB/0B,EAAK80B,QAtiBlB,aAsiBuC,SAAU/mC,EAAKgtB,GACvD,GAAIhtB,EACA,OAAOiiC,EAAOjiC,GAGlB,IACI,IAAIuO,EAAQye,EAAYC,YAAYhb,EAAK80B,QAAQtB,WAMnC,OAAV5mB,IACAA,OAAQ0B,GAGZ,IAAIpnB,EAAMoV,EAAMtN,IAAI4d,EAAO3b,GAE3B8pB,EAAY0b,WAAa,gBAOPnoB,IAAV1B,IACAA,EAAQ,MAGZ/V,EAAQ+V,IAEZmO,EAAYE,QAAUF,EAAY/e,QAAU,WAExCg0B,EADU9oC,EAAI4tB,MAAQ5tB,EAAI4tB,MAAQ5tB,EAAI6zB,YAAYjG,QAGxD,MAAOvqB,GACLylC,EAAOzlC,UAGT,MAAEylC,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GAuWP9yB,WApWJ,SAAoBxL,EAAKkxB,GACrB,IAAIniB,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACdkvB,EAAkB/0B,EAAK80B,QA3lBlB,aA2lBuC,SAAU/mC,EAAKgtB,GACvD,GAAIhtB,EACA,OAAOiiC,EAAOjiC,GAGlB,IACI,IAMI7G,EANQ6zB,EAAYC,YAAYhb,EAAK80B,QAAQtB,WAMzB,OAAEviC,GAC1B8pB,EAAY0b,WAAa,WACrB5/B,KAGJkkB,EAAY/e,QAAU,WAClBg0B,EAAO9oC,EAAI4tB,QAKfiG,EAAYE,QAAU,WAElB+U,EADU9oC,EAAI4tB,MAAQ5tB,EAAI4tB,MAAQ5tB,EAAI6zB,YAAYjG,QAGxD,MAAOvqB,GACLylC,EAAOzlC,UAGT,MAAEylC,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GA2TP4H,MAxTJ,SAAehV,GACX,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACdkvB,EAAkB/0B,EAAK80B,QAtoBlB,aAsoBuC,SAAU/mC,EAAKgtB,GACvD,GAAIhtB,EACA,OAAOiiC,EAAOjiC,GAGlB,IACI,IACI7G,EADQ6zB,EAAYC,YAAYhb,EAAK80B,QAAQtB,WACjC2D,QAEhBpc,EAAY0b,WAAa,WACrB5/B,KAGJkkB,EAAYE,QAAUF,EAAY/e,QAAU,WAExCg0B,EADU9oC,EAAI4tB,MAAQ5tB,EAAI4tB,MAAQ5tB,EAAI6zB,YAAYjG,QAGxD,MAAOvqB,GACLylC,EAAOzlC,UAGT,MAAEylC,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GA2RPhnC,OAxRJ,SAAgB45B,GACZ,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACdkvB,EAAkB/0B,EAAK80B,QAxqBnB,YAwqBuC,SAAU/mC,EAAKgtB,GACtD,GAAIhtB,EACA,OAAOiiC,EAAOjiC,GAGlB,IACI,IACI7G,EADQ6zB,EAAYC,YAAYhb,EAAK80B,QAAQtB,WACjC3c,QAEhB3vB,EAAI2zB,UAAY,WACZhkB,EAAQ3P,EAAImoB,SAGhBnoB,EAAI8U,QAAU,WACVg0B,EAAO9oC,EAAI4tB,QAEjB,MAAOvqB,GACLylC,EAAOzlC,UAGT,MAAEylC,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GA4PPt+B,IAzPJ,SAAarH,EAAGu4B,GACZ,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GACvCpmC,EAAI,EACJiN,EAAQ,MAKZmJ,EAAKu1B,QAAQ1vB,MAAK,WACdkvB,EAAkB/0B,EAAK80B,QA9sBnB,YA8sBuC,SAAU/mC,EAAKgtB,GACtD,GAAIhtB,EACA,OAAOiiC,EAAOjiC,GAGlB,IACI,IAAIuO,EAAQye,EAAYC,YAAYhb,EAAK80B,QAAQtB,WAC7C4D,GAAW,EACXlwC,EAAMoV,EAAM+6B,gBAEhBnwC,EAAI2zB,UAAY,WACZ,IAAIyb,EAASpvC,EAAImoB,OACZinB,EAOK,IAAN1sC,GAKKwtC,EAFLvgC,EAAQy/B,EAAOrlC,MAKXmmC,GAAW,EACXd,EAAOgB,QAAQ1tC,IAdnBiN,EAAQ,OAsBhB3P,EAAI8U,QAAU,WACVg0B,EAAO9oC,EAAI4tB,QAEjB,MAAOvqB,GACLylC,EAAOzlC,UAGT,MAAEylC,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GAgMPxlC,KA7LJ,SAAco4B,GACV,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACdkvB,EAAkB/0B,EAAK80B,QArwBnB,YAqwBuC,SAAU/mC,EAAKgtB,GACtD,GAAIhtB,EACA,OAAOiiC,EAAOjiC,GAGlB,IACI,IACI7G,EADQ6zB,EAAYC,YAAYhb,EAAK80B,QAAQtB,WACjC6D,gBACZttC,EAAO,GAEX7C,EAAI2zB,UAAY,WACZ,IAAIyb,EAASpvC,EAAImoB,OAEZinB,GAKLvsC,EAAKC,KAAKssC,EAAOrlC,KACjBqlC,EAAiB,YALbz/B,EAAQ9M,IAQhB7C,EAAI8U,QAAU,WACVg0B,EAAO9oC,EAAI4tB,QAEjB,MAAOvqB,GACLylC,EAAOzlC,UAGT,MAAEylC,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GAwJPgI,aArJJ,SAAsB9X,EAAS0C,GAC3BA,EAAWqQ,EAAY3+B,MAAMjI,KAAMkI,WAEnC,IAAI0jC,EAAgB5rC,KAAK6rC,UACzBhY,EAA6B,mBAAZA,GAA0BA,GAAW,IACzC/oB,OACT+oB,EAAQ/oB,KAAO+oB,EAAQ/oB,MAAQ8gC,EAAc9gC,KAC7C+oB,EAAQ+T,UAAY/T,EAAQ+T,WAAagE,EAAchE,WAG3D,IACIjE,EADAvvB,EAAOpU,KAEX,GAAK6zB,EAAQ/oB,KAEN,CACH,IAAIghC,EAAcjY,EAAQ/oB,OAAS8gC,EAAc9gC,MAAQsJ,EAAK80B,QAAQta,GAElEmd,EAAYD,EAAcvF,EAAUt7B,QAAQmJ,EAAK80B,QAAQta,IAAMqZ,EAAuBpU,GAAS5Z,MAAK,SAAU2U,GAC9G,IAAIqY,EAAYH,EAAWjT,EAAQ/oB,MAC/B28B,EAAUR,EAAUQ,QACxBR,EAAUrY,GAAKA,EACf,IAAK,IAAIzxB,EAAI,EAAGA,EAAIsqC,EAAQ9qC,OAAQQ,IAChCsqC,EAAQtqC,GAAG+rC,QAAQta,GAAKA,EAE5B,OAAOA,KAsDP+U,EAAUoI,EAAU9xB,KAnDnB4Z,EAAQ+T,UAmDgB,SAAUhZ,GAC/B,GAAKA,EAAG0Z,iBAAiBC,SAAS1U,EAAQ+T,WAA1C,CAIA,IAAIG,EAAanZ,EAAGrsB,QAAU,EAE9BwkC,EAAgBlT,GAEhB,IAAIoT,EAAYH,EAAWjT,EAAQ/oB,MAC/B28B,EAAUR,EAAUQ,QAExB7Y,EAAGvf,QACH,IAAK,IAAIlS,EAAI,EAAGA,EAAIsqC,EAAQ9qC,OAAQQ,IAAK,CACrC,IAAImsC,EAAS7B,EAAQtqC,GACrBmsC,EAAOJ,QAAQta,GAAK,KACpB0a,EAAOJ,QAAQ3mC,QAAUwlC,EAwB7B,OArBwB,IAAIxB,GAAU,SAAUt7B,EAASm5B,GACrD,IAAI9oC,EAAMgqC,EAAIv1B,KAAK8jB,EAAQ/oB,KAAMi9B,GAEjCzsC,EAAI8U,QAAU,SAAUjO,GACX7G,EAAImoB,OACVpU,QACH+0B,EAAOjiC,IAGX7G,EAAIwzB,gBAAkB,WACTxzB,EAAImoB,OACVuoB,kBAAkBnY,EAAQ+T,YAGjCtsC,EAAI2zB,UAAY,WACZ,IAAIL,EAAKtzB,EAAImoB,OACbmL,EAAGvf,QACHpE,EAAQ2jB,OAIS3U,MAAK,SAAU2U,GACpCqY,EAAUrY,GAAKA,EACf,IAAK,IAAI5G,EAAI,EAAGA,EAAIyf,EAAQ9qC,OAAQqrB,IAAK,CACrC,IAAIikB,EAAWxE,EAAQzf,GACvBikB,EAAS/C,QAAQta,GAAKA,EACtByY,EAAkB4E,EAAS/C,aAEzB,OAAE,SAAU/mC,GAElB,MADCmlC,EAAiBzT,EAAS1xB,IAAQokC,EAAUt7B,WAAkB,OAAE,eAC3D9I,OAnGW,SAAUysB,GAC/BmY,EAAgBlT,GAEhB,IAAIoT,EAAYH,EAAWjT,EAAQ/oB,MAC/B28B,EAAUR,EAAUQ,QAExB7Y,EAAGvf,QACH,IAAK,IAAIlS,EAAI,EAAGA,EAAIsqC,EAAQ9qC,OAAQQ,IACnBsqC,EAAQtqC,GACd+rC,QAAQta,GAAK,KA6BxB,OA1BoB,IAAI2X,GAAU,SAAUt7B,EAASm5B,GACjD,IAAI9oC,EAAMgqC,EAAI4G,eAAerY,EAAQ/oB,MAErCxP,EAAI8U,QAAU,WACV,IAAIwe,EAAKtzB,EAAImoB,OACTmL,GACAA,EAAGvf,QAEP+0B,EAAO9oC,EAAI4tB,QAGf5tB,EAAI6wC,UAAY,WAGZrqC,QAAQuP,KAAK,sCAAwCwiB,EAAQ/oB,KAAO,4CAGxExP,EAAI2zB,UAAY,WACZ,IAAIL,EAAKtzB,EAAImoB,OACTmL,GACAA,EAAGvf,QAEPpE,EAAQ2jB,OAIK3U,MAAK,SAAU2U,GAChCqY,EAAUrY,GAAKA,EACf,IAAK,IAAIzxB,EAAI,EAAGA,EAAIsqC,EAAQ9qC,OAAQQ,IAEhCkqC,EADcI,EAAQtqC,GACI+rC,YAExB,OAAE,SAAU/mC,GAElB,MADCmlC,EAAiBzT,EAAS1xB,IAAQokC,EAAUt7B,WAAkB,OAAE,eAC3D9I,YA7DlBwhC,EAAU4C,EAAUnC,OAAO,qBAyH/B,OADAoC,EAAgB7C,EAASpN,GAClBoN,IAyBPyI,EAAa,mEAGbC,EAAyB,gCAGzBC,EADoB,YACyB3vC,OAc7C4vC,EAAgCD,EAXb,OAWyD3vC,OAE5E6vC,EAAa/uC,OAAOC,UAAU3B,SAElC,SAAS0wC,EAAeC,GAEpB,IAEIvvC,EAEAwvC,EAAUC,EAAUC,EAAUC,EAJ9BC,EAAyC,IAA1BL,EAAiB/vC,OAChCwa,EAAMu1B,EAAiB/vC,OAEvBd,EAAI,EAG8C,MAAlD6wC,EAAiBA,EAAiB/vC,OAAS,KAC3CowC,IACsD,MAAlDL,EAAiBA,EAAiB/vC,OAAS,IAC3CowC,KAIR,IAAIC,EAAS,IAAI72B,YAAY42B,GACzBp3B,EAAQ,IAAIR,WAAW63B,GAE3B,IAAK7vC,EAAI,EAAGA,EAAIga,EAAKha,GAAK,EACtBwvC,EAAWP,EAAWluC,QAAQwuC,EAAiBvvC,IAC/CyvC,EAAWR,EAAWluC,QAAQwuC,EAAiBvvC,EAAI,IACnD0vC,EAAWT,EAAWluC,QAAQwuC,EAAiBvvC,EAAI,IACnD2vC,EAAWV,EAAWluC,QAAQwuC,EAAiBvvC,EAAI,IAGnDwY,EAAM9Z,KAAO8wC,GAAY,EAAIC,GAAY,EACzCj3B,EAAM9Z,MAAmB,GAAX+wC,IAAkB,EAAIC,GAAY,EAChDl3B,EAAM9Z,MAAmB,EAAXgxC,IAAiB,EAAe,GAAXC,EAEvC,OAAOE,EAKX,SAASC,EAAeD,GAEpB,IAEI7vC,EAFAwY,EAAQ,IAAIR,WAAW63B,GACvBE,EAAe,GAGnB,IAAK/vC,EAAI,EAAGA,EAAIwY,EAAMhZ,OAAQQ,GAAK,EAE/B+vC,GAAgBd,EAAWz2B,EAAMxY,IAAM,GACvC+vC,GAAgBd,GAAuB,EAAXz2B,EAAMxY,KAAW,EAAIwY,EAAMxY,EAAI,IAAM,GACjE+vC,GAAgBd,GAA2B,GAAfz2B,EAAMxY,EAAI,KAAY,EAAIwY,EAAMxY,EAAI,IAAM,GACtE+vC,GAAgBd,EAA0B,GAAfz2B,EAAMxY,EAAI,IASzC,OANIwY,EAAMhZ,OAAS,GAAM,EACrBuwC,EAAeA,EAAatsB,UAAU,EAAGssB,EAAavwC,OAAS,GAAK,IAC7DgZ,EAAMhZ,OAAS,GAAM,IAC5BuwC,EAAeA,EAAatsB,UAAU,EAAGssB,EAAavwC,OAAS,GAAK,MAGjEuwC,EAyIX,IAAIC,EAAwB,CACxBC,UApIJ,SAAmBpsB,EAAOuV,GACtB,IAAI8W,EAAY,GAShB,GARIrsB,IACAqsB,EAAYb,EAAW1uC,KAAKkjB,IAO5BA,IAAwB,yBAAdqsB,GAAwCrsB,EAAMgsB,QAA4C,yBAAlCR,EAAW1uC,KAAKkjB,EAAMgsB,SAAqC,CAG7H,IAAIA,EACAM,EA7FY,YA+FZtsB,aAAiB7K,aACjB62B,EAAShsB,EACTssB,GA7FW,SA+FXN,EAAShsB,EAAMgsB,OAEG,uBAAdK,EACAC,GAhGK,OAiGgB,wBAAdD,EACPC,GAjGM,OAkGe,+BAAdD,EACPC,GAlGa,OAmGQ,wBAAdD,EACPC,GAnGM,OAoGe,yBAAdD,EACPC,GAnGO,OAoGc,wBAAdD,EACPC,GAtGM,OAuGe,yBAAdD,EACPC,GAtGO,OAuGc,0BAAdD,EACPC,GAvGQ,OAwGa,0BAAdD,EACPC,GAxGQ,OA0GR/W,EAAS,IAAIpT,MAAM,wCAI3BoT,EAAS+W,EAASL,EAAeD,SAC9B,GAAkB,kBAAdK,EAA+B,CAEtC,IAAIE,EAAa,IAAInC,WAErBmC,EAAWC,OAAS,WAEhB,IAAIxqB,EAtIO,uBAsIkBhC,EAAMwF,KAAO,IAAMymB,EAAejtC,KAAKyjB,QAEpE8S,EAASkX,gBAAgCzqB,IAG7CuqB,EAAWG,kBAAkB1sB,QAE7B,IACIuV,EAAS1vB,KAAKC,UAAUka,IAC1B,MAAOriB,GACLmD,QAAQonB,MAAM,8CAA+ClI,GAE7DuV,EAAS,KAAM53B,KAqEvBgvC,YAxDJ,SAAqB3sB,GAIjB,GAhKoB,cAgKhBA,EAAMJ,UAAU,EAAG0rB,GACnB,OAAOzlC,KAAK+E,MAAMoV,GAMtB,IAGI4sB,EAHAlB,EAAmB1rB,EAAMJ,UAAU2rB,GACnC/lB,EAAOxF,EAAMJ,UAAU0rB,EAA0BC,GAKrD,GAxKY,SAwKR/lB,GAAsB6lB,EAAuBliC,KAAKuiC,GAAmB,CACrE,IAAImB,EAAUnB,EAAiB9vC,MAAMyvC,GACrCuB,EAAWC,EAAQ,GACnBnB,EAAmBA,EAAiB9rB,UAAUitB,EAAQ,GAAGlxC,QAE7D,IAAIqwC,EAASP,EAAeC,GAI5B,OAAQlmB,GACJ,IAnLe,OAoLX,OAAOwmB,EACX,IApLQ,OAqLJ,OAAOpH,EAAW,CAACoH,GAAS,CAAExmB,KAAMonB,IACxC,IArLa,OAsLT,OAAO,IAAIE,UAAUd,GACzB,IAtLc,OAuLV,OAAO,IAAI73B,WAAW63B,GAC1B,IAvLqB,OAwLjB,OAAO,IAAIe,kBAAkBf,GACjC,IAxLc,OAyLV,OAAO,IAAIgB,WAAWhB,GAC1B,IAxLe,OAyLX,OAAO,IAAIj3B,YAAYi3B,GAC3B,IA3Lc,OA4LV,OAAO,IAAIiB,WAAWjB,GAC1B,IA3Le,OA4LX,OAAO,IAAIkB,YAAYlB,GAC3B,IA5LgB,OA6LZ,OAAO,IAAImB,aAAanB,GAC5B,IA7LgB,OA8LZ,OAAO,IAAIoB,aAAapB,GAC5B,QACI,MAAM,IAAI7pB,MAAM,gBAAkBqD,KAO1CimB,eAAgBA,EAChBQ,eAAgBA,GAapB,SAASoB,EAAcxxC,EAAGmqC,EAAQzQ,EAAUmQ,GACxC7pC,EAAEyxC,WAAW,8BAAgCtH,EAAOY,UAAvC,+CAAwG,GAAIrR,EAAUmQ,GAyCvI,SAAS6H,EAAc1xC,EAAGmqC,EAAQwH,EAAclwB,EAAMiY,EAAUmQ,GAC5D7pC,EAAEyxC,WAAWE,EAAclwB,EAAMiY,GAAU,SAAU15B,EAAGqsB,GAChDA,EAAMM,OAASN,EAAMulB,WACrB5xC,EAAEyxC,WAAW,iEAAuE,CAACtH,EAAOY,YAAY,SAAU/qC,EAAG6xC,GAC5GA,EAAQC,KAAKhyC,OAOd+pC,EAAc7pC,EAAGqsB,GAJjBmlB,EAAcxxC,EAAGmqC,GAAQ,WACrBnqC,EAAEyxC,WAAWE,EAAclwB,EAAMiY,EAAUmQ,KAC5CA,KAIRA,GAEHA,EAAc7pC,EAAGqsB,KAEtBwd,GA6EP,SAASkI,EAASvpC,EAAK2b,EAAOuV,EAAUsY,GACpC,IAAIz6B,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,gBAIAyI,IAAV1B,IACAA,EAAQ,MAIZ,IAAI8tB,EAAgB9tB,EAEhBgmB,EAAS5yB,EAAK80B,QAClBlC,EAAO+H,WAAW3B,UAAUpsB,GAAO,SAAUA,EAAOkI,GAC5CA,EACAkb,EAAOlb,GAEP8d,EAAOpY,GAAGO,aAAY,SAAUtyB,GAC5B0xC,EAAc1xC,EAAGmqC,EAAQ,0BAA4BA,EAAOY,UAAnC,8BAAmF,CAACviC,EAAK2b,IAAQ,WACtH/V,EAAQ6jC,MACT,SAAUjyC,EAAGqsB,GACZkb,EAAOlb,SAEZ,SAAU8lB,GAGT,GAAIA,EAASxlB,OAASwlB,EAASC,UAAW,CAQtC,GAAIJ,EAAc,EAEd,YADA5jC,EAAQ2jC,EAAS3mC,MAAMmM,EAAM,CAAC/O,EAAKypC,EAAevY,EAAUsY,EAAc,KAG9EzK,EAAO4K,aAKjB,MAAE5K,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,EAmIX,SAASuL,EAAiBtgB,GACtB,OAAO,IAAI2X,GAAU,SAAUt7B,EAASm5B,GACpCxV,EAAGO,aAAY,SAAUtyB,GACrBA,EAAEyxC,WAAW,8FAAoG,IAAI,SAAUzxC,EAAG6xC,GAG9H,IAFA,IAAIS,EAAa,GAERhyC,EAAI,EAAGA,EAAIuxC,EAAQC,KAAKhyC,OAAQQ,IACrCgyC,EAAW/wC,KAAKswC,EAAQC,KAAKhjC,KAAKxO,GAAG2N,MAGzCG,EAAQ,CACJ2jB,GAAIA,EACJugB,WAAYA,OAEjB,SAAUtyC,EAAGqsB,GACZkb,EAAOlb,SAEZ,SAAU8lB,GACT5K,EAAO4K,SAwEnB,IAAII,EAAgB,CAChB3F,QAAS,gBACTC,aArZJ,SAAwB7V,GACpB,IAAIzf,EAAOpU,KACPgnC,EAAS,CACTpY,GAAI,MAGR,GAAIiF,EACA,IAAK,IAAI12B,KAAK02B,EACVmT,EAAO7pC,GAA2B,iBAAf02B,EAAQ12B,GAAkB02B,EAAQ12B,GAAGpB,WAAa83B,EAAQ12B,GAIrF,IAAIkyC,EAAgB,IAAI9I,GAAU,SAAUt7B,EAASm5B,GAGjD,IACI4C,EAAOpY,GAAKqb,aAAajD,EAAOl8B,KAAM3O,OAAO6qC,EAAOzkC,SAAUykC,EAAOsI,YAAatI,EAAO/1B,MAC3F,MAAOtS,GACL,OAAOylC,EAAOzlC,GAIlBqoC,EAAOpY,GAAGO,aAAY,SAAUtyB,GAC5BwxC,EAAcxxC,EAAGmqC,GAAQ,WACrB5yB,EAAK80B,QAAUlC,EACf/7B,OACD,SAAUpO,EAAGqsB,GACZkb,EAAOlb,QAEZkb,MAIP,OADA4C,EAAO+H,WAAa5B,EACbkC,GAqXPtF,SA1oB+B,mBAAjBE,aA2oBdM,QAjUJ,SAAmBlF,EAAU9O,GACzB,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACd,IAAI+sB,EAAS5yB,EAAK80B,QAElBlC,EAAOpY,GAAGO,aAAY,SAAUtyB,GAC5B0xC,EAAc1xC,EAAGmqC,EAAQ,iBAAmBA,EAAOY,UAAW,IAAI,SAAU/qC,EAAG6xC,GAI3E,IAHA,IAAIC,EAAOD,EAAQC,KACfhyC,EAASgyC,EAAKhyC,OAETQ,EAAI,EAAGA,EAAIR,EAAQQ,IAAK,CAC7B,IAAIwO,EAAOgjC,EAAKhjC,KAAKxO,GACjBsmB,EAAS9X,EAAKqV,MAYlB,GARIyC,IACAA,EAASujB,EAAO+H,WAAWpB,YAAYlqB,SAO5B,KAJfA,EAAS4hB,EAAS5hB,EAAQ9X,EAAKtG,IAAKlI,EAAI,IAMpC,YADA8N,EAAQwY,GAKhBxY,OACD,SAAUpO,EAAGqsB,GACZkb,EAAOlb,YAGT,MAAEkb,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GAyRP7yB,QAhWJ,SAAmBzL,EAAKkxB,GACpB,IAAIniB,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACd,IAAI+sB,EAAS5yB,EAAK80B,QAClBlC,EAAOpY,GAAGO,aAAY,SAAUtyB,GAC5B0xC,EAAc1xC,EAAGmqC,EAAQ,iBAAmBA,EAAOY,UAAY,yBAA0B,CAACviC,IAAM,SAAUxI,EAAG6xC,GACzG,IAAIjrB,EAASirB,EAAQC,KAAKhyC,OAAS+xC,EAAQC,KAAKhjC,KAAK,GAAGqV,MAAQ,KAI5DyC,IACAA,EAASujB,EAAO+H,WAAWpB,YAAYlqB,IAG3CxY,EAAQwY,MACT,SAAU5mB,EAAGqsB,GACZkb,EAAOlb,YAGT,MAAEkb,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GAsUP/yB,QAhOJ,SAAmBvL,EAAK2b,EAAOuV,GAC3B,OAAOqY,EAAS3mC,MAAMjI,KAAM,CAACqF,EAAK2b,EAAOuV,EAAU,KAgOnD1lB,WA7NJ,SAAsBxL,EAAKkxB,GACvB,IAAIniB,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACd,IAAI+sB,EAAS5yB,EAAK80B,QAClBlC,EAAOpY,GAAGO,aAAY,SAAUtyB,GAC5B0xC,EAAc1xC,EAAGmqC,EAAQ,eAAiBA,EAAOY,UAAY,iBAAkB,CAACviC,IAAM,WAClF4F,OACD,SAAUpO,EAAGqsB,GACZkb,EAAOlb,YAGT,MAAEkb,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GA2MP4H,MAtMJ,SAAiBhV,GACb,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACd,IAAI+sB,EAAS5yB,EAAK80B,QAClBlC,EAAOpY,GAAGO,aAAY,SAAUtyB,GAC5B0xC,EAAc1xC,EAAGmqC,EAAQ,eAAiBA,EAAOY,UAAW,IAAI,WAC5D38B,OACD,SAAUpO,EAAGqsB,GACZkb,EAAOlb,YAGT,MAAEkb,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GAsLPhnC,OAjLJ,SAAkB45B,GACd,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACd,IAAI+sB,EAAS5yB,EAAK80B,QAClBlC,EAAOpY,GAAGO,aAAY,SAAUtyB,GAE5B0xC,EAAc1xC,EAAGmqC,EAAQ,+BAAiCA,EAAOY,UAAW,IAAI,SAAU/qC,EAAG6xC,GACzF,IAAIjrB,EAASirB,EAAQC,KAAKhjC,KAAK,GAAGrP,EAClC2O,EAAQwY,MACT,SAAU5mB,EAAGqsB,GACZkb,EAAOlb,YAGT,MAAEkb,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GA+JPt+B,IArJJ,SAAerH,EAAGu4B,GACd,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACd,IAAI+sB,EAAS5yB,EAAK80B,QAClBlC,EAAOpY,GAAGO,aAAY,SAAUtyB,GAC5B0xC,EAAc1xC,EAAGmqC,EAAQ,mBAAqBA,EAAOY,UAAY,wBAAyB,CAAC5pC,EAAI,IAAI,SAAUnB,EAAG6xC,GAC5G,IAAIjrB,EAASirB,EAAQC,KAAKhyC,OAAS+xC,EAAQC,KAAKhjC,KAAK,GAAGtG,IAAM,KAC9D4F,EAAQwY,MACT,SAAU5mB,EAAGqsB,GACZkb,EAAOlb,YAGT,MAAEkb,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GAoIPxlC,KAjIJ,SAAgBo4B,GACZ,IAAIniB,EAAOpU,KAEP2jC,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3ChwB,EAAKu1B,QAAQ1vB,MAAK,WACd,IAAI+sB,EAAS5yB,EAAK80B,QAClBlC,EAAOpY,GAAGO,aAAY,SAAUtyB,GAC5B0xC,EAAc1xC,EAAGmqC,EAAQ,mBAAqBA,EAAOY,UAAW,IAAI,SAAU/qC,EAAG6xC,GAG7E,IAFA,IAAIvwC,EAAO,GAEFhB,EAAI,EAAGA,EAAIuxC,EAAQC,KAAKhyC,OAAQQ,IACrCgB,EAAKC,KAAKswC,EAAQC,KAAKhjC,KAAKxO,GAAGkI,KAGnC4F,EAAQ9M,MACT,SAAUtB,EAAGqsB,GACZkb,EAAOlb,YAGT,MAAEkb,MAIhB,OADAoC,EAAgB7C,EAASpN,GAClBoN,GA2GPgI,aA/EJ,SAAwB9X,EAAS0C,GAC7BA,EAAWqQ,EAAY3+B,MAAMjI,KAAMkI,WAEnC,IAAI0jC,EAAgB5rC,KAAK6rC,UACzBhY,EAA6B,mBAAZA,GAA0BA,GAAW,IACzC/oB,OACT+oB,EAAQ/oB,KAAO+oB,EAAQ/oB,MAAQ8gC,EAAc9gC,KAC7C+oB,EAAQ+T,UAAY/T,EAAQ+T,WAAagE,EAAchE,WAG3D,IACIjE,EADAvvB,EAAOpU,KAsDX,OADAwmC,EAhDI7C,EAHC9P,EAAQ/oB,KAGC,IAAIy7B,GAAU,SAAUt7B,GAC9B,IAAI2jB,EAGAA,EAFAiF,EAAQ/oB,OAAS8gC,EAAc9gC,KAE1BsJ,EAAK80B,QAAQta,GAEbqb,aAAapW,EAAQ/oB,KAAM,GAAI,GAAI,GAOxCG,EAJC4oB,EAAQ+T,UAID,CACJhZ,GAAIA,EACJugB,WAAY,CAACtb,EAAQ+T,YAJjBsH,EAAiBtgB,OAO9B3U,MAAK,SAAUs1B,GACd,OAAO,IAAIhJ,GAAU,SAAUt7B,EAASm5B,GACpCmL,EAAc3gB,GAAGO,aAAY,SAAUtyB,GACnC,SAAS2yC,EAAU5H,GACf,OAAO,IAAIrB,GAAU,SAAUt7B,EAASm5B,GACpCvnC,EAAEyxC,WAAW,wBAA0B1G,EAAW,IAAI,WAClD38B,OACD,SAAUpO,EAAGqsB,GACZkb,EAAOlb,SAMnB,IADA,IAAIumB,EAAa,GACRtyC,EAAI,EAAGga,EAAMo4B,EAAcJ,WAAWxyC,OAAQQ,EAAIga,EAAKha,IAC5DsyC,EAAWrxC,KAAKoxC,EAAUD,EAAcJ,WAAWhyC,KAGvDopC,EAAU/hC,IAAIirC,GAAYx1B,MAAK,WAC3BhP,OACM,OAAE,SAAUtM,GAClBylC,EAAOzlC,SAEZ,SAAUqwC,GACT5K,EAAO4K,YA5CTzI,EAAUnC,OAAO,qBAkDN7N,GAClBoN,IA4BX,SAAS+L,EAAc7b,EAAS8b,GAC5B,IAAIC,EAAY/b,EAAQ/oB,KAAO,IAK/B,OAHI+oB,EAAQ+T,YAAc+H,EAAc/H,YACpCgI,GAAa/b,EAAQ+T,UAAY,KAE9BgI,EAmSX,IAAIC,EAAsB,CACtBpG,QAAS,sBACTC,aA3QJ,SAAwB7V,GACpB,IACImT,EAAS,GACb,GAAInT,EACA,IAAK,IAAI12B,KAAK02B,EACVmT,EAAO7pC,GAAK02B,EAAQ12B,GAM5B,OAFA6pC,EAAO4I,UAAYF,EAAc7b,EARtB7zB,KAQoC8pC,iBA/BnD,WAGI,IAII,OAHAn5B,aAAaC,QAHS,6BAGoB,GAC1CD,aAAaE,WAJS,8BAMf,EACT,MAAOlS,GACL,OAAO,GASHmxC,IAA+Bn/B,aAAahU,OAAS,GAKlDqD,KAcNkpC,QAAUlC,EACfA,EAAO+H,WAAa5B,EAEb5G,EAAUt7B,WANNs7B,EAAUnC,UAgQrB2F,SAtTJ,WACI,IACI,MAA+B,oBAAjBp5B,cAAgC,YAAaA,gBAEzDA,aAAaC,QACjB,MAAOjS,GACL,OAAO,GAgTDoxC,GACVxF,QAxMJ,SAAmBlF,EAAU9O,GACzB,IAAIniB,EAAOpU,KAEP2jC,EAAUvvB,EAAKu1B,QAAQ1vB,MAAK,WAc5B,IAbA,IAAI+sB,EAAS5yB,EAAK80B,QACd0G,EAAY5I,EAAO4I,UACnBI,EAAkBJ,EAAUjzC,OAC5BA,EAASgU,aAAahU,OAQtB8tC,EAAkB,EAEbttC,EAAI,EAAGA,EAAIR,EAAQQ,IAAK,CAC7B,IAAIkI,EAAMsL,aAAatL,IAAIlI,GAC3B,GAA+B,IAA3BkI,EAAInH,QAAQ0xC,GAAhB,CAGA,IAAI5uB,EAAQrQ,aAAaG,QAAQzL,GAYjC,GANI2b,IACAA,EAAQgmB,EAAO+H,WAAWpB,YAAY3sB,SAK5B,KAFdA,EAAQqkB,EAASrkB,EAAO3b,EAAIub,UAAUovB,GAAkBvF,MAGpD,OAAOzpB,OAMnB,OADAwlB,EAAgB7C,EAASpN,GAClBoN,GAgKP7yB,QAlOJ,SAAmBzL,EAAKkxB,GACpB,IAAIniB,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAUvvB,EAAKu1B,QAAQ1vB,MAAK,WAC5B,IAAI+sB,EAAS5yB,EAAK80B,QACdzlB,EAAS9S,aAAaG,QAAQk2B,EAAO4I,UAAYvqC,GAUrD,OAJIoe,IACAA,EAASujB,EAAO+H,WAAWpB,YAAYlqB,IAGpCA,KAIX,OADA+iB,EAAgB7C,EAASpN,GAClBoN,GA8MP/yB,QAnFJ,SAAmBvL,EAAK2b,EAAOuV,GAC3B,IAAIniB,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAUvvB,EAAKu1B,QAAQ1vB,MAAK,gBAGdyI,IAAV1B,IACAA,EAAQ,MAIZ,IAAI8tB,EAAgB9tB,EAEpB,OAAO,IAAIulB,GAAU,SAAUt7B,EAASm5B,GACpC,IAAI4C,EAAS5yB,EAAK80B,QAClBlC,EAAO+H,WAAW3B,UAAUpsB,GAAO,SAAUA,EAAOkI,GAChD,GAAIA,EACAkb,EAAOlb,QAEP,IACIvY,aAAaC,QAAQo2B,EAAO4I,UAAYvqC,EAAK2b,GAC7C/V,EAAQ6jC,GACV,MAAOnwC,GAGU,uBAAXA,EAAEmM,MAA4C,+BAAXnM,EAAEmM,MACrCs5B,EAAOzlC,GAEXylC,EAAOzlC,aAQ3B,OADA6nC,EAAgB7C,EAASpN,GAClBoN,GA8CP9yB,WAtGJ,SAAsBxL,EAAKkxB,GACvB,IAAIniB,EAAOpU,KAEXqF,EAAMshC,EAAathC,GAEnB,IAAIs+B,EAAUvvB,EAAKu1B,QAAQ1vB,MAAK,WAE5BtJ,aAAaE,WADAuD,EAAK80B,QACa0G,UAAYvqC,MAI/C,OADAmhC,EAAgB7C,EAASpN,GAClBoN,GA4FP4H,MA1PJ,SAAiBhV,GACb,IAAIniB,EAAOpU,KACP2jC,EAAUvvB,EAAKu1B,QAAQ1vB,MAAK,WAG5B,IAFA,IAAI21B,EAAYx7B,EAAK80B,QAAQ0G,UAEpBzyC,EAAIwT,aAAahU,OAAS,EAAGQ,GAAK,EAAGA,IAAK,CAC/C,IAAIkI,EAAMsL,aAAatL,IAAIlI,GAEI,IAA3BkI,EAAInH,QAAQ0xC,IACZj/B,aAAaE,WAAWxL,OAMpC,OADAmhC,EAAgB7C,EAASpN,GAClBoN,GA4OPhnC,OAnHJ,SAAkB45B,GACd,IACIoN,EADO3jC,KACQ7B,OAAO8b,MAAK,SAAU9b,GACrC,OAAOA,EAAKxB,UAIhB,OADA6pC,EAAgB7C,EAASpN,GAClBoN,GA6GPt+B,IAjKJ,SAAerH,EAAGu4B,GACd,IAAIniB,EAAOpU,KACP2jC,EAAUvvB,EAAKu1B,QAAQ1vB,MAAK,WAC5B,IACIwJ,EADAujB,EAAS5yB,EAAK80B,QAElB,IACIzlB,EAAS9S,aAAatL,IAAIrH,GAC5B,MAAOkrB,GACLzF,EAAS,KAQb,OAJIA,IACAA,EAASA,EAAO7C,UAAUomB,EAAO4I,UAAUjzC,SAGxC8mB,KAIX,OADA+iB,EAAgB7C,EAASpN,GAClBoN,GA8IPxlC,KA3IJ,SAAgBo4B,GACZ,IAAIniB,EAAOpU,KACP2jC,EAAUvvB,EAAKu1B,QAAQ1vB,MAAK,WAK5B,IAJA,IAAI+sB,EAAS5yB,EAAK80B,QACdvsC,EAASgU,aAAahU,OACtBwB,EAAO,GAEFhB,EAAI,EAAGA,EAAIR,EAAQQ,IAAK,CAC7B,IAAI8yC,EAAUt/B,aAAatL,IAAIlI,GACW,IAAtC8yC,EAAQ/xC,QAAQ8oC,EAAO4I,YACvBzxC,EAAKC,KAAK6xC,EAAQrvB,UAAUomB,EAAO4I,UAAUjzC,SAIrD,OAAOwB,KAIX,OADAqoC,EAAgB7C,EAASpN,GAClBoN,GA0HPgI,aAhDJ,SAAwB9X,EAAS0C,GAI7B,GAHAA,EAAWqQ,EAAY3+B,MAAMjI,KAAMkI,aAEnC2rB,EAA6B,mBAAZA,GAA0BA,GAAW,IACzC/oB,KAAM,CACf,IAAI8gC,EAAgB5rC,KAAK6rC,SACzBhY,EAAQ/oB,KAAO+oB,EAAQ/oB,MAAQ8gC,EAAc9gC,KAC7C+oB,EAAQ+T,UAAY/T,EAAQ+T,WAAagE,EAAchE,UAG3D,IACIjE,EADAvvB,EAAOpU,KAuBX,OADAwmC,EAjBI7C,EAHC9P,EAAQ/oB,KAGC,IAAIy7B,GAAU,SAAUt7B,GAI1BA,EAHC4oB,EAAQ+T,UAGD8H,EAAc7b,EAASzf,EAAK01B,gBAF5BjW,EAAQ/oB,KAAO,QAI5BmP,MAAK,SAAU21B,GACd,IAAK,IAAIzyC,EAAIwT,aAAahU,OAAS,EAAGQ,GAAK,EAAGA,IAAK,CAC/C,IAAIkI,EAAMsL,aAAatL,IAAIlI,GAEI,IAA3BkI,EAAInH,QAAQ0xC,IACZj/B,aAAaE,WAAWxL,OAb1BkhC,EAAUnC,OAAO,qBAmBN7N,GAClBoN,IAsBP5hB,EAAW,SAAkBmuB,EAAOC,GAGpC,IAFA,IAL+B19B,EAAGpE,EAK9B8I,EAAM+4B,EAAMvzC,OACZQ,EAAI,EACDA,EAAIga,GAAK,CACZ,IAR2B1E,EAQby9B,EAAM/yC,OARUkR,EAQN8hC,IAPG,iBAAN19B,GAA+B,iBAANpE,GAAkBsZ,MAAMlV,IAAMkV,MAAMtZ,GAQ9E,OAAO,EAEXlR,IAGJ,OAAO,GAGPoZ,EAAU5O,MAAM4O,SAAW,SAAUlb,GACrC,MAA+C,mBAAxCoC,OAAOC,UAAU3B,SAAS+B,KAAKzC,IAKtC+0C,EAAiB,GAEjBC,EAAgB,GAEhBC,EAAiB,CACjBC,UAAW/G,EACXgH,OAAQpB,EACRqB,aAAcZ,GAGda,EAAqB,CAACJ,EAAeC,UAAU9G,QAAS6G,EAAeE,OAAO/G,QAAS6G,EAAeG,aAAahH,SAEnHkH,EAAwB,CAAC,gBAEzBC,EAAiB,CAAC,QAAS,UAAW,UAAW,MAAO,OAAQ,SAAU,aAAc,WAAW38B,OAAO08B,GAE1GE,EAAgB,CAChBvB,YAAa,GACbwB,OAAQJ,EAAmBl1C,QAC3BsP,KAAM,cAGNmG,KAAM,QACN22B,UAAW,gBACXrlC,QAAS,GAGb,SAASwuC,EAAcC,EAAqBC,GACxCD,EAAoBC,GAAiB,WACjC,IAAIC,EAAQhpC,UACZ,OAAO8oC,EAAoBrH,QAAQ1vB,MAAK,WACpC,OAAO+2B,EAAoBC,GAAehpC,MAAM+oC,EAAqBE,OAKjF,SAASC,IACL,IAAK,IAAIh0C,EAAI,EAAGA,EAAI+K,UAAUvL,OAAQQ,IAAK,CACvC,IAAI9B,EAAM6M,UAAU/K,GAEpB,GAAI9B,EACA,IAAK,IAAI+1C,KAAQ/1C,EACTA,EAAIsC,eAAeyzC,KAEflpC,UAAU,GAAGkpC,GADb76B,EAAQlb,EAAI+1C,IACS/1C,EAAI+1C,GAAM51C,QAEVH,EAAI+1C,IAO7C,OAAOlpC,UAAU,GAGrB,IA4SImpC,EAAiB,IA5SH,WACd,SAASC,EAAYzd,GAGjB,IAAK,IAAI0d,KAvnEjB,SAAyBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAIh8B,UAAU,qCAqnExGi8B,CAAgB1xC,KAAMsxC,GAEIhB,EACtB,GAAIA,EAAe3yC,eAAe4zC,GAAgB,CAC9C,IAAIT,EAASR,EAAeiB,GACxBI,EAAab,EAAOrH,QACxBzpC,KAAKuxC,GAAiBI,EAEjBvB,EAAeuB,IAIhB3xC,KAAK4xC,aAAad,GAK9B9wC,KAAK8pC,eAAiBqH,EAAO,GAAIN,GACjC7wC,KAAK6xC,QAAUV,EAAO,GAAInxC,KAAK8pC,eAAgBjW,GAC/C7zB,KAAK8xC,WAAa,KAClB9xC,KAAK+xC,YAAc,KACnB/xC,KAAKgyC,QAAS,EACdhyC,KAAKkpC,QAAU,KAEflpC,KAAKiyC,+BACLjyC,KAAKkyC,UAAUlyC,KAAK6xC,QAAQf,QAAe,OAAE,eA0QjD,OAjQAQ,EAAY5zC,UAAUmuC,OAAS,SAAgBhY,GAI3C,GAA0E,iBAAlD,IAAZA,EAA0B,YAAcsR,EAAQtR,IAAwB,CAGhF,GAAI7zB,KAAKgyC,OACL,OAAO,IAAI7uB,MAAM,wDAGrB,IAAK,IAAIhmB,KAAK02B,EAAS,CAKnB,GAJU,cAAN12B,IACA02B,EAAQ12B,GAAK02B,EAAQ12B,GAAGnB,QAAQ,MAAO,MAGjC,YAANmB,GAAyC,iBAAf02B,EAAQ12B,GAClC,OAAO,IAAIgmB,MAAM,sCAGrBnjB,KAAK6xC,QAAQ10C,GAAK02B,EAAQ12B,GAK9B,QAAI,WAAY02B,KAAWA,EAAQid,QACxB9wC,KAAKkyC,UAAUlyC,KAAK6xC,QAAQf,QAIpC,MAAuB,iBAAZjd,EACP7zB,KAAK6xC,QAAQhe,GAEb7zB,KAAK6xC,SAQpBP,EAAY5zC,UAAUk0C,aAAe,SAAsBO,EAAc5b,EAAUmQ,GAC/E,IAAI/C,EAAU,IAAI4C,GAAU,SAAUt7B,EAASm5B,GAC3C,IACI,IAAIuN,EAAaQ,EAAa1I,QAC1B2I,EAAkB,IAAIjvB,MAAM,wFAIhC,IAAKgvB,EAAa1I,QAEd,YADArF,EAAOgO,GAKX,IADA,IAAIC,EAAgBzB,EAAe38B,OAAO,gBACjC9W,EAAI,EAAGga,EAAMk7B,EAAc11C,OAAQQ,EAAIga,EAAKha,IAAK,CACtD,IAAIm1C,EAAmBD,EAAcl1C,GAKrC,KADkB4kB,EAAS4uB,EAAuB2B,IAC/BH,EAAaG,KAAgE,mBAAnCH,EAAaG,GAEtE,YADAlO,EAAOgO,IAKe,WAU1B,IATA,IAAIG,EAA8B,SAAqCC,GACnE,OAAO,WACH,IAAItpB,EAAQ,IAAI/F,MAAM,UAAYqvB,EAAa,6CAC3C7O,EAAU4C,EAAUnC,OAAOlb,GAE/B,OADAsd,EAAgB7C,EAASz7B,UAAUA,UAAUvL,OAAS,IAC/CgnC,IAIN8O,EAAK,EAAGC,EAAO/B,EAAsBh0C,OAAQ81C,EAAKC,EAAMD,IAAM,CACnE,IAAIE,EAAuBhC,EAAsB8B,GAC5CN,EAAaQ,KACdR,EAAaQ,GAAwBJ,EAA4BI,KAK7EC,GAEA,IAAIC,EAAmB,SAA0BC,GACzC1C,EAAeuB,IACf7vC,QAAQmU,KAAK,kCAAoC07B,GAErDvB,EAAeuB,GAAcQ,EAC7B9B,EAAcsB,GAAcmB,EAI5B7nC,KAGA,aAAcknC,EACVA,EAAapI,UAA6C,mBAA1BoI,EAAapI,SAC7CoI,EAAapI,WAAW9vB,KAAK44B,EAAkBzO,GAE/CyO,IAAmBV,EAAapI,UAGpC8I,GAAiB,GAEvB,MAAOl0C,GACLylC,EAAOzlC,OAKf,OADA8nC,EAAoB9C,EAASpN,EAAUmQ,GAChC/C,GAGX2N,EAAY5zC,UAAUozC,OAAS,WAC3B,OAAO9wC,KAAKypC,SAAW,MAG3B6H,EAAY5zC,UAAUq1C,UAAY,SAAmBpB,EAAYpb,EAAUmQ,GACvE,IAAIsM,EAAmB5C,EAAeuB,GAAcpL,EAAUt7B,QAAQmlC,EAAeuB,IAAepL,EAAUnC,OAAO,IAAIjhB,MAAM,sBAG/H,OADAsjB,EAAoBuM,EAAkBzc,EAAUmQ,GACzCsM,GAGX1B,EAAY5zC,UAAUu1C,cAAgB,SAAuB1c,GACzD,IAAI2c,EAAoB3M,EAAUt7B,QAAQkiC,GAE1C,OADA1G,EAAoByM,EAAmB3c,GAChC2c,GAGX5B,EAAY5zC,UAAUisC,MAAQ,SAAepT,GACzC,IAAIniB,EAAOpU,KAEP2jC,EAAUvvB,EAAK09B,WAAW73B,MAAK,WAK/B,OAJoB,OAAhB7F,EAAK49B,SACL59B,EAAK49B,OAAS59B,EAAK29B,eAGhB39B,EAAK49B,UAIhB,OADAvL,EAAoB9C,EAASpN,EAAUA,GAChCoN,GAGX2N,EAAY5zC,UAAUw0C,UAAY,SAAmBiB,EAAS5c,EAAUmQ,GACpE,IAAItyB,EAAOpU,KAENuW,EAAQ48B,KACTA,EAAU,CAACA,IAGf,IAAIC,EAAmBpzC,KAAKqzC,qBAAqBF,GAEjD,SAASG,IACLl/B,EAAKy9B,QAAQf,OAAS18B,EAAK08B,SAG/B,SAASyC,EAAqBzC,GAK1B,OAJA18B,EAAKo/B,QAAQ1C,GACbwC,IAEAl/B,EAAK49B,OAAS59B,EAAKs1B,aAAat1B,EAAKy9B,SAC9Bz9B,EAAK49B,OA+BhB,IAAIyB,EAAuC,OAApBzzC,KAAK8xC,WAAsB9xC,KAAK8xC,WAAkB,OAAE,WACvE,OAAOvL,EAAUt7B,aAChBs7B,EAAUt7B,UAqBf,OAnBAjL,KAAK8xC,WAAa2B,EAAiBx5B,MAAK,WACpC,IAAI03B,EAAayB,EAAiB,GAIlC,OAHAh/B,EAAK80B,QAAU,KACf90B,EAAK49B,OAAS,KAEP59B,EAAK2+B,UAAUpB,GAAY13B,MAAK,SAAU62B,GAC7C18B,EAAKq1B,QAAUqH,EAAOrH,QACtB6J,IACAl/B,EAAK69B,+BACL79B,EAAK29B,YAzCb,SAAoBqB,GAChB,OAAO,WACH,IAAIM,EAAqB,EAmBzB,OAjBA,SAASC,IACL,KAAOD,EAAqBN,EAAiBz2C,QAAQ,CACjD,IAAIg1C,EAAayB,EAAiBM,GAMlC,OALAA,IAEAt/B,EAAK80B,QAAU,KACf90B,EAAK49B,OAAS,KAEP59B,EAAK2+B,UAAUpB,GAAY13B,KAAKs5B,GAA6B,MAAEI,GAG1EL,IACA,IAAIpqB,EAAQ,IAAI/F,MAAM,sCAEtB,OADA/O,EAAK09B,WAAavL,EAAUnC,OAAOlb,GAC5B9U,EAAK09B,WAGT6B,IAoBYC,CAAWR,SAE5B,OAAE,WACRE,IACA,IAAIpqB,EAAQ,IAAI/F,MAAM,sCAEtB,OADA/O,EAAK09B,WAAavL,EAAUnC,OAAOlb,GAC5B9U,EAAK09B,cAGhBrL,EAAoBzmC,KAAK8xC,WAAYvb,EAAUmQ,GACxC1mC,KAAK8xC,YAGhBR,EAAY5zC,UAAUm2C,SAAW,SAAkBlC,GAC/C,QAAStB,EAAcsB,IAG3BL,EAAY5zC,UAAU81C,QAAU,SAAiBM,GAC7C3C,EAAOnxC,KAAM8zC,IAGjBxC,EAAY5zC,UAAU21C,qBAAuB,SAA8BF,GAEvE,IADA,IAAIC,EAAmB,GACdj2C,EAAI,EAAGga,EAAMg8B,EAAQx2C,OAAQQ,EAAIga,EAAKha,IAAK,CAChD,IAAIw0C,EAAawB,EAAQh2C,GACrB6C,KAAK6zC,SAASlC,IACdyB,EAAiBh1C,KAAKuzC,GAG9B,OAAOyB,GAGX9B,EAAY5zC,UAAUu0C,6BAA+B,WAKjD,IAAK,IAAI90C,EAAI,EAAGga,EAAMy5B,EAAej0C,OAAQQ,EAAIga,EAAKha,IAClD4zC,EAAc/wC,KAAM4wC,EAAezzC,KAI3Cm0C,EAAY5zC,UAAUq2C,eAAiB,SAAwBlgB,GAC3D,OAAO,IAAIyd,EAAYzd,IAGpByd,EArSO,IA8SlBp1C,EAAON,QAAUy1C,GAEf,CAACpM,EAAI,KAAK,GAAG,CAAC,GAxvFmW,CAwvF/V,MClvFd+O,EAAmB,IAAIC,MAEjBpI,OAAO,CACfiF,OAAQ,CAACoD,EAAYzD,aAAcyD,EAAY3D,UAAW2D,EAAY1D,UAG1E,IChBI2D,EDmBiB7gC,aAWjB,WAAY/R,EAAiBmlB,uBAAjBnlB,IAAAA,EAAa,aAAImlB,IAAAA,EAAoB,MARjD1mB,cAAW,IAAI2hC,IACf3hC,sBAAmB,IAAI2hC,IACvB3hC,uBAAoB,IAAI2hC,IACxB3hC,gBAAa0iB,EACb1iB,aAAU,EACVA,aAAS,EAQTA,qBAAkBC,cAAW,aAAA,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACpBmjB,EAAKgxB,QAAMlxB,SAAA,MAAA,OAAAA,SACNE,EAAKixB,kBAAiB,OAE5BjxB,EAAKyc,SAAS5uB,MACR4uB,EAAWl4B,MAAMI,KAAKqb,EAAKyc,SAAS1hC,QAC1C+1C,EAAYtjC,QAAQwS,EAAK7hB,GAAIs+B,SACPnd,IAAfU,EAAKpC,MACZkzB,EAAYrjC,WAAWuS,EAAK7hB,IAE5B2yC,EAAYtjC,QAAQwS,EAAK7hB,GAAmB,OAAf6hB,EAAKpC,MApCrB,uCAoCyDoC,EAAKpC,OAC9E,OAAA,UAAA,0BACF,KAEHhhB,qBAAkBC,cAAW,aAAA,QAAA,6BAAA,OAAA,sBAAA,OAAA,IACrB+zC,EAAiBx2C,IAAI4lB,EAAK7hB,KAAG+yC,SAAA,MAAA,8BACtB5xB,GAAS,OAAA,OAAA4xB,SAGDJ,EAAYpjC,QAAQsS,EAAK7hB,IAAG,OAArC,GAEK,QAFXkiB,WAEe6wB,UAAA,MACf7wB,OAASf,EACTsxB,EAAiBzpC,IAAI6Y,EAAK7hB,IAAI+yC,UAAA,MAAA,QAAA,GAjDjB,yCAkDN7wB,GAA2B6wB,UAAA,MAClC7wB,EAAS,KAAK6wB,UAAA,MAAA,QAAA,IACP3sC,MAAM4O,QAAQkN,IAAO6wB,UAAA,MAER,OAAdC,EAAY,GAAED,UACd39B,QAAQnS,IAAIif,EAAOnd,eAAG,kBAAC,WAAMjB,GAAG,6BAAA,OAAA,sBAAA,OAAA,OAAAmvC,SACXpxB,EAAKvf,IAAIwB,GAAKuB,OAAM,OAA3C2tC,EAAUlvC,UAAI,OAAA,UAAA,0BACjB,mBAAA,qCAAE,QACHoe,EAAS8wB,EAAUD,UAAA,MAAA,QAGnBlxB,EAAKpC,MAAQyC,EAAO,QAEL,OAAnBL,EAAKgxB,QAAS,oBACP3wB,GAAM,QAAA,UAAA,0BACd,KAEHzjB,iBAAcC,GAAW,WACrB,qCAAYsB,OACFq4B,EAAQ,CAAEx5B,IAAK,WAAA,OAAMgjB,EAAKqxB,wBAAwBlzC,KACxD6hB,EAAKxc,UAAegzB,GAAO,QAFFxW,EAAKqxB,iCAAkBC,IAIpD,GAAItxB,EAAKsD,OAAQ,CACb,IADa,mBAAA,cACDnlB,OACFq4B,EAAQ,CAAEx5B,IAAK,WAAA,OAAMgjB,EAAKsD,OAAO+tB,wBAAwBlzC,KAC/D6hB,EAAKsD,OAAO9f,UAAegzB,GAAO,QAFTxW,EAAKsD,OAAO+tB,iCAAkBja,IAI3D,IADC,mBAAA,cACWj5B,OACFq4B,EAAQ,CAAEx5B,IAAK,WAAA,OAAMgjB,EAAKsD,OAAOiuB,yBAAyBpzC,KAChE6hB,EAAKxc,UAAegzB,GAAO,QAFFxW,EAAKsD,OAAOiuB,kCAAmBC,OAKjE,IA5DC50C,KAAKuB,GAAKA,EACVvB,KAAK0mB,OAASA,EA6DlB,kBA8FC,OA9FD4M,EAMAzvB,IAAA,SAAIwB,GACA,IAAMwvC,EAAW70C,KAAK6/B,SAASh8B,IAAIwB,GACnC,GAAIwvC,EACA,OAAOA,EAEX,IAAMC,EAAW,IAAIxhC,EAAQtT,KAAKuB,OAAM8D,EAAOrF,MAG/C,OAFAA,KAAK6/B,SAASn0B,IAAIrG,EAAKyvC,GACvB90C,KAAK+0C,kBACED,GAGXxhB,EAKAlwB,IAAA,SAAI4d,cACA,GAAIrZ,MAAM4O,QAAQyK,GACd,MAAM,IAAImC,MAAM,oCAEpB,GAAqB,iBAAVnC,GAAgC,OAAVA,EAQjChhB,KAAK6/B,SAAW,IAAI8B,IACpB3hC,KAAKghB,MAAQA,EACbhhB,KAAKg1C,cACLh1C,KAAK+0C,sBAXL,CAEI,IAAK,IAAM1vC,KADXrF,KAAKghB,WAAQ0B,EACK1B,EACdhhB,KAAK6D,IAAIwB,GAAKjC,IAAI4d,EAAM3b,IdtFXhH,YcwFT,WAAA,OAAMkzB,EAAKyjB,gBdxFe,KckG1C1hB,EAOM1sB,KAAI,WAAA,kBAAV,WAAW2vB,EAAqBqD,EAAyBqb,GAAiB,aAAA,6BAAA,OAAA,sBAAA,OAAO,YAAxBA,IAAAA,GAAoB,IAErEj1C,KAAK6/B,SAAS5uB,MAAI2lB,SAAA,MAEN,OAAZnT,EAAS,GAAGmT,SACNjgB,QAAQnS,IAAImD,MAAMI,KAAK/H,KAAK6/B,SAAS1hC,QAAQmI,eAAG,kBAAC,WAAMjB,GAAG,6BAAA,OAAA,sBAAA,OAAA,OAAA6wB,SACxCnE,EAAKluB,IAAIwB,GAAKuB,UAAK8b,EAAWkX,GAAM,OAAxDnW,EAAOpe,UAAI,OAAA,UAAA,0BACd,mBAAA,qCAAE,OAAAuxB,UAAA,MAAA,OAAA,QACmBlU,IAAf1iB,KAAKghB,OAAmB4V,UAAA,MAC/BnT,EAASzjB,KAAKghB,MAAM4V,UAAA,MAAA,QAAA,OAAAA,UAEL52B,KAAKq0C,kBAAiB,QAArC5wB,SAAM,QAAA,QAEKf,IAAXe,IAAwBwxB,GAAiBre,UAAA,MAC8C,OAAvFL,GAAYA,EAAS9S,EAAQzjB,KAAKuB,GAAG/F,MAAMwE,KAAKuB,GAAGysB,YAAY,KAAO,GAAI,KAAM4L,qBACzEnW,GAAM,QAAA,UAAA,+BAEpB,OAAA,gBAAA,gCAjBS,GAmBV6P,EAIA9yB,GAAA,SAAG+1B,cACOh1B,EAAKvB,KAAKk1C,UAChBl1C,KAAKy0C,iBAAiB/oC,IAAInK,EAAIg1B,GAE9Bv2B,KAAK4G,KAAK2vB,EADI,CAAEn2B,IAAK,WAAA,OAAM4xB,EAAKyiB,wBAAwBlzC,MAC7B,IAG/B+xB,EAKMhtB,IAAG,WAAA,kBAAT,WAAUiwB,GAAkB,mBAAA,6BAAA,OAAA,sBAAA,OAGsC,GAFxDh1B,EAAKvB,KAAKk1C,UAChBl1C,KAAK20C,kBAAkBjpC,IAAInK,EAAIg1B,GACzBqD,EAAQ,CAAEx5B,IAAK,WAAA,OAAM23B,EAAK4c,yBAAyBpzC,KACpDvB,KAAKo0C,QAAMtd,SAAA,MAAA,OAAAA,SAEN92B,KAAKq0C,kBAAiB,OAEhC,QAAoBr0C,KAAK6/B,SAAS/c,iCACxBlc,KAAK2vB,EAAUqD,GAAO,GAC/B,OAAA,UAAA,+BACJ,OAAA,YAAA,gCAXQ,qBCpKX,OAHKua,IACHA,EAAQ,IAAI7gC,GAEP6gC,ECZT,IAAIgB,EAA2C,gBAiB7C,OAdKA,IACHA,EAAe,GACfhB,IAAQtwC,IAAI,SAASyC,KAAI,SAAC8uC,EAAoB/2B,GACxC+2B,IAAcD,EAAa92B,KAC3B+2B,GACFD,EAAa92B,GAAQ+2B,EACrBjB,IAAQtwC,IAAI,UAAUyC,KAAI,SAAC+uC,EAASp3C,GAClCk2C,IAAQtwC,IAAI,UAAUA,IAAI5F,GAAG4F,IAAIwa,GAAMjb,KAAI,cAGtC+xC,EAAa92B,QAInB82B,ECfT,IAAID,EAAU,EACRprC,EAAQ,IAAI63B,IACZ2T,GAAY,IAAI3T,gBAaE4T,GACtB,gBADsBA,IAAAA,EAAY,YAC3B,CACL1xC,aAAIlI,EAAc46B,GAChB,IAAMif,EAAYrB,IAAQtwC,IAAI,UAAUA,IAAI0xC,GACtCE,EAAuC,GAC7CC,uBAAsB,WACpBF,EAAUlvC,KAAI,SAACqvC,EAAkBt3B,GAC/B,IAAI82B,IAAe92B,MACfo3B,EAAQp3B,IAASo3B,EAAQp3B,KAAUs3B,KACvCF,EAAQp3B,GAAQs3B,EACZA,GAAa,CACf,IAAI7wC,EAAO8wC,EAAUv3B,GACjB1iB,GAAiB,MAATA,IACVmJ,EAAOnJ,EAAKG,MAAM,KAAK0a,QAAO,SAACq/B,EAASt5C,GAAQ,OAAKs5C,EAAIhyC,IAAIwhB,mBAAmB9oB,MAAKuI,IAEvFyxB,EAASzxB,EAAMuZ,WAMvBy3B,qBAAYC,EAAsCC,EAAkBr6C,EAAcs6C,EAAgB1f,GAChG,GAAKwf,EAWH,cAAiBA,EAAOjzB,yBAAU,CAAA,IAAzBnX,UACP4qB,EAAS5qB,EAAKqV,MAAOrV,EAAKtG,IAAK,EAAG4wC,EAAStqC,EAAK5D,UAZvC,CACX,IAAMguC,EAAS,IAAIpU,IACnB73B,EAAM4B,IAAIsqC,EAAUD,GACpB/1C,KAAK6D,IAAIlI,GAAM,SAACmJ,EAAWiD,GAAY,OAAKjD,EAAKwB,KAAI,SAAC0a,EAAY3b,EAAaoN,GAE7EsjC,EAAOrqC,IAAIrG,EADE,CAAC2b,MAAAA,EAAO3b,IAAAA,EAAK0C,KAAAA,IAE1B,cAAeutC,GAAUzxC,IAAImyC,GAAUlzB,0BACrC9gB,WAAGgf,EAAO3b,EAAKoN,EAAGwjC,EAASluC,WAYnCmuC,oBAAWH,EAAsCC,EAAkBr6C,EAAcs6C,EAAgB1f,GAC/F,GAAKwf,EAWH,cAAiBA,EAAOjzB,yBAAU,CAAA,IAAzBnX,UACP4qB,EAAS5qB,EAAKqV,MAAOrV,EAAKtG,IAAK,EAAG4wC,EAAStqC,EAAK5D,UAZvC,CACX,IAAMguC,EAAS,IAAIpU,IACnB73B,EAAM4B,IAAIsqC,EAAUD,GACpB/1C,KAAK6D,IAAIlI,GAAM,SAACmJ,EAAWiD,GAAY,OAAKjD,EAAKtE,IAAG,SAACwgB,EAAY3b,EAAaoN,GAE5EsjC,EAAOrqC,IAAI3D,EADE,CAACiZ,MAAAA,EAAO3b,IAAAA,EAAK0C,KAAAA,IAE1B,cAAeutC,GAAUzxC,IAAImyC,GAAUlzB,0BACrC9gB,WAAGgf,EAAO3b,EAAKoN,EAAGwjC,EAASluC,WAUnCouC,uBAAcJ,EAAsCC,EAAkBr6C,EAAcs6C,EAAgB1f,GAClG,GAAKwf,EAWHxf,EAASwf,EAAO9kC,KAAMtV,EAAKG,MAAM,KAAKmJ,MAAO,KAAMgxC,OAXxC,CACX,IAAMF,EAAS,IAAIpU,IACnB73B,EAAM4B,IAAIsqC,EAAUD,GACpB/1C,KAAK6D,IAAIlI,GAAM,SAACmJ,EAAWiD,GAAY,OAAKjD,EAAKtE,IAAG,SAACwgB,EAAY3b,GAC/D2b,EAAQ+0B,EAAOrqC,IAAI3D,GAAM,GAAQguC,SAAchuC,GAE/C,IADA,MAAMkjB,EAAQ8qB,EAAO9kC,SACNqkC,GAAUzxC,IAAImyC,GAAUlzB,0BACrC9gB,WAAGipB,EAAO5lB,EAAK,KAAM4wC,EAASluC,WAQtCquC,oBAAW7kC,EAAY5V,EAAc46B,GACnC,IAAMyf,EAAczkC,MAAMgkC,MAAa55C,EAEnC06C,EAAanB,IACbI,GAAU93C,IAAIw4C,GAChBV,GAAUzxC,IAAImyC,GAAUtqC,IAAI2qC,EAAY9f,GAExC+e,GAAU5pC,IAAIsqC,EAAU,IAAIrU,IAAI,CAAC,CAAC0U,EAAY9f,MAGhD,IAAM0f,EAAU,CAAC71C,IAAK,WACpB,IAAIk2C,EAAchB,GAAUzxC,IAAImyC,GAChCM,GAAeA,SAAmBD,KAG9BN,EAASjsC,EAAMjG,IAAImyC,GAEzB,OAAQzkC,GACN,IAAK,MACHvR,KAAK81C,YAAYC,EAAQC,EAAUr6C,EAAMs6C,EAAS1f,GAClD,MACF,IAAK,KACHv2B,KAAKk2C,WAAWH,EAAQC,EAAUr6C,EAAMs6C,EAAS1f,GACjD,MACF,IAAK,QACHv2B,KAAKm2C,cAAcJ,EAAQC,EAAUr6C,EAAMs6C,EAAS1f,KAK1DjwB,aAAI3K,EAAc46B,GAChBv2B,KAAKo2C,WAAW,MAAOz6C,EAAM46B,IAG/B/1B,YAAG7E,EAAc46B,GACfv2B,KAAKo2C,WAAW,KAAMz6C,EAAM46B,IAG9BtL,eAAMtvB,EAAc46B,GAClBv2B,KAAKo2C,WAAW,QAASz6C,EAAM46B,KCzHrC,IAEIggB,GACAC,GAAkB,EAClBC,GAA0B,EACxBC,GAAuB,GAE7B,SAASC,KACP,OAAO5vC,OAAO6vC,cAA4C,YAA5BA,aAAaC,WA+D7C,IAAMC,GAAiB,0FAEvB,SAASC,GAAsB7J,GAS7B,IARA,IACMvsB,GAAUusB,EADA,IAAI8J,QAAQ,EAAI9J,EAAavwC,OAAS,GAAK,IAExDX,QAAQ,KAAM,KACdA,QAAQ,KAAM,KAEXi7C,EAAUlwC,OAAO8N,KAAK8L,GACtBu2B,EAAc,IAAI/hC,WAAW8hC,EAAQt6C,QAElCQ,EAAI,EAAGA,EAAI85C,EAAQt6C,SAAUQ,EACpC+5C,EAAY/5C,GAAK85C,EAAQ75C,WAAWD,GAEtC,OAAO+5C,EACR,SAEc7iB,MAAS,gCAAA,cAUvB,OAVuB8iB,eAAxB,WAAyBC,GAAG,6BAAA,OAAA,sBAAA,OAAA,OAAA9C,SAAAA,SAEG8C,EAAIC,YAAYhjB,UAAU,CACnDijB,iBAAiB,EACjBC,qBAAsBR,GAAsBD,MAC5C,OACFU,WAAqClD,UAAA,MAAA,OAAAA,SAAAA,gBAErCxyC,QAAQonB,MAAM,oCAAkC,QAAA,UAAA,8DAInB,cAQhC,OARgCuuB,eAAjC,aAAA,QAAA,6BAAA,OAAA,sBAAA,OACkE,GAAhE31C,QAAQkF,IAAI,0BAA2Bmb,UAAUu1B,eAC5Cf,MAAkCx0B,UAAUu1B,eAAaxhB,SAAA,MAAA,0BAAW,GAAK,OAAA,OAAAA,SACxE/T,UAAUu1B,cAAc/N,MAAK,OAAA,OAAAzT,SACjB/T,UAAUu1B,cAAcC,kBAAiB,OACX,OAD1CP,UACFQ,OAAO74C,YAAY,CAACsG,IAAKouB,GAAQrD,WAAW8F,UAC9BkhB,EAAIC,YAAYQ,kBAAiB,SAA7CzuC,UACAouC,GAAuBpuC,GAAOirB,GAAU+iB,GAAK,QAAA,UAAA,iDAGrD,IAAMU,GAAiC73C,GAAW,WAChD,IAAM8T,EAAMtW,OAAOqlB,OAAO4zB,IAC1BjjB,GAAQskB,WAAWnwC,SAAQ,SAAAstB,GACzB8iB,EAAa9iB,GAAW9xB,IAAI,uBAAwB2Q,QAErD,KAMF,SAEcyjC,QAAsB,gCAAA,cAUpC,OAVoCS,eAArC,WAAsC17C,EAAG27C,GAAS,YAAA,6BAAA,OAAA,sBAAA,OAClB,gBADSA,IAAAA,GAAY,GAC7CC,EAAQ1kB,GAAQrD,SAAQwG,SACPx0B,EAAIiS,IAAIiI,OAAO67B,EAAM7+B,KAAM6+B,GAAM,OAA1C,OAARhiB,SAAQS,SACIx0B,EAAIiS,IAAIuH,QAAQrf,EAAG45B,GAAS,OAArC,OAAHnhB,SAAG4hB,UACU7F,EAAKhO,QAAQlc,KAAKC,UAAUvK,IAAG,QAA5CW,SACFg7C,GACF3nB,IAAclS,OAAOxa,IAAI,wBAAwBA,IAAI3G,GAAMkG,IAAI4R,GAEjE0hC,GAAqBx5C,GAAQX,EAC7Bu7C,KAAiC,QAAA,UAAA,iDAGG,cAQrC,OARqCM,eAAtC,aAAA,QAAA,6BAAA,OAAA,sBAAA,OACgC,OAAxBD,EAAQ1kB,GAAQrD,SAAQ4G,SACP50B,EAAIiS,IAAIiI,OAAO67B,EAAM7+B,KAAM6+B,GAAM,OAAlDhiB,SACN5F,IAAclS,OAAOxa,IAAI,wBAAwByC,MAAM9F,cAAE,kBAAC,WAAMwU,GAAG,6BAAA,OAAA,sBAAA,OAAA,GAC5DA,GAAG8hB,SAAA,MAAA,0BAAA,OAAA,OAAAA,SACQ10B,EAAIiS,IAAI4H,QAAQjH,EAAKmhB,GAAS,OAC9CqhB,WAA0B,GAAO,OAAA,UAAA,0BAClC,mBAAA,oCAAE,OAAA,UAAA,iDAGL,SAASa,GAAQh6B,GACf,OAAO,IAAI1H,SAAQ,SAAA1L,GACjBslB,IAAclS,KAAKA,GAAMxa,IAAI,QAAQrD,cAAE,kBAAC,WAAO8Y,EAAKrb,EAAEwU,EAAE9T,GAAC,6BAAA,OAAA,sBAAA,OACnD2a,IACF3a,EAAEyB,MACF6K,EAAQqO,IACT,OAAA,UAAA,0BACF,yBAAA,uCAEJ,SAEcg/B,MAAmB,gCAAA,cAWjC,OAXiCC,eAAlC,WAAmCC,GAAY,UAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAhhB,SACvBjH,IAAclS,KAAKm6B,EAAazwC,MAAMlE,IAAI,WAAW+C,OAAM,OAQpB,OAPvDkE,GADA2tC,WACmBA,EAAQ3tC,MAAS,4BAG5B,UAFR8uB,EAAQ4e,EAAa5e,OAAS4e,EAAaE,QAEZ5tC,qBAClB,UAAV8uB,EAAkC9uB,0BACxB,YAAV8uB,EAAoC9uB,iCAC1B,WAAV8uB,EAAmC9uB,2BACxBA,+BAAiC8uB,GACrC,OAAA,UAAA,iDA+ClB,SAAS+e,GAA8B1vC,GAChCA,GAIHwtC,IAA2BxtC,EAC3BwtC,GAA0Bh6C,KAAK4E,IAAIo1C,GAAyB,KAJ5DA,GAA0B,EAC1BlmB,IAAclS,OAAOxa,IAAI,yBAAyBT,KAAI,IAAIlE,MAAOuxB,gBAKnE0jB,IAAQtwC,IAAI,2BAA2BT,IAAIqzC,IAGV,cAOlC,OAPkCmC,eAAnC,WAAoCC,EAAWL,GAAY,UAAA,6BAAA,OAAA,sBAAA,OAAA,GACnDK,GAAaL,GAAYphB,SAAA,MAAA,0BAAA,OACuD,MAA1D,iBAAjBohB,IAA6BA,EAAappC,MAAO,IAAIlQ,MAAOuxB,eAAe2G,SACnEihB,GAAQQ,GAAU,OAA3B,OAAJv/B,SAAI8d,SACWh1B,EAAIiS,IAAIiI,OAAOhD,EAAMma,GAAQrD,UAAS,OAA/C,OAAN9T,SAAM8a,UACMh1B,EAAIiS,IAAIuH,QAAQ48B,EAAcl8B,GAAO,QAAjDtH,SACNub,IAAclS,OAAOxa,IAAI,iBAAiBA,IAAIg1C,GAAWz1C,IAAI4R,GAAK,QAAA,UAAA,iDAG9B,cA+BrC,OA/BqC8jC,eAAtC,WAAuCD,EAAWL,GAAY,UAAA,6BAAA,OAAA,sBAAA,OAIuC,GAHnG12C,QAAQkF,IAAI,mCAAoC6xC,EAAWL,GACrD9b,EAAUsb,EAAaa,GACvBV,EAAQ1kB,GAAQrD,SACCyoB,IAAcV,EAAM//B,KAAUskB,EAAQ+D,UAAY/D,EAAQ+D,SAASrB,WACrE1C,EAAQga,sBAAoB5e,SAAA,MAAA,8CAAA,YAAA,6BAAA,OAAA,sBAAA,OACzCihB,EAAgB,GAChB9kB,EAAex2B,OAAOU,KAAKu+B,EAAQga,sBAAqBlc,uBACrDr9B,GAAC,UAAA,6BAAA,OAAA,sBAAA,OAC2B,OAA7B04B,EAAc5B,EAAa92B,GAAEw6B,SACd+E,EAAQ/F,UAAUd,GAAY,OAAvC,OAANvZ,SAAMqb,SAEGv1B,EAAIiS,IAAIuH,QAAQ48B,EAAaQ,MAAO18B,GAAO,OAAA,OAAAqb,YAAAA,SAC5Cv1B,EAAIiS,IAAIuH,QAAQ48B,EAAa3b,KAAMvgB,GAAO,OAAAqb,YAAAA,KACjD,CAACvf,IAAK+/B,EAAM//B,IAAKkB,KAAM6+B,EAAM7+B,MAH9B2/B,GACJD,WACAnc,UACA90B,WAEF20B,EAAQga,qBAAqB7gB,GAAajuB,SAAQ,SAAArL,GAC5CA,GAAKA,EAAE28C,UACTH,EAAc36C,KAAK,CAACi9B,aAAc9+B,EAAG08C,QAAAA,OAEtC,QAAA,UAAA,yBAZI97C,EAAI,EAAC,OAAA,KAAEA,EAAI82B,EAAat3B,SAAMi7B,SAAA,MAAA,yBAA9Bz6B,WAAC,OAA+BA,IAAGy6B,SAAA,MAAA,OAAA,GAcf,IAAzBmhB,EAAcp8C,QAAYi7B,UAAA,MAAA,0BAAAn3B,WAAA,QAC9B2pC,MAhQ6B,kDAgQG,CAC9B+O,OAAQ,OACRtc,KAAMh2B,KAAKC,UAAU,CAACiyC,cAAAA,IACtBK,QAAS,CACPC,eAAgB,6BAEX,eAAU,QAAA,UAAA,mCAAA,OAAA,oBAAAC,SAAAxhB,SAAA,MAAA,8BAAA,OAAA,UAAA,wDASR,CAAC/K,KALhB,WACEwpB,GAAY,IAAIr3C,KAChBs3C,GAAkB,GAGE+C,UApQtB,SAAmBz2C,EAAKmT,EAAMif,EAAWskB,GACvC,SAASC,IACP,GAAI32C,EAAI42C,QAAUnD,GAAa,OAAO,EACtC,GAAItgC,EAAKmiB,aAAgB,OAAO,EAChC,GAAiC,YAA7BnoB,SAAS0pC,gBAAiC,OAAO,EACrD,IAAMjd,EAAUsb,EAAa9iB,GAC7B,MAAoC,YAAhCwH,EAAQkd,uBACwB,aAAhCld,EAAQkd,sBAAuC92C,EAAImL,KAAK8T,SAAS0R,GAAQomB,cAa/E,GALSJ,IAJF9C,MACE8C,IAQkB,CACzB,IAAI5c,EAAMmc,EACJtc,EAAUsb,EAAa9iB,GACzBwH,EAAQ10B,MACVgxC,EAAQtc,EAAQod,oBAAoB7jC,EAAKlO,MAAM+C,KAC/C+xB,EAAU/xB,UAAShI,EAAImL,OAEvB+qC,EAAQ,UACRnc,EAAO/5B,EAAImL,MAEb4uB,EAAO9L,EAAKxK,eAAesW,EAAM,IACP,IAAI+Z,aAAaoC,EAAO,CAChDe,KAAM,0BACNld,KAAAA,EACAmd,QAAQ,IAEUC,QAAU,WAC5BtB,IAA+B,GAC/Ba,GAAWA,IACXzyC,OAAOgd,WA6NoBu0B,oBAAAA,GAAqB4B,wBAxCrD,cAEqC,iCAsCyCvB,8BAAAA,GAA+BwB,6BAtG9G,SAAsCX,GACpC,IAAIY,EACAC,EACJ9pB,IAAclS,OAAOxa,IAAI,yBAAyBrD,IAAG,SAAAC,GACnD25C,EAAwB35C,EACxBqB,QAAQkF,IAAIvG,MAEd8vB,IAAclS,OAAOxa,IAAI,0BAA0BrD,IAAG,SAAAC,GAAC,OAAI45C,EAAyB55C,KACpF,IAAM65C,EAA4Br6C,GAAW,WAC3CswB,IAAclS,OAAOxa,IAAI,0BAA0BT,KAAI,IAAIlE,MAAOuxB,iBACjE,KACG8pB,EAAc,IAAItG,IACxBuG,KAAQh6C,oBAAoBizB,GAAQgnB,uBAAW,kBAAI,WAAOC,EAAuBz8C,EAAGwU,EAAG9T,EAAGoJ,GAAI,cAAA,6BAAA,OAAA,sBAAA,OAC3B,GAAzDxG,EAAKwG,EAAKvM,MAAM,EAAE,IAAMk/C,EAAsBl/C,MAAM,EAAE,KACxD++C,EAAY/8C,IAAI+D,IAAGizC,SAAA,MAAA,0BAAA,OACH,OAApB+F,EAAYhwC,IAAIhJ,GAAIizC,SACD6D,GAAQtwC,GAAK,OAAtB,OAAJuR,SAAIk7B,SACWpyC,EAAIiS,IAAIiI,OAAOhD,EAAMma,GAAQrD,UAAS,OAA/C,OAAN9T,SAAMk4B,UACepyC,EAAIiS,IAAI4H,QAAQy+B,EAAuBp+B,GAAO,QAAvD,IAAZk8B,WACuC,iBAAjBA,GAAyBhE,UAAA,MAAA,0BAAA,QAMpD,GALD8F,IACA9B,EAAazwC,KAAOA,EACpBosC,IAAQtwC,IAAI,iBAAiBA,IAAI20C,EAAappC,MAAMhM,IAAIo1C,KACnD4B,GAA0BA,EAAwB5B,EAAappC,OAClEupC,GAA8B,GAE3B0B,KAA0BA,EAAyB7B,EAAappC,OAAIolC,UAAA,MAC/C,OAAxB1yC,QAAQkF,IAAI,YAAYwtC,UACL8D,GAAoBE,GAAa,QAA9CvqC,SACoB,IAAI2oC,aAAa3oC,EAAM,CAC/C8rC,KAAM,0BACNld,KAAM5uB,EACN+rC,QAAQ,IAEUC,QAAU,WAE5BT,GAAWA,EADEhB,EAAazpB,gBAAkBypB,EAAazpB,mBAAuBypB,EAAazwC,MAE7F4wC,IAA+B,GAC/B5xC,OAAOgd,SACP,QAAA,UAAA,0BAEL,2BAAA,qCA6DuI42B,qBAjD3I,cAEkC,iCA+C+HC,sBAxNlK,SAAmCljB,EAAQzuB,GACzC,IAAM4xC,EAAO7C,EAAatgB,GAC1B,GAAKmjB,EAAL,CACA,IAAMC,EAAW3G,IAAQtwC,IAAI,YAAYA,IAAI6zB,GACzCzuB,GACFutC,IAAmBvtC,EACnB4xC,EAAKE,QAAU9xC,IAEfutC,IAAqCqE,EAAKE,QAAU,EACpDF,EAAKE,OAAS,GAEhBD,EAASj3C,IAAI,UAAUT,IAAIy3C,EAAKE,QAChCvE,GAAkBA,IAAmB,EAAIA,GAAkB,EAC3DrC,IAAQtwC,IAAI,mBAAmBT,IAAIozC,MA2M+KE,qBAAAA,GAAsBsE,mBA7KzO,WAEgC,iCA2K6NC,wBA1I7P,WAEqC,iCAwIiPC,mBA1JvR,SAA4Bh+C,UACnBw5C,GAAqBx5C,GAC5BqzB,IAAclS,OAAOxa,IAAI,wBAAwBA,IAAI3G,GAAMkG,IAAI,MAC/D00C,OC3HF,SAASvhC,GAAQyK,GACf,OAAQrZ,MAAM4O,QAEV5O,MAAM4O,QAAQyK,GADI,mBAAlBm6B,GAAOn6B,GAmBb,SAASo6B,GAASp6B,GAChB,MAAwB,iBAAVA,EAGhB,SAASq6B,GAASr6B,GAChB,MAAwB,iBAAVA,EAYhB,SAASs6B,GAASt6B,GAChB,MAAwB,iBAAVA,EAQhB,SAASu6B,GAAUv6B,GACjB,OAAOA,MAAAA,EAGT,SAASw6B,GAAQx6B,GACf,OAAQA,EAAM4G,OAAOjrB,OAKvB,SAASw+C,GAAOn6B,GACd,OAAgB,MAATA,OACO0B,IAAV1B,EACE,qBACA,gBACFvjB,OAAOC,UAAU3B,SAAS+B,KAAKkjB,GAGrC,MAeMy6B,GAASh+C,OAAOC,UAAUC,eAEhC,MAAM+9C,GACJlmC,YAAYrX,GACV6B,KAAK27C,MAAQ,GACb37C,KAAK47C,QAAU,GAEf,IAAIC,EAAc,EAElB19C,EAAKyJ,QAASvC,IACZ,IAAI+M,EAAM0pC,GAAUz2C,GAEpBw2C,GAAezpC,EAAI2pC,OAEnB/7C,KAAK27C,MAAMv9C,KAAKgU,GAChBpS,KAAK47C,QAAQxpC,EAAI7Q,IAAM6Q,EAEvBypC,GAAezpC,EAAI2pC,SAIrB/7C,KAAK27C,MAAM/zC,QAASvC,IAClBA,EAAI02C,QAAUF,IAGlBrmC,IAAIwmC,GACF,OAAOh8C,KAAK47C,QAAQI,GAEtBxmC,OACE,OAAOxV,KAAK27C,MAEdnmC,SACE,OAAO3O,KAAKC,UAAU9G,KAAK27C,QAI/B,SAASG,GAAUz2C,GACjB,IAAI1J,EAAO,KACP4F,EAAK,KACL06C,EAAM,KACNF,EAAS,EACTG,EAAQ,KAEZ,GAAId,GAAS/1C,IAAQkR,GAAQlR,GAC3B42C,EAAM52C,EACN1J,EAAOwgD,GAAc92C,GACrB9D,EAAK66C,GAAY/2C,OACZ,CACL,IAAKo2C,GAAO39C,KAAKuH,EAAK,QACpB,MAAM,IAAI8d,MAtDuB,gCAyDnC,MAAMrY,EAAOzF,EAAIyF,KAGjB,GAFAmxC,EAAMnxC,EAEF2wC,GAAO39C,KAAKuH,EAAK,YACnB02C,EAAS12C,EAAI02C,OAETA,GAAU,GACZ,MAAM,IAAI54B,MA9De,CAAC9d,GAChC,6BAA6BA,gCA6DPg3C,CAAyBvxC,IAI7CnP,EAAOwgD,GAAcrxC,GACrBvJ,EAAK66C,GAAYtxC,GACjBoxC,EAAQ72C,EAAI62C,MAGd,MAAO,CAAEvgD,KAAAA,EAAM4F,GAAAA,EAAIw6C,OAAAA,EAAQE,IAAAA,EAAKC,MAAAA,GAGlC,SAASC,GAAc92C,GACrB,OAAOkR,GAAQlR,GAAOA,EAAMA,EAAIvJ,MAAM,KAGxC,SAASsgD,GAAY/2C,GACnB,OAAOkR,GAAQlR,GAAOA,EAAI8C,KAAK,KAAO9C,EA4GxC,IAAIi3C,GAAS,CA5CXC,iBAAiB,EAEjBC,cAAc,EAEdr+C,KAAM,GAENs+C,YAAY,EAEZC,OAAQ,CAACryC,EAAGoH,IACVpH,EAAEsyC,QAAUlrC,EAAEkrC,MAAStyC,EAAEuyC,IAAMnrC,EAAEmrC,KAAO,EAAI,EAAKvyC,EAAEsyC,MAAQlrC,EAAEkrC,OAAS,EAAI,EApB5EE,gBAAgB,EAGhBC,gBAAgB,EAEhBC,mBAAoB,EAoBpBzoC,SAAU,EAGV0oC,UAAW,GAMXC,SAAU,IAKVC,mBAAmB,EAGnBhB,MA5FF,SAAa9pC,EAAKzW,GAChB,IAAImW,EAAO,GACPiC,GAAM,EAEV,MAAMopC,EAAU,CAAC/qC,EAAKzW,EAAMwW,KAC1B,GAAKopC,GAAUnpC,GAGf,GAAKzW,EAAKwW,GAGH,CAGL,MAAM6O,EAAQ5O,EAFJzW,EAAKwW,IAIf,IAAKopC,GAAUv6B,GACb,OAKF,GACE7O,IAAUxW,EAAKgB,OAAS,IACvBy+C,GAASp6B,IAAUq6B,GAASr6B,IAzJrC,SAAmBA,GACjB,OACY,IAAVA,IACU,IAAVA,GAUJ,SAAsBA,GACpB,OAAOs6B,GAASt6B,IAAoB,OAAVA,EAVvBo8B,CAAap8B,IAA2B,oBAAjBm6B,GAAOn6B,GAqJYq8B,CAAUr8B,IAEjDlP,EAAK1T,KAxKb,SAAkB4iB,GAChB,OAAgB,MAATA,EAAgB,GAVzB,SAAsBA,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,IAAIyC,EAASzC,EAAQ,GACrB,MAAiB,KAAVyC,GAAiB,EAAIzC,IAPb,EAAI,EAO8B,KAAOyC,EAI5B65B,CAAat8B,GAuKzBjlB,CAASilB,SACd,GAAIzK,GAAQyK,GAAQ,CACzBjN,GAAM,EAEN,IAAK,IAAI5W,EAAI,EAAGga,EAAM6J,EAAMrkB,OAAQQ,EAAIga,EAAKha,GAAK,EAChDggD,EAAQn8B,EAAM7jB,GAAIxB,EAAMwW,EAAQ,QAEzBxW,EAAKgB,QAEdwgD,EAAQn8B,EAAOrlB,EAAMwW,EAAQ,QAzB/BL,EAAK1T,KAAKgU,IAiCd,OAFA+qC,EAAQ/qC,EAAKgpC,GAASz/C,GAAQA,EAAKG,MAAM,KAAOH,EAAM,GAE/CoY,EAAMjC,EAAOA,EAAK,IAqDzByrC,gBAAgB,EAIhBC,iBAAiB,EAEjBC,gBAAiB,GAUnB,MAAMC,GAAQ,SAgCd,MAAMC,GACJnoC,aAAY0mC,MACVA,EAAQI,GAAOJ,MAAKuB,gBACpBA,EAAkBnB,GAAOmB,iBACvB,IACFz9C,KAAK49C,KAjCT,SAAc7B,EAAS,EAAG8B,EAAW,GACnC,MAAM/zC,EAAQ,IAAI63B,IACZ50B,EAAItQ,KAAKqhD,IAAI,GAAID,GAEvB,MAAO,CACLroC,IAAIwL,GACF,MAAM+8B,EAAY/8B,EAAMpkB,MAAM8gD,IAAO/gD,OAErC,GAAImN,EAAMtM,IAAIugD,GACZ,OAAOj0C,EAAMjG,IAAIk6C,GAInB,MAAMH,EAAO,EAAInhD,KAAKqhD,IAAIC,EAAW,GAAMhC,GAGrC/9C,EAAI6T,WAAWpV,KAAKypB,MAAM03B,EAAO7wC,GAAKA,GAI5C,OAFAjD,EAAM4B,IAAIqyC,EAAW//C,GAEdA,GAETwX,QACE1L,EAAMyhC,UAUIqS,CAAKH,EAAiB,GAClCz9C,KAAKk8C,MAAQA,EACbl8C,KAAKg+C,WAAY,EAEjBh+C,KAAKi+C,kBAEPzoC,WAAW0oC,EAAO,IAChBl+C,KAAKk+C,KAAOA,EAEd1oC,gBAAgB2oC,EAAU,IACxBn+C,KAAKm+C,QAAUA,EAEjB3oC,QAAQrX,EAAO,IACb6B,KAAK7B,KAAOA,EACZ6B,KAAKo+C,SAAW,GAChBjgD,EAAKyJ,QAAQ,CAACvC,EAAKu3C,KACjB58C,KAAKo+C,SAAS/4C,EAAI9D,IAAMq7C,IAG5BpnC,UACMxV,KAAKg+C,WAAch+C,KAAKk+C,KAAKvhD,SAIjCqD,KAAKg+C,WAAY,EAGb5C,GAASp7C,KAAKk+C,KAAK,IACrBl+C,KAAKk+C,KAAKt2C,QAAQ,CAACoI,EAAKquC,KACtBr+C,KAAKs+C,WAAWtuC,EAAKquC,KAIvBr+C,KAAKk+C,KAAKt2C,QAAQ,CAACoI,EAAKquC,KACtBr+C,KAAKu+C,WAAWvuC,EAAKquC,KAIzBr+C,KAAK49C,KAAKrS,SAGZ/1B,IAAIxF,GACF,MAAM4sC,EAAM58C,KAAKiR,OAEbmqC,GAASprC,GACXhQ,KAAKs+C,WAAWtuC,EAAK4sC,GAErB58C,KAAKu+C,WAAWvuC,EAAK4sC,GAIzBpnC,SAASonC,GACP58C,KAAKm+C,QAAQx+C,OAAOi9C,EAAK,GAGzB,IAAK,IAAIz/C,EAAIy/C,EAAKzlC,EAAMnX,KAAKiR,OAAQ9T,EAAIga,EAAKha,GAAK,EACjD6C,KAAKm+C,QAAQhhD,GAAGA,GAAK,EAGzBqY,uBAAuB7J,EAAMqwC,GAC3B,OAAOrwC,EAAK3L,KAAKo+C,SAASpC,IAE5BxmC,OACE,OAAOxV,KAAKm+C,QAAQxhD,OAEtB6Y,WAAWxF,EAAKquC,GACd,IAAK9C,GAAUvrC,IAAQwrC,GAAQxrC,GAC7B,OAGF,IAAIwuC,EAAS,CACX/9C,EAAGuP,EACH7S,EAAGkhD,EACHrgD,EAAGgC,KAAK49C,KAAK/5C,IAAImM,IAGnBhQ,KAAKm+C,QAAQ//C,KAAKogD,GAEpBhpC,WAAWxF,EAAKquC,GACd,IAAIG,EAAS,CAAErhD,EAAGkhD,EAAUh8C,EAAG,IAG/BrC,KAAK7B,KAAKyJ,QAAQ,CAACvC,EAAKo5C,KACtB,IAAIz9B,EAAQ3b,EAAI62C,MAAQ72C,EAAI62C,MAAMlsC,GAAOhQ,KAAKk8C,MAAMlsC,EAAK3K,EAAI1J,MAE7D,GAAK4/C,GAAUv6B,GAIf,GAAIzK,GAAQyK,GAAQ,CAClB,IAAI09B,EAAa,GACjB,MAAMC,EAAQ,CAAC,CAAEC,gBAAiB,EAAG59B,MAAAA,IAErC,KAAO29B,EAAMhiD,QAAQ,CACnB,MAAMiiD,eAAEA,EAAc59B,MAAEA,GAAU29B,EAAM15C,MAExC,GAAKs2C,GAAUv6B,GAIf,GAAIo6B,GAASp6B,KAAWw6B,GAAQx6B,GAAQ,CACtC,IAAI69B,EAAY,CACdp+C,EAAGugB,EACH7jB,EAAGyhD,EACH5gD,EAAGgC,KAAK49C,KAAK/5C,IAAImd,IAGnB09B,EAAWtgD,KAAKygD,QACPtoC,GAAQyK,IACjBA,EAAMpZ,QAAQ,CAAC+D,EAAM1N,KACnB0gD,EAAMvgD,KAAK,CACTwgD,eAAgB3gD,EAChB+iB,MAAOrV,MAKf6yC,EAAOn8C,EAAEo8C,GAAYC,OAChB,GAAItD,GAASp6B,KAAWw6B,GAAQx6B,GAAQ,CAC7C,IAAI69B,EAAY,CACdp+C,EAAGugB,EACHhjB,EAAGgC,KAAK49C,KAAK/5C,IAAImd,IAGnBw9B,EAAOn8C,EAAEo8C,GAAYI,KAIzB7+C,KAAKm+C,QAAQ//C,KAAKogD,GAEpBhpC,SACE,MAAO,CACLrX,KAAM6B,KAAK7B,KACXggD,QAASn+C,KAAKm+C,UAKpB,SAASW,GACP3gD,EACA+/C,GACAhC,MAAEA,EAAQI,GAAOJ,MAAKuB,gBAAEA,EAAkBnB,GAAOmB,iBAAoB,IAErE,MAAMsB,EAAU,IAAIpB,GAAU,CAAEzB,MAAAA,EAAOuB,gBAAAA,IAIvC,OAHAsB,EAAQC,QAAQ7gD,EAAKmI,IAAIw1C,KACzBiD,EAAQE,WAAWf,GACnBa,EAAQz8C,SACDy8C,EAcT,SAASG,GACPC,GACAC,OACEA,EAAS,EAACC,gBACVA,EAAkB,EAACC,iBACnBA,EAAmB,EAACrC,SACpBA,EAAWX,GAAOW,SAAQM,eAC1BA,EAAiBjB,GAAOiB,gBACtB,IAEJ,MAAMgC,EAAWH,EAASD,EAAQxiD,OAElC,GAAI4gD,EACF,OAAOgC,EAGT,MAAMC,EAAY/iD,KAAKgjD,IAAIH,EAAmBD,GAE9C,OAAKpC,EAKEsC,EAAWC,EAAYvC,EAHrBuC,EAAY,EAAMD,EA8N7B,SAASG,GAAsBP,GAC7B,IAAIQ,EAAO,GAEX,IAAK,IAAIxiD,EAAI,EAAGga,EAAMgoC,EAAQxiD,OAAQQ,EAAIga,EAAKha,GAAK,EAAG,CACrD,MAAMyiD,EAAOT,EAAQ3iD,OAAOW,GAC5BwiD,EAAKC,IAASD,EAAKC,IAAS,GAAM,GAAMzoC,EAAMha,EAAI,EAGpD,OAAOwiD,EAGT,MAAME,GACJrqC,YACE2pC,GACA7qC,SACEA,EAAWgoC,GAAOhoC,SAAQ0oC,UAC1BA,EAAYV,GAAOU,UAASC,SAC5BA,EAAWX,GAAOW,SAAQJ,eAC1BA,EAAiBP,GAAOO,eAAcC,eACtCA,EAAiBR,GAAOQ,eAAcC,mBACtCA,EAAqBT,GAAOS,mBAAkBR,gBAC9CA,EAAkBD,GAAOC,gBAAegB,eACxCA,EAAiBjB,GAAOiB,gBACtB,IAiBJ,GAfAv9C,KAAK6zB,QAAU,CACbvf,SAAAA,EACA0oC,UAAAA,EACAC,SAAAA,EACAJ,eAAAA,EACAC,eAAAA,EACAC,mBAAAA,EACAR,gBAAAA,EACAgB,eAAAA,GAGFv9C,KAAKm/C,QAAU5C,EAAkB4C,EAAUA,EAAQ3lC,cAEnDxZ,KAAKmsB,OAAS,IAETnsB,KAAKm/C,QAAQxiD,OAChB,OAGF,MAAMmjD,EAAW,CAACX,EAASY,KACzB//C,KAAKmsB,OAAO/tB,KAAK,CACf+gD,QAAAA,EACAa,SAAUN,GAAsBP,GAChCY,WAAAA,KAIE5oC,EAAMnX,KAAKm/C,QAAQxiD,OAEzB,GAAIwa,EA/OS,GA+OO,CAClB,IAAIha,EAAI,EACR,MAAM8iD,EAAY9oC,EAjPP,GAkPLzQ,EAAMyQ,EAAM8oC,EAElB,KAAO9iD,EAAIuJ,GACTo5C,EAAS9/C,KAAKm/C,QAAQp4B,OAAO5pB,EArPpB,IAqPkCA,GAC3CA,GAtPS,GAyPX,GAAI8iD,EAAW,CACb,MAAMF,EAAa5oC,EA1PV,GA2PT2oC,EAAS9/C,KAAKm/C,QAAQp4B,OAAOg5B,GAAaA,SAG5CD,EAAS9/C,KAAKm/C,QAAS,GAI3B3pC,SAASvH,GACP,MAAMsuC,gBAAEA,EAAeM,eAAEA,GAAmB78C,KAAK6zB,QAOjD,GALK0oB,IACHtuC,EAAOA,EAAKuL,eAIVxZ,KAAKm/C,UAAYlxC,EAAM,CACzB,IAAIwV,EAAS,CACXy8B,SAAS,EACTvD,MAAO,GAOT,OAJIE,IACFp5B,EAAO08B,QAAU,CAAC,CAAC,EAAGlyC,EAAKtR,OAAS,KAG/B8mB,EAIT,MAAMnP,SACJA,EAAQ2oC,SACRA,EAAQD,UACRA,EAASF,eACTA,EAAcC,mBACdA,EAAkBQ,eAClBA,GACEv9C,KAAK6zB,QAET,IAAIusB,EAAa,GACbC,EAAa,EACbC,GAAa,EAEjBtgD,KAAKmsB,OAAOvkB,QAAQ,EAAGu3C,QAAAA,EAASa,SAAAA,EAAUD,WAAAA,MACxC,MAAMG,QAAEA,EAAOvD,MAAEA,EAAKwD,QAAEA,GApS9B,SACElyC,EACAkxC,EACAoB,GACAjsC,SACEA,EAAWgoC,GAAOhoC,SAAQ2oC,SAC1BA,EAAWX,GAAOW,SAAQD,UAC1BA,EAAYV,GAAOU,UAASF,eAC5BA,EAAiBR,GAAOQ,eAAcC,mBACtCA,EAAqBT,GAAOS,mBAAkBF,eAC9CA,EAAiBP,GAAOO,eAAcU,eACtCA,EAAiBjB,GAAOiB,gBACtB,IAEJ,GAAI4B,EAAQxiD,OAhBG,GAiBb,MAAM,IAAIwmB,MAtdZ,qCAydA,MAAMq9B,EAAarB,EAAQxiD,OAErB8jD,EAAUxyC,EAAKtR,OAEf2iD,EAAmB7iD,KAAK4E,IAAI,EAAG5E,KAAK8qB,IAAIjT,EAAUmsC,IAExD,IAAIC,EAAmB1D,EAEnB2D,EAAerB,EAInB,MAAMsB,EAAiB7D,EAAqB,GAAKF,EAE3CgE,EAAYD,EAAiBj5C,MAAM84C,GAAW,GAEpD,IAAItuC,EAGJ,MAAQA,EAAQlE,EAAK/P,QAAQihD,EAASwB,KAAkB,GAAG,CACzD,IAAIhE,EAAQuC,GAAeC,EAAS,CAClCE,gBAAiBltC,EACjBmtC,iBAAAA,EACArC,SAAAA,EACAM,eAAAA,IAMF,GAHAmD,EAAmBjkD,KAAK8qB,IAAIo1B,EAAO+D,GACnCC,EAAexuC,EAAQquC,EAEnBI,EAAgB,CAClB,IAAIzjD,EAAI,EACR,KAAOA,EAAIqjD,GACTK,EAAU1uC,EAAQhV,GAAK,EACvBA,GAAK,GAMXwjD,GAAgB,EAEhB,IAAIG,EAAa,GACbC,EAAa,EACbC,EAASR,EAAaC,EAE1B,MAAMd,EAAO,GAAMa,EAAa,EAEhC,IAAK,IAAIrjD,EAAI,EAAGA,EAAIqjD,EAAYrjD,GAAK,EAAG,CAItC,IAAI8jD,EAAS,EACTC,EAASF,EAEb,KAAOC,EAASC,GACAhC,GAAeC,EAAS,CACpCC,OAAQjiD,EACRkiD,gBAAiBC,EAAmB4B,EACpC5B,iBAAAA,EACArC,SAAAA,EACAM,eAAAA,KAGWmD,EACXO,EAASC,EAETF,EAASE,EAGXA,EAASzkD,KAAKC,OAAOskD,EAASC,GAAU,EAAIA,GAI9CD,EAASE,EAET,IAAIjsC,EAAQxY,KAAK4E,IAAI,EAAGi+C,EAAmB4B,EAAS,GAChDC,EAASrE,EACT2D,EACAhkD,KAAK8qB,IAAI+3B,EAAmB4B,EAAQT,GAAWD,EAG/CY,EAASz5C,MAAMw5C,EAAS,GAE5BC,EAAOD,EAAS,IAAM,GAAKhkD,GAAK,EAEhC,IAAK,IAAI6qB,EAAIm5B,EAAQn5B,GAAK/S,EAAO+S,GAAK,EAAG,CACvC,IAAIq3B,EAAkBr3B,EAAI,EACtBq5B,EAAYd,EAAgBtyC,EAAKzR,OAAO6iD,IAgB5C,GAdIuB,IAEFC,EAAUxB,MAAsBgC,GAIlCD,EAAOp5B,IAAOo5B,EAAOp5B,EAAI,IAAM,EAAK,GAAKq5B,EAGrClkD,IACFikD,EAAOp5B,KACH84B,EAAW94B,EAAI,GAAK84B,EAAW94B,KAAO,EAAK,EAAI84B,EAAW94B,EAAI,IAGhEo5B,EAAOp5B,GAAK23B,IACdoB,EAAa7B,GAAeC,EAAS,CACnCC,OAAQjiD,EACRkiD,gBAAAA,EACAC,iBAAAA,EACArC,SAAAA,EACAM,eAAAA,IAKEwD,GAAcL,GAAkB,CAMlC,GAJAA,EAAmBK,EACnBJ,EAAetB,EAGXsB,GAAgBrB,EAClB,MAIFrqC,EAAQxY,KAAK4E,IAAI,EAAG,EAAIi+C,EAAmBqB,IAcjD,GARczB,GAAeC,EAAS,CACpCC,OAAQjiD,EAAI,EACZkiD,gBAAiBC,EACjBA,iBAAAA,EACArC,SAAAA,EACAM,eAAAA,IAGUmD,EACV,MAGFI,EAAaM,EAGf,MAAM39B,EAAS,CACby8B,QAASS,GAAgB,EAEzBhE,MAAOlgD,KAAK4E,IAAI,KAAO0/C,IAGzB,GAAIH,EAAgB,CAClB,MAAMT,EA7MV,SACEmB,EAAY,GACZvE,EAAqBT,GAAOS,oBAE5B,IAAIoD,EAAU,GACVlrC,GAAS,EACTvO,GAAO,EACPvJ,EAAI,EAER,IAAK,IAAIga,EAAMmqC,EAAU3kD,OAAQQ,EAAIga,EAAKha,GAAK,EAAG,CAChD,IAAIP,EAAQ0kD,EAAUnkD,GAClBP,IAAoB,IAAXqY,EACXA,EAAQ9X,EACEP,IAAoB,IAAXqY,IACnBvO,EAAMvJ,EAAI,EACNuJ,EAAMuO,EAAQ,GAAK8nC,GACrBoD,EAAQ/hD,KAAK,CAAC6W,EAAOvO,IAEvBuO,GAAS,GASb,OAJIqsC,EAAUnkD,EAAI,IAAMA,EAAI8X,GAAS8nC,GACnCoD,EAAQ/hD,KAAK,CAAC6W,EAAO9X,EAAI,IAGpBgjD,EAkLWoB,CAAqBV,EAAW9D,GAC3CoD,EAAQxjD,OAEFkgD,IACTp5B,EAAO08B,QAAUA,GAFjB18B,EAAOy8B,SAAU,EAMrB,OAAOz8B,EAgHiC2B,CAAOnX,EAAMkxC,EAASa,EAAU,CAClE1rC,SAAUA,EAAWyrC,EACrB9C,SAAAA,EACAD,UAAAA,EACAF,eAAAA,EACAC,mBAAAA,EACAF,eAAAA,EACAU,eAAAA,IAGE2C,IACFI,GAAa,GAGfD,GAAc1D,EAEVuD,GAAWC,IACbC,EAAa,IAAIA,KAAeD,MAIpC,IAAI18B,EAAS,CACXy8B,QAASI,EACT3D,MAAO2D,EAAaD,EAAargD,KAAKmsB,OAAOxvB,OAAS,GAOxD,OAJI2jD,GAAczD,IAChBp5B,EAAO08B,QAAUC,GAGZ38B,GAIX,MAAM+9B,GACJhsC,YAAY2pC,GACVn/C,KAAKm/C,QAAUA,EAEjB3pC,oBAAoB2pC,GAClB,OAAOsC,GAAStC,EAASn/C,KAAK0hD,YAEhClsC,qBAAqB2pC,GACnB,OAAOsC,GAAStC,EAASn/C,KAAK2hD,aAEhCnsC,WAGF,SAASisC,GAAStC,EAASyC,GACzB,MAAMC,EAAU1C,EAAQviD,MAAMglD,GAC9B,OAAOC,EAAUA,EAAQ,GAAK,KA+JhC,MAAMC,WAAmBN,GACvBhsC,YACE2pC,GACA7qC,SACEA,EAAWgoC,GAAOhoC,SAAQ0oC,UAC1BA,EAAYV,GAAOU,UAASC,SAC5BA,EAAWX,GAAOW,SAAQJ,eAC1BA,EAAiBP,GAAOO,eAAcC,eACtCA,EAAiBR,GAAOQ,eAAcC,mBACtCA,EAAqBT,GAAOS,mBAAkBR,gBAC9CA,EAAkBD,GAAOC,gBAAegB,eACxCA,EAAiBjB,GAAOiB,gBACtB,IAEJtzC,MAAMk1C,GACNn/C,KAAK+hD,aAAe,IAAIlC,GAAYV,EAAS,CAC3C7qC,SAAAA,EACA0oC,UAAAA,EACAC,SAAAA,EACAJ,eAAAA,EACAC,eAAAA,EACAC,mBAAAA,EACAR,gBAAAA,EACAgB,eAAAA,IAGJ/2B,kBACE,MAAO,QAETk7B,wBACE,MAAO,WAETC,yBACE,MAAO,SAETnsC,OAAOvH,GACL,OAAOjO,KAAK+hD,aAAaC,SAAS/zC,IAMtC,MAAMg0C,WAAqBT,GACzBhsC,YAAY2pC,GACVl1C,MAAMk1C,GAER34B,kBACE,MAAO,UAETk7B,wBACE,MAAO,YAETC,yBACE,MAAO,UAETnsC,OAAOvH,GACL,IACIkE,EADAmC,EAAW,EAGf,MAAM6rC,EAAU,GACVK,EAAaxgD,KAAKm/C,QAAQxiD,OAGhC,MAAQwV,EAAQlE,EAAK/P,QAAQ8B,KAAKm/C,QAAS7qC,KAAc,GACvDA,EAAWnC,EAAQquC,EACnBL,EAAQ/hD,KAAK,CAAC+T,EAAOmC,EAAW,IAGlC,MAAM4rC,IAAYC,EAAQxjD,OAE1B,MAAO,CACLujD,QAAAA,EACAvD,MAAOuD,EAAU,EAAI,EACrBC,QAAAA,IAMN,MAAM+B,GAAY,CAzOlB,cAAyBV,GACvBhsC,YAAY2pC,GACVl1C,MAAMk1C,GAER34B,kBACE,MAAO,QAETk7B,wBACE,MAAO,YAETC,yBACE,MAAO,UAETnsC,OAAOvH,GACL,MAAMiyC,EAAUjyC,IAASjO,KAAKm/C,QAE9B,MAAO,CACLe,QAAAA,EACAvD,MAAOuD,EAAU,EAAI,EACrBC,QAAS,CAAC,EAAGngD,KAAKm/C,QAAQxiD,OAAS,MAwNvCslD,GAtLF,cAA+BT,GAC7BhsC,YAAY2pC,GACVl1C,MAAMk1C,GAER34B,kBACE,MAAO,eAETk7B,wBACE,MAAO,aAETC,yBACE,MAAO,WAETnsC,OAAOvH,GACL,MAAMiyC,EAAUjyC,EAAK6hB,WAAW9vB,KAAKm/C,SAErC,MAAO,CACLe,QAAAA,EACAvD,MAAOuD,EAAU,EAAI,EACrBC,QAAS,CAAC,EAAGngD,KAAKm/C,QAAQxiD,OAAS,MAOzC,cAAsC6kD,GACpChsC,YAAY2pC,GACVl1C,MAAMk1C,GAER34B,kBACE,MAAO,uBAETk7B,wBACE,MAAO,cAETC,yBACE,MAAO,YAETnsC,OAAOvH,GACL,MAAMiyC,GAAWjyC,EAAK6hB,WAAW9vB,KAAKm/C,SAEtC,MAAO,CACLe,QAAAA,EACAvD,MAAOuD,EAAU,EAAI,EACrBC,QAAS,CAAC,EAAGlyC,EAAKtR,OAAS,MAiCjC,cAAsC6kD,GACpChsC,YAAY2pC,GACVl1C,MAAMk1C,GAER34B,kBACE,MAAO,uBAETk7B,wBACE,MAAO,cAETC,yBACE,MAAO,YAETnsC,OAAOvH,GACL,MAAMiyC,GAAWjyC,EAAK8hB,SAAS/vB,KAAKm/C,SACpC,MAAO,CACLe,QAAAA,EACAvD,MAAOuD,EAAU,EAAI,EACrBC,QAAS,CAAC,EAAGlyC,EAAKtR,OAAS,MA5CjC,cAA+B6kD,GAC7BhsC,YAAY2pC,GACVl1C,MAAMk1C,GAER34B,kBACE,MAAO,eAETk7B,wBACE,MAAO,aAETC,yBACE,MAAO,WAETnsC,OAAOvH,GACL,MAAMiyC,EAAUjyC,EAAK8hB,SAAS/vB,KAAKm/C,SAEnC,MAAO,CACLe,QAAAA,EACAvD,MAAOuD,EAAU,EAAI,EACrBC,QAAS,CAAClyC,EAAKtR,OAASqD,KAAKm/C,QAAQxiD,OAAQsR,EAAKtR,OAAS,MAlGjE,cAAgC6kD,GAC9BhsC,YAAY2pC,GACVl1C,MAAMk1C,GAER34B,kBACE,MAAO,gBAETk7B,wBACE,MAAO,YAETC,yBACE,MAAO,UAETnsC,OAAOvH,GACL,MACMiyC,GAAqB,IADbjyC,EAAK/P,QAAQ8B,KAAKm/C,SAGhC,MAAO,CACLe,QAAAA,EACAvD,MAAOuD,EAAU,EAAI,EACrBC,QAAS,CAAC,EAAGlyC,EAAKtR,OAAS,MAmM/BmlD,IAGIK,GAAeD,GAAUvlD,OAGzBylD,GAAW,qCAmDXC,GAAgB,IAAIpO,IAAI,CAAC6N,GAAWt7B,KAAMy7B,GAAaz7B,OAyIvD87B,GAAsB,GAM5B,SAASC,GAAepD,EAAStrB,GAC/B,IAAK,IAAI12B,EAAI,EAAGga,EAAMmrC,GAAoB3lD,OAAQQ,EAAIga,EAAKha,GAAK,EAAG,CACjE,IAAIqlD,EAAgBF,GAAoBnlD,GACxC,GAAIqlD,EAAcC,UAAUtD,EAAStrB,GACnC,OAAO,IAAI2uB,EAAcrD,EAAStrB,GAItC,OAAO,IAAIgsB,GAAYV,EAAStrB,GAGlC,MAUM6uB,GAAgBC,MACjBA,EAAyB,OAAKA,EAAwB,KAOrDC,GAAqBD,KACzBE,KAAuBplD,OAAOU,KAAKwkD,GAAOr8C,IAAKjB,KAC7CmQ,CAACnQ,GAAMs9C,EAAMt9C,QAMjB,SAASuG,GAAM+2C,EAAO9uB,GAASivB,KAAEA,GAAO,GAAS,IAC/C,MAAM5iD,EAAQyiD,IACZ,IAAIxkD,EAAOV,OAAOU,KAAKwkD,GAEvB,MAAMI,EAjBK,CAACJ,KAAYA,EAAkB,MAiBtBK,CAAOL,GAE3B,IAAKI,GAAe5kD,EAAKxB,OAAS,IAAM+lD,GAAaC,GACnD,OAAOziD,EAAK0iD,GAAkBD,IAGhC,GArBW,CAACA,IACbpsC,GAAQosC,IAAUrH,GAASqH,KAAWD,GAAaC,GAoB9CM,CAAON,GAAQ,CACjB,MAAMt9C,EAAM09C,EAAcJ,EAAkB,MAAIxkD,EAAK,GAE/CghD,EAAU4D,EAAcJ,EAAqB,KAAIA,EAAMt9C,GAE7D,IAAK+1C,GAAS+D,GACZ,MAAM,IAAIh8B,MAnxC2B,CAAC9d,GAC5C,yBAAyBA,EAkxCH69C,CAAqC79C,IAGvD,MAAM+M,EAAM,CACV4pC,MAAOI,GAAY/2C,GACnB85C,QAAAA,GAOF,OAJI2D,IACF1wC,EAAI+wC,SAAWZ,GAAepD,EAAStrB,IAGlCzhB,EAGT,IAAItN,EAAO,CACT+6B,SAAU,GACVujB,SAAUjlD,EAAK,IAajB,OAVAA,EAAKyJ,QAASvC,IACZ,MAAM2b,EAAQ2hC,EAAMt9C,GAEhBkR,GAAQyK,IACVA,EAAMpZ,QAAS+D,IACb7G,EAAK+6B,SAASzhC,KAAK8B,EAAKyL,QAKvB7G,GAOT,OAJK49C,GAAaC,KAChBA,EAAQC,GAAkBD,IAGrBziD,EAAKyiD,GAwBd,SAASU,GAAiB5/B,EAAQ7kB,GAChC,MAAMijD,EAAUp+B,EAAOo+B,QACvBjjD,EAAKijD,QAAU,GAEVtG,GAAUsG,IAIfA,EAAQj6C,QAAShL,IACf,IAAK2+C,GAAU3+C,EAAMujD,WAAavjD,EAAMujD,QAAQxjD,OAC9C,OAGF,MAAMwjD,QAAEA,EAAOn/B,MAAEA,GAAUpkB,EAE3B,IAAIwV,EAAM,CACR+tC,QAAAA,EACAn/B,MAAAA,GAGEpkB,EAAMyI,MACR+M,EAAI/M,IAAMzI,EAAMyI,IAAI42C,KAGlBr/C,EAAMggD,KAAO,IACfxqC,EAAIkxC,SAAW1mD,EAAMggD,KAGvBh+C,EAAKijD,QAAQzjD,KAAKgU,KAItB,SAASmxC,GAAe9/B,EAAQ7kB,GAC9BA,EAAK+9C,MAAQl5B,EAAOk5B,MAkCtB,MAAM6G,GACJhuC,YAAY0oC,EAAMrqB,EAAU,GAAI1hB,GAC9BnS,KAAK6zB,QAAU,IAAKyoB,MAAWzoB,GAS/B7zB,KAAKyjD,UAAY,IAAI/H,GAAS17C,KAAK6zB,QAAQ11B,MAE3C6B,KAAK0jD,cAAcxF,EAAM/rC,GAG3BqD,cAAc0oC,EAAM/rC,GAGlB,GAFAnS,KAAK2jD,MAAQzF,EAET/rC,KAAWA,aAAiBwrC,IAC9B,MAAM,IAAIx6B,MAz6Ca,0BA46CzBnjB,KAAK4jD,SACHzxC,GACA2sC,GAAY9+C,KAAK6zB,QAAQ11B,KAAM6B,KAAK2jD,MAAO,CACzCzH,MAAOl8C,KAAK6zB,QAAQqoB,MACpBuB,gBAAiBz9C,KAAK6zB,QAAQ4pB,kBAIpCjoC,IAAIxF,GACGurC,GAAUvrC,KAIfhQ,KAAK2jD,MAAMvlD,KAAK4R,GAChBhQ,KAAK4jD,SAASr5C,IAAIyF,IAGpBwF,OAAO4b,EAAY,MAAoB,IACrC,MAAMsd,EAAU,GAEhB,IAAK,IAAIvxC,EAAI,EAAGga,EAAMnX,KAAK2jD,MAAMhnD,OAAQQ,EAAIga,EAAKha,GAAK,EAAG,CACxD,MAAM6S,EAAMhQ,KAAK2jD,MAAMxmD,GACnBi0B,EAAUphB,EAAK7S,KACjB6C,KAAK6jD,SAAS1mD,GACdA,GAAK,EACLga,GAAO,EAEPu3B,EAAQtwC,KAAK4R,IAIjB,OAAO0+B,EAGTl5B,SAASonC,GACP58C,KAAK2jD,MAAMhkD,OAAOi9C,EAAK,GACvB58C,KAAK4jD,SAASC,SAASjH,GAGzBpnC,WACE,OAAOxV,KAAK4jD,SAGdpuC,OAAOmtC,GAAOjhC,MAAEA,GAAQ,GAAO,IAC7B,MAAMm7B,eACJA,EAAcL,aACdA,EAAYC,WACZA,EAAUC,OACVA,EAAMc,gBACNA,GACEx9C,KAAK6zB,QAET,IAAI6a,EAAU0M,GAASuH,GACnBvH,GAASp7C,KAAK2jD,MAAM,IAClB3jD,KAAK8jD,kBAAkBnB,GACvB3iD,KAAK+jD,kBAAkBpB,GACzB3iD,KAAKgkD,eAAerB,GAYxB,OAlLJ,SACEjU,GACA8O,gBAAEA,EAAkBlB,GAAOkB,kBAE3B9O,EAAQ9mC,QAAS6b,IACf,IAAI48B,EAAa,EAEjB58B,EAAOo+B,QAAQj6C,QAAQ,EAAGvC,IAAAA,EAAKu4C,KAAAA,EAAMjB,MAAAA,MACnC,MAAMZ,EAAS12C,EAAMA,EAAI02C,OAAS,KAElCsE,GAAc5jD,KAAKqhD,IACP,IAAVnB,GAAeZ,EAASkI,OAAOC,QAAUvH,GACxCZ,GAAU,IAAMyB,EAAkB,EAAII,MAI3Cn6B,EAAOk5B,MAAQ0D,IAwJf8D,CAAazV,EAAS,CAAE8O,gBAAAA,IAEpBf,GACF/N,EAAQznC,KAAKy1C,GAGXrB,GAAS35B,IAAUA,GAAS,IAC9BgtB,EAAUA,EAAQlzC,MAAM,EAAGkmB,IAvHjC,SACEgtB,EACAwP,GACArB,eACEA,EAAiBP,GAAOO,eAAcL,aACtCA,EAAeF,GAAOE,cACpB,IAEJ,MAAM4H,EAAe,GAKrB,OAHIvH,GAAgBuH,EAAahmD,KAAKilD,IAClC7G,GAAc4H,EAAahmD,KAAKmlD,IAE7B7U,EAAQpoC,IAAKmd,IAClB,MAAMm5B,IAAEA,GAAQn5B,EAEV7kB,EAAO,CACX+M,KAAMuyC,EAAKtB,GACX0G,SAAU1G,GASZ,OANIwH,EAAaznD,QACfynD,EAAax8C,QAASy8C,IACpBA,EAAY5gC,EAAQ7kB,KAIjBA,IA+FAqkB,CAAOyrB,EAAS1uC,KAAK2jD,MAAO,CACjC9G,eAAAA,EACAL,aAAAA,IAIJhnC,kBAAkBmtC,GAChB,MAAMQ,EAAWZ,GAAeI,EAAO3iD,KAAK6zB,UACtCsqB,QAAEA,GAAYn+C,KAAK4jD,SACnBlV,EAAU,GAmBhB,OAhBAyP,EAAQv2C,QAAQ,EAAGnH,EAAGwN,EAAM9Q,EAAGy/C,EAAK5+C,EAAG4/C,MACrC,IAAKrC,GAAUttC,GACb,OAGF,MAAMiyC,QAAEA,EAAOvD,MAAEA,EAAKwD,QAAEA,GAAYgD,EAASnB,SAAS/zC,GAElDiyC,GACFxR,EAAQtwC,KAAK,CACXuN,KAAMsC,EACN2uC,IAAAA,EACAiF,QAAS,CAAC,CAAElF,MAAAA,EAAO37B,MAAO/S,EAAM2vC,KAAAA,EAAMuC,QAAAA,QAKrCzR,EAGTl5B,eAAemtC,GAEb,MAAM2B,EAAa14C,GAAM+2C,EAAO3iD,KAAK6zB,SAE/B0wB,EAAW,CAACz/C,EAAM6G,EAAMixC,KAC5B,IAAK93C,EAAK+6B,SAAU,CAClB,MAAMmc,MAAEA,EAAKmH,SAAEA,GAAar+C,EAEtB+8C,EAAU7hD,KAAKwkD,aAAa,CAChCn/C,IAAKrF,KAAKyjD,UAAU5/C,IAAIm4C,GACxBh7B,MAAOhhB,KAAK4jD,SAASa,uBAAuB94C,EAAMqwC,GAClDmH,SAAAA,IAGF,OAAItB,GAAWA,EAAQllD,OACd,CACL,CACEigD,IAAAA,EACAjxC,KAAAA,EACAk2C,QAAAA,IAKC,GAGT,MAAM7yC,EAAM,GACZ,IAAK,IAAI7R,EAAI,EAAGga,EAAMrS,EAAK+6B,SAASljC,OAAQQ,EAAIga,EAAKha,GAAK,EAAG,CAC3D,MACMsmB,EAAS8gC,EADDz/C,EAAK+6B,SAAS1iC,GACGwO,EAAMixC,GACrC,GAAIn5B,EAAO9mB,OACTqS,EAAI5Q,QAAQqlB,QACP,GApUR,SAoUY3e,EAAKs+C,SACd,MAAO,GAGX,OAAOp0C,GAIH01C,EAAY,GACZhW,EAAU,GAmBhB,OArBgB1uC,KAAK4jD,SAASzF,QAItBv2C,QAAQ,EAAGvF,EAAGsJ,EAAMxO,EAAGy/C,MAC7B,GAAIrB,GAAU5vC,GAAO,CACnB,IAAIg5C,EAAaJ,EAASD,EAAY34C,EAAMixC,GAExC+H,EAAWhoD,SAER+nD,EAAU9H,KACb8H,EAAU9H,GAAO,CAAEA,IAAAA,EAAKjxC,KAAAA,EAAMk2C,QAAS,IACvCnT,EAAQtwC,KAAKsmD,EAAU9H,KAEzB+H,EAAW/8C,QAAQ,EAAGi6C,QAAAA,MACpB6C,EAAU9H,GAAKiF,QAAQzjD,QAAQyjD,SAMhCnT,EAGTl5B,kBAAkBmtC,GAChB,MAAMQ,EAAWZ,GAAeI,EAAO3iD,KAAK6zB,UACtC11B,KAAEA,EAAIggD,QAAEA,GAAYn+C,KAAK4jD,SACzBlV,EAAU,GA8BhB,OA3BAyP,EAAQv2C,QAAQ,EAAGvF,EAAGsJ,EAAMxO,EAAGy/C,MAC7B,IAAKrB,GAAU5vC,GACb,OAGF,IAAIk2C,EAAU,GAGd1jD,EAAKyJ,QAAQ,CAACvC,EAAKo5C,KACjBoD,EAAQzjD,QACH4B,KAAKwkD,aAAa,CACnBn/C,IAAAA,EACA2b,MAAOrV,EAAK8yC,GACZ0E,SAAAA,OAKFtB,EAAQllD,QACV+xC,EAAQtwC,KAAK,CACXw+C,IAAAA,EACAjxC,KAAAA,EACAk2C,QAAAA,MAKCnT,EAETl5B,cAAanQ,IAAEA,EAAG2b,MAAEA,EAAKmiC,SAAEA,IACzB,IAAK5H,GAAUv6B,GACb,MAAO,GAGT,IAAI6gC,EAAU,GAEd,GAAItrC,GAAQyK,GACVA,EAAMpZ,QAAQ,EAAGnH,EAAGwN,EAAM9Q,EAAGy/C,EAAK5+C,EAAG4/C,MACnC,IAAKrC,GAAUttC,GACb,OAGF,MAAMiyC,QAAEA,EAAOvD,MAAEA,EAAKwD,QAAEA,GAAYgD,EAASnB,SAAS/zC,GAElDiyC,GACF2B,EAAQzjD,KAAK,CACXu+C,MAAAA,EACAt3C,IAAAA,EACA2b,MAAO/S,EACP2uC,IAAAA,EACAgB,KAAAA,EACAuC,QAAAA,UAID,CACL,MAAQ1/C,EAAGwN,EAAMjQ,EAAG4/C,GAAS58B,GAEvBk/B,QAAEA,EAAOvD,MAAEA,EAAKwD,QAAEA,GAAYgD,EAASnB,SAAS/zC,GAElDiyC,GACF2B,EAAQzjD,KAAK,CAAEu+C,MAAAA,EAAOt3C,IAAAA,EAAK2b,MAAO/S,EAAM2vC,KAAAA,EAAMuC,QAAAA,IAIlD,OAAO0B,GAIX2B,GAAKjhD,QAAU,QACfihD,GAAK1E,YAAcA,GACnB0E,GAAKoB,WArxCL,SACEhmD,GACAs9C,MAAEA,EAAQI,GAAOJ,MAAKuB,gBAAEA,EAAkBnB,GAAOmB,iBAAoB,IAErE,MAAMt/C,KAAEA,EAAIggD,QAAEA,GAAYv/C,EACpBmgD,EAAU,IAAIpB,GAAU,CAAEzB,MAAAA,EAAOuB,gBAAAA,IAGvC,OAFAsB,EAAQC,QAAQ7gD,GAChB4gD,EAAQd,gBAAgBE,GACjBY,GA8wCTyE,GAAK3X,OAASyQ,GAGZkH,GAAKqB,WAAaj5C,GApcpB,YAAqB0S,GACnBgkC,GAAoBlkD,QAAQkgB,GAuc5BwmC,CArjBF,MACEtvC,YACE2pC,GACA5C,gBACEA,EAAkBD,GAAOC,gBAAeM,eACxCA,EAAiBP,GAAOO,eAAcE,mBACtCA,EAAqBT,GAAOS,mBAAkBQ,eAC9CA,EAAiBjB,GAAOiB,eAAcT,eACtCA,EAAiBR,GAAOQ,eAAcxoC,SACtCA,EAAWgoC,GAAOhoC,SAAQ0oC,UAC1BA,EAAYV,GAAOU,UAASC,SAC5BA,EAAWX,GAAOW,UAChB,IAEJj9C,KAAK2iD,MAAQ,KACb3iD,KAAK6zB,QAAU,CACb0oB,gBAAAA,EACAM,eAAAA,EACAE,mBAAAA,EACAD,eAAAA,EACAS,eAAAA,EACAjpC,SAAAA,EACA0oC,UAAAA,EACAC,SAAAA,GAGFj9C,KAAKm/C,QAAU5C,EAAkB4C,EAAUA,EAAQ3lC,cACnDxZ,KAAK2iD,MAtGT,SAAoBxD,EAAStrB,EAAU,IACrC,OAAOsrB,EAAQrjD,MANA,KAMgBwK,IAAKqF,IAClC,IAAIg3C,EAAQh3C,EACTic,OACA9rB,MAAMsmD,IACN5jC,OAAQ7S,GAASA,KAAUA,EAAKic,QAE/B8mB,EAAU,GACd,IAAK,IAAIvxC,EAAI,EAAGga,EAAMwrC,EAAMhmD,OAAQQ,EAAIga,EAAKha,GAAK,EAAG,CACnD,MAAM4nD,EAAYpC,EAAMxlD,GAGxB,IAAI8vB,GAAQ,EACR2vB,GAAO,EACX,MAAQ3vB,KAAW2vB,EAAMuF,IAAc,CACrC,MAAMgB,EAAWjB,GAAUtF,GAC3B,IAAIoI,EAAQ7B,EAAS8B,aAAaF,GAC9BC,IACFtW,EAAQtwC,KAAK,IAAI+kD,EAAS6B,EAAOnxB,IACjC5G,GAAQ,GAIZ,IAAIA,EAMJ,IADA2vB,GAAO,IACEA,EAAMuF,IAAc,CAC3B,MAAMgB,EAAWjB,GAAUtF,GAC3B,IAAIoI,EAAQ7B,EAAS+B,cAAcH,GACnC,GAAIC,EAAO,CACTtW,EAAQtwC,KAAK,IAAI+kD,EAAS6B,EAAOnxB,IACjC,QAKN,OAAO6a,IA+DMmW,CAAW7kD,KAAKm/C,QAASn/C,KAAK6zB,SAG7Cre,iBAAiBvV,EAAG4zB,GAClB,OAAOA,EAAQqpB,kBAGjB1nC,SAASvH,GACP,MAAM00C,EAAQ3iD,KAAK2iD,MAEnB,IAAKA,EACH,MAAO,CACLzC,SAAS,EACTvD,MAAO,GAIX,MAAME,eAAEA,EAAcN,gBAAEA,GAAoBv8C,KAAK6zB,QAEjD5lB,EAAOsuC,EAAkBtuC,EAAOA,EAAKuL,cAErC,IAAI2rC,EAAa,EACb/E,EAAa,GACbC,EAAa,EAGjB,IAAK,IAAIljD,EAAI,EAAGioD,EAAOzC,EAAMhmD,OAAQQ,EAAIioD,EAAMjoD,GAAK,EAAG,CACrD,MAAM+kD,EAAYS,EAAMxlD,GAGxBijD,EAAWzjD,OAAS,EACpBwoD,EAAa,EAGb,IAAK,IAAIn9B,EAAI,EAAGq9B,EAAOnD,EAAUvlD,OAAQqrB,EAAIq9B,EAAMr9B,GAAK,EAAG,CACzD,MAAMm7B,EAAWjB,EAAUl6B,IACrBk4B,QAAEA,EAAOC,QAAEA,EAAOxD,MAAEA,GAAUwG,EAAS/9B,OAAOnX,GAEpD,IAAIiyC,EAWG,CACLG,EAAa,EACb8E,EAAa,EACb/E,EAAWzjD,OAAS,EACpB,MAdAwoD,GAAc,EACd9E,GAAc1D,EACVE,IAEEwF,GAAc7kD,IADL2lD,EAAStlD,YAAY2oB,MAEhC45B,EAAa,IAAIA,KAAeD,GAEhCC,EAAWhiD,KAAK+hD,IAYxB,GAAIgF,EAAY,CACd,IAAI1hC,EAAS,CACXy8B,SAAS,EACTvD,MAAO0D,EAAa8E,GAOtB,OAJItI,IACFp5B,EAAO08B,QAAUC,GAGZ38B,GAKX,MAAO,CACLy8B,SAAS,EACTvD,MAAO,MC9xCb,ICWIt3C,GACAigD,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GCfA1N,GFJE2N,GAAW/0B,EAAK3O,WAAa,IAAIhgB,EAAI,CAACsF,MAAO,CAAC,6BAA8ByJ,KAAM,iBAAkB40C,WAAU,EAAOp1C,cAAc,IAAQ9M,IAAI,SAAW,KCoB1JmiD,GAAuB,GACvBC,GAA2B,IAAItkB,IAE/BukB,GAAiB,0FAEjBC,GAAmB,CACvBL,SAAU,CACRM,aAAa,EACbC,iBAAiB,GAEnBlS,MAAO,CACLmS,kBAAmBv1B,EAAKlK,SACxB0/B,2BAA2B,EAC3BC,oBAAoB,EACpBl1B,kBAAmBP,EAAK3O,WAAa,EAAI,OAO9B,CASb2K,cAAK8G,cACH,YADGA,IAAAA,EAAe,KACdgyB,GAAJ,CACAA,IAAa,EACb,IAAIY,EAAkB91C,aAAaG,QAAQ,eACvC21C,EACFzmD,KAAK0mD,MAAM7/C,KAAK+E,MAAM66C,KACS,IAAtB5yB,EAAQ8yB,UACjB3mD,KAAK4mD,eAAe/yB,GAEpB7zB,KAAK6mD,iBAEPxoD,YAAW,WACT81C,IAAQtwC,IAAI,SAASyC,KAAI,WACvB8c,EAAK0jC,uBAEP1jC,EAAK0jC,uBAEPx3B,aAAY,WACV,GAAIlM,EAAK2jC,UAAUpqD,OAAQ,CAEzB,IAAME,EAAIumB,EAAK2jC,UAAU1nC,QACzBxiB,GAAKA,OAEN,MAGLspD,iBAAAA,GACAD,eAAAA,GAEAa,UAAW,GAEXD,kBAAmB7mD,GAAW,WAC5B,IACM6iB,EAASrlB,OAAOqlB,OAAO7iB,EAAO+lD,GAAiBvoD,OAAOU,KAAKg3C,OACjEyQ,GAAc,IAAIpC,GAAK1gC,EAFP,CAAC3kB,KAAM,CAAC,QAASq+C,cAAc,EAAMK,gBAAgB,EAAMG,UAAW,KAGtF7I,IAAQtwC,IAAI,sBAAsBT,KAAI,KACrC,KAEH4jD,iBAAkB/mD,GAAW,SAAAhC,GACzBk2C,IAAQtwC,IAAI,YAAYA,IAAI5F,GAAGmF,IAAI,CAAC6jD,eAAgBjB,GAAgB/nD,GAAGgpD,eAAeC,cAAelB,GAAgB/nD,GAAGkpD,UAAUl2C,SACnI,KAEHm2C,mBAAU7wB,EAAoBt4B,EAAWgpD,EAAwBI,GAC3DrB,GAAgB/nD,IACd+nD,GAAgB/nD,GAAGgpD,eAAiBA,IACtCjB,GAAgB/nD,GAAGgpD,eAAiBA,GAEtCI,GAAYrB,GAAgB/nD,GAAGkpD,UAAU58C,IAAI88C,KAE7CrB,GAAgB/nD,GAAK,CAACoH,IAAKpH,EAAGgpD,eAAAA,EAAgBE,UAAW,IAAIlT,IAAIoT,GAAY,CAACA,KAC9ErnD,KAAK+mD,UAAU3oD,MAAK,WAClBigB,EAAKpgB,GAAG4F,IAAI,WAAWA,IAAI,QAAQrD,IAAG,SAACsK,GACrCk7C,GAAgB/nD,GAAG6M,KAAOA,EAC1BqpC,IAAQtwC,IAAI,YAAYA,IAAI5F,GAAG4F,IAAI,QAAQT,IAAI0H,GAC/CyrB,GAAYA,EAASt4B,EAAG+nD,GAAgB/nD,WAI9C+B,KAAKgnD,iBAAiB/oD,GACtBs4B,GAAYA,EAASt4B,EAAG+nD,GAAgB/nD,IACxC+B,KAAK8mD,oBACL9mD,KAAKsnD,kBACLtnD,KAAKunD,qBAGPC,sBAAavpD,EAAWgpD,EAAwBI,GAC1CrB,GAAgB/nD,KAClB+nD,GAAgB/nD,GAAGkpD,iBAAiBE,GACb,IAAnBJ,GACF9S,IAAQtwC,IAAI,UAAUA,IAAI,WAAWA,IAAI5F,GAAGmF,KAAI,GAElDpD,KAAKsnD,kBACLtnD,KAAKunD,sBAITE,4BAAmBlxB,EAAoBt4B,EAAaypD,EAAcC,uBAA3B1pD,IAAAA,EAAIoH,GAAI+S,cAAKsvC,IAAAA,EAAW,YAAGC,IAAAA,EAAe,GAC/E,IAAMngC,EAASy+B,GAAyBpiD,IAAI5F,GAC5C,KAAIupB,GAAUA,GAAUmgC,GAkBxB,OAfA1B,GAAyBv6C,IAAIzN,EAAG0pD,GAEhC3nD,KAAKonD,UAAU7wB,EAAUt4B,EAAG0pD,EAAe,GAE3CtpC,EAAKpgB,GAAG4F,IAAI,UAAUyC,MAAM9F,IAAG,SAACm1C,EAAsBiS,GAChDjS,GACFpkB,EAAK61B,UAAU7wB,EAAUqxB,EAAaD,EAAc1pD,GAChD0pD,EAAeD,GACjBn2B,EAAKw1B,UAAU3oD,MAAK,WAAA,OAAMmzB,EAAKk2B,mBAAmBlxB,EAAUqxB,EAAaF,EAAUC,EAAe,OAGpGp2B,EAAKi2B,aAAaI,EAAaD,EAAc1pD,MAI1C+nD,IAGTsB,gBAAiBrnD,GAAW,WAC1B,IAAMQ,EAAIhD,OAAOU,KAAK6nD,IAAiBrpD,QAAU,EAC7C8D,IAAMilD,KACRA,GAAYjlD,EACZ0zC,IAAQtwC,IAAI,aAAaT,IAAIsiD,OAE9B,KAEH6B,kBAAmBtnD,GAAW,WAC5B,IAAMQ,IAAMulD,GAAgB3gD,GAAI+S,MAAS4tC,GAAgB3gD,GAAI+S,KAAK+uC,UAAUl2C,KAAO,GAC/ExQ,IAAMklD,KACRA,GAAcllD,EACd0zC,IAAQtwC,IAAI,eAAeT,IAAIuiD,OAEhC,KAEHkC,0BACE,OAAOjC,IAGTkC,8BACE,IAAMC,EAAchhD,OAAOuN,SAASpX,KACpC02B,EAAQuM,YAAYslB,GAAc,UAClC,IAAMuC,EAAY/nD,GAAW,WAC3B,IACM46C,EAAO7C,EADE+P,GAAeA,EAAY/rD,QAAQ,aAAa,IAAIA,QAAQ,UAAU,KAEjF6+C,IAAS4K,IACX5K,EAAKhiB,wBAEPjF,EAAQuM,YAAYslB,GAAc,UAClCvjD,aAAasjD,IACbA,GAAgBnnD,YAAW,WAAA,OAAMu1B,EAAQuM,YAAYslB,GAAc,YAAW,OAC7E,KACHx1C,SAAS6sB,iBAAiB,YAAakrB,GACvC/3C,SAAS6sB,iBAAiB,YAAakrB,GACvC/3C,SAAS6sB,iBAAiB,WAAYkrB,GACtC/3C,SAAS6sB,iBAAiB,oBAAoB,WAC5C,GAAiC,YAA7B7sB,SAAS0pC,gBAA+B,CAC1C/lB,EAAQuM,YAAYslB,GAAc,UAClC,IAAM/tB,EAASpjB,SAAS2zC,SAASzsD,MAAM,GAAGQ,QAAQ,QAAQ,IACpD6+C,EAAOkN,GAAe/P,EAAatgB,GACrCmjB,IACFA,EAAKhiB,wBACLqvB,GAActN,sBAAsBljB,EAAQ,SAG9C9D,EAAQuM,YAAYslB,GAAc,aAGtCuC,IACAjhD,OAAO+1B,iBAAiB,gBAAgB,WACtClJ,EAAQuM,YAAYslB,GAAc,UAItC0C,mCACEnoD,KAAKynD,oBAAmB,SAACxpD,EAAWgY,GAC9BA,EAAKgxC,gBAAkB,GACzB9S,IAAQtwC,IAAI,UAAUA,IAAI,WAAWA,IAAI5F,GAAGmF,KAAI,GAElD+wC,IAAQtwC,IAAI,UAAUA,IAAI,YAAYA,IAAI5F,GAAGmF,KAAI,GAC7CnF,IAAM8zB,EAAK0oB,aACb1oB,EAAKw1B,wBASXb,eAAMzoD,cACEmqD,IAAkB/iD,GACxBA,GAAMpH,EACN0S,aAAaC,QAAQ,cAAe/J,KAAKC,UAAU7I,IACnDogB,IAAOU,KAAK1Z,IACZgZ,IAAOjb,IAAI,CAACkW,KAAMjU,GAAIiU,OACtB+E,IAAOxa,IAAI,SAAST,IAAI,CAACiH,EAAE,OAC3BgU,IAAOxa,IAAI,QAAQT,IAAI,CAACiH,EAAE,OAC1BgU,IAAOxa,IAAI,WAAWT,IAAI,CAACiH,EAAE,OAC7B69C,GAAclN,qBACdkN,GAAcjN,0BACdiN,GAAc/N,+BACdvmB,EAAQyD,oBAAgB3U,GAAW,SAACqR,GAClCogB,IAAQtwC,IAAI,aAAaA,IAAIkwB,EAASxyB,IAAI6B,IAAI2wB,EAASlsB,KACvD09C,GAAiBxxB,EAASlsB,OAE5B7H,KAAK8nD,qBACLl0B,EAAQqD,aAAa,SAAC36B,GAAU,OAAK01B,EAAKq2B,WAAW/rD,MACrD+hB,IAAOxa,IAAI,WAAWA,IAAI,QAAQrD,IAAG,SAACsK,GAChCA,GAAwB,iBAATA,IACjBw6C,GAASx6C,MAGbo9C,GAAcn7B,OACdonB,IAAQtwC,IAAI,YAAYT,KAAI,GAC5B+wC,IAAQtwC,IAAI,YAAY+C,OAAOqT,MAAK,SAAAquC,GAC7BA,OAEoC5lC,IAA9B4lC,EAAShC,uBAAkE5jC,IAAhC4lC,EAAS9B,qBAC7DrS,IAAQtwC,IAAI,YAAYA,IAAI,oBAAoBT,IAAI+iD,GAAiBhS,MAAMmS,kBAC3EnS,IAAQtwC,IAAI,YAAYA,IAAI,sBAAsBT,IAAI+iD,GAAiBhS,MAAMqS,qBAH7ErS,IAAQtwC,IAAI,YAAYT,IAAI+iD,GAAiBhS,UAMjD91B,IAAOxa,IAAI,SAASyC,MAAM9F,IAAG,SAAC40C,EAAoB/2B,GAChD81B,IAAQtwC,IAAI,SAASA,IAAIwa,GAAMjb,IAAIgyC,GAC/BA,UACK4Q,GAAgB3nC,MAG3Bre,KAAKmoD,eACDC,GACF9zC,SAASi0C,SAEPzC,KACFA,GAASjiD,IAAI,YAAYrD,IAAG,SAAAslD,GAC1B3R,IAAQtwC,IAAI,YAAYA,IAAI,YAAYT,IAAI0iD,MAE9CA,GAASjiD,IAAI,QAAQT,IAAIiC,GAAI+S,MAE/B+7B,IAAQtwC,IAAI,WAAWA,IAAI,SAAS+C,OAAOqT,MAAK,SAAAxZ,GACzCA,GACH0zC,IAAQtwC,IAAI,WAAWA,IAAI,SAAST,IAAI,eAU9CwjD,wBAAe/yB,uBAAAA,IAAAA,EAAe,IAC5B,IAAM/oB,EAAO+oB,EAAQ/oB,MAAQimB,EAAKvN,eAElC,OADA1hB,QAAQkF,IAAI,sBAAuB8D,GAC5B1I,EAAIiS,IAAI0D,OAAOkC,MAAK,SAAAhc,GACzB85B,EAAK2uB,MAAMzoD,GACXogB,IAAOxa,IAAI,WAAWT,IAAI,CAACiH,EAAE,OAC7BgU,IAAOxa,IAAI,WAAWA,IAAI,QAAQT,IAAI0H,GACtCqpC,IAAQtwC,IAAI,WAAWT,IAAI,CAACiH,EAAE,OAC9B8pC,IAAQtwC,IAAI,WAAWA,IAAI,SAAST,IAAI,WACxCwwB,EAAQiK,iBAAiB5jB,MAAK,SAAA5d,GAAC,OAAIkpD,GAAiBlpD,KACpDgC,YAAW,YACkB,IAAvBw1B,EAAQ20B,aACV1mD,QAAQkF,IAAI,gBAAiBk/C,IAC7B7nC,IAAOxa,IAAI,UAAUA,IAAIqiD,IAAgB9iD,KAAI,MAE9C,SAQDqlD,wIAIJ,GAHI3C,IACFA,GAASjiD,IAAI,QAAQT,IAAI,OAGvB+e,UAAUu1B,eAAax0B,UAAA,MAAA,OAAAA,SACPf,UAAUu1B,cAAcC,kBAAiB,OAAlD,KAAHP,YACKA,EAAIC,aAAWn0B,UAAA,MACa,gBAArCk0B,EAAIQ,SAAJ8Q,EAAY3pD,YAAY,CAACsG,IAAK,OAAO6d,SACnBk0B,EAAIC,YAAYQ,kBAAiB,OAA1C,KAAHzuC,WACC8Z,UAAA,MAAA,OAAAA,UACc6N,EAAKhO,QAAQlc,KAAKC,UAAUsC,IAAK,QACpD8+C,GAAchN,2BACd9xC,EAAIu/C,aAAev/C,EAAIu/C,cAAc,QAI3CjwB,EAAKmuB,iBACLl2C,aAAa46B,QACbqd,EAAYrd,QAAQtxB,MAAK,WACvBlT,OAAOuN,SAASpX,KAAO,GACvB6J,OAAOuN,SAASu0C,KAAO,IACvBv0C,SAASi0C,YACR,QAAA,UAAA,6BAGL1B,0BACE,OAAO,IAAIlwC,SAAQ,SAAA1L,GACjB,IAAM69C,EAAK/hD,OAAO8nB,UAAUqd,eAAe,WACrC6c,EAAKhiD,OAAO8nB,UAAUqd,eAAe,UACvC8c,GAAS,EACTC,GAAS,EACP1rD,EAAQ,WACZyrD,GAAUC,GAAUh+C,OAAQyX,IAE9BomC,EAAG14C,QAAU24C,EAAG34C,QAAU,SAAAzR,GAAC,OAAImD,QAAQonB,MAAMvqB,IAE7CmqD,EAAG75B,UAAY,WACb+5B,GAAS,EACTzrD,KAEFwrD,EAAG95B,UAAY,WACbg6B,GAAS,EACT1rD,SAKN2rD,yBACE,OAAO3D,IAAkBx0B,EAAK3K,eAAe/gB,GAAI+S,MAOnDgY,kBAAW,OAAO/qB,IAMlBo1C,qBACE,OAAOp1C,IAAOA,GAAI+S,KAOpByhC,qBAAc,OAAOyL,IAErB6D,UAAW,SAAC32B,GAAU,gBAAeA,eAE/B42B,wBAAe1sB,qIACAyX,IAAQtwC,IAAI,YAAYA,IAAI,YAAYA,IAAI,YAAY+C,OAAM,QAA3EyiD,WACE3sB,EAAQt5B,KAAOs5B,EAAQt5B,IAAI,UAAW21B,EAAKowB,UAAUE,IAAO,OAAA,UAAA,6BAGtEC,oBAAWlxC,EAAa2b,GACtB,GAAK3b,IAAOpY,KAAK+3C,WAAWv6C,IAAI4a,GAAhC,CAGA,IAAMyiC,EAAO7C,EAAa5/B,EAAK2b,GAE/B,OADA/zB,KAAKqoD,WAAWxN,GACTA,IAGTwN,oBAAWxN,cACT76C,KAAK+mD,UAAU3oD,MAAK,WAClB,IAAIga,EAAMyiC,EAAKnkB,QACf,IAAIwC,EAAK6e,WAAWv6C,IAAI4a,GAAxB,CACA8gB,EAAK6e,WAAWxtC,IAAI6N,GACpB,IAAM0iC,EAAW3G,IAAQtwC,IAAI,YAAYA,IAAIuU,GAiD7C,GAhDA0iC,EAASj3C,IAAI,cAAcrD,IAAG,SAAC3D,GACzBA,KAAOg+C,EAAK0O,YAAc1sD,EAAIg+C,EAAK0O,cACrC1O,EAAK0O,WAAa1sD,MAKtBi+C,EAASj3C,IAAI,yBAAyBrD,IAAG,SAAC3D,GACxC,GAAKA,EAAL,CACA,IAAM8N,EAAI,IAAIzL,KAAKrC,KACdg+C,EAAK2O,uBAAyB3O,EAAK2O,sBAAwB7+C,KAC9DkwC,EAAK2O,sBAAwB7+C,OAGjCkwC,EAAKriB,cAAgBqiB,EAAKriB,cAAa,SAACG,EAAa1iB,GACnDijB,EAAKuwB,eAAerxC,EAAKugB,EAAQ1iB,MAEnCiyC,GAActN,sBAAsBxiC,EAAK,GACzCyiC,EAAKjB,oBAAsB,MAC3BiB,EAAKjiB,KAAK,uBAAuB,SAACtzB,GAChCu1C,EAAKjB,oBAAsBt0C,KAG7Bu1C,EAAK1hB,sBAAwB,GAC7B0hB,EAAK5hB,0BAAyB,SAAC7pB,GACzByrC,GAAQzrC,GAAQA,GAAQyrC,EAAK1hB,wBAC/B0hB,EAAK1hB,sBAAwB/pB,EAC7B0rC,EAASj3C,IAAI,yBAAyBT,IAAIgM,OAG9CyrC,EAAK/hB,uBAAsB,SAAC1pB,GAC1ByrC,EAAK6O,eAAiB,IAAIxqD,KAAKkQ,GAC3ByrC,EAAKliB,QAAUkiB,EAAK6O,gBAAkB7O,EAAKliB,OAAOvpB,MACpD84C,GAActN,sBAAsBxiC,EAAK,MAG7CyiC,EAAK9e,UAAW,EAChB8e,EAAK1e,WAAU,SAAAJ,GACb8e,EAAK9e,SAAWA,EAChBoY,IAAQtwC,IAAI,YAAYA,IAAIuU,GAAKvU,IAAI,YAAYT,IAAI24B,MAEvD8e,EAAK8O,OAAS,GACd/1B,EAAQsL,YAAY9mB,GAAK,SAACqoB,GACpBoa,IACFC,EAAS13C,IAAI,CAACwmD,oBAAqBnpB,GAAYA,EAASlB,WAAYkB,SAAUA,GAAYA,EAASrB,UAAYqB,EAAStB,SACxH0b,EAAKpa,SAAWA,MAGhBoa,EAAK7yC,KAAM,CACb,IAAI6hD,EAAa9iD,OAAO+iD,YAAc/iD,OAAO+iD,WAAW,gCAAgCjI,QACxFhH,EAAKf,oBAAsB,GAC3Be,EAAKr6C,GAAG,QAAQ,SAAAC,GACdo6C,EAAK/vC,KAAOrK,EACZulD,GAAgBnL,EAAK7yC,MAAQ,CAAC8C,KAAMrK,EAAGuH,KAAM6yC,EAAK7yC,MAClDmsC,IAAQtwC,IAAI,YAAYA,IAAIg3C,EAAK7yC,MAAMnE,IAAI,QAAQT,IAAI3C,MAEzDo6C,EAAKr6C,GAAG,SAAS,SAAAC,GACfulD,GAAgBnL,EAAK7yC,MAAQg+C,GAAgBnL,EAAK7yC,OAAS,GAC3Dg+C,GAAgBnL,EAAK7yC,MAAM+hD,MAAQtpD,EACnC0zC,IAAQtwC,IAAI,YAAYA,IAAIg3C,EAAK7yC,MAAMnE,IAAI,SAAST,IAAI3C,MAE1Do6C,EAAKr6C,GAAG,SAAS,SAAAC,GAAC,OAAI0zC,IAAQtwC,IAAI,YAAYA,IAAIg3C,EAAK7yC,MAAMnE,IAAI,SAAST,IAAI3C,MAC9Eo6C,EAAKvkB,iBAAgB,SAAArC,GAEnB,UADOA,EAAavR,UACQ,iBAAjBuR,EAA2B,CACpC,IAAI91B,EAAOV,OAAOU,KAAK81B,GACvB91B,EAAKyJ,SAAQ,SAAC3J,EAAGd,GACf,IAAI6sD,EAAM,IAAMvtD,KAAK4E,IAAIlD,EAAKxB,OAAQ,GAAKQ,EAC3C09C,EAAKf,oBAAoB77C,GAAK,CAACo7B,YAAapF,EAAah2B,GAAIgsD,aAAcD,aAAaH,EAAa,GAAK,UAC1GxrC,EAAKpgB,GAAG4F,IAAI,WAAWA,IAAI,QAAQrD,IAAG,SAAAsK,GACpC+vC,EAAKf,oBAAoB77C,GAAG6M,KAAOA,QAIzCqpC,IAAQtwC,IAAI,YAAYA,IAAIg3C,EAAK7yC,MAAMnE,IAAI,gBAAgBT,IAAI6wB,MAEjE4mB,EAAKqP,YAAc,GACnBrP,EAAKzmB,aAAa,CAACmC,SAAU,gBAAE1uB,IAAAA,IAAKtG,IAAAA,GAClCO,QAAQkF,IAAI,gBAAiBzF,EAAIsG,GACjCgzC,EAAKqP,YAAY3oD,GAAMsG,EACvBssC,IAAQtwC,IAAI,sBAAsBT,KAAI,WAGxC+wC,IAAQtwC,IAAI,UAAUA,IAAI,YAAYA,IAAIuU,GAAKhV,KAAI,GACnD81B,EAAKkuB,UAAU,KAAMhvC,EAAK1X,UAC1B2d,EAAKjG,GAAKvU,IAAI,WAAWA,IAAI,QAAQrD,IAAG,SAAAC,GAAC,OAAI0zC,IAAQtwC,IAAI,YAAYA,IAAIuU,GAAKvU,IAAI,QAAQT,IAAI3C,MAEhG,GAAIo6C,EAAKz3C,IAAK,CACZy3C,EAAKjmB,QAAQ,wBAAwB,SAACr4B,EAAG0B,EAAG8J,GACrCJ,MAAM4O,QAAQha,KACnBs+C,EAAKnE,qBAAuBmE,EAAKnE,sBAAwB,GACzDmE,EAAKnE,qBAAqB3uC,GAAQqQ,GAAO7b,MAE3C,IAAMwX,EAAMtW,OAAOqlB,OAAOolC,GAAcxR,sBACxCr4C,YAAW,WAAA,OAAMw8C,EAAKz3C,IAAI,uBAAwB2Q,KAAM,KACxDmlB,EAAKkwB,eAAevO,GAEtBA,EAAKjmB,QAAQ,QAAQ,SAAA92B,GACnBq2C,IAAQtwC,IAAI,QAAQT,IAAI,CAACgV,IAAAA,EAAKta,KAAAA,OAEhCq2C,IAAQtwC,IAAI,YAAYA,IAAIuU,GAAKhV,IAAI,CAAC4sB,SAAQ,SAclDy5B,wBAAe/xB,EAAgB50B,EAAUmT,EAAWk0C,GAClD,IAAMtP,EAAO7C,EAAatgB,GAC1BmjB,EAAKuP,WAAavP,EAAKuP,YAAc,GACjCvP,EAAKuP,WAAWtnD,EAAIsM,KAAO6G,EAAKlO,QACpC8yC,EAAKuP,WAAWtnD,EAAIsM,KAAO6G,EAAKlO,OAAQ,EACpCkO,IACFnT,EAAMrF,OAAOsX,OAAOjS,EAAKmT,IAEvBnT,EAAIunD,OAENrqD,KAAKspD,WAAWxmD,EAAIunD,OAAO7P,oCADoB13C,EAAIunD,OAAO7P,kBAAiB9iB,IAI7E50B,EAAIs1B,aAAeniB,EAAKmiB,aACxB+b,IAAQtwC,IAAI,YAAYA,IAAI6zB,GAAQ7zB,IAAI,QAAQA,IAAIf,EAAIsM,MAAQtM,EAAIiF,MAAQjF,EAAIiF,KAAKvM,MAAM,EAAG,MAAM4H,IAAIyD,KAAKC,UAAUhE,IACvHA,EAAI42C,QAAU,IAAIx6C,KAAK4D,EAAIsM,OACtB6G,EAAKmiB,cAAgBt1B,EAAI42C,QAAUmB,EAAK6O,iBACvC3iD,OAAOuN,SAASpX,iBAAqBw6B,GAAyC,YAA7BznB,SAAS0pC,gBAC5DuO,GAActN,sBAAsBljB,EAAQ,GACnB,WAAhB+tB,IACP5K,EAAKhiB,0BAGN5iB,EAAKmiB,cAAgBt1B,EAAIsM,KAAOyrC,EAAK1hB,uBACxCgb,IAAQtwC,IAAI,YAAYA,IAAI6zB,GAAQ7zB,IAAI,yBAAyBT,IAAIN,EAAIsM,QAEtEyrC,EAAK0O,YAAezmD,EAAIsM,KAAOyrC,EAAK0O,aACvCpV,IAAQtwC,IAAI,YAAYA,IAAI6zB,GAAQt0B,IAAI,CACtCmmD,WAAYzmD,EAAIsM,KAChBupB,OAAQ,CAACvpB,KAAMtM,EAAIsM,KAAMnB,KAAMnL,EAAImL,KAAMmqB,aAAcniB,EAAKmiB,gBAIhE8vB,GAAc3O,UAAUz2C,EAAKmT,EAAMyhB,EAAQyyB,MAG7CG,yBAAgBlyC,cACR9b,EAAI07C,EAAa5/B,GACnB9b,EAAEiuD,aACNjuD,EAAEiuD,YAAa,EACfjuD,EAAEu7B,aAAY,SAAC/0B,EAAKmT,GAClBsjB,EAAKkwB,eAAerxC,EAAKtV,EAAKmT,QAOlC8hC,WAAY,IAAI9D,QE7iBH,CAObpwC,aAAI3G,EAAcq5B,GAChB,OAAO,IAAI5f,SAAQ,SAAC1L,EAASm5B,GACtBlnC,GACHknC,EAAO,oBAEW,iBAATlnC,GACTknC,EAAO,yBAETomB,IAAc3mD,IAAI,KAAKA,IAAI3G,GAAMsD,IAAG,SAACC,EAAQ+hB,EAAYioC,EAAS9rD,GAC5D8B,IACF9B,EAAEyB,MACFm2B,GAAYA,EAAS91B,GACrBwK,EAAQxK,WAWV2C,aAAI4d,0HACW+P,EAAKhO,QAAQ/B,GAAM,OACM,OADtC9jB,SACNstD,IAAc3mD,IAAI,KAAKA,IAAI3G,GAAMkG,IAAI4d,qBAC9B9jB,GAAI,OAAA,UAAA,8BD9BTwtD,cAAG,cAmFN,OAnFMA,EACMC,wBAAY,kBAAzB,WAA0BC,EAAeC,EAAsBC,GAAQ,cAAA,6BAAA,OAAA,sBAAA,OAAvB,YAAtBF,IAAAA,gBAAeC,IAAAA,eACnC1S,IAAKj1B,SAAA,MAAA,yBACAi1B,IAAK,OAAA,IAEV2S,GAAE5nC,UAAA,MACqC,IACrC4nC,EAAGC,WADDC,EAAiBJ,MAAWC,IACJ3nC,UAAA,MACtB3kB,EAAIusD,EAAGG,aAAaD,UAC1B7S,GAAQuS,EAAIQ,WAAW3sD,GAAG2kB,UAAA,MAAA,QAAA,OAAAA,UAELwnC,EAAIS,WAAU,QAA7BC,SAENN,EAAGO,cAAcL,EAAaN,EAAI3uD,SADlCo8C,GAAQA,IAASiT,IAEjBN,EAAGQ,UAAUN,EAAa,KAAK,QAAA,GAE5B7S,IAAKj1B,UAAA,MAAA,MACF,IAAIC,4CAA4CynC,MAAWC,GAAU,QAAA3nC,UAAA,MAAA,QAGxB,KAA/CF,EAAMjc,OAAO4J,aAAaG,wBACzBoS,UAAA,MACLi1B,GAAQuS,EAAIQ,WAAWloC,GAAKE,UAAA,MAAA,QAAA,OAAAA,UAEPwnC,EAAIS,WAAU,QAA7BC,SACNjT,GAAQA,IAASiT,EACjBrkD,OAAO4J,aAAaC,qBAAsB85C,EAAI3uD,SAASo8C,KAAQ,QAAA,GAE5DA,IAAKj1B,UAAA,MAAA,MACF,IAAIC,oEAAmE,QAAA,yBAG1Eg1B,IAAK,QAAA,UAAA,0BACb,OAAA,gBAAA,mCAAAuS,EAEMa,WAAP,SAAkBX,EAAeC,GAC/B,gBADgBD,IAAAA,gBAAeC,IAAAA,cACxBH,EAAIC,aAAaC,EAASC,IAClCH,EAEYc,wBAAY,kBAAzB,WAA0BZ,EAAeC,GAAO,6BAAA,OAAA,sBAAA,OAAA,gBAAtBD,IAAAA,gBAAeC,IAAAA,cAAOrW,SAC5BkW,EAAIC,aAAaC,EAASC,GAAQ,OAA3C,gCACEzyC,KAAG,OAAA,UAAA,0BACf,OAAA,cAAA,mCAAAsyC,EAEMe,aAAP,SAAoBpmD,EAAUskB,EAAaihC,EAAeC,EAAsBC,GAE9E,YAF4BnhC,IAAAA,GAAO,YAAMihC,IAAAA,gBAAeC,IAAAA,cACxD1S,GAAQ9yC,EACHskB,EACL,GAAIoH,EAAK/O,OAAQ,CACf,IAAMgpC,EAAiBJ,MAAWC,EAClCC,EAAGO,cAAcL,EAAaN,EAAI3uD,SAASo8C,KAC3C2S,EAAGQ,UAAUN,EAAa,UAE1BjkD,OAAO4J,aAAaC,qBAAsB85C,EAAI3uD,SAASo8C,MAE1DuS,EAEM3uD,SAAP,SAAgBsJ,GACd,OAAOwB,KAAKC,UAAUzB,IACvBqlD,EAEMh0B,MAAP,SAAarxB,GACX,IAAMA,IAAOA,EAAI+S,IACf,MAAM,IAAI+K,uBAEZ,OAAO9d,EAAI+S,KAEZsyC,EAEMQ,WAAP,SAAkBloC,GAChB,OAAOnc,KAAK+E,MAAMoX,IACnB0nC,EAEMS,SAAP,WACE,OAAO/oD,EAAIiS,IAAI0D,QAChB2yC,EAEYzyC,gBAAI,kBAAjB,WAAkBnV,EAAUiV,GAAS,6BAAA,OAAA,sBAAA,OAAA,OAAAu8B,SACjBlyC,EAAIiS,IAAI4D,KAAKnV,EAAKiV,GAAK,OAAhC,qCACK,OAAA,UAAA,0BACf,OAAA,cAAA,mCAAA2yC,EAEM9vC,OAAP,SAAc9X,EAAUg+B,GACtB,OAAO1+B,EAAIiS,IAAIuG,OAAO9X,EAAItH,MAAM,GAAIslC,SEnFlC4qB,uBAEAC,uBAAgB,aAAA,qCAAA,4FAAQxoC,QAoCxByoC,cAKJ,WAAYx5C,GAGV,GAFApS,KAAK6rD,WAAaz5C,EAAIy5C,WACtB7rD,KAAK8gC,OAAS1uB,EAAI0uB,OACd1uB,EAAIyI,IAAK,CACX,oBAAWzI,EAAIyI,IACb,MAAM,IAAI8wC,+CAEZ3rD,KAAK6a,IAAMzI,EAAIyI,IACf7a,KAAK+iB,UAEP/iB,KAAK8rD,YACNF,EAEMG,UAAP,SAAiBC,GAGf,IAFA,IAAMj4C,EAAM,GACN5V,EAAOV,OAAOU,KAAK6tD,GAChB7uD,EAAI,EAAEA,EAAIgB,EAAKxB,OAAOQ,IAAK,CAClC,IAAMqpB,EAAOroB,EAAKhB,GACZ6jB,EAAQgrC,EAAkB7tD,EAAKhB,IACrC,oBAAW6jB,EACTjN,EAAI3V,KAAK,IAAI60B,EAAUzM,EAAMxF,SAE7B,IAAK,IAAIgH,EAAI,EAAEA,EAAIhH,EAAMrkB,OAAOqrB,IAE9BjU,EAAI3V,KAAK,IAAI60B,EAAUzM,EADFxF,EAAMgH,KAKjC,OAAOjU,GACR63C,EAEMK,aAAP,SAAoBD,SAClB,aACI5mB,OAAOC,iCAAQ,gBAAA,6BAAA,OAAA,sBAAA,OACTlnC,EAAOV,OAAOU,KAAK6tD,GAChB7uD,EAAI,EAAC,OAAA,KAACA,EAAIgB,EAAKxB,SAAMumB,UAAA,MAEY,GADlCsD,EAAOroB,EAAKhB,oBACZ6jB,EAAQgrC,EAAkB7tD,EAAKhB,MACR+lB,UAAA,MAC3B,OAD2BA,SACrB,IAAI+P,EAAUzM,EAAMxF,GAAM,OAAAkC,UAAA,MAAA,QAEvB8E,EAAI,EAAC,QAAA,KAACA,EAAIhH,EAAMrkB,SAAMumB,UAAA,MAE7B,OADMgpC,EAAelrC,EAAMgH,GAAE9E,UACvB,IAAI+P,EAAUzM,EAAM0lC,GAAa,QAFTlkC,IAAG9E,UAAA,MAAA,QANR/lB,IAAG+lB,SAAA,MAAA,QAAA,UAAA,4BAcvC,kBAsPA,OAtPAoQ,EAED64B,kBAAA,WACE,OAAOP,EAAcK,aAAajsD,KAAK6rD,WAAWO,SACnD94B,EAED+4B,qBAAA,WACE,OAAOT,EAAcK,aAAajsD,KAAK6rD,WAAWhT,YACnDvlB,EAEDg5B,eAAA,WACE,OAAOV,EAAcG,UAAU/rD,KAAK6rD,WAAWO,SAChD94B,EAEDi5B,kBAAA,WACE,OAAOvsD,KAAK6rD,WAAWhT,UAAY+S,EAAcG,UAAU/rD,KAAK6rD,WAAWhT,WAAa,IACzFvlB,EAEDk5B,eAAA,WACE,OAAOxsD,KAAK8gC,QAEbxN,EAEDw4B,UAAA,WACE,IAAK9rD,KAAK6rD,WAAa,MAAM,IAAIF,GAAmBD,0BACpD,oBAAW1rD,KAAK6rD,WAA0B,MAAM,IAAIF,GAAmBD,oCACvE,IAAM/gD,EAAI3K,KAAK6rD,WAEf,IAAKlhD,EAAE6b,KAAO,MAAM,IAAImlC,GAAmBD,+BAC3C,IAAK/gD,EAAEyhD,OAAS,MAAM,IAAIT,GAAmBD,sBAC7C,oBAAW/gD,EAAEyhD,OAAsB,MAAM,IAAIT,GAAmBD,6BAChE,GAAI/jD,MAAM4O,QAAQ5L,EAAEyhD,QAAU,MAAM,IAAIT,GAAmBD,mCAC3D,GAAqC,IAAjCjuD,OAAOU,KAAKwM,EAAEyhD,QAAQzvD,OAAe,MAAM,IAAIgvD,GAAmBD,oBAItE,IAAK,IAAMe,KAHPzsD,KAAK8gC,SACP9gC,KAAK0sD,cAAgB1sD,KAAKwsD,kBAET7hD,EAAEyhD,OAAQ,CAC3B,IAAMvvD,SAAW8N,EAAEyhD,OAAOK,GAC1B,cAAI5vD,EAAgB,CAClB,IAAI8K,MAAM4O,QAAQ5L,EAAEyhD,OAAOK,IAQzB,MAAM,IAAId,GAAmBD,qDAA0De,OAAS9hD,EAAEyhD,OAAOK,IAPzG,IAAK,IAAItvD,EAAI,EAAEA,EAAIwN,EAAEyhD,OAAOK,GAAM9vD,OAAOQ,IAAK,CAC5C,oBAAWwN,EAAEyhD,OAAOK,GAAMtvD,GAAkB,MAAM,IAAIwuD,GAAmBD,4CAAiDe,QAAU9hD,EAAEyhD,OAAOK,GAAMtvD,QACnJ,GAAiC,IAA7BwN,EAAEyhD,OAAOK,GAAMtvD,GAAGR,OACpB,MAAM,IAAIgvD,GAAmBD,cAAmBe,eAAiBtvD,iBAOzE,aAAIsvD,EAAkB,CACpB,cAAI5vD,EAAiB,MAAM,IAAI8uD,GAAmBD,wCAA6C7uD,GAC/F,GAAImD,KAAK0sD,eAAiB/hD,EAAEyhD,OAAOK,KAAUzsD,KAAK0sD,cAAgB,MAAM,IAAIf,GAAmBD,yEAGnG,GAAI/gD,EAAEkuC,UAAW,CACf,oBAAWluC,EAAEkuC,UAAyB,MAAM,IAAI8S,GAAmBD,gCACnE,GAAI/jD,MAAM4O,QAAQ5L,EAAEkuC,WAAa,MAAM,IAAI8S,GAAmBD,sCAC9D,GAAwC,IAApCjuD,OAAOU,KAAKwM,EAAEkuC,WAAWl8C,OAAe,MAAM,IAAIgvD,GAAmBD,uBACzE,IAAK,IAAMe,KAAQ9hD,EAAEkuC,UAEnB,oBADiBluC,EAAEkuC,UAAU4T,GACT,CAClB,IAAI9kD,MAAM4O,QAAQ5L,EAAEkuC,UAAU4T,IAQ5B,MAAM,IAAId,GAAmBD,wDAA6De,OAAS9hD,EAAEkuC,UAAU4T,IAP/G,IAAK,IAAItvD,EAAI,EAAEA,EAAIwN,EAAEkuC,UAAU4T,GAAM9vD,OAAOQ,IAAK,CAC/C,oBAAWwN,EAAEkuC,UAAU4T,GAAMtvD,GAAkB,MAAM,IAAIwuD,GAAmBD,+CAAoDe,QAAU9hD,EAAEkuC,UAAU4T,GAAMtvD,QAC5J,GAAoC,IAAhCwN,EAAEkuC,UAAU4T,GAAMtvD,GAAGR,OACvB,MAAM,IAAIgvD,GAAmBD,iBAAsBe,eAAiBtvD,kBAShF,IAAMwN,EAAEyE,OAAQzE,EAAEgiD,UAAa,MAAM,IAAIhB,GAAmBD,0BAE5D,IAAKxsD,KAAK0M,MAAMjB,EAAEyE,MAAQzE,EAAEgiD,WAAa,MAAM,IAAIhB,GAAmBD,0BAEtE,cAAI/gD,EAAE6b,KAAmB,CACvB,GAAImB,MAAMhd,EAAEiiD,QAAU,MAAM,IAAIjB,GAAmBD,sBACnD,GAAI/jC,MAAMhd,EAAEkiD,WAAa,MAAM,IAAIlB,GAAmBD,yBACtD,GAAI/jC,MAAMhd,EAAEmiD,WAAa,MAAM,IAAInB,GAAmBD,yBACtD,GAAI/gD,EAAEiiD,OAASjiD,EAAEkiD,UAAY,MAAM,IAAIlB,GAAmBD,iCAC1D,GAAI/gD,EAAEiiD,OAASjiD,EAAEmiD,UAAY,MAAM,IAAInB,GAAmBD,iCAC1D,oBAAW/gD,EAAEiX,UAAyBjX,EAAEiX,QAAQjlB,OAAS,MAAM,IAAIgvD,GAAmBD,iDAGxF,qBAAI/gD,EAAE6b,yBAA2B7b,EAAE6b,OAC7B7b,EAAEkuC,UAAUl8C,OAAS,EAAI,MAAM,IAAIgvD,GAAmBD,yFAA8F/gD,EAAEkuC,WAG5J,OAAO,GACRvlB,EAEDy5B,WAAA,WACE,iBAAO/sD,KAAK6rD,WAAWrlC,MAAqBxmB,KAAK6rD,WAAWe,QAAU5sD,KAAK6rD,WAAWgB,UAAY7sD,KAAK6rD,WAAWiB,WAAa,GAChIx5B,EAED05B,WAAA,WACE,iBAAOhtD,KAAK6rD,WAAWrlC,MAAqBxmB,KAAK6rD,WAAWe,QAAU5sD,KAAK6rD,WAAWgB,UAAY7sD,KAAK6rD,WAAWiB,WAAa,GAChIx5B,EAED25B,UAAA,WACE,iBAAOjtD,KAAK6rD,WAAWrlC,MAAqBxmB,KAAK6rD,WAAWe,UAAY5sD,KAAK6rD,WAAWgB,UAAY7sD,KAAK6rD,WAAWiB,WAAa,GAGnIx5B,EAGMrb,KAAI,WAAA,kBAAV,WAAW5S,GAAG,6BAAA,OAAA,sBAAA,OAAA,OAAAmvC,SACKkW,GAAIzyC,KAAKjY,KAAK6rD,WAAYxmD,GAAI,OACzB,OADtBrF,KAAK6a,WACL7a,KAAK8gC,OAASz7B,EAAI+S,IAAIo8B,SAChBx0C,KAAK+iB,UAAS,OAAA,0BACb,GAAI,OAAA,UAAA,+BACZ,OAAA,YAAA,gCALS,GAOV6oC,EAMatpD,OAAM,WAAA,kBAAnB,WAAoBupD,EAAYqB,GAAU,MAAA,6BAAA,OAAA,sBAAA,OAKC,IAJpCrB,EAAWO,QAAUc,IACxBrB,EAAWO,OAAS,CAACr5B,MAAO23B,GAAIh0B,MAAMw2B,KAExCrB,EAAWz8C,KAAOy8C,EAAWz8C,OAAS,IAAIlQ,MAAQuxB,cAC5C1jB,EAAI,IAAI6+C,EAAc,CAACC,WAAAA,KACzBqB,GAAU5Y,SAAA,MAAA,OAAAA,SACNvnC,EAAEkL,KAAKi1C,GAAW,OAAA,yBAEnBngD,GAAC,OAAA,UAAA,0BACT,OAAA,cAAA,gCAVkB,GAUlB6+C,EAEMuB,mBAAP,SAA0BtB,EAAYqB,GAEpC,OADArB,EAAWrlC,oBACJolC,EAActpD,OAAOupD,EAAYqB,IACzCtB,EAEMwB,aAAP,SAAoBvB,EAAYqB,GAK9B,OAJArB,EAAWrlC,cACXqlC,EAAWjqC,QAAUiqC,EAAWjqC,gBAChCiqC,EAAWgB,UAAYhB,EAAWgB,WAAa,GAC/ChB,EAAWiB,UAAYjB,EAAWiB,YAAc,GACzClB,EAActpD,OAAOupD,EAAYqB,IACzC55B,EAED+5B,UAAA,SAAUl7C,GACR,cAAgBnS,KAAKmsD,oCAAqB,CAAA,IAA/B9hD,UACT,GAAIA,EAAEgpB,eACJ,OAAOlhB,EAAMm7C,YAAYjjD,KAG9BipB,EAEDi6B,aAAA,SAAap7C,GACX,GAAKnS,KAAK6rD,WAAWhT,UAGrB,cAAgB74C,KAAKqsD,uCAAwB,CAAA,IAAlChiD,UACT,GAAIA,EAAEgpB,eACJ,OAAOlhB,EAAMm7C,YAAYjjD,KAK/BipB,EAGMvQ,QAAO,WAAA,kBAAb,aAAA,6BAAA,OAAA,sBAAA,OAAA,IACM/iB,KAAK6a,KAAQ7a,KAAK9C,MAAIg5B,SAAA,MAAA,OAAAA,SACNnF,EAAKhO,QAAQ/iB,KAAK6a,KAAI,OAAxC7a,KAAK9C,YAAI,OAAA,yBAEJ8C,KAAK9C,MAAI,OAAA,UAAA,+BACjB,OAAA,WAAA,gCALY,GAKZo2B,EAEDoD,MAAA,WACE,OAAO12B,KAAK+iB,WACb6oC,EAEY4B,mBAAO,kBAApB,WAAqBp7C,GAAG,MAAA,6BAAA,OAAA,sBAAA,OAAA,GACjBA,EAAIyI,KAAG+b,SAAA,MAAA,MACJ,IAAIzT,qCAAsC/Q,GAAI,OAAA,GAEjDA,EAAI0uB,QAAMlK,SAAA,MAAA,MACP,IAAIzT,mCAAkC,OAIU,OADlD0oC,EAAahlD,KAAK+E,MAAMwG,EAAIyI,IAAIrf,MAAM,IAAIuR,oBAEzC,IAAI6+C,EADD,CAACC,WAAAA,EAAYhxC,IAAKzI,EAAIyI,IAAKimB,OAAQ1uB,EAAI0uB,UACtB,OAAA,UAAA,0BAC5B,OAAA,YAAA,mCAEDxN,EAGM1Y,OAAM,WAAA,kBAAZ,aAAA,6BAAA,OAAA,sBAAA,OAAA,GACO5a,KAAK8gC,QAAMhK,SAAA,MAAA,MACR,IAAI60B,GAAmBD,oCAAwC,OAAA,GAElE1rD,KAAK6a,KAAGic,SAAA,MAAA,MACL,IAAI60B,GAAmBD,iCAAqC,OAAA,OAAA50B,SAE5C4zB,GAAI9vC,OAAO5a,KAAK6a,IAAK7a,KAAK8gC,QAAO,OAA1C,GAAf9gC,KAAK6rD,kBACA7rD,KAAK6rD,YAAU/0B,SAAA,MAAA,MACZ,IAAI60B,GAAmBD,yBAA6B,OAAA,IAExD1rD,KAAK9C,MAAI45B,UAAA,MACE,OADFA,KACP92B,KAAK9C,KAAI45B,UAAY/F,EAAKhO,QAAQ/iB,KAAK6a,KAAI,QAAA,GAAAic,yBAAAA,UAAA,MAAA,MACvC,IAAI60B,GAAmBD,4BAAgC,QAAA50B,UAAA,MAAA,QAG/D92B,KAAK+iB,UAAU,QAAA,0BAEV,GAAI,QAAA,UAAA,+BACZ,OAAA,WAAA,gCAnBW,GAqBZuQ,EAGA8Z,UAAA,WACE,MAAO,CAACvyB,IAAK7a,KAAK6a,IAAKimB,OAAQ9gC,KAAK8gC,SACrCxN,EAEDv3B,SAAA,WACE,OAAO8K,KAAKC,UAAU9G,KAAKotC,cAG7Bwe,EAGaje,YAAW,WAAA,kBAAxB,WAAyBpxC,GAAC,6BAAA,OAAA,sBAAA,OAAA,yBACjBqvD,EAAc4B,QAAQjxD,IAAE,OAAA,UAAA,0BAChC,OAAA,YAAA,gCAFuB,GAEvBqvD,EAEYV,sBAAU,kBAAvB,WAAwB3uD,GAAC,6BAAA,OAAA,sBAAA,OAAA,yBAChBqvD,EAAc4B,QAAQ3mD,KAAK+E,MAAMrP,KAAG,OAAA,UAAA,0BAC5C,OAAA,YAAA,mCAAAqvD,EAEY6B,uBAAW,kBAAxB,WAAyBxqD,EAAKH,EAAK4qD,GAAQ,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAt2B,SACtBt0B,EAAIigB,UAAS,OAA1B7lB,SACN+F,EAAIY,iBAAiBA,IAAI3G,GAAMkG,IAAIsqD,GACnCzqD,EAAIY,iBAAiBA,IAAI3G,GAAMkG,IAAIsqD,GACnCzqD,EAAIY,sBAAsBA,IAAI3G,GAAM2G,iBAAiBA,IAAI7D,KAAK2tD,YAAY3sC,OAAO5d,IAAIsqD,GACrFzqD,EAAIY,sBAAsBA,IAAI3G,GAAM2G,iBAAiBA,IAAI7D,KAAK2tD,YAAY3sC,OAAO5d,IAAIsqD,GAAU,OAAA,UAAA,+BAChG,OAAA,gBAAA,kDCrUY,CACbvZ,MAAAA,EACAv/B,OAAAA,EAEA4lC,MAAAA,GACA/9B,OAAQ8T,EACRq9B,QAAS5V,EACT6V,OAAQC,GACRhI,SAAAA,GACAp+C,MAAAA,EACA+rB,QAAAA,GACA1C,KAAAA,EACAm3B,cAAAA,GAEA7zC,IAAKjS,EAAIiS,IACTjS,IAAAA,EACAwpD,cAAAA,GACAh4B,QAAAA,EACAtgB,KAAAA"} \ No newline at end of file diff --git a/iris-lib/src/Channel.ts b/iris-lib/src/Channel.ts index de11acbf..e4cdd549 100644 --- a/iris-lib/src/Channel.ts +++ b/iris-lib/src/Channel.ts @@ -99,6 +99,7 @@ class Channel { latest: any; uuid: any; name: any; + attachments: any; theirSecretUuids = {}; theirGroupSecrets = {}; diff --git a/src/js/views/settings/PeerSettings.tsx b/src/js/views/settings/PeerSettings.jsx similarity index 99% rename from src/js/views/settings/PeerSettings.tsx rename to src/js/views/settings/PeerSettings.jsx index e2af1eb9..d810c7a0 100644 --- a/src/js/views/settings/PeerSettings.tsx +++ b/src/js/views/settings/PeerSettings.jsx @@ -9,8 +9,8 @@ import $ from "jquery"; import Button from "../../components/basic/Button"; export default class PeerSettings extends Component { - state = iris.session.DEFAULT_SETTINGS; updatePeersFromGunInterval = 0; + state = iris.session.DEFAULT_SETTINGS; componentDidMount() { iris.local().get('settings').on(this.sub(local => { @@ -41,7 +41,7 @@ export default class PeerSettings extends Component {

{t('maximum_number_of_peer_connections')}

{ - const target = e.target as HTMLInputElement; + const target = e.target; iris.local().get('settings').get('maxConnectedPeers').put(target.value || 0); }}/>