diff --git a/.babelrc b/.babelrc index b61ae9684..a09963d4e 100644 --- a/.babelrc +++ b/.babelrc @@ -1,14 +1,9 @@ { "presets": [ - [ - "@babel/preset-env", - { - "targets": "> 0.25%, not dead" - } - ] + "@babel/typescript", + "@babel/preset-env" ], "plugins": [ - "@babel/plugin-transform-runtime", "@babel/plugin-proposal-class-properties", "angularjs-annotate" ] diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 000000000..b9145d54f --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,6 @@ +chrome 80 # electron 8.2 +last 2 Firefox versions +last 2 Edge versions +last 2 Safari versions +last 2 Opera versions +Firefox ESR diff --git a/.eslintrc b/.eslintrc index 137b28126..657cd2c81 100644 --- a/.eslintrc +++ b/.eslintrc @@ -4,7 +4,7 @@ "rules": { "standard/no-callback-literal": 0, // Disable this as we have too many callbacks relying on literals "no-throw-literal": 0, - "no-console": "error", + // "no-console": "error", "semi": 1 }, "env": { diff --git a/app/assets/javascripts/app.js b/app/assets/javascripts/app.js deleted file mode 100644 index 0bd305c03..000000000 --- a/app/assets/javascripts/app.js +++ /dev/null @@ -1,165 +0,0 @@ -'use strict'; - -import angular from 'angular'; -import { configRoutes } from './routes'; - -import { - AppState -} from './state'; - -import { - Root, - TagsPanel, - NotesPanel, - EditorPanel, - Footer, - LockScreen -} from './controllers'; - -import { - autofocus, - clickOutside, - delayHide, - elemReady, - fileChange, - infiniteScroll, - lowercase, - selectOnClick, - snEnter -} from './directives/functional'; - -import { - AccountMenu, - ActionsMenu, - ComponentModal, - ComponentView, - ConflictResolutionModal, - EditorMenu, - InputModal, - MenuRow, - PanelResizer, - PasswordWizard, - PermissionsModal, - PrivilegesAuthModal, - PrivilegesManagementModal, - RevisionPreviewModal, - SessionHistoryMenu, - SyncResolutionMenu -} from './directives/views'; - -import { trusted } from './filters'; - -import { - ActionsManager, - ArchiveManager, - AuthManager, - ComponentManager, - DBManager, - DesktopManager, - HttpManager, - KeyboardManager, - MigrationManager, - ModelManager, - NativeExtManager, - PasscodeManager, - PrivilegesManager, - SessionHistory, - SingletonManager, - StatusManager, - StorageManager, - SyncManager, - ThemeManager, - AlertManager, - PreferencesManager -} from './services'; - -angular.module('app', ['ngSanitize']); - -// Config -angular - .module('app') - .config(configRoutes) - .constant('appVersion', __VERSION__); - -// Controllers -angular - .module('app') - .directive('root', () => new Root()) - .directive('tagsPanel', () => new TagsPanel()) - .directive('notesPanel', () => new NotesPanel()) - .directive('editorPanel', () => new EditorPanel()) - .directive('footer', () => new Footer()) - .directive('lockScreen', () => new LockScreen()); - -// Directives - Functional -angular - .module('app') - .directive('snAutofocus', ['$timeout', autofocus]) - .directive('clickOutside', ['$document', clickOutside]) - .directive('delayHide', delayHide) - .directive('elemReady', elemReady) - .directive('fileChange', fileChange) - .directive('infiniteScroll', [ - '$rootScope', - '$window', - '$timeout', - infiniteScroll - ]) - .directive('lowercase', lowercase) - .directive('selectOnClick', ['$window', selectOnClick]) - .directive('snEnter', snEnter); - -// Directives - Views -angular - .module('app') - .directive('accountMenu', () => new AccountMenu()) - .directive('actionsMenu', () => new ActionsMenu()) - .directive('componentModal', () => new ComponentModal()) - .directive( - 'componentView', - ($rootScope, componentManager, desktopManager, $timeout) => - new ComponentView($rootScope, componentManager, desktopManager, $timeout) - ) - .directive('conflictResolutionModal', () => new ConflictResolutionModal()) - .directive('editorMenu', () => new EditorMenu()) - .directive('inputModal', () => new InputModal()) - .directive('menuRow', () => new MenuRow()) - .directive('panelResizer', () => new PanelResizer()) - .directive('passwordWizard', () => new PasswordWizard()) - .directive('permissionsModal', () => new PermissionsModal()) - .directive('privilegesAuthModal', () => new PrivilegesAuthModal()) - .directive('privilegesManagementModal', () => new PrivilegesManagementModal()) - .directive('revisionPreviewModal', () => new RevisionPreviewModal()) - .directive('sessionHistoryMenu', () => new SessionHistoryMenu()) - .directive('syncResolutionMenu', () => new SyncResolutionMenu()); - -// Filters -angular - .module('app') - .filter('trusted', ['$sce', trusted]); - -// Services -angular - .module('app') - .service('appState', AppState) - .service('preferencesManager', PreferencesManager) - .service('actionsManager', ActionsManager) - .service('archiveManager', ArchiveManager) - .service('authManager', AuthManager) - .service('componentManager', ComponentManager) - .service('dbManager', DBManager) - .service('desktopManager', DesktopManager) - .service('httpManager', HttpManager) - .service('keyboardManager', KeyboardManager) - .service('migrationManager', MigrationManager) - .service('modelManager', ModelManager) - .service('nativeExtManager', NativeExtManager) - .service('passcodeManager', PasscodeManager) - .service('privilegesManager', PrivilegesManager) - .service('sessionHistory', SessionHistory) - .service('singletonManager', SingletonManager) - .service('statusManager', StatusManager) - .service('storageManager', StorageManager) - .service('syncManager', SyncManager) - .service('alertManager', AlertManager) - .service('themeManager', ThemeManager); diff --git a/app/assets/javascripts/app.ts b/app/assets/javascripts/app.ts new file mode 100644 index 000000000..64fb23e63 --- /dev/null +++ b/app/assets/javascripts/app.ts @@ -0,0 +1,123 @@ +'use strict'; + +declare const __VERSION__: string + +import angular from 'angular'; +import { configRoutes } from './routes'; + +import { ApplicationGroup } from './ui_models/application_group'; + +import { + ApplicationGroupView, + ApplicationView, + EditorGroupView, + EditorView, + TagsView, + NotesView, + FooterView, + ChallengeModal +} from '@/views'; + +import { + autofocus, + clickOutside, + delayHide, + elemReady, + fileChange, + infiniteScroll, + lowercase, + selectOnFocus, + snEnter +} from './directives/functional'; + +import { + AccountMenu, + ActionsMenu, + ComponentModal, + ComponentView, + EditorMenu, + InputModal, + MenuRow, + PanelResizer, + PasswordWizard, + PermissionsModal, + PrivilegesAuthModal, + PrivilegesManagementModal, + RevisionPreviewModal, + SessionHistoryMenu, + SyncResolutionMenu +} from './directives/views'; + +import { trusted } from './filters'; +import { isDev } from './utils'; + +angular.module('app', ['ngSanitize']); + +// Config +angular + .module('app') + .config(configRoutes) + .constant('appVersion', __VERSION__); + +// Controllers +angular + .module('app') + .directive('applicationGroupView', () => new ApplicationGroupView()) + .directive('applicationView', () => new ApplicationView()) + .directive('editorGroupView', () => new EditorGroupView()) + .directive('editorView', () => new EditorView()) + .directive('tagsView', () => new TagsView()) + .directive('notesView', () => new NotesView()) + .directive('footerView', () => new FooterView()) + +// Directives - Functional +angular + .module('app') + .directive('snAutofocus', ['$timeout', autofocus]) + .directive('clickOutside', ['$document', clickOutside]) + .directive('delayHide', delayHide) + .directive('elemReady', elemReady) + .directive('fileChange', fileChange) + .directive('infiniteScroll', [infiniteScroll]) + .directive('lowercase', lowercase) + .directive('selectOnFocus', ['$window', selectOnFocus]) + .directive('snEnter', snEnter); + +// Directives - Views +angular + .module('app') + .directive('accountMenu', () => new AccountMenu()) + .directive('actionsMenu', () => new ActionsMenu()) + .directive('challengeModal', () => new ChallengeModal()) + .directive('componentModal', () => new ComponentModal()) + .directive('componentView', () => new ComponentView()) + .directive('editorMenu', () => new EditorMenu()) + .directive('inputModal', () => new InputModal()) + .directive('menuRow', () => new MenuRow()) + .directive('panelResizer', () => new PanelResizer()) + .directive('passwordWizard', () => new PasswordWizard()) + .directive('permissionsModal', () => new PermissionsModal()) + .directive('privilegesAuthModal', () => new PrivilegesAuthModal()) + .directive('privilegesManagementModal', () => new PrivilegesManagementModal()) + .directive('revisionPreviewModal', () => new RevisionPreviewModal()) + .directive('sessionHistoryMenu', () => new SessionHistoryMenu()) + .directive('syncResolutionMenu', () => new SyncResolutionMenu()); + +// Filters +angular + .module('app') + .filter('trusted', ['$sce', trusted]); + +// Services +angular.module('app').service('mainApplicationGroup', ApplicationGroup); + +// Debug +if (isDev) { + Object.defineProperties(window, { + application: { + get: () => + (angular.element(document).injector().get('mainApplicationGroup') as any) + .application, + }, + }); +} diff --git a/app/assets/javascripts/controllers/abstract/pure_ctrl.js b/app/assets/javascripts/controllers/abstract/pure_ctrl.js deleted file mode 100644 index f2ee6e7ee..000000000 --- a/app/assets/javascripts/controllers/abstract/pure_ctrl.js +++ /dev/null @@ -1,28 +0,0 @@ -export class PureCtrl { - constructor( - $timeout - ) { - if(!$timeout) { - throw 'Invalid PureCtrl construction.'; - } - this.$timeout = $timeout; - this.state = {}; - this.props = {}; - } - - async setState(state) { - return new Promise((resolve) => { - this.$timeout(() => { - this.state = Object.freeze(Object.assign({}, this.state, state)); - resolve(); - }); - }); - } - - initProps(props) { - if (Object.keys(this.props).length > 0) { - throw 'Already init-ed props.'; - } - this.props = Object.freeze(Object.assign({}, this.props, props)); - } -} \ No newline at end of file diff --git a/app/assets/javascripts/controllers/footer.js b/app/assets/javascripts/controllers/footer.js deleted file mode 100644 index 8e086ddfc..000000000 --- a/app/assets/javascripts/controllers/footer.js +++ /dev/null @@ -1,382 +0,0 @@ -import { PrivilegesManager } from '@/services/privilegesManager'; -import { dateToLocalizedString } from '@/utils'; -import template from '%/footer.pug'; -import { - APP_STATE_EVENT_EDITOR_FOCUSED, - APP_STATE_EVENT_BEGAN_BACKUP_DOWNLOAD, - APP_STATE_EVENT_ENDED_BACKUP_DOWNLOAD, - EVENT_SOURCE_USER_INTERACTION -} from '@/state'; -import { - STRING_GENERIC_SYNC_ERROR, - STRING_NEW_UPDATE_READY -} from '@/strings'; - -class FooterCtrl { - - /* @ngInject */ - constructor( - $rootScope, - $timeout, - alertManager, - appState, - authManager, - componentManager, - modelManager, - nativeExtManager, - passcodeManager, - privilegesManager, - statusManager, - syncManager, - ) { - this.$rootScope = $rootScope; - this.$timeout = $timeout; - this.alertManager = alertManager; - this.appState = appState; - this.authManager = authManager; - this.componentManager = componentManager; - this.modelManager = modelManager; - this.nativeExtManager = nativeExtManager; - this.passcodeManager = passcodeManager; - this.privilegesManager = privilegesManager; - this.statusManager = statusManager; - this.syncManager = syncManager; - - this.rooms = []; - this.themesWithIcons = []; - this.showSyncResolution = false; - - this.addAppStateObserver(); - this.updateOfflineStatus(); - this.addSyncEventHandler(); - this.findErrors(); - this.registerMappingObservers(); - this.registerComponentHandler(); - this.addRootScopeListeners(); - - this.authManager.checkForSecurityUpdate().then((available) => { - this.securityUpdateAvailable = available; - }); - this.statusManager.addStatusObserver((string) => { - this.$timeout(() => { - this.arbitraryStatusMessage = string; - }); - }); - } - - addRootScopeListeners() { - this.$rootScope.$on("security-update-status-changed", () => { - this.securityUpdateAvailable = this.authManager.securityUpdateAvailable; - }); - this.$rootScope.$on("reload-ext-data", () => { - this.reloadExtendedData(); - }); - this.$rootScope.$on("new-update-available", () => { - this.$timeout(() => { - this.onNewUpdateAvailable(); - }); - }); - } - - addAppStateObserver() { - this.appState.addObserver((eventName, data) => { - if(eventName === APP_STATE_EVENT_EDITOR_FOCUSED) { - if (data.eventSource === EVENT_SOURCE_USER_INTERACTION) { - this.closeAllRooms(); - this.closeAccountMenu(); - } - } else if(eventName === APP_STATE_EVENT_BEGAN_BACKUP_DOWNLOAD) { - this.backupStatus = this.statusManager.addStatusFromString( - "Saving local backup..." - ); - } else if(eventName === APP_STATE_EVENT_ENDED_BACKUP_DOWNLOAD) { - if(data.success) { - this.backupStatus = this.statusManager.replaceStatusWithString( - this.backupStatus, - "Successfully saved backup." - ); - } else { - this.backupStatus = this.statusManager.replaceStatusWithString( - this.backupStatus, - "Unable to save local backup." - ); - } - this.$timeout(() => { - this.backupStatus = this.statusManager.removeStatus(this.backupStatus); - }, 2000); - } - }); - } - - addSyncEventHandler() { - this.syncManager.addEventHandler((syncEvent, data) => { - this.$timeout(() => { - if(syncEvent === "local-data-loaded") { - if(this.offline && this.modelManager.noteCount() === 0) { - this.showAccountMenu = true; - } - } else if(syncEvent === "enter-out-of-sync") { - this.outOfSync = true; - } else if(syncEvent === "exit-out-of-sync") { - this.outOfSync = false; - } else if(syncEvent === 'sync:completed') { - this.syncUpdated(); - this.findErrors(); - this.updateOfflineStatus(); - } else if(syncEvent === 'sync:error') { - this.findErrors(); - this.updateOfflineStatus(); - } - }); - }); - } - - registerMappingObservers() { - this.modelManager.addItemSyncObserver( - 'room-bar', - 'SN|Component', - (allItems, validItems, deletedItems, source) => { - this.rooms = this.modelManager.components.filter((candidate) => { - return candidate.area === 'rooms' && !candidate.deleted; - }); - if(this.queueExtReload) { - this.queueExtReload = false; - this.reloadExtendedData(); - } - } - ); - - this.modelManager.addItemSyncObserver( - 'footer-bar-themes', - 'SN|Theme', - (allItems, validItems, deletedItems, source) => { - const themes = this.modelManager.validItemsForContentType('SN|Theme') - .filter((candidate) => { - return ( - !candidate.deleted && - candidate.content.package_info && - candidate.content.package_info.dock_icon - ); - }).sort((a, b) => { - return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; - }); - const differ = themes.length !== this.themesWithIcons.length; - this.themesWithIcons = themes; - if(differ) { - this.reloadDockShortcuts(); - } - } - ); - } - - registerComponentHandler() { - this.componentManager.registerHandler({ - identifier: "roomBar", - areas: ["rooms", "modal"], - activationHandler: (component) => {}, - actionHandler: (component, action, data) => { - if(action === "set-size") { - component.setLastSize(data); - } - }, - focusHandler: (component, focused) => { - if(component.isEditor() && focused) { - this.closeAllRooms(); - this.closeAccountMenu(); - } - } - }); - } - - reloadExtendedData() { - if(this.reloadInProgress) { - return; - } - this.reloadInProgress = true; - - /** - * A reload consists of opening the extensions manager, - * then closing it after a short delay. - */ - const extWindow = this.rooms.find((room) => { - return room.package_info.identifier === this.nativeExtManager.extManagerId; - }); - if(!extWindow) { - this.queueExtReload = true; - this.reloadInProgress = false; - return; - } - this.selectRoom(extWindow); - this.$timeout(() => { - this.selectRoom(extWindow); - this.reloadInProgress = false; - this.$rootScope.$broadcast('ext-reload-complete'); - }, 2000); - } - - getUser() { - return this.authManager.user; - } - - updateOfflineStatus() { - this.offline = this.authManager.offline(); - } - - openSecurityUpdate() { - this.authManager.presentPasswordWizard('upgrade-security'); - } - - findErrors() { - this.error = this.syncManager.syncStatus.error; - } - - accountMenuPressed() { - this.showAccountMenu = !this.showAccountMenu; - this.closeAllRooms(); - } - - toggleSyncResolutionMenu = () => { - this.showSyncResolution = !this.showSyncResolution; - } - - closeAccountMenu = () => { - this.showAccountMenu = false; - } - - hasPasscode() { - return this.passcodeManager.hasPasscode(); - } - - lockApp() { - this.$rootScope.lockApplication(); - } - - refreshData() { - this.isRefreshing = true; - this.syncManager.sync({ - force: true, - performIntegrityCheck: true - }).then((response) => { - this.$timeout(() => { - this.isRefreshing = false; - }, 200); - if(response && response.error) { - this.alertManager.alert({ - text: STRING_GENERIC_SYNC_ERROR - }); - } else { - this.syncUpdated(); - } - }); - } - - syncUpdated() { - this.lastSyncDate = dateToLocalizedString(new Date()); - } - - onNewUpdateAvailable() { - this.newUpdateAvailable = true; - } - - clickedNewUpdateAnnouncement() { - this.newUpdateAvailable = false; - this.alertManager.alert({ - text: STRING_NEW_UPDATE_READY - }); - } - - reloadDockShortcuts() { - const shortcuts = []; - for(const theme of this.themesWithIcons) { - const name = theme.content.package_info.name; - const icon = theme.content.package_info.dock_icon; - if(!icon) { - continue; - } - shortcuts.push({ - name: name, - component: theme, - icon: icon - }); - } - - this.dockShortcuts = shortcuts.sort((a, b) => { - /** Circles first, then images */ - const aType = a.icon.type; - const bType = b.icon.type; - if(aType === bType) { - return 0; - } else if(aType === 'circle' && bType === 'svg') { - return -1; - } else if(bType === 'circle' && aType === 'svg') { - return 1; - } - }); - } - - initSvgForShortcut(shortcut) { - const id = 'dock-svg-' + shortcut.component.uuid; - const element = document.getElementById(id); - const parser = new DOMParser(); - const svg = shortcut.component.content.package_info.dock_icon.source; - const doc = parser.parseFromString(svg, 'image/svg+xml'); - element.appendChild(doc.documentElement); - } - - selectShortcut(shortcut) { - this.componentManager.toggleComponent(shortcut.component); - } - - onRoomDismiss(room) { - room.showRoom = false; - } - - closeAllRooms() { - for(const room of this.rooms) { - room.showRoom = false; - } - } - - async selectRoom(room) { - const run = () => { - this.$timeout(() => { - room.showRoom = !room.showRoom; - }); - }; - - if(!room.showRoom) { - const requiresPrivilege = await this.privilegesManager.actionRequiresPrivilege( - PrivilegesManager.ActionManageExtensions - ); - if(requiresPrivilege) { - this.privilegesManager.presentPrivilegesModal( - PrivilegesManager.ActionManageExtensions, - run - ); - } else { - run(); - } - } else { - run(); - } - } - - clickOutsideAccountMenu() { - if(this.privilegesManager.authenticationInProgress()) { - return; - } - this.showAccountMenu = false; - } -} - -export class Footer { - constructor() { - this.restrict = 'E'; - this.scope = {}; - this.template = template; - this.controller = FooterCtrl; - this.replace = true; - this.controllerAs = 'ctrl'; - this.bindToController = true; - } -} diff --git a/app/assets/javascripts/controllers/lockScreen.js b/app/assets/javascripts/controllers/lockScreen.js deleted file mode 100644 index d3f31b920..000000000 --- a/app/assets/javascripts/controllers/lockScreen.js +++ /dev/null @@ -1,104 +0,0 @@ -import template from '%/lock-screen.pug'; - -const ELEMENT_ID_PASSCODE_INPUT = 'passcode-input'; - -class LockScreenCtrl { - - /* @ngInject */ - constructor( - $scope, - alertManager, - authManager, - passcodeManager, - ) { - this.$scope = $scope; - this.alertManager = alertManager; - this.authManager = authManager; - this.passcodeManager = passcodeManager; - this.formData = {}; - - this.addVisibilityObserver(); - this.addDestroyHandler(); - } - - get passcodeInput() { - return document.getElementById( - ELEMENT_ID_PASSCODE_INPUT - ); - } - - addDestroyHandler() { - this.$scope.$on('$destroy', () => { - this.passcodeManager.removeVisibilityObserver( - this.visibilityObserver - ); - }); - } - - addVisibilityObserver() { - this.visibilityObserver = this.passcodeManager - .addVisibilityObserver((visible) => { - if(visible) { - const input = this.passcodeInput; - if(input) { - input.focus(); - } - } - }); - } - - submitPasscodeForm($event) { - if( - !this.formData.passcode || - this.formData.passcode.length === 0 - ) { - return; - } - this.passcodeInput.blur(); - this.passcodeManager.unlock( - this.formData.passcode, - (success) => { - if(!success) { - this.formData.passcode = null; - this.alertManager.alert({ - text: "Invalid passcode. Please try again.", - onClose: () => { - this.passcodeInput.focus(); - } - }); - } else { - this.onSuccess()(); - } - } - ); - } - - forgotPasscode() { - this.formData.showRecovery = true; - } - - beginDeleteData() { - this.alertManager.confirm({ - text: "Are you sure you want to clear all local data?", - destructive: true, - onConfirm: () => { - this.authManager.signout(true).then(() => { - window.location.reload(); - }); - } - }); - } -} - -export class LockScreen { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = LockScreenCtrl; - this.controllerAs = 'ctrl'; - this.bindToController = true; - this.scope = { - onSuccess: '&', - }; - } -} diff --git a/app/assets/javascripts/controllers/notes/note_utils.js b/app/assets/javascripts/controllers/notes/note_utils.js deleted file mode 100644 index e4459eb9e..000000000 --- a/app/assets/javascripts/controllers/notes/note_utils.js +++ /dev/null @@ -1,153 +0,0 @@ -export const SORT_KEY_CREATED_AT = 'created_at'; -export const SORT_KEY_UPDATED_AT = 'updated_at'; -export const SORT_KEY_CLIENT_UPDATED_AT = 'client_updated_at'; -export const SORT_KEY_TITLE = 'title'; - -export function filterAndSortNotes({ - notes, - selectedTag, - showArchived, - hidePinned, - filterText, - sortBy, - reverse -}) { - const filtered = filterNotes({ - notes, - selectedTag, - showArchived, - hidePinned, - filterText, - }); - const sorted = sortNotes({ - notes: filtered, - sortBy, - reverse - }); - return sorted; -} - -export function filterNotes({ - notes, - selectedTag, - showArchived, - hidePinned, - filterText -}) { - return notes.filter((note) => { - let canShowArchived = showArchived; - const canShowPinned = !hidePinned; - const isTrash = selectedTag.content.isTrashTag; - if (!isTrash && note.content.trashed) { - return false; - } - const isSmartTag = selectedTag.isSmartTag(); - if (isSmartTag) { - canShowArchived = ( - canShowArchived || - selectedTag.content.isArchiveTag || - isTrash - ); - } - if ( - (note.archived && !canShowArchived) || - (note.pinned && !canShowPinned) - ) { - return false; - } - return noteMatchesQuery({ - note, - query: filterText - }); - }); -} - -function noteMatchesQuery({ - note, - query -}) { - if(query.length === 0) { - return true; - } - const title = note.safeTitle().toLowerCase(); - const text = note.safeText().toLowerCase(); - const lowercaseText = query.toLowerCase(); - - const quotedText = stringBetweenQuotes(lowercaseText); - if(quotedText) { - return title.includes(quotedText) || text.includes(quotedText); - } - - if (stringIsUuid(lowercaseText)) { - return note.uuid === lowercaseText; - } - - const words = lowercaseText.split(" "); - const matchesTitle = words.every((word) => { - return title.indexOf(word) >= 0; - }); - const matchesBody = words.every((word) => { - return text.indexOf(word) >= 0; - }); - - return matchesTitle || matchesBody; -} - -function stringBetweenQuotes(text) { - const matches = text.match(/"(.*?)"/); - return matches ? matches[1] : null; -} - -function stringIsUuid(text) { - const matches = text.match( - /\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/ - ); - // eslint-disable-next-line no-unneeded-ternary - return matches ? true : false; -} - -export function sortNotes({ - notes = [], - sortBy, - reverse -}) { - const sortValueFn = (a, b, pinCheck = false) => { - if (a.dummy) { return -1; } - if (b.dummy) { return 1; } - if (!pinCheck) { - if (a.pinned && b.pinned) { - return sortValueFn(a, b, true); - } - if (a.pinned) { return -1; } - if (b.pinned) { return 1; } - } - - let aValue = a[sortBy] || ''; - let bValue = b[sortBy] || ''; - let vector = 1; - if (reverse) { - vector *= -1; - } - if (sortBy === SORT_KEY_TITLE) { - aValue = aValue.toLowerCase(); - bValue = bValue.toLowerCase(); - if (aValue.length === 0 && bValue.length === 0) { - return 0; - } else if (aValue.length === 0 && bValue.length !== 0) { - return 1 * vector; - } else if (aValue.length !== 0 && bValue.length === 0) { - return -1 * vector; - } else { - vector *= -1; - } - } - if (aValue > bValue) { return -1 * vector; } - else if (aValue < bValue) { return 1 * vector; } - return 0; - }; - - const result = notes.sort(function (a, b) { - return sortValueFn(a, b); - }); - return result; -} diff --git a/app/assets/javascripts/controllers/notes/notes.js b/app/assets/javascripts/controllers/notes/notes.js deleted file mode 100644 index 843c0226e..000000000 --- a/app/assets/javascripts/controllers/notes/notes.js +++ /dev/null @@ -1,724 +0,0 @@ -import _ from 'lodash'; -import angular from 'angular'; -import template from '%/notes.pug'; -import { SFAuthManager } from 'snjs'; -import { KeyboardManager } from '@/services/keyboardManager'; -import { PureCtrl } from '@Controllers'; -import { - APP_STATE_EVENT_NOTE_CHANGED, - APP_STATE_EVENT_TAG_CHANGED, - APP_STATE_EVENT_PREFERENCES_CHANGED, - APP_STATE_EVENT_EDITOR_FOCUSED -} from '@/state'; -import { - PREF_NOTES_PANEL_WIDTH, - PREF_SORT_NOTES_BY, - PREF_SORT_NOTES_REVERSE, - PREF_NOTES_SHOW_ARCHIVED, - PREF_NOTES_HIDE_PINNED, - PREF_NOTES_HIDE_NOTE_PREVIEW, - PREF_NOTES_HIDE_DATE, - PREF_NOTES_HIDE_TAGS -} from '@/services/preferencesManager'; -import { - PANEL_NAME_NOTES -} from '@/controllers/constants'; -import { - SORT_KEY_CREATED_AT, - SORT_KEY_UPDATED_AT, - SORT_KEY_CLIENT_UPDATED_AT, - SORT_KEY_TITLE, - filterAndSortNotes -} from './note_utils'; - -/** - * This is the height of a note cell with nothing but the title, - * which *is* a display option - */ -const MIN_NOTE_CELL_HEIGHT = 51.0; -const DEFAULT_LIST_NUM_NOTES = 20; - - -const ELEMENT_ID_SEARCH_BAR = 'search-bar'; -const ELEMENT_ID_SCROLL_CONTAINER = 'notes-scrollable'; - -class NotesCtrl extends PureCtrl { - - /* @ngInject */ - constructor( - $timeout, - $rootScope, - appState, - authManager, - desktopManager, - keyboardManager, - modelManager, - preferencesManager, - privilegesManager, - syncManager, - ) { - super($timeout); - this.$rootScope = $rootScope; - this.appState = appState; - this.authManager = authManager; - this.desktopManager = desktopManager; - this.keyboardManager = keyboardManager; - this.modelManager = modelManager; - this.preferencesManager = preferencesManager; - this.privilegesManager = privilegesManager; - this.syncManager = syncManager; - - this.state = { - notes: [], - renderedNotes: [], - selectedNote: null, - tag: null, - sortBy: null, - showArchived: null, - hidePinned: null, - sortReverse: null, - panelTitle: null, - mutable: { showMenu: false }, - noteFilter: { text: '' }, - }; - - this.panelController = {}; - window.onresize = (event) => { - this.resetPagination({ - keepCurrentIfLarger: true - }); - }; - - this.addAppStateObserver(); - this.addSignInObserver(); - this.addSyncEventHandler(); - this.addMappingObserver(); - this.reloadPreferences(); - this.resetPagination(); - this.registerKeyboardShortcuts(); - angular.element(document).ready(() => { - this.reloadPreferences(); - }); - } - - addAppStateObserver() { - this.appState.addObserver((eventName, data) => { - if (eventName === APP_STATE_EVENT_TAG_CHANGED) { - this.handleTagChange(this.appState.getSelectedTag(), data.previousTag); - } else if (eventName === APP_STATE_EVENT_NOTE_CHANGED) { - this.handleNoteSelection(this.appState.getSelectedNote()); - } else if (eventName === APP_STATE_EVENT_PREFERENCES_CHANGED) { - this.reloadPreferences(); - this.reloadNotes(); - } else if (eventName === APP_STATE_EVENT_EDITOR_FOCUSED) { - this.setShowMenuFalse(); - } - }); - } - - addSignInObserver() { - this.authManager.addEventHandler((event) => { - if (event === SFAuthManager.DidSignInEvent) { - /** Delete dummy note if applicable */ - if (this.state.selectedNote && this.state.selectedNote.dummy) { - this.modelManager.removeItemLocally(this.state.selectedNote); - this.selectNote(null).then(() => { - this.reloadNotes(); - }); - /** - * We want to see if the user will download any items from the server. - * If the next sync completes and our notes are still 0, - * we need to create a dummy. - */ - this.createDummyOnSynCompletionIfNoNotes = true; - } - } - }); - } - - addSyncEventHandler() { - this.syncManager.addEventHandler((syncEvent, data) => { - if (syncEvent === 'local-data-loaded') { - if (this.state.notes.length === 0) { - this.createNewNote(); - } - } else if (syncEvent === 'sync:completed') { - if (this.createDummyOnSynCompletionIfNoNotes && this.state.notes.length === 0) { - this.createDummyOnSynCompletionIfNoNotes = false; - this.createNewNote(); - } - } - }); - } - - addMappingObserver() { - this.modelManager.addItemSyncObserver( - 'note-list', - '*', - async (allItems, validItems, deletedItems, source, sourceKey) => { - await this.reloadNotes(); - const selectedNote = this.state.selectedNote; - if (selectedNote) { - const discarded = selectedNote.deleted || selectedNote.content.trashed; - if (discarded) { - this.selectNextOrCreateNew(); - } - } else { - this.selectFirstNote(); - } - - /** Note has changed values, reset its flags */ - const notes = allItems.filter((item) => item.content_type === 'Note'); - for (const note of notes) { - this.loadFlagsForNote(note); - note.cachedCreatedAtString = note.createdAtString(); - note.cachedUpdatedAtString = note.updatedAtString(); - } - }); - } - - async handleTagChange(tag, previousTag) { - if (this.state.selectedNote && this.state.selectedNote.dummy) { - this.modelManager.removeItemLocally(this.state.selectedNote); - if (previousTag) { - _.remove(previousTag.notes, this.state.selectedNote); - } - await this.selectNote(null); - } - - await this.setState({ - tag: tag - }); - - this.resetScrollPosition(); - this.setShowMenuFalse(); - await this.setNoteFilterText(''); - this.desktopManager.searchText(); - this.resetPagination(); - - await this.reloadNotes(); - - if (this.state.notes.length > 0) { - this.selectFirstNote(); - } else if (this.syncManager.initialDataLoaded()) { - if (!tag.isSmartTag() || tag.content.isAllTag) { - this.createNewNote(); - } else if ( - this.state.selectedNote && - !this.state.notes.includes(this.state.selectedNote) - ) { - this.selectNote(null); - } - } - } - - resetScrollPosition() { - const scrollable = document.getElementById(ELEMENT_ID_SCROLL_CONTAINER); - if (scrollable) { - scrollable.scrollTop = 0; - scrollable.scrollLeft = 0; - } - } - - /** - * @template - * @internal - */ - async selectNote(note) { - this.appState.setSelectedNote(note); - } - - async removeNoteFromList(note) { - const notes = this.state.notes; - _.pull(notes, note); - await this.setState({ - notes: notes, - renderedNotes: notes.slice(0, this.notesToDisplay) - }); - } - - async reloadNotes() { - if (!this.state.tag) { - return; - } - const notes = filterAndSortNotes({ - notes: this.state.tag.notes, - selectedTag: this.state.tag, - showArchived: this.state.showArchived, - hidePinned: this.state.hidePinned, - filterText: this.state.noteFilter.text.toLowerCase(), - sortBy: this.state.sortBy, - reverse: this.state.sortReverse - }); - for (const note of notes) { - if (note.errorDecrypting) { - this.loadFlagsForNote(note); - } - note.shouldShowTags = this.shouldShowTagsForNote(note); - } - await this.setState({ - notes: notes, - renderedNotes: notes.slice(0, this.notesToDisplay) - }); - this.reloadPanelTitle(); - } - - setShowMenuFalse() { - this.setState({ - mutable: { - ...this.state.mutable, - showMenu: false - } - }); - } - - async handleNoteSelection(note) { - if (this.state.selectedNote === note) { - return; - } - const previousNote = this.state.selectedNote; - if (previousNote && previousNote.dummy) { - this.modelManager.removeItemLocally(previousNote); - this.removeNoteFromList(previousNote); - } - await this.setState({ - selectedNote: note - }); - if (!note) { - return; - } - - this.selectedIndex = Math.max(0, this.displayableNotes().indexOf(note)); - if (note.content.conflict_of) { - note.content.conflict_of = null; - this.modelManager.setItemDirty(note); - this.syncManager.sync(); - } - if (this.isFiltering()) { - this.desktopManager.searchText(this.state.noteFilter.text); - } - } - - reloadPreferences() { - const viewOptions = {}; - const prevSortValue = this.state.sortBy; - let sortBy = this.preferencesManager.getValue( - PREF_SORT_NOTES_BY, - SORT_KEY_CREATED_AT - ); - if (sortBy === SORT_KEY_UPDATED_AT) { - /** Use client_updated_at instead */ - sortBy = SORT_KEY_CLIENT_UPDATED_AT; - } - viewOptions.sortBy = sortBy; - viewOptions.sortReverse = this.preferencesManager.getValue( - PREF_SORT_NOTES_REVERSE, - false - ); - viewOptions.showArchived = this.preferencesManager.getValue( - PREF_NOTES_SHOW_ARCHIVED, - false - ); - viewOptions.hidePinned = this.preferencesManager.getValue( - PREF_NOTES_HIDE_PINNED, - false - ); - viewOptions.hideNotePreview = this.preferencesManager.getValue( - PREF_NOTES_HIDE_NOTE_PREVIEW, - false - ); - viewOptions.hideDate = this.preferencesManager.getValue( - PREF_NOTES_HIDE_DATE, - false - ); - viewOptions.hideTags = this.preferencesManager.getValue( - PREF_NOTES_HIDE_TAGS, - false - ); - this.setState({ - ...viewOptions - }); - if (prevSortValue && prevSortValue !== sortBy) { - this.selectFirstNote(); - } - const width = this.preferencesManager.getValue( - PREF_NOTES_PANEL_WIDTH - ); - if (width) { - this.panelController.setWidth(width); - if (this.panelController.isCollapsed()) { - this.appState.panelDidResize({ - name: PANEL_NAME_NOTES, - collapsed: this.panelController.isCollapsed() - }); - } - } - } - - onPanelResize = (newWidth, lastLeft, isAtMaxWidth, isCollapsed) => { - this.preferencesManager.setUserPrefValue( - PREF_NOTES_PANEL_WIDTH, - newWidth - ); - this.preferencesManager.syncUserPreferences(); - this.appState.panelDidResize({ - name: PANEL_NAME_NOTES, - collapsed: isCollapsed - }); - } - - paginate() { - this.notesToDisplay += this.pageSize; - this.reloadNotes(); - if (this.searchSubmitted) { - this.desktopManager.searchText(this.state.noteFilter.text); - } - } - - resetPagination({ keepCurrentIfLarger } = {}) { - const clientHeight = document.documentElement.clientHeight; - this.pageSize = clientHeight / MIN_NOTE_CELL_HEIGHT; - if (this.pageSize === 0) { - this.pageSize = DEFAULT_LIST_NUM_NOTES; - } - if (keepCurrentIfLarger && this.notesToDisplay > this.pageSize) { - return; - } - this.notesToDisplay = this.pageSize; - } - - reloadPanelTitle() { - let title; - if (this.isFiltering()) { - const resultCount = this.state.notes.length; - title = `${resultCount} search results`; - } else if (this.state.tag) { - title = `${this.state.tag.title}`; - } - this.setState({ - panelTitle: title - }); - } - - optionsSubtitle() { - let base = ""; - if (this.state.sortBy === 'created_at') { - base += " Date Added"; - } else if (this.state.sortBy === 'client_updated_at') { - base += " Date Modified"; - } else if (this.state.sortBy === 'title') { - base += " Title"; - } - if (this.state.showArchived) { - base += " | + Archived"; - } - if (this.state.hidePinned) { - base += " | – Pinned"; - } - if (this.state.sortReverse) { - base += " | Reversed"; - } - return base; - } - - loadFlagsForNote(note) { - const flags = []; - if (note.pinned) { - flags.push({ - text: "Pinned", - class: 'info' - }); - } - if (note.archived) { - flags.push({ - text: "Archived", - class: 'warning' - }); - } - if (note.content.protected) { - flags.push({ - text: "Protected", - class: 'success' - }); - } - if (note.locked) { - flags.push({ - text: "Locked", - class: 'neutral' - }); - } - if (note.content.trashed) { - flags.push({ - text: "Deleted", - class: 'danger' - }); - } - if (note.content.conflict_of) { - flags.push({ - text: "Conflicted Copy", - class: 'danger' - }); - } - if (note.errorDecrypting) { - flags.push({ - text: "Missing Keys", - class: 'danger' - }); - } - if (note.deleted) { - flags.push({ - text: "Deletion Pending Sync", - class: 'danger' - }); - } - note.flags = flags; - return flags; - } - - displayableNotes() { - return this.state.notes; - } - - getFirstNonProtectedNote() { - const displayableNotes = this.displayableNotes(); - let index = 0; - let note = displayableNotes[index]; - while (note && note.content.protected) { - index++; - if (index >= displayableNotes.length) { - break; - } - note = displayableNotes[index]; - } - return note; - } - - selectFirstNote() { - const note = this.getFirstNonProtectedNote(); - if (note) { - this.selectNote(note); - } - } - - selectNextNote() { - const displayableNotes = this.displayableNotes(); - const currentIndex = displayableNotes.indexOf(this.state.selectedNote); - if (currentIndex + 1 < displayableNotes.length) { - this.selectNote(displayableNotes[currentIndex + 1]); - } - } - - selectNextOrCreateNew() { - const note = this.getFirstNonProtectedNote(); - if (note) { - this.selectNote(note); - } else if (!this.state.tag || !this.state.tag.isSmartTag()) { - this.createNewNote(); - } else { - this.selectNote(null); - } - } - - selectPreviousNote() { - const displayableNotes = this.displayableNotes(); - const currentIndex = displayableNotes.indexOf(this.state.selectedNote); - if (currentIndex - 1 >= 0) { - this.selectNote(displayableNotes[currentIndex - 1]); - return true; - } else { - return false; - } - } - - createNewNote() { - let title; - let isDummyNote = true; - if (this.isFiltering()) { - title = this.state.noteFilter.text; - isDummyNote = false; - } else if (this.state.selectedNote && this.state.selectedNote.dummy) { - return; - } else { - title = `Note ${this.state.notes.length + 1}`; - } - const newNote = this.modelManager.createItem({ - content_type: 'Note', - content: { - text: '', - title: title - } - }); - newNote.client_updated_at = new Date(); - newNote.dummy = isDummyNote; - this.modelManager.addItem(newNote); - this.modelManager.setItemDirty(newNote); - const selectedTag = this.appState.getSelectedTag(); - if (!selectedTag.isSmartTag()) { - selectedTag.addItemAsRelationship(newNote); - this.modelManager.setItemDirty(selectedTag); - } - this.selectNote(newNote); - } - - isFiltering() { - return this.state.noteFilter.text && - this.state.noteFilter.text.length > 0; - } - - async setNoteFilterText(text) { - await this.setState({ - noteFilter: { - ...this.state.noteFilter, - text: text - } - }); - } - - async clearFilterText() { - await this.setNoteFilterText(''); - this.onFilterEnter(); - this.filterTextChanged(); - this.resetPagination(); - } - - async filterTextChanged() { - if (this.searchSubmitted) { - this.searchSubmitted = false; - } - await this.reloadNotes(); - } - - onFilterEnter() { - /** - * For Desktop, performing a search right away causes - * input to lose focus. We wait until user explicity hits - * enter before highlighting desktop search results. - */ - this.searchSubmitted = true; - this.desktopManager.searchText(this.state.noteFilter.text); - } - - selectedMenuItem() { - this.setShowMenuFalse(); - } - - togglePrefKey(key) { - this.preferencesManager.setUserPrefValue(key, !this.state[key]); - this.preferencesManager.syncUserPreferences(); - } - - selectedSortByCreated() { - this.setSortBy(SORT_KEY_CREATED_AT); - } - - selectedSortByUpdated() { - this.setSortBy(SORT_KEY_CLIENT_UPDATED_AT); - } - - selectedSortByTitle() { - this.setSortBy(SORT_KEY_TITLE); - } - - toggleReverseSort() { - this.selectedMenuItem(); - this.preferencesManager.setUserPrefValue( - PREF_SORT_NOTES_REVERSE, - !this.state.sortReverse - ); - this.preferencesManager.syncUserPreferences(); - } - - setSortBy(type) { - this.preferencesManager.setUserPrefValue( - PREF_SORT_NOTES_BY, - type - ); - this.preferencesManager.syncUserPreferences(); - } - - shouldShowTagsForNote(note) { - if (this.state.hideTags || note.content.protected) { - return false; - } - if (this.state.tag.content.isAllTag) { - return note.tags && note.tags.length > 0; - } - if (this.state.tag.isSmartTag()) { - return true; - } - /** - * Inside a tag, only show tags string if - * note contains tags other than this.state.tag - */ - return note.tags && note.tags.length > 1; - } - - getSearchBar() { - return document.getElementById(ELEMENT_ID_SEARCH_BAR); - } - - registerKeyboardShortcuts() { - /** - * In the browser we're not allowed to override cmd/ctrl + n, so we have to - * use Control modifier as well. These rules don't apply to desktop, but - * probably better to be consistent. - */ - this.newNoteKeyObserver = this.keyboardManager.addKeyObserver({ - key: 'n', - modifiers: [ - KeyboardManager.KeyModifierMeta, - KeyboardManager.KeyModifierCtrl - ], - onKeyDown: (event) => { - event.preventDefault(); - this.createNewNote(); - } - }); - - this.nextNoteKeyObserver = this.keyboardManager.addKeyObserver({ - key: KeyboardManager.KeyDown, - elements: [ - document.body, - this.getSearchBar() - ], - onKeyDown: (event) => { - const searchBar = this.getSearchBar(); - if (searchBar === document.activeElement) { - searchBar.blur(); - } - this.selectNextNote(); - } - }); - - this.nextNoteKeyObserver = this.keyboardManager.addKeyObserver({ - key: KeyboardManager.KeyUp, - element: document.body, - onKeyDown: (event) => { - this.selectPreviousNote(); - } - }); - - this.searchKeyObserver = this.keyboardManager.addKeyObserver({ - key: "f", - modifiers: [ - KeyboardManager.KeyModifierMeta, - KeyboardManager.KeyModifierShift - ], - onKeyDown: (event) => { - const searchBar = this.getSearchBar(); - if (searchBar) { searchBar.focus(); }; - } - }); - } -} - -export class NotesPanel { - constructor() { - this.scope = {}; - this.template = template; - this.replace = true; - this.controller = NotesCtrl; - this.controllerAs = 'self'; - this.bindToController = true; - } -} diff --git a/app/assets/javascripts/controllers/root.js b/app/assets/javascripts/controllers/root.js deleted file mode 100644 index 1ea33537b..000000000 --- a/app/assets/javascripts/controllers/root.js +++ /dev/null @@ -1,329 +0,0 @@ -import { SFAuthManager } from 'snjs'; -import { getPlatformString } from '@/utils'; -import template from '%/root.pug'; -import { - APP_STATE_EVENT_PANEL_RESIZED -} from '@/state'; -import { - PANEL_NAME_NOTES, - PANEL_NAME_TAGS -} from '@/controllers/constants'; -import { - STRING_SESSION_EXPIRED, - STRING_DEFAULT_FILE_ERROR, - StringSyncException -} from '@/strings'; - -/** How often to automatically sync, in milliseconds */ -const AUTO_SYNC_INTERVAL = 30000; - -class RootCtrl { - /* @ngInject */ - constructor( - $location, - $rootScope, - $scope, - $timeout, - alertManager, - appState, - authManager, - dbManager, - modelManager, - passcodeManager, - preferencesManager, - themeManager /** Unused below, required to load globally */, - statusManager, - storageManager, - syncManager, - ) { - this.$rootScope = $rootScope; - this.$scope = $scope; - this.$location = $location; - this.$timeout = $timeout; - this.dbManager = dbManager; - this.syncManager = syncManager; - this.statusManager = statusManager; - this.storageManager = storageManager; - this.appState = appState; - this.authManager = authManager; - this.modelManager = modelManager; - this.alertManager = alertManager; - this.preferencesManager = preferencesManager; - this.passcodeManager = passcodeManager; - - this.defineRootScopeFunctions(); - this.initializeStorageManager(); - this.addAppStateObserver(); - this.defaultLoad(); - this.handleAutoSignInFromParams(); - this.addDragDropHandlers(); - } - - defineRootScopeFunctions() { - this.$rootScope.lockApplication = () => { - /** Reloading wipes current objects from memory */ - window.location.reload(); - }; - - this.$rootScope.safeApply = (fn) => { - const phase = this.$scope.$root.$$phase; - if(phase === '$apply' || phase === '$digest') { - this.$scope.$eval(fn); - } else { - this.$scope.$apply(fn); - } - }; - } - - defaultLoad() { - this.$scope.platform = getPlatformString(); - - if(this.passcodeManager.isLocked()) { - this.$scope.needsUnlock = true; - } else { - this.loadAfterUnlock(); - } - - this.$scope.onSuccessfulUnlock = () => { - this.$timeout(() => { - this.$scope.needsUnlock = false; - this.loadAfterUnlock(); - }); - }; - - this.$scope.onUpdateAvailable = () => { - this.$rootScope.$broadcast('new-update-available'); - }; - } - - initializeStorageManager() { - this.storageManager.initialize( - this.passcodeManager.hasPasscode(), - this.authManager.isEphemeralSession() - ); - } - - addAppStateObserver() { - this.appState.addObserver((eventName, data) => { - if(eventName === APP_STATE_EVENT_PANEL_RESIZED) { - if(data.panel === PANEL_NAME_NOTES) { - this.notesCollapsed = data.collapsed; - } - if(data.panel === PANEL_NAME_TAGS) { - this.tagsCollapsed = data.collapsed; - } - let appClass = ""; - if(this.notesCollapsed) { appClass += "collapsed-notes"; } - if(this.tagsCollapsed) { appClass += " collapsed-tags"; } - this.$scope.appClass = appClass; - } - }); - } - - loadAfterUnlock() { - this.openDatabase(); - this.authManager.loadInitialData(); - this.preferencesManager.load(); - this.addSyncStatusObserver(); - this.configureKeyRequestHandler(); - this.addSyncEventHandler(); - this.addSignOutObserver(); - this.loadLocalData(); - } - - openDatabase() { - this.dbManager.setLocked(false); - this.dbManager.openDatabase({ - onUpgradeNeeded: () => { - /** - * New database, delete syncToken so that items - * can be refetched entirely from server - */ - this.syncManager.clearSyncToken(); - this.syncManager.sync(); - } - }); - } - - addSyncStatusObserver() { - this.syncStatusObserver = this.syncManager.registerSyncStatusObserver((status) => { - if(status.retrievedCount > 20) { - const text = `Downloading ${status.retrievedCount} items. Keep app open.`; - this.syncStatus = this.statusManager.replaceStatusWithString( - this.syncStatus, - text - ); - this.showingDownloadStatus = true; - } else if(this.showingDownloadStatus) { - this.showingDownloadStatus = false; - const text = "Download Complete."; - this.syncStatus = this.statusManager.replaceStatusWithString( - this.syncStatus, - text - ); - setTimeout(() => { - this.syncStatus = this.statusManager.removeStatus(this.syncStatus); - }, 2000); - } else if(status.total > 20) { - this.uploadSyncStatus = this.statusManager.replaceStatusWithString( - this.uploadSyncStatus, - `Syncing ${status.current}/${status.total} items...` - ); - } else if(this.uploadSyncStatus) { - this.uploadSyncStatus = this.statusManager.removeStatus( - this.uploadSyncStatus - ); - } - }); - } - - configureKeyRequestHandler() { - this.syncManager.setKeyRequestHandler(async () => { - const offline = this.authManager.offline(); - const authParams = ( - offline - ? this.passcodeManager.passcodeAuthParams() - : await this.authManager.getAuthParams() - ); - const keys = offline - ? this.passcodeManager.keys() - : await this.authManager.keys(); - return { - keys: keys, - offline: offline, - auth_params: authParams - }; - }); - } - - addSyncEventHandler() { - let lastShownDate; - this.syncManager.addEventHandler((syncEvent, data) => { - this.$rootScope.$broadcast( - syncEvent, - data || {} - ); - if(syncEvent === 'sync-session-invalid') { - /** Don't show repeatedly; at most 30 seconds in between */ - const SHOW_INTERVAL = 30; - const lastShownSeconds = (new Date() - lastShownDate) / 1000; - if(!lastShownDate || lastShownSeconds > SHOW_INTERVAL) { - lastShownDate = new Date(); - setTimeout(() => { - this.alertManager.alert({ - text: STRING_SESSION_EXPIRED - }); - }, 500); - } - } else if(syncEvent === 'sync-exception') { - this.alertManager.alert({ - text: StringSyncException(data) - }); - } - }); - } - - loadLocalData() { - const encryptionEnabled = this.authManager.user || this.passcodeManager.hasPasscode(); - this.syncStatus = this.statusManager.addStatusFromString( - encryptionEnabled ? "Decrypting items..." : "Loading items..." - ); - const incrementalCallback = (current, total) => { - const notesString = `${current}/${total} items...`; - const status = encryptionEnabled - ? `Decrypting ${notesString}` - : `Loading ${notesString}`; - this.syncStatus = this.statusManager.replaceStatusWithString( - this.syncStatus, - status - ); - }; - this.syncManager.loadLocalItems({incrementalCallback}).then(() => { - this.$timeout(() => { - this.$rootScope.$broadcast("initial-data-loaded"); - this.syncStatus = this.statusManager.replaceStatusWithString( - this.syncStatus, - "Syncing..." - ); - this.syncManager.sync({ - performIntegrityCheck: true - }).then(() => { - this.syncStatus = this.statusManager.removeStatus(this.syncStatus); - }); - setInterval(() => { - this.syncManager.sync(); - }, AUTO_SYNC_INTERVAL); - }); - }); - } - - addSignOutObserver() { - this.authManager.addEventHandler((event) => { - if(event === SFAuthManager.DidSignOutEvent) { - this.modelManager.handleSignout(); - this.syncManager.handleSignout(); - } - }); - } - - addDragDropHandlers() { - /** - * Disable dragging and dropping of files (but allow text) into main SN interface. - * both 'dragover' and 'drop' are required to prevent dropping of files. - * This will not prevent extensions from receiving drop events. - */ - window.addEventListener('dragover', (event) => { - if (event.dataTransfer.files.length > 0) { - event.preventDefault(); - } - }, false); - - window.addEventListener('drop', (event) => { - if(event.dataTransfer.files.length > 0) { - event.preventDefault(); - this.alertManager.alert({ - text: STRING_DEFAULT_FILE_ERROR - }); - } - }, false); - } - - async handleAutoSignInFromParams() { - const params = this.$location.search(); - const server = params.server; - const email = params.email; - const password = params.pw; - if (!server || !email || !password) return; - - if (this.authManager.offline()) { - const { error } = await this.authManager.login( - server, - email, - password, - false, - false, - {} - ); - if (!error) { - window.location.reload(); - } - } else if ( - this.authManager.user.email === email && - (await this.syncManager.getServerURL()) === server - ) { - /** Already signed in, return */ - // eslint-disable-next-line no-useless-return - return; - } else { - this.authManager.signout(true); - window.location.reload(); - } - } -} - -export class Root { - constructor() { - this.template = template; - this.controller = RootCtrl; - } -} diff --git a/app/assets/javascripts/controllers/tags.js b/app/assets/javascripts/controllers/tags.js deleted file mode 100644 index e1ffc36da..000000000 --- a/app/assets/javascripts/controllers/tags.js +++ /dev/null @@ -1,284 +0,0 @@ -import { SNNote, SNSmartTag } from 'snjs'; -import template from '%/tags.pug'; -import { - APP_STATE_EVENT_PREFERENCES_CHANGED, - APP_STATE_EVENT_TAG_CHANGED -} from '@/state'; -import { PANEL_NAME_TAGS } from '@/controllers/constants'; -import { PREF_TAGS_PANEL_WIDTH } from '@/services/preferencesManager'; -import { STRING_DELETE_TAG } from '@/strings'; -import { PureCtrl } from '@Controllers'; - -class TagsPanelCtrl extends PureCtrl { - /* @ngInject */ - constructor( - $rootScope, - $timeout, - alertManager, - appState, - componentManager, - modelManager, - preferencesManager, - syncManager, - ) { - super($timeout); - this.$rootScope = $rootScope; - this.alertManager = alertManager; - this.appState = appState; - this.componentManager = componentManager; - this.modelManager = modelManager; - this.preferencesManager = preferencesManager; - this.syncManager = syncManager; - this.panelController = {}; - this.addSyncEventHandler(); - this.addAppStateObserver(); - this.addMappingObserver(); - this.loadPreferences(); - this.registerComponentHandler(); - this.state = { - smartTags: this.modelManager.getSmartTags(), - noteCounts: {} - }; - } - - $onInit() { - this.selectTag(this.state.smartTags[0]); - } - - addSyncEventHandler() { - this.syncManager.addEventHandler(async (syncEvent, data) => { - if ( - syncEvent === 'local-data-loaded' || - syncEvent === 'sync:completed' || - syncEvent === 'local-data-incremental-load' - ) { - await this.setState({ - tags: this.modelManager.tags, - smartTags: this.modelManager.getSmartTags() - }); - this.reloadNoteCounts(); - } - }); - } - - addAppStateObserver() { - this.appState.addObserver((eventName, data) => { - if (eventName === APP_STATE_EVENT_PREFERENCES_CHANGED) { - this.loadPreferences(); - } else if (eventName === APP_STATE_EVENT_TAG_CHANGED) { - this.setState({ - selectedTag: this.appState.getSelectedTag() - }); - } - }); - } - - addMappingObserver() { - this.modelManager.addItemSyncObserver( - 'tags-list-tags', - 'Tag', - (allItems, validItems, deletedItems, source, sourceKey) => { - this.reloadNoteCounts(); - - if (!this.state.selectedTag) { - return; - } - /** If the selected tag has been deleted, revert to All view. */ - const selectedTag = allItems.find((tag) => { - return tag.uuid === this.state.selectedTag.uuid; - }); - if (selectedTag && selectedTag.deleted) { - this.selectTag(this.state.smartTags[0]); - } - } - ); - } - - reloadNoteCounts() { - let allTags = []; - if (this.state.tags) { - allTags = allTags.concat(this.state.tags); - } - if (this.state.smartTags) { - allTags = allTags.concat(this.state.smartTags); - } - const noteCounts = {}; - for (const tag of allTags) { - const validNotes = SNNote.filterDummyNotes(tag.notes).filter((note) => { - return !note.archived && !note.content.trashed; - }); - noteCounts[tag.uuid] = validNotes.length; - } - this.setState({ - noteCounts: noteCounts - }); - } - - loadPreferences() { - const width = this.preferencesManager.getValue(PREF_TAGS_PANEL_WIDTH); - if (width) { - this.panelController.setWidth(width); - if (this.panelController.isCollapsed()) { - this.appState.panelDidResize({ - name: PANEL_NAME_TAGS, - collapsed: this.panelController.isCollapsed() - }); - } - } - } - - onPanelResize = (newWidth, lastLeft, isAtMaxWidth, isCollapsed) => { - this.preferencesManager.setUserPrefValue( - PREF_TAGS_PANEL_WIDTH, - newWidth, - true - ); - this.appState.panelDidResize({ - name: PANEL_NAME_TAGS, - collapsed: isCollapsed - }); - } - - registerComponentHandler() { - this.componentManager.registerHandler({ - identifier: 'tags', - areas: ['tags-list'], - activationHandler: (component) => { - this.component = component; - }, - contextRequestHandler: (component) => { - return null; - }, - actionHandler: (component, action, data) => { - if (action === 'select-item') { - if (data.item.content_type === 'Tag') { - const tag = this.modelManager.findItem(data.item.uuid); - if (tag) { - this.selectTag(tag); - } - } else if (data.item.content_type === 'SN|SmartTag') { - const smartTag = new SNSmartTag(data.item); - this.selectTag(smartTag); - } - } else if (action === 'clear-selection') { - this.selectTag(this.state.smartTags[0]); - } - } - }); - } - - async selectTag(tag) { - if (tag.isSmartTag()) { - Object.defineProperty(tag, 'notes', { - get: () => { - return this.modelManager.notesMatchingSmartTag(tag); - } - }); - } - if (tag.content.conflict_of) { - tag.content.conflict_of = null; - this.modelManager.setItemDirty(tag); - this.syncManager.sync(); - } - this.appState.setSelectedTag(tag); - } - - clickedAddNewTag() { - if (this.state.editingTag) { - return; - } - const newTag = this.modelManager.createItem({ - content_type: 'Tag' - }); - this.setState({ - previousTag: this.state.selectedTag, - selectedTag: newTag, - editingTag: newTag, - newTag: newTag - }); - this.modelManager.addItem(newTag); - } - - tagTitleDidChange(tag) { - this.setState({ - editingTag: tag - }); - } - - async saveTag($event, tag) { - $event.target.blur(); - await this.setState({ - editingTag: null - }); - if (!tag.title || tag.title.length === 0) { - if (this.state.editingTag) { - tag.title = this.editingOriginalName; - this.editingOriginalName = null; - } else if(this.state.newTag) { - this.modelManager.removeItemLocally(tag); - this.setState({ - selectedTag: this.state.previousTag - }); - } - this.setState({ newTag: null }); - return; - } - - this.editingOriginalName = null; - - const matchingTag = this.modelManager.findTag(tag.title); - const alreadyExists = matchingTag && matchingTag !== tag; - if (this.state.newTag === tag && alreadyExists) { - this.alertManager.alert({ - text: "A tag with this name already exists." - }); - this.modelManager.removeItemLocally(tag); - this.setState({ newTag: null }); - return; - } - - this.modelManager.setItemDirty(tag); - this.syncManager.sync(); - this.modelManager.resortTag(tag); - this.selectTag(tag); - this.setState({ - newTag: null - }); - } - - async selectedRenameTag($event, tag) { - this.editingOriginalName = tag.title; - await this.setState({ - editingTag: tag - }); - document.getElementById('tag-' + tag.uuid).focus(); - } - - selectedDeleteTag(tag) { - this.removeTag(tag); - this.selectTag(this.state.smartTags[0]); - } - - removeTag(tag) { - this.alertManager.confirm({ - text: STRING_DELETE_TAG, - destructive: true, - onConfirm: () => { - this.modelManager.setItemToBeDeleted(tag); - this.syncManager.sync(); - } - }); - } -} - -export class TagsPanel { - constructor() { - this.restrict = 'E'; - this.scope = {}; - this.template = template; - this.replace = true; - this.controller = TagsPanelCtrl; - this.controllerAs = 'self'; - this.bindToController = true; - } -} diff --git a/app/assets/javascripts/database.ts b/app/assets/javascripts/database.ts new file mode 100644 index 000000000..4c0980bdc --- /dev/null +++ b/app/assets/javascripts/database.ts @@ -0,0 +1,220 @@ +import { SNAlertService } from "@node_modules/snjs/dist/@types"; + +const DB_NAME = 'standardnotes'; +const STORE_NAME = 'items'; +const READ_WRITE = 'readwrite'; + +const OUT_OF_SPACE = + 'Unable to save changes locally because your device is out of space. ' + + 'Please free up some disk space and try again, otherwise, your data may end ' + + 'up in an inconsistent state.'; + +const DB_DELETION_BLOCKED = + 'Your browser is blocking Standard Notes from deleting the local database. ' + + 'Make sure there are no other open windows of this app and try again. ' + + 'If the issue persists, please manually delete app data to sign out.'; + +const QUOTE_EXCEEDED_ERROR = 'QuotaExceededError'; + +export class Database { + + private locked = true + private alertService?: SNAlertService + private db?: IDBDatabase + + public deinit() { + this.alertService = undefined; + this.db = undefined; + } + + public setAlertService(alertService: SNAlertService) { + this.alertService = alertService; + } + + /** + * Relinquishes the lock and allows db operations to proceed + */ + public unlock() { + this.locked = false; + } + + /** + * Opens the database natively, or returns the existing database object if already opened. + * @param onNewDatabase - Callback to invoke when a database has been created + * as part of the open process. This can happen on new application sessions, or if the + * browser deleted the database without the user being aware. + */ + public async openDatabase(onNewDatabase?: () => void): Promise { + if (this.locked) { + throw Error('Attempting to open locked database'); + } + if (this.db) { + return this.db; + } + const request = window.indexedDB.open(DB_NAME, 1); + return new Promise((resolve, reject) => { + request.onerror = (event) => { + const target = event!.target! as any; + if (target.errorCode) { + this.showAlert('Offline database issue: ' + target.errorCode); + } else { + this.displayOfflineAlert(); + } + reject(new Error('Unable to open db')); + }; + request.onblocked = (event) => { + reject(Error('IndexedDB open request blocked')); + }; + request.onsuccess = (event) => { + const target = event!.target! as IDBOpenDBRequest; + const db = target.result; + db.onversionchange = () => { + db.close(); + }; + db.onerror = (errorEvent) => { + const target = errorEvent?.target as any; + throw Error('Database error: ' + target.errorCode); + }; + this.db = db; + resolve(db); + }; + request.onupgradeneeded = (event) => { + const target = event!.target! as IDBOpenDBRequest; + const db = target.result; + db.onversionchange = () => { + db.close(); + }; + /* Create an objectStore for this database */ + const objectStore = db.createObjectStore( + STORE_NAME, + { keyPath: 'uuid' } + ); + objectStore.createIndex( + 'uuid', + 'uuid', + { unique: true } + ); + objectStore.transaction.oncomplete = () => { + /* Ready to store values in the newly created objectStore. */ + if (db.version === 1 && onNewDatabase) { + onNewDatabase && onNewDatabase(); + } + }; + }; + }); + } + + public async getAllPayloads(): Promise { + const db = (await this.openDatabase())!; + return new Promise((resolve) => { + const objectStore = + db.transaction(STORE_NAME). + objectStore(STORE_NAME); + const payloads: any = []; + const cursorRequest = objectStore.openCursor(); + cursorRequest.onsuccess = (event) => { + const target = event!.target! as any; + const cursor = target.result; + if (cursor) { + payloads.push(cursor.value); + cursor.continue(); + } else { + resolve(payloads); + } + }; + }); + } + + public async savePayload(payload: any): Promise { + return this.savePayloads([payload]); + } + + public async savePayloads(payloads: any[]): Promise { + if (payloads.length === 0) { + return; + } + const db = (await this.openDatabase())!; + const transaction = db.transaction(STORE_NAME, READ_WRITE); + return new Promise((resolve, reject) => { + transaction.oncomplete = () => { }; + transaction.onerror = (event) => { + const target = event!.target! as any; + this.showGenericError(target.error); + }; + transaction.onabort = (event) => { + const target = event!.target! as any; + const error = target.error; + if (error.name === QUOTE_EXCEEDED_ERROR) { + this.showAlert(OUT_OF_SPACE); + } else { + this.showGenericError(error); + } + reject(error); + }; + const objectStore = transaction.objectStore(STORE_NAME); + this.putItems(objectStore, payloads).then(resolve); + }); + } + + private async putItems(objectStore: IDBObjectStore, items: any[]): Promise { + await Promise.all(items.map((item) => { + return new Promise((resolve) => { + const request = objectStore.put(item); + request.onerror = resolve; + request.onsuccess = resolve; + }); + })); + } + + public async deletePayload(uuid: string): Promise { + const db = (await this.openDatabase())!; + return new Promise((resolve, reject) => { + const request = + db.transaction(STORE_NAME, READ_WRITE) + .objectStore(STORE_NAME) + .delete(uuid); + request.onsuccess = () => { + resolve(); + }; + request.onerror = reject; + }); + } + + public async clearAllPayloads(): Promise { + const deleteRequest = window.indexedDB.deleteDatabase(DB_NAME); + return new Promise((resolve, reject) => { + deleteRequest.onerror = () => { + reject(Error('Error deleting database.')); + }; + deleteRequest.onsuccess = () => { + this.db = undefined; + resolve(); + }; + deleteRequest.onblocked = (event) => { + this.showAlert(DB_DELETION_BLOCKED); + reject(Error('Delete request blocked')); + }; + }); + } + + private showAlert(message: string) { + this.alertService!.alert(message); + } + + private showGenericError(error: { code: number, name: string }) { + const message = + `Unable to save changes locally due to an unknown system issue. ` + + `Issue Code: ${error.code} Issue Name: ${error.name}.`; + this.showAlert(message); + } + + private displayOfflineAlert() { + const message = + "There was an issue loading your offline database. This could happen for two reasons:" + + "\n\n1. You're in a private window in your browser. We can't save your data without " + + "access to the local database. Please use a non-private window." + + "\n\n2. You have two windows of the app open at the same time. " + + "Please close any other app instances and reload the page."; + this.alertService!.alert(message); + } +} \ No newline at end of file diff --git a/app/assets/javascripts/directives/functional/autofocus.js b/app/assets/javascripts/directives/functional/autofocus.js deleted file mode 100644 index 46fc64ec1..000000000 --- a/app/assets/javascripts/directives/functional/autofocus.js +++ /dev/null @@ -1,16 +0,0 @@ -/* @ngInject */ -export function autofocus($timeout) { - return { - restrict: 'A', - scope: { - shouldFocus: '=' - }, - link: function($scope, $element) { - $timeout(function() { - if ($scope.shouldFocus) { - $element[0].focus(); - } - }); - } - }; -} diff --git a/app/assets/javascripts/directives/functional/autofocus.ts b/app/assets/javascripts/directives/functional/autofocus.ts new file mode 100644 index 000000000..a2173fc0d --- /dev/null +++ b/app/assets/javascripts/directives/functional/autofocus.ts @@ -0,0 +1,19 @@ +/* @ngInject */ +export function autofocus($timeout: ng.ITimeoutService) { + return { + restrict: 'A', + scope: { + shouldFocus: '=' + }, + link: function ( + $scope: ng.IScope, + $element: JQLite + ) { + $timeout(() => { + if (($scope as any).shouldFocus) { + $element[0].focus(); + } + }); + } + }; +} diff --git a/app/assets/javascripts/directives/functional/click-outside.js b/app/assets/javascripts/directives/functional/click-outside.js deleted file mode 100644 index cbfad8dbe..000000000 --- a/app/assets/javascripts/directives/functional/click-outside.js +++ /dev/null @@ -1,29 +0,0 @@ -/* @ngInject */ -export function clickOutside($document) { - return { - restrict: 'A', - replace: false, - link: function($scope, $element, attrs) { - var didApplyClickOutside = false; - - $element.bind('click', function(e) { - didApplyClickOutside = false; - if (attrs.isOpen) { - e.stopPropagation(); - } - }); - - $document.bind('click', function() { - // Ignore click if on SKAlert - if (event.target.closest(".sk-modal")) { - return; - } - - if (!didApplyClickOutside) { - $scope.$apply(attrs.clickOutside); - didApplyClickOutside = true; - } - }); - } - }; -} diff --git a/app/assets/javascripts/directives/functional/click-outside.ts b/app/assets/javascripts/directives/functional/click-outside.ts new file mode 100644 index 000000000..0b6246bdd --- /dev/null +++ b/app/assets/javascripts/directives/functional/click-outside.ts @@ -0,0 +1,37 @@ +/* @ngInject */ +export function clickOutside($document: ng.IDocumentService) { + return { + restrict: 'A', + replace: false, + link($scope: ng.IScope, $element: JQLite, attrs: any) { + let didApplyClickOutside = false; + + function onElementClick(event: JQueryEventObject) { + didApplyClickOutside = false; + if (attrs.isOpen) { + event.stopPropagation(); + } + } + + function onDocumentClick(event: JQueryEventObject) { + /** Ignore click if on SKAlert */ + if (event.target.closest('.sk-modal')) { + return; + } + if (!didApplyClickOutside) { + $scope.$apply(attrs.clickOutside); + didApplyClickOutside = true; + } + }; + + $scope.$on('$destroy', () => { + attrs.clickOutside = undefined; + $element.unbind('click', onElementClick); + $document.unbind('click', onDocumentClick); + }); + + $element.bind('click', onElementClick); + $document.bind('click', onDocumentClick); + } + }; +} diff --git a/app/assets/javascripts/directives/functional/delay-hide.js b/app/assets/javascripts/directives/functional/delay-hide.js deleted file mode 100644 index e03b54580..000000000 --- a/app/assets/javascripts/directives/functional/delay-hide.js +++ /dev/null @@ -1,44 +0,0 @@ -import angular from 'angular'; - -/* @ngInject */ -export function delayHide($timeout) { - return { - restrict: 'A', - scope: { - show: '=', - delay: '@' - }, - link: function(scope, elem, attrs) { - showElement(false); - - // This is where all the magic happens! - // Whenever the scope variable updates we simply - // show if it evaluates to 'true' and hide if 'false' - scope.$watch('show', function(newVal) { - newVal ? showSpinner() : hideSpinner(); - }); - - function showSpinner() { - if (scope.hidePromise) { - $timeout.cancel(scope.hidePromise); - scope.hidePromise = null; - } - showElement(true); - } - - function hideSpinner() { - scope.hidePromise = $timeout(showElement.bind(this, false), getDelay()); - } - - function showElement(show) { - show ? elem.css({ display: '' }) : elem.css({ display: 'none' }); - } - - function getDelay() { - var delay = parseInt(scope.delay); - - return angular.isNumber(delay) ? delay : 200; - } - } - }; -} diff --git a/app/assets/javascripts/directives/functional/delay-hide.ts b/app/assets/javascripts/directives/functional/delay-hide.ts new file mode 100644 index 000000000..8625c4c21 --- /dev/null +++ b/app/assets/javascripts/directives/functional/delay-hide.ts @@ -0,0 +1,45 @@ +import angular from 'angular'; + +/* @ngInject */ +export function delayHide($timeout: ng.ITimeoutService) { + return { + restrict: 'A', + scope: { + show: '=', + delay: '@' + }, + link: function (scope: ng.IScope, elem: JQLite) { + const scopeAny = scope as any; + const showSpinner = () => { + if (scopeAny.hidePromise) { + $timeout.cancel(scopeAny.hidePromise); + scopeAny.hidePromise = null; + } + showElement(true); + } + + const hideSpinner = () => { + scopeAny.hidePromise = $timeout( + showElement.bind(this as any, false), + getDelay() + ); + } + + const showElement = (show: boolean) => { + show ? elem.css({ display: '' }) : elem.css({ display: 'none' }); + } + + const getDelay = () => { + const delay = parseInt(scopeAny.delay); + return angular.isNumber(delay) ? delay : 200; + } + + showElement(false); + // Whenever the scope variable updates we simply + // show if it evaluates to 'true' and hide if 'false' + scope.$watch('show', function (newVal) { + newVal ? showSpinner() : hideSpinner(); + }); + } + }; +} diff --git a/app/assets/javascripts/directives/functional/elemReady.js b/app/assets/javascripts/directives/functional/elemReady.ts similarity index 64% rename from app/assets/javascripts/directives/functional/elemReady.js rename to app/assets/javascripts/directives/functional/elemReady.ts index 1b7809406..2387f0083 100644 --- a/app/assets/javascripts/directives/functional/elemReady.js +++ b/app/assets/javascripts/directives/functional/elemReady.ts @@ -1,8 +1,8 @@ /* @ngInject */ -export function elemReady($parse) { +export function elemReady($parse: ng.IParseService) { return { restrict: 'A', - link: function($scope, elem, attrs) { + link: function($scope: ng.IScope, elem: JQLite, attrs: any) { elem.ready(function() { $scope.$apply(function() { var func = $parse(attrs.elemReady); diff --git a/app/assets/javascripts/directives/functional/file-change.js b/app/assets/javascripts/directives/functional/file-change.js deleted file mode 100644 index 1cd82d284..000000000 --- a/app/assets/javascripts/directives/functional/file-change.js +++ /dev/null @@ -1,16 +0,0 @@ -/* @ngInject */ -export function fileChange() { - return { - restrict: 'A', - scope: { - handler: '&' - }, - link: function(scope, element) { - element.on('change', function(event) { - scope.$apply(function() { - scope.handler({ files: event.target.files }); - }); - }); - } - }; -} diff --git a/app/assets/javascripts/directives/functional/file-change.ts b/app/assets/javascripts/directives/functional/file-change.ts new file mode 100644 index 000000000..3f29bee6e --- /dev/null +++ b/app/assets/javascripts/directives/functional/file-change.ts @@ -0,0 +1,19 @@ +/* @ngInject */ +export function fileChange() { + return { + restrict: 'A', + scope: { + handler: '&' + }, + link: function (scope: ng.IScope, element: JQLite) { + element.on('change', (event) => { + scope.$apply(() => { + const files = (event.target as HTMLInputElement).files; + (scope as any).handler({ + files: files + }); + }); + }); + } + }; +} diff --git a/app/assets/javascripts/directives/functional/index.js b/app/assets/javascripts/directives/functional/index.ts similarity index 87% rename from app/assets/javascripts/directives/functional/index.js rename to app/assets/javascripts/directives/functional/index.ts index e9f8b7ca5..0a8bd4c53 100644 --- a/app/assets/javascripts/directives/functional/index.js +++ b/app/assets/javascripts/directives/functional/index.ts @@ -5,5 +5,5 @@ export { elemReady } from './elemReady'; export { fileChange } from './file-change'; export { infiniteScroll } from './infiniteScroll'; export { lowercase } from './lowercase'; -export { selectOnClick } from './selectOnClick'; +export { selectOnFocus } from './selectOnFocus'; export { snEnter } from './snEnter'; diff --git a/app/assets/javascripts/directives/functional/infiniteScroll.js b/app/assets/javascripts/directives/functional/infiniteScroll.js deleted file mode 100644 index 58cdee77f..000000000 --- a/app/assets/javascripts/directives/functional/infiniteScroll.js +++ /dev/null @@ -1,17 +0,0 @@ -/* @ngInject */ -export function infiniteScroll($rootScope, $window, $timeout) { - return { - link: function(scope, elem, attrs) { - const offset = parseInt(attrs.threshold) || 0; - const e = elem[0]; - elem.on('scroll', function() { - if ( - scope.$eval(attrs.canLoad) && - e.scrollTop + e.offsetHeight >= e.scrollHeight - offset - ) { - scope.$apply(attrs.infiniteScroll); - } - }); - } - }; -} diff --git a/app/assets/javascripts/directives/functional/infiniteScroll.ts b/app/assets/javascripts/directives/functional/infiniteScroll.ts new file mode 100644 index 000000000..1e8b10241 --- /dev/null +++ b/app/assets/javascripts/directives/functional/infiniteScroll.ts @@ -0,0 +1,26 @@ +import { debounce } from '@/utils'; +/* @ngInject */ +export function infiniteScroll() { + return { + link: function (scope: ng.IScope, elem: JQLite, attrs: any) { + const scopeAny = scope as any; + const offset = parseInt(attrs.threshold) || 0; + const element = elem[0]; + scopeAny.paginate = debounce(() => { + scope.$apply(attrs.infiniteScroll); + }, 10); + scopeAny.onScroll = () => { + if ( + scope.$eval(attrs.canLoad) && + element.scrollTop + element.offsetHeight >= element.scrollHeight - offset + ) { + scopeAny.paginate(); + } + }; + elem.on('scroll', scopeAny.onScroll); + scope.$on('$destroy', () => { + elem.off('scroll', scopeAny.onScroll);; + }); + } + }; +} diff --git a/app/assets/javascripts/directives/functional/lowercase.js b/app/assets/javascripts/directives/functional/lowercase.js deleted file mode 100644 index e4f7f9781..000000000 --- a/app/assets/javascripts/directives/functional/lowercase.js +++ /dev/null @@ -1,19 +0,0 @@ -/* @ngInject */ -export function lowercase() { - return { - require: 'ngModel', - link: function(scope, element, attrs, modelCtrl) { - var lowercase = function(inputValue) { - if (inputValue === undefined) inputValue = ''; - var lowercased = inputValue.toLowerCase(); - if (lowercased !== inputValue) { - modelCtrl.$setViewValue(lowercased); - modelCtrl.$render(); - } - return lowercased; - }; - modelCtrl.$parsers.push(lowercase); - lowercase(scope[attrs.ngModel]); - } - }; -} diff --git a/app/assets/javascripts/directives/functional/lowercase.ts b/app/assets/javascripts/directives/functional/lowercase.ts new file mode 100644 index 000000000..3fc479272 --- /dev/null +++ b/app/assets/javascripts/directives/functional/lowercase.ts @@ -0,0 +1,24 @@ +/* @ngInject */ +export function lowercase() { + return { + require: 'ngModel', + link: function ( + scope: ng.IScope, + _: JQLite, + attrs: any, + ctrl: any + ) { + const lowercase = (inputValue: string) => { + if (inputValue === undefined) inputValue = ''; + const lowercased = inputValue.toLowerCase(); + if (lowercased !== inputValue) { + ctrl.$setViewValue(lowercased); + ctrl.$render(); + } + return lowercased; + }; + ctrl.$parsers.push(lowercase); + lowercase((scope as any)[attrs.ngModel]); + } + }; +} diff --git a/app/assets/javascripts/directives/functional/selectOnClick.js b/app/assets/javascripts/directives/functional/selectOnClick.js deleted file mode 100644 index b657ba422..000000000 --- a/app/assets/javascripts/directives/functional/selectOnClick.js +++ /dev/null @@ -1,14 +0,0 @@ -/* @ngInject */ -export function selectOnClick($window) { - return { - restrict: 'A', - link: function(scope, element, attrs) { - element.on('focus', function() { - if (!$window.getSelection().toString()) { - /** Required for mobile Safari */ - this.setSelectionRange(0, this.value.length); - } - }); - } - }; -} diff --git a/app/assets/javascripts/directives/functional/selectOnFocus.ts b/app/assets/javascripts/directives/functional/selectOnFocus.ts new file mode 100644 index 000000000..755c1331a --- /dev/null +++ b/app/assets/javascripts/directives/functional/selectOnFocus.ts @@ -0,0 +1,17 @@ +/* @ngInject */ +export function selectOnFocus($window: ng.IWindowService) { + return { + restrict: 'A', + link: function (scope: ng.IScope, element: JQLite) { + element.on('focus', () => { + if (!$window.getSelection()!.toString()) { + const input = element[0] as HTMLInputElement; + /** Allow text to populate */ + setImmediate(() => { + input.setSelectionRange(0, input.value.length); + }) + } + }); + } + }; +} diff --git a/app/assets/javascripts/directives/functional/snEnter.js b/app/assets/javascripts/directives/functional/snEnter.ts similarity index 53% rename from app/assets/javascripts/directives/functional/snEnter.js rename to app/assets/javascripts/directives/functional/snEnter.ts index de91a89b1..5dd934756 100644 --- a/app/assets/javascripts/directives/functional/snEnter.js +++ b/app/assets/javascripts/directives/functional/snEnter.ts @@ -1,9 +1,13 @@ /* @ngInject */ export function snEnter() { - return function(scope, element, attrs) { - element.bind('keydown keypress', function(event) { + return function ( + scope: ng.IScope, + element: JQLite, + attrs: any + ) { + element.bind('keydown keypress', function (event) { if (event.which === 13) { - scope.$apply(function() { + scope.$apply(function () { scope.$eval(attrs.snEnter, { event: event }); }); diff --git a/app/assets/javascripts/directives/views/accountMenu.ts b/app/assets/javascripts/directives/views/accountMenu.ts new file mode 100644 index 000000000..93302611c --- /dev/null +++ b/app/assets/javascripts/directives/views/accountMenu.ts @@ -0,0 +1,589 @@ +import { WebDirective } from './../../types'; +import { isDesktopApplication, isNullOrUndefined } from '@/utils'; +import template from '%/directives/account-menu.pug'; +import { ProtectedAction, ContentType } from 'snjs'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { + STRING_ACCOUNT_MENU_UNCHECK_MERGE, + STRING_SIGN_OUT_CONFIRMATION, + STRING_E2E_ENABLED, + STRING_LOCAL_ENC_ENABLED, + STRING_ENC_NOT_ENABLED, + STRING_IMPORT_SUCCESS, + STRING_REMOVE_PASSCODE_CONFIRMATION, + STRING_REMOVE_PASSCODE_OFFLINE_ADDENDUM, + STRING_NON_MATCHING_PASSCODES, + STRING_NON_MATCHING_PASSWORDS, + STRING_INVALID_IMPORT_FILE, + STRING_GENERATING_LOGIN_KEYS, + STRING_GENERATING_REGISTER_KEYS, + StringImportError +} from '@/strings'; +import { SyncOpStatus } from 'snjs/dist/@types/services/sync/sync_op_status'; +import { PasswordWizardType } from '@/types'; +import { BackupFile } from 'snjs/dist/@types/services/protocol_service'; +import { confirmDialog } from '@/services/alertService'; + +const ELEMENT_ID_IMPORT_PASSWORD_INPUT = 'import-password-request'; + +const ELEMENT_NAME_AUTH_EMAIL = 'email'; +const ELEMENT_NAME_AUTH_PASSWORD = 'password'; +const ELEMENT_NAME_AUTH_PASSWORD_CONF = 'password_conf'; + +type FormData = { + email: string + user_password: string + password_conf: string + confirmPassword: boolean + showLogin: boolean + showRegister: boolean + showPasscodeForm: boolean + strictSignin?: boolean + ephemeral: boolean + mfa: { payload: any } + userMfaCode?: string + mergeLocal?: boolean + url: string + authenticating: boolean + status: string + passcode: string + confirmPasscode: string + changingPasscode: boolean +} + +type AccountMenuState = { + formData: Partial + appVersion: string + passcodeAutoLockOptions: any + user: any + mutable: any + importData: any +} + +class AccountMenuCtrl extends PureViewCtrl { + + public appVersion: string + private syncStatus?: SyncOpStatus + private closeFunction?: () => void + + /* @ngInject */ + constructor( + $timeout: ng.ITimeoutService, + appVersion: string, + ) { + super($timeout); + this.appVersion = appVersion; + } + + /** @override */ + getInitialState() { + return { + appVersion: 'v' + ((window as any).electronAppVersion || this.appVersion), + passcodeAutoLockOptions: this.application!.getLockService().getAutoLockIntervalOptions(), + user: this.application!.getUser(), + formData: { + mergeLocal: true, + ephemeral: false + }, + mutable: {} + } as AccountMenuState; + } + + getState() { + return this.state as AccountMenuState; + } + + async onAppKeyChange() { + super.onAppKeyChange(); + this.setState(this.refreshedCredentialState()); + } + + async onAppLaunch() { + super.onAppLaunch(); + this.setState(this.refreshedCredentialState()); + this.loadHost(); + this.reloadAutoLockInterval(); + this.loadBackupsAvailability(); + } + + refreshedCredentialState() { + return { + user: this.application!.getUser(), + canAddPasscode: !this.application!.isEphemeralSession(), + hasPasscode: this.application!.hasPasscode(), + showPasscodeForm: false + }; + } + + $onInit() { + super.$onInit(); + this.initProps({ + closeFunction: this.closeFunction + }); + this.syncStatus = this.application!.getSyncStatus(); + } + + close() { + this.$timeout(() => { + this.props.closeFunction(); + }); + } + + async loadHost() { + const host = await this.application!.getHost(); + this.setState({ + server: host, + formData: { + ...this.getState().formData, + url: host + } + }); + } + + onHostInputChange() { + const url = this.getState().formData.url!; + this.application!.setHost(url); + } + + async loadBackupsAvailability() { + const hasUser = !isNullOrUndefined(this.application!.getUser()); + const hasPasscode = this.application!.hasPasscode(); + const encryptedAvailable = hasUser || hasPasscode; + + function encryptionStatusString() { + if (hasUser) { + return STRING_E2E_ENABLED; + } else if (hasPasscode) { + return STRING_LOCAL_ENC_ENABLED; + } else { + return STRING_ENC_NOT_ENABLED; + } + } + + this.setState({ + encryptionStatusString: encryptionStatusString(), + encryptionEnabled: encryptedAvailable, + mutable: { + ...this.getState().mutable, + backupEncrypted: encryptedAvailable + } + }); + } + + submitMfaForm() { + this.login(); + } + + blurAuthFields() { + const names = [ + ELEMENT_NAME_AUTH_EMAIL, + ELEMENT_NAME_AUTH_PASSWORD, + ELEMENT_NAME_AUTH_PASSWORD_CONF + ]; + for (const name of names) { + const element = document.getElementsByName(name)[0]; + if (element) { + element.blur(); + } + } + } + + submitAuthForm() { + if (!this.getState().formData.email || !this.getState().formData.user_password) { + return; + } + this.blurAuthFields(); + if (this.getState().formData.showLogin) { + this.login(); + } else { + this.register(); + } + } + + async setFormDataState(formData: Partial) { + return this.setState({ + formData: { + ...this.getState().formData, + ...formData + } + }); + } + + async login() { + await this.setFormDataState({ + status: STRING_GENERATING_LOGIN_KEYS, + authenticating: true + }); + const formData = this.getState().formData; + const response = await this.application!.signIn( + formData.email!, + formData.user_password!, + formData.strictSignin, + formData.ephemeral, + formData.mfa && formData.mfa.payload.mfa_key, + formData.userMfaCode, + formData.mergeLocal + ); + const hasError = !response || response.error; + if (!hasError) { + await this.setFormDataState({ + authenticating: false, + user_password: undefined + }); + this.close(); + return; + } + const error = response + ? response.error + : { message: "An unknown error occured." }; + if (error.tag === 'mfa-required' || error.tag === 'mfa-invalid') { + await this.setFormDataState({ + showLogin: false, + mfa: error, + status: undefined + }); + } else { + await this.setFormDataState({ + showLogin: true, + mfa: undefined, + status: undefined, + user_password: undefined + }); + if (error.message) { + this.application!.alertService!.alert(error.message); + } + } + await this.setFormDataState({ + authenticating: false + }); + } + + async register() { + const confirmation = this.getState().formData.password_conf; + if (confirmation !== this.getState().formData.user_password) { + this.application!.alertService!.alert( + STRING_NON_MATCHING_PASSWORDS + ); + return; + } + await this.setFormDataState({ + confirmPassword: false, + status: STRING_GENERATING_REGISTER_KEYS, + authenticating: true + }); + const response = await this.application!.register( + this.getState().formData.email!, + this.getState().formData.user_password!, + this.getState().formData.ephemeral, + this.getState().formData.mergeLocal + ); + if (!response || response.error) { + await this.setFormDataState({ + status: undefined + }); + const error = response + ? response.error + : { message: "An unknown error occured." }; + await this.setFormDataState({ + authenticating: false + }); + this.application!.alertService!.alert( + error.message + ); + } else { + await this.setFormDataState({ authenticating: false }); + this.close(); + } + } + + async mergeLocalChanged() { + if (!this.getState().formData.mergeLocal) { + if (await confirmDialog({ + text: STRING_ACCOUNT_MENU_UNCHECK_MERGE, + confirmButtonStyle: 'danger' + })) { + this.setFormDataState({ + mergeLocal: true + }); + } + } + } + + openPasswordWizard() { + this.close(); + this.application!.presentPasswordWizard(PasswordWizardType.ChangePassword); + } + + async openPrivilegesModal() { + const run = () => { + this.application!.presentPrivilegesManagementModal(); + this.close(); + }; + const needsPrivilege = await this.application!.privilegesService!.actionRequiresPrivilege( + ProtectedAction.ManagePrivileges + ); + if (needsPrivilege) { + this.application!.presentPrivilegesModal( + ProtectedAction.ManagePrivileges, + () => { + run(); + } + ); + } else { + run(); + } + } + + async destroyLocalData() { + if (await confirmDialog({ + text: STRING_SIGN_OUT_CONFIRMATION, + confirmButtonStyle: "danger" + })) { + this.application.signOut(); + } + } + + async submitImportPassword() { + await this.performImport( + this.getState().importData.data, + this.getState().importData.password + ); + } + + async readFile(file: File): Promise { + return new Promise((resolve) => { + const reader = new FileReader(); + reader.onload = (e) => { + try { + const data = JSON.parse(e.target!.result as string); + resolve(data); + } catch (e) { + this.application!.alertService!.alert( + STRING_INVALID_IMPORT_FILE + ); + } + }; + reader.readAsText(file); + }); + } + + /** + * @template + */ + async importFileSelected(files: File[]) { + const run = async () => { + const file = files[0]; + const data = await this.readFile(file); + if (!data) { + return; + } + if (data.auth_params || data.keyParams) { + await this.setState({ + importData: { + ...this.getState().importData, + requestPassword: true, + data: data + } + }); + const element = document.getElementById( + ELEMENT_ID_IMPORT_PASSWORD_INPUT + ); + if (element) { + element.scrollIntoView(false); + } + } else { + await this.performImport(data, undefined); + } + }; + const needsPrivilege = await this.application!.privilegesService!.actionRequiresPrivilege( + ProtectedAction.ManageBackups + ); + if (needsPrivilege) { + this.application!.presentPrivilegesModal( + ProtectedAction.ManageBackups, + run + ); + } else { + run(); + } + } + + async performImport(data: BackupFile, password?: string) { + await this.setState({ + importData: { + ...this.getState().importData, + loading: true + } + }); + const errorCount = await this.importJSONData(data, password); + this.setState({ + importData: null + }); + if (errorCount > 0) { + const message = StringImportError(errorCount); + this.application!.alertService!.alert( + message + ); + } else { + this.application!.alertService!.alert( + STRING_IMPORT_SUCCESS + ); + } + } + + async importJSONData(data: BackupFile, password?: string) { + const { errorCount } = await this.application!.importData( + data, + password + ); + return errorCount; + } + + async downloadDataArchive() { + this.application!.getArchiveService().downloadBackup(this.getState().mutable.backupEncrypted); + } + + notesAndTagsCount() { + return this.application!.getItems( + [ + ContentType.Note, + ContentType.Tag + ] + ).length; + } + + encryptionStatusForNotes() { + const length = this.notesAndTagsCount(); + return length + "/" + length + " notes and tags encrypted"; + } + + async reloadAutoLockInterval() { + const interval = await this.application!.getLockService().getAutoLockInterval(); + this.setState({ + selectedAutoLockInterval: interval + }); + } + + async selectAutoLockInterval(interval: number) { + const run = async () => { + await this.application!.getLockService().setAutoLockInterval(interval); + this.reloadAutoLockInterval(); + }; + const needsPrivilege = await this.application!.privilegesService!.actionRequiresPrivilege( + ProtectedAction.ManagePasscode + ); + if (needsPrivilege) { + this.application!.presentPrivilegesModal( + ProtectedAction.ManagePasscode, + () => { + run(); + } + ); + } else { + run(); + } + } + + hidePasswordForm() { + this.setFormDataState({ + showLogin: false, + showRegister: false, + user_password: undefined, + password_conf: undefined + }); + } + + hasPasscode() { + return this.application!.hasPasscode(); + } + + addPasscodeClicked() { + this.setFormDataState({ + showPasscodeForm: true + }); + } + + submitPasscodeForm() { + const passcode = this.getState().formData.passcode!; + if (passcode !== this.getState().formData.confirmPasscode!) { + this.application!.alertService!.alert( + STRING_NON_MATCHING_PASSCODES + ); + return; + } + (this.getState().formData.changingPasscode + ? this.application!.changePasscode(passcode) + : this.application!.setPasscode(passcode) + ).then(() => { + this.setFormDataState({ + passcode: undefined, + confirmPasscode: undefined, + showPasscodeForm: false + }); + }); + } + + async changePasscodePressed() { + const run = () => { + this.getState().formData.changingPasscode = true; + this.addPasscodeClicked(); + }; + const needsPrivilege = await this.application!.privilegesService!.actionRequiresPrivilege( + ProtectedAction.ManagePasscode + ); + if (needsPrivilege) { + this.application!.presentPrivilegesModal( + ProtectedAction.ManagePasscode, + run + ); + } else { + run(); + } + } + + async removePasscodePressed() { + const run = async () => { + const signedIn = !isNullOrUndefined(await this.application!.getUser()); + let message = STRING_REMOVE_PASSCODE_CONFIRMATION; + if (!signedIn) { + message += STRING_REMOVE_PASSCODE_OFFLINE_ADDENDUM; + } + if (await confirmDialog({ + text: message, + confirmButtonStyle: 'danger' + })) { + this.application!.removePasscode(); + } + }; + const needsPrivilege = await this.application!.privilegesService!.actionRequiresPrivilege( + ProtectedAction.ManagePasscode + ); + if (needsPrivilege) { + this.application!.presentPrivilegesModal( + ProtectedAction.ManagePasscode, + run + ); + } else { + run(); + } + } + + isDesktopApplication() { + return isDesktopApplication(); + } +} + +export class AccountMenu extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = AccountMenuCtrl; + this.controllerAs = 'self'; + this.bindToController = true; + this.scope = { + closeFunction: '&', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/actionsMenu.js b/app/assets/javascripts/directives/views/actionsMenu.js deleted file mode 100644 index dadf52a3e..000000000 --- a/app/assets/javascripts/directives/views/actionsMenu.js +++ /dev/null @@ -1,104 +0,0 @@ -import template from '%/directives/actions-menu.pug'; -import { PureCtrl } from '@Controllers'; - -class ActionsMenuCtrl extends PureCtrl { - /* @ngInject */ - constructor( - $scope, - $timeout, - actionsManager, - ) { - super($timeout); - this.$timeout = $timeout; - this.actionsManager = actionsManager; - } - - $onInit() { - this.initProps({ - item: this.item - }); - this.loadExtensions(); - }; - - async loadExtensions() { - const extensions = this.actionsManager.extensions.sort((a, b) => { - return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; - }); - for (const extension of extensions) { - extension.loading = true; - await this.actionsManager.loadExtensionInContextOfItem(extension, this.props.item); - extension.loading = false; - } - this.setState({ - extensions: extensions - }); - } - - async executeAction(action, extension) { - if (action.verb === 'nested') { - if (!action.subrows) { - action.subrows = this.subRowsForAction(action, extension); - } else { - action.subrows = null; - } - return; - } - action.running = true; - const result = await this.actionsManager.executeAction( - action, - extension, - this.props.item - ); - if (action.error) { - return; - } - action.running = false; - this.handleActionResult(action, result); - await this.actionsManager.loadExtensionInContextOfItem(extension, this.props.item); - this.setState({ - extensions: this.state.extensions - }); - } - - handleActionResult(action, result) { - switch (action.verb) { - case 'render': { - const item = result.item; - this.actionsManager.presentRevisionPreviewModal( - item.uuid, - item.content - ); - } - } - } - - subRowsForAction(parentAction, extension) { - if (!parentAction.subactions) { - return null; - } - return parentAction.subactions.map((subaction) => { - return { - onClick: () => { - this.executeAction(subaction, extension, parentAction); - }, - label: subaction.label, - subtitle: subaction.desc, - spinnerClass: subaction.running ? 'info' : null - }; - }); - } -} - -export class ActionsMenu { - constructor() { - this.restrict = 'E'; - this.template = template; - this.replace = true; - this.controller = ActionsMenuCtrl; - this.controllerAs = 'self'; - this.bindToController = true; - this.scope = { - item: '=' - }; - } -} diff --git a/app/assets/javascripts/directives/views/actionsMenu.ts b/app/assets/javascripts/directives/views/actionsMenu.ts new file mode 100644 index 000000000..a38321c30 --- /dev/null +++ b/app/assets/javascripts/directives/views/actionsMenu.ts @@ -0,0 +1,199 @@ +import { WebApplication } from '@/ui_models/application'; +import { WebDirective } from './../../types'; +import template from '%/directives/actions-menu.pug'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { SNItem, Action, SNActionsExtension } from 'snjs/dist/@types'; +import { ActionResponse } from 'snjs/dist/@types/services/actions_service'; +import { ActionsExtensionMutator } from 'snjs/dist/@types/models/app/extension'; + +type ActionsMenuScope = { + application: WebApplication + item: SNItem +} + +type ActionSubRow = { + onClick: () => void + label: string + subtitle: string + spinnerClass: string | undefined +} + +type UpdateActionParams = { + running?: boolean + error?: boolean + subrows?: ActionSubRow[] +} + +type UpdateExtensionParams = { + hidden?: boolean +} + +class ActionsMenuCtrl extends PureViewCtrl implements ActionsMenuScope { + + application!: WebApplication + item!: SNItem + public loadingExtensions: boolean = true + + /* @ngInject */ + constructor( + $timeout: ng.ITimeoutService + ) { + super($timeout); + this.state = { + extensions: [] + }; + } + + $onInit() { + super.$onInit(); + this.initProps({ + item: this.item + }); + this.loadExtensions(); + }; + + async loadExtensions() { + const actionExtensions = this.application.actionsManager!.getExtensions().sort((a, b) => { + return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; + }); + const extensionsForItem = await Promise.all(actionExtensions.map((extension) => { + return this.application.actionsManager!.loadExtensionInContextOfItem( + extension, + this.props.item + ); + })); + if (extensionsForItem.length == 0) { + this.loadingExtensions = false; + } + await this.setState({ + extensions: extensionsForItem + }); + } + + async executeAction(action: Action, extension: SNActionsExtension) { + if (action.verb === 'nested') { + if (!action.subrows) { + const subrows = this.subRowsForAction(action, extension); + await this.updateAction(action, extension, { subrows }); + } + return; + } + await this.updateAction(action, extension, { running: true }); + const response = await this.application.actionsManager!.runAction( + action, + this.props.item, + async () => { + /** @todo */ + return ''; + } + ); + if (response.error) { + await this.updateAction(action, extension, { error: true }); + return; + } + await this.updateAction(action, extension, { running: false }); + this.handleActionResponse(action, response); + await this.reloadExtension(extension); + } + + handleActionResponse(action: Action, result: ActionResponse) { + switch (action.verb) { + case 'render': { + const item = result.item; + this.application.presentRevisionPreviewModal( + item.uuid, + item.content + ); + } + } + } + + private subRowsForAction(parentAction: Action, extension: SNActionsExtension): ActionSubRow[] | undefined { + if (!parentAction.subactions) { + return undefined; + } + return parentAction.subactions.map((subaction) => { + return { + onClick: () => { + this.executeAction(subaction, extension); + }, + label: subaction.label, + subtitle: subaction.desc, + spinnerClass: subaction.running ? 'info' : undefined + }; + }); + } + + private async updateAction( + action: Action, + extension: SNActionsExtension, + params: UpdateActionParams + ) { + const updatedExtension = await this.application.changeItem(extension.uuid, (mutator) => { + const extensionMutator = mutator as ActionsExtensionMutator; + extensionMutator.actions = extension!.actions.map((act) => { + if (act && params && act.verb === action.verb && act.url === action.url) { + return { + ...action, + running: params?.running, + error: params?.error, + subrows: params?.subrows || act?.subrows, + }; + } + return act; + }); + }) as SNActionsExtension; + await this.updateExtension(updatedExtension); + } + + private async updateExtension( + extension: SNActionsExtension, + params?: UpdateExtensionParams + ) { + const updatedExtension = await this.application.changeItem(extension.uuid, (mutator) => { + const extensionMutator = mutator as ActionsExtensionMutator; + extensionMutator.hidden = params && params.hidden; + }) as SNActionsExtension; + const extensions = this.state.extensions.map((ext: SNActionsExtension) => { + if (extension.uuid === ext.uuid) { + return updatedExtension; + } + return ext; + }); + await this.setState({ + extensions: extensions + }); + } + + private async reloadExtension(extension: SNActionsExtension) { + const extensionInContext = await this.application.actionsManager!.loadExtensionInContextOfItem( + extension, + this.props.item + ); + const extensions = this.state.extensions.map((ext: SNActionsExtension) => { + if (extension.uuid === ext.uuid) { + return extensionInContext; + } + return ext; + }); + this.setState({ + extensions: extensions + }); + } +} + +export class ActionsMenu extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.replace = true; + this.controller = ActionsMenuCtrl; + this.controllerAs = 'self'; + this.bindToController = true; + this.scope = { + item: '=', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/componentModal.js b/app/assets/javascripts/directives/views/componentModal.js deleted file mode 100644 index 49c5e5cd1..000000000 --- a/app/assets/javascripts/directives/views/componentModal.js +++ /dev/null @@ -1,34 +0,0 @@ -import template from '%/directives/component-modal.pug'; - -export class ComponentModalCtrl { - /* @ngInject */ - constructor($scope, $element) { - this.$element = $element; - this.$scope = $scope; - } - - dismiss(callback) { - this.$element.remove(); - this.$scope.$destroy(); - if(this.onDismiss && this.onDismiss()) { - this.onDismiss()(this.component); - } - callback && callback(); - } -} - -export class ComponentModal { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = ComponentModalCtrl; - this.controllerAs = 'ctrl'; - this.bindToController = true; - this.scope = { - show: '=', - component: '=', - callback: '=', - onDismiss: '&' - }; - } -} diff --git a/app/assets/javascripts/directives/views/componentModal.ts b/app/assets/javascripts/directives/views/componentModal.ts new file mode 100644 index 000000000..fe01ee99f --- /dev/null +++ b/app/assets/javascripts/directives/views/componentModal.ts @@ -0,0 +1,64 @@ +import { WebApplication } from '@/ui_models/application'; +import { SNComponent, LiveItem } from 'snjs'; +import { WebDirective } from './../../types'; +import template from '%/directives/component-modal.pug'; + +export type ComponentModalScope = { + componentUuid: string + onDismiss: () => void + application: WebApplication +} + +export class ComponentModalCtrl implements ComponentModalScope { + $element: JQLite + componentUuid!: string + onDismiss!: () => void + application!: WebApplication + liveComponent!: LiveItem + component!: SNComponent + + /* @ngInject */ + constructor($element: JQLite) { + this.$element = $element; + } + + $onInit() { + this.liveComponent = new LiveItem( + this.componentUuid, + this.application, + (component) => { + this.component = component; + } + ); + this.application.componentGroup.activateComponent(this.component); + } + + $onDestroy() { + this.application.componentGroup.deactivateComponent(this.component); + this.liveComponent.deinit(); + } + + dismiss() { + this.onDismiss && this.onDismiss(); + const elem = this.$element; + const scope = elem.scope(); + scope.$destroy(); + elem.remove(); + } +} + +export class ComponentModal extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = ComponentModalCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + componentUuid: '=', + onDismiss: '&', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/componentView.ts b/app/assets/javascripts/directives/views/componentView.ts new file mode 100644 index 000000000..3385b0de8 --- /dev/null +++ b/app/assets/javascripts/directives/views/componentView.ts @@ -0,0 +1,250 @@ +import { WebApplication } from '@/ui_models/application'; +import { SNComponent, ComponentAction, LiveItem } from 'snjs'; +import { WebDirective } from './../../types'; +import template from '%/directives/component-view.pug'; +import { isDesktopApplication } from '../../utils'; +/** + * The maximum amount of time we'll wait for a component + * to load before displaying error + */ +const MaxLoadThreshold = 4000; +const VisibilityChangeKey = 'visibilitychange'; + +interface ComponentViewScope { + componentUuid: string + onLoad?: (component: SNComponent) => void + application: WebApplication +} + +class ComponentViewCtrl implements ComponentViewScope { + + /** @scope */ + onLoad?: (component: SNComponent) => void + componentUuid!: string + application!: WebApplication + liveComponent!: LiveItem + + private $rootScope: ng.IRootScopeService + private $timeout: ng.ITimeoutService + private componentValid = true + private cleanUpOn: () => void + private unregisterComponentHandler!: () => void + private unregisterDesktopObserver!: () => void + private issueLoading = false + public reloading = false + private expired = false + private loading = false + private didAttemptReload = false + public error: 'offline-restricted' | 'url-missing' | undefined + private loadTimeout: any + + /* @ngInject */ + constructor( + $scope: ng.IScope, + $rootScope: ng.IRootScopeService, + $timeout: ng.ITimeoutService, + ) { + this.$rootScope = $rootScope; + this.$timeout = $timeout; + this.cleanUpOn = $scope.$on('ext-reload-complete', () => { + this.reloadStatus(false); + }); + /** To allow for registering events */ + this.onVisibilityChange = this.onVisibilityChange.bind(this); + } + + $onDestroy() { + this.cleanUpOn(); + (this.cleanUpOn as any) = undefined; + this.unregisterComponentHandler(); + (this.unregisterComponentHandler as any) = undefined; + this.unregisterDesktopObserver(); + (this.unregisterDesktopObserver as any) = undefined; + this.liveComponent.deinit(); + (this.liveComponent as any) = undefined; + (this.application as any) = undefined; + (this.onVisibilityChange as any) = undefined; + this.onLoad = undefined; + document.removeEventListener( + VisibilityChangeKey, + this.onVisibilityChange + ); + } + + $onInit() { + this.liveComponent = new LiveItem(this.componentUuid, this.application); + this.registerComponentHandlers(); + this.registerPackageUpdateObserver(); + } + + get component() { + return this.liveComponent?.item; + } + + public onIframeInit() { + /** Perform in timeout required so that dynamic iframe id is set (based on ctrl values) */ + this.$timeout(() => { + this.loadComponent(); + }); + } + + private loadComponent() { + if (!this.component) { + throw 'Component view is missing component'; + } + if (!this.component.active) { + throw 'Component view component must be active'; + } + const iframe = this.application.componentManager!.iframeForComponent( + this.componentUuid + ); + if (!iframe) { + return; + } + this.loading = true; + if (this.loadTimeout) { + this.$timeout.cancel(this.loadTimeout); + } + this.loadTimeout = this.$timeout(() => { + this.handleIframeLoadTimeout(); + }, MaxLoadThreshold); + iframe.onload = () => { + this.reloadStatus(); + this.handleIframeLoad(iframe); + }; + } + + private registerPackageUpdateObserver() { + this.unregisterDesktopObserver = this.application.getDesktopService() + .registerUpdateObserver((component: SNComponent) => { + if (component.uuid === this.component.uuid && component.active) { + this.reloadIframe(); + } + }); + } + + private registerComponentHandlers() { + this.unregisterComponentHandler = this.application.componentManager!.registerHandler({ + identifier: 'component-view-' + Math.random(), + areas: [this.component.area], + actionHandler: (component, action, data) => { + if (action === ComponentAction.SetSize) { + this.application.componentManager!.handleSetSizeEvent(component, data); + } + } + }); + } + + private reloadIframe() { + this.$timeout(() => { + this.reloading = true; + this.$timeout(() => { + this.reloading = false; + }); + }) + } + + private onVisibilityChange() { + if (document.visibilityState === 'hidden') { + return; + } + if (this.issueLoading) { + this.reloadIframe(); + } + } + + public reloadStatus(doManualReload = true) { + const component = this.component; + const offlineRestricted = component.offlineOnly && !isDesktopApplication(); + const hasUrlError = function () { + if (isDesktopApplication()) { + return !component.local_url && !component.hasValidHostedUrl(); + } else { + return !component.hasValidHostedUrl(); + } + }(); + this.expired = component.valid_until && component.valid_until <= new Date(); + const readonlyState = this.application.componentManager! + .getReadonlyStateForComponent(component); + if (!readonlyState.lockReadonly) { + this.application.componentManager! + .setReadonlyStateForComponent(component, this.expired); + } + this.componentValid = !offlineRestricted && !hasUrlError; + if (!this.componentValid) { + this.loading = false; + } + if (offlineRestricted) { + this.error = 'offline-restricted'; + } else if (hasUrlError) { + this.error = 'url-missing'; + } else { + this.error = undefined; + } + if (this.expired && doManualReload) { + this.$rootScope.$broadcast('reload-ext-dat'); + } + } + + private async handleIframeLoadTimeout() { + if (this.loading) { + this.loading = false; + this.issueLoading = true; + if (!this.didAttemptReload) { + this.didAttemptReload = true; + this.reloadIframe(); + } else { + document.addEventListener( + VisibilityChangeKey, + this.onVisibilityChange + ); + } + } + } + + private async handleIframeLoad(iframe: HTMLIFrameElement) { + let desktopError = false; + if (isDesktopApplication()) { + try { + /** Accessing iframe.contentWindow.origin only allowed in desktop app. */ + if (!iframe.contentWindow!.origin || iframe.contentWindow!.origin === 'null') { + desktopError = true; + } + } catch (e) { } + } + this.$timeout.cancel(this.loadTimeout); + await this.application.componentManager!.registerComponentWindow( + this.component, + iframe.contentWindow! + ); + const avoidFlickerTimeout = 7; + this.$timeout(() => { + this.loading = false; + // eslint-disable-next-line no-unneeded-ternary + this.issueLoading = desktopError ? true : false; + this.onLoad && this.onLoad(this.component!); + }, avoidFlickerTimeout); + } + + /** @template */ + public getUrl() { + const url = this.application.componentManager!.urlForComponent(this.component); + return url; + } +} + +export class ComponentView extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.scope = { + componentUuid: '=', + onLoad: '=?', + application: '=' + }; + this.controller = ComponentViewCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + } +} diff --git a/app/assets/javascripts/directives/views/conflictResolutionModal.js b/app/assets/javascripts/directives/views/conflictResolutionModal.js deleted file mode 100644 index b40c8771b..000000000 --- a/app/assets/javascripts/directives/views/conflictResolutionModal.js +++ /dev/null @@ -1,95 +0,0 @@ -import template from '%/directives/conflict-resolution-modal.pug'; - -class ConflictResolutionCtrl { - /* @ngInject */ - constructor( - $element, - alertManager, - archiveManager, - modelManager, - syncManager - ) { - this.$element = $element; - this.alertManager = alertManager; - this.archiveManager = archiveManager; - this.modelManager = modelManager; - this.syncManager = syncManager; - } - - $onInit() { - this.contentType = this.item1.content_type; - this.item1Content = this.createContentString(this.item1); - this.item2Content = this.createContentString(this.item2); - }; - - createContentString(item) { - const data = Object.assign({ - created_at: item.created_at, - updated_at: item.updated_at - }, item.content); - return JSON.stringify(data, null, 2); - } - - keepItem1() { - this.alertManager.confirm({ - text: `Are you sure you want to delete the item on the right?`, - destructive: true, - onConfirm: () => { - this.modelManager.setItemToBeDeleted(this.item2); - this.syncManager.sync().then(() => { - this.applyCallback(); - }); - this.dismiss(); - } - }); - } - - keepItem2() { - this.alertManager.confirm({ - text: `Are you sure you want to delete the item on the left?`, - destructive: true, - onConfirm: () => { - this.modelManager.setItemToBeDeleted(this.item1); - this.syncManager.sync().then(() => { - this.applyCallback(); - }); - this.dismiss(); - } - }); - } - - keepBoth() { - this.applyCallback(); - this.dismiss(); - } - - export() { - this.archiveManager.downloadBackupOfItems( - [this.item1, this.item2], - true - ); - } - - applyCallback() { - this.callback && this.callback(); - } - - dismiss() { - this.$element.remove(); - } -} - -export class ConflictResolutionModal { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = ConflictResolutionCtrl; - this.controllerAs = 'ctrl'; - this.bindToController = true; - this.scope = { - item1: '=', - item2: '=', - callback: '=' - }; - } -} diff --git a/app/assets/javascripts/directives/views/editorMenu.js b/app/assets/javascripts/directives/views/editorMenu.js deleted file mode 100644 index f2a81e4b5..000000000 --- a/app/assets/javascripts/directives/views/editorMenu.js +++ /dev/null @@ -1,110 +0,0 @@ -import { isDesktopApplication } from '@/utils'; -import template from '%/directives/editor-menu.pug'; -import { PureCtrl } from '@Controllers'; - -class EditorMenuCtrl extends PureCtrl { - /* @ngInject */ - constructor( - $timeout, - componentManager, - modelManager, - syncManager, - ) { - super($timeout); - this.$timeout = $timeout; - this.componentManager = componentManager; - this.modelManager = modelManager; - this.syncManager = syncManager; - this.state = { - isDesktop: isDesktopApplication() - }; - } - - $onInit() { - const editors = this.componentManager.componentsForArea('editor-editor') - .sort((a, b) => { - return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; - }); - const defaultEditor = editors.filter((e) => e.isDefaultEditor())[0]; - this.setState({ - editors: editors, - defaultEditor: defaultEditor - }); - }; - - selectComponent(component) { - if(component) { - if(component.content.conflict_of) { - component.content.conflict_of = null; - this.modelManager.setItemDirty(component, true); - this.syncManager.sync(); - } - } - this.$timeout(() => { - this.callback()(component); - }); - } - - toggleDefaultForEditor(editor) { - if(this.state.defaultEditor === editor) { - this.removeEditorDefault(editor); - } else { - this.makeEditorDefault(editor); - } - } - - offlineAvailableForComponent(component) { - return component.local_url && this.state.isDesktop; - } - - makeEditorDefault(component) { - const currentDefault = this.componentManager - .componentsForArea('editor-editor') - .filter((e) => e.isDefaultEditor())[0]; - if(currentDefault) { - currentDefault.setAppDataItem('defaultEditor', false); - this.modelManager.setItemDirty(currentDefault); - } - component.setAppDataItem('defaultEditor', true); - this.modelManager.setItemDirty(component); - this.syncManager.sync(); - this.setState({ - defaultEditor: component - }); - } - - removeEditorDefault(component) { - component.setAppDataItem('defaultEditor', false); - this.modelManager.setItemDirty(component); - this.syncManager.sync(); - this.setState({ - defaultEditor: null - }); - } - - shouldDisplayRunningLocallyLabel(component) { - if(!component.runningLocally) { - return false; - } - if(component === this.selectedEditor) { - return true; - } else { - return false; - } - } -} - -export class EditorMenu { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = EditorMenuCtrl; - this.controllerAs = 'self'; - this.bindToController = true; - this.scope = { - callback: '&', - selectedEditor: '=', - currentItem: '=' - }; - } -} diff --git a/app/assets/javascripts/directives/views/editorMenu.ts b/app/assets/javascripts/directives/views/editorMenu.ts new file mode 100644 index 000000000..e9b27536d --- /dev/null +++ b/app/assets/javascripts/directives/views/editorMenu.ts @@ -0,0 +1,127 @@ +import { WebDirective } from './../../types'; +import { WebApplication } from '@/ui_models/application'; +import { SNComponent, SNItem, ComponentArea } from 'snjs'; +import { isDesktopApplication } from '@/utils'; +import template from '%/directives/editor-menu.pug'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { ComponentMutator } from '@node_modules/snjs/dist/@types/models'; + +interface EditorMenuScope { + callback: (component: SNComponent) => void + selectedEditorUuid: string + currentItem: SNItem + application: WebApplication +} + +class EditorMenuCtrl extends PureViewCtrl implements EditorMenuScope { + + callback!: () => (component: SNComponent) => void + selectedEditorUuid!: string + currentItem!: SNItem + application!: WebApplication + + /* @ngInject */ + constructor( + $timeout: ng.ITimeoutService, + ) { + super($timeout); + this.state = { + isDesktop: isDesktopApplication() + }; + } + + public isEditorSelected(editor: SNComponent) { + if(!this.selectedEditorUuid) { + return false; + } + return this.selectedEditorUuid === editor.uuid; + } + + public isEditorDefault(editor: SNComponent) { + return this.state.defaultEditor?.uuid === editor.uuid; + } + + $onInit() { + super.$onInit(); + const editors = this.application.componentManager!.componentsForArea(ComponentArea.Editor) + .sort((a, b) => { + return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; + }); + const defaultEditor = editors.filter((e) => e.isDefaultEditor())[0]; + this.setState({ + editors: editors, + defaultEditor: defaultEditor + }); + }; + + selectComponent(component: SNComponent) { + if (component) { + if (component.conflictOf) { + this.application.changeAndSaveItem(component.uuid, (mutator) => { + mutator.conflictOf = undefined; + }) + } + } + this.$timeout(() => { + this.callback()(component); + }); + } + + toggleDefaultForEditor(editor: SNComponent) { + if (this.state.defaultEditor === editor) { + this.removeEditorDefault(editor); + } else { + this.makeEditorDefault(editor); + } + } + + offlineAvailableForComponent(component: SNComponent) { + return component.local_url && this.state.isDesktop; + } + + makeEditorDefault(component: SNComponent) { + const currentDefault = this.application.componentManager! + .componentsForArea(ComponentArea.Editor) + .filter((e) => e.isDefaultEditor())[0]; + if (currentDefault) { + this.application.changeItem(currentDefault.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.defaultEditor = false; + }) + } + this.application.changeAndSaveItem(component.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.defaultEditor = true; + }); + this.setState({ + defaultEditor: component + }); + } + + removeEditorDefault(component: SNComponent) { + this.application.changeAndSaveItem(component.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.defaultEditor = false; + }); + this.setState({ + defaultEditor: null + }); + } +} + +export class EditorMenu extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = EditorMenuCtrl; + this.controllerAs = 'self'; + this.bindToController = true; + this.scope = { + callback: '&', + selectedEditorUuid: '=', + currentItem: '=', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/index.js b/app/assets/javascripts/directives/views/index.ts similarity index 91% rename from app/assets/javascripts/directives/views/index.js rename to app/assets/javascripts/directives/views/index.ts index 5a9f76471..1f51d0023 100644 --- a/app/assets/javascripts/directives/views/index.js +++ b/app/assets/javascripts/directives/views/index.ts @@ -2,7 +2,6 @@ export { AccountMenu } from './accountMenu'; export { ActionsMenu } from './actionsMenu'; export { ComponentModal } from './componentModal'; export { ComponentView } from './componentView'; -export { ConflictResolutionModal } from './conflictResolutionModal'; export { EditorMenu } from './editorMenu'; export { InputModal } from './inputModal'; export { MenuRow } from './menuRow'; diff --git a/app/assets/javascripts/directives/views/inputModal.js b/app/assets/javascripts/directives/views/inputModal.js deleted file mode 100644 index 12c56495d..000000000 --- a/app/assets/javascripts/directives/views/inputModal.js +++ /dev/null @@ -1,37 +0,0 @@ -import template from '%/directives/input-modal.pug'; - -class InputModalCtrl { - - /* @ngInject */ - constructor($scope, $element) { - this.$element = $element; - this.formData = {}; - } - - dismiss() { - this.$element.remove(); - this.$scope.$destroy(); - } - - submit() { - this.callback()(this.formData.input); - this.dismiss(); - } -} - -export class InputModal { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = InputModalCtrl; - this.controllerAs = 'ctrl'; - this.bindToController = true; - this.scope = { - type: '=', - title: '=', - message: '=', - placeholder: '=', - callback: '&' - }; - } -} diff --git a/app/assets/javascripts/directives/views/inputModal.ts b/app/assets/javascripts/directives/views/inputModal.ts new file mode 100644 index 000000000..4c97d487b --- /dev/null +++ b/app/assets/javascripts/directives/views/inputModal.ts @@ -0,0 +1,53 @@ +import { WebDirective } from './../../types'; +import template from '%/directives/input-modal.pug'; + +export interface InputModalScope extends Partial { + type: string + title: string + message: string + callback: (value: string) => void +} + +class InputModalCtrl implements InputModalScope { + + $element: JQLite + type!: string + title!: string + message!: string + callback!: (value: string) => void + formData = { input: '' } + + /* @ngInject */ + constructor($element: JQLite) { + this.$element = $element; + } + + dismiss() { + const elem = this.$element; + const scope = elem.scope(); + scope.$destroy(); + elem.remove(); + } + + submit() { + this.callback(this.formData.input); + this.dismiss(); + } +} + +export class InputModal extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = InputModalCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + type: '=', + title: '=', + message: '=', + callback: '&' + }; + } +} diff --git a/app/assets/javascripts/directives/views/menuRow.js b/app/assets/javascripts/directives/views/menuRow.ts similarity index 77% rename from app/assets/javascripts/directives/views/menuRow.js rename to app/assets/javascripts/directives/views/menuRow.ts index 6d5373654..1df264576 100644 --- a/app/assets/javascripts/directives/views/menuRow.js +++ b/app/assets/javascripts/directives/views/menuRow.ts @@ -1,8 +1,13 @@ +import { WebDirective } from './../../types'; import template from '%/directives/menu-row.pug'; class MenuRowCtrl { - onClick($event) { + disabled!: boolean + action!: () => void + buttonAction!: () => void + + onClick($event: Event) { if(this.disabled) { return; } @@ -10,7 +15,7 @@ class MenuRowCtrl { this.action(); } - clickAccessoryButton($event) { + clickAccessoryButton($event: Event) { if(this.disabled) { return; } @@ -19,8 +24,9 @@ class MenuRowCtrl { } } -export class MenuRow { +export class MenuRow extends WebDirective { constructor() { + super(); this.restrict = 'E'; this.transclude = true; this.template = template; diff --git a/app/assets/javascripts/directives/views/panelResizer.js b/app/assets/javascripts/directives/views/panelResizer.ts similarity index 51% rename from app/assets/javascripts/directives/views/panelResizer.js rename to app/assets/javascripts/directives/views/panelResizer.ts index ef72a601a..352aaca9c 100644 --- a/app/assets/javascripts/directives/views/panelResizer.js +++ b/app/assets/javascripts/directives/views/panelResizer.ts @@ -1,71 +1,141 @@ +import { PanelPuppet, WebDirective } from './../../types'; import angular from 'angular'; import template from '%/directives/panel-resizer.pug'; import { debounce } from '@/utils'; -const PANEL_SIDE_RIGHT = 'right'; -const PANEL_SIDE_LEFT = 'left'; - -const MOUSE_EVENT_MOVE = 'mousemove'; -const MOUSE_EVENT_DOWN = 'mousedown'; -const MOUSE_EVENT_UP = 'mouseup'; - +enum PanelSide { + Right = 'right', + Left = 'left' +}; +enum MouseEventType { + Move = 'mousemove', + Down = 'mousedown', + Up = 'mouseup' +}; +enum CssClass { + Hoverable = 'hoverable', + AlwaysVisible = 'always-visible', + Dragging = 'dragging', + NoSelection = 'no-selection', + Collapsed = 'collapsed', + AnimateOpacity = 'animate-opacity', +}; const WINDOW_EVENT_RESIZE = 'resize'; -const PANEL_CSS_CLASS_HOVERABLE = 'hoverable'; -const PANEL_CSS_CLASS_ALWAYS_VISIBLE = 'always-visible'; -const PANEL_CSS_CLASS_DRAGGING = 'dragging'; -const PANEL_CSS_CLASS_NO_SELECTION = 'no-selection'; -const PANEL_CSS_CLASS_COLLAPSED = 'collapsed'; -const PANEL_CSS_CLASS_ANIMATE_OPACITY = 'animate-opacity'; +type ResizeFinishCallback = ( + lastWidth: number, + lastLeft: number, + isMaxWidth: boolean, + isCollapsed: boolean +) => void + +interface PanelResizerScope { + alwaysVisible: boolean + collapsable: boolean + control: PanelPuppet + defaultWidth: number + hoverable: boolean + index: number + minWidth: number + onResizeFinish: () => ResizeFinishCallback + panelId: string + property: PanelSide +} + +class PanelResizerCtrl implements PanelResizerScope { + + /** @scope */ + alwaysVisible!: boolean + collapsable!: boolean + control!: PanelPuppet + defaultWidth!: number + hoverable!: boolean + index!: number + minWidth!: number + onResizeFinish!: () => ResizeFinishCallback + panelId!: string + property!: PanelSide + + $compile: ng.ICompileService + $element: JQLite + $timeout: ng.ITimeoutService + panel!: HTMLElement + resizerColumn!: HTMLElement + currentMinWidth = 0 + pressed = false + startWidth = 0 + lastDownX = 0 + collapsed = false + lastWidth = 0 + startLeft = 0 + lastLeft = 0 + appFrame?: DOMRect + widthBeforeLastDblClick = 0 + overlay?: JQLite -class PanelResizerCtrl { /* @ngInject */ constructor( - $compile, - $element, - $scope, - $timeout, + $compile: ng.ICompileService, + $element: JQLite, + $timeout: ng.ITimeoutService, ) { this.$compile = $compile; this.$element = $element; - this.$scope = $scope; this.$timeout = $timeout; + + /** To allow for registering events */ + this.handleResize = debounce(this.handleResize.bind(this), 250); + this.onMouseMove = this.onMouseMove.bind(this); + this.onMouseUp = this.onMouseUp.bind(this); + this.onMouseDown = this.onMouseDown.bind(this); } $onInit() { - this.configureControl(); this.configureDefaults(); - this.addDoubleClickHandler(); this.reloadDefaultValues(); - this.addMouseDownListener(); - this.addMouseMoveListener(); - this.addMouseUpListener(); + this.configureControl(); + this.addDoubleClickHandler(); + this.resizerColumn.addEventListener(MouseEventType.Down, this.onMouseDown); + document.addEventListener(MouseEventType.Move, this.onMouseMove); + document.addEventListener(MouseEventType.Up, this.onMouseUp); + } + + $onDestroy() { + (this.onResizeFinish as any) = undefined; + (this.control as any) = undefined; + window.removeEventListener(WINDOW_EVENT_RESIZE, this.handleResize); + document.removeEventListener(MouseEventType.Move, this.onMouseMove); + document.removeEventListener(MouseEventType.Up, this.onMouseUp); + this.resizerColumn.removeEventListener(MouseEventType.Down, this.onMouseDown); + (this.handleResize as any) = undefined; + (this.onMouseMove as any) = undefined; + (this.onMouseUp as any) = undefined; + (this.onMouseDown as any) = undefined; } configureControl() { this.control.setWidth = (value) => { this.setWidth(value, true); }; - this.control.setLeft = (value) => { this.setLeft(value); }; - this.control.flash = () => { this.flash(); }; - this.control.isCollapsed = () => { return this.isCollapsed(); }; + this.control.ready = true; + this.control.onReady!(); } configureDefaults() { - this.panel = document.getElementById(this.panelId); + this.panel = document.getElementById(this.panelId)!; if (!this.panel) { console.error('Panel not found for', this.panelId); + return; } - this.resizerColumn = this.$element[0]; this.currentMinWidth = this.minWidth || this.resizerColumn.offsetWidth; this.pressed = false; @@ -75,36 +145,34 @@ class PanelResizerCtrl { this.lastWidth = this.startWidth; this.startLeft = this.panel.offsetLeft; this.lastLeft = this.startLeft; - this.appFrame = null; + this.appFrame = undefined; this.widthBeforeLastDblClick = 0; - - if (this.property === PANEL_SIDE_RIGHT) { + if (this.property === PanelSide.Right) { this.configureRightPanel(); } if (this.alwaysVisible) { - this.resizerColumn.classList.add(PANEL_CSS_CLASS_ALWAYS_VISIBLE); + this.resizerColumn.classList.add(CssClass.AlwaysVisible); } if (this.hoverable) { - this.resizerColumn.classList.add(PANEL_CSS_CLASS_HOVERABLE); + this.resizerColumn.classList.add(CssClass.Hoverable); } } configureRightPanel() { - const handleResize = debounce(event => { - this.reloadDefaultValues(); - this.handleWidthEvent(); - this.$timeout(() => { - this.finishSettingWidth(); - }); - }, 250); - window.addEventListener(WINDOW_EVENT_RESIZE, handleResize); - this.$scope.$on('$destroy', () => { - window.removeEventListener(WINDOW_EVENT_RESIZE, handleResize); + window.addEventListener(WINDOW_EVENT_RESIZE, this.handleResize); + } + + handleResize() { + this.reloadDefaultValues(); + this.handleWidthEvent(); + this.$timeout(() => { + this.finishSettingWidth(); }); } getParentRect() { - return this.panel.parentNode.getBoundingClientRect(); + const node = this.panel!.parentNode! as HTMLElement; + return node.getBoundingClientRect(); } reloadDefaultValues() { @@ -112,7 +180,7 @@ class PanelResizerCtrl { ? this.getParentRect().width : this.panel.scrollWidth; this.lastWidth = this.startWidth; - this.appFrame = document.getElementById('app').getBoundingClientRect(); + this.appFrame = document.getElementById('app')!.getBoundingClientRect(); } addDoubleClickHandler() { @@ -125,9 +193,7 @@ class PanelResizerCtrl { this.widthBeforeLastDblClick = this.lastWidth; this.setWidth(this.currentMinWidth); } - this.finishSettingWidth(); - const newCollapseState = !preClickCollapseState; this.onResizeFinish()( this.lastWidth, @@ -139,53 +205,65 @@ class PanelResizerCtrl { }; } - addMouseDownListener() { - this.resizerColumn.addEventListener(MOUSE_EVENT_DOWN, (event) => { - this.addInvisibleOverlay(); - this.pressed = true; - this.lastDownX = event.clientX; - this.startWidth = this.panel.scrollWidth; - this.startLeft = this.panel.offsetLeft; - this.panel.classList.add(PANEL_CSS_CLASS_NO_SELECTION); - if (this.hoverable) { - this.resizerColumn.classList.add(PANEL_CSS_CLASS_DRAGGING); - } - }); + onMouseDown(event: MouseEvent) { + this.addInvisibleOverlay(); + this.pressed = true; + this.lastDownX = event.clientX; + this.startWidth = this.panel.scrollWidth; + this.startLeft = this.panel.offsetLeft; + this.panel.classList.add(CssClass.NoSelection); + if (this.hoverable) { + this.resizerColumn.classList.add(CssClass.Dragging); + } } - addMouseMoveListener() { - document.addEventListener(MOUSE_EVENT_MOVE, (event) => { - if (!this.pressed) { - return; - } - event.preventDefault(); - if (this.property && this.property === PANEL_SIDE_LEFT) { - this.handleLeftEvent(event); - } else { - this.handleWidthEvent(event); - } - }); + onMouseUp() { + this.removeInvisibleOverlay(); + if (!this.pressed) { + return; + } + this.pressed = false; + this.resizerColumn.classList.remove(CssClass.Dragging); + this.panel.classList.remove(CssClass.NoSelection); + const isMaxWidth = this.isAtMaxWidth(); + if (this.onResizeFinish) { + this.onResizeFinish()( + this.lastWidth, + this.lastLeft, + isMaxWidth, + this.isCollapsed() + ); + } + this.finishSettingWidth(); } - handleWidthEvent(event) { + onMouseMove(event: MouseEvent) { + if (!this.pressed) { + return; + } + event.preventDefault(); + if (this.property && this.property === PanelSide.Left) { + this.handleLeftEvent(event); + } else { + this.handleWidthEvent(event); + } + } + + handleWidthEvent(event?: MouseEvent) { let x; if (event) { - x = event.clientX; + x = event!.clientX; } else { /** Coming from resize event */ x = 0; this.lastDownX = 0; } - const deltaX = x - this.lastDownX; const newWidth = this.startWidth + deltaX; this.setWidth(newWidth, false); - if (this.onResize()) { - this.onResize()(this.lastWidth, this.panel); - } } - handleLeftEvent(event) { + handleLeftEvent(event: MouseEvent) { const panelRect = this.panel.getBoundingClientRect(); const x = event.clientX || panelRect.x; let deltaX = x - this.lastDownX; @@ -205,34 +283,13 @@ class PanelResizerCtrl { if (newLeft + newWidth > parentRect.width) { newLeft = parentRect.width - newWidth; } - this.setLeft(newLeft, false); + this.setLeft(newLeft); this.setWidth(newWidth, false); } - addMouseUpListener() { - document.addEventListener(MOUSE_EVENT_UP, event => { - this.removeInvisibleOverlay(); - if (this.pressed) { - this.pressed = false; - this.resizerColumn.classList.remove(PANEL_CSS_CLASS_DRAGGING); - this.panel.classList.remove(PANEL_CSS_CLASS_NO_SELECTION); - const isMaxWidth = this.isAtMaxWidth(); - if (this.onResizeFinish) { - this.onResizeFinish()( - this.lastWidth, - this.lastLeft, - isMaxWidth, - this.isCollapsed() - ); - } - this.finishSettingWidth(); - } - }); - } - isAtMaxWidth() { return ( - Math.round(this.lastWidth + this.lastLeft) === + Math.round(this.lastWidth + this.lastLeft) === Math.round(this.getParentRect().width) ); } @@ -241,7 +298,7 @@ class PanelResizerCtrl { return this.lastWidth <= this.currentMinWidth; } - setWidth(width, finish) { + setWidth(width: number, finish = false) { if (width < this.currentMinWidth) { width = this.currentMinWidth; } @@ -250,7 +307,7 @@ class PanelResizerCtrl { width = parentRect.width; } - const maxWidth = this.appFrame.width - this.panel.getBoundingClientRect().x; + const maxWidth = this.appFrame!.width - this.panel.getBoundingClientRect().x; if (width > maxWidth) { width = maxWidth; } @@ -267,7 +324,7 @@ class PanelResizerCtrl { } } - setLeft(left) { + setLeft(left: number) { this.panel.style.left = left + 'px'; this.lastLeft = left; } @@ -279,9 +336,9 @@ class PanelResizerCtrl { this.collapsed = this.isCollapsed(); if (this.collapsed) { - this.resizerColumn.classList.add(PANEL_CSS_CLASS_COLLAPSED); + this.resizerColumn.classList.add(CssClass.Collapsed); } else { - this.resizerColumn.classList.remove(PANEL_CSS_CLASS_COLLAPSED); + this.resizerColumn.classList.remove(CssClass.Collapsed); } } @@ -295,28 +352,29 @@ class PanelResizerCtrl { if (this.overlay) { return; } - this.overlay = this.$compile(`
`)(this.$scope); + this.overlay = this.$compile(`
`)(this as any); angular.element(document.body).prepend(this.overlay); } removeInvisibleOverlay() { if (this.overlay) { this.overlay.remove(); - this.overlay = null; + this.overlay = undefined; } } flash() { const FLASH_DURATION = 3000; - this.resizerColumn.classList.add(PANEL_CSS_CLASS_ANIMATE_OPACITY); + this.resizerColumn.classList.add(CssClass.AnimateOpacity); this.$timeout(() => { - this.resizerColumn.classList.remove(PANEL_CSS_CLASS_ANIMATE_OPACITY); + this.resizerColumn.classList.remove(CssClass.AnimateOpacity); }, FLASH_DURATION); } } -export class PanelResizer { +export class PanelResizer extends WebDirective { constructor() { + super(); this.restrict = 'E'; this.template = template; this.controller = PanelResizerCtrl; @@ -330,7 +388,6 @@ export class PanelResizer { hoverable: '=', index: '=', minWidth: '=', - onResize: '&', onResizeFinish: '&', panelId: '=', property: '=' diff --git a/app/assets/javascripts/directives/views/passwordWizard.ts b/app/assets/javascripts/directives/views/passwordWizard.ts new file mode 100644 index 000000000..0ef223263 --- /dev/null +++ b/app/assets/javascripts/directives/views/passwordWizard.ts @@ -0,0 +1,218 @@ +import { WebApplication } from '@/ui_models/application'; +import { PasswordWizardScope, PasswordWizardType, WebDirective } from './../../types'; +import template from '%/directives/password-wizard.pug'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; + +const DEFAULT_CONTINUE_TITLE = "Continue"; +const Steps = { + PasswordStep: 1, + FinishStep: 2 +}; + +class PasswordWizardCtrl extends PureViewCtrl implements PasswordWizardScope { + $element: JQLite + application!: WebApplication + type!: PasswordWizardType + isContinuing = false + + /* @ngInject */ + constructor( + $element: JQLite, + $timeout: ng.ITimeoutService, + ) { + super($timeout); + this.$element = $element; + this.registerWindowUnloadStopper(); + } + + $onInit() { + super.$onInit(); + this.initProps({ + type: this.type, + changePassword: this.type === PasswordWizardType.ChangePassword, + securityUpdate: this.type === PasswordWizardType.AccountUpgrade + }); + this.setState({ + formData: {}, + continueTitle: DEFAULT_CONTINUE_TITLE, + step: Steps.PasswordStep, + title: this.props.changePassword ? 'Change Password' : 'Account Update' + }); + } + + $onDestroy() { + super.$onDestroy(); + window.onbeforeunload = null; + } + + /** Confirms with user before closing tab */ + registerWindowUnloadStopper() { + window.onbeforeunload = () => { + return true; + }; + } + + resetContinueState() { + this.setState({ + showSpinner: false, + continueTitle: DEFAULT_CONTINUE_TITLE + }); + this.isContinuing = false; + } + + async nextStep() { + if (this.state.lockContinue || this.isContinuing) { + return; + } + if (this.state.step === Steps.FinishStep) { + this.dismiss(); + return; + } + + this.isContinuing = true; + this.setState({ + showSpinner: true, + continueTitle: "Generating Keys..." + }); + const valid = await this.validateCurrentPassword(); + if (!valid) { + this.resetContinueState(); + return; + } + const success = await this.processPasswordChange(); + if (!success) { + this.resetContinueState(); + return; + } + this.isContinuing = false; + this.setState({ + showSpinner: false, + continueTitle: "Finish", + step: Steps.FinishStep + }); + } + + async setFormDataState(formData: any) { + return this.setState({ + formData: { + ...this.state.formData, + ...formData + } + }); + } + + async validateCurrentPassword() { + const currentPassword = this.state.formData.currentPassword; + const newPass = this.props.securityUpdate ? currentPassword : this.state.formData.newPassword; + if (!currentPassword || currentPassword.length === 0) { + this.application.alertService!.alert( + "Please enter your current password." + ); + return false; + } + if (this.props.changePassword) { + if (!newPass || newPass.length === 0) { + this.application.alertService!.alert( + "Please enter a new password." + ); + return false; + } + if (newPass !== this.state.formData.newPasswordConfirmation) { + this.application.alertService!.alert( + "Your new password does not match its confirmation." + ); + this.state.formData.status = null; + return false; + } + } + if (!this.application.getUser()?.email) { + this.application.alertService!.alert( + "We don't have your email stored. Please log out then log back in to fix this issue." + ); + this.state.formData.status = null; + return false; + } + + /** Validate current password */ + const success = await this.application.validateAccountPassword( + this.state.formData.currentPassword + ); + if (!success) { + this.application.alertService!.alert( + "The current password you entered is not correct. Please try again." + ); + } + return success; + } + + async processPasswordChange() { + this.setState({ + lockContinue: true, + processing: true + }); + this.setFormDataState({ + status: "Processing encryption keys..." + }); + const newPassword = this.props.securityUpdate + ? this.state.formData.currentPassword + : this.state.formData.newPassword; + const response = await this.application.changePassword( + this.state.formData.currentPassword, + newPassword + ); + const success = !response || !response.error; + this.setFormDataState({ + statusError: !success, + processing: success + }); + if (!success) { + this.application.alertService!.alert( + response!.error.message + ? response!.error.message + : "There was an error changing your password. Please try again." + ); + this.setFormDataState({ + status: "Unable to process your password. Please try again." + }); + } else { + this.setState({ + lockContinue: false, + formData: { + ...this.state.formData, + status: this.props.changePassword + ? "Successfully changed password." + : "Successfully performed account update." + } + }); + } + return success; + } + + dismiss() { + if (this.state.lockContinue) { + this.application.alertService!.alert( + "Cannot close window until pending tasks are complete." + ); + } else { + const elem = this.$element; + const scope = elem.scope(); + scope.$destroy(); + elem.remove(); + } + } +} + +export class PasswordWizard extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = PasswordWizardCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + type: '=', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/permissionsModal.js b/app/assets/javascripts/directives/views/permissionsModal.ts similarity index 65% rename from app/assets/javascripts/directives/views/permissionsModal.js rename to app/assets/javascripts/directives/views/permissionsModal.ts index 12ec241a7..b547fec05 100644 --- a/app/assets/javascripts/directives/views/permissionsModal.js +++ b/app/assets/javascripts/directives/views/permissionsModal.ts @@ -1,13 +1,21 @@ +import { WebDirective } from './../../types'; import template from '%/directives/permissions-modal.pug'; class PermissionsModalCtrl { + + $element: JQLite + callback!: (success: boolean) => void + /* @ngInject */ - constructor($element) { + constructor($element: JQLite) { this.$element = $element; } dismiss() { - this.$element.remove(); + const elem = this.$element; + const scope = elem.scope(); + scope.$destroy(); + elem.remove(); } accept() { @@ -21,8 +29,9 @@ class PermissionsModalCtrl { } } -export class PermissionsModal { +export class PermissionsModal extends WebDirective { constructor() { + super(); this.restrict = 'E'; this.template = template; this.controller = PermissionsModalCtrl; diff --git a/app/assets/javascripts/directives/views/privilegesAuthModal.js b/app/assets/javascripts/directives/views/privilegesAuthModal.js deleted file mode 100644 index bef953310..000000000 --- a/app/assets/javascripts/directives/views/privilegesAuthModal.js +++ /dev/null @@ -1,101 +0,0 @@ -import template from '%/directives/privileges-auth-modal.pug'; - -class PrivilegesAuthModalCtrl { - /* @ngInject */ - constructor( - $element, - $timeout, - privilegesManager, - ) { - this.$element = $element; - this.$timeout = $timeout; - this.privilegesManager = privilegesManager; - } - - $onInit() { - this.authParameters = {}; - this.sessionLengthOptions = this.privilegesManager.getSessionLengthOptions(); - this.privilegesManager.getSelectedSessionLength().then((length) => { - this.$timeout(() => { - this.selectedSessionLength = length; - }); - }); - this.privilegesManager.netCredentialsForAction(this.action).then((credentials) => { - this.$timeout(() => { - this.requiredCredentials = credentials.sort(); - }); - }); - } - - selectSessionLength(length) { - this.selectedSessionLength = length; - } - - promptForCredential(credential) { - return this.privilegesManager.displayInfoForCredential(credential).prompt; - } - - cancel() { - this.dismiss(); - this.onCancel && this.onCancel(); - } - - isCredentialInFailureState(credential) { - if (!this.failedCredentials) { - return false; - } - return this.failedCredentials.find((candidate) => { - return candidate === credential; - }) != null; - } - - validate() { - const failed = []; - for (const cred of this.requiredCredentials) { - const value = this.authParameters[cred]; - if (!value || value.length === 0) { - failed.push(cred); - } - } - this.failedCredentials = failed; - return failed.length === 0; - } - - async submit() { - if (!this.validate()) { - return; - } - const result = await this.privilegesManager.authenticateAction( - this.action, - this.authParameters - ); - this.$timeout(() => { - if (result.success) { - this.privilegesManager.setSessionLength(this.selectedSessionLength); - this.onSuccess(); - this.dismiss(); - } else { - this.failedCredentials = result.failedCredentials; - } - }); - } - - dismiss() { - this.$element.remove(); - } -} - -export class PrivilegesAuthModal { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = PrivilegesAuthModalCtrl; - this.controllerAs = 'ctrl'; - this.bindToController = true; - this.scope = { - action: '=', - onSuccess: '=', - onCancel: '=' - }; - } -} diff --git a/app/assets/javascripts/directives/views/privilegesAuthModal.ts b/app/assets/javascripts/directives/views/privilegesAuthModal.ts new file mode 100644 index 000000000..dba4db4ba --- /dev/null +++ b/app/assets/javascripts/directives/views/privilegesAuthModal.ts @@ -0,0 +1,128 @@ +import { WebDirective } from './../../types'; +import { WebApplication } from '@/ui_models/application'; +import { ProtectedAction, PrivilegeCredential, PrivilegeSessionLength } from 'snjs'; +import template from '%/directives/privileges-auth-modal.pug'; + +type PrivilegesAuthModalScope = { + application: WebApplication + action: ProtectedAction + onSuccess: () => void + onCancel: () => void +} + +class PrivilegesAuthModalCtrl implements PrivilegesAuthModalScope { + $element: JQLite + $timeout: ng.ITimeoutService + application!: WebApplication + action!: ProtectedAction + onSuccess!: () => void + onCancel!: () => void + authParameters: Partial> = {} + sessionLengthOptions!: { value: PrivilegeSessionLength, label: string }[] + selectedSessionLength!: PrivilegeSessionLength + requiredCredentials!: PrivilegeCredential[] + failedCredentials!: PrivilegeCredential[] + + /* @ngInject */ + constructor( + $element: JQLite, + $timeout: ng.ITimeoutService + ) { + this.$element = $element; + this.$timeout = $timeout; + } + + $onInit() { + this.sessionLengthOptions = this.application!.privilegesService! + .getSessionLengthOptions(); + this.application.privilegesService!.getSelectedSessionLength() + .then((length) => { + this.$timeout(() => { + this.selectedSessionLength = length; + }); + }); + this.application.privilegesService!.netCredentialsForAction(this.action) + .then((credentials) => { + this.$timeout(() => { + this.requiredCredentials = credentials.sort(); + }); + }); + } + + selectSessionLength(length: PrivilegeSessionLength) { + this.selectedSessionLength = length; + } + + promptForCredential(credential: PrivilegeCredential) { + return this.application.privilegesService!.displayInfoForCredential(credential).prompt; + } + + cancel() { + this.dismiss(); + this.onCancel && this.onCancel(); + } + + isCredentialInFailureState(credential: PrivilegeCredential) { + if (!this.failedCredentials) { + return false; + } + return this.failedCredentials.find((candidate) => { + return candidate === credential; + }) != null; + } + + validate() { + const failed = []; + for (const cred of this.requiredCredentials) { + const value = this.authParameters[cred]; + if (!value || value.length === 0) { + failed.push(cred); + } + } + this.failedCredentials = failed; + return failed.length === 0; + } + + async submit() { + if (!this.validate()) { + return; + } + const result = await this.application.privilegesService!.authenticateAction( + this.action, + this.authParameters + ); + this.$timeout(() => { + if (result.success) { + this.application.privilegesService!.setSessionLength(this.selectedSessionLength); + this.onSuccess(); + this.dismiss(); + } else { + this.failedCredentials = result.failedCredentials; + } + }); + } + + dismiss() { + const elem = this.$element; + const scope = elem.scope(); + scope.$destroy(); + elem.remove(); + } +} + +export class PrivilegesAuthModal extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = PrivilegesAuthModalCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + action: '=', + onSuccess: '=', + onCancel: '=', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/privilegesManagementModal.js b/app/assets/javascripts/directives/views/privilegesManagementModal.js deleted file mode 100644 index 705e419d7..000000000 --- a/app/assets/javascripts/directives/views/privilegesManagementModal.js +++ /dev/null @@ -1,89 +0,0 @@ -import { PrivilegesManager } from '@/services/privilegesManager'; -import template from '%/directives/privileges-management-modal.pug'; - -class PrivilegesManagementModalCtrl { - /* @ngInject */ - constructor( - $timeout, - $element, - privilegesManager, - authManager, - passcodeManager, - ) { - this.$element = $element; - this.$timeout = $timeout; - this.privilegesManager = privilegesManager; - this.hasPasscode = passcodeManager.hasPasscode(); - this.hasAccount = !authManager.offline(); - this.reloadPrivileges(); - } - - displayInfoForCredential(credential) { - const info = this.privilegesManager.displayInfoForCredential(credential); - if (credential === PrivilegesManager.CredentialLocalPasscode) { - info.availability = this.hasPasscode; - } else if (credential === PrivilegesManager.CredentialAccountPassword) { - info.availability = this.hasAccount; - } else { - info.availability = true; - } - return info; - } - - displayInfoForAction(action) { - return this.privilegesManager.displayInfoForAction(action).label; - } - - isCredentialRequiredForAction(action, credential) { - if (!this.privileges) { - return false; - } - return this.privileges.isCredentialRequiredForAction(action, credential); - } - - async clearSession() { - await this.privilegesManager.clearSession(); - this.reloadPrivileges(); - } - - async reloadPrivileges() { - this.availableActions = this.privilegesManager.getAvailableActions(); - this.availableCredentials = this.privilegesManager.getAvailableCredentials(); - const sessionEndDate = await this.privilegesManager.getSessionExpirey(); - this.sessionExpirey = sessionEndDate.toLocaleString(); - this.sessionExpired = new Date() >= sessionEndDate; - this.credentialDisplayInfo = {}; - for (const cred of this.availableCredentials) { - this.credentialDisplayInfo[cred] = this.displayInfoForCredential(cred); - } - const privs = await this.privilegesManager.getPrivileges(); - this.$timeout(() => { - this.privileges = privs; - }); - } - - checkboxValueChanged(action, credential) { - this.privileges.toggleCredentialForAction(action, credential); - this.privilegesManager.savePrivileges(); - } - - cancel() { - this.dismiss(); - this.onCancel && this.onCancel(); - } - - dismiss() { - this.$element.remove(); - } -} - -export class PrivilegesManagementModal { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = PrivilegesManagementModalCtrl; - this.controllerAs = 'ctrl'; - this.bindToController = true; - this.scope = {}; - } -} diff --git a/app/assets/javascripts/directives/views/privilegesManagementModal.ts b/app/assets/javascripts/directives/views/privilegesManagementModal.ts new file mode 100644 index 000000000..626869d5c --- /dev/null +++ b/app/assets/javascripts/directives/views/privilegesManagementModal.ts @@ -0,0 +1,118 @@ +import { WebDirective } from './../../types'; +import { WebApplication } from '@/ui_models/application'; +import template from '%/directives/privileges-management-modal.pug'; +import { PrivilegeCredential, ProtectedAction, SNPrivileges, PrivilegeSessionLength } from 'snjs'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { PrivilegeMutator } from '@node_modules/snjs/dist/@types/models'; + +type DisplayInfo = { + label: string + prompt: string +} + +class PrivilegesManagementModalCtrl extends PureViewCtrl { + + hasPasscode = false + hasAccount = false + $element: JQLite + application!: WebApplication + privileges!: SNPrivileges + availableActions!: ProtectedAction[] + availableCredentials!: PrivilegeCredential[] + sessionExpirey!: string + sessionExpired = true + credentialDisplayInfo: Partial> = {} + onCancel!: () => void + + /* @ngInject */ + constructor( + $timeout: ng.ITimeoutService, + $element: JQLite + ) { + super($timeout); + this.$element = $element; + } + + async onAppLaunch() { + super.onAppLaunch(); + this.hasPasscode = this.application.hasPasscode(); + this.hasAccount = !this.application.noAccount(); + this.reloadPrivileges(); + } + + displayInfoForCredential(credential: PrivilegeCredential) { + const info: any = this.application.privilegesService!.displayInfoForCredential(credential); + if (credential === PrivilegeCredential.LocalPasscode) { + info.availability = this.hasPasscode; + } else if (credential === PrivilegeCredential.AccountPassword) { + info.availability = this.hasAccount; + } else { + info.availability = true; + } + return info; + } + + displayInfoForAction(action: ProtectedAction) { + return this.application.privilegesService!.displayInfoForAction(action).label; + } + + isCredentialRequiredForAction(action: ProtectedAction, credential: PrivilegeCredential) { + if (!this.privileges) { + return false; + } + return this.privileges.isCredentialRequiredForAction(action, credential); + } + + async clearSession() { + await this.application.privilegesService!.clearSession(); + this.reloadPrivileges(); + } + + async reloadPrivileges() { + this.availableActions = this.application.privilegesService!.getAvailableActions(); + this.availableCredentials = this.application.privilegesService!.getAvailableCredentials(); + const sessionEndDate = await this.application.privilegesService!.getSessionExpirey(); + this.sessionExpirey = sessionEndDate.toLocaleString(); + this.sessionExpired = new Date() >= sessionEndDate; + for (const cred of this.availableCredentials) { + this.credentialDisplayInfo[cred] = this.displayInfoForCredential(cred); + } + const privs = await this.application.privilegesService!.getPrivileges(); + this.$timeout(() => { + this.privileges = privs; + }); + } + + checkboxValueChanged(action: ProtectedAction, credential: PrivilegeCredential) { + this.application.changeAndSaveItem(this.privileges.uuid, (m) => { + const mutator = m as PrivilegeMutator; + mutator.toggleCredentialForAction(action, credential); + }) + } + + cancel() { + this.dismiss(); + this.onCancel && this.onCancel(); + } + + dismiss() { + const elem = this.$element; + const scope = elem.scope(); + scope.$destroy(); + elem.remove(); + } +} + +export class PrivilegesManagementModal extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = PrivilegesManagementModalCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/revisionPreviewModal.js b/app/assets/javascripts/directives/views/revisionPreviewModal.js deleted file mode 100644 index 2b4ef48db..000000000 --- a/app/assets/javascripts/directives/views/revisionPreviewModal.js +++ /dev/null @@ -1,133 +0,0 @@ -import { protocolManager, SNComponent, SFItem, SFModelManager } from 'snjs'; -import template from '%/directives/revision-preview-modal.pug'; - -class RevisionPreviewModalCtrl { - /* @ngInject */ - constructor( - $element, - $scope, - $timeout, - alertManager, - componentManager, - modelManager, - syncManager, - ) { - this.$element = $element; - this.$scope = $scope; - this.$timeout = $timeout; - this.alertManager = alertManager; - this.componentManager = componentManager; - this.modelManager = modelManager; - this.syncManager = syncManager; - this.createNote(); - this.configureEditor(); - $scope.$on('$destroy', () => { - if (this.identifier) { - this.componentManager.deregisterHandler(this.identifier); - } - }); - } - - createNote() { - this.note = new SFItem({ - content: this.content, - content_type: "Note" - }); - } - - configureEditor() { - /** - * Set UUID so editoForNote can find proper editor, but then generate new uuid - * for note as not to save changes to original, if editor makes changes. - */ - this.note.uuid = this.uuid; - const editorForNote = this.componentManager.editorForNote(this.note); - this.note.uuid = protocolManager.crypto.generateUUIDSync(); - if (editorForNote) { - /** - * Create temporary copy, as a lot of componentManager is uuid based, so might - * interfere with active editor. Be sure to copy only the content, as the top level - * editor object has non-copyable properties like .window, which cannot be transfered - */ - const editorCopy = new SNComponent({ - content: editorForNote.content - }); - editorCopy.readonly = true; - editorCopy.lockReadonly = true; - this.identifier = editorCopy.uuid; - this.componentManager.registerHandler({ - identifier: this.identifier, - areas: ['editor-editor'], - contextRequestHandler: (component) => { - if (component === this.editor) { - return this.note; - } - }, - componentForSessionKeyHandler: (key) => { - if (key === this.editor.sessionKey) { - return this.editor; - } - } - }); - - this.editor = editorCopy; - } - } - - restore(asCopy) { - const run = () => { - let item; - if (asCopy) { - const contentCopy = Object.assign({}, this.content); - if (contentCopy.title) { - contentCopy.title += " (copy)"; - } - item = this.modelManager.createItem({ - content_type: 'Note', - content: contentCopy - }); - this.modelManager.addItem(item); - } else { - const uuid = this.uuid; - item = this.modelManager.findItem(uuid); - item.content = Object.assign({}, this.content); - this.modelManager.mapResponseItemsToLocalModels( - [item], - SFModelManager.MappingSourceRemoteActionRetrieved - ); - } - this.modelManager.setItemDirty(item); - this.syncManager.sync(); - this.dismiss(); - }; - - if (!asCopy) { - this.alertManager.confirm({ - text: "Are you sure you want to replace the current note's contents with what you see in this preview?", - destructive: true, - onConfirm: run - }); - } else { - run(); - } - } - - dismiss() { - this.$element.remove(); - this.$scope.$destroy(); - } -} - -export class RevisionPreviewModal { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = RevisionPreviewModalCtrl; - this.controllerAs = 'ctrl'; - this.bindToController = true; - this.scope = { - uuid: '=', - content: '=' - }; - } -} diff --git a/app/assets/javascripts/directives/views/revisionPreviewModal.ts b/app/assets/javascripts/directives/views/revisionPreviewModal.ts new file mode 100644 index 000000000..931160dcd --- /dev/null +++ b/app/assets/javascripts/directives/views/revisionPreviewModal.ts @@ -0,0 +1,148 @@ +import { WebApplication } from '@/ui_models/application'; +import { WebDirective } from './../../types'; +import { + ContentType, + PayloadSource, + SNComponent, + SNNote, + ComponentArea +} from 'snjs'; +import template from '%/directives/revision-preview-modal.pug'; +import { PayloadContent } from '@node_modules/snjs/dist/@types/protocol/payloads/generator'; + +interface RevisionPreviewScope { + uuid: string + content: PayloadContent + application: WebApplication +} + +class RevisionPreviewModalCtrl implements RevisionPreviewScope { + + $element: JQLite + $timeout: ng.ITimeoutService + uuid!: string + content!: PayloadContent + application!: WebApplication + unregisterComponent?: any + note!: SNNote + editor?: SNComponent + + /* @ngInject */ + constructor( + $element: JQLite, + $timeout: ng.ITimeoutService + ) { + this.$element = $element; + this.$timeout = $timeout; + } + + $onInit() { + this.configure(); + } + + $onDestroy() { + if (this.unregisterComponent) { + this.unregisterComponent(); + this.unregisterComponent = undefined; + } + } + + get componentManager() { + return this.application.componentManager!; + } + + async configure() { + this.note = await this.application.createTemplateItem( + ContentType.Note, + this.content + ) as SNNote; + const originalNote = this.application.findItem(this.uuid) as SNNote; + const editorForNote = this.componentManager.editorForNote(originalNote); + if (editorForNote) { + /** + * Create temporary copy, as a lot of componentManager is uuid based, so might + * interfere with active editor. Be sure to copy only the content, as the top level + * editor object has non-copyable properties like .window, which cannot be transfered + */ + const editorCopy = await this.application.createTemplateItem( + ContentType.Component, + editorForNote.safeContent + ) as SNComponent; + this.componentManager.setReadonlyStateForComponent(editorCopy, true, true); + this.unregisterComponent = this.componentManager.registerHandler({ + identifier: editorCopy.uuid, + areas: [ComponentArea.Editor], + contextRequestHandler: (componentUuid) => { + if (componentUuid === this.editor?.uuid) { + return this.note; + } + }, + componentForSessionKeyHandler: (key) => { + if (key === this.componentManager.sessionKeyForComponent(this.editor!)) { + return this.editor; + } + } + }); + + this.editor = editorCopy; + } + } + + restore(asCopy: boolean) { + const run = async () => { + if (asCopy) { + const contentCopy = Object.assign({}, this.content); + if (contentCopy.title) { + contentCopy.title += " (copy)"; + } + await this.application.createManagedItem( + ContentType.Note, + contentCopy, + true + ); + } else { + this.application.changeAndSaveItem(this.uuid, (mutator) => { + mutator.setContent(this.content); + }, true, PayloadSource.RemoteActionRetrieved); + } + this.dismiss(); + }; + + if (!asCopy) { + this.application.alertService!.confirm( + "Are you sure you want to replace the current note's contents with what you see in this preview?", + undefined, + undefined, + undefined, + run, + undefined, + true, + ); + } else { + run(); + } + } + + dismiss() { + const elem = this.$element; + const scope = elem.scope(); + scope.$destroy(); + elem.remove(); + } +} + +export class RevisionPreviewModal extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = RevisionPreviewModalCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + uuid: '=', + content: '=', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/sessionHistoryMenu.js b/app/assets/javascripts/directives/views/sessionHistoryMenu.js deleted file mode 100644 index dde5067f3..000000000 --- a/app/assets/javascripts/directives/views/sessionHistoryMenu.js +++ /dev/null @@ -1,118 +0,0 @@ -import template from '%/directives/session-history-menu.pug'; - -class SessionHistoryMenuCtrl { - /* @ngInject */ - constructor( - $timeout, - actionsManager, - alertManager, - sessionHistory, - ) { - this.$timeout = $timeout; - this.alertManager = alertManager; - this.actionsManager = actionsManager; - this.sessionHistory = sessionHistory; - this.diskEnabled = this.sessionHistory.diskEnabled; - this.autoOptimize = this.sessionHistory.autoOptimize; - } - - $onInit() { - this.reloadHistory(); - } - - reloadHistory() { - const history = this.sessionHistory.historyForItem(this.item); - this.entries = history.entries.slice(0).sort((a, b) => { - return a.item.updated_at < b.item.updated_at ? 1 : -1; - }); - this.history = history; - } - - openRevision(revision) { - this.actionsManager.presentRevisionPreviewModal( - revision.item.uuid, - revision.item.content - ); - } - - classForRevision(revision) { - const vector = revision.operationVector(); - if (vector === 0) { - return 'default'; - } else if (vector === 1) { - return 'success'; - } else if (vector === -1) { - return 'danger'; - } - } - - clearItemHistory() { - this.alertManager.confirm({ - text: "Are you sure you want to delete the local session history for this note?", - destructive: true, - onConfirm: () => { - this.sessionHistory.clearHistoryForItem(this.item).then(() => { - this.$timeout(() => { - this.reloadHistory(); - }); - }); - } - }); - } - - clearAllHistory() { - this.alertManager.confirm({ - text: "Are you sure you want to delete the local session history for all notes?", - destructive: true, - onConfirm: () => { - this.sessionHistory.clearAllHistory().then(() => { - this.$timeout(() => { - this.reloadHistory(); - }); - }); - } - }); - } - - toggleDiskSaving() { - const run = () => { - this.sessionHistory.toggleDiskSaving().then(() => { - this.$timeout(() => { - this.diskEnabled = this.sessionHistory.diskEnabled; - }); - }); - }; - if (!this.sessionHistory.diskEnabled) { - this.alertManager.confirm({ - text: `Are you sure you want to save history to disk? This will decrease general - performance, especially as you type. You are advised to disable this feature - if you experience any lagging.`, - destructive: true, - onConfirm: run - }); - } else { - run(); - } - } - - toggleAutoOptimize() { - this.sessionHistory.toggleAutoOptimize().then(() => { - this.$timeout(() => { - this.autoOptimize = this.sessionHistory.autoOptimize; - }); - }); - } -} - -export class SessionHistoryMenu { - constructor() { - this.restrict = 'E'; - this.template = template; - this.controller = SessionHistoryMenuCtrl; - this.controllerAs = 'ctrl'; - this.bindToController = true; - this.scope = { - item: '=' - }; - } -} diff --git a/app/assets/javascripts/directives/views/sessionHistoryMenu.ts b/app/assets/javascripts/directives/views/sessionHistoryMenu.ts new file mode 100644 index 000000000..a4baabd35 --- /dev/null +++ b/app/assets/javascripts/directives/views/sessionHistoryMenu.ts @@ -0,0 +1,143 @@ +import { WebDirective } from './../../types'; +import { WebApplication } from '@/ui_models/application'; +import template from '%/directives/session-history-menu.pug'; +import { SNItem, ItemHistoryEntry, ItemHistory } from '@node_modules/snjs/dist/@types'; + +interface SessionHistoryScope { + application: WebApplication + item: SNItem +} + +class SessionHistoryMenuCtrl implements SessionHistoryScope { + + $timeout: ng.ITimeoutService + diskEnabled = false + autoOptimize = false + application!: WebApplication + item!: SNItem + entries!: ItemHistoryEntry[] + history!: ItemHistory + + /* @ngInject */ + constructor( + $timeout: ng.ITimeoutService + ) { + this.$timeout = $timeout; + } + + $onInit() { + this.reloadHistory(); + this.diskEnabled = this.application.historyManager!.isDiskEnabled(); + this.autoOptimize = this.application.historyManager!.isAutoOptimizeEnabled(); + } + + reloadHistory() { + const history = this.application.historyManager!.historyForItem(this.item); + this.entries = history.entries.slice(0).sort((a, b) => { + return a.payload.updated_at! < b.payload.updated_at! ? 1 : -1; + }); + this.history = history; + } + + openRevision(revision: ItemHistoryEntry) { + this.application.presentRevisionPreviewModal( + revision.payload.uuid, + revision.payload.content + ); + } + + classForRevision(revision: ItemHistoryEntry) { + const vector = revision.operationVector(); + if (vector === 0) { + return 'default'; + } else if (vector === 1) { + return 'success'; + } else if (vector === -1) { + return 'danger'; + } + } + + clearItemHistory() { + this.application.alertService!.confirm( + "Are you sure you want to delete the local session history for this note?", + undefined, + undefined, + undefined, + () => { + this.application.historyManager!.clearHistoryForItem(this.item).then(() => { + this.$timeout(() => { + this.reloadHistory(); + }); + }); + }, + undefined, + true, + ); + } + + clearAllHistory() { + this.application.alertService!.confirm( + "Are you sure you want to delete the local session history for all notes?", + undefined, + undefined, + undefined, + () => { + this.application.historyManager!.clearAllHistory().then(() => { + this.$timeout(() => { + this.reloadHistory(); + }); + }); + }, + undefined, + true, + ); + } + + toggleDiskSaving() { + const run = () => { + this.application.historyManager!.toggleDiskSaving().then(() => { + this.$timeout(() => { + this.diskEnabled = this.application.historyManager!.isDiskEnabled(); + }); + }); + }; + if (!this.application.historyManager!.isDiskEnabled()) { + this.application.alertService!.confirm( + `Are you sure you want to save history to disk? This will decrease general + performance, especially as you type. You are advised to disable this feature + if you experience any lagging.`, + undefined, + undefined, + undefined, + run, + undefined, + true, + ); + } else { + run(); + } + } + + toggleAutoOptimize() { + this.application.historyManager!.toggleAutoOptimize().then(() => { + this.$timeout(() => { + this.autoOptimize = this.application.historyManager!.autoOptimize; + }); + }); + } +} + +export class SessionHistoryMenu extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = SessionHistoryMenuCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + item: '=', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/directives/views/syncResolutionMenu.js b/app/assets/javascripts/directives/views/syncResolutionMenu.ts similarity index 53% rename from app/assets/javascripts/directives/views/syncResolutionMenu.js rename to app/assets/javascripts/directives/views/syncResolutionMenu.ts index ca64f97dd..ea73d8302 100644 --- a/app/assets/javascripts/directives/views/syncResolutionMenu.js +++ b/app/assets/javascripts/directives/views/syncResolutionMenu.ts @@ -1,20 +1,30 @@ +import { WebApplication } from '@/ui_models/application'; +import { WebDirective } from './../../types'; import template from '%/directives/sync-resolution-menu.pug'; class SyncResolutionMenuCtrl { + + closeFunction!: () => void + application!: WebApplication + + $timeout: ng.ITimeoutService + status: Partial<{ + backupFinished: boolean, + resolving: boolean, + attemptedResolution: boolean, + success: boolean + fail: boolean + }> = {} + /* @ngInject */ constructor( - $timeout, - archiveManager, - syncManager, + $timeout: ng.ITimeoutService ) { this.$timeout = $timeout; - this.archiveManager = archiveManager; - this.syncManager = syncManager; - this.status = {}; } - downloadBackup(encrypted) { - this.archiveManager.downloadBackup(encrypted); + downloadBackup(encrypted: boolean) { + this.application.getArchiveService().downloadBackup(encrypted); this.status.backupFinished = true; } @@ -24,11 +34,11 @@ class SyncResolutionMenuCtrl { async performSyncResolution() { this.status.resolving = true; - await this.syncManager.resolveOutOfSync(); + await this.application.resolveOutOfSync(); this.$timeout(() => { this.status.resolving = false; this.status.attemptedResolution = true; - if (this.syncManager.isOutOfSync()) { + if (this.application.isOutOfSync()) { this.status.fail = true; } else { this.status.success = true; @@ -38,20 +48,22 @@ class SyncResolutionMenuCtrl { close() { this.$timeout(() => { - this.closeFunction()(); + this.closeFunction(); }); } } -export class SyncResolutionMenu { +export class SyncResolutionMenu extends WebDirective { constructor() { + super(); this.restrict = 'E'; this.template = template; this.controller = SyncResolutionMenuCtrl; this.controllerAs = 'ctrl'; this.bindToController = true; this.scope = { - closeFunction: '&' + closeFunction: '&', + application: '=' }; } } diff --git a/app/assets/javascripts/filters/index.js b/app/assets/javascripts/filters/index.ts similarity index 100% rename from app/assets/javascripts/filters/index.js rename to app/assets/javascripts/filters/index.ts diff --git a/app/assets/javascripts/filters/trusted.js b/app/assets/javascripts/filters/trusted.js deleted file mode 100644 index 3ebbd7c96..000000000 --- a/app/assets/javascripts/filters/trusted.js +++ /dev/null @@ -1,6 +0,0 @@ -/* @ngInject */ -export function trusted($sce) { - return function(url) { - return $sce.trustAsResourceUrl(url); - }; -} diff --git a/app/assets/javascripts/filters/trusted.ts b/app/assets/javascripts/filters/trusted.ts new file mode 100644 index 000000000..43d77d16b --- /dev/null +++ b/app/assets/javascripts/filters/trusted.ts @@ -0,0 +1,6 @@ +/* @ngInject */ +export function trusted($sce: ng.ISCEService) { + return function(url: string) { + return $sce.trustAsResourceUrl(url); + }; +} diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.ts similarity index 80% rename from app/assets/javascripts/index.js rename to app/assets/javascripts/index.ts index da9548355..5630efe70 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.ts @@ -12,11 +12,6 @@ import '../../../vendor/assets/javascripts/zip/inflate'; import '../../../vendor/assets/javascripts/zip/zip'; import '../../../vendor/assets/javascripts/zip/z-worker'; -import { SFItem } from 'snjs'; - -// Set the app domain before starting the app -SFItem.AppDomain = 'org.standardnotes.sn'; - // entry point // eslint-disable-next-line import/first import './app'; diff --git a/app/assets/javascripts/interface.ts b/app/assets/javascripts/interface.ts new file mode 100644 index 000000000..2e01f34a9 --- /dev/null +++ b/app/assets/javascripts/interface.ts @@ -0,0 +1,121 @@ +import { DeviceInterface, getGlobalScope, SNApplication } from 'snjs'; +import { Database } from '@/database'; + +const KEYCHAIN_STORAGE_KEY = 'keychain'; + +export class WebDeviceInterface extends DeviceInterface { + + private database: Database + + constructor(namespace: string, timeout: any) { + super( + namespace, + timeout || setTimeout.bind(getGlobalScope()), + setInterval.bind(getGlobalScope()) + ); + this.database = new Database(); + } + + setApplication(application: SNApplication) { + this.database.setAlertService(application.alertService!); + } + + deinit() { + super.deinit(); + this.database.deinit(); + } + + async getRawStorageValue(key: string) { + return localStorage.getItem(key); + } + + async getAllRawStorageKeyValues() { + const results = []; + for (const key of Object.keys(localStorage)) { + results.push({ + key: key, + value: localStorage[key] + }); + } + return results; + } + + async setRawStorageValue(key: string, value: any) { + localStorage.setItem(key, value); + } + + async removeRawStorageValue(key: string) { + localStorage.removeItem(key); + } + + async removeAllRawStorageValues() { + localStorage.clear(); + } + + async openDatabase() { + this.database.unlock(); + return new Promise((resolve, reject) => { + this.database.openDatabase(() => { + resolve({ isNewDatabase: true }); + }).then(() => { + resolve({ isNewDatabase: false }); + }).catch((error => { + reject(error); + })); + }) as Promise<{ isNewDatabase?: boolean } | undefined>; + } + + private getDatabaseKeyPrefix() { + if (this.namespace) { + return `${this.namespace}-item-`; + } else { + return `item-`; + } + } + + private keyForPayloadId(id: string) { + return `${this.getDatabaseKeyPrefix()}${id}`; + } + + async getAllRawDatabasePayloads() { + return this.database.getAllPayloads(); + } + + async saveRawDatabasePayload(payload: any) { + return this.database.savePayload(payload); + } + + async saveRawDatabasePayloads(payloads: any[]) { + return this.database.savePayloads(payloads); + } + + async removeRawDatabasePayloadWithId(id: string) { + return this.database.deletePayload(id); + } + + async removeAllRawDatabasePayloads() { + return this.database.clearAllPayloads(); + } + + async getKeychainValue() { + const value = localStorage.getItem(KEYCHAIN_STORAGE_KEY); + if (value) { + return JSON.parse(value); + } + } + + async setKeychainValue(value: any) { + localStorage.setItem(KEYCHAIN_STORAGE_KEY, JSON.stringify(value)); + } + + async clearKeychainValue() { + localStorage.removeItem(KEYCHAIN_STORAGE_KEY); + } + + openUrl(url: string) { + const win = window.open(url, '_blank'); + if (win) { + win.focus(); + } + } +} diff --git a/app/assets/javascripts/models/noteHistoryEntry.js b/app/assets/javascripts/models/noteHistoryEntry.js deleted file mode 100644 index 8248d0c69..000000000 --- a/app/assets/javascripts/models/noteHistoryEntry.js +++ /dev/null @@ -1,20 +0,0 @@ -import { SFItemHistoryEntry } from 'snjs'; - -export class NoteHistoryEntry extends SFItemHistoryEntry { - - previewTitle() { - return this.item.updated_at.toLocaleString(); - } - - previewSubTitle() { - if(!this.hasPreviousEntry) { - return `${this.textCharDiffLength} characters loaded`; - } else if(this.textCharDiffLength < 0) { - return `${this.textCharDiffLength * -1} characters removed`; - } else if(this.textCharDiffLength > 0) { - return `${this.textCharDiffLength} characters added`; - } else { - return "Title or metadata changed"; - } - } -} diff --git a/app/assets/javascripts/routes.js b/app/assets/javascripts/routes.ts similarity index 81% rename from app/assets/javascripts/routes.js rename to app/assets/javascripts/routes.ts index d689f85c8..42d646e37 100644 --- a/app/assets/javascripts/routes.js +++ b/app/assets/javascripts/routes.ts @@ -1,7 +1,7 @@ import { isDesktopApplication } from './utils'; /* @ngInject */ -export function configRoutes($locationProvider) { +export function configRoutes($locationProvider: ng.ILocationProvider) { if (!isDesktopApplication()) { if (window.history && window.history.pushState) { $locationProvider.html5Mode({ diff --git a/app/assets/javascripts/services/actionsManager.js b/app/assets/javascripts/services/actionsManager.js deleted file mode 100644 index 2e013dd84..000000000 --- a/app/assets/javascripts/services/actionsManager.js +++ /dev/null @@ -1,297 +0,0 @@ -import _ from 'lodash'; -import angular from 'angular'; -import { Action, SFModelManager, SFItemParams, protocolManager } from 'snjs'; - -export class ActionsManager { - - /* @ngInject */ - constructor( - $compile, - $rootScope, - $timeout, - alertManager, - authManager, - httpManager, - modelManager, - syncManager, - ) { - this.$compile = $compile; - this.$rootScope = $rootScope; - this.$timeout = $timeout; - this.alertManager = alertManager; - this.authManager = authManager; - this.httpManager = httpManager; - this.modelManager = modelManager; - this.syncManager = syncManager; - /* Used when decrypting old items with new keys. This array is only kept in memory. */ - this.previousPasswords = []; - } - - get extensions() { - return this.modelManager.validItemsForContentType('Extension'); - } - - extensionsInContextOfItem(item) { - return this.extensions.filter((ext) => { - return _.includes(ext.supported_types, item.content_type) || - ext.actionsWithContextForItem(item).length > 0; - }); - } - - /** - * Loads an extension in the context of a certain item. - * The server then has the chance to respond with actions that are - * relevant just to this item. The response extension is not saved, - * just displayed as a one-time thing. - */ - async loadExtensionInContextOfItem(extension, item) { - const params = { - content_type: item.content_type, - item_uuid: item.uuid - }; - const emptyFunc = () => { }; - return this.httpManager.getAbsolute( - extension.url, - params, - emptyFunc, - emptyFunc - ).then((response) => { - this.updateExtensionFromRemoteResponse(extension, response); - return extension; - }).catch((response) => { - console.error("Error loading extension", response); - return null; - }); - } - - updateExtensionFromRemoteResponse(extension, response) { - if (response.description) { - extension.description = response.description; - } - if (response.supported_types) { - extension.supported_types = response.supported_types; - } - if (response.actions) { - extension.actions = response.actions.map((action) => { - return new Action(action); - }); - } else { - extension.actions = []; - } - } - - async executeAction(action, extension, item) { - action.running = true; - let result; - switch (action.verb) { - case 'get': - result = await this.handleGetAction(action); - break; - case 'render': - result = await this.handleRenderAction(action); - break; - case 'show': - result = await this.handleShowAction(action); - break; - case 'post': - result = await this.handlePostAction(action, item, extension); - break; - default: - break; - } - - action.lastExecuted = new Date(); - action.running = false; - return result; - } - - async decryptResponse(response, keys) { - const responseItem = response.item; - await protocolManager.decryptItem(responseItem, keys); - if (!responseItem.errorDecrypting) { - return { - response: response, - item: responseItem - }; - } - - if (!response.auth_params) { - /** - * In some cases revisions were missing auth params. - * Instruct the user to email us to get this remedied. - */ - this.alertManager.alert({ - text: `We were unable to decrypt this revision using your current keys, - and this revision is missing metadata that would allow us to try different - keys to decrypt it. This can likely be fixed with some manual intervention. - Please email hello@standardnotes.org for assistance.` - }); - return {}; - } - - /* Try previous passwords */ - const triedPasswords = []; - for (const passwordCandidate of this.previousPasswords) { - if (triedPasswords.includes(passwordCandidate)) { - continue; - } - triedPasswords.push(passwordCandidate); - const keyResults = await protocolManager.computeEncryptionKeysForUser( - passwordCandidate, - response.auth_params - ); - if (!keyResults) { - continue; - } - const nestedResponse = await this.decryptResponse( - response, - keyResults - ); - if (nestedResponse.item) { - return nestedResponse; - } - } - return new Promise((resolve, reject) => { - this.presentPasswordModal((password) => { - this.previousPasswords.push(password); - const result = this.decryptResponse(response, keys); - resolve(result); - }); - }); - } - - async handlePostAction(action, item, extension) { - const decrypted = action.access_type === 'decrypted'; - const itemParams = await this.outgoingParamsForItem(item, extension, decrypted); - const params = { - items: [itemParams] - }; - /* Needed until SNJS detects null function */ - const emptyFunc = () => { }; - return this.httpManager.postAbsolute( - action.url, - params, - emptyFunc, - emptyFunc - ).then((response) => { - action.error = false; - return {response: response}; - }).catch((response) => { - action.error = true; - console.error("Action error response:", response); - this.alertManager.alert({ - text: "An issue occurred while processing this action. Please try again." - }); - return { response: response }; - }); - } - - async handleShowAction(action) { - const win = window.open(action.url, '_blank'); - if (win) { - win.focus(); - } - return { response: null }; - } - - async handleGetAction(action) { - /* Needed until SNJS detects null function */ - const emptyFunc = () => {}; - const onConfirm = async () => { - return this.httpManager.getAbsolute(action.url, {}, emptyFunc, emptyFunc) - .then(async (response) => { - action.error = false; - await this.decryptResponse(response, await this.authManager.keys()); - const items = await this.modelManager.mapResponseItemsToLocalModels( - [response.item], - SFModelManager.MappingSourceRemoteActionRetrieved - ); - for (const mappedItem of items) { - this.modelManager.setItemDirty(mappedItem, true); - } - this.syncManager.sync(); - return { - response: response, - item: response.item - }; - }).catch((response) => { - const error = (response && response.error) - || { message: "An issue occurred while processing this action. Please try again." }; - this.alertManager.alert({ text: error.message }); - action.error = true; - return { error: error }; - }); - }; - return new Promise((resolve, reject) => { - this.alertManager.confirm({ - text: "Are you sure you want to replace the current note contents with this action's results?", - onConfirm: () => { - onConfirm().then(resolve); - } - }); - }); - } - - async handleRenderAction(action) { - /* Needed until SNJS detects null function */ - const emptyFunc = () => {}; - return this.httpManager.getAbsolute( - action.url, - {}, - emptyFunc, - emptyFunc - ).then(async (response) => { - action.error = false; - const result = await this.decryptResponse(response, await this.authManager.keys()); - const item = this.modelManager.createItem(result.item); - return { - response: result.response, - item: item - }; - }).catch((response) => { - const error = (response && response.error) - || { message: "An issue occurred while processing this action. Please try again." }; - this.alertManager.alert({ text: error.message }); - action.error = true; - return { error: error }; - }); - } - - async outgoingParamsForItem(item, extension, decrypted = false) { - let keys = await this.authManager.keys(); - if (decrypted) { - keys = null; - } - const itemParams = new SFItemParams( - item, - keys, - await this.authManager.getAuthParams() - ); - return itemParams.paramsForExtension(); - } - - presentRevisionPreviewModal(uuid, content) { - const scope = this.$rootScope.$new(true); - scope.uuid = uuid; - scope.content = content; - const el = this.$compile( - `` - )(scope); - angular.element(document.body).append(el); - } - - presentPasswordModal(callback) { - const scope = this.$rootScope.$new(true); - scope.type = "password"; - scope.title = "Decryption Assistance"; - scope.message = `Unable to decrypt this item with your current keys. - Please enter your account password at the time of this revision.`; - scope.callback = callback; - const el = this.$compile( - `` - )(scope); - angular.element(document.body).append(el); - } -} diff --git a/app/assets/javascripts/services/alertManager.js b/app/assets/javascripts/services/alertManager.js deleted file mode 100644 index c832c6062..000000000 --- a/app/assets/javascripts/services/alertManager.js +++ /dev/null @@ -1,71 +0,0 @@ -import { SFAlertManager } from 'snjs'; -import { SKAlert } from 'sn-stylekit'; - -export class AlertManager extends SFAlertManager { - /* @ngInject */ - constructor($timeout) { - super(); - this.$timeout = $timeout; - } - - async alert({ - title, - text, - closeButtonText = "OK", - onClose} = {} - ) { - return new Promise((resolve, reject) => { - const buttons = [ - { - text: closeButtonText, - style: "neutral", - action: async () => { - if(onClose) { - this.$timeout(onClose); - } - resolve(true); - } - } - ]; - const alert = new SKAlert({title, text, buttons}); - alert.present(); - }); - } - - async confirm({ - title, - text, - confirmButtonText = "Confirm", - cancelButtonText = "Cancel", - onConfirm, - onCancel, - destructive = false - } = {}) { - return new Promise((resolve, reject) => { - const buttons = [ - { - text: cancelButtonText, - style: "neutral", - action: async () => { - if(onCancel) { - this.$timeout(onCancel); - } - reject(false); - } - }, - { - text: confirmButtonText, - style: destructive ? "danger" : "info", - action: async () => { - if(onConfirm) { - this.$timeout(onConfirm); - } - resolve(true); - } - }, - ]; - const alert = new SKAlert({title, text, buttons}); - alert.present(); - }); - } -} diff --git a/app/assets/javascripts/services/alertService.ts b/app/assets/javascripts/services/alertService.ts new file mode 100644 index 000000000..74a775b89 --- /dev/null +++ b/app/assets/javascripts/services/alertService.ts @@ -0,0 +1,101 @@ +/* eslint-disable prefer-promise-reject-errors */ +import { SNAlertService, ButtonType, DismissBlockingDialog } from 'snjs'; +import { SKAlert } from 'sn-stylekit'; + +/** @returns a promise resolving to true if the user confirmed, false if they canceled */ +export function confirmDialog({ + text, + title, + confirmButtonText = 'Confirm', + cancelButtonText = 'Cancel', + confirmButtonStyle = 'info', +}: { + text: string; + title?: string; + confirmButtonText?: string; + cancelButtonText?: string; + confirmButtonStyle?: 'danger' | 'info'; +}) { + return new Promise((resolve) => { + const alert = new SKAlert({ + title, + text, + buttons: [ + { + text: cancelButtonText, + style: 'neutral', + action() { + resolve(false); + }, + }, + { + text: confirmButtonText, + style: confirmButtonStyle, + action() { + resolve(true); + }, + }, + ], + }); + alert.present(); + }); +} + +export function alertDialog({ + title, + text, + closeButtonText = 'OK', +}: { + title?: string; + text: string; + closeButtonText?: string; +}) { + return new Promise((resolve) => { + const alert = new SKAlert({ + title, + text, + buttons: [ + { + text: closeButtonText, + style: 'neutral', + action: resolve, + }, + ], + }); + alert.present(); + }); +} + +export class AlertService implements SNAlertService { + /** + * @deprecated use the standalone `alertDialog` function instead + */ + alert(text: string, title?: string, closeButtonText?: string) { + return alertDialog({ text, title, closeButtonText }); + } + + confirm( + text: string, + title?: string, + confirmButtonText?: string, + confirmButtonType?: ButtonType, + cancelButtonText?: string + ): Promise { + return confirmDialog({ + text, + title, + confirmButtonText, + cancelButtonText, + confirmButtonStyle: + confirmButtonType === ButtonType.Danger ? 'danger' : 'info', + }); + } + + blockingDialog(text: string) { + const alert = new SKAlert({ text }); + alert.present(); + return () => { + alert.dismiss(); + }; + } +} diff --git a/app/assets/javascripts/services/archiveManager.ts b/app/assets/javascripts/services/archiveManager.ts new file mode 100644 index 000000000..4b7f050f5 --- /dev/null +++ b/app/assets/javascripts/services/archiveManager.ts @@ -0,0 +1,176 @@ +import { WebApplication } from '@/ui_models/application'; +import { EncryptionIntent, ProtectedAction, SNItem, ContentType, SNNote } from 'snjs'; + +function zippableTxtName(name: string, suffix = ""): string { + const sanitizedName = name + .replace(/\//g, '') + .replace(/\\+/g, '') + .replace(/:/g, ' ') + .replace(/\./g, ' '); + const nameEnd = suffix + ".txt"; + const maxFileNameLength = 255; + return sanitizedName.slice(0, maxFileNameLength - nameEnd.length) + nameEnd; +} + +export class ArchiveManager { + + private readonly application: WebApplication + private textFile?: string + + constructor(application: WebApplication) { + this.application = application; + } + + public async downloadBackup(encrypted: boolean) { + const items = this.application.allItems(); + + const run = async () => { + // download in Standard Notes format + const intent = encrypted + ? EncryptionIntent.FileEncrypted + : EncryptionIntent.FileDecrypted; + const data = await this.itemsData(items, intent) + if (encrypted) { + this.downloadData( + data!, + `Standard Notes Encrypted Backup - ${this.formattedDate()}.txt` + ); + } else { + const data = await this.application.createBackupFile(items, intent); + if (data) { + /** download as zipped plain text files */ + this.downloadZippedItems( + items, + /** Add the backup file to the archive */ + (zipWriter, zip) => new Promise((resolve) => { + const blob = new Blob([data], { type: 'text/plain' }); + const fileName = zippableTxtName( + `Standard Notes Decrypted Backup - ${this.formattedDate()}` + ); + zipWriter.add(fileName, new zip.BlobReader(blob), resolve); + }) + ); + } + } + }; + + if ( + await this.application.privilegesService! + .actionRequiresPrivilege(ProtectedAction.ManageBackups) + ) { + this.application.presentPrivilegesModal( + ProtectedAction.ManageBackups, + () => { + run(); + }); + } else { + run(); + } + } + + private formattedDate() { + const string = `${new Date()}`; + // Match up to the first parenthesis, i.e do not include '(Central Standard Time)' + const matches = string.match(/^(.*?) \(/); + if (matches && matches.length >= 2) { + return matches[1]; + } + return string; + } + + private async itemsData(items: SNItem[], intent: EncryptionIntent) { + const data = await this.application.createBackupFile(items, intent); + if (!data) { + return undefined; + } + const blobData = new Blob([data], { type: 'text/json' }); + return blobData; + } + + private get zip() { + return (window as any).zip; + } + + private async loadZip() { + if (this.zip) { + return; + } + const scriptTag = document.createElement('script'); + scriptTag.src = '/assets/zip/zip.js'; + scriptTag.async = false; + const headTag = document.getElementsByTagName('head')[0]; + headTag.appendChild(scriptTag); + return new Promise((resolve) => { + scriptTag.onload = () => { + this.zip.workerScriptsPath = 'assets/zip/'; + resolve(); + }; + }); + } + + private async downloadZippedItems( + items: SNItem[], + onOpenZip: (zipWriter: any, zip: any) => Promise + ) { + await this.loadZip(); + this.zip.createWriter( + new this.zip.BlobWriter('application/zip'), + async (zipWriter: any) => { + await onOpenZip(zipWriter, this.zip); + let index = 0; + const nextFile = () => { + const item = items[index]; + let name, contents; + if (item.content_type === ContentType.Note) { + const note = item as SNNote; + name = note.title; + contents = note.text; + } else { + name = item.content_type; + contents = JSON.stringify(item.content, null, 2); + } + if (!name) { + name = ''; + } + const blob = new Blob([contents], { type: 'text/plain' }); + const fileName = item.content_type + '/' + + zippableTxtName(name, `-${item.uuid.split('-')[0]}`); + zipWriter.add(fileName, new this.zip.BlobReader(blob), () => { + index++; + if (index < items.length) { + nextFile(); + } else { + zipWriter.close((blob: any) => { + this.downloadData( + blob, + `Standard Notes Backup - ${this.formattedDate()}.zip` + ); + zipWriter = null; + }); + } + }); + }; + nextFile(); + }, onerror); + } + + private hrefForData(data: Blob) { + // If we are replacing a previously generated file we need to + // manually revoke the object URL to avoid memory leaks. + if (this.textFile) { + window.URL.revokeObjectURL(this.textFile); + } + this.textFile = window.URL.createObjectURL(data); + // returns a URL you can use as a href + return this.textFile; + } + + private downloadData(data: Blob, fileName: string) { + const link = document.createElement('a'); + link.setAttribute('download', fileName); + link.href = this.hrefForData(data); + document.body.appendChild(link); + link.click(); + link.remove(); + } +} diff --git a/app/assets/javascripts/services/authManager.js b/app/assets/javascripts/services/authManager.js deleted file mode 100644 index 89485209f..000000000 --- a/app/assets/javascripts/services/authManager.js +++ /dev/null @@ -1,140 +0,0 @@ -import angular from 'angular'; -import { StorageManager } from './storageManager'; -import { protocolManager, SFAuthManager } from 'snjs'; - -export class AuthManager extends SFAuthManager { - /* @ngInject */ - constructor( - modelManager, - singletonManager, - storageManager, - dbManager, - httpManager, - $rootScope, - $timeout, - $compile - ) { - super(storageManager, httpManager, null, $timeout); - this.$rootScope = $rootScope; - this.$compile = $compile; - this.modelManager = modelManager; - this.singletonManager = singletonManager; - this.storageManager = storageManager; - this.dbManager = dbManager; - } - - loadInitialData() { - const userData = this.storageManager.getItemSync("user"); - if(userData) { - this.user = JSON.parse(userData); - } else { - // legacy, check for uuid - const idData = this.storageManager.getItemSync("uuid"); - if(idData) { - this.user = {uuid: idData}; - } - } - this.checkForSecurityUpdate(); - } - - offline() { - return !this.user; - } - - isEphemeralSession() { - if(this.ephemeral == null || this.ephemeral == undefined) { - this.ephemeral = JSON.parse(this.storageManager.getItemSync("ephemeral", StorageManager.Fixed)); - } - return this.ephemeral; - } - - setEphemeral(ephemeral) { - this.ephemeral = ephemeral; - if(ephemeral) { - this.storageManager.setModelStorageMode(StorageManager.Ephemeral); - this.storageManager.setItemsMode(StorageManager.Ephemeral); - } else { - this.storageManager.setModelStorageMode(StorageManager.Fixed); - this.storageManager.setItemsMode(this.storageManager.bestStorageMode()); - this.storageManager.setItem("ephemeral", JSON.stringify(false), StorageManager.Fixed); - } - } - - async getAuthParamsForEmail(url, email, extraParams) { - return super.getAuthParamsForEmail(url, email, extraParams); - } - - async login(url, email, password, ephemeral, strictSignin, extraParams) { - return super.login(url, email, password, strictSignin, extraParams).then((response) => { - if(!response.error) { - this.setEphemeral(ephemeral); - this.checkForSecurityUpdate(); - } - - return response; - }); - } - - async register(url, email, password, ephemeral) { - return super.register(url, email, password).then((response) => { - if(!response.error) { - this.setEphemeral(ephemeral); - } - return response; - }); - } - - async changePassword(url, email, current_server_pw, newKeys, newAuthParams) { - return super.changePassword(url, email, current_server_pw, newKeys, newAuthParams).then((response) => { - if(!response.error) { - this.checkForSecurityUpdate(); - } - return response; - }); - } - - async handleAuthResponse(response, email, url, authParams, keys) { - try { - await super.handleAuthResponse(response, email, url, authParams, keys); - this.user = response.user; - this.storageManager.setItem("user", JSON.stringify(response.user)); - } catch (e) { - this.dbManager.displayOfflineAlert(); - } - } - - async verifyAccountPassword(password) { - const authParams = await this.getAuthParams(); - const keys = await protocolManager.computeEncryptionKeysForUser(password, authParams); - const success = keys.mk === (await this.keys()).mk; - return success; - } - - async checkForSecurityUpdate() { - if(this.offline()) { - return false; - } - - const latest = protocolManager.version(); - const updateAvailable = await this.protocolVersion() !== latest; - if(updateAvailable !== this.securityUpdateAvailable) { - this.securityUpdateAvailable = updateAvailable; - this.$rootScope.$broadcast("security-update-status-changed"); - } - - return this.securityUpdateAvailable; - } - - presentPasswordWizard(type) { - var scope = this.$rootScope.$new(true); - scope.type = type; - var el = this.$compile( "" )(scope); - angular.element(document.body).append(el); - } - - signOut() { - super.signout(); - this.user = null; - this._authParams = null; - } -} diff --git a/app/assets/javascripts/services/componentManager.js b/app/assets/javascripts/services/componentManager.js deleted file mode 100644 index ba79f9024..000000000 --- a/app/assets/javascripts/services/componentManager.js +++ /dev/null @@ -1,50 +0,0 @@ -import angular from 'angular'; -import { SNComponentManager, SFAlertManager } from 'snjs'; -import { isDesktopApplication, getPlatformString } from '@/utils'; - -export class ComponentManager extends SNComponentManager { - /* @ngInject */ - constructor( - modelManager, - syncManager, - desktopManager, - nativeExtManager, - $rootScope, - $timeout, - $compile - ) { - super({ - modelManager, - syncManager, - desktopManager, - nativeExtManager, - alertManager: new SFAlertManager(), - $uiRunner: $rootScope.safeApply, - $timeout: $timeout, - environment: isDesktopApplication() ? "desktop" : "web", - platform: getPlatformString() - }); - - // this.loggingEnabled = true; - - this.$compile = $compile; - this.$rootScope = $rootScope; - } - - openModalComponent(component) { - var scope = this.$rootScope.$new(true); - scope.component = component; - var el = this.$compile( "" )(scope); - angular.element(document.body).append(el); - } - - presentPermissionsDialog(dialog) { - const scope = this.$rootScope.$new(true); - scope.permissionsString = dialog.permissionsString; - scope.component = dialog.component; - scope.callback = dialog.callback; - - var el = this.$compile( "" )(scope); - angular.element(document.body).append(el); - } -} diff --git a/app/assets/javascripts/services/dbManager.js b/app/assets/javascripts/services/dbManager.js deleted file mode 100644 index 2f015e52a..000000000 --- a/app/assets/javascripts/services/dbManager.js +++ /dev/null @@ -1,179 +0,0 @@ -export class DBManager { - /* @ngInject */ - constructor(alertManager) { - this.locked = true; - this.alertManager = alertManager; - } - - displayOfflineAlert() { - var message = "There was an issue loading your offline database. This could happen for two reasons:"; - message += "\n\n1. You're in a private window in your browser. We can't save your data without access to the local database. Please use a non-private window."; - message += "\n\n2. You have two windows of the app open at the same time. Please close any other app instances and reload the page."; - this.alertManager.alert({text: message}); - } - - setLocked(locked) { - this.locked = locked; - } - - async openDatabase({onUpgradeNeeded} = {}) { - if(this.locked) { - return; - } - - const request = window.indexedDB.open("standardnotes", 1); - - return new Promise((resolve, reject) => { - request.onerror = (event) => { - if(event.target.errorCode) { - this.alertManager.alert({text: "Offline database issue: " + event.target.errorCode}); - } else { - this.displayOfflineAlert(); - } - console.error("Offline database issue:", event); - resolve(null); - }; - - request.onsuccess = (event) => { - const db = event.target.result; - db.onversionchange = function(event) { - db.close(); - }; - db.onerror = function(errorEvent) { - console.error("Database error: " + errorEvent.target.errorCode); - }; - resolve(db); - }; - - request.onblocked = (event) => { - console.error("Request blocked error:", event.target.errorCode); - }; - - request.onupgradeneeded = (event) => { - const db = event.target.result; - db.onversionchange = function(event) { - db.close(); - }; - - // Create an objectStore for this database - const objectStore = db.createObjectStore("items", { keyPath: "uuid" }); - objectStore.createIndex("uuid", "uuid", { unique: true }); - objectStore.transaction.oncomplete = function(event) { - // Ready to store values in the newly created objectStore. - if(db.version === 1 && onUpgradeNeeded) { - onUpgradeNeeded(); - } - }; - }; - }); - } - - async getAllModels() { - const db = await this.openDatabase(); - const objectStore = db.transaction("items").objectStore("items"); - const items = []; - return new Promise(async (resolve, reject) => { - objectStore.openCursor().onsuccess = (event) => { - const cursor = event.target.result; - if (cursor) { - items.push(cursor.value); - cursor.continue(); - } else { - resolve(items); - } - }; - }); - } - - async saveModel(item) { - this.saveModels([item]); - } - - async saveModels(items) { - const showGenericError = (error) => { - this.alertManager.alert({text: `Unable to save changes locally due to an unknown system issue. Issue Code: ${error.code} Issue Name: ${error.name}.`}); - }; - - return new Promise(async (resolve, reject) => { - if(items.length === 0) { - resolve(); - return; - } - - const db = await this.openDatabase(); - const transaction = db.transaction("items", "readwrite"); - transaction.oncomplete = (event) => {}; - transaction.onerror = function(event) { - console.error("Transaction error:", event.target.errorCode); - showGenericError(event.target.error); - }; - transaction.onblocked = function(event) { - console.error("Transaction blocked error:", event.target.errorCode); - showGenericError(event.target.error); - }; - transaction.onabort = function(event) { - console.error("Offline saving aborted:", event); - const error = event.target.error; - if(error.name == "QuotaExceededError") { - this.alertManager.alert({text: "Unable to save changes locally because your device is out of space. Please free up some disk space and try again, otherwise, your data may end up in an inconsistent state."}); - } else { - showGenericError(error); - } - reject(error); - }; - - const itemObjectStore = transaction.objectStore("items"); - - const putItem = async (item) => { - return new Promise((resolve, reject) => { - const request = itemObjectStore.put(item); - request.onerror = (event) => { - console.error("DB put error:", event.target.error); - resolve(); - }; - request.onsuccess = resolve; - }); - }; - - for(const item of items) { - await putItem(item); - } - - resolve(); - }); - } - - async deleteModel(item) { - return new Promise(async (resolve, reject) => { - const db = await this.openDatabase(); - const request = db.transaction("items", "readwrite").objectStore("items").delete(item.uuid); - request.onsuccess = (event) => { - resolve(); - }; - request.onerror = (event) => { - reject(); - }; - }); - } - - async clearAllModels() { - const deleteRequest = window.indexedDB.deleteDatabase("standardnotes"); - - return new Promise((resolve, reject) => { - deleteRequest.onerror = function(event) { - console.error("Error deleting database."); - resolve(); - }; - - deleteRequest.onsuccess = function(event) { - resolve(); - }; - - deleteRequest.onblocked = function(event) { - console.error("Delete request blocked"); - this.alertManager.alert({text: "Your browser is blocking Standard Notes from deleting the local database. Make sure there are no other open windows of this app and try again. If the issue persists, please manually delete app data to sign out."}); - resolve(); - }; - }); - } -} diff --git a/app/assets/javascripts/services/desktopManager.js b/app/assets/javascripts/services/desktopManager.js deleted file mode 100644 index a7a67078c..000000000 --- a/app/assets/javascripts/services/desktopManager.js +++ /dev/null @@ -1,235 +0,0 @@ -// An interface used by the Desktop app to interact with SN -import _ from 'lodash'; -import { isDesktopApplication } from '@/utils'; -import { SFItemParams, SFModelManager } from 'snjs'; - -const COMPONENT_DATA_KEY_INSTALL_ERROR = 'installError'; -const COMPONENT_CONTENT_KEY_PACKAGE_INFO = 'package_info'; -const COMPONENT_CONTENT_KEY_LOCAL_URL = 'local_url'; - -export class DesktopManager { - /* @ngInject */ - constructor( - $rootScope, - $timeout, - modelManager, - syncManager, - authManager, - passcodeManager, - appState - ) { - this.passcodeManager = passcodeManager; - this.modelManager = modelManager; - this.authManager = authManager; - this.syncManager = syncManager; - this.$rootScope = $rootScope; - this.appState = appState; - this.timeout = $timeout; - this.updateObservers = []; - this.componentActivationObservers = []; - - this.isDesktop = isDesktopApplication(); - - $rootScope.$on("initial-data-loaded", () => { - this.dataLoaded = true; - if(this.dataLoadHandler) { - this.dataLoadHandler(); - } - }); - - $rootScope.$on("major-data-change", () => { - if(this.majorDataChangeHandler) { - this.majorDataChangeHandler(); - } - }); - } - - saveBackup() { - this.majorDataChangeHandler && this.majorDataChangeHandler(); - } - - getExtServerHost() { - console.assert( - this.extServerHost, - 'extServerHost is null' - ); - return this.extServerHost; - } - - /* - Sending a component in its raw state is really slow for the desktop app - Keys are not passed into ItemParams, so the result is not encrypted - */ - async convertComponentForTransmission(component) { - return new SFItemParams(component).paramsForExportFile(true); - } - - // All `components` should be installed - syncComponentsInstallation(components) { - if(!this.isDesktop) { - return; - } - Promise.all(components.map((component) => { - return this.convertComponentForTransmission(component); - })).then((data) => { - this.installationSyncHandler(data); - }); - } - - async installComponent(component) { - this.installComponentHandler( - await this.convertComponentForTransmission(component) - ); - } - - registerUpdateObserver(callback) { - const observer = { - callback: callback - }; - this.updateObservers.push(observer); - return observer; - } - - searchText(text) { - if(!this.isDesktop) { - return; - } - this.lastSearchedText = text; - this.searchHandler && this.searchHandler(text); - } - - redoSearch() { - if(this.lastSearchedText) { - this.searchText(this.lastSearchedText); - } - } - - deregisterUpdateObserver(observer) { - _.pull(this.updateObservers, observer); - } - - // Pass null to cancel search - desktop_setSearchHandler(handler) { - this.searchHandler = handler; - } - - desktop_windowGainedFocus() { - this.$rootScope.$broadcast("window-gained-focus"); - } - - desktop_windowLostFocus() { - this.$rootScope.$broadcast("window-lost-focus"); - } - - desktop_onComponentInstallationComplete(componentData, error) { - const component = this.modelManager.findItem(componentData.uuid); - if(!component) { - return; - } - if(error) { - component.setAppDataItem( - COMPONENT_DATA_KEY_INSTALL_ERROR, - error - ); - } else { - const permissableKeys = [ - COMPONENT_CONTENT_KEY_PACKAGE_INFO, - COMPONENT_CONTENT_KEY_LOCAL_URL - ]; - for(const key of permissableKeys) { - component[key] = componentData.content[key]; - } - this.modelManager.notifySyncObserversOfModels( - [component], - SFModelManager.MappingSourceDesktopInstalled - ); - component.setAppDataItem( - COMPONENT_DATA_KEY_INSTALL_ERROR, - null - ); - } - this.modelManager.setItemDirty(component); - this.syncManager.sync(); - this.timeout(() => { - for(const observer of this.updateObservers) { - observer.callback(component); - } - }); - } - - desktop_registerComponentActivationObserver(callback) { - const observer = {id: Math.random, callback: callback}; - this.componentActivationObservers.push(observer); - return observer; - } - - desktop_deregisterComponentActivationObserver(observer) { - _.pull(this.componentActivationObservers, observer); - } - - /* Notify observers that a component has been registered/activated */ - async notifyComponentActivation(component) { - const serializedComponent = await this.convertComponentForTransmission( - component - ); - this.timeout(() => { - for(const observer of this.componentActivationObservers) { - observer.callback(serializedComponent); - } - }); - } - - /* Used to resolve "sn://" */ - desktop_setExtServerHost(host) { - this.extServerHost = host; - this.appState.desktopExtensionsReady(); - } - - desktop_setComponentInstallationSyncHandler(handler) { - this.installationSyncHandler = handler; - } - - desktop_setInstallComponentHandler(handler) { - this.installComponentHandler = handler; - } - - desktop_setInitialDataLoadHandler(handler) { - this.dataLoadHandler = handler; - if(this.dataLoaded) { - this.dataLoadHandler(); - } - } - - async desktop_requestBackupFile(callback) { - let keys, authParams; - if(this.authManager.offline() && this.passcodeManager.hasPasscode()) { - keys = this.passcodeManager.keys(); - authParams = this.passcodeManager.passcodeAuthParams(); - } else { - keys = await this.authManager.keys(); - authParams = await this.authManager.getAuthParams(); - } - const nullOnEmpty = true; - this.modelManager.getAllItemsJSONData( - keys, - authParams, - nullOnEmpty - ).then((data) => { - callback(data); - }); - } - - desktop_setMajorDataChangeHandler(handler) { - this.majorDataChangeHandler = handler; - } - - desktop_didBeginBackup() { - this.appState.beganBackupDownload(); - } - - desktop_didFinishBackup(success) { - this.appState.endedBackupDownload({ - success: success - }); - } -} diff --git a/app/assets/javascripts/services/desktopManager.ts b/app/assets/javascripts/services/desktopManager.ts new file mode 100644 index 000000000..ab63ee6f2 --- /dev/null +++ b/app/assets/javascripts/services/desktopManager.ts @@ -0,0 +1,243 @@ +import { SNComponent, PurePayload, ComponentMutator, AppDataField } from 'snjs'; +/* eslint-disable camelcase */ +import { WebApplication } from '@/ui_models/application'; +// An interface used by the Desktop app to interact with SN +import { isDesktopApplication } from '@/utils'; +import { EncryptionIntent, ApplicationService, ApplicationEvent, removeFromArray } from 'snjs'; + +type UpdateObserverCallback = (component: SNComponent) => void +type ComponentActivationCallback = (payload: PurePayload) => void +type ComponentActivationObserver = { + id: string, + callback: ComponentActivationCallback +} + +export class DesktopManager extends ApplicationService { + + $rootScope: ng.IRootScopeService + $timeout: ng.ITimeoutService + componentActivationObservers: ComponentActivationObserver[] = [] + updateObservers: { + callback: UpdateObserverCallback + }[] = [] + isDesktop = isDesktopApplication(); + + dataLoaded = false + dataLoadHandler?: () => void + majorDataChangeHandler?: () => void + extServerHost?: string + installationSyncHandler?: (payloads: PurePayload[]) => void + installComponentHandler?: (payload: PurePayload) => void + lastSearchedText?: string + searchHandler?: (text?: string) => void + + constructor( + $rootScope: ng.IRootScopeService, + $timeout: ng.ITimeoutService, + application: WebApplication + ) { + super(application); + this.$rootScope = $rootScope; + this.$timeout = $timeout; + } + + get webApplication() { + return this.application as WebApplication; + } + + deinit() { + this.componentActivationObservers.length = 0; + this.updateObservers.length = 0; + super.deinit(); + } + + async onAppEvent(eventName: ApplicationEvent) { + super.onAppEvent(eventName); + if (eventName === ApplicationEvent.LocalDataLoaded) { + this.dataLoaded = true; + if (this.dataLoadHandler) { + this.dataLoadHandler(); + } + } else if (eventName === ApplicationEvent.MajorDataChange) { + if (this.majorDataChangeHandler) { + this.majorDataChangeHandler(); + } + } + } + + saveBackup() { + this.majorDataChangeHandler && this.majorDataChangeHandler(); + } + + getExtServerHost() { + console.assert( + this.extServerHost, + 'extServerHost is null' + ); + return this.extServerHost; + } + + /** + * Sending a component in its raw state is really slow for the desktop app + * Keys are not passed into ItemParams, so the result is not encrypted + */ + async convertComponentForTransmission(component: SNComponent) { + return this.application!.protocolService!.payloadByEncryptingPayload( + component.payloadRepresentation(), + EncryptionIntent.FileDecrypted + ); + } + + // All `components` should be installed + syncComponentsInstallation(components: SNComponent[]) { + if (!this.isDesktop) { + return; + } + Promise.all(components.map((component) => { + return this.convertComponentForTransmission(component); + })).then((payloads) => { + this.installationSyncHandler!(payloads); + }); + } + + async installComponent(component: SNComponent) { + this.installComponentHandler!( + await this.convertComponentForTransmission(component) + ); + } + + registerUpdateObserver(callback: UpdateObserverCallback) { + const observer = { + callback: callback + }; + this.updateObservers.push(observer); + return () => { + removeFromArray(this.updateObservers, observer); + }; + } + + searchText(text?: string) { + if (!this.isDesktop) { + return; + } + this.lastSearchedText = text; + this.searchHandler && this.searchHandler(text); + } + + redoSearch() { + if (this.lastSearchedText) { + this.searchText(this.lastSearchedText); + } + } + + // Pass null to cancel search + desktop_setSearchHandler(handler: (text?: string) => void) { + this.searchHandler = handler; + } + + desktop_windowGainedFocus() { + this.$rootScope.$broadcast('window-gained-focus'); + } + + desktop_windowLostFocus() { + this.$rootScope.$broadcast('window-lost-focus'); + } + + async desktop_onComponentInstallationComplete( + componentData: any, + error: any + ) { + const component = this.application!.findItem(componentData.uuid); + if (!component) { + return; + } + const updatedComponent = await this.application!.changeAndSaveItem( + component.uuid, + (m) => { + const mutator = m as ComponentMutator; + if (error) { + mutator.setAppDataItem( + AppDataField.ComponentInstallError, + error + ); + } else { + mutator.local_url = componentData.content.local_url; + mutator.package_info = componentData.content.package_info; + mutator.setAppDataItem( + AppDataField.ComponentInstallError, + undefined + ); + } + }) + + this.$timeout(() => { + for (const observer of this.updateObservers) { + observer.callback(updatedComponent as SNComponent); + } + }); + } + + desktop_registerComponentActivationObserver(callback: ComponentActivationCallback) { + const observer = { id: `${Math.random}`, callback: callback }; + this.componentActivationObservers.push(observer); + return observer; + } + + desktop_deregisterComponentActivationObserver(observer: ComponentActivationObserver) { + removeFromArray(this.componentActivationObservers, observer); + } + + /* Notify observers that a component has been registered/activated */ + async notifyComponentActivation(component: SNComponent) { + const serializedComponent = await this.convertComponentForTransmission( + component + ); + this.$timeout(() => { + for (const observer of this.componentActivationObservers) { + observer.callback(serializedComponent); + } + }); + } + + /* Used to resolve 'sn://' */ + desktop_setExtServerHost(host: string) { + this.extServerHost = host; + this.webApplication.getAppState().desktopExtensionsReady(); + } + + desktop_setComponentInstallationSyncHandler(handler: (payloads: PurePayload[]) => void) { + this.installationSyncHandler = handler; + } + + desktop_setInstallComponentHandler(handler: (payload: PurePayload) => void) { + this.installComponentHandler = handler; + } + + desktop_setInitialDataLoadHandler(handler: () => void) { + this.dataLoadHandler = handler; + if (this.dataLoaded) { + this.dataLoadHandler(); + } + } + + async desktop_requestBackupFile(callback: (data: any) => void) { + const data = await this.application!.createBackupFile( + undefined, + undefined, + true + ); + callback(data); + } + + desktop_setMajorDataChangeHandler(handler: () => void) { + this.majorDataChangeHandler = handler; + } + + desktop_didBeginBackup() { + this.webApplication.getAppState().beganBackupDownload(); + } + + desktop_didFinishBackup(success: boolean) { + this.webApplication.getAppState().endedBackupDownload(success); + } +} diff --git a/app/assets/javascripts/services/httpManager.js b/app/assets/javascripts/services/httpManager.js deleted file mode 100644 index 8d47d0141..000000000 --- a/app/assets/javascripts/services/httpManager.js +++ /dev/null @@ -1,13 +0,0 @@ -import { SFHttpManager } from 'snjs'; - -export class HttpManager extends SFHttpManager { - /* @ngInject */ - constructor(storageManager, $timeout) { - // calling callbacks in a $timeout allows UI to update - super($timeout); - - this.setJWTRequestHandler(async () => { - return storageManager.getItem('jwt'); - }); - } -} diff --git a/app/assets/javascripts/services/index.js b/app/assets/javascripts/services/index.js deleted file mode 100644 index 1abc49619..000000000 --- a/app/assets/javascripts/services/index.js +++ /dev/null @@ -1,21 +0,0 @@ -export { ActionsManager } from './actionsManager'; -export { ArchiveManager } from './archiveManager'; -export { AuthManager } from './authManager'; -export { ComponentManager } from './componentManager'; -export { DBManager } from './dbManager'; -export { DesktopManager } from './desktopManager'; -export { HttpManager } from './httpManager'; -export { KeyboardManager } from './keyboardManager'; -export { MigrationManager } from './migrationManager'; -export { ModelManager } from './modelManager'; -export { NativeExtManager } from './nativeExtManager'; -export { PasscodeManager } from './passcodeManager'; -export { PrivilegesManager } from './privilegesManager'; -export { SessionHistory } from './sessionHistory'; -export { SingletonManager } from './singletonManager'; -export { StatusManager } from './statusManager'; -export { StorageManager } from './storageManager'; -export { SyncManager } from './syncManager'; -export { ThemeManager } from './themeManager'; -export { AlertManager } from './alertManager'; -export { PreferencesManager } from './preferencesManager'; diff --git a/app/assets/javascripts/services/index.ts b/app/assets/javascripts/services/index.ts new file mode 100644 index 000000000..3de0713bf --- /dev/null +++ b/app/assets/javascripts/services/index.ts @@ -0,0 +1,9 @@ +export { AlertService } from './alertService'; +export { ArchiveManager } from './archiveManager'; +export { DesktopManager } from './desktopManager'; +export { KeyboardManager } from './keyboardManager'; +export { LockManager } from './lockManager'; +export { NativeExtManager } from './nativeExtManager'; +export { PreferencesManager } from './preferencesManager'; +export { StatusManager } from './statusManager'; +export { ThemeManager } from './themeManager'; diff --git a/app/assets/javascripts/services/keyboardManager.js b/app/assets/javascripts/services/keyboardManager.js deleted file mode 100644 index 38d98cd79..000000000 --- a/app/assets/javascripts/services/keyboardManager.js +++ /dev/null @@ -1,115 +0,0 @@ -export class KeyboardManager { - - constructor() { - this.observers = []; - - KeyboardManager.KeyTab = "Tab"; - KeyboardManager.KeyBackspace = "Backspace"; - KeyboardManager.KeyUp = "ArrowUp"; - KeyboardManager.KeyDown = "ArrowDown"; - - KeyboardManager.KeyModifierShift = "Shift"; - KeyboardManager.KeyModifierCtrl = "Control"; - // ⌘ key on Mac, ⊞ key on Windows - KeyboardManager.KeyModifierMeta = "Meta"; - KeyboardManager.KeyModifierAlt = "Alt"; - - KeyboardManager.KeyEventDown = "KeyEventDown"; - KeyboardManager.KeyEventUp = "KeyEventUp"; - - KeyboardManager.AllModifiers = [ - KeyboardManager.KeyModifierShift, - KeyboardManager.KeyModifierCtrl, - KeyboardManager.KeyModifierMeta, - KeyboardManager.KeyModifierAlt - ]; - - window.addEventListener('keydown', this.handleKeyDown.bind(this)); - window.addEventListener('keyup', this.handleKeyUp.bind(this)); - } - - modifiersForEvent(event) { - const eventModifiers = KeyboardManager.AllModifiers.filter((modifier) => { - // For a modifier like ctrlKey, must check both event.ctrlKey and event.key. - // That's because on keyup, event.ctrlKey would be false, but event.key == Control would be true. - const matches = ( - ((event.ctrlKey || event.key == KeyboardManager.KeyModifierCtrl) && modifier === KeyboardManager.KeyModifierCtrl) || - ((event.metaKey || event.key == KeyboardManager.KeyModifierMeta) && modifier === KeyboardManager.KeyModifierMeta) || - ((event.altKey || event.key == KeyboardManager.KeyModifierAlt) && modifier === KeyboardManager.KeyModifierAlt) || - ((event.shiftKey || event.key == KeyboardManager.KeyModifierShift) && modifier === KeyboardManager.KeyModifierShift) - ); - - return matches; - }); - - return eventModifiers; - } - - eventMatchesKeyAndModifiers(event, key, modifiers = []) { - const eventModifiers = this.modifiersForEvent(event); - - if(eventModifiers.length != modifiers.length) { - return false; - } - - for(const modifier of modifiers) { - if(!eventModifiers.includes(modifier)) { - return false; - } - } - - // Modifers match, check key - if(!key) { - return true; - } - - // In the browser, shift + f results in key 'f', but in Electron, shift + f results in 'F' - // In our case we don't differentiate between the two. - return key.toLowerCase() == event.key.toLowerCase(); - } - - notifyObserver(event, keyEventType) { - for(const observer of this.observers) { - if(observer.element && event.target != observer.element) { - continue; - } - - if(observer.elements && !observer.elements.includes(event.target)) { - continue; - } - - if(observer.notElement && observer.notElement == event.target) { - continue; - } - - if(observer.notElementIds && observer.notElementIds.includes(event.target.id)) { - continue; - } - - if(this.eventMatchesKeyAndModifiers(event, observer.key, observer.modifiers)) { - const callback = keyEventType == KeyboardManager.KeyEventDown ? observer.onKeyDown : observer.onKeyUp; - if(callback) { - callback(event); - } - } - } - } - - handleKeyDown(event) { - this.notifyObserver(event, KeyboardManager.KeyEventDown); - } - - handleKeyUp(event) { - this.notifyObserver(event, KeyboardManager.KeyEventUp); - } - - addKeyObserver({key, modifiers, onKeyDown, onKeyUp, element, elements, notElement, notElementIds}) { - const observer = {key, modifiers, onKeyDown, onKeyUp, element, elements, notElement, notElementIds}; - this.observers.push(observer); - return observer; - } - - removeKeyObserver(observer) { - this.observers.splice(this.observers.indexOf(observer), 1); - } -} diff --git a/app/assets/javascripts/services/keyboardManager.ts b/app/assets/javascripts/services/keyboardManager.ts new file mode 100644 index 000000000..35ab89bc4 --- /dev/null +++ b/app/assets/javascripts/services/keyboardManager.ts @@ -0,0 +1,147 @@ +import { removeFromArray } from 'snjs'; +export enum KeyboardKey { + Tab = "Tab", + Backspace = "Backspace", + Up = "ArrowUp", + Down = "ArrowDown", +}; + +export enum KeyboardModifier { + Shift = "Shift", + Ctrl = "Control", + /** ⌘ key on Mac, ⊞ key on Windows */ + Meta = "Meta", + Alt = "Alt", +}; + +enum KeyboardKeyEvent { + Down = "KeyEventDown", + Up = "KeyEventUp" +}; + +type KeyboardObserver = { + key?: KeyboardKey | string + modifiers?: KeyboardModifier[] + onKeyDown?: (event: KeyboardEvent) => void + onKeyUp?: (event: KeyboardEvent) => void + element?: HTMLElement + elements?: HTMLElement[] + notElement?: HTMLElement + notElementIds?: string[] +} + +export class KeyboardManager { + + private observers: KeyboardObserver[] = [] + private handleKeyDown: any + private handleKeyUp: any + + constructor() { + this.handleKeyDown = (event: KeyboardEvent) => { + this.notifyObserver(event, KeyboardKeyEvent.Down); + } + this.handleKeyUp = (event: KeyboardEvent) => { + this.notifyObserver(event, KeyboardKeyEvent.Up); + } + window.addEventListener('keydown', this.handleKeyDown); + window.addEventListener('keyup', this.handleKeyUp); + } + + public deinit() { + this.observers.length = 0; + window.removeEventListener('keydown', this.handleKeyDown); + window.removeEventListener('keyup', this.handleKeyUp); + this.handleKeyDown = undefined; + this.handleKeyUp = undefined; + } + + modifiersForEvent(event: KeyboardEvent) { + const allModifiers = Object.values(KeyboardModifier); + const eventModifiers = allModifiers.filter((modifier) => { + // For a modifier like ctrlKey, must check both event.ctrlKey and event.key. + // That's because on keyup, event.ctrlKey would be false, but event.key == Control would be true. + const matches = ( + ( + (event.ctrlKey || event.key === KeyboardModifier.Ctrl) + && modifier === KeyboardModifier.Ctrl + ) || + ( + (event.metaKey || event.key === KeyboardModifier.Meta) + && modifier === KeyboardModifier.Meta + ) || + ( + (event.altKey || event.key === KeyboardModifier.Alt) + && modifier === KeyboardModifier.Alt + ) || + ( + (event.shiftKey || event.key === KeyboardModifier.Shift) + && modifier === KeyboardModifier.Shift + ) + ); + + return matches; + }); + + return eventModifiers; + } + + eventMatchesKeyAndModifiers( + event: KeyboardEvent, + key: KeyboardKey | string, + modifiers: KeyboardModifier[] = [] + ) { + const eventModifiers = this.modifiersForEvent(event); + if (eventModifiers.length !== modifiers.length) { + return false; + } + for (const modifier of modifiers) { + if (!eventModifiers.includes(modifier)) { + return false; + } + } + // Modifers match, check key + if (!key) { + return true; + } + // In the browser, shift + f results in key 'f', but in Electron, shift + f results in 'F' + // In our case we don't differentiate between the two. + return key.toLowerCase() === event.key.toLowerCase(); + } + + notifyObserver(event: KeyboardEvent, keyEvent: KeyboardKeyEvent) { + const target = event.target as HTMLElement; + for (const observer of this.observers) { + if (observer.element && event.target !== observer.element) { + continue; + } + + if (observer.elements && !observer.elements.includes(target)) { + continue; + } + + if (observer.notElement && observer.notElement === event.target) { + continue; + } + + if (observer.notElementIds && observer.notElementIds.includes(target.id)) { + continue; + } + + if (this.eventMatchesKeyAndModifiers(event, observer.key!, observer.modifiers)) { + const callback = keyEvent === KeyboardKeyEvent.Down + ? observer.onKeyDown + : observer.onKeyUp; + if (callback) { + callback(event); + } + } + } + } + + addKeyObserver(observer: KeyboardObserver) { + this.observers.push(observer); + return () => { + removeFromArray(this.observers, observer); + }; + } +} diff --git a/app/assets/javascripts/services/lockManager.ts b/app/assets/javascripts/services/lockManager.ts new file mode 100644 index 000000000..19208f563 --- /dev/null +++ b/app/assets/javascripts/services/lockManager.ts @@ -0,0 +1,157 @@ +import { WebApplication } from '@/ui_models/application'; +import { isDesktopApplication } from '@/utils'; +import { AppStateEvent } from '@/ui_models/app_state'; + +const MILLISECONDS_PER_SECOND = 1000; +const FOCUS_POLL_INTERVAL = 1 * MILLISECONDS_PER_SECOND; +const LOCK_INTERVAL_NONE = 0; +const LOCK_INTERVAL_IMMEDIATE = 1; +const LOCK_INTERVAL_ONE_MINUTE = 60 * MILLISECONDS_PER_SECOND; +const LOCK_INTERVAL_FIVE_MINUTES = 300 * MILLISECONDS_PER_SECOND; +const LOCK_INTERVAL_ONE_HOUR = 3600 * MILLISECONDS_PER_SECOND; + +const STORAGE_KEY_AUTOLOCK_INTERVAL = "AutoLockIntervalKey"; + +export class LockManager { + + private application: WebApplication + private unsubState: any + private pollFocusInterval: any + private lastFocusState?: 'hidden' | 'visible' + private lockAfterDate?: Date + private lockTimeout?: any + + constructor(application: WebApplication) { + this.application = application; + setImmediate(() => { + this.observeVisibility(); + }); + } + + observeVisibility() { + this.unsubState = this.application.getAppState().addObserver( + async (eventName) => { + if (eventName === AppStateEvent.WindowDidBlur) { + this.documentVisibilityChanged(false); + } else if (eventName === AppStateEvent.WindowDidFocus) { + this.documentVisibilityChanged(true); + } + } + ); + if (!isDesktopApplication()) { + this.beginWebFocusPolling(); + } + } + + deinit() { + this.unsubState(); + if (this.pollFocusInterval) { + clearInterval(this.pollFocusInterval); + } + } + + async setAutoLockInterval(interval: number) { + return this.application!.setValue( + STORAGE_KEY_AUTOLOCK_INTERVAL, + interval + ); + } + + async getAutoLockInterval() { + const interval = await this.application!.getValue( + STORAGE_KEY_AUTOLOCK_INTERVAL + ); + if (interval) { + return interval; + } else { + return LOCK_INTERVAL_NONE; + } + } + + /** + * Verify document is in focus every so often as visibilitychange event is + * not triggered on a typical window blur event but rather on tab changes. + */ + beginWebFocusPolling() { + this.pollFocusInterval = setInterval(() => { + const hasFocus = document.hasFocus(); + if (hasFocus && this.lastFocusState === 'hidden') { + this.documentVisibilityChanged(true); + } else if (!hasFocus && this.lastFocusState === 'visible') { + this.documentVisibilityChanged(false); + } + /* Save this to compare against next time around */ + this.lastFocusState = hasFocus ? 'visible' : 'hidden'; + }, FOCUS_POLL_INTERVAL); + } + + getAutoLockIntervalOptions() { + return [ + { + value: LOCK_INTERVAL_NONE, + label: "Off" + }, + { + value: LOCK_INTERVAL_IMMEDIATE, + label: "Immediately" + }, + { + value: LOCK_INTERVAL_ONE_MINUTE, + label: "1m" + }, + { + value: LOCK_INTERVAL_FIVE_MINUTES, + label: "5m" + }, + { + value: LOCK_INTERVAL_ONE_HOUR, + label: "1h" + } + ]; + } + + async documentVisibilityChanged(visible: boolean) { + if (visible) { + const locked = await this.application.isLocked(); + if ( + !locked && + this.lockAfterDate && + new Date() > this.lockAfterDate + ) { + this.application.lock(); + } + this.cancelAutoLockTimer(); + } else { + this.beginAutoLockTimer(); + } + } + + async beginAutoLockTimer() { + var interval = await this.getAutoLockInterval(); + if (interval === LOCK_INTERVAL_NONE) { + return; + } + /** + * Use a timeout if possible, but if the computer is put to sleep, timeouts won't + * work. Need to set a date as backup. this.lockAfterDate does not need to be + * persisted, as living in memory is sufficient. If memory is cleared, then the + * application will lock anyway. + */ + const addToNow = (seconds: number) => { + const date = new Date(); + date.setSeconds(date.getSeconds() + seconds); + return date; + }; + this.lockAfterDate = addToNow(interval / MILLISECONDS_PER_SECOND); + this.lockTimeout = setTimeout(() => { + this.cancelAutoLockTimer(); + this.application.lock(); + this.lockAfterDate = undefined; + }, interval); + } + + cancelAutoLockTimer() { + clearTimeout(this.lockTimeout); + this.lockAfterDate = undefined; + } +} diff --git a/app/assets/javascripts/services/migrationManager.js b/app/assets/javascripts/services/migrationManager.js deleted file mode 100644 index c605f16a2..000000000 --- a/app/assets/javascripts/services/migrationManager.js +++ /dev/null @@ -1,172 +0,0 @@ -import { isDesktopApplication } from '@/utils'; -import { SFMigrationManager } from 'snjs'; -import { ComponentManager } from '@/services/componentManager'; - -export class MigrationManager extends SFMigrationManager { - - /* @ngInject */ - constructor( - modelManager, - syncManager, - componentManager, - storageManager, - statusManager, - authManager, - desktopManager - ) { - super(modelManager, syncManager, storageManager, authManager); - this.componentManager = componentManager; - this.statusManager = statusManager; - this.desktopManager = desktopManager; - } - - registeredMigrations() { - return [ - this.editorToComponentMigration(), - this.componentUrlToHostedUrl(), - this.removeTagReferencesFromNotes() - ]; - } - - /* - Migrate SN|Editor to SN|Component. Editors are deprecated as of November 2017. Editors using old APIs must - convert to using the new component API. - */ - - editorToComponentMigration() { - return { - name: "editor-to-component", - content_type: "SN|Editor", - handler: async (editors) => { - // Convert editors to components - for(var editor of editors) { - // If there's already a component for this url, then skip this editor - if(editor.url && !this.componentManager.componentForUrl(editor.url)) { - var component = this.modelManager.createItem({ - content_type: "SN|Component", - content: { - url: editor.url, - name: editor.name, - area: "editor-editor" - } - }); - component.setAppDataItem("data", editor.data); - this.modelManager.addItem(component); - this.modelManager.setItemDirty(component, true); - } - } - - for(const editor of editors) { - this.modelManager.setItemToBeDeleted(editor); - } - - this.syncManager.sync(); - } - }; - } - - /* - Migrate component.url fields to component.hosted_url. This involves rewriting any note data that relied on the - component.url value to store clientData, such as the CodeEditor, which stores the programming language for the note - in the note's clientData[component.url]. We want to rewrite any matching items to transfer that clientData into - clientData[component.uuid]. - - April 3, 2019 note: it seems this migration is mis-named. The first part of the description doesn't match what the code is actually doing. - It has nothing to do with url/hosted_url relationship and more to do with just mapping client data from the note's hosted_url to its uuid - - Created: July 6, 2018 - */ - componentUrlToHostedUrl() { - return { - name: "component-url-to-hosted-url", - content_type: "SN|Component", - handler: async (components) => { - let hasChanges = false; - const notes = this.modelManager.validItemsForContentType("Note"); - for(const note of notes) { - for(const component of components) { - const clientData = note.getDomainDataItem(component.hosted_url, ComponentManager.ClientDataDomain); - if(clientData) { - note.setDomainDataItem(component.uuid, clientData, ComponentManager.ClientDataDomain); - note.setDomainDataItem(component.hosted_url, null, ComponentManager.ClientDataDomain); - this.modelManager.setItemDirty(note, true); - hasChanges = true; - } - } - } - - if(hasChanges) { - this.syncManager.sync(); - } - } - }; - } - - - - /* - Migrate notes which have relationships on tags to migrate those relationships to the tags themselves. - That is, notes.content.references should not include any mention of tags. - This will apply to notes created before the schema change. Now, only tags reference notes. - Created: April 3, 2019 - */ - removeTagReferencesFromNotes() { - return { - name: "remove-tag-references-from-notes", - content_type: "Note", - handler: async (notes) => { - - const needsSync = false; - let status = this.statusManager.addStatusFromString("Optimizing data..."); - let dirtyCount = 0; - - for(const note of notes) { - if(!note.content) { - continue; - } - - const references = note.content.references; - // Remove any tag references, and transfer them to the tag if neccessary. - const newReferences = []; - - for(const reference of references) { - if(reference.content_type != "Tag") { - newReferences.push(reference); - continue; - } - - // is Tag content_type, we will not be adding this to newReferences - const tag = this.modelManager.findItem(reference.uuid); - if(tag && !tag.hasRelationshipWithItem(note)) { - tag.addItemAsRelationship(note); - this.modelManager.setItemDirty(tag, true); - dirtyCount++; - } - } - - if(newReferences.length != references.length) { - note.content.references = newReferences; - this.modelManager.setItemDirty(note, true); - dirtyCount++; - } - } - - if(dirtyCount > 0) { - if(isDesktopApplication()) { - this.desktopManager.saveBackup(); - } - - status = this.statusManager.replaceStatusWithString(status, `${dirtyCount} items optimized.`); - await this.syncManager.sync(); - - status = this.statusManager.replaceStatusWithString(status, `Optimization complete.`); - setTimeout(() => { - this.statusManager.removeStatus(status); - }, 2000); - } else { - this.statusManager.removeStatus(status); - } - } - }; - } -} diff --git a/app/assets/javascripts/services/modelManager.js b/app/assets/javascripts/services/modelManager.js deleted file mode 100644 index d4e35b850..000000000 --- a/app/assets/javascripts/services/modelManager.js +++ /dev/null @@ -1,170 +0,0 @@ -import _ from 'lodash'; -import { SFModelManager, SNSmartTag, SFPredicate } from 'snjs'; - -export class ModelManager extends SFModelManager { - /* @ngInject */ - constructor(storageManager, $timeout) { - super($timeout); - this.notes = []; - this.tags = []; - this.components = []; - - this.storageManager = storageManager; - - this.buildSystemSmartTags(); - } - - handleSignout() { - super.handleSignout(); - this.notes.length = 0; - this.tags.length = 0; - this.components.length = 0; - } - - noteCount() { - return this.notes.filter((n) => !n.dummy).length; - } - - removeAllItemsFromMemory() { - for(var item of this.items) { - item.deleted = true; - } - this.notifySyncObserversOfModels(this.items); - this.handleSignout(); - } - - findTag(title) { - return _.find(this.tags, { title: title }); - } - - findOrCreateTagByTitle(title) { - let tag = this.findTag(title); - if(!tag) { - tag = this.createItem({content_type: "Tag", content: {title: title}}); - this.addItem(tag); - this.setItemDirty(tag, true); - } - return tag; - } - - addItems(items, globalOnly = false) { - super.addItems(items, globalOnly); - - items.forEach((item) => { - // In some cases, you just want to add the item to this.items, and not to the individual arrays - // This applies when you want to keep an item syncable, but not display it via the individual arrays - if(!globalOnly) { - if(item.content_type == "Tag") { - if(!_.find(this.tags, {uuid: item.uuid})) { - this.tags.splice(_.sortedIndexBy(this.tags, item, function(item){ - if (item.title) return item.title.toLowerCase(); - else return ''; - }), 0, item); - } - } else if(item.content_type == "Note") { - if(!_.find(this.notes, {uuid: item.uuid})) { - this.notes.unshift(item); - } - } else if(item.content_type == "SN|Component") { - if(!_.find(this.components, {uuid: item.uuid})) { - this.components.unshift(item); - } - } - } - }); - } - - resortTag(tag) { - _.pull(this.tags, tag); - this.tags.splice(_.sortedIndexBy(this.tags, tag, function(tag){ - if (tag.title) return tag.title.toLowerCase(); - else return ''; - }), 0, tag); - } - - setItemToBeDeleted(item) { - super.setItemToBeDeleted(item); - - // remove from relevant array, but don't remove from all items. - // This way, it's removed from the display, but still synced via get dirty items - this.removeItemFromRespectiveArray(item); - } - - removeItemLocally(item, callback) { - super.removeItemLocally(item, callback); - this.removeItemFromRespectiveArray(item); - this.storageManager.deleteModel(item).then(callback); - } - - removeItemFromRespectiveArray(item) { - if(item.content_type == "Tag") { - _.remove(this.tags, {uuid: item.uuid}); - } else if(item.content_type == "Note") { - _.remove(this.notes, {uuid: item.uuid}); - } else if(item.content_type == "SN|Component") { - _.remove(this.components, {uuid: item.uuid}); - } - } - - notesMatchingSmartTag(tag) { - const contentTypePredicate = new SFPredicate("content_type", "=", "Note"); - const predicates = [contentTypePredicate, tag.content.predicate]; - if(!tag.content.isTrashTag) { - const notTrashedPredicate = new SFPredicate("content.trashed", "=", false); - predicates.push(notTrashedPredicate); - } - const results = this.itemsMatchingPredicates(predicates); - return results; - } - - trashSmartTag() { - return this.systemSmartTags.find((tag) => tag.content.isTrashTag); - } - - trashedItems() { - return this.notesMatchingSmartTag(this.trashSmartTag()); - } - - emptyTrash() { - const notes = this.trashedItems(); - for(const note of notes) { - this.setItemToBeDeleted(note); - } - } - - buildSystemSmartTags() { - this.systemSmartTags = SNSmartTag.systemSmartTags(); - } - - getSmartTagWithId(id) { - return this.getSmartTags().find((candidate) => candidate.uuid == id); - } - - getSmartTags() { - const userTags = this.validItemsForContentType("SN|SmartTag").sort((a, b) => { - return a.content.title < b.content.title ? -1 : 1; - }); - return this.systemSmartTags.concat(userTags); - } - - /* - Misc - */ - - humanReadableDisplayForContentType(contentType) { - return { - "Note" : "note", - "Tag" : "tag", - "SN|SmartTag": "smart tag", - "Extension" : "action-based extension", - "SN|Component" : "component", - "SN|Editor" : "editor", - "SN|Theme" : "theme", - "SF|Extension" : "server extension", - "SF|MFA" : "two-factor authentication setting", - "SN|FileSafe|Credentials": "FileSafe credential", - "SN|FileSafe|FileMetadata": "FileSafe file", - "SN|FileSafe|Integration": "FileSafe integration" - }[contentType]; - } -} diff --git a/app/assets/javascripts/services/nativeExtManager.js b/app/assets/javascripts/services/nativeExtManager.js deleted file mode 100644 index d6633d69d..000000000 --- a/app/assets/javascripts/services/nativeExtManager.js +++ /dev/null @@ -1,183 +0,0 @@ -/* A class for handling installation of system extensions */ - -import { isDesktopApplication } from '@/utils'; -import { SFPredicate } from 'snjs'; - -export class NativeExtManager { - /* @ngInject */ - constructor(modelManager, syncManager, singletonManager) { - this.modelManager = modelManager; - this.syncManager = syncManager; - this.singletonManager = singletonManager; - - this.extManagerId = "org.standardnotes.extensions-manager"; - this.batchManagerId = "org.standardnotes.batch-manager"; - this.systemExtensions = []; - - this.resolveExtensionsManager(); - this.resolveBatchManager(); - } - - isSystemExtension(extension) { - return this.systemExtensions.includes(extension.uuid); - } - - resolveExtensionsManager() { - - const contentTypePredicate = new SFPredicate("content_type", "=", "SN|Component"); - const packagePredicate = new SFPredicate("package_info.identifier", "=", this.extManagerId); - - this.singletonManager.registerSingleton([contentTypePredicate, packagePredicate], (resolvedSingleton) => { - // Resolved Singleton - this.systemExtensions.push(resolvedSingleton.uuid); - - var needsSync = false; - if(isDesktopApplication()) { - if(!resolvedSingleton.local_url) { - resolvedSingleton.local_url = window._extensions_manager_location; - needsSync = true; - } - } else { - if(!resolvedSingleton.hosted_url) { - resolvedSingleton.hosted_url = window._extensions_manager_location; - needsSync = true; - } - } - - // Handle addition of SN|ExtensionRepo permission - const permission = resolvedSingleton.content.permissions.find((p) => p.name == "stream-items"); - if(!permission.content_types.includes("SN|ExtensionRepo")) { - permission.content_types.push("SN|ExtensionRepo"); - needsSync = true; - } - - if(needsSync) { - this.modelManager.setItemDirty(resolvedSingleton, true); - this.syncManager.sync(); - } - }, (valueCallback) => { - // Safe to create. Create and return object. - const url = window._extensions_manager_location; - if(!url) { - console.error("window._extensions_manager_location must be set."); - return; - } - - const packageInfo = { - name: "Extensions", - identifier: this.extManagerId - }; - - var item = { - content_type: "SN|Component", - content: { - name: packageInfo.name, - area: "rooms", - package_info: packageInfo, - permissions: [ - { - name: "stream-items", - content_types: [ - "SN|Component", "SN|Theme", "SF|Extension", - "Extension", "SF|MFA", "SN|Editor", "SN|ExtensionRepo" - ] - } - ] - } - }; - - if(isDesktopApplication()) { - item.content.local_url = window._extensions_manager_location; - } else { - item.content.hosted_url = window._extensions_manager_location; - } - - var component = this.modelManager.createItem(item); - this.modelManager.addItem(component); - - this.modelManager.setItemDirty(component, true); - this.syncManager.sync(); - - this.systemExtensions.push(component.uuid); - - valueCallback(component); - }); - } - - resolveBatchManager() { - - const contentTypePredicate = new SFPredicate("content_type", "=", "SN|Component"); - const packagePredicate = new SFPredicate("package_info.identifier", "=", this.batchManagerId); - - this.singletonManager.registerSingleton([contentTypePredicate, packagePredicate], (resolvedSingleton) => { - // Resolved Singleton - this.systemExtensions.push(resolvedSingleton.uuid); - - var needsSync = false; - if(isDesktopApplication()) { - if(!resolvedSingleton.local_url) { - resolvedSingleton.local_url = window._batch_manager_location; - needsSync = true; - } - } else { - if(!resolvedSingleton.hosted_url) { - resolvedSingleton.hosted_url = window._batch_manager_location; - needsSync = true; - } - } - - if(needsSync) { - this.modelManager.setItemDirty(resolvedSingleton, true); - this.syncManager.sync(); - } - }, (valueCallback) => { - // Safe to create. Create and return object. - const url = window._batch_manager_location; - if(!url) { - console.error("window._batch_manager_location must be set."); - return; - } - - const packageInfo = { - name: "Batch Manager", - identifier: this.batchManagerId - }; - - var item = { - content_type: "SN|Component", - content: { - name: packageInfo.name, - area: "modal", - package_info: packageInfo, - permissions: [ - { - name: "stream-items", - content_types: [ - "Note", "Tag", "SN|SmartTag", - "SN|Component", "SN|Theme", "SN|UserPreferences", - "SF|Extension", "Extension", "SF|MFA", "SN|Editor", - "SN|FileSafe|Credentials", "SN|FileSafe|FileMetadata", "SN|FileSafe|Integration" - ] - } - ] - } - }; - - if(isDesktopApplication()) { - item.content.local_url = window._batch_manager_location; - } else { - item.content.hosted_url = window._batch_manager_location; - } - - var component = this.modelManager.createItem(item); - this.modelManager.addItem(component); - - this.modelManager.setItemDirty(component, true); - this.syncManager.sync(); - - this.systemExtensions.push(component.uuid); - - valueCallback(component); - }); - } -} diff --git a/app/assets/javascripts/services/nativeExtManager.ts b/app/assets/javascripts/services/nativeExtManager.ts new file mode 100644 index 000000000..86156c40d --- /dev/null +++ b/app/assets/javascripts/services/nativeExtManager.ts @@ -0,0 +1,206 @@ +import { isDesktopApplication } from '@/utils'; +import { + SNPredicate, + ContentType, + SNComponent, + ApplicationService, + ComponentAction, + FillItemContent, + ComponentMutator, + Copy, + dictToArray +} from 'snjs'; +import { PayloadContent } from '@node_modules/snjs/dist/@types/protocol/payloads/generator'; +import { ComponentPermission } from '@node_modules/snjs/dist/@types/models/app/component'; + +/** A class for handling installation of system extensions */ +export class NativeExtManager extends ApplicationService { + extManagerId = 'org.standardnotes.extensions-manager'; + batchManagerId = 'org.standardnotes.batch-manager'; + + /** @override */ + async onAppLaunch() { + super.onAppLaunch(); + this.reload(); + } + + get extManagerPred() { + const extManagerId = 'org.standardnotes.extensions-manager'; + return SNPredicate.CompoundPredicate([ + new SNPredicate('content_type', '=', ContentType.Component), + new SNPredicate('package_info.identifier', '=', extManagerId) + ]); + } + + get batchManagerPred() { + const batchMgrId = 'org.standardnotes.batch-manager'; + return SNPredicate.CompoundPredicate([ + new SNPredicate('content_type', '=', ContentType.Component), + new SNPredicate('package_info.identifier', '=', batchMgrId) + ]); + } + + get extMgrUrl() { + return (window as any)._extensions_manager_location; + } + + get batchMgrUrl() { + return (window as any)._batch_manager_location; + } + + reload() { + this.application!.singletonManager!.registerPredicate(this.extManagerPred); + this.application!.singletonManager!.registerPredicate(this.batchManagerPred); + this.resolveExtensionsManager(); + this.resolveBatchManager(); + } + + async resolveExtensionsManager() { + const extensionsManager = (await this.application!.singletonManager!.findOrCreateSingleton( + this.extManagerPred, + ContentType.Component, + this.extensionsManagerTemplateContent() + )) as SNComponent; + let needsSync = false; + if (isDesktopApplication()) { + if (!extensionsManager.local_url) { + await this.application!.changeItem(extensionsManager.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.local_url = this.extMgrUrl; + }); + needsSync = true; + } + } else { + if (!extensionsManager.hosted_url) { + await this.application!.changeItem(extensionsManager.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.hosted_url = this.extMgrUrl; + }); + needsSync = true; + } + } + // Handle addition of SN|ExtensionRepo permission + const permissions = Copy(extensionsManager!.permissions) as ComponentPermission[]; + const permission = permissions.find((p) => { + return p.name === ComponentAction.StreamItems + }); + if (permission && !permission.content_types!.includes(ContentType.ExtensionRepo)) { + permission.content_types!.push(ContentType.ExtensionRepo); + await this.application!.changeItem(extensionsManager.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.permissions = permissions; + }); + needsSync = true; + } + if (needsSync) { + this.application!.saveItem(extensionsManager.uuid); + } + } + + extensionsManagerTemplateContent() { + const url = this.extMgrUrl; + if (!url) { + throw Error('this.extMgrUrl must be set.'); + } + const packageInfo = { + name: 'Extensions', + identifier: this.extManagerId + }; + const content = FillItemContent({ + name: packageInfo.name, + area: 'rooms', + package_info: packageInfo, + permissions: [ + { + name: ComponentAction.StreamItems, + content_types: [ + ContentType.Component, + ContentType.Theme, + ContentType.ServerExtension, + ContentType.ActionsExtension, + ContentType.Mfa, + ContentType.Editor, + ContentType.ExtensionRepo + ] + } + ] + }) as PayloadContent; + if (isDesktopApplication()) { + content.local_url = this.extMgrUrl; + } else { + content.hosted_url = this.extMgrUrl; + } + return content; + } + + async resolveBatchManager() { + const batchManager = (await this.application!.singletonManager!.findOrCreateSingleton( + this.batchManagerPred, + ContentType.Component, + this.batchManagerTemplateContent() + )) as SNComponent; + let needsSync = false; + if (isDesktopApplication()) { + if (!batchManager.local_url) { + await this.application!.changeItem(batchManager.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.local_url = this.batchMgrUrl; + }); + needsSync = true; + } + } else { + if (!batchManager.hosted_url) { + await this.application!.changeItem(batchManager.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.hosted_url = this.batchMgrUrl; + }); + needsSync = true; + } + } + // Handle addition of SN|ExtensionRepo permission + const permissions = Copy(batchManager!.permissions) as ComponentPermission[]; + const permission = permissions.find((p) => { + return p.name === ComponentAction.StreamItems + }); + if (permission && !permission.content_types!.includes(ContentType.ExtensionRepo)) { + permission.content_types!.push(ContentType.ExtensionRepo); + await this.application!.changeItem(batchManager.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.permissions = permissions; + }); + needsSync = true; + } + if (needsSync) { + this.application!.saveItem(batchManager.uuid); + } + } + + batchManagerTemplateContent() { + const url = this.batchMgrUrl; + if (!url) { + throw Error('window._batch_manager_location must be set.'); + } + const packageInfo = { + name: 'Batch Manager', + identifier: this.batchManagerId + }; + const allContentType = dictToArray(ContentType); + const content = FillItemContent({ + name: packageInfo.name, + area: 'modal', + package_info: packageInfo, + permissions: [ + { + name: ComponentAction.StreamItems, + content_types: allContentType + } + ] + }); + if (isDesktopApplication()) { + content.local_url = this.batchMgrUrl; + } else { + content.hosted_url = this.batchMgrUrl; + } + return content; + } +} diff --git a/app/assets/javascripts/services/passcodeManager.js b/app/assets/javascripts/services/passcodeManager.js deleted file mode 100644 index 07dc39fa0..000000000 --- a/app/assets/javascripts/services/passcodeManager.js +++ /dev/null @@ -1,285 +0,0 @@ -import _ from 'lodash'; -import { isDesktopApplication } from '@/utils'; -import { StorageManager } from './storageManager'; -import { protocolManager } from 'snjs'; - -const MillisecondsPerSecond = 1000; - -export class PasscodeManager { - /* @ngInject */ - constructor($rootScope, authManager, storageManager, syncManager) { - this.authManager = authManager; - this.storageManager = storageManager; - this.syncManager = syncManager; - this.$rootScope = $rootScope; - - this._hasPasscode = this.storageManager.getItemSync("offlineParams", StorageManager.Fixed) != null; - this._locked = this._hasPasscode; - - this.visibilityObservers = []; - this.passcodeChangeObservers = []; - - this.configureAutoLock(); - } - - addPasscodeChangeObserver(callback) { - this.passcodeChangeObservers.push(callback); - } - - lockApplication() { - window.location.reload(); - this.cancelAutoLockTimer(); - } - - isLocked() { - return this._locked; - } - - hasPasscode() { - return this._hasPasscode; - } - - keys() { - return this._keys; - } - - addVisibilityObserver(callback) { - this.visibilityObservers.push(callback); - return callback; - } - - removeVisibilityObserver(callback) { - _.pull(this.visibilityObservers, callback); - } - - notifiyVisibilityObservers(visible) { - for(const callback of this.visibilityObservers) { - callback(visible); - } - } - - async setAutoLockInterval(interval) { - return this.storageManager.setItem(PasscodeManager.AutoLockIntervalKey, JSON.stringify(interval), StorageManager.FixedEncrypted); - } - - async getAutoLockInterval() { - const interval = await this.storageManager.getItem(PasscodeManager.AutoLockIntervalKey, StorageManager.FixedEncrypted); - if(interval) { - return JSON.parse(interval); - } else { - return PasscodeManager.AutoLockIntervalNone; - } - } - - passcodeAuthParams() { - var authParams = JSON.parse(this.storageManager.getItemSync("offlineParams", StorageManager.Fixed)); - if(authParams && !authParams.version) { - var keys = this.keys(); - if(keys && keys.ak) { - // If there's no version stored, and there's an ak, it has to be 002. Newer versions would have their version stored in authParams. - authParams.version = "002"; - } else { - authParams.version = "001"; - } - } - return authParams; - } - - async verifyPasscode(passcode) { - return new Promise(async (resolve, reject) => { - var params = this.passcodeAuthParams(); - const keys = await protocolManager.computeEncryptionKeysForUser(passcode, params); - if(keys.pw !== params.hash) { - resolve(false); - } else { - resolve(true); - } - }); - } - - unlock(passcode, callback) { - var params = this.passcodeAuthParams(); - protocolManager.computeEncryptionKeysForUser(passcode, params).then((keys) => { - if(keys.pw !== params.hash) { - callback(false); - return; - } - - this._keys = keys; - this._authParams = params; - this.decryptLocalStorage(keys, params).then(() => { - this._locked = false; - callback(true); - }); - }); - } - - setPasscode(passcode, callback) { - var uuid = protocolManager.crypto.generateUUIDSync(); - - protocolManager.generateInitialKeysAndAuthParamsForUser(uuid, passcode).then((results) => { - const keys = results.keys; - const authParams = results.authParams; - - authParams.hash = keys.pw; - this._keys = keys; - this._hasPasscode = true; - this._authParams = authParams; - - // Encrypting will initially clear localStorage - this.encryptLocalStorage(keys, authParams); - - // After it's cleared, it's safe to write to it - this.storageManager.setItem("offlineParams", JSON.stringify(authParams), StorageManager.Fixed); - callback(true); - - this.notifyObserversOfPasscodeChange(); - }); - } - - changePasscode(newPasscode, callback) { - this.setPasscode(newPasscode, callback); - } - - clearPasscode() { - this.storageManager.setItemsMode(this.authManager.isEphemeralSession() ? StorageManager.Ephemeral : StorageManager.Fixed); // Transfer from Ephemeral - this.storageManager.removeItem("offlineParams", StorageManager.Fixed); - this._keys = null; - this._hasPasscode = false; - - this.notifyObserversOfPasscodeChange(); - } - - notifyObserversOfPasscodeChange() { - for(var observer of this.passcodeChangeObservers) { - observer(); - } - } - - encryptLocalStorage(keys, authParams) { - this.storageManager.setKeys(keys, authParams); - // Switch to Ephemeral storage, wiping Fixed storage - // Last argument is `force`, which we set to true because in the case of changing passcode - this.storageManager.setItemsMode(this.authManager.isEphemeralSession() ? StorageManager.Ephemeral : StorageManager.FixedEncrypted, true); - } - - async decryptLocalStorage(keys, authParams) { - this.storageManager.setKeys(keys, authParams); - return this.storageManager.decryptStorage(); - } - - configureAutoLock() { - PasscodeManager.AutoLockPollFocusInterval = 1 * MillisecondsPerSecond; - - PasscodeManager.AutoLockIntervalNone = 0; - PasscodeManager.AutoLockIntervalImmediate = 1; - PasscodeManager.AutoLockIntervalOneMinute = 60 * MillisecondsPerSecond; - PasscodeManager.AutoLockIntervalFiveMinutes = 300 * MillisecondsPerSecond; - PasscodeManager.AutoLockIntervalOneHour = 3600 * MillisecondsPerSecond; - - PasscodeManager.AutoLockIntervalKey = "AutoLockIntervalKey"; - - if(isDesktopApplication()) { - // desktop only - this.$rootScope.$on("window-lost-focus", () => { - this.documentVisibilityChanged(false); - }); - this.$rootScope.$on("window-gained-focus", () => { - this.documentVisibilityChanged(true); - }); - } else { - // tab visibility listener, web only - document.addEventListener('visibilitychange', (e) => { - const visible = document.visibilityState === "visible"; - this.documentVisibilityChanged(visible); - }); - - // verify document is in focus every so often as visibilitychange event is not triggered - // on a typical window blur event but rather on tab changes - this.pollFocusTimeout = setInterval(() => { - const hasFocus = document.hasFocus(); - - if(hasFocus && this.lastFocusState === "hidden") { - this.documentVisibilityChanged(true); - } else if(!hasFocus && this.lastFocusState === "visible") { - this.documentVisibilityChanged(false); - } - - // save this to compare against next time around - this.lastFocusState = hasFocus ? "visible" : "hidden"; - }, PasscodeManager.AutoLockPollFocusInterval); - } - } - - getAutoLockIntervalOptions() { - return [ - { - value: PasscodeManager.AutoLockIntervalNone, - label: "Off" - }, - { - value: PasscodeManager.AutoLockIntervalImmediate, - label: "Immediately" - }, - { - value: PasscodeManager.AutoLockIntervalOneMinute, - label: "1m" - }, - { - value: PasscodeManager.AutoLockIntervalFiveMinutes, - label: "5m" - }, - { - value: PasscodeManager.AutoLockIntervalOneHour, - label: "1h" - } - ]; - } - - documentVisibilityChanged(visible) { - if(visible) { - // check to see if lockAfterDate is not null, and if the application isn't locked. - // if that's the case, it needs to be locked immediately. - if(this.lockAfterDate && new Date() > this.lockAfterDate && !this.isLocked()) { - this.lockApplication(); - } else { - if(!this.isLocked()) { - this.syncManager.sync(); - } - } - this.cancelAutoLockTimer(); - } else { - this.beginAutoLockTimer(); - } - - this.notifiyVisibilityObservers(visible); - } - - async beginAutoLockTimer() { - var interval = await this.getAutoLockInterval(); - if(interval == PasscodeManager.AutoLockIntervalNone) { - return; - } - - // Use a timeout if possible, but if the computer is put to sleep, timeouts won't work. - // Need to set a date as backup. this.lockAfterDate does not need to be persisted, as - // living in memory seems sufficient. If memory is cleared, then the application will lock anyway. - const addToNow = (seconds) => { - const date = new Date(); - date.setSeconds(date.getSeconds() + seconds); - return date; - }; - - this.lockAfterDate = addToNow(interval / MillisecondsPerSecond); - this.lockTimeout = setTimeout(() => { - this.lockApplication(); - // We don't need to look at this anymore since we've succeeded with timeout lock - this.lockAfterDate = null; - }, interval); - } - - cancelAutoLockTimer() { - clearTimeout(this.lockTimeout); - this.lockAfterDate = null; - } -} diff --git a/app/assets/javascripts/services/preferencesManager.js b/app/assets/javascripts/services/preferencesManager.js deleted file mode 100644 index 74ef7a676..000000000 --- a/app/assets/javascripts/services/preferencesManager.js +++ /dev/null @@ -1,86 +0,0 @@ -import { SFPredicate, SFItem } from 'snjs'; - -export const PREF_TAGS_PANEL_WIDTH = 'tagsPanelWidth'; -export const PREF_NOTES_PANEL_WIDTH = 'notesPanelWidth'; -export const PREF_EDITOR_WIDTH = 'editorWidth'; -export const PREF_EDITOR_LEFT = 'editorLeft'; -export const PREF_EDITOR_MONOSPACE_ENABLED = 'monospaceFont'; -export const PREF_EDITOR_SPELLCHECK = 'spellcheck'; -export const PREF_EDITOR_RESIZERS_ENABLED = 'marginResizersEnabled'; -export const PREF_SORT_NOTES_BY = 'sortBy'; -export const PREF_SORT_NOTES_REVERSE = 'sortReverse'; -export const PREF_NOTES_SHOW_ARCHIVED = 'showArchived'; -export const PREF_NOTES_HIDE_PINNED = 'hidePinned'; -export const PREF_NOTES_HIDE_NOTE_PREVIEW = 'hideNotePreview'; -export const PREF_NOTES_HIDE_DATE = 'hideDate'; -export const PREF_NOTES_HIDE_TAGS = 'hideTags'; - -export class PreferencesManager { - /* @ngInject */ - constructor( - modelManager, - singletonManager, - appState, - syncManager - ) { - this.singletonManager = singletonManager; - this.modelManager = modelManager; - this.syncManager = syncManager; - this.appState = appState; - - this.modelManager.addItemSyncObserver( - 'user-prefs', - 'SN|UserPreferences', - (allItems, validItems, deletedItems, source, sourceKey) => { - this.preferencesDidChange(); - } - ); - } - - load() { - const prefsContentType = 'SN|UserPreferences'; - const contentTypePredicate = new SFPredicate( - 'content_type', - '=', - prefsContentType - ); - this.singletonManager.registerSingleton( - [contentTypePredicate], - (resolvedSingleton) => { - this.userPreferences = resolvedSingleton; - }, - (valueCallback) => { - // Safe to create. Create and return object. - const prefs = new SFItem({content_type: prefsContentType}); - this.modelManager.addItem(prefs); - this.modelManager.setItemDirty(prefs); - this.syncManager.sync(); - valueCallback(prefs); - } - ); - } - - preferencesDidChange() { - this.appState.setUserPreferences(this.userPreferences); - } - - syncUserPreferences() { - if(this.userPreferences) { - this.modelManager.setItemDirty(this.userPreferences); - this.syncManager.sync(); - } - } - - getValue(key, defaultValue) { - if(!this.userPreferences) { return defaultValue; } - const value = this.userPreferences.getAppDataItem(key); - return (value !== undefined && value != null) ? value : defaultValue; - } - - setUserPrefValue(key, value, sync) { - this.userPreferences.setAppDataItem(key, value); - if(sync) { - this.syncUserPreferences(); - } - } -} diff --git a/app/assets/javascripts/services/preferencesManager.ts b/app/assets/javascripts/services/preferencesManager.ts new file mode 100644 index 000000000..e70b4df02 --- /dev/null +++ b/app/assets/javascripts/services/preferencesManager.ts @@ -0,0 +1,83 @@ +import { WebApplication } from '@/ui_models/application'; +import { + SNPredicate, + ContentType, + ApplicationService, + SNUserPrefs, + WebPrefKey, + UserPrefsMutator, + FillItemContent +} from 'snjs'; + +export class PreferencesManager extends ApplicationService { + + private userPreferences!: SNUserPrefs + private loadingPrefs = false; + + /** @override */ + async onAppLaunch() { + super.onAppLaunch(); + this.reloadSingleton(); + this.streamPreferences(); + } + + get webApplication() { + return this.application as WebApplication; + } + + streamPreferences() { + this.application!.streamItems( + ContentType.UserPrefs, + () => { + this.reloadSingleton(); + } + ); + } + + private async reloadSingleton() { + if(this.loadingPrefs) { + return; + } + this.loadingPrefs = true; + const contentType = ContentType.UserPrefs; + const predicate = new SNPredicate('content_type', '=', contentType); + const previousRef = this.userPreferences; + this.userPreferences = (await this.application!.singletonManager!.findOrCreateSingleton( + predicate, + contentType, + FillItemContent({}) + )) as SNUserPrefs; + this.loadingPrefs = false; + const didChange = !previousRef || ( + this.userPreferences.lastSyncBegan?.getTime() !== previousRef?.lastSyncBegan?.getTime() + ) + if (didChange) { + this.webApplication.getAppState().setUserPreferences(this.userPreferences); + } + } + + syncUserPreferences() { + if (this.userPreferences) { + this.application!.saveItem(this.userPreferences.uuid); + } + } + + getValue(key: WebPrefKey, defaultValue?: any) { + if (!this.userPreferences) { return defaultValue; } + const value = this.userPreferences.getPref(key); + return (value !== undefined && value !== null) ? value : defaultValue; + } + + async setUserPrefValue(key: WebPrefKey, value: any, sync = false) { + await this.application!.changeItem( + this.userPreferences.uuid, + (m) => { + const mutator = m as UserPrefsMutator; + mutator.setWebPref(key, value); + } + ) + if (sync) { + this.syncUserPreferences(); + } + } +} diff --git a/app/assets/javascripts/services/privilegesManager.js b/app/assets/javascripts/services/privilegesManager.js deleted file mode 100644 index 96e52d1ea..000000000 --- a/app/assets/javascripts/services/privilegesManager.js +++ /dev/null @@ -1,81 +0,0 @@ -import angular from 'angular'; -import { SFPrivilegesManager } from 'snjs'; - -export class PrivilegesManager extends SFPrivilegesManager { - - /* @ngInject */ - constructor( - passcodeManager, - authManager, - syncManager, - singletonManager, - modelManager, - storageManager, - $rootScope, - $compile - ) { - super(modelManager, syncManager, singletonManager); - - this.$rootScope = $rootScope; - this.$compile = $compile; - - this.setDelegate({ - isOffline: async () => { - return authManager.offline(); - }, - hasLocalPasscode: async () => { - return passcodeManager.hasPasscode(); - }, - saveToStorage: async (key, value) => { - return storageManager.setItem(key, value, storageManager.bestStorageMode()); - }, - getFromStorage: async (key) => { - return storageManager.getItem(key, storageManager.bestStorageMode()); - }, - verifyAccountPassword: async (password) => { - return authManager.verifyAccountPassword(password); - }, - verifyLocalPasscode: async (passcode) => { - return passcodeManager.verifyPasscode(passcode); - }, - }); - } - - async presentPrivilegesModal(action, onSuccess, onCancel) { - if (this.authenticationInProgress()) { - onCancel && onCancel(); - return; - } - - const customSuccess = async () => { - onSuccess && await onSuccess(); - this.currentAuthenticationElement = null; - }; - const customCancel = async () => { - onCancel && await onCancel(); - this.currentAuthenticationElement = null; - }; - - const scope = this.$rootScope.$new(true); - scope.action = action; - scope.onSuccess = customSuccess; - scope.onCancel = customCancel; - const el = this.$compile(` - - `)(scope); - angular.element(document.body).append(el); - - this.currentAuthenticationElement = el; - } - - presentPrivilegesManagementModal() { - var scope = this.$rootScope.$new(true); - var el = this.$compile("")(scope); - angular.element(document.body).append(el); - } - - authenticationInProgress() { - return this.currentAuthenticationElement != null; - } -} diff --git a/app/assets/javascripts/services/sessionHistory.js b/app/assets/javascripts/services/sessionHistory.js deleted file mode 100644 index a0f912cd4..000000000 --- a/app/assets/javascripts/services/sessionHistory.js +++ /dev/null @@ -1,44 +0,0 @@ -import { NoteHistoryEntry } from '@/models/noteHistoryEntry'; -import { SFSessionHistoryManager , SFItemHistory } from 'snjs'; - -export class SessionHistory extends SFSessionHistoryManager { - /* @ngInject */ - constructor( - modelManager, - storageManager, - authManager, - passcodeManager, - $timeout - ) { - SFItemHistory.HistoryEntryClassMapping = { - "Note" : NoteHistoryEntry - }; - - // Session History can be encrypted with passcode keys. If it changes, we need to resave session - // history with the new keys. - passcodeManager.addPasscodeChangeObserver(() => { - this.saveToDisk(); - }); - - var keyRequestHandler = async () => { - const offline = authManager.offline(); - const auth_params = offline ? passcodeManager.passcodeAuthParams() : await authManager.getAuthParams(); - const keys = offline ? passcodeManager.keys() : await authManager.keys(); - - return { - keys: keys, - offline: offline, - auth_params: auth_params - }; - }; - - var contentTypes = ["Note"]; - super( - modelManager, - storageManager, - keyRequestHandler, - contentTypes, - $timeout - ); - } -} diff --git a/app/assets/javascripts/services/singletonManager.js b/app/assets/javascripts/services/singletonManager.js deleted file mode 100644 index 9c7c05390..000000000 --- a/app/assets/javascripts/services/singletonManager.js +++ /dev/null @@ -1,10 +0,0 @@ -import { SFSingletonManager } from 'snjs'; - -export class SingletonManager extends SFSingletonManager { - // constructor needed for angularjs injection to work - // eslint-disable-next-line no-useless-constructor - /* @ngInject */ - constructor(modelManager, syncManager) { - super(modelManager, syncManager); - } -} diff --git a/app/assets/javascripts/services/statusManager.js b/app/assets/javascripts/services/statusManager.ts similarity index 50% rename from app/assets/javascripts/services/statusManager.js rename to app/assets/javascripts/services/statusManager.ts index dc55cf6bf..c717dc2cc 100644 --- a/app/assets/javascripts/services/statusManager.js +++ b/app/assets/javascripts/services/statusManager.ts @@ -1,46 +1,43 @@ -import _ from 'lodash'; +import { removeFromArray } from 'snjs'; +import { FooterStatus } from '@/types'; + +type StatusCallback = (string: string) => void export class StatusManager { - constructor() { - this.statuses = []; - this.observers = []; - } - statusFromString(string) { + private statuses: FooterStatus[] = [] + private observers: StatusCallback[] = [] + + statusFromString(string: string) { return {string: string}; } - replaceStatusWithString(status, string) { + replaceStatusWithString(status: FooterStatus, string: string) { this.removeStatus(status); return this.addStatusFromString(string); } - addStatusFromString(string) { + addStatusFromString(string: string) { return this.addStatus(this.statusFromString(string)); } - addStatus(status) { - if(typeof status !== "object") { - console.error("Attempting to set non-object status", status); - return; - } - + addStatus(status: FooterStatus) { this.statuses.push(status); this.notifyObservers(); return status; } - removeStatus(status) { - _.pull(this.statuses, status); + removeStatus(status: FooterStatus) { + removeFromArray(this.statuses, status); this.notifyObservers(); - return null; + return undefined; } getStatusString() { - let result = ""; + let result = ''; this.statuses.forEach((status, index) => { if(index > 0) { - result += " "; + result += ' '; } result += status.string; }); @@ -54,11 +51,10 @@ export class StatusManager { } } - addStatusObserver(callback) { + addStatusObserver(callback: StatusCallback) { this.observers.push(callback); - } - - removeStatusObserver(callback) { - _.pull(this.statuses, callback); + return () => { + removeFromArray(this.observers, callback); + } } } diff --git a/app/assets/javascripts/services/storageManager.js b/app/assets/javascripts/services/storageManager.js deleted file mode 100644 index 2dd9f7366..000000000 --- a/app/assets/javascripts/services/storageManager.js +++ /dev/null @@ -1,241 +0,0 @@ -import { protocolManager, SNEncryptedStorage, SFStorageManager , SFItemParams } from 'snjs'; - -export class MemoryStorage { - constructor() { - this.memory = {}; - } - - getItem(key) { - return this.memory[key] || null; - } - - getItemSync(key) { - return this.getItem(key); - } - - get length() { - return Object.keys(this.memory).length; - } - - setItem(key, value) { - this.memory[key] = value; - } - - removeItem(key) { - delete this.memory[key]; - } - - clear() { - this.memory = {}; - } - - keys() { - return Object.keys(this.memory); - } - - key(index) { - return Object.keys(this.memory)[index]; - } -} - -export class StorageManager extends SFStorageManager { - - /* @ngInject */ - constructor(dbManager, alertManager) { - super(); - this.dbManager = dbManager; - this.alertManager = alertManager; - } - - initialize(hasPasscode, ephemeral) { - if(hasPasscode) { - // We don't want to save anything in fixed storage except for actual item data (in IndexedDB) - this.storage = this.memoryStorage; - this.itemsStorageMode = StorageManager.FixedEncrypted; - } else if(ephemeral) { - // We don't want to save anything in fixed storage as well as IndexedDB - this.storage = this.memoryStorage; - this.itemsStorageMode = StorageManager.Ephemeral; - } else { - this.storage = localStorage; - this.itemsStorageMode = StorageManager.Fixed; - } - - this.modelStorageMode = ephemeral ? StorageManager.Ephemeral : StorageManager.Fixed; - } - - get memoryStorage() { - if(!this._memoryStorage) { - this._memoryStorage = new MemoryStorage(); - } - return this._memoryStorage; - } - - setItemsMode(mode, force) { - var newStorage = this.getVault(mode); - if(newStorage !== this.storage || mode !== this.itemsStorageMode || force) { - // transfer storages - var length = this.storage.length; - for(var i = 0; i < length; i++) { - var key = this.storage.key(i); - newStorage.setItem(key, this.storage.getItem(key)); - } - - this.itemsStorageMode = mode; - if(newStorage !== this.storage) { - // Only clear if this.storage isn't the same reference as newStorage - this.storage.clear(); - } - this.storage = newStorage; - - if(mode == StorageManager.FixedEncrypted) { - this.writeEncryptedStorageToDisk(); - } else if(mode == StorageManager.Fixed) { - // Remove encrypted storage - this.removeItem("encryptedStorage", StorageManager.Fixed); - } - } - } - - getVault(vaultKey) { - if(vaultKey) { - if(vaultKey == StorageManager.Ephemeral || vaultKey == StorageManager.FixedEncrypted) { - return this.memoryStorage; - } else { - return localStorage; - } - } else { - return this.storage; - } - } - - async setItem(key, value, vaultKey) { - var storage = this.getVault(vaultKey); - try { - storage.setItem(key, value); - } catch (e) { - console.error("Exception while trying to setItem in StorageManager:", e); - this.alertManager.alert({text: "The application's local storage is out of space. If you have Session History save-to-disk enabled, please disable it, and try again."}); - } - - if(vaultKey === StorageManager.FixedEncrypted || (!vaultKey && this.itemsStorageMode === StorageManager.FixedEncrypted)) { - return this.writeEncryptedStorageToDisk(); - } - } - - async getItem(key, vault) { - return this.getItemSync(key, vault); - } - - getItemSync(key, vault) { - var storage = this.getVault(vault); - return storage.getItem(key); - } - - async removeItem(key, vault) { - var storage = this.getVault(vault); - return storage.removeItem(key); - } - - async clear() { - this.memoryStorage.clear(); - localStorage.clear(); - } - - storageAsHash() { - var hash = {}; - var length = this.storage.length; - for(var i = 0; i < length; i++) { - var key = this.storage.key(i); - hash[key] = this.storage.getItem(key); - } - return hash; - } - - setKeys(keys, authParams) { - this.encryptedStorageKeys = keys; - this.encryptedStorageAuthParams = authParams; - } - - async writeEncryptedStorageToDisk() { - var encryptedStorage = new SNEncryptedStorage(); - // Copy over totality of current storage - encryptedStorage.content.storage = this.storageAsHash(); - - // Save new encrypted storage in Fixed storage - var params = new SFItemParams(encryptedStorage, this.encryptedStorageKeys, this.encryptedStorageAuthParams); - const syncParams = await params.paramsForSync(); - this.setItem("encryptedStorage", JSON.stringify(syncParams), StorageManager.Fixed); - } - - async decryptStorage() { - var stored = JSON.parse(this.getItemSync("encryptedStorage", StorageManager.Fixed)); - await protocolManager.decryptItem(stored, this.encryptedStorageKeys); - var encryptedStorage = new SNEncryptedStorage(stored); - - for(var key of Object.keys(encryptedStorage.content.storage)) { - this.setItem(key, encryptedStorage.storage[key]); - } - } - - hasPasscode() { - return this.getItemSync("encryptedStorage", StorageManager.Fixed) !== null; - } - - bestStorageMode() { - return this.hasPasscode() ? StorageManager.FixedEncrypted : StorageManager.Fixed; - } - - - /* - Model Storage - - If using ephemeral storage, we don't need to write it to anything as references will be held already by controllers - and the global modelManager service. - */ - - setModelStorageMode(mode) { - if(mode == this.modelStorageMode) { - return; - } - - if(mode == StorageManager.Ephemeral) { - // Clear IndexedDB - this.dbManager.clearAllModels(null); - } else { - // Fixed - } - - this.modelStorageMode = mode; - } - - async getAllModels() { - if(this.modelStorageMode == StorageManager.Fixed) { - return this.dbManager.getAllModels(); - } - } - - async saveModel(item) { - return this.saveModels([item]); - } - - async saveModels(items, onsuccess, onerror) { - if(this.modelStorageMode == StorageManager.Fixed) { - return this.dbManager.saveModels(items); - } - } - - async deleteModel(item) { - if(this.modelStorageMode == StorageManager.Fixed) { - return this.dbManager.deleteModel(item); - } - } - - async clearAllModels() { - return this.dbManager.clearAllModels(); - } -} - -StorageManager.FixedEncrypted = "FixedEncrypted"; // encrypted memoryStorage + localStorage persistence -StorageManager.Ephemeral = "Ephemeral"; // memoryStorage -StorageManager.Fixed = "Fixed"; // localStorage diff --git a/app/assets/javascripts/services/syncManager.js b/app/assets/javascripts/services/syncManager.js deleted file mode 100644 index 375f8f767..000000000 --- a/app/assets/javascripts/services/syncManager.js +++ /dev/null @@ -1,30 +0,0 @@ -import angular from 'angular'; -import { SFSyncManager } from 'snjs'; - -export class SyncManager extends SFSyncManager { - /* @ngInject */ - constructor( - modelManager, - storageManager, - httpManager, - $timeout, - $interval, - $compile, - $rootScope - ) { - super(modelManager, storageManager, httpManager, $timeout, $interval); - this.$rootScope = $rootScope; - this.$compile = $compile; - - // this.loggingEnabled = true; - } - - presentConflictResolutionModal(items, callback) { - var scope = this.$rootScope.$new(true); - scope.item1 = items[0]; - scope.item2 = items[1]; - scope.callback = callback; - var el = this.$compile( "" )(scope); - angular.element(document.body).append(el); - } -} diff --git a/app/assets/javascripts/services/themeManager.js b/app/assets/javascripts/services/themeManager.js deleted file mode 100644 index b9d38c4b2..000000000 --- a/app/assets/javascripts/services/themeManager.js +++ /dev/null @@ -1,150 +0,0 @@ -import _ from 'lodash'; -import angular from 'angular'; -import { SNTheme, SFItemParams } from 'snjs'; -import { StorageManager } from './storageManager'; -import { - APP_STATE_EVENT_DESKTOP_EXTS_READY -} from '@/state'; - -export class ThemeManager { - /* @ngInject */ - constructor( - componentManager, - desktopManager, - storageManager, - passcodeManager, - appState - ) { - this.componentManager = componentManager; - this.storageManager = storageManager; - this.desktopManager = desktopManager; - this.activeThemes = []; - - ThemeManager.CachedThemesKey = "cachedThemes"; - - this.registerObservers(); - - // When a passcode is added, all local storage will be encrypted (it doesn't know what was - // originally saved as Fixed or FixedEncrypted). We want to rewrite cached themes here to Fixed - // so that it's readable without authentication. - passcodeManager.addPasscodeChangeObserver(() => { - this.cacheThemes(); - }); - - if (desktopManager.isDesktop) { - appState.addObserver((eventName, data) => { - if (eventName === APP_STATE_EVENT_DESKTOP_EXTS_READY) { - this.activateCachedThemes(); - } - }); - } else { - this.activateCachedThemes(); - } - } - - activateCachedThemes() { - const cachedThemes = this.getCachedThemes(); - const writeToCache = false; - for (const theme of cachedThemes) { - this.activateTheme(theme, writeToCache); - } - } - - registerObservers() { - this.desktopManager.registerUpdateObserver((component) => { - // Reload theme if active - if (component.active && component.isTheme()) { - this.deactivateTheme(component); - setTimeout(() => { - this.activateTheme(component); - }, 10); - } - }); - - this.componentManager.registerHandler({ - identifier: "themeManager", - areas: ["themes"], - activationHandler: (component) => { - if (component.active) { - this.activateTheme(component); - } else { - this.deactivateTheme(component); - } - } - }); - } - - hasActiveTheme() { - return this.componentManager.getActiveThemes().length > 0; - } - - deactivateAllThemes() { - var activeThemes = this.componentManager.getActiveThemes(); - for (var theme of activeThemes) { - if (theme) { - this.componentManager.deactivateComponent(theme); - } - } - - this.decacheThemes(); - } - - activateTheme(theme, writeToCache = true) { - if (_.find(this.activeThemes, { uuid: theme.uuid })) { - return; - } - - this.activeThemes.push(theme); - - var url = this.componentManager.urlForComponent(theme); - var link = document.createElement("link"); - link.href = url; - link.type = "text/css"; - link.rel = "stylesheet"; - link.media = "screen,print"; - link.id = theme.uuid; - document.getElementsByTagName("head")[0].appendChild(link); - - if (writeToCache) { - this.cacheThemes(); - } - } - - deactivateTheme(theme) { - var element = document.getElementById(theme.uuid); - if (element) { - element.disabled = true; - element.parentNode.removeChild(element); - } - - _.remove(this.activeThemes, { uuid: theme.uuid }); - - this.cacheThemes(); - } - - async cacheThemes() { - const mapped = await Promise.all(this.activeThemes.map(async (theme) => { - const transformer = new SFItemParams(theme); - const params = await transformer.paramsForLocalStorage(); - return params; - })); - const data = JSON.stringify(mapped); - return this.storageManager.setItem(ThemeManager.CachedThemesKey, data, StorageManager.Fixed); - } - - async decacheThemes() { - return this.storageManager.removeItem(ThemeManager.CachedThemesKey, StorageManager.Fixed); - } - - getCachedThemes() { - const cachedThemes = this.storageManager.getItemSync(ThemeManager.CachedThemesKey, StorageManager.Fixed); - if (cachedThemes) { - const parsed = JSON.parse(cachedThemes); - return parsed.map((theme) => { - return new SNTheme(theme); - }); - } else { - return []; - } - } -} diff --git a/app/assets/javascripts/services/themeManager.ts b/app/assets/javascripts/services/themeManager.ts new file mode 100644 index 000000000..d223beb01 --- /dev/null +++ b/app/assets/javascripts/services/themeManager.ts @@ -0,0 +1,179 @@ +import { WebApplication } from '@/ui_models/application'; +import _ from 'lodash'; +import { + StorageValueModes, + EncryptionIntent, + ApplicationService, + SNTheme, + ComponentArea, + removeFromArray, + ApplicationEvent +} from 'snjs'; +import { AppStateEvent } from '@/ui_models/app_state'; + +const CACHED_THEMES_KEY = 'cachedThemes'; + +export class ThemeManager extends ApplicationService { + + private activeThemes: string[] = [] + private unsubState?: () => void + private unregisterDesktop!: () => void + private unregisterComponent!: () => void + + /** @override */ + async onAppLaunch() { + super.onAppLaunch(); + this.unsubState = this.webApplication.getAppState().addObserver( + async (eventName) => { + if (eventName === AppStateEvent.DesktopExtsReady) { + this.activateCachedThemes(); + } + } + ); + } + + onAppEvent(event: ApplicationEvent) { + super.onAppEvent(event); + if (event === ApplicationEvent.SignedOut) { + this.deactivateAllThemes(); + } + } + + get webApplication() { + return this.application as WebApplication; + } + + deinit() { + this.unsubState?.(); + (this.unsubState as any) = undefined; + this.activeThemes.length = 0; + this.unregisterDesktop(); + this.unregisterComponent(); + (this.unregisterDesktop as any) = undefined; + (this.unregisterComponent as any) = undefined; + super.deinit(); + } + + /** @override */ + async onAppStart() { + super.onAppStart(); + this.registerObservers(); + if (!this.webApplication.getDesktopService().isDesktop) { + this.activateCachedThemes(); + } + } + + private async activateCachedThemes() { + const cachedThemes = await this.getCachedThemes(); + const writeToCache = false; + for (const theme of cachedThemes) { + this.activateTheme(theme, writeToCache); + } + } + + private registerObservers() { + this.unregisterDesktop = this.webApplication.getDesktopService() + .registerUpdateObserver((component) => { + if (component.active && component.isTheme()) { + this.deactivateTheme(component.uuid); + setTimeout(() => { + this.activateTheme(component as SNTheme); + }, 10); + } + }); + + this.unregisterComponent = this.application!.componentManager!.registerHandler({ + identifier: 'themeManager', + areas: [ComponentArea.Themes], + activationHandler: (uuid, component) => { + if (component?.active) { + this.activateTheme(component as SNTheme); + } else { + this.deactivateTheme(uuid); + } + } + }); + } + + private deactivateAllThemes() { + for (const uuid of this.activeThemes) { + this.deactivateTheme(uuid, false); + } + this.activeThemes = []; + this.decacheThemes(); + } + + private activateTheme(theme: SNTheme, writeToCache = true) { + if (this.activeThemes.find((uuid) => uuid === theme.uuid)) { + return; + } + this.activeThemes.push(theme.uuid); + const url = this.application!.componentManager!.urlForComponent(theme)!; + const link = document.createElement('link'); + link.href = url; + link.type = 'text/css'; + link.rel = 'stylesheet'; + link.media = 'screen,print'; + link.id = theme.uuid; + document.getElementsByTagName('head')[0].appendChild(link); + if (writeToCache) { + this.cacheThemes(); + } + } + + private deactivateTheme(uuid: string, recache = true) { + const element = document.getElementById(uuid) as HTMLLinkElement; + if (element) { + element.disabled = true; + element.parentNode!.removeChild(element); + } + removeFromArray(this.activeThemes, uuid); + if (recache) { + this.cacheThemes(); + } + } + + private async cacheThemes() { + const themes = this.application!.getAll(this.activeThemes) as SNTheme[]; + const mapped = await Promise.all(themes.map(async (theme) => { + const payload = theme.payloadRepresentation(); + const processedPayload = await this.application!.protocolService!.payloadByEncryptingPayload( + payload, + EncryptionIntent.LocalStorageDecrypted + ); + return processedPayload; + })); + return this.application!.setValue( + CACHED_THEMES_KEY, + mapped, + StorageValueModes.Nonwrapped + ); + } + + private async decacheThemes() { + if (this.application) { + return this.application.removeValue( + CACHED_THEMES_KEY, + StorageValueModes.Nonwrapped + ); + } + } + + private async getCachedThemes() { + const cachedThemes = await this.application!.getValue( + CACHED_THEMES_KEY, + StorageValueModes.Nonwrapped + ); + if (cachedThemes) { + const themes = []; + for (const cachedTheme of cachedThemes) { + const payload = this.application!.createPayloadFromObject(cachedTheme); + const theme = this.application!.createItemFromPayload(payload) as SNTheme; + themes.push(theme); + } + return themes; + } else { + return []; + } + } +} diff --git a/app/assets/javascripts/state.js b/app/assets/javascripts/state.js deleted file mode 100644 index 6542ba63b..000000000 --- a/app/assets/javascripts/state.js +++ /dev/null @@ -1,132 +0,0 @@ -import { PrivilegesManager } from '@/services/privilegesManager'; - -export const APP_STATE_EVENT_TAG_CHANGED = 1; -export const APP_STATE_EVENT_NOTE_CHANGED = 2; -export const APP_STATE_EVENT_PREFERENCES_CHANGED = 3; -export const APP_STATE_EVENT_PANEL_RESIZED = 4; -export const APP_STATE_EVENT_EDITOR_FOCUSED = 5; -export const APP_STATE_EVENT_BEGAN_BACKUP_DOWNLOAD = 6; -export const APP_STATE_EVENT_ENDED_BACKUP_DOWNLOAD = 7; -export const APP_STATE_EVENT_DESKTOP_EXTS_READY = 8; - -export const EVENT_SOURCE_USER_INTERACTION = 1; -export const EVENT_SOURCE_SCRIPT = 2; - -export class AppState { - - /* @ngInject */ - constructor($timeout, privilegesManager) { - this.$timeout = $timeout; - this.privilegesManager = privilegesManager; - this.observers = []; - } - - addObserver(callback) { - this.observers.push(callback); - return callback; - } - - async notifyEvent(eventName, data) { - /** - * Timeout is particullary important so we can give all initial - * controllers a chance to construct before propogting any events * - */ - return new Promise((resolve) => { - this.$timeout(async () => { - for(const callback of this.observers) { - await callback(eventName, data); - } - resolve(); - }); - }); - } - - setSelectedTag(tag) { - if(this.selectedTag === tag) { - return; - } - const previousTag = this.selectedTag; - this.selectedTag = tag; - this.notifyEvent( - APP_STATE_EVENT_TAG_CHANGED, - {previousTag: previousTag} - ); - } - - async setSelectedNote(note) { - const run = async () => { - const previousNote = this.selectedNote; - this.selectedNote = note; - await this.notifyEvent( - APP_STATE_EVENT_NOTE_CHANGED, - { previousNote: previousNote } - ); - }; - if (note && note.content.protected && - await this.privilegesManager.actionRequiresPrivilege( - PrivilegesManager.ActionViewProtectedNotes - )) { - this.privilegesManager.presentPrivilegesModal( - PrivilegesManager.ActionViewProtectedNotes, - run - ); - } else { - run(); - } - } - - getSelectedTag() { - return this.selectedTag; - } - - getSelectedNote() { - return this.selectedNote; - } - - setUserPreferences(preferences) { - this.userPreferences = preferences; - this.notifyEvent( - APP_STATE_EVENT_PREFERENCES_CHANGED - ); - } - - panelDidResize({name, collapsed}) { - this.notifyEvent( - APP_STATE_EVENT_PANEL_RESIZED, - { - panel: name, - collapsed: collapsed - } - ); - } - - editorDidFocus(eventSource) { - this.notifyEvent( - APP_STATE_EVENT_EDITOR_FOCUSED, - {eventSource: eventSource} - ); - } - - beganBackupDownload() { - this.notifyEvent( - APP_STATE_EVENT_BEGAN_BACKUP_DOWNLOAD - ); - } - - endedBackupDownload({success}) { - this.notifyEvent( - APP_STATE_EVENT_ENDED_BACKUP_DOWNLOAD, - {success: success} - ); - } - - /** - * When the desktop appplication extension server is ready. - */ - desktopExtensionsReady() { - this.notifyEvent( - APP_STATE_EVENT_DESKTOP_EXTS_READY - ); - } - -} diff --git a/app/assets/javascripts/strings.js b/app/assets/javascripts/strings.js deleted file mode 100644 index 863af915a..000000000 --- a/app/assets/javascripts/strings.js +++ /dev/null @@ -1,51 +0,0 @@ -/** @generic */ -export const STRING_SESSION_EXPIRED = "Your session has expired. New changes will not be pulled in. Please sign out and sign back in to refresh your session."; -export const STRING_DEFAULT_FILE_ERROR = "Please use FileSafe or the Bold Editor to attach images and files. Learn more at standardnotes.org/filesafe."; -export const STRING_GENERIC_SYNC_ERROR = "There was an error syncing. Please try again. If all else fails, try signing out and signing back in."; -export function StringSyncException(data) { - return `There was an error while trying to save your items. Please contact support and share this message: ${data}.`; -} - -/** @footer */ -export const STRING_NEW_UPDATE_READY = "A new update is ready to install. Please use the top-level 'Updates' menu to manage installation."; - -/** @tags */ -export const STRING_DELETE_TAG = "Are you sure you want to delete this tag? Note: deleting a tag will not delete its notes."; - -/** @editor */ -export const STRING_DELETED_NOTE = "The note you are attempting to edit has been deleted, and is awaiting sync. Changes you make will be disregarded."; -export const STRING_INVALID_NOTE = "The note you are attempting to save can not be found or has been deleted. Changes you make will not be synced. Please copy this note's text and start a new note."; -export const STRING_ELLIPSES = "..."; -export const STRING_GENERIC_SAVE_ERROR = "There was an error saving your note. Please try again."; -export const STRING_DELETE_PLACEHOLDER_ATTEMPT = "This note is a placeholder and cannot be deleted. To remove from your list, simply navigate to a different note."; -export const STRING_DELETE_LOCKED_ATTEMPT = "This note is locked. If you'd like to delete it, unlock it, and try again."; -export function StringDeleteNote({title, permanently}) { - return permanently - ? `Are you sure you want to permanently delete ${title}?` - : `Are you sure you want to move ${title} to the trash?`; -} -export function StringEmptyTrash({count}) { - return `Are you sure you want to permanently delete ${count} note(s)?`; -} - -/** @account */ -export const STRING_ACCOUNT_MENU_UNCHECK_MERGE = "Unchecking this option means any of the notes you have written while you were signed out will be deleted. Are you sure you want to discard these notes?"; -export const STRING_SIGN_OUT_CONFIRMATION = "Are you sure you want to end your session? This will delete all local items and extensions."; -export const STRING_ERROR_DECRYPTING_IMPORT = "There was an error decrypting your items. Make sure the password you entered is correct and try again."; -export const STRING_E2E_ENABLED = "End-to-end encryption is enabled. Your data is encrypted on your device first, then synced to your private cloud."; -export const STRING_LOCAL_ENC_ENABLED = "Encryption is enabled. Your data is encrypted using your passcode before it is saved to your device storage."; -export const STRING_ENC_NOT_ENABLED = "Encryption is not enabled. Sign in, register, or add a passcode lock to enable encryption."; -export const STRING_IMPORT_SUCCESS = "Your data has been successfully imported."; -export const STRING_REMOVE_PASSCODE_CONFIRMATION = "Are you sure you want to remove your local passcode?"; -export const STRING_REMOVE_PASSCODE_OFFLINE_ADDENDUM = " This will remove encryption from your local data."; -export const STRING_NON_MATCHING_PASSCODES = "The two passcodes you entered do not match. Please try again."; -export const STRING_NON_MATCHING_PASSWORDS = "The two passwords you entered do not match. Please try again."; -export const STRING_GENERATING_LOGIN_KEYS = "Generating Login Keys..."; -export const STRING_GENERATING_REGISTER_KEYS = "Generating Account Keys..."; -export const STRING_INVALID_IMPORT_FILE = "Unable to open file. Ensure it is a proper JSON file and try again."; -export function StringImportError({errorCount}) { - return `Import complete. ${errorCount} items were not imported because there was an error decrypting them. Make sure the password is correct and try again.`; -} - -/** @password_change */ -export const STRING_FAILED_PASSWORD_CHANGE = "There was an error re-encrypting your items. Your password was changed, but not all your items were properly re-encrypted and synced. You should try syncing again. If all else fails, you should restore your notes from backup."; diff --git a/app/assets/javascripts/strings.ts b/app/assets/javascripts/strings.ts new file mode 100644 index 000000000..0ce2880ca --- /dev/null +++ b/app/assets/javascripts/strings.ts @@ -0,0 +1,60 @@ +/** @generic */ +export const STRING_SESSION_EXPIRED = "Your session has expired. New changes will not be pulled in. Please sign out and sign back in to refresh your session."; +export const STRING_DEFAULT_FILE_ERROR = "Please use FileSafe or the Bold Editor to attach images and files. Learn more at standardnotes.org/filesafe."; +export const STRING_GENERIC_SYNC_ERROR = "There was an error syncing. Please try again. If all else fails, try signing out and signing back in."; +export function StringSyncException(data: any) { + return `There was an error while trying to save your items. Please contact support and share this message: ${data}.`; +} + +/** @footer */ +export const STRING_NEW_UPDATE_READY = "A new update is ready to install. Please use the top-level 'Updates' menu to manage installation."; + +/** @tags */ +export const STRING_DELETE_TAG = "Are you sure you want to delete this tag? Note: deleting a tag will not delete its notes."; + +/** @editor */ +export const STRING_DELETED_NOTE = "The note you are attempting to edit has been deleted, and is awaiting sync. Changes you make will be disregarded."; +export const STRING_INVALID_NOTE = "The note you are attempting to save can not be found or has been deleted. Changes you make will not be synced. Please copy this note's text and start a new note."; +export const STRING_ELLIPSES = "..."; +export const STRING_GENERIC_SAVE_ERROR = "There was an error saving your note. Please try again."; +export const STRING_DELETE_PLACEHOLDER_ATTEMPT = "This note is a placeholder and cannot be deleted. To remove from your list, simply navigate to a different note."; +export const STRING_DELETE_LOCKED_ATTEMPT = "This note is locked. If you'd like to delete it, unlock it, and try again."; +export function StringDeleteNote(title: string, permanently: boolean) { + return permanently + ? `Are you sure you want to permanently delete ${title}?` + : `Are you sure you want to move ${title} to the trash?`; +} +export function StringEmptyTrash(count: number) { + return `Are you sure you want to permanently delete ${count} note(s)?`; +} + +/** @account */ +export const STRING_ACCOUNT_MENU_UNCHECK_MERGE = "Unchecking this option means any of the notes you have written while you were signed out will be deleted. Are you sure you want to discard these notes?"; +export const STRING_SIGN_OUT_CONFIRMATION = "Are you sure you want to end your session? This will delete all local items and extensions."; +export const STRING_ERROR_DECRYPTING_IMPORT = "There was an error decrypting your items. Make sure the password you entered is correct and try again."; +export const STRING_E2E_ENABLED = "End-to-end encryption is enabled. Your data is encrypted on your device first, then synced to your private cloud."; +export const STRING_LOCAL_ENC_ENABLED = "Encryption is enabled. Your data is encrypted using your passcode before it is saved to your device storage."; +export const STRING_ENC_NOT_ENABLED = "Encryption is not enabled. Sign in, register, or add a passcode lock to enable encryption."; +export const STRING_IMPORT_SUCCESS = "Your data has been successfully imported."; +export const STRING_REMOVE_PASSCODE_CONFIRMATION = "Are you sure you want to remove your application passcode?"; +export const STRING_REMOVE_PASSCODE_OFFLINE_ADDENDUM = " This will remove encryption from your local data."; +export const STRING_NON_MATCHING_PASSCODES = "The two passcodes you entered do not match. Please try again."; +export const STRING_NON_MATCHING_PASSWORDS = "The two passwords you entered do not match. Please try again."; +export const STRING_GENERATING_LOGIN_KEYS = "Generating Login Keys..."; +export const STRING_GENERATING_REGISTER_KEYS = "Generating Account Keys..."; +export const STRING_INVALID_IMPORT_FILE = "Unable to open file. Ensure it is a proper JSON file and try again."; +export function StringImportError(errorCount: number) { + return `Import complete. ${errorCount} items were not imported because there was an error decrypting them. Make sure the password is correct and try again.`; +} +export const STRING_ENTER_ACCOUNT_PASSCODE = 'Enter your application passcode'; +export const STRING_ENTER_ACCOUNT_PASSWORD = 'Enter your account password'; +export const STRING_ENTER_PASSCODE_FOR_MIGRATION = 'Your application passcode is required to perform an upgrade of your local data storage structure.'; +export const STRING_STORAGE_UPDATE = 'Storage Update'; +export const STRING_AUTHENTICATION_REQUIRED = 'Authentication Required'; + +/** @password_change */ +export const STRING_FAILED_PASSWORD_CHANGE = "There was an error re-encrypting your items. Your password was changed, but not all your items were properly re-encrypted and synced. You should try syncing again. If all else fails, you should restore your notes from backup."; + +export const STRING_CONFIRM_APP_QUIT_DURING_UPGRADE = + "The encryption upgrade is in progress. You may lose data if you quit the app. " + + "Are you sure you want to quit?" diff --git a/app/assets/javascripts/tsconfig.json b/app/assets/javascripts/tsconfig.json new file mode 100644 index 000000000..da1734db6 --- /dev/null +++ b/app/assets/javascripts/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "allowJs": true, + "strict": true, + "isolatedModules": true, + "esModuleInterop": true, + "declaration": true, + "emitDeclarationOnly": true, + "newLine": "lf", + "declarationDir": "../../../dist/@types", + "baseUrl": ".", + "paths": { + "%/*": ["../templates/*"], + "@/*": ["./*"], + "@Controllers/*": ["./controllers/*"], + "@Views/*": ["./views/*"], + "@Services/*": ["./services/*"], + "@node_modules/*": ["../../../node_modules/*"], + } + } +} diff --git a/app/assets/javascripts/types.ts b/app/assets/javascripts/types.ts new file mode 100644 index 000000000..df218f7c1 --- /dev/null +++ b/app/assets/javascripts/types.ts @@ -0,0 +1,41 @@ +import { SNComponent } from 'snjs'; +export class WebDirective implements ng.IDirective { + controller?: string | ng.Injectable; + controllerAs?: string; + bindToController?: boolean | { [boundProperty: string]: string }; + restrict?: string; + replace?: boolean + scope?: boolean | { [boundProperty: string]: string }; + template?: string | ((tElement: any, tAttrs: any) => string) + transclude?: boolean +} + +export enum PasswordWizardType { + ChangePassword = 1, + AccountUpgrade = 2 +} + +export interface PasswordWizardScope extends Partial { + type: PasswordWizardType, + application: any +} + +export interface PermissionsModalScope extends Partial { + application: any + component: SNComponent + permissionsString: string + callback: (approved: boolean) => void +} + +export type PanelPuppet = { + onReady?: () => void + ready?: boolean + setWidth?: (width: number) => void + setLeft?: (left: number) => void + isCollapsed?: () => boolean + flash?: () => void +} + +export type FooterStatus = { + string: string +} \ No newline at end of file diff --git a/app/assets/javascripts/typings/pug.d.ts b/app/assets/javascripts/typings/pug.d.ts new file mode 100644 index 000000000..8005eaa90 --- /dev/null +++ b/app/assets/javascripts/typings/pug.d.ts @@ -0,0 +1,5 @@ +declare module "*.pug" { + import { compileTemplate } from 'pug' + const content: compileTemplate; + export default content; +} \ No newline at end of file diff --git a/app/assets/javascripts/typings/stylekit.d.ts b/app/assets/javascripts/typings/stylekit.d.ts new file mode 100644 index 000000000..b7950135e --- /dev/null +++ b/app/assets/javascripts/typings/stylekit.d.ts @@ -0,0 +1 @@ +declare module "sn-stylekit"; \ No newline at end of file diff --git a/app/assets/javascripts/ui_models/app_state.ts b/app/assets/javascripts/ui_models/app_state.ts new file mode 100644 index 000000000..337dfb6b3 --- /dev/null +++ b/app/assets/javascripts/ui_models/app_state.ts @@ -0,0 +1,321 @@ +import { isDesktopApplication } from '@/utils'; +import pull from 'lodash/pull'; +import { + ProtectedAction, + ApplicationEvent, + SNTag, + SNNote, + SNUserPrefs, + ContentType, + SNSmartTag, + PayloadSource +} from 'snjs'; +import { WebApplication } from '@/ui_models/application'; +import { Editor } from '@/ui_models/editor'; + +export enum AppStateEvent { + TagChanged = 1, + ActiveEditorChanged = 2, + PreferencesChanged = 3, + PanelResized = 4, + EditorFocused = 5, + BeganBackupDownload = 6, + EndedBackupDownload = 7, + DesktopExtsReady = 8, + WindowDidFocus = 9, + WindowDidBlur = 10, +}; + +export enum EventSource { + UserInteraction = 1, + Script = 2 +}; + +type ObserverCallback = (event: AppStateEvent, data?: any) => Promise + +export class AppState { + $rootScope: ng.IRootScopeService + $timeout: ng.ITimeoutService + application: WebApplication + observers: ObserverCallback[] = [] + locked = true + unsubApp: any + rootScopeCleanup1: any + rootScopeCleanup2: any + onVisibilityChange: any + selectedTag?: SNTag + userPreferences?: SNUserPrefs + multiEditorEnabled = false + + /* @ngInject */ + constructor( + $rootScope: ng.IRootScopeService, + $timeout: ng.ITimeoutService, + application: WebApplication + ) { + this.$timeout = $timeout; + this.$rootScope = $rootScope; + this.application = application; + this.registerVisibilityObservers(); + this.addAppEventObserver(); + this.streamNotesAndTags(); + const onVisibilityChange = () => { + const visible = document.visibilityState === "visible"; + const event = visible + ? AppStateEvent.WindowDidFocus + : AppStateEvent.WindowDidBlur; + this.notifyEvent(event); + } + this.onVisibilityChange = onVisibilityChange.bind(this); + } + + deinit() { + this.unsubApp(); + this.unsubApp = undefined; + this.observers.length = 0; + if (this.rootScopeCleanup1) { + this.rootScopeCleanup1(); + this.rootScopeCleanup2(); + this.rootScopeCleanup1 = undefined; + this.rootScopeCleanup2 = undefined; + } + document.removeEventListener('visibilitychange', this.onVisibilityChange); + this.onVisibilityChange = undefined; + } + + /** + * Creates a new editor if one doesn't exist. If one does, we'll replace the + * editor's note with an empty one. + */ + createEditor(title?: string) { + const activeEditor = this.getActiveEditor(); + if (!activeEditor || this.multiEditorEnabled) { + this.application.editorGroup.createEditor(undefined, title); + } else { + activeEditor.reset(title); + } + } + + async openEditor(noteUuid: string) { + const note = this.application.findItem(noteUuid) as SNNote; + const run = async () => { + const activeEditor = this.getActiveEditor(); + if (!activeEditor || this.multiEditorEnabled) { + this.application.editorGroup.createEditor(noteUuid); + } else { + activeEditor.setNote(note); + } + await this.notifyEvent(AppStateEvent.ActiveEditorChanged); + }; + if (note && note.safeContent.protected && + await this.application.privilegesService!.actionRequiresPrivilege( + ProtectedAction.ViewProtectedNotes + )) { + return new Promise((resolve) => { + this.application.presentPrivilegesModal( + ProtectedAction.ViewProtectedNotes, + () => { + run().then(resolve); + } + ); + }); + } else { + return run(); + } + } + + getActiveEditor() { + return this.application.editorGroup.editors[0]; + } + + getEditors() { + return this.application.editorGroup.editors; + } + + closeEditor(editor: Editor) { + this.application.editorGroup.closeEditor(editor); + } + + closeActiveEditor() { + this.application.editorGroup.closeActiveEditor(); + } + + closeAllEditors() { + this.application.editorGroup.closeAllEditors(); + } + + editorForNote(note: SNNote) { + for (const editor of this.getEditors()) { + if (editor.note.uuid === note.uuid) { + return editor; + } + } + } + + streamNotesAndTags() { + this.application!.streamItems( + [ContentType.Note, ContentType.Tag], + async (items, source) => { + /** Close any editors for deleted/trashed/archived notes */ + if (source === PayloadSource.PreSyncSave) { + const notes = items.filter((candidate) => + candidate.content_type === ContentType.Note + ) as SNNote[]; + for (const note of notes) { + const editor = this.editorForNote(note); + if (!editor) { + continue; + } + if (note.deleted) { + this.closeEditor(editor); + } else if (note.trashed && !this.selectedTag?.isTrashTag) { + this.closeEditor(editor); + } else if (note.archived && !this.selectedTag?.isArchiveTag) { + this.closeEditor(editor); + } + } + } + if (this.selectedTag) { + const matchingTag = items.find((candidate) => candidate.uuid === this.selectedTag!.uuid); + if (matchingTag) { + this.selectedTag = matchingTag as SNTag; + } + } + } + ); + } + + addAppEventObserver() { + this.unsubApp = this.application.addEventObserver(async (eventName) => { + if (eventName === ApplicationEvent.Started) { + this.locked = true; + } else if (eventName === ApplicationEvent.Launched) { + this.locked = false; + } + }); + } + + isLocked() { + return this.locked; + } + + registerVisibilityObservers() { + if (isDesktopApplication()) { + this.rootScopeCleanup1 = this.$rootScope.$on('window-lost-focus', () => { + this.notifyEvent(AppStateEvent.WindowDidBlur); + }); + this.rootScopeCleanup2 = this.$rootScope.$on('window-gained-focus', () => { + this.notifyEvent(AppStateEvent.WindowDidFocus); + }); + } else { + /* Tab visibility listener, web only */ + document.addEventListener('visibilitychange', this.onVisibilityChange); + } + } + + /** @returns A function that unregisters this observer */ + addObserver(callback: ObserverCallback) { + this.observers.push(callback); + return () => { + pull(this.observers, callback); + }; + } + + async notifyEvent(eventName: AppStateEvent, data?: any) { + /** + * Timeout is particullary important so we can give all initial + * controllers a chance to construct before propogting any events * + */ + return new Promise((resolve) => { + this.$timeout(async () => { + for (const callback of this.observers) { + await callback(eventName, data); + } + resolve(); + }); + }); + } + + setSelectedTag(tag: SNTag) { + if (this.selectedTag === tag) { + return; + } + const previousTag = this.selectedTag; + this.selectedTag = tag; + this.notifyEvent( + AppStateEvent.TagChanged, + { + tag: tag, + previousTag: previousTag + } + ); + } + + /** Returns the tags that are referncing this note */ + public getNoteTags(note: SNNote) { + return this.application.referencingForItem(note).filter((ref) => { + return ref.content_type === ContentType.Tag; + }) as SNTag[] + } + + /** Returns the notes this tag references */ + public getTagNotes(tag: SNTag) { + if (tag.isSmartTag()) { + return this.application.notesMatchingSmartTag(tag as SNSmartTag); + } else { + return this.application.referencesForItem(tag).filter((ref) => { + return ref.content_type === ContentType.Note; + }) as SNNote[] + } + } + + public getSelectedTag() { + return this.selectedTag; + } + + setUserPreferences(preferences: SNUserPrefs) { + this.userPreferences = preferences; + this.notifyEvent( + AppStateEvent.PreferencesChanged + ); + } + + panelDidResize(name: string, collapsed: boolean) { + this.notifyEvent( + AppStateEvent.PanelResized, + { + panel: name, + collapsed: collapsed + } + ); + } + + editorDidFocus(eventSource: EventSource) { + this.notifyEvent( + AppStateEvent.EditorFocused, + { eventSource: eventSource } + ); + } + + beganBackupDownload() { + this.notifyEvent( + AppStateEvent.BeganBackupDownload + ); + } + + endedBackupDownload(success: boolean) { + this.notifyEvent( + AppStateEvent.EndedBackupDownload, + { success: success } + ); + } + + /** + * When the desktop appplication extension server is ready. + */ + desktopExtensionsReady() { + this.notifyEvent( + AppStateEvent.DesktopExtsReady + ); + } +} diff --git a/app/assets/javascripts/ui_models/application.ts b/app/assets/javascripts/ui_models/application.ts new file mode 100644 index 000000000..8046e8731 --- /dev/null +++ b/app/assets/javascripts/ui_models/application.ts @@ -0,0 +1,254 @@ +import { ComponentGroup } from './component_group'; +import { EditorGroup } from '@/ui_models/editor_group'; +import { InputModalScope } from '@/directives/views/inputModal'; +import { PasswordWizardType, PasswordWizardScope } from '@/types'; +import { + Environment, + SNApplication, + SNAlertService, + platformFromString, + Challenge, + ProtectedAction +} from 'snjs'; +import angular from 'angular'; +import { getPlatformString } from '@/utils'; +import { AlertService } from '@/services/alertService'; +import { WebDeviceInterface } from '@/interface'; +import { + DesktopManager, + LockManager, + ArchiveManager, + NativeExtManager, + StatusManager, + ThemeManager, + PreferencesManager, + KeyboardManager +} from '@/services'; +import { AppState } from '@/ui_models/app_state'; +import { SNWebCrypto } from 'sncrypto/dist/sncrypto-web'; + +type WebServices = { + appState: AppState + desktopService: DesktopManager + lockService: LockManager + archiveService: ArchiveManager + nativeExtService: NativeExtManager + statusService: StatusManager + themeService: ThemeManager + prefsService: PreferencesManager + keyboardService: KeyboardManager +} + +export class WebApplication extends SNApplication { + + private $compile?: ng.ICompileService + private scope?: ng.IScope + private onDeinit?: (app: WebApplication) => void + private webServices!: WebServices + private currentAuthenticationElement?: JQLite + public editorGroup: EditorGroup + public componentGroup: ComponentGroup + + /* @ngInject */ + constructor( + $compile: ng.ICompileService, + $timeout: ng.ITimeoutService, + scope: ng.IScope, + onDeinit: (app: WebApplication) => void + ) { + const namespace = ''; + const deviceInterface = new WebDeviceInterface(namespace, $timeout); + super( + Environment.Web, + platformFromString(getPlatformString()), + deviceInterface, + new SNWebCrypto(), + new AlertService(), + namespace, + undefined, + undefined, + ); + this.$compile = $compile; + this.scope = scope; + this.onDeinit = onDeinit; + deviceInterface.setApplication(this); + this.editorGroup = new EditorGroup(this); + this.componentGroup = new ComponentGroup(this); + } + + /** @override */ + deinit() { + for (const key of Object.keys(this.webServices)) { + const service = (this.webServices as any)[key]; + if (service.deinit) { + service.deinit(); + } + service.application = undefined; + } + this.webServices = {} as WebServices; + this.onDeinit!(this); + this.onDeinit = undefined; + this.$compile = undefined; + this.editorGroup.deinit(); + this.componentGroup.deinit(); + (this.scope! as any).application = undefined; + this.scope!.$destroy(); + this.scope = undefined; + /** Allow our Angular directives to be destroyed and any pending digest cycles + * to complete before destroying the global application instance and all its services */ + setImmediate(() => { + super.deinit(); + }) + } + + setWebServices(services: WebServices) { + this.webServices = services; + } + + public getAppState() { + return this.webServices.appState; + } + + public getDesktopService() { + return this.webServices.desktopService; + } + + public getLockService() { + return this.webServices.lockService; + } + + public getArchiveService() { + return this.webServices.archiveService; + } + + public getNativeExtService() { + return this.webServices.nativeExtService; + } + + public getStatusService() { + return this.webServices.statusService; + } + + public getThemeService() { + return this.webServices.themeService; + } + + public getPrefsService() { + return this.webServices.prefsService; + } + + public getKeyboardService() { + return this.webServices.keyboardService; + } + + async checkForSecurityUpdate() { + return this.protocolUpgradeAvailable(); + } + + presentPasswordWizard(type: PasswordWizardType) { + const scope = this.scope!.$new(true) as PasswordWizardScope; + scope.type = type; + scope.application = this; + const el = this.$compile!( + "" + )(scope as any); + angular.element(document.body).append(el); + } + + promptForChallenge(challenge: Challenge) { + const scope: any = this.scope!.$new(true); + scope.challenge = challenge; + scope.application = this; + const el = this.$compile!( + "" + + "" + )(scope); + angular.element(document.body).append(el); + } + + async performProtocolUpgrade() { + const result = await this.upgradeProtocolVersion(); + if (result.success) { + this.alertService!.alert( + "Success! Your encryption version has been upgraded." + + " You'll be asked to enter your credentials again on other devices you're signed into." + ); + } else if (result.error) { + console.error(result.error); + this.alertService!.alert( + "Unable to upgrade encryption version. Please try again." + ); + } + } + + async presentPrivilegesModal( + action: ProtectedAction, + onSuccess?: any, + onCancel?: any + ) { + if (this.authenticationInProgress()) { + onCancel && onCancel(); + return; + } + + const customSuccess = async () => { + onSuccess && await onSuccess(); + this.currentAuthenticationElement = undefined; + }; + const customCancel = async () => { + onCancel && await onCancel(); + this.currentAuthenticationElement = undefined; + }; + + const scope: any = this.scope!.$new(true); + scope.action = action; + scope.onSuccess = customSuccess; + scope.onCancel = customCancel; + scope.application = this; + const el = this.$compile!(` + + `)(scope); + angular.element(document.body).append(el); + + this.currentAuthenticationElement = el; + } + + presentPrivilegesManagementModal() { + const scope: any = this.scope!.$new(true); + scope.application = this; + const el = this.$compile!("")(scope); + angular.element(document.body).append(el); + } + + authenticationInProgress() { + return this.currentAuthenticationElement != null; + } + + presentPasswordModal(callback: () => void) { + const scope = this.scope!.$new(true) as InputModalScope; + scope.type = "password"; + scope.title = "Decryption Assistance"; + scope.message = `Unable to decrypt this item with your current keys. + Please enter your account password at the time of this revision.`; + scope.callback = callback; + const el = this.$compile!( + `` + )(scope as any); + angular.element(document.body).append(el); + } + + presentRevisionPreviewModal(uuid: string, content: any) { + const scope: any = this.scope!.$new(true); + scope.uuid = uuid; + scope.content = content; + scope.application = this; + const el = this.$compile!( + `` + )(scope); + angular.element(document.body).append(el); + } +} diff --git a/app/assets/javascripts/ui_models/application_group.ts b/app/assets/javascripts/ui_models/application_group.ts new file mode 100644 index 000000000..f8210efb3 --- /dev/null +++ b/app/assets/javascripts/ui_models/application_group.ts @@ -0,0 +1,136 @@ +import { WebApplication } from './application'; +import { removeFromArray } from 'snjs'; +import { + ArchiveManager, + DesktopManager, + KeyboardManager, + LockManager, + NativeExtManager, + PreferencesManager, + StatusManager, + ThemeManager +} from '@/services'; +import { AppState } from '@/ui_models/app_state'; + +type AppManagerChangeCallback = () => void + +export class ApplicationGroup { + + $compile: ng.ICompileService + $rootScope: ng.IRootScopeService + $timeout: ng.ITimeoutService + applications: WebApplication[] = [] + changeObservers: AppManagerChangeCallback[] = [] + activeApplication?: WebApplication + + /* @ngInject */ + constructor( + $compile: ng.ICompileService, + $rootScope: ng.IRootScopeService, + $timeout: ng.ITimeoutService + ) { + this.$compile = $compile; + this.$timeout = $timeout; + this.$rootScope = $rootScope; + this.onApplicationDeinit = this.onApplicationDeinit.bind(this); + this.createDefaultApplication(); + } + + private createDefaultApplication() { + this.activeApplication = this.createNewApplication(); + this.applications.push(this.activeApplication!); + this.notifyObserversOfAppChange(); + } + + /** @callback */ + onApplicationDeinit(application: WebApplication) { + removeFromArray(this.applications, application); + if (this.activeApplication === application) { + this.activeApplication = undefined; + } + if (this.applications.length === 0) { + this.createDefaultApplication(); + } else { + this.notifyObserversOfAppChange(); + } + } + + private createNewApplication() { + const scope = this.$rootScope.$new(true); + const application = new WebApplication( + this.$compile, + this.$timeout, + scope, + this.onApplicationDeinit + ); + const appState = new AppState( + this.$rootScope, + this.$timeout, + application + ); + const archiveService = new ArchiveManager( + application + ); + const desktopService = new DesktopManager( + this.$rootScope, + this.$timeout, + application + ); + const keyboardService = new KeyboardManager(); + const lockService = new LockManager( + application + ); + const nativeExtService = new NativeExtManager( + application + ); + const prefsService = new PreferencesManager( + application + ); + const statusService = new StatusManager(); + const themeService = new ThemeManager( + application, + ); + application.setWebServices({ + appState, + archiveService, + desktopService, + keyboardService, + lockService, + nativeExtService, + prefsService, + statusService, + themeService + }); + return application; + } + + get application() { + return this.activeApplication; + } + + public getApplications() { + return this.applications.slice(); + } + + /** + * Notifies observer when the active application has changed. + * Any application which is no longer active is destroyed, and + * must be removed from the interface. + */ + public addApplicationChangeObserver(callback: AppManagerChangeCallback) { + this.changeObservers.push(callback); + if (this.application) { + callback(); + } + + return () => { + removeFromArray(this.changeObservers, callback); + } + } + + private notifyObserversOfAppChange() { + for (const observer of this.changeObservers) { + observer(); + } + } +} diff --git a/app/assets/javascripts/ui_models/component_group.ts b/app/assets/javascripts/ui_models/component_group.ts new file mode 100644 index 000000000..f8c8dae7d --- /dev/null +++ b/app/assets/javascripts/ui_models/component_group.ts @@ -0,0 +1,102 @@ +import { SNComponent, ComponentArea, removeFromArray, addIfUnique } from 'snjs'; +import { WebApplication } from './application'; +import { UuidString } from '@node_modules/snjs/dist/@types/types'; + +/** Areas that only allow a single component to be active */ +const SingleComponentAreas = [ + ComponentArea.Editor, + ComponentArea.NoteTags, + ComponentArea.TagsList +] + +export class ComponentGroup { + + private application: WebApplication + changeObservers: any[] = [] + activeComponents: UuidString[] = [] + + constructor(application: WebApplication) { + this.application = application; + } + + get componentManager() { + return this.application?.componentManager!; + } + + public deinit() { + (this.application as any) = undefined; + } + + async activateComponent(component: SNComponent) { + if (this.activeComponents.includes(component.uuid)) { + return; + } + if (SingleComponentAreas.includes(component.area)) { + const currentActive = this.activeComponentForArea(component.area); + if (currentActive) { + await this.deactivateComponent(currentActive, false); + } + } + addIfUnique(this.activeComponents, component.uuid); + await this.componentManager.activateComponent(component.uuid); + this.notifyObservers(); + } + + async deactivateComponent(component: SNComponent, notify = true) { + if (!this.activeComponents.includes(component.uuid)) { + return; + } + removeFromArray(this.activeComponents, component.uuid); + /** If this function is called as part of global application deinit (locking), + * componentManager can be destroyed. In this case, it's harmless to not take any + * action since the componentManager will be destroyed, and the component will + * essentially be deregistered. */ + if(this.componentManager) { + await this.componentManager.deactivateComponent(component.uuid); + if(notify) { + this.notifyObservers(); + } + } + } + + async deactivateComponentForArea(area: ComponentArea) { + const component = this.activeComponentForArea(area); + if (component) { + return this.deactivateComponent(component); + } + } + + activeComponentForArea(area: ComponentArea) { + return this.activeComponentsForArea(area)[0]; + } + + activeComponentsForArea(area: ComponentArea) { + return this.allActiveComponents().filter((c) => c.area === area); + } + + allComponentsForArea(area: ComponentArea) { + return this.componentManager.componentsForArea(area); + } + + private allActiveComponents() { + return this.application.getAll(this.activeComponents) as SNComponent[]; + } + + + /** + * Notifies observer when the active editor has changed. + */ + public addChangeObserver(callback: () => void) { + this.changeObservers.push(callback); + callback(); + return () => { + removeFromArray(this.changeObservers, callback); + } + } + + private notifyObservers() { + for (const observer of this.changeObservers) { + observer(); + } + } +} \ No newline at end of file diff --git a/app/assets/javascripts/ui_models/editor.ts b/app/assets/javascripts/ui_models/editor.ts new file mode 100644 index 000000000..56b68685c --- /dev/null +++ b/app/assets/javascripts/ui_models/editor.ts @@ -0,0 +1,106 @@ +import { SNNote, ContentType, PayloadSource } from 'snjs'; +import { WebApplication } from './application'; + +export class Editor { + + public note!: SNNote + private application: WebApplication + private _onNoteChange?: () => void + private _onNoteValueChange?: (note: SNNote, source?: PayloadSource) => void + private removeStreamObserver: () => void + public isTemplateNote = false + + constructor( + application: WebApplication, + noteUuid?: string, + noteTitle?: string + ) { + this.application = application; + if (noteUuid) { + this.note = application.findItem(noteUuid) as SNNote; + } else { + this.reset(noteTitle); + } + + this.removeStreamObserver = this.application.streamItems( + ContentType.Note, + async (items, source) => { + await this.handleNoteStream(items as SNNote[], source); + } + ); + } + + deinit() { + this.removeStreamObserver(); + (this.removeStreamObserver as any) = undefined; + this._onNoteChange = undefined; + (this.application as any) = undefined; + this._onNoteChange = undefined; + this._onNoteValueChange = undefined; + } + + private async handleNoteStream(notes: SNNote[], source?: PayloadSource) { + /** Update our note object reference whenever it changes */ + const matchingNote = notes.find((item) => { + return item.uuid === this.note.uuid; + }) as SNNote; + if (matchingNote) { + this.isTemplateNote = false; + this.note = matchingNote; + this._onNoteValueChange && this._onNoteValueChange!(matchingNote, source); + } + } + + async insertTemplatedNote() { + return this.application.insertItem(this.note); + } + + /** + * Reverts the editor to a blank state, removing any existing note from view, + * and creating a placeholder note. + */ + async reset(noteTitle?: string) { + const note = await this.application.createTemplateItem( + ContentType.Note, + { + text: '', + title: noteTitle || '', + references: [] + } + ); + this.isTemplateNote = true; + this.setNote(note as SNNote); + } + + /** + * Register to be notified when the editor's note changes. + */ + public onNoteChange(callback: () => void) { + this._onNoteChange = callback; + if (this.note) { + callback(); + } + } + + public clearNoteChangeListener() { + this._onNoteChange = undefined; + } + + /** + * Register to be notified when the editor's note's values change + * (and thus a new object reference is created) + */ + public onNoteValueChange(callback: (note: SNNote, source?: PayloadSource) => void) { + this._onNoteValueChange = callback; + } + + /** + * Sets the editor contents by setting its note. + */ + public setNote(note: SNNote) { + this.note = note; + if (this._onNoteChange) { + this._onNoteChange(); + } + } +} diff --git a/app/assets/javascripts/ui_models/editor_group.ts b/app/assets/javascripts/ui_models/editor_group.ts new file mode 100644 index 000000000..5be00f8ec --- /dev/null +++ b/app/assets/javascripts/ui_models/editor_group.ts @@ -0,0 +1,75 @@ +import { removeFromArray } from 'snjs'; +import { Editor } from './editor'; +import { WebApplication } from './application'; + +type EditorGroupChangeCallback = () => void + +export class EditorGroup { + + public editors: Editor[] = [] + private application: WebApplication + changeObservers: EditorGroupChangeCallback[] = [] + + constructor(application: WebApplication) { + this.application = application; + } + + public deinit() { + (this.application as any) = undefined; + for (const editor of this.editors) { + this.deleteEditor(editor); + } + } + + createEditor(noteUuid?: string, noteTitle?: string) { + const editor = new Editor(this.application, noteUuid, noteTitle); + this.editors.push(editor); + this.notifyObservers(); + } + + deleteEditor(editor: Editor) { + editor.deinit(); + removeFromArray(this.editors, editor); + } + + closeEditor(editor: Editor) { + this.deleteEditor(editor); + this.notifyObservers(); + } + + closeActiveEditor() { + const activeEditor = this.activeEditor; + if(activeEditor) { + this.deleteEditor(activeEditor); + } + } + + closeAllEditors() { + for(const editor of this.editors) { + this.deleteEditor(editor); + } + } + + get activeEditor() { + return this.editors[0]; + } + + /** + * Notifies observer when the active editor has changed. + */ + public addChangeObserver(callback: EditorGroupChangeCallback) { + this.changeObservers.push(callback); + if (this.activeEditor) { + callback(); + } + return () => { + removeFromArray(this.changeObservers, callback); + } + } + + private notifyObservers() { + for (const observer of this.changeObservers) { + observer(); + } + } +} \ No newline at end of file diff --git a/app/assets/javascripts/utils.js b/app/assets/javascripts/utils.ts similarity index 78% rename from app/assets/javascripts/utils.js rename to app/assets/javascripts/utils.ts index e924511c5..e95cd83cb 100644 --- a/app/assets/javascripts/utils.js +++ b/app/assets/javascripts/utils.ts @@ -1,4 +1,6 @@ -export function getParameterByName(name, url) { +export const isDev = process.env.NODE_ENV === 'development'; + +export function getParameterByName(name: string, url: string) { name = name.replace(/[[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'); var results = regex.exec(url); @@ -7,23 +9,14 @@ export function getParameterByName(name, url) { return decodeURIComponent(results[2].replace(/\+/g, ' ')); } -export function parametersFromURL(url) { - url = url.split('?').slice(-1)[0]; - var obj = {}; - url.replace(/([^=&]+)=([^&]*)/g, function(m, key, value) { - obj[decodeURIComponent(key)] = decodeURIComponent(value); - }); - return obj; -} - -export function isNullOrUndefined(value) { +export function isNullOrUndefined(value: any) { return value === null || value === undefined; } export function getPlatformString() { try { - var platform = navigator.platform.toLowerCase(); - var trimmed = ''; + const platform = navigator.platform.toLowerCase(); + let trimmed = ''; if (platform.indexOf('mac') !== -1) { trimmed = 'mac'; } else if (platform.indexOf('win') !== -1) { @@ -32,15 +25,14 @@ export function getPlatformString() { if (platform.indexOf('linux') !== -1) { trimmed = 'linux'; } - return trimmed + (isDesktopApplication() ? '-desktop' : '-web'); } catch (e) { - return null; + return 'unknown-platform'; } } -let sharedDateFormatter; -export function dateToLocalizedString(date) { +let sharedDateFormatter: Intl.DateTimeFormat; +export function dateToLocalizedString(date: Date) { if (typeof Intl !== 'undefined' && Intl.DateTimeFormat) { if (!sharedDateFormatter) { const locale = ( @@ -66,9 +58,9 @@ export function dateToLocalizedString(date) { } /** Via https://davidwalsh.name/javascript-debounce-function */ -export function debounce(func, wait, immediate) { - let timeout; - return function () { +export function debounce(this: any, func: any, wait: number, immediate = false) { + let timeout: any; + return () => { const context = this; const args = arguments; const later = function () { @@ -83,20 +75,14 @@ export function debounce(func, wait, immediate) { }; export function isDesktopApplication() { - return window.isElectron; + return (window as any).isElectron; } -/* Use with numbers and strings, not objects */ -// eslint-disable-next-line no-extend-native -Array.prototype.containsPrimitiveSubset = function(array) { - return !array.some(val => this.indexOf(val) === -1); -}; - // https://tc39.github.io/ecma262/#sec-array.prototype.includes if (!Array.prototype.includes) { // eslint-disable-next-line no-extend-native Object.defineProperty(Array.prototype, 'includes', { - value: function(searchElement, fromIndex) { + value: function(searchElement: any, fromIndex: number) { if (this == null) { throw new TypeError('"this" is null or not defined'); } @@ -123,7 +109,7 @@ if (!Array.prototype.includes) { // b. If k < 0, let k be 0. var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - function sameValueZero(x, y) { + function sameValueZero(x: number, y: number) { return ( x === y || (typeof x === 'number' && diff --git a/app/assets/javascripts/views/abstract/pure_view_ctrl.ts b/app/assets/javascripts/views/abstract/pure_view_ctrl.ts new file mode 100644 index 000000000..ff2379ef6 --- /dev/null +++ b/app/assets/javascripts/views/abstract/pure_view_ctrl.ts @@ -0,0 +1,143 @@ +import { ApplicationEvent } from 'snjs'; +import { WebApplication } from '@/ui_models/application'; + +export type CtrlState = Partial> +export type CtrlProps = Partial> + +export class PureViewCtrl

{ + $timeout: ng.ITimeoutService + /** Passed through templates */ + application!: WebApplication + state: S = {} as any + private unsubApp: any + private unsubState: any + private stateTimeout?: ng.IPromise + + /* @ngInject */ + constructor( + $timeout: ng.ITimeoutService, + public props: P = {} as any + ) { + this.$timeout = $timeout; + } + + $onInit() { + this.state = { + ...this.getInitialState(), + ...this.state, + } + this.addAppEventObserver(); + this.addAppStateObserver(); + } + + deinit() { + this.unsubApp(); + this.unsubState(); + this.unsubApp = undefined; + this.unsubState = undefined; + if (this.stateTimeout) { + this.$timeout.cancel(this.stateTimeout); + } + } + + $onDestroy() { + this.deinit(); + } + + public get appState() { + return this.application!.getAppState(); + } + + /** @private */ + async resetState() { + this.state = this.getInitialState(); + await this.setState(this.state); + } + + /** @override */ + getInitialState(): S { + return {} as any; + } + + async setState(state: Partial) { + if (!this.$timeout) { + return; + } + this.state = Object.freeze(Object.assign({}, this.state, state)); + return new Promise((resolve) => { + this.stateTimeout = this.$timeout(resolve); + }); + } + + async updateUI(func: () => void) { + this.$timeout(func); + } + + initProps(props: CtrlProps) { + if (Object.keys(this.props).length > 0) { + throw 'Already init-ed props.'; + } + this.props = Object.freeze(Object.assign({}, this.props, props)); + } + + addAppStateObserver() { + this.unsubState = this.application!.getAppState().addObserver( + async (eventName, data) => { + this.onAppStateEvent(eventName, data); + } + ); + } + + onAppStateEvent(eventName: any, data: any) { + /** Optional override */ + } + + addAppEventObserver() { + if (this.application!.isStarted()) { + this.onAppStart(); + } + if (this.application!.isLaunched()) { + this.onAppLaunch(); + } + this.unsubApp = this.application!.addEventObserver(async (eventName) => { + this.onAppEvent(eventName); + if (eventName === ApplicationEvent.Started) { + await this.onAppStart(); + } else if (eventName === ApplicationEvent.Launched) { + await this.onAppLaunch(); + } else if (eventName === ApplicationEvent.CompletedIncrementalSync) { + this.onAppIncrementalSync(); + } else if (eventName === ApplicationEvent.CompletedFullSync) { + this.onAppFullSync(); + } else if (eventName === ApplicationEvent.KeyStatusChanged) { + this.onAppKeyChange(); + } + }); + } + + onAppEvent(eventName: ApplicationEvent) { + /** Optional override */ + } + + /** @override */ + async onAppStart() { + await this.resetState(); + } + + async onAppLaunch() { + /** Optional override */ + } + + async onAppKeyChange() { + /** Optional override */ + } + + onAppIncrementalSync() { + /** Optional override */ + } + + onAppFullSync() { + /** Optional override */ + } + +} diff --git a/app/assets/javascripts/views/application/application-view.pug b/app/assets/javascripts/views/application/application-view.pug new file mode 100644 index 000000000..fde4ff7d3 --- /dev/null +++ b/app/assets/javascripts/views/application/application-view.pug @@ -0,0 +1,17 @@ +.main-ui-view( + ng-class='self.platformString' +) + #app.app( + ng-class='self.state.appClass', + ng-if='!self.state.needsUnlock && self.state.ready' + ) + tags-view(application='self.application') + notes-view(application='self.application') + editor-group-view( + application='self.application' + ) + + footer-view( + ng-if='!self.state.needsUnlock && self.state.ready' + application='self.application' + ) \ No newline at end of file diff --git a/app/assets/javascripts/views/application/application_view.ts b/app/assets/javascripts/views/application/application_view.ts new file mode 100644 index 000000000..d690087fd --- /dev/null +++ b/app/assets/javascripts/views/application/application_view.ts @@ -0,0 +1,332 @@ +import { ComponentModalScope } from './../../directives/views/componentModal'; +import { WebDirective, PermissionsModalScope } from '@/types'; +import { getPlatformString } from '@/utils'; +import template from './application-view.pug'; +import { AppStateEvent } from '@/ui_models/app_state'; +import { ApplicationEvent, SNComponent } from 'snjs'; +import angular from 'angular'; +import { + PANEL_NAME_NOTES, + PANEL_NAME_TAGS +} from '@/views/constants'; +import { + STRING_SESSION_EXPIRED, + STRING_DEFAULT_FILE_ERROR +} from '@/strings'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { PermissionDialog } from '@node_modules/snjs/dist/@types/services/component_manager'; +import { alertDialog } from '@/services/alertService'; + +class ApplicationViewCtrl extends PureViewCtrl { + private $compile?: ng.ICompileService + private $location?: ng.ILocationService + private $rootScope?: ng.IRootScopeService + public platformString: string + private completedInitialSync = false + private syncStatus: any + private notesCollapsed = false + private tagsCollapsed = false + private showingDownloadStatus = false + private uploadSyncStatus: any + private lastAlertShownTimeStamp = 0; + private showingInvalidSessionAlert = false; + + /* @ngInject */ + constructor( + $compile: ng.ICompileService, + $location: ng.ILocationService, + $rootScope: ng.IRootScopeService, + $timeout: ng.ITimeoutService + ) { + super($timeout); + this.$location = $location; + this.$rootScope = $rootScope; + this.$compile = $compile; + this.platformString = getPlatformString(); + this.state = { appClass: '' }; + this.onDragDrop = this.onDragDrop.bind(this); + this.onDragOver = this.onDragOver.bind(this); + this.openModalComponent = this.openModalComponent.bind(this); + this.presentPermissionsDialog = this.presentPermissionsDialog.bind(this); + this.addDragDropHandlers(); + } + + deinit() { + this.$location = undefined; + this.$rootScope = undefined; + this.$compile = undefined; + (this.application as any) = undefined; + window.removeEventListener('dragover', this.onDragOver, true); + window.removeEventListener('drop', this.onDragDrop, true); + (this.onDragDrop as any) = undefined; + (this.onDragOver as any) = undefined; + (this.openModalComponent as any) = undefined; + (this.presentPermissionsDialog as any) = undefined; + super.deinit(); + } + + $onInit() { + super.$onInit(); + this.loadApplication(); + } + + async loadApplication() { + await this.application!.prepareForLaunch({ + receiveChallenge: async (challenge) => { + this.application!.promptForChallenge(challenge); + } + }); + await this.application!.launch(); + + } + + async onAppStart() { + super.onAppStart(); + this.overrideComponentManagerFunctions(); + this.application!.componentManager!.setDesktopManager( + this.application!.getDesktopService() + ); + this.setState({ + ready: true, + needsUnlock: this.application!.hasPasscode() + }); + } + + async onAppLaunch() { + super.onAppLaunch(); + this.setState({ needsUnlock: false }); + this.handleAutoSignInFromParams(); + } + + onUpdateAvailable() { + this.$rootScope!.$broadcast('new-update-available'); + }; + + /** @override */ + async onAppEvent(eventName: ApplicationEvent) { + super.onAppEvent(eventName); + if (eventName === ApplicationEvent.LocalDataIncrementalLoad) { + this.updateLocalDataStatus(); + } else if ( + eventName === ApplicationEvent.SyncStatusChanged || + eventName === ApplicationEvent.FailedSync + ) { + this.updateSyncStatus(); + } else if (eventName === ApplicationEvent.LocalDataLoaded) { + this.updateLocalDataStatus(); + } else if (eventName === ApplicationEvent.WillSync) { + if (!this.completedInitialSync) { + this.syncStatus = this.application!.getStatusService().replaceStatusWithString( + this.syncStatus, + "Syncing..." + ); + } + } else if (eventName === ApplicationEvent.CompletedFullSync) { + if (!this.completedInitialSync) { + this.syncStatus = this.application!.getStatusService().removeStatus(this.syncStatus); + this.completedInitialSync = true; + } + } else if (eventName === ApplicationEvent.InvalidSyncSession) { + this.showInvalidSessionAlert(); + } else if (eventName === ApplicationEvent.LocalDatabaseReadError) { + this.application!.alertService!.alert( + 'Unable to load local database. Please restart the app and try again.' + ); + } else if (eventName === ApplicationEvent.LocalDatabaseWriteError) { + this.application!.alertService!.alert( + 'Unable to write to local database. Please restart the app and try again.' + ); + } + } + + /** @override */ + async onAppStateEvent(eventName: AppStateEvent, data?: any) { + if (eventName === AppStateEvent.PanelResized) { + if (data.panel === PANEL_NAME_NOTES) { + this.notesCollapsed = data.collapsed; + } + if (data.panel === PANEL_NAME_TAGS) { + this.tagsCollapsed = data.collapsed; + } + let appClass = ""; + if (this.notesCollapsed) { appClass += "collapsed-notes"; } + if (this.tagsCollapsed) { appClass += " collapsed-tags"; } + this.setState({ appClass }); + } else if (eventName === AppStateEvent.WindowDidFocus) { + if (!(await this.application!.isLocked())) { + this.application!.sync(); + } + } + } + + updateLocalDataStatus() { + const syncStatus = this.application!.getSyncStatus(); + const stats = syncStatus.getStats(); + const encryption = this.application!.isEncryptionAvailable(); + if (stats.localDataDone) { + this.syncStatus = this.application!.getStatusService().removeStatus(this.syncStatus); + return; + } + const notesString = `${stats.localDataCurrent}/${stats.localDataTotal} items...`; + const loadingStatus = encryption + ? `Decrypting ${notesString}` + : `Loading ${notesString}`; + this.syncStatus = this.application!.getStatusService().replaceStatusWithString( + this.syncStatus, + loadingStatus + ); + } + + updateSyncStatus() { + const syncStatus = this.application!.getSyncStatus(); + const stats = syncStatus.getStats(); + if (syncStatus.hasError()) { + this.syncStatus = this.application!.getStatusService().replaceStatusWithString( + this.syncStatus, + 'Unable to Sync' + ); + } else if (stats.downloadCount > 20) { + const text = `Downloading ${stats.downloadCount} items. Keep app open.`; + this.syncStatus = this.application!.getStatusService().replaceStatusWithString( + this.syncStatus, + text + ); + this.showingDownloadStatus = true; + } else if (this.showingDownloadStatus) { + this.showingDownloadStatus = false; + const text = "Download Complete."; + this.syncStatus = this.application!.getStatusService().replaceStatusWithString( + this.syncStatus, + text + ); + setTimeout(() => { + this.syncStatus = this.application!.getStatusService().removeStatus(this.syncStatus); + }, 2000); + } else if (stats.uploadTotalCount > 20) { + this.uploadSyncStatus = this.application!.getStatusService().replaceStatusWithString( + this.uploadSyncStatus, + `Syncing ${stats.uploadCompletionCount}/${stats.uploadTotalCount} items...` + ); + } else { + if (this.syncStatus) { + this.syncStatus = this.application!.getStatusService().removeStatus( + this.syncStatus + ); + } + if (this.uploadSyncStatus) { + this.uploadSyncStatus = this.application!.getStatusService().removeStatus( + this.uploadSyncStatus + ); + } + } + } + + openModalComponent(component: SNComponent) { + const scope = this.$rootScope!.$new(true) as Partial; + scope.componentUuid = component.uuid; + scope.application = this.application; + const el = this.$compile!( + "" + )(scope as any); + angular.element(document.body).append(el); + } + + presentPermissionsDialog(dialog: PermissionDialog) { + const scope = this.$rootScope!.$new(true) as PermissionsModalScope; + scope.permissionsString = dialog.permissionsString; + scope.component = dialog.component; + scope.callback = dialog.callback; + const el = this.$compile!( + "" + )(scope as any); + angular.element(document.body).append(el); + } + + overrideComponentManagerFunctions() { + this.application!.componentManager!.openModalComponent = this.openModalComponent; + this.application!.componentManager!.presentPermissionsDialog = this.presentPermissionsDialog; + } + + showInvalidSessionAlert() { + /** Don't show repeatedly; at most 30 seconds in between */ + const SHOW_INTERVAL = 30 * 1000; + if ( + !this.showingInvalidSessionAlert && + (Date.now() - this.lastAlertShownTimeStamp) > SHOW_INTERVAL + ) { + this.lastAlertShownTimeStamp = Date.now(); + this.showingInvalidSessionAlert = true; + setTimeout(async () => { + await alertDialog({ + text: STRING_SESSION_EXPIRED + }); + this.showingInvalidSessionAlert = false; + }, 500); + } + } + + addDragDropHandlers() { + /** + * Disable dragging and dropping of files (but allow text) into main SN interface. + * both 'dragover' and 'drop' are required to prevent dropping of files. + * This will not prevent extensions from receiving drop events. + */ + window.addEventListener('dragover', this.onDragOver, true); + window.addEventListener('drop', this.onDragDrop, true); + } + + onDragOver(event: DragEvent) { + if (event.dataTransfer!.files.length > 0) { + event.preventDefault(); + } + } + + onDragDrop(event: DragEvent) { + if (event.dataTransfer!.files.length > 0) { + event.preventDefault(); + this.application!.alertService!.alert( + STRING_DEFAULT_FILE_ERROR + ); + } + } + + async handleAutoSignInFromParams() { + const params = this.$location!.search(); + const server = params.server; + const email = params.email; + const password = params.pw; + if (!server || !email || !password) return; + + const user = this.application!.getUser(); + if (user) { + if (user.email === email && await this.application!.getHost() === server) { + /** Already signed in, return */ + return; + } else { + /** Sign out */ + await this.application!.signOut(); + } + } + await this.application!.setHost(server); + this.application!.signIn( + email, + password, + ); + } +} + +export class ApplicationView extends WebDirective { + constructor() { + super(); + this.template = template; + this.controller = ApplicationViewCtrl; + this.replace = true; + this.controllerAs = 'self'; + this.bindToController = true; + this.scope = { + application: '=' + }; + } +} diff --git a/app/assets/javascripts/views/application_group/application-group-view.pug b/app/assets/javascripts/views/application_group/application-group-view.pug new file mode 100644 index 000000000..fa901e39d --- /dev/null +++ b/app/assets/javascripts/views/application_group/application-group-view.pug @@ -0,0 +1,4 @@ +application-view( + ng-repeat='application in self.applications', + application='application' +) \ No newline at end of file diff --git a/app/assets/javascripts/views/application_group/application_group_view.ts b/app/assets/javascripts/views/application_group/application_group_view.ts new file mode 100644 index 000000000..bfe016bb5 --- /dev/null +++ b/app/assets/javascripts/views/application_group/application_group_view.ts @@ -0,0 +1,40 @@ +import { ApplicationGroup } from '@/ui_models/application_group'; +import { WebDirective } from '@/types'; +import template from './application-group-view.pug'; +import { WebApplication } from '@/ui_models/application'; + +class ApplicationGroupViewCtrl { + + private $timeout: ng.ITimeoutService + private applicationGroup: ApplicationGroup + public applications: WebApplication[] = [] + + /* @ngInject */ + constructor( + $timeout: ng.ITimeoutService, + mainApplicationGroup: ApplicationGroup + ) { + this.$timeout = $timeout; + this.applicationGroup = mainApplicationGroup; + this.applicationGroup.addApplicationChangeObserver(() => { + this.reload(); + }); + } + + reload() { + this.$timeout(() => { + this.applications = this.applicationGroup.getApplications(); + }); + } +} + +export class ApplicationGroupView extends WebDirective { + constructor() { + super(); + this.template = template; + this.controller = ApplicationGroupViewCtrl; + this.replace = true; + this.controllerAs = 'self'; + this.bindToController = true; + } +} diff --git a/app/assets/javascripts/views/challenge_modal/challenge-modal.pug b/app/assets/javascripts/views/challenge_modal/challenge-modal.pug new file mode 100644 index 000000000..9ad61505e --- /dev/null +++ b/app/assets/javascripts/views/challenge_modal/challenge-modal.pug @@ -0,0 +1,55 @@ +.sk-modal-background(ng-click="ctrl.cancel()") +#privileges-modal.sk-modal-content + .sn-component + .sk-panel + .sk-panel-header + .sk-panel-header-title {{ctrl.title}} + .sk-panel-content + .sk-panel-section + div(ng-repeat="type in ctrl.state.types") + .sk-p.sk-bold.sk-panel-row.centered + strong {{ctrl.promptForChallenge(type)}} + .sk-panel-row + input.sk-input.contrast( + ng-model="ctrl.state.values[type].value" + should-focus="$index == 0" + sn-autofocus="true" + sn-enter="ctrl.submit()" , + ng-change="ctrl.onTextValueChange(type)" + type="password" + ) + .sk-panel-row.centered + label.sk-label.danger( + ng-if="ctrl.state.values[type].invalid" + ) Invalid authentication. Please try again. + .sk-panel-footer.extra-padding + .sk-button.info.big.block.bold( + ng-click="ctrl.submit()", + ng-class="{'info' : !ctrl.state.processing, 'neutral': ctrl.state.processing}" + ng-disabled="ctrl.state.processing" + ) + .sk-label {{ctrl.state.processing ? 'Generating Keys...' : 'Submit'}} + .sk-panel-row(ng-if="ctrl.cancelable") + a.sk-panel-row.sk-a.info.centered( + ng-if="ctrl.cancelable" + ng-click="ctrl.cancel()" + ) Cancel + + .sk-panel-footer(ng-if="ctrl.state.showForgotPasscodeLink") + a.sk-panel-row.sk-a.info.centered( + ng-if="!ctrl.state.forgotPasscode" + ng-click="ctrl.onForgotPasscodeClick()" + ) Forgot your passcode? + p.sk-panel-row.sk-p(ng-if="ctrl.state.forgotPasscode"). + {{ + ctrl.state.hasAccount + ? "If you forgot your local passcode, your only option is to clear + your local data from this device and sign back in to your account." + : "If you forgot your local passcode, your only option is + to delete your data." + }} + a.sk-panel-row.sk-a.danger.centered( + ng-if="ctrl.state.forgotPasscode" + ng-click="ctrl.destroyLocalData()" + ) Delete Local Data + .sk-panel-row diff --git a/app/assets/javascripts/views/challenge_modal/challenge_modal.ts b/app/assets/javascripts/views/challenge_modal/challenge_modal.ts new file mode 100644 index 000000000..d054414bf --- /dev/null +++ b/app/assets/javascripts/views/challenge_modal/challenge_modal.ts @@ -0,0 +1,228 @@ +import { WebApplication } from '@/ui_models/application'; +import template from './challenge-modal.pug'; +import { + ChallengeType, + ChallengeValue, + removeFromArray, + Challenge, + ChallengeReason, +} from 'snjs'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { WebDirective } from '@/types'; +import { confirmDialog } from '@/services/alertService'; +import { + STRING_SIGN_OUT_CONFIRMATION, + STRING_ENTER_ACCOUNT_PASSCODE, + STRING_ENTER_ACCOUNT_PASSWORD, + STRING_ENTER_PASSCODE_FOR_MIGRATION, + STRING_STORAGE_UPDATE, + STRING_AUTHENTICATION_REQUIRED +} from '@/strings'; + +type InputValue = { + value: string + invalid: boolean +} + +type Values = Record + +type ChallengeModalState = { + types: ChallengeType[] + values: Partial + processing: boolean, + forgotPasscode: boolean, + showForgotPasscodeLink: boolean, +} + +class ChallengeModalCtrl extends PureViewCtrl { + private $element: JQLite + private processingTypes: ChallengeType[] = [] + application!: WebApplication + challenge!: Challenge + private cancelable = false + + /* @ngInject */ + constructor( + $element: JQLite, + $timeout: ng.ITimeoutService + ) { + super($timeout); + this.$element = $element; + } + + getState() { + return this.state as ChallengeModalState; + } + + $onInit() { + super.$onInit(); + const values = {} as Values; + const types = this.challenge.types; + for (const type of types) { + values[type] = { + value: '', + invalid: false + }; + } + let showForgotPasscodeLink: boolean; + switch (this.challenge.reason) { + case ChallengeReason.ApplicationUnlock: + showForgotPasscodeLink = true; + this.cancelable = false; + break; + case ChallengeReason.Migration: + showForgotPasscodeLink = true; + this.cancelable = false; + break; + case ChallengeReason.ProtocolUpgrade: + showForgotPasscodeLink = false; + this.cancelable = true; + break; + case ChallengeReason.ResaveRootKey: + showForgotPasscodeLink = false; + this.cancelable = true; + break; + } + this.cancelable = !showForgotPasscodeLink + this.setState({ + types, + values, + processing: false, + forgotPasscode: false, + showForgotPasscodeLink, + hasAccount: this.application.hasAccount(), + }); + this.application.setChallengeCallbacks({ + challenge: this.challenge, + onValidValue: (value) => { + this.getState().values[value.type]!.invalid = false; + removeFromArray(this.processingTypes, value.type); + this.reloadProcessingStatus(); + }, + onInvalidValue: (value) => { + this.getState().values[value.type]!.invalid = true; + removeFromArray(this.processingTypes, value.type); + this.reloadProcessingStatus(); + }, + onComplete: () => { + this.dismiss(); + }, + }); + } + + deinit() { + (this.application as any) = undefined; + (this.challenge as any) = undefined; + super.deinit(); + } + + reloadProcessingStatus() { + this.setState({ + processing: this.processingTypes.length > 0 + }); + } + + get title(): string { + if (this.challenge.reason === ChallengeReason.Migration) { + return STRING_STORAGE_UPDATE; + } else { + return STRING_AUTHENTICATION_REQUIRED; + } + } + + promptForChallenge(challenge: ChallengeType): string { + if (challenge === ChallengeType.LocalPasscode) { + if (this.challenge.reason === ChallengeReason.Migration) { + return STRING_ENTER_PASSCODE_FOR_MIGRATION; + } + return STRING_ENTER_ACCOUNT_PASSCODE; + } else { + return STRING_ENTER_ACCOUNT_PASSWORD; + } + } + + async destroyLocalData() { + if (await confirmDialog({ + text: STRING_SIGN_OUT_CONFIRMATION, + confirmButtonStyle: "danger" + })) { + await this.application.signOut(); + this.dismiss(); + }; + } + + cancel() { + if (this.cancelable) { + this.application!.cancelChallenge(this.challenge); + this.dismiss(); + } + } + + onForgotPasscodeClick() { + this.setState({ + forgotPasscode: true + }); + } + + onTextValueChange(challenge: ChallengeType) { + const values = this.getState().values; + values[challenge]!.invalid = false; + this.setState({ values }); + } + + validate() { + const failed = []; + for (const type of this.getState().types) { + const value = this.getState().values[type]; + if (!value || value.value.length === 0) { + this.getState().values[type]!.invalid = true; + } + } + return failed.length === 0; + } + + async submit() { + if (!this.validate()) { + return; + } + await this.setState({ processing: true }); + const values = []; + for (const key of Object.keys(this.getState().values)) { + const type = Number(key) as ChallengeType; + if (this.getState().values[type]!.invalid) { + continue; + } + const rawValue = this.getState().values[type]!.value; + const value = new ChallengeValue(type, rawValue); + values.push(value); + } + this.processingTypes = values.map((v) => v.type); + if (values.length > 0) { + this.application.submitValuesForChallenge(this.challenge, values); + } else { + this.setState({ processing: false }); + } + } + + dismiss() { + const elem = this.$element; + const scope = elem.scope(); + scope.$destroy(); + elem.remove(); + } +} + +export class ChallengeModal extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = ChallengeModalCtrl; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + challenge: '=', + application: '=' + }; + } +} diff --git a/app/assets/javascripts/controllers/constants.js b/app/assets/javascripts/views/constants.ts similarity index 100% rename from app/assets/javascripts/controllers/constants.js rename to app/assets/javascripts/views/constants.ts diff --git a/app/assets/templates/editor.pug b/app/assets/javascripts/views/editor/editor-view.pug similarity index 50% rename from app/assets/templates/editor.pug rename to app/assets/javascripts/views/editor/editor-view.pug index ce2d43d68..cec55b349 100644 --- a/app/assets/templates/editor.pug +++ b/app/assets/javascripts/views/editor/editor-view.pug @@ -1,59 +1,61 @@ #editor-column.section.editor.sn-component(aria-label='Note') .sn-component .sk-app-bar.no-edges( - ng-if='self.state.note.locked', - ng-init="self.lockText = 'Note Locked'", - ng-mouseleave="self.lockText = 'Note Locked'", + ng-if='self.noteLocked', + ng-init="self.lockText = 'Note Locked'", + ng-mouseleave="self.lockText = 'Note Locked'", ng-mouseover="self.lockText = 'Unlock'" ) .left .sk-app-bar-item(ng-click='self.toggleLockNote()') .sk-label.warning i.icon.ion-locked - | {{self.lockText}} + | {{self.lockText}} #editor-title-bar.section-title-bar( - ng-class="{'locked' : self.state.note.locked}", - ng-show='self.state.note && !self.state.note.errorDecrypting' + ng-class="{'locked' : self.noteLocked}", + ng-show='self.note && !self.note.errorDecrypting' ) .title input#note-title-editor.input( - ng-blur='self.onNameBlur()', - ng-change='self.onTitleChange()', - ng-disabled='self.state.note.locked', - ng-focus='self.onNameFocus()', - ng-keyup='$event.keyCode == 13 && self.onTitleEnter($event)', - ng-model='self.state.note.title', - select-on-click='true', - spellcheck='false') + ng-blur='self.onTitleBlur()', + ng-change='self.onTitleChange()', + ng-disabled='self.noteLocked', + ng-focus='self.onTitleFocus()', + ng-keyup='$event.keyCode == 13 && self.onTitleEnter($event)', + ng-model='self.editorValues.title', + select-on-focus='true', + spellcheck='false' + ) #save-status .message( ng-class="{'warning sk-bold': self.state.syncTakingTooLong, 'danger sk-bold': self.state.saveError}" ) {{self.state.noteStatus.message}} .desc(ng-show='self.state.noteStatus.desc') {{self.state.noteStatus.desc}} .editor-tags - #note-tags-component-container(ng-if='self.state.tagsComponent') + #note-tags-component-container(ng-if='self.activeTagsComponent') component-view.component-view( - component='self.state.tagsComponent', - ng-class="{'locked' : self.state.note.locked}", - ng-style="self.state.note.locked && {'pointer-events' : 'none'}" + component-uuid='self.activeTagsComponent.uuid', + ng-class="{'locked' : self.noteLocked}", + ng-style="self.noteLocked && {'pointer-events' : 'none'}", + application='self.application' ) input.tags-input( - ng-blur='self.saveTags()', - ng-disabled='self.state.note.locked', - ng-if='!(self.state.tagsComponent && self.state.tagsComponent.active)', - ng-keyup='$event.keyCode == 13 && $event.target.blur();', - ng-model='self.state.mutable.tagsString', - placeholder='#tags', - spellcheck='false', + ng-blur='self.onTagsInputBlur()', + ng-disabled='self.noteLocked', + ng-if='!self.activeTagsComponent', + ng-keyup='$event.keyCode == 13 && $event.target.blur();', + ng-model='self.editorValues.tagsInputValue', + placeholder='#tags', + spellcheck='false', type='text' ) - .sn-component(ng-if='self.state.note') + .sn-component(ng-if='self.note') #editor-menu-bar.sk-app-bar.no-edges .left .sk-app-bar-item( - click-outside=`self.setMenuState('showOptionsMenu', false)`, - is-open='self.state.showOptionsMenu', - ng-class="{'selected' : self.state.showOptionsMenu}", + click-outside=`self.setMenuState('showOptionsMenu', false)`, + is-open='self.state.showOptionsMenu', + ng-class="{'selected' : self.state.showOptionsMenu}", ng-click="self.toggleMenu('showOptionsMenu')" ) .sk-label Options @@ -62,192 +64,194 @@ .sk-menu-panel-header .sk-menu-panel-header-title Note Options menu-row( - action='self.selectedMenuItem(true); self.togglePin()', - desc="'Pin or unpin a note from the top of your list'", - label="self.state.note.pinned ? 'Unpin' : 'Pin'" + action='self.selectedMenuItem(true); self.togglePin()' + desc="'Pin or unpin a note from the top of your list'", + label="self.note.pinned ? 'Unpin' : 'Pin'" ) menu-row( - action='self.selectedMenuItem(true); self.toggleArchiveNote()', - desc="'Archive or unarchive a note from your Archived system tag'", - label="self.state.note.archived ? 'Unarchive' : 'Archive'" + action='self.selectedMenuItem(true); self.toggleArchiveNote()' + desc="'Archive or unarchive a note from your Archived system tag'", + label="self.note.archived ? 'Unarchive' : 'Archive'" ) menu-row( - action='self.selectedMenuItem(true); self.toggleLockNote()', - desc="'Locking notes prevents unintentional editing'", - label="self.state.note.locked ? 'Unlock' : 'Lock'" + action='self.selectedMenuItem(true); self.toggleLockNote()' + desc="'Locking notes prevents unintentional editing'", + label="self.noteLocked ? 'Unlock' : 'Lock'" ) menu-row( - action='self.selectedMenuItem(true); self.toggleProtectNote()', - desc=`'Protecting a note will require credentials to view - it (Manage Privileges via Account menu)'`, - label="self.state.note.content.protected ? 'Unprotect' : 'Protect'" + action='self.selectedMenuItem(true); self.toggleProtectNote()' + desc=`'Protecting a note will require credentials to view + it (Manage Privileges via Account menu)'`, + label="self.note.protected ? 'Unprotect' : 'Protect'" ) menu-row( - action='self.selectedMenuItem(true); self.toggleNotePreview()', - circle="self.state.note.content.hidePreview ? 'danger' : 'success'", - circle-align="'right'", - desc="'Hide or unhide the note preview from the list of notes'", + action='self.selectedMenuItem(true); self.toggleNotePreview()' + circle="self.note.hidePreview ? 'danger' : 'success'", + circle-align="'right'", + desc="'Hide or unhide the note preview from the list of notes'", label="'Preview'" ) menu-row( - action='self.selectedMenuItem(); self.deleteNote()', - desc="'Send this note to the trash'", - label="'Move to Trash'", - ng-show='!self.state.altKeyDown && !self.state.note.content.trashed && !self.state.note.errorDecrypting', + action='self.selectedMenuItem(); self.deleteNote()' + desc="'Send this note to the trash'", + label="'Move to Trash'", + ng-show='!self.state.altKeyDown && !self.note.trashed && !self.note.errorDecrypting', stylekit-class="'warning'" ) menu-row( - action='self.selectedMenuItem(); self.deleteNotePermanantely()', - desc="'Delete this note permanently from all your devices'", - label="'Delete Permanently'", - ng-show='!self.state.note.content.trashed && self.state.note.errorDecrypting', + action='self.selectedMenuItem(); self.deleteNotePermanantely()' + desc="'Delete this note permanently from all your devices'", + label="'Delete Permanently'", + ng-show='!self.note.trashed && self.note.errorDecrypting', stylekit-class="'danger'" ) - div(ng-if='self.state.note.content.trashed || self.state.altKeyDown') + div(ng-if='self.note.trashed || self.state.altKeyDown') menu-row( - action='self.selectedMenuItem(true); self.restoreTrashedNote()', - desc="'Undelete this note and restore it back into your notes'", - label="'Restore'", - ng-show='self.state.note.content.trashed', + action='self.selectedMenuItem(true); self.restoreTrashedNote()' + desc="'Undelete this note and restore it back into your notes'", + label="'Restore'", + ng-show='self.note.trashed', stylekit-class="'info'" ) menu-row( - action='self.selectedMenuItem(true); self.deleteNotePermanantely()', - desc="'Delete this note permanently from all your devices'", - label="'Delete Permanently'", + action='self.selectedMenuItem(true); self.deleteNotePermanantely()' + desc="'Delete this note permanently from all your devices'", + label="'Delete Permanently'", stylekit-class="'danger'" ) menu-row( - action='self.selectedMenuItem(true); self.emptyTrash()', - desc="'Permanently delete all notes in the trash'", - label="'Empty Trash'", - ng-show='self.state.note.content.trashed || !self.state.altKeyDown', - stylekit-class="'danger'", + action='self.selectedMenuItem(true); self.emptyTrash()' + desc="'Permanently delete all notes in the trash'", + label="'Empty Trash'", + ng-show='self.note.trashed || !self.state.altKeyDown', + stylekit-class="'danger'", subtitle="self.getTrashCount() + ' notes in trash'" ) .sk-menu-panel-section .sk-menu-panel-header .sk-menu-panel-header-title Global Display menu-row( - action="self.selectedMenuItem(true); self.toggleKey(self.prefKeyMonospace)", - circle="self.state.monospaceEnabled ? 'success' : 'neutral'", - desc="'Toggles the font style for the default editor'", - disabled='self.state.selectedEditor', - label="'Monospace Font'", - subtitle="self.state.selectedEditor ? 'Not available with editor extensions' : null" + action="self.selectedMenuItem(true); self.toggleWebPrefKey(self.prefKeyMonospace)" + circle="self.state.monospaceFont ? 'success' : 'neutral'", + desc="'Toggles the font style for the default editor'", + disabled='self.activeEditorComponent', + label="'Monospace Font'", + subtitle="self.activeEditorComponent ? 'Not available with editor extensions' : null" ) menu-row( - action="self.selectedMenuItem(true); self.toggleKey(self.prefKeySpellcheck)", - circle="self.state.spellcheck ? 'success' : 'neutral'", - desc="'Toggles spellcheck for the default editor'", - disabled='self.state.selectedEditor', - label="'Spellcheck'", + action="self.selectedMenuItem(true); self.toggleWebPrefKey(self.prefKeySpellcheck)" + circle="self.state.spellcheck ? 'success' : 'neutral'", + desc="'Toggles spellcheck for the default editor'", + disabled='self.activeEditorComponent', + label="'Spellcheck'", subtitle=` - self.state.selectedEditor - ? 'Not available with editor extensions' + self.activeEditorComponent + ? 'Not available with editor extensions' : (self.state.isDesktop ? 'May degrade editor performance' : null) `) menu-row( - action="self.selectedMenuItem(true); self.toggleKey(self.prefKeyMarginResizers)", - circle="self.state.marginResizersEnabled ? 'success' : 'neutral'", - desc="'Allows for editor left and right margins to be resized'", - faded='!self.state.marginResizersEnabled', + action="self.selectedMenuItem(true); self.toggleWebPrefKey(self.prefKeyMarginResizers)" + circle="self.state.marginResizersEnabled ? 'success' : 'neutral'", + desc="'Allows for editor left and right margins to be resized'", + faded='!self.state.marginResizersEnabled', label="'Margin Resizers'" ) .sk-app-bar-item( click-outside=`self.setMenuState('showEditorMenu', false)` - is-open='self.state.showEditorMenu', - ng-class="{'selected' : self.state.showEditorMenu}", + is-open='self.state.showEditorMenu', + ng-class="{'selected' : self.state.showEditorMenu}", ng-click="self.toggleMenu('showEditorMenu')" ) .sk-label Editor editor-menu( - callback='self.editorMenuOnSelect', - current-item='self.state.note', - ng-if='self.state.showEditorMenu', - selected-editor='self.state.selectedEditor' + callback='self.editorMenuOnSelect', + current-item='self.note', + ng-if='self.state.showEditorMenu', + selected-editor-uuid='self.activeEditorComponent && self.activeEditorComponent.uuid', + application='self.application' ) .sk-app-bar-item( - click-outside=`self.setMenuState('showExtensions', false)`, - is-open='self.state.showExtensions', - ng-class="{'selected' : self.state.showExtensions}", + click-outside=`self.setMenuState('showExtensions', false)`, + is-open='self.state.showExtensions', + ng-class="{'selected' : self.state.showExtensions}", ng-click="self.toggleMenu('showExtensions')" ) .sk-label Actions actions-menu( - item='self.state.note', - ng-if='self.state.showExtensions' + item='self.note', + ng-if='self.state.showExtensions', + application='self.application' ) .sk-app-bar-item( - click-outside=`self.setMenuState('showSessionHistory', false)`, - is-open='self.state.showSessionHistory', + click-outside=`self.setMenuState('showSessionHistory', false)`, + is-open='self.state.showSessionHistory', ng-click="self.toggleMenu('showSessionHistory')" ) .sk-label Session History session-history-menu( - item='self.state.note', - ng-if='self.state.showSessionHistory' + item='self.note', + ng-if='self.state.showSessionHistory', + application='self.application' ) - #editor-content.editor-content( - ng-if='self.state.noteReady && !self.state.note.errorDecrypting' - ) + #editor-content.editor-content(ng-if='!self.note.errorDecrypting') panel-resizer.left( - control='self.leftResizeControl', - hoverable='true', - min-width='300', - ng-if='self.state.marginResizersEnabled', - on-resize-finish='self.onPanelResizeFinish', - panel-id="'editor-content'", + control='self.leftPanelPuppet', + hoverable='true', + min-width='300', + ng-if='self.state.marginResizersEnabled', + on-resize-finish='self.onPanelResizeFinish', + panel-id="'editor-content'", property="'left'" ) component-view.component-view( - component='self.state.selectedEditor', - ng-if='self.state.selectedEditor', - on-load='self.onEditorLoad' + component-uuid='self.activeEditorComponent.uuid', + ng-if='self.activeEditorComponent && !self.state.editorComponentUnloading', + on-load='self.onEditorLoad', + application='self.application' ) textarea#note-text-editor.editable( - dir='auto', - ng-attr-spellcheck='{{self.state.spellcheck}}', - ng-change='self.contentChanged()', - ng-click='self.clickedTextArea()', + dir='auto', + ng-attr-spellcheck='{{self.state.spellcheck}}', + ng-change='self.contentChanged()', + ng-click='self.clickedTextArea()', ng-focus='self.onContentFocus()', - ng-if='!self.state.selectedEditor', - ng-model='self.state.note.text', - ng-model-options='{ debounce: self.state.editorDebounce}', - ng-readonly='self.state.note.locked', + ng-if='!self.activeEditorComponent && !self.state.textareaUnloading', + ng-model='self.editorValues.text', + ng-model-options='{ debounce: self.state.editorDebounce}', + ng-readonly='self.noteLocked', ng-trim='false' ) | {{self.onSystemEditorLoad()}} panel-resizer( - control='self.rightResizeControl', - hoverable='true', min-width='300', - ng-if='self.state.marginResizersEnabled', - on-resize-finish='self.onPanelResizeFinish', - panel-id="'editor-content'", + control='self.rightPanelPuppet', + hoverable='true', min-width='300', + ng-if='self.state.marginResizersEnabled', + on-resize-finish='self.onPanelResizeFinish', + panel-id="'editor-content'", property="'right'" ) - .section(ng-show='self.state.note.errorDecrypting') + .section(ng-show='self.note.errorDecrypting') p.medium-padding(style='padding-top: 0 !important;') - | There was an error decrypting this item. Ensure you are running the + | There was an error decrypting this item. Ensure you are running the | latest version of this app, then sign out and sign back in to try again. - #editor-pane-component-stack(ng-show='self.state.note') - #component-stack-menu-bar.sk-app-bar.no-edges(ng-if='self.state.componentStack.length') + #editor-pane-component-stack(ng-show='self.note') + #component-stack-menu-bar.sk-app-bar.no-edges(ng-if='self.state.stackComponents.length') .left .sk-app-bar-item( - ng-click='self.toggleStackComponentForCurrentItem(component)', - ng-repeat='component in self.state.componentStack' + ng-repeat='component in self.state.stackComponents track by component.uuid' + ng-click='self.toggleStackComponentForCurrentItem(component)', ) .sk-app-bar-item-column .sk-circle.small( - ng-class="{'info' : !component.hidden && component.active, 'neutral' : component.hidden || !component.active}" + ng-class="{'info' : !self.stackComponentHidden(component) && component.active, 'neutral' : self.stackComponentHidden(component) || !component.active}" ) .sk-app-bar-item-column .sk-label {{component.name}} .sn-component component-view.component-view.component-stack-item( - component='component', - manual-dealloc='true', - ng-if='component.active', - ng-repeat='component in self.state.componentStack', - ng-show='!component.hidden' - ) + ng-repeat='component in self.state.stackComponents track by component.uuid', + component-uuid='component.uuid', + manual-dealloc='true', + ng-show='!self.stackComponentHidden(component)', + application='self.application' + ) diff --git a/app/assets/javascripts/views/editor/editor_view.ts b/app/assets/javascripts/views/editor/editor_view.ts new file mode 100644 index 000000000..65156a4cc --- /dev/null +++ b/app/assets/javascripts/views/editor/editor_view.ts @@ -0,0 +1,1229 @@ +import { Editor } from '@/ui_models/editor'; +import { WebApplication } from '@/ui_models/application'; +import { PanelPuppet, WebDirective } from '@/types'; +import angular from 'angular'; +import { + ApplicationEvent, + isPayloadSourceRetrieved, + ContentType, + ProtectedAction, + SNComponent, + SNNote, + SNTag, + NoteMutator, + Uuids, + ComponentArea, + ComponentAction, + WebPrefKey, + ComponentMutator, +} from 'snjs'; +import find from 'lodash/find'; +import { isDesktopApplication } from '@/utils'; +import { KeyboardModifier, KeyboardKey } from '@/services/keyboardManager'; +import template from './editor-view.pug'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { AppStateEvent, EventSource } from '@/ui_models/app_state'; +import { + STRING_DELETED_NOTE, + STRING_INVALID_NOTE, + STRING_ELLIPSES, + STRING_DELETE_PLACEHOLDER_ATTEMPT, + STRING_DELETE_LOCKED_ATTEMPT, + StringDeleteNote, + StringEmptyTrash +} from '@/strings'; +import { confirmDialog } from '@/services/alertService'; + +const NOTE_PREVIEW_CHAR_LIMIT = 80; +const MINIMUM_STATUS_DURATION = 400; +const SAVE_TIMEOUT_DEBOUNCE = 350; +const SAVE_TIMEOUT_NO_DEBOUNCE = 100; +const EDITOR_DEBOUNCE = 100; + +const ElementIds = { + NoteTextEditor: 'note-text-editor', + NoteTitleEditor: 'note-title-editor', + EditorContent: 'editor-content', + NoteTagsComponentContainer: 'note-tags-component-container' +}; +const Fonts = { + DesktopMonospaceFamily: `Menlo,Consolas,'DejaVu Sans Mono',monospace`, + WebMonospaceFamily: `monospace`, + SansSerifFamily: `inherit` +}; + +type NoteStatus = { + message?: string + date?: Date +} + +type EditorState = { + stackComponents: SNComponent[] + editorComponent?: SNComponent + tagsComponent?: SNComponent + saveError?: any + noteStatus?: NoteStatus + tagsAsStrings?: string + marginResizersEnabled?: boolean + monospaceFont?: boolean + isDesktop?: boolean + syncTakingTooLong: boolean + showExtensions: boolean + showOptionsMenu: boolean + showEditorMenu: boolean + showSessionHistory: boolean + altKeyDown: boolean + spellcheck: boolean + /** + * Setting to false then true will allow the current editor component-view to be destroyed + * then re-initialized. Used when changing between component editors. + */ + editorUnloading: boolean + /** Setting to true then false will allow the main content textarea to be destroyed + * then re-initialized. Used when reloading spellcheck status. */ + textareaUnloading: boolean + /** Fields that can be directly mutated by the template */ + mutable: {} +} + +type EditorValues = { + title?: string + text?: string + tagsInputValue?: string +} + +function sortAlphabetically(array: SNComponent[]): SNComponent[] { + return array.sort((a, b) => a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1); +} + +class EditorViewCtrl extends PureViewCtrl<{}, EditorState> { + /** Passed through template */ + readonly application!: WebApplication + readonly editor!: Editor + + private leftPanelPuppet?: PanelPuppet + private rightPanelPuppet?: PanelPuppet + private unregisterComponent: any + private saveTimeout?: ng.IPromise + private statusTimeout?: ng.IPromise + private lastEditorFocusEventSource?: EventSource + public editorValues: EditorValues = {} + onEditorLoad?: () => void + + private removeAltKeyObserver?: any + private removeTrashKeyObserver?: any + private removeDeleteKeyObserver?: any + private removeTabObserver?: any + + private removeTagsObserver!: () => void + private removeComponentsObserver!: () => void + + prefKeyMonospace: string + prefKeySpellcheck: string + prefKeyMarginResizers: string + + /* @ngInject */ + constructor($timeout: ng.ITimeoutService) { + super($timeout); + this.leftPanelPuppet = { + onReady: () => this.reloadPreferences() + }; + this.rightPanelPuppet = { + onReady: () => this.reloadPreferences() + }; + /** Used by .pug template */ + this.prefKeyMonospace = WebPrefKey.EditorMonospaceEnabled; + this.prefKeySpellcheck = WebPrefKey.EditorSpellcheck; + this.prefKeyMarginResizers = WebPrefKey.EditorResizersEnabled; + + this.editorMenuOnSelect = this.editorMenuOnSelect.bind(this); + this.onPanelResizeFinish = this.onPanelResizeFinish.bind(this); + this.onEditorLoad = () => { + this.application!.getDesktopService().redoSearch(); + } + } + + deinit() { + this.editor.clearNoteChangeListener(); + this.removeTagsObserver(); + this.removeComponentsObserver(); + (this.removeTagsObserver as any) = undefined; + (this.removeComponentsObserver as any) = undefined; + this.removeAltKeyObserver(); + this.removeAltKeyObserver = undefined; + this.removeTrashKeyObserver(); + this.removeTrashKeyObserver = undefined; + this.removeDeleteKeyObserver(); + this.removeDeleteKeyObserver = undefined; + this.removeTabObserver && this.removeTabObserver(); + this.removeTabObserver = undefined; + this.leftPanelPuppet = undefined; + this.rightPanelPuppet = undefined; + this.onEditorLoad = undefined; + this.unregisterComponent(); + this.unregisterComponent = undefined; + this.saveTimeout = undefined; + this.statusTimeout = undefined; + (this.onPanelResizeFinish as any) = undefined; + (this.editorMenuOnSelect as any) = undefined; + super.deinit(); + } + + getState() { + return this.state as EditorState; + } + + get note() { + return this.editor.note; + } + + $onInit() { + super.$onInit(); + this.registerKeyboardShortcuts(); + this.editor.onNoteChange(() => { + this.handleEditorNoteChange(); + }) + this.editor.onNoteValueChange((note, source) => { + if (isPayloadSourceRetrieved(source!)) { + this.editorValues.title = note.title; + this.editorValues.text = note.text; + this.reloadTagsString(); + } + if (!this.editorValues.title) { + this.editorValues.title = note.title; + } + if (!this.editorValues.text) { + this.editorValues.text = note.text; + } + if (note.lastSyncBegan && note.lastSyncEnd) { + if (note.lastSyncBegan!.getTime() > note.lastSyncEnd!.getTime()) { + this.showSavingStatus() + } else if (note.lastSyncEnd!.getTime() > note.lastSyncBegan!.getTime()) { + this.showAllChangesSavedStatus(); + } + } + }); + } + + /** @override */ + getInitialState() { + return { + stackComponents: [], + editorDebounce: EDITOR_DEBOUNCE, + isDesktop: isDesktopApplication(), + spellcheck: true, + syncTakingTooLong: false, + showExtensions: false, + showOptionsMenu: false, + showEditorMenu: false, + showSessionHistory: false, + altKeyDown: false, + noteStatus: undefined, + editorUnloading: false, + textareaUnloading: false, + mutable: { + tagsString: '' + } + } as EditorState; + } + + async onAppLaunch() { + await super.onAppLaunch(); + this.streamItems(); + this.registerComponentHandler(); + } + + /** @override */ + onAppStateEvent(eventName: AppStateEvent, data: any) { + if (eventName === AppStateEvent.PreferencesChanged) { + this.reloadPreferences(); + } + } + + /** @override */ + onAppEvent(eventName: ApplicationEvent) { + if (eventName === ApplicationEvent.HighLatencySync) { + this.setState({ syncTakingTooLong: true }); + } else if (eventName === ApplicationEvent.CompletedFullSync) { + this.setState({ syncTakingTooLong: false }); + const isInErrorState = this.state.saveError; + /** if we're still dirty, don't change status, a sync is likely upcoming. */ + if (!this.note.dirty && isInErrorState) { + this.showAllChangesSavedStatus(); + } + } else if (eventName === ApplicationEvent.FailedSync) { + /** + * Only show error status in editor if the note is dirty. + * Otherwise, it means the originating sync came from somewhere else + * and we don't want to display an error here. + */ + if (this.note.dirty) { + this.showErrorStatus(); + } + } else if (eventName === ApplicationEvent.LocalDatabaseWriteError) { + this.showErrorStatus({ + message: "Offline Saving Issue", + desc: "Changes not saved" + }); + } + } + + async handleEditorNoteChange() { + this.cancelPendingSetStatus(); + await this.setState({ + showExtensions: false, + showOptionsMenu: false, + showEditorMenu: false, + showSessionHistory: false, + altKeyDown: false, + noteStatus: undefined + }); + const note = this.editor.note; + this.editorValues.title = note.title; + this.editorValues.text = note.text; + this.reloadEditor(); + this.reloadTagsString(); + this.reloadPreferences(); + this.reloadStackComponents(); + if (note.safeText().length === 0) { + this.focusTitle(); + } + } + + /** + * Because note.locked accesses note.content.appData, + * we do not want to expose the template to direct access to note.locked, + * otherwise an exception will occur when trying to access note.locked if the note + * is deleted. There is potential for race conditions to occur with setState, where a + * previous setState call may have queued a digest cycle, and the digest cycle triggers + * on a deleted note. + */ + get noteLocked() { + if (!this.note || this.note.deleted) { + return false; + } + return this.note.locked; + } + + streamItems() { + this.removeTagsObserver = this.application.streamItems( + ContentType.Tag, + (items) => { + if (!this.note) { + return; + } + for (const tag of items) { + if ( + !this.editorValues.tagsInputValue || + tag.deleted || + tag.hasRelationshipWithItem(this.note) + ) { + this.reloadTagsString(); + break; + } + } + } + ); + + this.removeComponentsObserver = this.application.streamItems( + ContentType.Component, + async (items) => { + if (!this.note) return; + this.reloadStackComponents(); + this.reloadNoteTagsComponent(); + this.reloadEditor(); + } + ); + } + + private async reloadEditor() { + const newEditor = this.application.componentManager!.editorForNote(this.note); + const currentEditor = this.state.editorComponent; + if (currentEditor?.uuid !== newEditor?.uuid) { + await this.setState({ + editorComponent: newEditor, + /** Unload current component view so that we create a new one */ + editorUnloading: true + }); + if (newEditor && !newEditor.active) { + await this.application.componentManager?.activateComponent(newEditor.uuid); + } + await this.setState({ + /** Reload component view */ + editorUnloading: false + }); + this.reloadFont(); + this.application.componentManager!.contextItemDidChangeInArea(ComponentArea.Editor); + } + } + + setMenuState(menu: string, state: boolean) { + this.setState({ + [menu]: state + }); + this.closeAllMenus(menu); + } + + toggleMenu(menu: keyof EditorState) { + this.setMenuState(menu, !this.state[menu]); + } + + closeAllMenus(exclude?: string) { + const allMenus = [ + 'showOptionsMenu', + 'showEditorMenu', + 'showExtensions', + 'showSessionHistory' + ]; + const menuState: any = {}; + for (const candidate of allMenus) { + if (candidate !== exclude) { + menuState[candidate] = false; + } + } + this.setState(menuState); + } + + async editorMenuOnSelect(component?: SNComponent) { + this.setMenuState('showEditorMenu', false); + if (!component) { + if (!this.note.prefersPlainEditor) { + await this.application.changeItem(this.note.uuid, (mutator) => { + const noteMutator = mutator as NoteMutator; + noteMutator.prefersPlainEditor = true; + }) + } + if (this.state.editorComponent?.isExplicitlyEnabledForItem(this.note.uuid)) { + await this.disassociateComponentWithCurrentNote(this.state.editorComponent); + } + this.reloadFont(); + } + else if (component.area === ComponentArea.Editor) { + const currentEditor = this.state.editorComponent; + if (currentEditor && component !== currentEditor) { + await this.disassociateComponentWithCurrentNote(currentEditor); + } + const prefersPlain = this.note.prefersPlainEditor; + if (prefersPlain) { + await this.application.changeItem(this.note.uuid, (mutator) => { + const noteMutator = mutator as NoteMutator; + noteMutator.prefersPlainEditor = false; + }) + } + await this.associateComponentWithCurrentNote(component); + } + else if (component.area === ComponentArea.EditorStack) { + await this.toggleStackComponentForCurrentItem(component); + } + /** Dirtying can happen above */ + this.application.sync(); + } + + hasAvailableExtensions() { + return this.application.actionsManager!. + extensionsInContextOfItem(this.note).length > 0; + } + + performFirefoxPinnedTabFix() { + /** + * For Firefox pinned tab issue: + * When a new browser session is started, and SN is in a pinned tab, + * SN is unusable until the tab is reloaded. + */ + if (document.hidden) { + window.location.reload(); + } + } + + /** + * @param bypassDebouncer Calling save will debounce by default. You can pass true to save + * immediately. + * @param isUserModified This field determines if the item will be saved as a user + * modification, thus updating the user modified date displayed in the UI + * @param dontUpdatePreviews Whether this change should update the note's plain and HTML + * preview. + * @param customMutate A custom mutator function. + * @param closeAfterSync Whether this editor should be closed after the sync starts. + * This allows us to make a destructive change, wait for sync to be triggered, then + * close the editor (if we closed the editor before sync began, we'd get an exception, + * since the debouncer will be triggered on a non-existent editor) + */ + async saveNote( + bypassDebouncer = false, + isUserModified = false, + dontUpdatePreviews = false, + customMutate?: (mutator: NoteMutator) => void, + closeAfterSync = false + ) { + this.performFirefoxPinnedTabFix(); + const note = this.note; + if (note.deleted) { + this.application.alertService!.alert( + STRING_DELETED_NOTE + ); + return; + } + if (this.editor.isTemplateNote) { + await this.editor.insertTemplatedNote(); + if (this.appState.selectedTag?.isSmartTag() === false) { + await this.application.changeItem( + this.appState.selectedTag!.uuid, + (mutator) => { + mutator.addItemAsRelationship(note); + } + ) + } + } + if (!this.application.findItem(note.uuid)) { + this.application.alertService!.alert( + STRING_INVALID_NOTE + ); + return; + } + await this.application.changeItem(note.uuid, (mutator) => { + const noteMutator = mutator as NoteMutator; + if (customMutate) { + customMutate(noteMutator); + } + noteMutator.title = this.editorValues.title!; + noteMutator.text = this.editorValues.text!; + if (!dontUpdatePreviews) { + const text = this.editorValues.text || ''; + const truncate = text.length > NOTE_PREVIEW_CHAR_LIMIT; + const substring = text.substring(0, NOTE_PREVIEW_CHAR_LIMIT); + const previewPlain = substring + (truncate ? STRING_ELLIPSES : ''); + noteMutator.preview_plain = previewPlain; + noteMutator.preview_html = undefined; + } + }, isUserModified) + if (this.saveTimeout) { + this.$timeout.cancel(this.saveTimeout); + } + const noDebounce = bypassDebouncer || this.application.noAccount(); + const syncDebouceMs = noDebounce + ? SAVE_TIMEOUT_NO_DEBOUNCE + : SAVE_TIMEOUT_DEBOUNCE; + this.saveTimeout = this.$timeout(() => { + this.application.sync(); + if (closeAfterSync) { + this.appState.closeEditor(this.editor); + } + }, syncDebouceMs); + } + + showSavingStatus() { + this.setStatus( + { message: "Saving..." }, + false + ); + } + + showAllChangesSavedStatus() { + this.setState({ + saveError: false, + syncTakingTooLong: false + }); + this.setStatus({ + message: 'All changes saved', + }); + } + + showErrorStatus(error?: any) { + if (!error) { + error = { + message: "Sync Unreachable", + desc: "Changes saved offline" + }; + } + this.setState({ + saveError: true, + syncTakingTooLong: false + }); + this.setStatus(error); + } + + setStatus(status: { message: string, date?: Date }, wait = true) { + let waitForMs; + if (!this.state.noteStatus || !this.state.noteStatus!.date) { + waitForMs = 0; + } else { + waitForMs = MINIMUM_STATUS_DURATION - ( + new Date().getTime() - this.state.noteStatus!.date!.getTime() + ); + } + if (!wait || waitForMs < 0) { + waitForMs = 0; + } + if (this.statusTimeout) { + this.$timeout.cancel(this.statusTimeout); + } + this.statusTimeout = this.$timeout(() => { + status.date = new Date(); + this.setState({ + noteStatus: status + }); + }, waitForMs); + } + + cancelPendingSetStatus() { + if (this.statusTimeout) { + this.$timeout.cancel(this.statusTimeout); + } + } + + contentChanged() { + this.saveNote( + false, + true + ); + } + + onTitleEnter($event: Event) { + ($event.target as HTMLInputElement).blur(); + this.onTitleChange(); + this.focusEditor(); + } + + onTitleChange() { + this.saveNote( + false, + true, + true, + ); + } + + focusEditor() { + const element = document.getElementById(ElementIds.NoteTextEditor); + if (element) { + this.lastEditorFocusEventSource = EventSource.Script; + element.focus(); + } + } + + focusTitle() { + document.getElementById(ElementIds.NoteTitleEditor)!.focus(); + } + + clickedTextArea() { + this.setMenuState('showOptionsMenu', false); + } + + onTitleFocus() { + + } + + onTitleBlur() { + + } + + onContentFocus() { + this.application.getAppState().editorDidFocus(this.lastEditorFocusEventSource!); + this.lastEditorFocusEventSource = undefined; + } + + selectedMenuItem(hide: boolean) { + if (hide) { + this.setMenuState('showOptionsMenu', false); + } + } + + async deleteNote(permanently: boolean) { + if (this.editor.isTemplateNote) { + this.application.alertService!.alert( + STRING_DELETE_PLACEHOLDER_ATTEMPT + ); + return; + } + const run = async () => { + if (this.note.locked) { + this.application.alertService!.alert( + STRING_DELETE_LOCKED_ATTEMPT + ); + return; + } + const title = this.note.safeTitle().length + ? `'${this.note.title}'` + : "this note"; + const text = StringDeleteNote( + title, + permanently + ); + if (await confirmDialog({ + text, + confirmButtonStyle: 'danger' + })) { + if (permanently) { + this.performNoteDeletion(this.note); + } else { + this.saveNote( + true, + false, + true, + (mutator) => { + mutator.trashed = true; + } + ); + } + }; + }; + const requiresPrivilege = await this.application.privilegesService!.actionRequiresPrivilege( + ProtectedAction.DeleteNote + ); + if (requiresPrivilege) { + this.application.presentPrivilegesModal( + ProtectedAction.DeleteNote, + () => { + run(); + } + ); + } else { + run(); + } + } + + performNoteDeletion(note: SNNote) { + this.application.deleteItem(note); + } + + restoreTrashedNote() { + this.saveNote( + true, + false, + true, + (mutator) => { + mutator.trashed = false; + }, + true + ); + } + + deleteNotePermanantely() { + this.deleteNote(true); + } + + getTrashCount() { + return this.application.getTrashedItems().length; + } + + async emptyTrash() { + const count = this.getTrashCount(); + if (await confirmDialog({ + text: StringEmptyTrash(count), + confirmButtonStyle: 'danger' + })) { + this.application.emptyTrash(); + this.application.sync(); + } + } + + togglePin() { + this.saveNote( + true, + false, + true, + (mutator) => { + mutator.pinned = !this.note.pinned + } + ); + } + + toggleLockNote() { + this.saveNote( + true, + false, + true, + (mutator) => { + mutator.locked = !this.note.locked + } + ); + } + + toggleProtectNote() { + this.saveNote( + true, + false, + true, + (mutator) => { + mutator.protected = !this.note.protected + } + ); + /** Show privileges manager if protection is not yet set up */ + this.application.privilegesService!.actionHasPrivilegesConfigured( + ProtectedAction.ViewProtectedNotes + ).then((configured) => { + if (!configured) { + this.application.presentPrivilegesManagementModal(); + } + }); + } + + toggleNotePreview() { + this.saveNote( + true, + false, + true, + (mutator) => { + mutator.hidePreview = !this.note.hidePreview + } + ); + } + + toggleArchiveNote() { + this.saveNote( + true, + false, + true, + (mutator) => { + mutator.archived = !this.note.archived + }, + /** If we are unarchiving, and we are in the archived tag, close the editor */ + this.note.archived && this.appState.selectedTag?.isArchiveTag + ); + } + + reloadTagsString() { + const tags = this.appState.getNoteTags(this.note); + const string = SNTag.arrayToDisplayString(tags); + this.updateUI(() => { + this.editorValues.tagsInputValue = string; + }) + } + + private addTag(tag: SNTag) { + const tags = this.appState.getNoteTags(this.note); + const strings = tags.map((currentTag) => { + return currentTag.title; + }); + strings.push(tag.title); + this.saveTagsFromStrings(strings); + } + + removeTag(tag: SNTag) { + const tags = this.appState.getNoteTags(this.note); + const strings = tags.map((currentTag) => { + return currentTag.title; + }).filter((title) => { + return title !== tag.title; + }); + this.saveTagsFromStrings(strings); + } + + onTagsInputBlur() { + this.saveTagsFromStrings(); + this.focusEditor(); + } + + public async saveTagsFromStrings(strings?: string[]) { + if ( + !strings + && this.editorValues.tagsInputValue === this.state.tagsAsStrings + ) { + return; + } + if (!strings) { + strings = this.editorValues.tagsInputValue! + .split('#') + .filter((string) => { + return string.length > 0; + }) + .map((string) => { + return string.trim(); + }); + } + const note = this.note; + const currentTags = this.appState.getNoteTags(note); + const removeTags = []; + for (const tag of currentTags) { + if (strings.indexOf(tag.title) === -1) { + removeTags.push(tag); + } + } + for (const tag of removeTags) { + await this.application.changeItem(tag.uuid, (mutator) => { + mutator.removeItemAsRelationship(note); + }) + } + const newRelationships: SNTag[] = []; + for (const title of strings) { + const existingRelationship = find( + currentTags, + { title: title } + ); + if (!existingRelationship) { + newRelationships.push( + await this.application.findOrCreateTag(title) + ); + } + } + if (newRelationships.length > 0) { + await this.application.changeItems( + Uuids(newRelationships), + (mutator) => { + mutator.addItemAsRelationship(note); + } + ) + } + this.application.sync(); + this.reloadTagsString(); + } + + async onPanelResizeFinish(width: number, left: number, isMaxWidth: boolean) { + if (isMaxWidth) { + await this.application.getPrefsService().setUserPrefValue( + WebPrefKey.EditorWidth, + null + ); + } else { + if (width !== undefined && width !== null) { + await this.application.getPrefsService().setUserPrefValue( + WebPrefKey.EditorWidth, + width + ); + this.leftPanelPuppet!.setWidth!(width); + } + } + if (left !== undefined && left !== null) { + await this.application.getPrefsService().setUserPrefValue( + WebPrefKey.EditorLeft, + left + ); + this.rightPanelPuppet!.setLeft!(left); + } + this.application.getPrefsService().syncUserPreferences(); + } + + async reloadPreferences() { + const monospaceFont = this.application.getPrefsService().getValue( + WebPrefKey.EditorMonospaceEnabled, + true + ); + const spellcheck = this.application.getPrefsService().getValue( + WebPrefKey.EditorSpellcheck, + true + ); + const marginResizersEnabled = this.application.getPrefsService().getValue( + WebPrefKey.EditorResizersEnabled, + true + ); + await this.setState({ + monospaceFont, + spellcheck, + marginResizersEnabled + }); + + if (!document.getElementById(ElementIds.EditorContent)) { + /** Elements have not yet loaded due to ng-if around wrapper */ + return; + } + + this.reloadFont(); + + if ( + this.state.marginResizersEnabled && + this.leftPanelPuppet!.ready && + this.rightPanelPuppet!.ready + ) { + const width = this.application.getPrefsService().getValue( + WebPrefKey.EditorWidth, + null + ); + if (width != null) { + this.leftPanelPuppet!.setWidth!(width); + this.rightPanelPuppet!.setWidth!(width); + } + const left = this.application.getPrefsService().getValue( + WebPrefKey.EditorLeft, + null + ); + if (left != null) { + this.leftPanelPuppet!.setLeft!(left); + this.rightPanelPuppet!.setLeft!(left); + } + } + } + + reloadFont() { + const editor = document.getElementById( + ElementIds.NoteTextEditor + ); + if (!editor) { + return; + } + if (this.state.monospaceFont) { + if (this.state.isDesktop) { + editor.style.fontFamily = Fonts.DesktopMonospaceFamily; + } else { + editor.style.fontFamily = Fonts.WebMonospaceFamily; + } + } else { + editor.style.fontFamily = Fonts.SansSerifFamily; + } + } + + async toggleWebPrefKey(key: WebPrefKey) { + const currentValue = (this.state as any)[key]; + await this.application.getPrefsService().setUserPrefValue( + key, + !currentValue, + true + ); + await this.setState({ + [key]: !currentValue + }) + this.reloadFont(); + + if (key === WebPrefKey.EditorSpellcheck) { + /** Allows textarea to reload */ + await this.setState({ textareaUnloading: true }); + await this.setState({ textareaUnloading: false }); + this.reloadFont(); + } else if (key === WebPrefKey.EditorResizersEnabled && this.state[key] === true) { + this.$timeout(() => { + this.leftPanelPuppet!.flash!(); + this.rightPanelPuppet!.flash!(); + }); + } + } + + /** @components */ + + registerComponentHandler() { + this.unregisterComponent = this.application.componentManager!.registerHandler({ + identifier: 'editor', + areas: [ + ComponentArea.NoteTags, + ComponentArea.EditorStack, + ComponentArea.Editor + ], + contextRequestHandler: (componentUuid) => { + const currentEditor = this.state.editorComponent; + if ( + componentUuid === currentEditor?.uuid || + componentUuid === this.state.tagsComponent?.uuid || + Uuids(this.state.stackComponents).includes(componentUuid) + ) { + return this.note; + } + }, + focusHandler: (component, focused) => { + if (component.isEditor() && focused) { + this.closeAllMenus(); + } + }, + actionHandler: (component, action, data) => { + if (action === ComponentAction.SetSize) { + const setSize = ( + element: HTMLElement, + size: { width: number, height: number } + ) => { + const widthString = typeof size.width === 'string' + ? size.width + : `${data.width}px`; + const heightString = typeof size.height === 'string' + ? size.height + : `${data.height}px`; + element.setAttribute( + 'style', + `width: ${widthString}; height: ${heightString};` + ); + }; + if (data.type === 'container') { + if (component.area === ComponentArea.NoteTags) { + const container = document.getElementById( + ElementIds.NoteTagsComponentContainer + ); + setSize(container!, data); + } + } + } + else if (action === ComponentAction.AssociateItem) { + if (data.item.content_type === ContentType.Tag) { + const tag = this.application.findItem(data.item.uuid) as SNTag; + this.addTag(tag); + } + } + else if (action === ComponentAction.DeassociateItem) { + const tag = this.application.findItem(data.item.uuid) as SNTag; + this.removeTag(tag); + } + } + }); + } + + reloadNoteTagsComponent() { + const [tagsComponent] = + this.application.componentManager!.componentsForArea(ComponentArea.NoteTags); + if (tagsComponent?.uuid !== this.state.tagsComponent?.uuid) { + this.setState({ + tagsComponent: tagsComponent?.active ? tagsComponent : undefined + }); + } + this.application.componentManager!.contextItemDidChangeInArea(ComponentArea.NoteTags); + } + + reloadStackComponents() { + this.setState({ + stackComponents: sortAlphabetically( + this.application.componentManager!.componentsForArea(ComponentArea.EditorStack) + .filter(component => component.active) + ) + }); + if (this.note) { + for (const component of this.state.stackComponents) { + if (component.active) { + this.application.componentManager!.setComponentHidden( + component, + !component.isExplicitlyEnabledForItem(this.note.uuid) + ); + } + } + } + this.application.componentManager!.contextItemDidChangeInArea(ComponentArea.EditorStack); + } + + + stackComponentHidden(component: SNComponent) { + return this.application.componentManager?.isComponentHidden(component); + } + + async toggleStackComponentForCurrentItem(component: SNComponent) { + const hidden = this.application.componentManager!.isComponentHidden(component); + if (hidden || !component.active) { + this.application.componentManager!.setComponentHidden(component, false); + await this.associateComponentWithCurrentNote(component); + this.application.componentManager!.contextItemDidChangeInArea(ComponentArea.EditorStack); + } else { + this.application.componentManager!.setComponentHidden(component, true); + await this.disassociateComponentWithCurrentNote(component); + } + this.application.sync(); + } + + async disassociateComponentWithCurrentNote(component: SNComponent) { + const note = this.note; + return this.application.changeItem(component.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.removeAssociatedItemId(note.uuid); + mutator.disassociateWithItem(note.uuid); + }) + } + + async associateComponentWithCurrentNote(component: SNComponent) { + const note = this.note; + return this.application.changeItem(component.uuid, (m) => { + const mutator = m as ComponentMutator; + mutator.removeDisassociatedItemId(note.uuid); + mutator.associateWithItem(note.uuid); + }) + } + + registerKeyboardShortcuts() { + this.removeAltKeyObserver = this.application.getKeyboardService().addKeyObserver({ + modifiers: [ + KeyboardModifier.Alt + ], + onKeyDown: () => { + this.setState({ + altKeyDown: true + }); + }, + onKeyUp: () => { + this.setState({ + altKeyDown: false + }); + } + }); + + this.removeTrashKeyObserver = this.application.getKeyboardService().addKeyObserver({ + key: KeyboardKey.Backspace, + notElementIds: [ + ElementIds.NoteTextEditor, + ElementIds.NoteTitleEditor + ], + modifiers: [KeyboardModifier.Meta], + onKeyDown: () => { + this.deleteNote(false); + }, + }); + + this.removeDeleteKeyObserver = this.application.getKeyboardService().addKeyObserver({ + key: KeyboardKey.Backspace, + modifiers: [ + KeyboardModifier.Meta, + KeyboardModifier.Shift, + KeyboardModifier.Alt + ], + onKeyDown: (event) => { + event.preventDefault(); + this.deleteNote(true); + }, + }); + } + + onSystemEditorLoad() { + if (this.removeTabObserver) { + return; + } + /** + * Insert 4 spaces when a tab key is pressed, + * only used when inside of the text editor. + * If the shift key is pressed first, this event is + * not fired. + */ + const editor = document.getElementById(ElementIds.NoteTextEditor)! as HTMLInputElement; + this.removeTabObserver = this.application.getKeyboardService().addKeyObserver({ + element: editor, + key: KeyboardKey.Tab, + onKeyDown: (event) => { + if (this.note.locked || event.shiftKey) { + return; + } + event.preventDefault(); + /** Using document.execCommand gives us undo support */ + const insertSuccessful = document.execCommand( + 'insertText', + false, + '\t' + ); + if (!insertSuccessful) { + /** document.execCommand works great on Chrome/Safari but not Firefox */ + const start = editor.selectionStart!; + const end = editor.selectionEnd!; + const spaces = ' '; + /** Insert 4 spaces */ + editor.value = editor.value.substring(0, start) + + spaces + editor.value.substring(end); + /** Place cursor 4 spaces away from where the tab key was pressed */ + editor.selectionStart = editor.selectionEnd = start + 4; + } + this.editorValues.text = editor.value; + this.saveNote(true); + }, + }); + + /** + * Handles when the editor is destroyed, + * (and not when our controller is destroyed.) + */ + angular.element(editor).one('$destroy', () => { + this.removeTabObserver(); + this.removeTabObserver = undefined; + }); + } +} + +export class EditorView extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.scope = { + editor: '=', + application: '=' + }; + this.template = template; + this.replace = true; + this.controller = EditorViewCtrl; + this.controllerAs = 'self'; + this.bindToController = true; + } +} diff --git a/app/assets/javascripts/views/editor_group/editor-group-view.pug b/app/assets/javascripts/views/editor_group/editor-group-view.pug new file mode 100644 index 000000000..839645f33 --- /dev/null +++ b/app/assets/javascripts/views/editor_group/editor-group-view.pug @@ -0,0 +1,5 @@ +editor-view( + ng-repeat='editor in self.editors' + application='self.application' + editor='editor' + ) \ No newline at end of file diff --git a/app/assets/javascripts/views/editor_group/editor_group_view.ts b/app/assets/javascripts/views/editor_group/editor_group_view.ts new file mode 100644 index 000000000..3848f133a --- /dev/null +++ b/app/assets/javascripts/views/editor_group/editor_group_view.ts @@ -0,0 +1,35 @@ +import { WebApplication } from '@/ui_models/application'; +import { WebDirective } from './../../types'; +import template from './editor-group-view.pug'; +import { Editor } from '@/ui_models/editor'; + +class EditorGroupViewCtrl { + + private application!: WebApplication + public editors: Editor[] = [] + + /* @ngInject */ + constructor() { + + } + + $onInit() { + this.application.editorGroup.addChangeObserver(() => { + this.editors = this.application.editorGroup.editors; + }) + } +} + +export class EditorGroupView extends WebDirective { + constructor() { + super(); + this.template = template; + this.controller = EditorGroupViewCtrl; + this.replace = true; + this.controllerAs = 'self'; + this.bindToController = true; + this.scope = { + application: '=' + }; + } +} diff --git a/app/assets/templates/footer.pug b/app/assets/javascripts/views/footer/footer-view.pug similarity index 70% rename from app/assets/templates/footer.pug rename to app/assets/javascripts/views/footer/footer-view.pug index 64fa89e75..8af2ae458 100644 --- a/app/assets/templates/footer.pug +++ b/app/assets/javascripts/views/footer/footer-view.pug @@ -2,20 +2,21 @@ #footer-bar.sk-app-bar.no-edges.no-bottom-edge .left .sk-app-bar-item( - click-outside='ctrl.clickOutsideAccountMenu()', + click-outside='ctrl.clickOutsideAccountMenu()', is-open='ctrl.showAccountMenu', ng-click='ctrl.accountMenuPressed()' ) .sk-app-bar-item-column .sk-circle.small( - ng-class="ctrl.error ? 'danger' : (ctrl.getUser() ? 'info' : 'neutral')" + ng-class="ctrl.hasError ? 'danger' : (ctrl.user ? 'info' : 'neutral')" ) .sk-app-bar-item-column - .sk-label.title(ng-class='{red: ctrl.error}') Account + .sk-label.title(ng-class='{red: ctrl.hasError}') Account account-menu( - close-function='ctrl.closeAccountMenu', + close-function='ctrl.closeAccountMenu()', ng-click='$event.stopPropagation()', - ng-if='ctrl.showAccountMenu', + ng-if='ctrl.showAccountMenu', + application='ctrl.application' ) .sk-app-bar-item a.no-decoration.sk-label.title( @@ -29,23 +30,24 @@ .sk-app-bar-item-column(ng-click='ctrl.selectRoom(room)') .sk-label {{room.name}} component-modal( - component='room', - ng-if='room.showRoom', - on-dismiss='ctrl.onRoomDismiss' + component-uuid='room.uuid', + ng-if='ctrl.roomShowState[room.uuid]', + on-dismiss='ctrl.onRoomDismiss(room)', + application='ctrl.application' ) .center - .sk-app-bar-item(ng-show='ctrl.arbitraryStatusMessage') + .sk-app-bar-item(ng-if='ctrl.arbitraryStatusMessage') .sk-app-bar-item-column span.neutral.sk-label {{ctrl.arbitraryStatusMessage}} .right .sk-app-bar-item( ng-click='ctrl.openSecurityUpdate()', - ng-show='ctrl.securityUpdateAvailable' + ng-if='ctrl.state.dataUpgradeAvailable' ) - span.success.sk-label Security update available. + span.success.sk-label Encryption upgrade available. .sk-app-bar-item( ng-click='ctrl.clickedNewUpdateAnnouncement()', - ng-show='ctrl.newUpdateAvailable == true' + ng-if='ctrl.newUpdateAvailable == true' ) span.info.sk-label New update available. .sk-app-bar-item.no-pointer( @@ -55,13 +57,14 @@ | Last refreshed {{ctrl.lastSyncDate}} .sk-app-bar-item( ng-click='ctrl.toggleSyncResolutionMenu()', - ng-if='(ctrl.outOfSync && !ctrl.isRefreshing) || ctrl.showSyncResolution' + ng-if='(ctrl.state.outOfSync && !ctrl.isRefreshing) || ctrl.showSyncResolution' ) - .sk-label.warning(ng-if='ctrl.outOfSync') Potentially Out of Sync + .sk-label.warning(ng-if='ctrl.state.outOfSync') Potentially Out of Sync sync-resolution-menu( - close-function='ctrl.toggleSyncResolutionMenu', + close-function='ctrl.toggleSyncResolutionMenu()', ng-click='$event.stopPropagation();', - ng-if='ctrl.showSyncResolution' + ng-if='ctrl.showSyncResolution', + application='ctrl.application' ) .sk-app-bar-item(ng-if='ctrl.lastSyncDate && ctrl.isRefreshing') .sk-spinner.small @@ -84,10 +87,10 @@ elem-ready='ctrl.initSvgForShortcut(shortcut)', ng-attr-id='dock-svg-{{shortcut.component.uuid}}' ) - .sk-app-bar-item.border(ng-if='ctrl.hasPasscode()') + .sk-app-bar-item.border(ng-if='ctrl.state.hasPasscode') #lock-item.sk-app-bar-item( ng-click='ctrl.lockApp()', - ng-if='ctrl.hasPasscode()', + ng-if='ctrl.state.hasPasscode', title='Locks application and wipes unencrypted data from memory.' ) .sk-label diff --git a/app/assets/javascripts/views/footer/footer_view.ts b/app/assets/javascripts/views/footer/footer_view.ts new file mode 100644 index 000000000..2d4c1c44f --- /dev/null +++ b/app/assets/javascripts/views/footer/footer_view.ts @@ -0,0 +1,467 @@ +import { FooterStatus, WebDirective } from '@/types'; +import { dateToLocalizedString } from '@/utils'; +import { + ApplicationEvent, + SyncQueueStrategy, + ProtectedAction, + ContentType, + SNComponent, + SNTheme, + ComponentArea, + ComponentAction, + topLevelCompare, + CollectionSort, + ComponentMutator, +} from 'snjs'; +import template from './footer-view.pug'; +import { AppStateEvent, EventSource } from '@/ui_models/app_state'; +import { + STRING_GENERIC_SYNC_ERROR, + STRING_NEW_UPDATE_READY, + STRING_CONFIRM_APP_QUIT_DURING_UPGRADE +} from '@/strings'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; + +type DockShortcut = { + name: string, + component: SNComponent, + icon: { + type: string + background_color: string + border_color: string + } +} + +class FooterViewCtrl extends PureViewCtrl { + + private $rootScope: ng.IRootScopeService + private rooms: SNComponent[] = [] + private themesWithIcons: SNTheme[] = [] + private showSyncResolution = false + private unregisterComponent: any + private rootScopeListener1: any + private rootScopeListener2: any + public arbitraryStatusMessage?: string + public user?: any + private backupStatus?: FooterStatus + private offline = true + private showAccountMenu = false + private didCheckForOffline = false + private queueExtReload = false + private reloadInProgress = false + public hasError = false + public isRefreshing = false + public lastSyncDate?: string + public newUpdateAvailable = false + public dockShortcuts: DockShortcut[] = [] + public roomShowState: Partial> = {} + private observerRemovers: Array<() => void> = []; + + /* @ngInject */ + constructor( + $rootScope: ng.IRootScopeService, + $timeout: ng.ITimeoutService, + ) { + super($timeout); + this.$rootScope = $rootScope; + this.addRootScopeListeners(); + this.toggleSyncResolutionMenu = this.toggleSyncResolutionMenu.bind(this); + this.closeAccountMenu = this.closeAccountMenu.bind(this); + } + + deinit() { + for (const remove of this.observerRemovers) remove(); + this.observerRemovers.length = 0; + this.rooms.length = 0; + this.themesWithIcons.length = 0; + this.unregisterComponent(); + this.unregisterComponent = undefined; + this.rootScopeListener1(); + this.rootScopeListener2(); + this.rootScopeListener1 = undefined; + this.rootScopeListener2 = undefined; + (this.closeAccountMenu as any) = undefined; + (this.toggleSyncResolutionMenu as any) = undefined; + super.deinit(); + } + + $onInit() { + super.$onInit(); + this.application!.getStatusService().addStatusObserver((string: string) => { + this.$timeout(() => { + this.arbitraryStatusMessage = string; + }); + }); + } + + getInitialState() { + return { + hasPasscode: false + }; + } + + reloadUpgradeStatus() { + this.application!.checkForSecurityUpdate().then((available) => { + this.setState({ + dataUpgradeAvailable: available + }); + }); + } + + async onAppLaunch() { + super.onAppLaunch(); + this.reloadPasscodeStatus(); + this.reloadUser(); + this.reloadUpgradeStatus(); + this.updateOfflineStatus(); + this.findErrors(); + this.streamItems(); + this.registerComponentHandler(); + } + + reloadUser() { + this.user = this.application!.getUser(); + } + + async reloadPasscodeStatus() { + const hasPasscode = this.application!.hasPasscode(); + this.setState({ + hasPasscode: hasPasscode + }); + } + + addRootScopeListeners() { + this.rootScopeListener1 = this.$rootScope.$on("reload-ext-data", () => { + this.reloadExtendedData(); + }); + this.rootScopeListener2 = this.$rootScope.$on("new-update-available", () => { + this.$timeout(() => { + this.onNewUpdateAvailable(); + }); + }); + } + + /** @override */ + onAppStateEvent(eventName: AppStateEvent, data: any) { + if (eventName === AppStateEvent.EditorFocused) { + if (data.eventSource === EventSource.UserInteraction) { + this.closeAllRooms(); + this.closeAccountMenu(); + } + } else if (eventName === AppStateEvent.BeganBackupDownload) { + this.backupStatus = this.application!.getStatusService().addStatusFromString( + "Saving local backup..." + ); + } else if (eventName === AppStateEvent.EndedBackupDownload) { + if (data.success) { + this.backupStatus = this.application!.getStatusService().replaceStatusWithString( + this.backupStatus!, + "Successfully saved backup." + ); + } else { + this.backupStatus = this.application!.getStatusService().replaceStatusWithString( + this.backupStatus!, + "Unable to save local backup." + ); + } + this.$timeout(() => { + this.backupStatus = this.application!.getStatusService().removeStatus(this.backupStatus!); + }, 2000); + } + } + + /** @override */ + async onAppKeyChange() { + super.onAppKeyChange(); + this.reloadPasscodeStatus(); + } + + /** @override */ + onAppEvent(eventName: ApplicationEvent) { + if (eventName === ApplicationEvent.KeyStatusChanged) { + this.reloadUpgradeStatus(); + } else if (eventName === ApplicationEvent.EnteredOutOfSync) { + this.setState({ + outOfSync: true + }); + } else if (eventName === ApplicationEvent.ExitedOutOfSync) { + this.setState({ + outOfSync: false + }); + } else if (eventName === ApplicationEvent.CompletedFullSync) { + if (!this.didCheckForOffline) { + this.didCheckForOffline = true; + if (this.offline && this.application!.getNoteCount() === 0) { + this.showAccountMenu = true; + } + } + this.syncUpdated(); + this.findErrors(); + this.updateOfflineStatus(); + } else if (eventName === ApplicationEvent.FailedSync) { + this.findErrors(); + this.updateOfflineStatus(); + } else if ( + eventName === ApplicationEvent.SignedIn || + eventName === ApplicationEvent.SignedOut + ) { + this.reloadUser(); + } + } + + streamItems() { + this.application.setDisplayOptions( + ContentType.Theme, + CollectionSort.Title, + 'asc', + (theme: SNTheme) => { + return ( + theme.package_info && + theme.package_info.dock_icon + ); + } + ) + + this.observerRemovers.push(this.application!.streamItems( + ContentType.Component, + async () => { + const components = this.application!.getItems(ContentType.Component) as SNComponent[]; + this.rooms = components.filter((candidate) => { + return candidate.area === ComponentArea.Rooms && !candidate.deleted; + }); + if (this.queueExtReload) { + this.queueExtReload = false; + this.reloadExtendedData(); + } + } + )); + + this.observerRemovers.push(this.application!.streamItems( + ContentType.Theme, + async () => { + const themes = this.application!.getDisplayableItems(ContentType.Theme) as SNTheme[]; + this.themesWithIcons = themes; + this.reloadDockShortcuts(); + } + )); + } + + registerComponentHandler() { + this.unregisterComponent = this.application!.componentManager!.registerHandler({ + identifier: 'room-bar', + areas: [ComponentArea.Rooms, ComponentArea.Modal], + actionHandler: (component, action, data) => { + if (action === ComponentAction.SetSize) { + /** Do comparison to avoid repetitive calls by arbitrary component */ + if (!topLevelCompare(component.getLastSize(), data)) { + this.application!.changeItem(component.uuid, (mutator) => { + mutator.setLastSize(data); + }) + } + } + }, + focusHandler: (component, focused) => { + if (component.isEditor() && focused) { + this.closeAllRooms(); + this.closeAccountMenu(); + } + } + }); + } + + reloadExtendedData() { + if (this.reloadInProgress) { + return; + } + this.reloadInProgress = true; + + /** + * A reload consists of opening the extensions manager, + * then closing it after a short delay. + */ + const extWindow = this.rooms.find((room) => { + return room.package_info.identifier === this.application! + .getNativeExtService().extManagerId; + }); + if (!extWindow) { + this.queueExtReload = true; + this.reloadInProgress = false; + return; + } + this.selectRoom(extWindow); + this.$timeout(() => { + this.selectRoom(extWindow); + this.reloadInProgress = false; + this.$rootScope.$broadcast('ext-reload-complete'); + }, 2000); + } + + updateOfflineStatus() { + this.offline = this.application!.noAccount(); + } + + async openSecurityUpdate() { + const onBeforeUnload = window.onbeforeunload; + try { + window.onbeforeunload = () => STRING_CONFIRM_APP_QUIT_DURING_UPGRADE; + await this.application!.performProtocolUpgrade(); + } finally { + window.onbeforeunload = onBeforeUnload; + } + } + + findErrors() { + this.hasError = this.application!.getSyncStatus().hasError(); + } + + accountMenuPressed() { + this.showAccountMenu = !this.showAccountMenu; + this.closeAllRooms(); + } + + toggleSyncResolutionMenu() { + this.showSyncResolution = !this.showSyncResolution; + } + + closeAccountMenu() { + this.showAccountMenu = false; + } + + lockApp() { + this.application!.lock(); + } + + refreshData() { + this.isRefreshing = true; + this.application!.sync({ + queueStrategy: SyncQueueStrategy.ForceSpawnNew, + checkIntegrity: true + }).then((response) => { + this.$timeout(() => { + this.isRefreshing = false; + }, 200); + if (response && response.error) { + this.application!.alertService!.alert( + STRING_GENERIC_SYNC_ERROR + ); + } else { + this.syncUpdated(); + } + }); + } + + syncUpdated() { + this.lastSyncDate = dateToLocalizedString(this.application!.getLastSyncDate()!); + } + + onNewUpdateAvailable() { + this.newUpdateAvailable = true; + } + + clickedNewUpdateAnnouncement() { + this.newUpdateAvailable = false; + this.application!.alertService!.alert( + STRING_NEW_UPDATE_READY + ); + } + + reloadDockShortcuts() { + const shortcuts = []; + for (const theme of this.themesWithIcons) { + const name = theme.package_info.name; + const icon = theme.package_info.dock_icon; + if (!icon) { + continue; + } + shortcuts.push({ + name: name, + component: theme, + icon: icon + } as DockShortcut); + } + this.dockShortcuts = shortcuts.sort((a, b) => { + /** Circles first, then images */ + const aType = a.icon.type; + const bType = b.icon.type; + if (aType === bType) { + return 0; + } else if (aType === 'circle' && bType === 'svg') { + return -1; + } else if (bType === 'circle' && aType === 'svg') { + return 1; + } else { + return 0; + } + }); + } + + initSvgForShortcut(shortcut: DockShortcut) { + const id = 'dock-svg-' + shortcut.component.uuid; + const element = document.getElementById(id)!; + const parser = new DOMParser(); + const svg = shortcut.component.package_info.dock_icon.source; + const doc = parser.parseFromString(svg, 'image/svg+xml'); + element.appendChild(doc.documentElement); + } + + selectShortcut(shortcut: DockShortcut) { + this.application!.componentManager!.toggleComponent(shortcut.component); + } + + onRoomDismiss(room: SNComponent) { + this.roomShowState[room.uuid] = false; + } + + closeAllRooms() { + for (const room of this.rooms) { + this.roomShowState[room.uuid] = false; + } + } + + async selectRoom(room: SNComponent) { + const run = () => { + this.$timeout(() => { + this.roomShowState[room.uuid] = !this.roomShowState[room.uuid]; + }); + }; + + if (!this.roomShowState[room.uuid]) { + const requiresPrivilege = await this.application!.privilegesService! + .actionRequiresPrivilege( + ProtectedAction.ManageExtensions + ); + if (requiresPrivilege) { + this.application!.presentPrivilegesModal( + ProtectedAction.ManageExtensions, + run + ); + } else { + run(); + } + } else { + run(); + } + } + + clickOutsideAccountMenu() { + if (this.application && this.application!.authenticationInProgress()) { + return; + } + this.showAccountMenu = false; + } +} + +export class FooterView extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.template = template; + this.controller = FooterViewCtrl; + this.replace = true; + this.controllerAs = 'ctrl'; + this.bindToController = true; + this.scope = { + application: '=' + }; + } +} diff --git a/app/assets/javascripts/views/index.ts b/app/assets/javascripts/views/index.ts new file mode 100644 index 000000000..55b48fe36 --- /dev/null +++ b/app/assets/javascripts/views/index.ts @@ -0,0 +1,9 @@ +export { PureViewCtrl } from './abstract/pure_view_ctrl'; +export { ApplicationGroupView } from './application_group/application_group_view'; +export { ApplicationView } from './application/application_view'; +export { EditorGroupView } from './editor_group/editor_group_view'; +export { EditorView } from './editor/editor_view'; +export { FooterView } from './footer/footer_view'; +export { NotesView } from './notes/notes_view'; +export { TagsView } from './tags/tags_view'; +export { ChallengeModal } from './challenge_modal/challenge_modal' \ No newline at end of file diff --git a/app/assets/javascripts/views/notes/note_utils.ts b/app/assets/javascripts/views/notes/note_utils.ts new file mode 100644 index 000000000..f87cb96ce --- /dev/null +++ b/app/assets/javascripts/views/notes/note_utils.ts @@ -0,0 +1,82 @@ +import { SNNote, SNTag } from 'snjs'; + +export enum NoteSortKey { + CreatedAt = 'created_at', + UserUpdatedAt = 'userModifiedDate', + Title = 'title', + + /** @legacy Use UserUpdatedAt instead */ + UpdatedAt = 'updated_at', + /** @legacy Use UserUpdatedAt instead */ + ClientUpdatedAt = 'client_updated_at', +} + +export function notePassesFilter( + note: SNNote, + selectedTag: SNTag, + showArchived: boolean, + hidePinned: boolean, + filterText: string +) { + + let canShowArchived = showArchived; + const canShowPinned = !hidePinned; + if (!selectedTag.isTrashTag && note.trashed) { + return false; + } + const isSmartTag = selectedTag.isSmartTag(); + if (isSmartTag) { + canShowArchived = ( + canShowArchived || + selectedTag.isArchiveTag || + selectedTag.isTrashTag + ); + } + if ( + (note.archived && !canShowArchived) || + (note.pinned && !canShowPinned) + ) { + return false; + } + return noteMatchesQuery(note, filterText); +} + +function noteMatchesQuery( + note: SNNote, + query: string +) { + if (query.length === 0) { + return true; + } + const title = note.safeTitle().toLowerCase(); + const text = note.safeText().toLowerCase(); + const lowercaseText = query.toLowerCase(); + const quotedText = stringBetweenQuotes(lowercaseText); + if (quotedText) { + return title.includes(quotedText) || text.includes(quotedText); + } + if (stringIsUuid(lowercaseText)) { + return note.uuid === lowercaseText; + } + const words = lowercaseText.split(" "); + const matchesTitle = words.every((word) => { + return title.indexOf(word) >= 0; + }); + const matchesBody = words.every((word) => { + return text.indexOf(word) >= 0; + }); + return matchesTitle || matchesBody; +} + +function stringBetweenQuotes(text: string) { + const matches = text.match(/"(.*?)"/); + return matches ? matches[1] : null; +} + +function stringIsUuid(text: string) { + const matches = text.match( + /\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/ + ); + // eslint-disable-next-line no-unneeded-ternary + return matches ? true : false; +} \ No newline at end of file diff --git a/app/assets/templates/notes.pug b/app/assets/javascripts/views/notes/notes-view.pug similarity index 70% rename from app/assets/templates/notes.pug rename to app/assets/javascripts/views/notes/notes-view.pug index 0ccd4cb18..a49ca0334 100644 --- a/app/assets/templates/notes.pug +++ b/app/assets/javascripts/views/notes/notes-view.pug @@ -17,7 +17,7 @@ ng-keyup='$event.keyCode == 13 && self.onFilterEnter();', ng-model='self.state.noteFilter.text', placeholder='Search', - select-on-click='true', + select-on-focus='true', title='Searches notes in the currently selected tag' ) #search-clear-button( @@ -51,7 +51,7 @@ ) menu-row( action="self.selectedMenuItem(); self.selectedSortByUpdated()" - circle="self.state.sortBy == 'client_updated_at' && 'success'" + circle="self.state.sortBy == 'userModifiedDate' && 'success'" desc="'Sort notes with the most recently updated first'" label="'Date Modified'" ) @@ -65,7 +65,7 @@ .sk-menu-panel-header .sk-menu-panel-header-title Display menu-row( - action="self.selectedMenuItem(); self.togglePrefKey('showArchived')" + action="self.selectedMenuItem(); self.toggleWebPrefKey('showArchived')" circle="self.state.showArchived ? 'success' : 'danger'" desc=`'Archived notes are usually hidden. You can explicitly show them with this option.'` @@ -73,7 +73,7 @@ label="'Archived Notes'" ) menu-row( - action="self.selectedMenuItem(); self.togglePrefKey('hidePinned')" + action="self.selectedMenuItem(); self.toggleWebPrefKey('hidePinned')" circle="self.state.hidePinned ? 'danger' : 'success'" desc=`'Pinned notes always appear on top. You can hide them temporarily with this option so you can focus on other notes in the list.'` @@ -81,26 +81,19 @@ label="'Pinned Notes'" ) menu-row( - action="self.selectedMenuItem(); self.togglePrefKey('hideNotePreview')" + action="self.selectedMenuItem(); self.toggleWebPrefKey('hideNotePreview')" circle="self.state.hideNotePreview ? 'danger' : 'success'" desc="'Hide the note preview for a more condensed list of notes'" faded="self.state.hideNotePreview" label="'Note Preview'" ) menu-row( - action="self.selectedMenuItem(); self.togglePrefKey('hideDate')" + action="self.selectedMenuItem(); self.toggleWebPrefKey('hideDate')" circle="self.state.hideDate ? 'danger' : 'success'" desc="'Hide the date displayed in each row'" faded="self.state.hideDate" label="'Date'" ) - menu-row( - action="self.selectedMenuItem(); self.togglePrefKey('hideTags')" - circle="self.state.hideTags ? 'danger' : 'success'" - desc="'Hide the list of tags associated with each note'" - faded="self.state.hideTags" - label="'Tags'" - ) .scrollable #notes-scrollable.infinite-scroll( can-load='true', @@ -108,43 +101,42 @@ threshold='200' ) .note( - ng-class="{'selected' : self.state.selectedNote == note}", - ng-click='self.selectNote(note, true)', ng-repeat='note in self.state.renderedNotes track by note.uuid' + ng-class="{'selected' : self.activeEditorNote.uuid == note.uuid}" + ng-click='self.selectNote(note)' ) - .note-flags(ng-show='note.flags.length > 0') - .flag(ng-class='flag.class', ng-repeat='flag in note.flags') + .note-flags(ng-show='self.noteFlags[note.uuid].length > 0') + .flag(ng-class='flag.class', ng-repeat='flag in self.noteFlags[note.uuid]') .label {{flag.text}} .name(ng-show='note.title') | {{note.title}} .note-preview( ng-if=` !self.state.hideNotePreview && - !note.content.hidePreview && - !note.content.protected` + !note.hidePreview && + !note.protected` ) .html-preview( - ng-bind-html='note.content.preview_html', - ng-show='note.content.preview_html' + ng-bind-html='note.preview_html', + ng-show='note.preview_html' ) .plain-preview( - ng-show='!note.content.preview_html && note.content.preview_plain' - ) {{note.content.preview_plain}} + ng-show='!note.preview_html && note.preview_plain' + ) {{note.preview_plain}} .default-preview( - ng-show='!note.content.preview_html && !note.content.preview_plain' + ng-show='!note.preview_html && !note.preview_plain' ) {{note.text}} .date.faded(ng-show='!self.state.hideDate') - span(ng-show="self.state.sortBy == 'client_updated_at'") - | Modified {{note.cachedUpdatedAtString || 'Now'}} - span(ng-show="self.state.sortBy != 'client_updated_at'") - | {{note.cachedCreatedAtString || 'Now'}} - .tags-string(ng-show='note.shouldShowTags') - .faded {{note.savedTagsString || note.tagsString()}} + span(ng-show="self.state.sortBy == 'userModifiedDate'") + | Modified {{note.updatedAtString || 'Now'}} + span(ng-show="self.state.sortBy != 'userModifiedDate'") + | {{note.createdAtString || 'Now'}} + panel-resizer( - collapsable="true" - control="self.panelController" - default-width="300" - hoverable="true" - on-resize-finish="self.onPanelResize" + collapsable="true" + control="self.panelPuppet" + default-width="300" + hoverable="true" + on-resize-finish="self.onPanelResize" panel-id="'notes-column'" ) diff --git a/app/assets/javascripts/views/notes/notes_view.ts b/app/assets/javascripts/views/notes/notes_view.ts new file mode 100644 index 000000000..47158d1bc --- /dev/null +++ b/app/assets/javascripts/views/notes/notes_view.ts @@ -0,0 +1,772 @@ +import { Editor } from '@/ui_models/editor'; +import { PanelPuppet, WebDirective } from './../../types'; +import angular from 'angular'; +import template from './notes-view.pug'; +import { + ApplicationEvent, + ContentType, + removeFromArray, + SNNote, + SNTag, + WebPrefKey, + findInArray, + CollectionSort, + SNSmartTag +} from 'snjs'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { AppStateEvent } from '@/ui_models/app_state'; +import { KeyboardModifier, KeyboardKey } from '@/services/keyboardManager'; +import { + PANEL_NAME_NOTES +} from '@/views/constants'; +import { + NoteSortKey, + notePassesFilter +} from './note_utils'; +import { UuidString } from '@node_modules/snjs/dist/@types/types'; + +type NotesState = { + panelTitle: string + notes?: SNNote[] + renderedNotes?: SNNote[] + sortBy?: string + sortReverse?: boolean + showArchived?: boolean + hidePinned?: boolean + hideNotePreview?: boolean + hideDate?: boolean + noteFilter: { text: string } + mutable: { showMenu: boolean } +} + +type NoteFlag = { + text: string + class: 'info' | 'neutral' | 'warning' | 'success' | 'danger' +} + +/** + * This is the height of a note cell with nothing but the title, + * which *is* a display option + */ +const MIN_NOTE_CELL_HEIGHT = 51.0; +const DEFAULT_LIST_NUM_NOTES = 20; +const ELEMENT_ID_SEARCH_BAR = 'search-bar'; +const ELEMENT_ID_SCROLL_CONTAINER = 'notes-scrollable'; + +class NotesViewCtrl extends PureViewCtrl { + + private panelPuppet?: PanelPuppet + private reloadNotesPromise?: any + private notesToDisplay = 0 + private pageSize = 0 + private searchSubmitted = false + private newNoteKeyObserver: any + private nextNoteKeyObserver: any + private previousNoteKeyObserver: any + private searchKeyObserver: any + private noteFlags: Partial> = {} + private unsubEditorChange: any + private removeObservers: Array<() => void> = []; + + /* @ngInject */ + constructor($timeout: ng.ITimeoutService, ) { + super($timeout); + this.resetPagination(); + } + + $onInit() { + super.$onInit(); + this.panelPuppet = { + onReady: () => this.reloadPanelWidth() + }; + this.onWindowResize = this.onWindowResize.bind(this); + this.onPanelResize = this.onPanelResize.bind(this); + window.addEventListener('resize', this.onWindowResize, true); + this.registerKeyboardShortcuts(); + } + + onWindowResize() { + this.resetPagination(true); + } + + deinit() { + for (const remove of this.removeObservers) remove(); + this.removeObservers.length = 0; + this.panelPuppet!.onReady = undefined; + this.panelPuppet = undefined; + window.removeEventListener('resize', this.onWindowResize, true); + (this.onWindowResize as any) = undefined; + (this.onPanelResize as any) = undefined; + this.newNoteKeyObserver(); + this.nextNoteKeyObserver(); + this.previousNoteKeyObserver(); + this.searchKeyObserver(); + this.newNoteKeyObserver = undefined; + this.nextNoteKeyObserver = undefined; + this.previousNoteKeyObserver = undefined; + this.searchKeyObserver = undefined; + super.deinit(); + } + + getState() { + return this.state as NotesState; + } + + async setNotesState(state: Partial) { + return this.setState(state); + } + + getInitialState() { + return { + notes: [], + renderedNotes: [], + mutable: { showMenu: false }, + noteFilter: { text: '' }, + } as Partial; + } + + async onAppLaunch() { + super.onAppLaunch(); + this.streamNotesAndTags(); + this.reloadPreferences(); + } + + /** @override */ + onAppStateEvent(eventName: AppStateEvent, data?: any) { + if (eventName === AppStateEvent.TagChanged) { + this.handleTagChange( + this.application!.getAppState().getSelectedTag()! + ); + } else if (eventName === AppStateEvent.ActiveEditorChanged) { + this.handleEditorChange(); + } else if (eventName === AppStateEvent.PreferencesChanged) { + this.reloadPreferences(); + } else if (eventName === AppStateEvent.EditorFocused) { + this.setShowMenuFalse(); + } + } + + /** @template */ + public get activeEditorNote() { + return this.appState.getActiveEditor()?.note; + } + + public get editorNotes() { + return this.appState.getEditors().map((editor) => editor.note); + } + + /** @override */ + async onAppEvent(eventName: ApplicationEvent) { + if (eventName === ApplicationEvent.SignedIn) { + this.appState.closeAllEditors(); + this.selectFirstNote(); + } else if (eventName === ApplicationEvent.CompletedFullSync) { + this.getMostValidNotes().then((notes) => { + if (notes.length === 0) { + this.createPlaceholderNote(); + } + }); + } + } + + /** + * Access the current state notes without awaiting any potential reloads + * that may be in progress. This is the sync alternative to `async getMostValidNotes` + */ + private getPossiblyStaleNotes() { + return this.getState().notes!; + } + + /** + * Access the current state notes after waiting for any pending reloads. + * This returns the most up to date notes, but is the asyncronous counterpart + * to `getPossiblyStaleNotes` + */ + private async getMostValidNotes() { + await this.reloadNotesPromise; + return this.getPossiblyStaleNotes(); + } + + /** + * Triggered programatically to create a new placeholder note + * when conditions allow for it. This is as opposed to creating a new note + * as part of user interaction (pressing the + button). + */ + private async createPlaceholderNote() { + const selectedTag = this.application!.getAppState().getSelectedTag()!; + if (selectedTag.isSmartTag() && !selectedTag.isAllTag) { + return; + } + return this.createNewNote(); + } + + streamNotesAndTags() { + this.removeObservers.push(this.application!.streamItems( + [ContentType.Note], + async (items) => { + const notes = items as SNNote[]; + /** Note has changed values, reset its flags */ + for (const note of notes) { + if (note.deleted) { + continue; + } + this.loadFlagsForNote(note); + } + /** If a note changes, it will be queried against the existing filter; + * we dont need to reload display options */ + await this.reloadNotes(); + const activeNote = this.activeEditorNote; + if (activeNote) { + const discarded = activeNote.deleted || activeNote.trashed; + if (discarded) { + this.selectNextOrCreateNew(); + } + } else { + this.selectFirstNote(); + } + } + )); + + this.removeObservers.push(this.application!.streamItems( + [ContentType.Tag], + async (items) => { + const tags = items as SNTag[]; + /** A tag could have changed its relationships, so we need to reload the filter */ + this.reloadNotesDisplayOptions(); + await this.reloadNotes(); + if (findInArray(tags, 'uuid', this.appState.selectedTag?.uuid)) { + /** Tag title could have changed */ + this.reloadPanelTitle(); + } + } + )); + } + + async selectNote(note: SNNote) { + this.appState.openEditor(note.uuid); + } + + async createNewNote() { + let title = `Note ${this.getState().notes!.length + 1}`; + if (this.isFiltering()) { + title = this.getState().noteFilter.text; + } + this.appState.createEditor(title); + } + + async handleTagChange(tag: SNTag) { + this.resetScrollPosition(); + this.setShowMenuFalse(); + await this.setNoteFilterText(''); + this.application!.getDesktopService().searchText(); + this.resetPagination(); + + /* Capture db load state before beginning reloadNotes, + since this status may change during reload */ + const dbLoaded = this.application!.isDatabaseLoaded(); + this.reloadNotesDisplayOptions(); + await this.reloadNotes(); + + if (this.getState().notes!.length > 0) { + this.selectFirstNote(); + } else if (dbLoaded) { + if (!tag.isSmartTag() || tag.isAllTag) { + this.createPlaceholderNote(); + } else if ( + this.activeEditorNote && + !this.getState().notes!.includes(this.activeEditorNote!) + ) { + this.appState.closeActiveEditor(); + } + } + } + + resetScrollPosition() { + const scrollable = document.getElementById(ELEMENT_ID_SCROLL_CONTAINER); + if (scrollable) { + scrollable.scrollTop = 0; + scrollable.scrollLeft = 0; + } + } + + async removeNoteFromList(note: SNNote) { + const notes = this.getState().notes!; + removeFromArray(notes, note); + await this.setNotesState({ + notes: notes, + renderedNotes: notes.slice(0, this.notesToDisplay) + }); + } + + private async reloadNotes() { + this.reloadNotesPromise = this.performReloadNotes(); + return this.reloadNotesPromise; + } + + /** + * Note that reloading display options destroys the current index and rebuilds it, + * so call sparingly. The runtime complexity of destroying and building + * an index is roughly O(n^2). + */ + private reloadNotesDisplayOptions() { + const tag = this.appState.selectedTag!; + this.application.setDisplayOptions( + ContentType.Note, + this.getState().sortBy! as CollectionSort, + this.getState().sortReverse! ? 'asc' : 'dsc', + (note: SNNote) => { + const matchesTag = tag.isSmartTag() + ? note.satisfiesPredicate((tag as SNSmartTag).predicate) + : tag.hasRelationshipWithItem(note); + return matchesTag && notePassesFilter( + note, + this.appState.selectedTag!, + this.getState().showArchived!, + this.getState().hidePinned!, + this.getState().noteFilter.text.toLowerCase() + ) + } + ) + } + + private async performReloadNotes() { + const tag = this.appState.selectedTag!; + if (!tag) { + return; + } + const notes = this.application.getDisplayableItems(ContentType.Note) as SNNote[]; + await this.setNotesState({ + notes: notes, + renderedNotes: notes.slice(0, this.notesToDisplay) + }); + this.reloadPanelTitle(); + } + + setShowMenuFalse() { + this.setNotesState({ + mutable: { + ...this.getState().mutable, + showMenu: false + } + }); + } + + async handleEditorChange() { + const activeNote = this.appState.getActiveEditor().note; + if (activeNote && activeNote.conflictOf) { + this.application!.changeAndSaveItem(activeNote.uuid, (mutator) => { + mutator.conflictOf = undefined; + }) + } + if (this.isFiltering()) { + this.application!.getDesktopService().searchText(this.getState().noteFilter.text); + } + } + + async reloadPreferences() { + const viewOptions = {} as NotesState; + const prevSortValue = this.getState().sortBy; + let sortBy = this.application!.getPrefsService().getValue( + WebPrefKey.SortNotesBy, + NoteSortKey.CreatedAt + ); + if (sortBy === NoteSortKey.UpdatedAt || sortBy === NoteSortKey.ClientUpdatedAt) { + /** Use UserUpdatedAt instead */ + sortBy = NoteSortKey.UserUpdatedAt; + } + viewOptions.sortBy = sortBy; + viewOptions.sortReverse = this.application!.getPrefsService().getValue( + WebPrefKey.SortNotesReverse, + false + ); + viewOptions.showArchived = this.application!.getPrefsService().getValue( + WebPrefKey.NotesShowArchived, + false + ); + viewOptions.hidePinned = this.application!.getPrefsService().getValue( + WebPrefKey.NotesHidePinned, + false + ); + viewOptions.hideNotePreview = this.application!.getPrefsService().getValue( + WebPrefKey.NotesHideNotePreview, + false + ); + viewOptions.hideDate = this.application!.getPrefsService().getValue( + WebPrefKey.NotesHideDate, + false + ); + const state = this.getState(); + const displayOptionsChanged = ( + viewOptions.sortBy !== state.sortBy || + viewOptions.sortReverse !== state.sortReverse || + viewOptions.hidePinned !== state.hidePinned || + viewOptions.showArchived !== state.showArchived + ); + await this.setNotesState({ + ...viewOptions + }); + this.reloadPanelWidth(); + if (displayOptionsChanged) { + this.reloadNotesDisplayOptions(); + } + await this.reloadNotes(); + if (prevSortValue && prevSortValue !== sortBy) { + this.selectFirstNote(); + } + } + + reloadPanelWidth() { + const width = this.application!.getPrefsService().getValue( + WebPrefKey.NotesPanelWidth + ); + if (width && this.panelPuppet!.ready) { + this.panelPuppet!.setWidth!(width); + if (this.panelPuppet!.isCollapsed!()) { + this.application!.getAppState().panelDidResize( + PANEL_NAME_NOTES, + this.panelPuppet!.isCollapsed!() + ); + } + } + } + + onPanelResize( + newWidth: number, + _: number, + __: boolean, + isCollapsed: boolean + ) { + this.application!.getPrefsService().setUserPrefValue( + WebPrefKey.NotesPanelWidth, + newWidth, + true + ); + this.application!.getAppState().panelDidResize( + PANEL_NAME_NOTES, + isCollapsed + ); + } + + paginate() { + this.notesToDisplay += this.pageSize; + this.reloadNotes(); + if (this.searchSubmitted) { + this.application!.getDesktopService().searchText(this.getState().noteFilter.text); + } + } + + resetPagination(keepCurrentIfLarger = false) { + const clientHeight = document.documentElement.clientHeight; + this.pageSize = Math.ceil(clientHeight / MIN_NOTE_CELL_HEIGHT); + if (this.pageSize === 0) { + this.pageSize = DEFAULT_LIST_NUM_NOTES; + } + if (keepCurrentIfLarger && this.notesToDisplay > this.pageSize) { + return; + } + this.notesToDisplay = this.pageSize; + } + + reloadPanelTitle() { + let title; + if (this.isFiltering()) { + const resultCount = this.getState().notes!.length; + title = `${resultCount} search results`; + } else if (this.appState.selectedTag) { + title = `${this.appState.selectedTag.title}`; + } + this.setNotesState({ + panelTitle: title + }); + } + + optionsSubtitle() { + let base = ""; + if (this.getState().sortBy === NoteSortKey.CreatedAt) { + base += " Date Added"; + } else if (this.getState().sortBy === NoteSortKey.UserUpdatedAt) { + base += " Date Modified"; + } else if (this.getState().sortBy === NoteSortKey.Title) { + base += " Title"; + } + if (this.getState().showArchived) { + base += " | + Archived"; + } + if (this.getState().hidePinned) { + base += " | – Pinned"; + } + if (this.getState().sortReverse) { + base += " | Reversed"; + } + return base; + } + + loadFlagsForNote(note: SNNote) { + const flags = [] as NoteFlag[]; + if (note.pinned) { + flags.push({ + text: "Pinned", + class: 'info' + }); + } + if (note.archived) { + flags.push({ + text: "Archived", + class: 'warning' + }); + } + if (note.protected) { + flags.push({ + text: "Protected", + class: 'success' + }); + } + if (note.locked) { + flags.push({ + text: "Locked", + class: 'neutral' + }); + } + if (note.trashed) { + flags.push({ + text: "Deleted", + class: 'danger' + }); + } + if (note.conflictOf) { + flags.push({ + text: "Conflicted Copy", + class: 'danger' + }); + } + if (note.errorDecrypting) { + if (note.waitingForKey) { + flags.push({ + text: "Waiting For Keys", + class: 'info' + }); + } else { + flags.push({ + text: "Missing Keys", + class: 'danger' + }); + } + } + if (note.deleted) { + flags.push({ + text: "Deletion Pending Sync", + class: 'danger' + }); + } + this.noteFlags[note.uuid] = flags; + } + + displayableNotes() { + return this.getState().notes!; + } + + getFirstNonProtectedNote() { + const displayableNotes = this.displayableNotes(); + let index = 0; + let note = displayableNotes[index]; + while (note && note.protected) { + index++; + if (index >= displayableNotes.length) { + break; + } + note = displayableNotes[index]; + } + return note; + } + + selectFirstNote() { + const note = this.getFirstNonProtectedNote(); + if (note) { + this.selectNote(note); + } + } + + selectNextNote() { + const displayableNotes = this.displayableNotes(); + const currentIndex = displayableNotes.findIndex((candidate) => { + return candidate.uuid === this.activeEditorNote!.uuid + }); + if (currentIndex + 1 < displayableNotes.length) { + this.selectNote(displayableNotes[currentIndex + 1]); + } + } + + selectNextOrCreateNew() { + const note = this.getFirstNonProtectedNote(); + if (note) { + this.selectNote(note); + } else if (!this.appState.selectedTag || !this.appState.selectedTag.isSmartTag()) { + this.createPlaceholderNote(); + } else { + this.appState.closeActiveEditor(); + } + } + + selectPreviousNote() { + const displayableNotes = this.displayableNotes(); + const currentIndex = displayableNotes.indexOf(this.activeEditorNote!); + if (currentIndex - 1 >= 0) { + this.selectNote(displayableNotes[currentIndex - 1]); + return true; + } else { + return false; + } + } + + isFiltering() { + return this.getState().noteFilter.text && + this.getState().noteFilter.text.length > 0; + } + + async setNoteFilterText(text: string) { + await this.setNotesState({ + noteFilter: { + ...this.getState().noteFilter, + text: text + } + }); + } + + async clearFilterText() { + await this.setNoteFilterText(''); + this.onFilterEnter(); + this.filterTextChanged(); + this.resetPagination(); + } + + async filterTextChanged() { + if (this.searchSubmitted) { + this.searchSubmitted = false; + } + this.reloadNotesDisplayOptions(); + await this.reloadNotes(); + } + + onFilterEnter() { + /** + * For Desktop, performing a search right away causes + * input to lose focus. We wait until user explicity hits + * enter before highlighting desktop search results. + */ + this.searchSubmitted = true; + this.application!.getDesktopService().searchText(this.getState().noteFilter.text); + } + + selectedMenuItem() { + this.setShowMenuFalse(); + } + + toggleWebPrefKey(key: WebPrefKey) { + this.application!.getPrefsService().setUserPrefValue( + key, + !this.state[key], + true + ); + } + + selectedSortByCreated() { + this.setSortBy(NoteSortKey.CreatedAt); + } + + selectedSortByUpdated() { + this.setSortBy(NoteSortKey.ClientUpdatedAt); + } + + selectedSortByTitle() { + this.setSortBy(NoteSortKey.Title); + } + + toggleReverseSort() { + this.selectedMenuItem(); + this.application!.getPrefsService().setUserPrefValue( + WebPrefKey.SortNotesReverse, + !this.getState().sortReverse, + true + ); + } + + setSortBy(type: NoteSortKey) { + this.application!.getPrefsService().setUserPrefValue( + WebPrefKey.SortNotesBy, + type, + true + ); + } + + getSearchBar() { + return document.getElementById(ELEMENT_ID_SEARCH_BAR)!; + } + + registerKeyboardShortcuts() { + /** + * In the browser we're not allowed to override cmd/ctrl + n, so we have to + * use Control modifier as well. These rules don't apply to desktop, but + * probably better to be consistent. + */ + this.newNoteKeyObserver = this.application!.getKeyboardService().addKeyObserver({ + key: 'n', + modifiers: [ + KeyboardModifier.Meta, + KeyboardModifier.Ctrl + ], + onKeyDown: (event) => { + event.preventDefault(); + this.createNewNote(); + } + }); + + this.nextNoteKeyObserver = this.application!.getKeyboardService().addKeyObserver({ + key: KeyboardKey.Down, + elements: [ + document.body, + this.getSearchBar() + ], + onKeyDown: (event) => { + const searchBar = this.getSearchBar(); + if (searchBar === document.activeElement) { + searchBar.blur(); + } + this.selectNextNote(); + } + }); + + this.previousNoteKeyObserver = this.application!.getKeyboardService().addKeyObserver({ + key: KeyboardKey.Up, + element: document.body, + onKeyDown: (event) => { + this.selectPreviousNote(); + } + }); + + this.searchKeyObserver = this.application!.getKeyboardService().addKeyObserver({ + key: "f", + modifiers: [ + KeyboardModifier.Meta, + KeyboardModifier.Shift + ], + onKeyDown: (event) => { + const searchBar = this.getSearchBar(); + if (searchBar) { searchBar.focus(); }; + } + }); + } +} + +export class NotesView extends WebDirective { + constructor() { + super(); + this.template = template; + this.replace = true; + this.controller = NotesViewCtrl; + this.controllerAs = 'self'; + this.bindToController = true; + this.scope = { + application: '=' + }; + } +} diff --git a/app/assets/templates/tags.pug b/app/assets/javascripts/views/tags/tags-view.pug similarity index 61% rename from app/assets/templates/tags.pug rename to app/assets/javascripts/views/tags/tags-view.pug index 4f3340043..af0ebb94a 100644 --- a/app/assets/templates/tags.pug +++ b/app/assets/javascripts/views/tags/tags-view.pug @@ -1,6 +1,9 @@ #tags-column.sn-component.section.tags(aria-label='Tags') .component-view-container(ng-if='self.component.active') - component-view.component-view(component='self.component') + component-view.component-view( + component-uuid='self.component.uuid', + application='self.application' + ) #tags-content.content(ng-if='!(self.component && self.component.active)') .tags-title-section.section-title-bar .section-title-bar-header @@ -15,13 +18,17 @@ .scrollable .infinite-scroll .tag( - ng-class="{'selected' : self.state.selectedTag == tag, 'faded' : !tag.content.isAllTag}", + ng-class="{'selected' : self.state.selectedTag == tag, 'faded' : !tag.isAllTag}", ng-click='self.selectTag(tag)', - ng-repeat='tag in self.state.smartTags' + ng-repeat='tag in self.state.smartTags track by tag.uuid' ) .tag-info - input.title(ng-disabled='true', ng-model='tag.title') - .count(ng-show='tag.content.isAllTag') {{self.state.noteCounts[tag.uuid]}} + input.title( + ng-disabled='true', + ng-change='self.onTagTitleChange(tag)' + ng-model='tag.title' + ) + .count(ng-show='tag.isAllTag') {{self.state.noteCounts[tag.uuid]}} .tags-title-section.section-title-bar .section-title-bar-header .sk-h3.title @@ -35,28 +42,29 @@ .tag-icon # input.title( ng-attr-id='tag-{{tag.uuid}}', - ng-blur='self.saveTag($event, tag)', - ng-change='self.tagTitleDidChange(tag)', + ng-blur='self.saveTag($event, tag)' + ng-change='self.onTagTitleChange(tag)', + ng-model='self.titles[tag.uuid]', ng-class="{'editing' : self.state.editingTag == tag}", ng-click='self.selectTag(tag)', ng-keyup='$event.keyCode == 13 && $event.target.blur()', - ng-model='tag.title', - should-focus='self.state.newTag || self.state.editingTag == tag', + should-focus='self.state.templateTag || self.state.editingTag == tag', sn-autofocus='true', spellcheck='false' ) .count {{self.state.noteCounts[tag.uuid]}} - .danger.small-text.bold(ng-show='tag.content.conflict_of') Conflicted Copy - .danger.small-text.bold(ng-show='tag.errorDecrypting') Missing Keys + .danger.small-text.bold(ng-show='tag.conflictOf') Conflicted Copy + .danger.small-text.bold(ng-show='tag.errorDecrypting && !tag.waitingForKey') Missing Keys + .info.small-text.bold(ng-show='tag.errorDecrypting && tag.waitingForKey') Waiting For Keys .menu(ng-show='self.state.selectedTag == tag') - a.item(ng-click='self.selectedRenameTag($event, tag)', ng-show='!self.state.editingTag') Rename - a.item(ng-click='self.saveTag($event, tag)', ng-show='self.state.editingTag') Save + a.item(ng-click='self.selectedRenameTag(tag)' ng-show='!self.state.editingTag') Rename + a.item(ng-click='self.saveTag($event, tag)' ng-show='self.state.editingTag') Save a.item(ng-click='self.selectedDeleteTag(tag)') Delete .no-tags-placeholder(ng-show='self.state.tags.length == 0') | No tags. Create one using the add button above. panel-resizer( collapsable='true', - control='self.panelController', + control='self.panelPuppet', default-width='150', hoverable='true', on-resize-finish='self.onPanelResize', diff --git a/app/assets/javascripts/views/tags/tags_view.ts b/app/assets/javascripts/views/tags/tags_view.ts new file mode 100644 index 000000000..4c98770d5 --- /dev/null +++ b/app/assets/javascripts/views/tags/tags_view.ts @@ -0,0 +1,396 @@ +import { WebDirective, PanelPuppet } from '@/types'; +import { WebApplication } from '@/ui_models/application'; +import { + SNTag, + ContentType, + ApplicationEvent, + ComponentAction, + SNSmartTag, + ComponentArea, + SNComponent, + WebPrefKey, + UuidString, + TagMutator +} from 'snjs'; +import template from './tags-view.pug'; +import { AppStateEvent } from '@/ui_models/app_state'; +import { PANEL_NAME_TAGS } from '@/views/constants'; +import { STRING_DELETE_TAG } from '@/strings'; +import { PureViewCtrl } from '@Views/abstract/pure_view_ctrl'; +import { confirmDialog } from '@/services/alertService'; + +type NoteCounts = Partial> + +type TagState = { + tags: SNTag[] + smartTags: SNSmartTag[] + noteCounts: NoteCounts + selectedTag: SNTag + /** If creating a new tag, the previously selected tag will be set here, so that if new + * tag creation is canceled, the previous tag is re-selected */ + previousTag?: SNTag + /** If a tag is in edit state, it will be set as the editingTag */ + editingTag?: SNTag + /** If a tag is new and not yet saved, it will be set as the template tag */ + templateTag?: SNTag +} + +class TagsViewCtrl extends PureViewCtrl { + + /** Passed through template */ + readonly application!: WebApplication + private readonly panelPuppet: PanelPuppet + private unregisterComponent?: any + component?: SNComponent + /** The original name of the edtingTag before it began editing */ + private editingOriginalName?: string + formData: { tagTitle?: string } = {} + titles: Partial> = {} + private removeTagsObserver!: () => void + + /* @ngInject */ + constructor( + $timeout: ng.ITimeoutService, + ) { + super($timeout); + this.panelPuppet = { + onReady: () => this.loadPreferences() + }; + } + + deinit() { + this.removeTagsObserver(); + (this.removeTagsObserver as any) = undefined; + this.unregisterComponent(); + this.unregisterComponent = undefined; + super.deinit(); + } + + getInitialState() { + return { + tags: [], + smartTags: [], + noteCounts: {}, + }; + } + + getState() { + return this.state as TagState; + } + + async setTagState(state: Partial) { + return this.setState(state); + } + + async onAppStart() { + super.onAppStart(); + this.registerComponentHandler(); + } + + async onAppLaunch() { + super.onAppLaunch(); + this.loadPreferences(); + this.beginStreamingItems(); + const smartTags = this.application.getSmartTags(); + this.setTagState({ + smartTags: smartTags, + }); + this.selectTag(smartTags[0]); + } + + /** @override */ + onAppIncrementalSync() { + super.onAppIncrementalSync(); + this.reloadNoteCounts(); + } + + /** + * Returns all officially saved tags as reported by the model manager. + * @access private + */ + getMappedTags() { + const tags = this.application.getItems(ContentType.Tag) as SNTag[]; + return tags.sort((a, b) => { + return a.title < b.title ? -1 : 1; + }); + } + + beginStreamingItems() { + this.removeTagsObserver = this.application.streamItems( + ContentType.Tag, + async (items) => { + await this.setTagState({ + tags: this.getMappedTags(), + smartTags: this.application.getSmartTags(), + }); + this.reloadTitles(items as SNTag[]); + this.reloadNoteCounts(); + if (this.getState().selectedTag) { + /** If the selected tag has been deleted, revert to All view. */ + const matchingTag = items.find((tag) => { + return tag.uuid === this.getState().selectedTag.uuid; + }) as SNTag; + if (matchingTag) { + if (matchingTag.deleted) { + this.selectTag(this.getState().smartTags[0]); + } else { + this.setTagState({ + selectedTag: matchingTag + }) + } + } + } + } + ); + } + + reloadTitles(tags: Array) { + for (const tag of tags) { + this.titles[tag.uuid] = tag.title; + } + } + + /** @override */ + onAppStateEvent(eventName: AppStateEvent, data?: any) { + if (eventName === AppStateEvent.PreferencesChanged) { + this.loadPreferences(); + } else if (eventName === AppStateEvent.TagChanged) { + this.setTagState({ + selectedTag: this.application.getAppState().getSelectedTag() + }); + } + } + + + /** @override */ + async onAppEvent(eventName: ApplicationEvent) { + super.onAppEvent(eventName); + if (eventName === ApplicationEvent.LocalDataIncrementalLoad) { + this.reloadNoteCounts(); + } + } + + reloadNoteCounts() { + let allTags: Array = []; + if (this.getState().tags) { + allTags = allTags.concat(this.getState().tags); + } + if (this.getState().smartTags) { + allTags = allTags.concat(this.getState().smartTags); + } + const noteCounts: NoteCounts = {}; + for (const tag of allTags) { + if (tag.isSmartTag()) { + /** Other smart tags do not contain counts */ + if (tag.isAllTag) { + const notes = this.application.notesMatchingSmartTag(tag as SNSmartTag) + .filter((note) => { + return !note.archived && !note.trashed; + }) + noteCounts[tag.uuid] = notes.length; + } + } else { + const notes = this.application.referencesForItem(tag, ContentType.Note) + .filter((note) => { + return !note.archived && !note.trashed; + }) + noteCounts[tag.uuid] = notes.length; + } + } + this.setTagState({ + noteCounts: noteCounts + }); + } + + loadPreferences() { + if (!this.panelPuppet.ready) { + return; + } + const width = this.application.getPrefsService().getValue(WebPrefKey.TagsPanelWidth); + if (width) { + this.panelPuppet.setWidth!(width); + if (this.panelPuppet.isCollapsed!()) { + this.application.getAppState().panelDidResize( + PANEL_NAME_TAGS, + this.panelPuppet.isCollapsed!() + ); + } + } + } + + onPanelResize = ( + newWidth: number, + lastLeft: number, + isAtMaxWidth: boolean, + isCollapsed: boolean + ) => { + this.application.getPrefsService().setUserPrefValue( + WebPrefKey.TagsPanelWidth, + newWidth, + true + ); + this.application.getAppState().panelDidResize( + PANEL_NAME_TAGS, + isCollapsed + ); + } + + registerComponentHandler() { + this.unregisterComponent = this.application.componentManager!.registerHandler({ + identifier: 'tags', + areas: [ComponentArea.TagsList], + activationHandler: (_, component) => { + this.component = component; + }, + contextRequestHandler: () => { + return undefined; + }, + actionHandler: (_, action, data) => { + if (action === ComponentAction.SelectItem) { + if (data.item.content_type === ContentType.Tag) { + const tag = this.application.findItem(data.item.uuid); + if (tag) { + this.selectTag(tag as SNTag); + } + } else if (data.item.content_type === ContentType.SmartTag) { + this.application.createTemplateItem( + ContentType.SmartTag, + data.item.content + ).then(smartTag => { + this.selectTag(smartTag as SNSmartTag); + }); + } + } else if (action === ComponentAction.ClearSelection) { + this.selectTag(this.getState().smartTags[0]); + } + } + }); + } + + async selectTag(tag: SNTag) { + if (tag.conflictOf) { + this.application.changeAndSaveItem(tag.uuid, (mutator) => { + mutator.conflictOf = undefined; + }) + } + this.application.getAppState().setSelectedTag(tag); + } + + async clickedAddNewTag() { + if (this.getState().editingTag) { + return; + } + const newTag = await this.application.createTemplateItem( + ContentType.Tag + ) as SNTag; + this.setTagState({ + tags: [newTag].concat(this.getState().tags), + previousTag: this.getState().selectedTag, + selectedTag: newTag, + editingTag: newTag, + templateTag: newTag + }); + } + + onTagTitleChange(tag: SNTag | SNSmartTag) { + this.setTagState({ + editingTag: tag + }); + } + + async saveTag($event: Event, tag: SNTag) { + ($event.target! as HTMLInputElement).blur(); + if (this.getState().templateTag) { + return this.saveNewTag(); + } else { + return this.saveTagRename(tag); + } + } + + async saveTagRename(tag: SNTag) { + const newTitle = this.titles[tag.uuid] || ''; + if (newTitle.length === 0) { + this.titles[tag.uuid] = this.editingOriginalName; + this.editingOriginalName = undefined; + return; + } + const existingTag = this.application.findTagByTitle(newTitle); + if (existingTag && existingTag.uuid !== tag.uuid) { + this.application.alertService!.alert( + "A tag with this name already exists." + ); + return; + }; + await this.application.changeAndSaveItem(tag.uuid, (mutator) => { + mutator.title = newTitle; + }); + await this.setTagState({ + editingTag: undefined + }); + } + + async saveNewTag() { + const newTag = this.getState().templateTag!; + const newTitle = this.titles[newTag.uuid] || ''; + if (newTitle.length === 0) { + await this.setTagState({ + templateTag: undefined + }); + return; + } + const existingTag = this.application.findTagByTitle(newTitle); + if (existingTag) { + this.application.alertService!.alert( + "A tag with this name already exists." + ); + return; + }; + const insertedTag = await this.application.insertItem(newTag); + const changedTag = await this.application.changeItem(insertedTag.uuid, (m) => { + m.title = newTitle; + }); + await this.setTagState({ + templateTag: undefined, + editingTag: undefined + }); + this.selectTag(changedTag as SNTag); + await this.application.saveItem(changedTag!.uuid); + } + + async selectedRenameTag(tag: SNTag) { + this.editingOriginalName = tag.title; + await this.setTagState({ + editingTag: tag + }); + document.getElementById('tag-' + tag.uuid)!.focus(); + } + + selectedDeleteTag(tag: SNTag) { + this.removeTag(tag); + } + + async removeTag(tag: SNTag) { + if (await confirmDialog({ + text: STRING_DELETE_TAG, + confirmButtonStyle: 'danger' + })) { + this.application.deleteItem(tag); + this.selectTag(this.getState().smartTags[0]); + } + } +} + +export class TagsView extends WebDirective { + constructor() { + super(); + this.restrict = 'E'; + this.scope = { + application: '=' + }; + this.template = template; + this.replace = true; + this.controller = TagsViewCtrl; + this.controllerAs = 'self'; + this.bindToController = true; + } +} diff --git a/app/assets/stylesheets/_modals.scss b/app/assets/stylesheets/_modals.scss index cc3d50476..faf3e89dd 100644 --- a/app/assets/stylesheets/_modals.scss +++ b/app/assets/stylesheets/_modals.scss @@ -12,7 +12,15 @@ } #privileges-modal { - width: 700px; + width: 400px; + + input { + text-align: center; + } + + .sk-panel-header { + justify-content: center; + } table { margin-bottom: 12px; @@ -58,26 +66,6 @@ } } -#conflict-resolution-modal { - #items { - display: flex; - height: 100%; - } - - .item { - width: 50%; - height: 100%; - flex-grow: 1; - } - - .border { - height: 100%; - background-color: var(--sn-stylekit-border-color); - width: 1px; - margin: 0 15px; - } -} - .header .subtitle { font-size: 1.1rem; } @@ -99,6 +87,7 @@ display: flex; align-items: center; justify-content: center; + flex-direction: column; .sn-component { height: 100%; diff --git a/app/assets/templates/directives/account-menu.pug b/app/assets/templates/directives/account-menu.pug index edf935d8e..97f27c81f 100644 --- a/app/assets/templates/directives/account-menu.pug +++ b/app/assets/templates/directives/account-menu.pug @@ -75,6 +75,7 @@ input.sk-input.mt-5.sk-base( name='server', ng-model='self.state.formData.url', + ng-change='self.onHostInputChange()' placeholder='Server URL', required='', type='text' @@ -122,14 +123,14 @@ ) p.sk-p Stay signed in label.sk-panel-row.justify-left(ng-if='self.notesAndTagsCount() > 0') - .sk-panel-row - input( - ng-bind='true', - ng-change='self.mergeLocalChanged()', - ng-model='self.state.formData.mergeLocal', - type='checkbox' - ) - | Merge local data ({{self.notesAndTagsCount()}} notes and tags) + .sk-horizontal-group.tight + input( + ng-bind='true', + ng-change='self.mergeLocalChanged()', + ng-model='self.state.formData.mergeLocal', + type='checkbox' + ) + p.sk-p Merge local data ({{self.notesAndTagsCount()}} notes and tags) .sk-panel-section(ng-if='self.state.formData.mfa') form.sk-panel-form(ng-submit='self.submitMfaForm()') .sk-p.sk-panel-row {{self.state.formData.mfa.message}} @@ -188,7 +189,7 @@ ) {{self.syncStatus.current}}/{{self.syncStatus.total}} .sk-panel-row a.sk-a.info.sk-panel-row.condensed( - ng-click="self.openPasswordWizard('change-pw')" + ng-click="self.openPasswordWizard()" ) | Change Password a.sk-a.info.sk-panel-row.condensed( @@ -196,21 +197,15 @@ ng-show='self.state.user' ) | Manage Privileges - a.sk-panel-row.justify-left.condensed.success( - ng-click="self.openPasswordWizard('upgrade-security')", - ng-if='self.state.securityUpdateAvailable' - ) - .inline.sk-circle.small.success.mr-8 - .inline Security Update Available .sk-panel-section .sk-panel-section-title Encryption - .sk-panel-section-subtitle.info(ng-if='self.encryptionEnabled()') + .sk-panel-section-subtitle.info(ng-if='self.state.encryptionEnabled') | {{self.encryptionStatusForNotes()}} p.sk-p - | {{self.encryptionStatusString()}} + | {{self.state.encryptionStatusString}} .sk-panel-section .sk-panel-section-title Passcode Lock - div(ng-if='!self.hasPasscode()') + div(ng-if='!self.state.hasPasscode') div(ng-if='self.state.canAddPasscode') .sk-panel-row(ng-if='!self.state.formData.showPasscodeForm') .sk-button.info( @@ -247,7 +242,7 @@ a.neutral.sk-a.sk-panel-row( ng-click='self.state.formData.showPasscodeForm = false' ) Cancel - div(ng-if='self.hasPasscode() && !self.state.formData.showPasscodeForm') + div(ng-if='self.state.hasPasscode && !self.state.formData.showPasscodeForm') .sk-p | Passcode lock is enabled. .sk-notification.contrast @@ -281,7 +276,7 @@ .sk-p | Download a backup of all your data. .sk-panel-row - form.sk-panel-form.sk-panel-row(ng-if='self.encryptedBackupsAvailable()') + form.sk-panel-form.sk-panel-row(ng-if='self.state.encryptionEnabled') .sk-input-group label.sk-horizontal-group.tight input( diff --git a/app/assets/templates/directives/actions-menu.pug b/app/assets/templates/directives/actions-menu.pug index aa7345c66..21ed0b287 100644 --- a/app/assets/templates/directives/actions-menu.pug +++ b/app/assets/templates/directives/actions-menu.pug @@ -7,19 +7,24 @@ target='blank' ) menu-row(label="'Download Actions'") - div(ng-repeat='extension in self.state.extensions') + div(ng-if='self.loadingExtensions') + .sk-menu-panel-header + .sk-menu-panel-column + .sk-menu-panel-header-title Loading... + .sk-spinner.small.loading + div(ng-repeat='extension in self.state.extensions track by extension.uuid; self.loadingExtensions = false') .sk-menu-panel-header( - ng-click='extension.hide = !extension.hide; $event.stopPropagation();' + ng-click='self.updateExtension(extension, { hidden: !extension.hidden }); $event.stopPropagation();' ) .sk-menu-panel-column .sk-menu-panel-header-title {{extension.name}} - .sk-spinner.small.loading(ng-if='extension.loading') - div(ng-if='extension.hide') … + div(ng-if='extension.hidden') … menu-row( - action='self.executeAction(action, extension);', + action='self.executeAction(action, extension)', label='action.label', - ng-if='!extension.hide', - ng-repeat='action in extension.actionsWithContextForItem(self.props.item)', + ng-if='!extension.hidden', + ng-repeat='action in extension.actionsWithContextForItem(self.props.item) track by $index', + disabled='action.running' spinner-class="action.running ? 'info' : null", sub-rows='action.subrows', subtitle='action.desc' diff --git a/app/assets/templates/directives/component-modal.pug b/app/assets/templates/directives/component-modal.pug index 5e5c82efa..150af89e4 100644 --- a/app/assets/templates/directives/component-modal.pug +++ b/app/assets/templates/directives/component-modal.pug @@ -11,5 +11,7 @@ | {{ctrl.component.name}} a.sk-a.info.close-button(ng-click="ctrl.dismiss()") Close component-view.component-view( - component="ctrl.component" + ng-if='ctrl.component.active' + component-uuid="ctrl.component.uuid", + application='ctrl.application' ) diff --git a/app/assets/templates/directives/component-view.pug b/app/assets/templates/directives/component-view.pug index 610e2ab02..8fd05328e 100644 --- a/app/assets/templates/directives/component-view.pug +++ b/app/assets/templates/directives/component-view.pug @@ -4,19 +4,9 @@ .sk-app-bar-item .sk-label.warning There was an issue loading {{ctrl.component.name}}. .right - .sk-app-bar-item(ng-click='ctrl.reloadComponent()') + .sk-app-bar-item(ng-click='ctrl.reloadIframe()') .sk-button.info .sk-label Reload -.sn-component(ng-if='ctrl.showNoThemesMessage') - .sk-app-bar.no-edges.no-top-edge.dynamic-height - .left - .sk-app-bar-item - .sk-label.warning This extension does not support themes. - .right - .sk-app-bar-item(ng-click='ctrl.dismissNoThemesMessage()') - .sk-label Dismiss - .sk-app-bar-item(ng-click='ctrl.disableActiveTheme()') - .sk-label Disable Active Theme .sn-component(ng-if='ctrl.expired') .sk-app-bar.no-edges.no-top-edge.dynamic-height .left @@ -84,10 +74,11 @@ | version of the app. | Ensure you are running at least version 2.1 on all platforms. iframe( - data-component-id='{{ctrl.component.uuid}}', + data-component-id='{{ctrl.componentUuid}}', frameborder='0', - ng-attr-id='component-iframe-{{ctrl.component.uuid}}', - ng-if='ctrl.component && ctrl.componentValid', + ng-init='ctrl.onIframeInit()' + ng-attr-id='component-iframe-{{ctrl.componentUuid}}', + ng-if='ctrl.componentUuid && !ctrl.reloading && ctrl.componentValid', ng-src='{{ctrl.getUrl() | trusted}}', sandbox='allow-scripts allow-top-navigation-by-user-activation allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-modals allow-forms allow-downloads' ) diff --git a/app/assets/templates/directives/conflict-resolution-modal.pug b/app/assets/templates/directives/conflict-resolution-modal.pug deleted file mode 100644 index 9a4d4fdf5..000000000 --- a/app/assets/templates/directives/conflict-resolution-modal.pug +++ /dev/null @@ -1,31 +0,0 @@ -.sn-component - #conflict-resolution-modal.sk-modal.large - .sk-modal-background - .sk-modal-content - .sk-panel - .sk-panel-header - h1.sk-panel-header-title Conflicted items — choose which version to keep - .sk-horizontal-group - a.sk-a.info.close-button(ng-click="ctrl.keepItem1()") Keep left - a.sk-a.info.close-button(ng-click="ctrl.keepItem2()") Keep right - a.sk-a.info.close-button(ng-click="ctrl.keepBoth()") Keep both - a.sk-a.info.close-button(ng-click="ctrl.export()") Export - a.sk-a.info.close-button( - ng-click="ctrl.dismiss(); $event.stopPropagation()" - ) Close - .sk-panel-content.selectable - .sk-panel-section - h3 - strong Content type: - | {{ctrl.contentType}} - p - | You may wish to look at the "created_at" and "updated_at" fields - | of the items to gain better context in deciding which to keep. - #items - #item1.sk-panel.static.item - p.normal(style="white-space: pre-wrap; font-size: 16px;") - | {{ctrl.item1Content}} - .border - #item2.sk-panel.static.item - p.normal(style="white-space: pre-wrap; font-size: 16px;") - | {{ctrl.item2Content}} diff --git a/app/assets/templates/directives/editor-menu.pug b/app/assets/templates/directives/editor-menu.pug index b62c43344..c5536e429 100644 --- a/app/assets/templates/directives/editor-menu.pug +++ b/app/assets/templates/directives/editor-menu.pug @@ -5,28 +5,25 @@ .sk-menu-panel-header-title Note Editor menu-row( action='self.selectComponent(null)', - circle="self.selectedEditor == null && 'success'", + circle="!self.selectedEditorUuid && 'success'", label="'Plain Editor'" ) menu-row( - ng-repeat='editor in self.state.editors' + ng-repeat='editor in self.state.editors track by editor.uuid' action='self.selectComponent(editor)', button-action='self.toggleDefaultForEditor(editor)', - button-class="self.state.defaultEditor == editor ? 'warning' : 'info'", - button-text="self.state.defaultEditor == editor ? 'Undefault' : 'Set Default'", - circle="self.selectedEditor === editor && 'success'", - has-button='self.selectedEditor == editor || self.state.defaultEditor == editor', + button-class="self.isEditorSelected(editor) ? 'warning' : 'info'", + button-text="self.isEditorDefault(editor) ? 'Undefault' : 'Set Default'", + circle="self.isEditorSelected(editor) && 'success'", + has-button='self.isEditorSelected(editor) || isEditorDefault(editor)', label='editor.name', ) .sk-menu-panel-column( - ng-if='editor.content.conflict_of || self.shouldDisplayRunningLocallyLabel(editor)' + ng-if='editor.conflictOf' ) - strong.danger.medium-text( - ng-if='editor.content.conflict_of' + .info( + ng-if='editor.conflictOf' ) Conflicted copy - .sk-sublabel( - ng-if='self.shouldDisplayRunningLocallyLabel(editor)' - ) Running Locally a.no-decoration( href='https://standardnotes.org/extensions', ng-if='self.state.editors.length == 0', diff --git a/app/assets/templates/directives/input-modal.pug b/app/assets/templates/directives/input-modal.pug index e6c0ded10..ec3c43e66 100644 --- a/app/assets/templates/directives/input-modal.pug +++ b/app/assets/templates/directives/input-modal.pug @@ -15,7 +15,6 @@ form(ng-submit="ctrl.submit()") input.sk-input.contrast( ng-model="ctrl.formData.input" - placeholder="{{ctrl.placeholder}}" should-focus="true" sn-autofocus="true" type="{{ctrl.type}}" diff --git a/app/assets/templates/directives/password-wizard.pug b/app/assets/templates/directives/password-wizard.pug index 5f9329323..65f56b69f 100644 --- a/app/assets/templates/directives/password-wizard.pug +++ b/app/assets/templates/directives/password-wizard.pug @@ -5,133 +5,45 @@ .sn-component .sk-panel .sk-panel-header - .sk-panel-header-title {{ctrl.title}} + .sk-panel-header-title {{ctrl.state.title}} a.sk-a.info.close-button(ng-click='ctrl.dismiss()') Close .sk-panel-content - div(ng-if='ctrl.step == 0') - div(ng-if='ctrl.changePassword') - p.sk-p.sk-panel-row - | Changing your password involves changing your encryption key, - | which requires your data to be re-encrypted and synced. - | If you have many items, syncing your data can take several minutes. - p.sk-p.sk-panel-row - | You must keep the application window open during this process. - div(ng-if='ctrl.securityUpdate') - p.sk-p.sk-panel-row - | A new update is available for your account. Updates address - | improvements and enhancements to our security specification. - | This process will guide you through the update, and perform the - | steps necessary with your supervision. - .sk-panel-row - .sk-panel-column - p.sk-p For more information about security updates, please visit - a.sk-a.info( - href='https://standardnotes.org/help/security', - rel='noopener', - target='_blank' - ) standardnotes.org/help/security. - p.sk-panel-row.sk-p - .info Press Continue to proceed. - p - .sk-panel-section(ng-if='ctrl.step > 0') - .sk-panel-section-title Step {{ctrl.step}} — {{ctrl.titleForStep(ctrl.step)}} - div(ng-if='ctrl.step == 1') - p.sk-panel-row.sk-p - | As a result of this process, the entirety of your data will be - | re-encrypted and synced to your account. This is a generally safe - | process, but unforeseen factors like poor network connectivity or a - | sudden shutdown of your computer may cause this process to fail. It's - | best to be on the safe side before large operations such as this one. - .sk-panel-row - .sk-panel-row - .sk-button-group - .sk-button.info(ng-click='ctrl.downloadBackup(true)') - .sk-label Download Encrypted Backup - .sk-button.info(ng-click='ctrl.downloadBackup(false)') - .sk-label Download Decrypted Backup - div(ng-if='ctrl.step == 2') - p.sk-p.sk-panel-row - | As a result of this process, your encryption keys will change. Any - | device on which you use Standard Notes will need to end its session. - | After this process completes, you will be asked to sign back in. - p.sk-p.bold.sk-panel-row.info-i - | Please sign out of all applications (excluding this one), including: - ul - li.sk-p Desktop - li.sk-p Web (Chrome, Firefox, Safari) - li.sk-p Mobile (iOS and Android) - p.sk-p.sk-panel-row - | If you do not currently have access to a device you're signed in on, - | you may proceed, but must make signing out and back in the first step - | upon gaining access to that device. - p.sk-p.sk-panel-row - | Press Continue only when you have - | completed signing out of all your devices. - div(ng-if='ctrl.step == 3') - div(ng-if='ctrl.changePassword') - div(ng-if='ctrl.securityUpdate') - p.sk-panel-row - | Enter your current password. We'll run this through our encryption - | scheme to generate strong new encryption keys. - .sk-panel-row - .sk-panel-row - .sk-panel-column.stretch - form.sk-panel-form - input.sk-input.contrast( - ng-model='ctrl.formData.currentPassword', - placeholder='Current Password', - should-focus='true', - sn-autofocus='true', - type='password' - ) - input.sk-input.contrast( - ng-if='ctrl.changePassword', - ng-model='ctrl.formData.newPassword', - placeholder='New Password', - type='password' - ) - input.sk-input.contrast( - ng-if='ctrl.changePassword', - ng-model='ctrl.formData.newPasswordConfirmation', - placeholder='Confirm New Password', - type='password' - ) - div(ng-if='ctrl.step == 4') - p.sk-panel-row - | Your data is being re-encrypted with your new - | keys and synced to your account. - p.sk-panel-row.danger(ng-if='ctrl.lockContinue') - | Do not close this window until this process completes. - .sk-panel-row - .sk-panel-column - .sk-spinner.small.inline.info.mr-5(ng-if='ctrl.formData.processing') - .inline.bold( - ng-class="{'info' : !ctrl.formData.statusError, 'error' : ctrl.formData.statusError}" + .sk-panel-section(ng-if='ctrl.state.step == 1') + .sk-panel-row + .sk-panel-column.stretch + form.sk-panel-form + input.sk-input.contrast( + ng-model='ctrl.state.formData.currentPassword', + placeholder='Current Password', + should-focus='true', + sn-autofocus='true', + type='password' ) - | {{ctrl.formData.status}} - .sk-panel-column( - delay='1000', - delay-hide='true', - show='ctrl.syncStatus.syncOpInProgress || ctrl.syncStatus.needsMoreSync' - ) - p.info - | Syncing {{ctrl.syncStatus.current}}/{{ctrl.syncStatus.total}} - div(ng-if='ctrl.step == 5') - div(ng-if='ctrl.changePassword') - p.sk-p.sk-panel-row.info-i Your password has been successfully changed. - div(ng-if='ctrl.securityUpdate') - p.sk-p.sk-panel-row.info-i - | The security update has been successfully applied to your account. - p.sk-p.sk-panel-row - | Please ensure you are running the latest version of Standard Notes - | on all platforms to ensure maximum compatibility. - p.sk-p.sk-panel-row - | You may now sign back in on all your devices and close this window. + input.sk-input.contrast( + ng-if='ctrl.props.changePassword', + ng-model='ctrl.state.formData.newPassword', + placeholder='New Password', + type='password' + ) + input.sk-input.contrast( + ng-if='ctrl.props.changePassword', + ng-model='ctrl.state.formData.newPasswordConfirmation', + placeholder='Confirm New Password', + type='password' + ) + .sk-panel-section(ng-if='ctrl.state.step == 2') + div(ng-if='ctrl.props.changePassword') + p.sk-p.sk-panel-row.info-i Your password has been successfully changed. + div(ng-if='ctrl.props.securityUpdate') + p.sk-p.sk-panel-row.info-i + | The account update has been successfully applied to your account. + p.sk-p.sk-panel-row + | Please ensure you are running the latest version of Standard Notes + | on all platforms to ensure maximum compatibility. .sk-panel-footer .empty a.sk-a.info.right( - ng-class="{'disabled' : ctrl.lockContinue}", ng-click='ctrl.nextStep()', - ng-disabled='ctrl.lockContinue') - .sk-spinner.small.inline.info.mr-5(ng-if='ctrl.showSpinner') - | {{ctrl.continueTitle}} + ng-disabled='ctrl.state.lockContinue') + .sk-spinner.small.inline.info.mr-5(ng-if='ctrl.state.showSpinner') + | {{ctrl.state.continueTitle}} diff --git a/app/assets/templates/directives/privileges-management-modal.pug b/app/assets/templates/directives/privileges-management-modal.pug index b54ce1857..cc697e901 100644 --- a/app/assets/templates/directives/privileges-management-modal.pug +++ b/app/assets/templates/directives/privileges-management-modal.pug @@ -46,6 +46,6 @@ | an unlocked application, but do not affect data encryption state. p.sk-p | Privileges sync across your other devices; however, note that if you - | require a "Local Passcode" privilege, and another device does not have - | a local passcode set up, the local passcode requirement will be ignored + | require an "Application Passcode" privilege, and another device does not have + | an application passcode set up, the application passcode requirement will be ignored | on that device. diff --git a/app/assets/templates/directives/revision-preview-modal.pug b/app/assets/templates/directives/revision-preview-modal.pug index 713389c5d..5471a4dda 100644 --- a/app/assets/templates/directives/revision-preview-modal.pug +++ b/app/assets/templates/directives/revision-preview-modal.pug @@ -22,6 +22,7 @@ style="white-space: pre-wrap; font-size: 16px;" ) {{ctrl.content.text}} component-view.component-view( - component="ctrl.editor" - ng-if="ctrl.editor" + component-uuid="ctrl.editor.uuid" + ng-if="ctrl.editor", + application='ctrl.application' ) diff --git a/app/assets/templates/lock-screen.pug b/app/assets/templates/lock-screen.pug deleted file mode 100644 index 55f2be715..000000000 --- a/app/assets/templates/lock-screen.pug +++ /dev/null @@ -1,34 +0,0 @@ -#lock-screen.sn-component - .sk-panel - .sk-panel-header - .sk-panel-header-title Passcode Required - .sk-panel-content - .sk-panel-section - form.sk-panel-form.sk-panel-row(ng-submit='ctrl.submitPasscodeForm($event)') - .sk-panel-column.stretch - input#passcode-input.center-text.sk-input.contrast( - autocomplete='new-password', - autofocus='true', - ng-model='ctrl.formData.passcode', - placeholder='Enter Passcode', - should-focus='true', - sn-autofocus='true', - type='password' - ) - .sk-button-group.stretch.sk-panel-row.form-submit - button.sk-button.info(type='submit') - .sk-label Unlock - .sk-panel-footer - #passcode-reset - a.sk-a.neutral( - ng-click='ctrl.forgotPasscode()', - ng-if='!ctrl.formData.showRecovery' - ) Forgot? - div(ng-if='ctrl.formData.showRecovery') - .sk-p - | If you forgot your local passcode, your only option is to clear - | your local data from this device and sign back in to your account. - .sk-panel-row - a.sk-a.danger.center-text( - ng-click='ctrl.beginDeleteData()' - ) Delete Local Data diff --git a/app/assets/templates/root.pug b/app/assets/templates/root.pug deleted file mode 100644 index c8483e2d7..000000000 --- a/app/assets/templates/root.pug +++ /dev/null @@ -1,18 +0,0 @@ -.main-ui-view( - ng-class='platform' - ) - lock-screen( - ng-if='needsUnlock', - on-success='onSuccessfulUnlock' - ) - #app.app( - ng-class='appClass', - ng-if='!needsUnlock' - ) - tags-panel - notes-panel - editor-panel - - footer( - ng-if='!needsUnlock' - ) diff --git a/app/views/application/app.html.erb b/app/views/application/app.html.erb index f01d26bfe..724234545 100644 --- a/app/views/application/app.html.erb +++ b/app/views/application/app.html.erb @@ -29,7 +29,7 @@ @@ -44,7 +44,7 @@ - + diff --git a/config/application.rb b/config/application.rb index ebbcc7664..01838b3fe 100644 --- a/config/application.rb +++ b/config/application.rb @@ -43,8 +43,8 @@ module StandardNotes base_uri: %w('self'), block_all_mixed_content: false, # see http://www.w3.org/TR/mixed-content/ child_src: ["*", "blob:"], - frame_src: ["*", "blob:", "data:"], - connect_src: ["*"], + frame_src: ["*", "blob:"], + connect_src: ["*", 'data:'], font_src: %w(* 'self'), form_action: %w('self'), frame_ancestors: ["*", "*.standardnotes.org"], @@ -53,7 +53,7 @@ module StandardNotes media_src: %w('self'), object_src: %w('self'), plugin_types: %w(), - script_src: %w('self' 'unsafe-inline'), + script_src: %w('self' 'unsafe-inline' 'wasm-eval' 'unsafe-eval'), style_src: %w(* 'unsafe-inline'), upgrade_insecure_requests: false, # see https://www.w3.org/TR/upgrade-insecure-requests/ } diff --git a/dist/@types/app/assets/javascripts/app.d.ts b/dist/@types/app/assets/javascripts/app.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/dist/@types/app/assets/javascripts/app.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/@types/app/assets/javascripts/application.d.ts b/dist/@types/app/assets/javascripts/application.d.ts new file mode 100644 index 000000000..42de02ddf --- /dev/null +++ b/dist/@types/app/assets/javascripts/application.d.ts @@ -0,0 +1,54 @@ +/// +import { PasswordWizardType } from './types'; +import { SNApplication, Challenge, ChallengeOrchestrator, ProtectedAction } from 'snjs'; +import { AppState, DesktopManager, LockManager, ArchiveManager, NativeExtManager, StatusManager, ThemeManager, PreferencesManager, KeyboardManager } from './services'; +declare type WebServices = { + appState: AppState; + desktopService: DesktopManager; + lockService: LockManager; + archiveService: ArchiveManager; + nativeExtService: NativeExtManager; + statusService: StatusManager; + themeService: ThemeManager; + prefsService: PreferencesManager; + keyboardService: KeyboardManager; +}; +export declare class WebApplication extends SNApplication { + private $compile?; + private scope?; + private onDeinit?; + private webServices; + private currentAuthenticationElement?; + constructor($compile: ng.ICompileService, $timeout: ng.ITimeoutService, scope: ng.IScope, onDeinit: (app: WebApplication) => void); + /** @override */ + deinit(): void; + setWebServices(services: WebServices): void; + /** @access public */ + getAppState(): AppState; + /** @access public */ + getDesktopService(): DesktopManager; + /** @access public */ + getLockService(): LockManager; + /** @access public */ + getArchiveService(): ArchiveManager; + /** @access public */ + getNativeExtService(): NativeExtManager; + /** @access public */ + getStatusService(): StatusManager; + /** @access public */ + getThemeService(): ThemeManager; + /** @access public */ + getPrefsService(): PreferencesManager; + /** @access public */ + getKeyboardService(): KeyboardManager; + checkForSecurityUpdate(): Promise; + presentPasswordWizard(type: PasswordWizardType): void; + promptForChallenge(challenge: Challenge, orchestrator: ChallengeOrchestrator): void; + performProtocolUpgrade(): Promise; + presentPrivilegesModal(action: ProtectedAction, onSuccess?: any, onCancel?: any): Promise; + presentPrivilegesManagementModal(): void; + authenticationInProgress(): boolean; + presentPasswordModal(callback: () => void): void; + presentRevisionPreviewModal(uuid: string, content: any): void; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/applicationManager.d.ts b/dist/@types/app/assets/javascripts/applicationManager.d.ts new file mode 100644 index 000000000..d3d9f5722 --- /dev/null +++ b/dist/@types/app/assets/javascripts/applicationManager.d.ts @@ -0,0 +1,26 @@ +/// +import { WebApplication } from './application'; +declare type AppManagerChangeCallback = () => void; +export declare class ApplicationManager { + $compile: ng.ICompileService; + $rootScope: ng.IRootScopeService; + $timeout: ng.ITimeoutService; + applications: WebApplication[]; + changeObservers: AppManagerChangeCallback[]; + activeApplication?: WebApplication; + constructor($compile: ng.ICompileService, $rootScope: ng.IRootScopeService, $timeout: ng.ITimeoutService); + private createDefaultApplication; + /** @callback */ + onApplicationDeinit(application: WebApplication): void; + private createNewApplication; + get application(): WebApplication | undefined; + getApplications(): WebApplication[]; + /** + * Notifies observer when the active application has changed. + * Any application which is no longer active is destroyed, and + * must be removed from the interface. + */ + addApplicationChangeObserver(callback: AppManagerChangeCallback): void; + private notifyObserversOfAppChange; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/controllers/abstract/pure_ctrl.d.ts b/dist/@types/app/assets/javascripts/controllers/abstract/pure_ctrl.d.ts new file mode 100644 index 000000000..583e51dac --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/abstract/pure_ctrl.d.ts @@ -0,0 +1,36 @@ +/// +import { WebApplication } from './../../application'; +import { ApplicationEvent } from 'snjs'; +export declare type CtrlState = Partial>; +export declare type CtrlProps = Partial>; +export declare class PureCtrl { + $timeout: ng.ITimeoutService; + /** Passed through templates */ + application?: WebApplication; + props: CtrlProps; + state: CtrlState; + private unsubApp; + private unsubState; + private stateTimeout; + constructor($timeout: ng.ITimeoutService); + $onInit(): void; + deinit(): void; + $onDestroy(): void; + get appState(): import("../../services/state").AppState; + /** @private */ + resetState(): Promise; + /** @override */ + getInitialState(): {}; + setState(state: CtrlState): Promise; + updateUI(func: () => void): Promise; + initProps(props: CtrlProps): void; + addAppStateObserver(): void; + onAppStateEvent(eventName: any, data: any): void; + addAppEventObserver(): void; + onAppEvent(eventName: ApplicationEvent): void; + /** @override */ + onAppStart(): Promise; + onAppLaunch(): Promise; + onAppKeyChange(): Promise; + onAppSync(): void; +} diff --git a/dist/@types/app/assets/javascripts/controllers/applicationView.d.ts b/dist/@types/app/assets/javascripts/controllers/applicationView.d.ts new file mode 100644 index 000000000..4cb07e488 --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/applicationView.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../types'; +export declare class ApplicationView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/controllers/constants.d.ts b/dist/@types/app/assets/javascripts/controllers/constants.d.ts new file mode 100644 index 000000000..3eadaa31f --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/constants.d.ts @@ -0,0 +1,2 @@ +export declare const PANEL_NAME_NOTES = "notes"; +export declare const PANEL_NAME_TAGS = "tags"; diff --git a/dist/@types/app/assets/javascripts/controllers/editor.d.ts b/dist/@types/app/assets/javascripts/controllers/editor.d.ts new file mode 100644 index 000000000..f985f8c5f --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/editor.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../types'; +export declare class EditorPanel extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/controllers/footer.d.ts b/dist/@types/app/assets/javascripts/controllers/footer.d.ts new file mode 100644 index 000000000..9762f99cf --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/footer.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../types'; +export declare class Footer extends WebDirective { + constructor(); +} diff --git a/app/assets/javascripts/controllers/index.js b/dist/@types/app/assets/javascripts/controllers/index.d.ts similarity index 81% rename from app/assets/javascripts/controllers/index.js rename to dist/@types/app/assets/javascripts/controllers/index.d.ts index d78987c9e..beed45331 100644 --- a/app/assets/javascripts/controllers/index.js +++ b/dist/@types/app/assets/javascripts/controllers/index.d.ts @@ -4,4 +4,4 @@ export { Footer } from './footer'; export { NotesPanel } from './notes/notes'; export { TagsPanel } from './tags'; export { Root } from './root'; -export { LockScreen } from './lockScreen'; \ No newline at end of file +export { ApplicationView } from './applicationView'; diff --git a/dist/@types/app/assets/javascripts/controllers/notes/note_utils.d.ts b/dist/@types/app/assets/javascripts/controllers/notes/note_utils.d.ts new file mode 100644 index 000000000..ac224a63f --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/notes/note_utils.d.ts @@ -0,0 +1,10 @@ +import { SNNote, SNTag } from 'snjs'; +export declare enum NoteSortKey { + CreatedAt = "created_at", + UpdatedAt = "updated_at", + ClientUpdatedAt = "client_updated_at", + Title = "title" +} +export declare function filterAndSortNotes(notes: SNNote[], selectedTag: SNTag, showArchived: boolean, hidePinned: boolean, filterText: string, sortBy: string, reverse: boolean): SNNote[]; +export declare function filterNotes(notes: SNNote[], selectedTag: SNTag, showArchived: boolean, hidePinned: boolean, filterText: string): SNNote[]; +export declare function sortNotes(notes: SNNote[] | undefined, sortBy: string, reverse: boolean): SNNote[]; diff --git a/dist/@types/app/assets/javascripts/controllers/notes/notes.d.ts b/dist/@types/app/assets/javascripts/controllers/notes/notes.d.ts new file mode 100644 index 000000000..67451635b --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/notes/notes.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class NotesPanel extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/controllers/root.d.ts b/dist/@types/app/assets/javascripts/controllers/root.d.ts new file mode 100644 index 000000000..4a6f9a2cf --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/root.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../types'; +export declare class Root extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/controllers/tags.d.ts b/dist/@types/app/assets/javascripts/controllers/tags.d.ts new file mode 100644 index 000000000..e704cae65 --- /dev/null +++ b/dist/@types/app/assets/javascripts/controllers/tags.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../types'; +export declare class TagsPanel extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/database.d.ts b/dist/@types/app/assets/javascripts/database.d.ts new file mode 100644 index 000000000..7cea92fd2 --- /dev/null +++ b/dist/@types/app/assets/javascripts/database.d.ts @@ -0,0 +1,28 @@ +import { SNAlertService } from "@node_modules/snjs/dist/@types"; +export declare class Database { + private locked; + private alertService?; + private db?; + deinit(): void; + setAlertService(alertService: SNAlertService): void; + /** + * Relinquishes the lock and allows db operations to proceed + */ + unlock(): void; + /** + * Opens the database natively, or returns the existing database object if already opened. + * @param onNewDatabase - Callback to invoke when a database has been created + * as part of the open process. This can happen on new application sessions, or if the + * browser deleted the database without the user being aware. + */ + openDatabase(onNewDatabase?: () => void): Promise; + getAllPayloads(): Promise; + savePayload(payload: any): Promise; + savePayloads(payloads: any[]): Promise; + private putItems; + deletePayload(uuid: string): Promise; + clearAllPayloads(): Promise; + private showAlert; + private showGenericError; + private displayOfflineAlert; +} diff --git a/dist/@types/app/assets/javascripts/directives/functional/autofocus.d.ts b/dist/@types/app/assets/javascripts/directives/functional/autofocus.d.ts new file mode 100644 index 000000000..c2dd7788f --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/autofocus.d.ts @@ -0,0 +1,8 @@ +/// +export declare function autofocus($timeout: ng.ITimeoutService): { + restrict: string; + scope: { + shouldFocus: string; + }; + link: ($scope: import("angular").IScope, $element: JQLite) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/click-outside.d.ts b/dist/@types/app/assets/javascripts/directives/functional/click-outside.d.ts new file mode 100644 index 000000000..7d1821e2d --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/click-outside.d.ts @@ -0,0 +1,6 @@ +/// +export declare function clickOutside($document: ng.IDocumentService): { + restrict: string; + replace: boolean; + link: ($scope: import("angular").IScope, $element: JQLite, attrs: any) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/delay-hide.d.ts b/dist/@types/app/assets/javascripts/directives/functional/delay-hide.d.ts new file mode 100644 index 000000000..92b3913b6 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/delay-hide.d.ts @@ -0,0 +1,9 @@ +import angular from 'angular'; +export declare function delayHide($timeout: ng.ITimeoutService): { + restrict: string; + scope: { + show: string; + delay: string; + }; + link: (scope: angular.IScope, elem: JQLite) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/elemReady.d.ts b/dist/@types/app/assets/javascripts/directives/functional/elemReady.d.ts new file mode 100644 index 000000000..439232246 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/elemReady.d.ts @@ -0,0 +1,5 @@ +/// +export declare function elemReady($parse: ng.IParseService): { + restrict: string; + link: ($scope: import("angular").IScope, elem: JQLite, attrs: any) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/file-change.d.ts b/dist/@types/app/assets/javascripts/directives/functional/file-change.d.ts new file mode 100644 index 000000000..3a555f1a7 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/file-change.d.ts @@ -0,0 +1,8 @@ +/// +export declare function fileChange(): { + restrict: string; + scope: { + handler: string; + }; + link: (scope: import("angular").IScope, element: JQLite) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/index.d.ts b/dist/@types/app/assets/javascripts/directives/functional/index.d.ts new file mode 100644 index 000000000..0a8bd4c53 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/index.d.ts @@ -0,0 +1,9 @@ +export { autofocus } from './autofocus'; +export { clickOutside } from './click-outside'; +export { delayHide } from './delay-hide'; +export { elemReady } from './elemReady'; +export { fileChange } from './file-change'; +export { infiniteScroll } from './infiniteScroll'; +export { lowercase } from './lowercase'; +export { selectOnFocus } from './selectOnFocus'; +export { snEnter } from './snEnter'; diff --git a/dist/@types/app/assets/javascripts/directives/functional/infiniteScroll.d.ts b/dist/@types/app/assets/javascripts/directives/functional/infiniteScroll.d.ts new file mode 100644 index 000000000..403e34066 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/infiniteScroll.d.ts @@ -0,0 +1,4 @@ +/// +export declare function infiniteScroll(): { + link: (scope: import("angular").IScope, elem: JQLite, attrs: any) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/lowercase.d.ts b/dist/@types/app/assets/javascripts/directives/functional/lowercase.d.ts new file mode 100644 index 000000000..04f148a7d --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/lowercase.d.ts @@ -0,0 +1,5 @@ +/// +export declare function lowercase(): { + require: string; + link: (scope: import("angular").IScope, _: JQLite, attrs: any, ctrl: any) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/selectOnClick.d.ts b/dist/@types/app/assets/javascripts/directives/functional/selectOnClick.d.ts new file mode 100644 index 000000000..cc0c10a01 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/selectOnClick.d.ts @@ -0,0 +1,5 @@ +/// +export declare function selectOnClick($window: ng.IWindowService): { + restrict: string; + link: (scope: import("angular").IScope, element: JQLite) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/selectOnFocus.d.ts b/dist/@types/app/assets/javascripts/directives/functional/selectOnFocus.d.ts new file mode 100644 index 000000000..988344a84 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/selectOnFocus.d.ts @@ -0,0 +1,5 @@ +/// +export declare function selectOnFocus($window: ng.IWindowService): { + restrict: string; + link: (scope: import("angular").IScope, element: JQLite) => void; +}; diff --git a/dist/@types/app/assets/javascripts/directives/functional/snEnter.d.ts b/dist/@types/app/assets/javascripts/directives/functional/snEnter.d.ts new file mode 100644 index 000000000..7fc8454ec --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/functional/snEnter.d.ts @@ -0,0 +1,2 @@ +/// +export declare function snEnter(): (scope: import("angular").IScope, element: JQLite, attrs: any) => void; diff --git a/dist/@types/app/assets/javascripts/directives/views/accountMenu.d.ts b/dist/@types/app/assets/javascripts/directives/views/accountMenu.d.ts new file mode 100644 index 000000000..f72d78730 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/accountMenu.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class AccountMenu extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/actionsMenu.d.ts b/dist/@types/app/assets/javascripts/directives/views/actionsMenu.d.ts new file mode 100644 index 000000000..762a1eea1 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/actionsMenu.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class ActionsMenu extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/challengeModal.d.ts b/dist/@types/app/assets/javascripts/directives/views/challengeModal.d.ts new file mode 100644 index 000000000..39de84ea0 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/challengeModal.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class ChallengeModal extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/componentModal.d.ts b/dist/@types/app/assets/javascripts/directives/views/componentModal.d.ts new file mode 100644 index 000000000..91221ca57 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/componentModal.d.ts @@ -0,0 +1,24 @@ +/// +import { WebApplication } from '@/ui_models/application'; +import { SNComponent, LiveItem } from 'snjs'; +import { WebDirective } from './../../types'; +export declare type ComponentModalScope = { + componentUuid: string; + onDismiss: () => void; + application: WebApplication; +}; +export declare class ComponentModalCtrl implements ComponentModalScope { + $element: JQLite; + componentUuid: string; + onDismiss: () => void; + application: WebApplication; + liveComponent: LiveItem; + component: SNComponent; + constructor($element: JQLite); + $onInit(): void; + $onDestroy(): void; + dismiss(): void; +} +export declare class ComponentModal extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/componentView.d.ts b/dist/@types/app/assets/javascripts/directives/views/componentView.d.ts new file mode 100644 index 000000000..7d100b1c9 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/componentView.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class ComponentView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/editorMenu.d.ts b/dist/@types/app/assets/javascripts/directives/views/editorMenu.d.ts new file mode 100644 index 000000000..5125e0cf5 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/editorMenu.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class EditorMenu extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/index.d.ts b/dist/@types/app/assets/javascripts/directives/views/index.d.ts new file mode 100644 index 000000000..1f51d0023 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/index.d.ts @@ -0,0 +1,15 @@ +export { AccountMenu } from './accountMenu'; +export { ActionsMenu } from './actionsMenu'; +export { ComponentModal } from './componentModal'; +export { ComponentView } from './componentView'; +export { EditorMenu } from './editorMenu'; +export { InputModal } from './inputModal'; +export { MenuRow } from './menuRow'; +export { PanelResizer } from './panelResizer'; +export { PasswordWizard } from './passwordWizard'; +export { PermissionsModal } from './permissionsModal'; +export { PrivilegesAuthModal } from './privilegesAuthModal'; +export { PrivilegesManagementModal } from './privilegesManagementModal'; +export { RevisionPreviewModal } from './revisionPreviewModal'; +export { SessionHistoryMenu } from './sessionHistoryMenu'; +export { SyncResolutionMenu } from './syncResolutionMenu'; diff --git a/dist/@types/app/assets/javascripts/directives/views/inputModal.d.ts b/dist/@types/app/assets/javascripts/directives/views/inputModal.d.ts new file mode 100644 index 000000000..d4ef15914 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/inputModal.d.ts @@ -0,0 +1,11 @@ +/// +import { WebDirective } from './../../types'; +export interface InputModalScope extends Partial { + type: string; + title: string; + message: string; + callback: (value: string) => void; +} +export declare class InputModal extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/menuRow.d.ts b/dist/@types/app/assets/javascripts/directives/views/menuRow.d.ts new file mode 100644 index 000000000..266f26a15 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/menuRow.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class MenuRow extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/panelResizer.d.ts b/dist/@types/app/assets/javascripts/directives/views/panelResizer.d.ts new file mode 100644 index 000000000..71d312ac5 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/panelResizer.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class PanelResizer extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/passwordWizard.d.ts b/dist/@types/app/assets/javascripts/directives/views/passwordWizard.d.ts new file mode 100644 index 000000000..66cf6d167 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/passwordWizard.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class PasswordWizard extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/permissionsModal.d.ts b/dist/@types/app/assets/javascripts/directives/views/permissionsModal.d.ts new file mode 100644 index 000000000..6ff96fbc2 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/permissionsModal.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class PermissionsModal extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/privilegesAuthModal.d.ts b/dist/@types/app/assets/javascripts/directives/views/privilegesAuthModal.d.ts new file mode 100644 index 000000000..ac3ad1254 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/privilegesAuthModal.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class PrivilegesAuthModal extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/privilegesManagementModal.d.ts b/dist/@types/app/assets/javascripts/directives/views/privilegesManagementModal.d.ts new file mode 100644 index 000000000..0b86ff190 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/privilegesManagementModal.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class PrivilegesManagementModal extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/revisionPreviewModal.d.ts b/dist/@types/app/assets/javascripts/directives/views/revisionPreviewModal.d.ts new file mode 100644 index 000000000..21a54ae68 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/revisionPreviewModal.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class RevisionPreviewModal extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/sessionHistoryMenu.d.ts b/dist/@types/app/assets/javascripts/directives/views/sessionHistoryMenu.d.ts new file mode 100644 index 000000000..44adc2d36 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/sessionHistoryMenu.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class SessionHistoryMenu extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/directives/views/syncResolutionMenu.d.ts b/dist/@types/app/assets/javascripts/directives/views/syncResolutionMenu.d.ts new file mode 100644 index 000000000..6e3fdcf04 --- /dev/null +++ b/dist/@types/app/assets/javascripts/directives/views/syncResolutionMenu.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class SyncResolutionMenu extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/filters/index.d.ts b/dist/@types/app/assets/javascripts/filters/index.d.ts new file mode 100644 index 000000000..02443ccd5 --- /dev/null +++ b/dist/@types/app/assets/javascripts/filters/index.d.ts @@ -0,0 +1 @@ +export { trusted } from './trusted'; diff --git a/dist/@types/app/assets/javascripts/filters/trusted.d.ts b/dist/@types/app/assets/javascripts/filters/trusted.d.ts new file mode 100644 index 000000000..e53444239 --- /dev/null +++ b/dist/@types/app/assets/javascripts/filters/trusted.d.ts @@ -0,0 +1,2 @@ +/// +export declare function trusted($sce: ng.ISCEService): (url: string) => any; diff --git a/dist/@types/app/assets/javascripts/index.d.ts b/dist/@types/app/assets/javascripts/index.d.ts new file mode 100644 index 000000000..e3ea66c1b --- /dev/null +++ b/dist/@types/app/assets/javascripts/index.d.ts @@ -0,0 +1,9 @@ +import 'sn-stylekit/dist/stylekit.css'; +import '../stylesheets/index.css.scss'; +import 'angular'; +import '../../../vendor/assets/javascripts/angular-sanitize'; +import '../../../vendor/assets/javascripts/zip/deflate'; +import '../../../vendor/assets/javascripts/zip/inflate'; +import '../../../vendor/assets/javascripts/zip/zip'; +import '../../../vendor/assets/javascripts/zip/z-worker'; +import './app'; diff --git a/dist/@types/app/assets/javascripts/interface.d.ts b/dist/@types/app/assets/javascripts/interface.d.ts new file mode 100644 index 000000000..9ddc931e1 --- /dev/null +++ b/dist/@types/app/assets/javascripts/interface.d.ts @@ -0,0 +1,29 @@ +import { DeviceInterface, SNApplication } from 'snjs'; +export declare class WebDeviceInterface extends DeviceInterface { + private database; + constructor(namespace: string, timeout: any); + setApplication(application: SNApplication): void; + deinit(): void; + getRawStorageValue(key: string): Promise; + getAllRawStorageKeyValues(): Promise<{ + key: string; + value: any; + }[]>; + setRawStorageValue(key: string, value: any): Promise; + removeRawStorageValue(key: string): Promise; + removeAllRawStorageValues(): Promise; + openDatabase(): Promise<{ + isNewDatabase?: boolean | undefined; + } | undefined>; + private getDatabaseKeyPrefix; + private keyForPayloadId; + getAllRawDatabasePayloads(): Promise; + saveRawDatabasePayload(payload: any): Promise; + saveRawDatabasePayloads(payloads: any[]): Promise; + removeRawDatabasePayloadWithId(id: string): Promise; + removeAllRawDatabasePayloads(): Promise; + getKeychainValue(): Promise; + setKeychainValue(value: any): Promise; + clearKeychainValue(): Promise; + openUrl(url: string): void; +} diff --git a/dist/@types/app/assets/javascripts/routes.d.ts b/dist/@types/app/assets/javascripts/routes.d.ts new file mode 100644 index 000000000..f797ed06f --- /dev/null +++ b/dist/@types/app/assets/javascripts/routes.d.ts @@ -0,0 +1,2 @@ +/// +export declare function configRoutes($locationProvider: ng.ILocationProvider): void; diff --git a/dist/@types/app/assets/javascripts/services/alertService.d.ts b/dist/@types/app/assets/javascripts/services/alertService.d.ts new file mode 100644 index 000000000..d5d23a46d --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/alertService.d.ts @@ -0,0 +1,5 @@ +import { SNAlertService } from 'snjs'; +export declare class AlertService extends SNAlertService { + alert(text: string, title: string, closeButtonText: string | undefined, onClose: () => void): Promise; + confirm(text: string, title: string, confirmButtonText: string | undefined, cancelButtonText: string | undefined, onConfirm: () => void, onCancel: () => void, destructive?: boolean): Promise; +} diff --git a/dist/@types/app/assets/javascripts/services/archiveManager.d.ts b/dist/@types/app/assets/javascripts/services/archiveManager.d.ts new file mode 100644 index 000000000..7001f94d5 --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/archiveManager.d.ts @@ -0,0 +1,16 @@ +import { WebApplication } from '@/ui_models/application'; +import { SNItem } from 'snjs'; +export declare class ArchiveManager { + private readonly application; + private textFile?; + constructor(application: WebApplication); + downloadBackup(encrypted: boolean): Promise; + downloadBackupOfItems(items: SNItem[], encrypted: boolean): Promise; + private formattedDate; + private itemsData; + private get zip(); + private loadZip; + private downloadZippedItems; + private hrefForData; + private downloadData; +} diff --git a/dist/@types/app/assets/javascripts/services/desktopManager.d.ts b/dist/@types/app/assets/javascripts/services/desktopManager.d.ts new file mode 100644 index 000000000..4d6c33bd4 --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/desktopManager.d.ts @@ -0,0 +1,62 @@ +/// +import { SNComponent, PurePayload } from 'snjs'; +import { WebApplication } from '@/ui_models/application'; +import { ApplicationService, ApplicationEvent } from 'snjs'; +declare type UpdateObserverCallback = (component: SNComponent) => void; +declare type ComponentActivationCallback = (payload: PurePayload) => void; +declare type ComponentActivationObserver = { + id: string; + callback: ComponentActivationCallback; +}; +export declare class DesktopManager extends ApplicationService { + $rootScope: ng.IRootScopeService; + $timeout: ng.ITimeoutService; + componentActivationObservers: ComponentActivationObserver[]; + updateObservers: { + callback: UpdateObserverCallback; + }[]; + isDesktop: any; + dataLoaded: boolean; + dataLoadHandler?: () => void; + majorDataChangeHandler?: () => void; + extServerHost?: string; + installationSyncHandler?: (payloads: PurePayload[]) => void; + installComponentHandler?: (payload: PurePayload) => void; + lastSearchedText?: string; + searchHandler?: (text?: string) => void; + constructor($rootScope: ng.IRootScopeService, $timeout: ng.ITimeoutService, application: WebApplication); + get webApplication(): WebApplication; + deinit(): void; + onAppEvent(eventName: ApplicationEvent): Promise; + saveBackup(): void; + getExtServerHost(): string | undefined; + /** + * Sending a component in its raw state is really slow for the desktop app + * Keys are not passed into ItemParams, so the result is not encrypted + */ + convertComponentForTransmission(component: SNComponent): Promise; + syncComponentsInstallation(components: SNComponent[]): void; + installComponent(component: SNComponent): Promise; + registerUpdateObserver(callback: UpdateObserverCallback): () => void; + searchText(text?: string): void; + redoSearch(): void; + desktop_setSearchHandler(handler: (text?: string) => void): void; + desktop_windowGainedFocus(): void; + desktop_windowLostFocus(): void; + desktop_onComponentInstallationComplete(componentData: any, error: any): Promise; + desktop_registerComponentActivationObserver(callback: ComponentActivationCallback): { + id: string; + callback: ComponentActivationCallback; + }; + desktop_deregisterComponentActivationObserver(observer: ComponentActivationObserver): void; + notifyComponentActivation(component: SNComponent): Promise; + desktop_setExtServerHost(host: string): void; + desktop_setComponentInstallationSyncHandler(handler: (payloads: PurePayload[]) => void): void; + desktop_setInstallComponentHandler(handler: (payload: PurePayload) => void): void; + desktop_setInitialDataLoadHandler(handler: () => void): void; + desktop_requestBackupFile(callback: (data: any) => void): Promise; + desktop_setMajorDataChangeHandler(handler: () => void): void; + desktop_didBeginBackup(): void; + desktop_didFinishBackup(success: boolean): void; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/services/index.d.ts b/dist/@types/app/assets/javascripts/services/index.d.ts new file mode 100644 index 000000000..3de0713bf --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/index.d.ts @@ -0,0 +1,9 @@ +export { AlertService } from './alertService'; +export { ArchiveManager } from './archiveManager'; +export { DesktopManager } from './desktopManager'; +export { KeyboardManager } from './keyboardManager'; +export { LockManager } from './lockManager'; +export { NativeExtManager } from './nativeExtManager'; +export { PreferencesManager } from './preferencesManager'; +export { StatusManager } from './statusManager'; +export { ThemeManager } from './themeManager'; diff --git a/dist/@types/app/assets/javascripts/services/keyboardManager.d.ts b/dist/@types/app/assets/javascripts/services/keyboardManager.d.ts new file mode 100644 index 000000000..bab1b4cff --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/keyboardManager.d.ts @@ -0,0 +1,39 @@ +export declare enum KeyboardKey { + Tab = "Tab", + Backspace = "Backspace", + Up = "ArrowUp", + Down = "ArrowDown" +} +export declare enum KeyboardModifier { + Shift = "Shift", + Ctrl = "Control", + /** ⌘ key on Mac, ⊞ key on Windows */ + Meta = "Meta", + Alt = "Alt" +} +declare enum KeyboardKeyEvent { + Down = "KeyEventDown", + Up = "KeyEventUp" +} +declare type KeyboardObserver = { + key?: KeyboardKey | string; + modifiers?: KeyboardModifier[]; + onKeyDown?: (event: KeyboardEvent) => void; + onKeyUp?: (event: KeyboardEvent) => void; + element?: HTMLElement; + elements?: HTMLElement[]; + notElement?: HTMLElement; + notElementIds?: string[]; +}; +export declare class KeyboardManager { + private observers; + private handleKeyDown; + private handleKeyUp; + constructor(); + deinit(): void; + modifiersForEvent(event: KeyboardEvent): KeyboardModifier[]; + eventMatchesKeyAndModifiers(event: KeyboardEvent, key: KeyboardKey | string, modifiers?: KeyboardModifier[]): boolean; + notifyObserver(event: KeyboardEvent, keyEvent: KeyboardKeyEvent): void; + addKeyObserver(observer: KeyboardObserver): () => void; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/services/lockManager.d.ts b/dist/@types/app/assets/javascripts/services/lockManager.d.ts new file mode 100644 index 000000000..5fc508c13 --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/lockManager.d.ts @@ -0,0 +1,26 @@ +import { WebApplication } from '@/ui_models/application'; +export declare class LockManager { + private application; + private unsubState; + private pollFocusInterval; + private lastFocusState?; + private lockAfterDate?; + private lockTimeout?; + constructor(application: WebApplication); + observeVisibility(): void; + deinit(): void; + setAutoLockInterval(interval: number): Promise; + getAutoLockInterval(): Promise; + /** + * Verify document is in focus every so often as visibilitychange event is + * not triggered on a typical window blur event but rather on tab changes. + */ + beginWebFocusPolling(): void; + getAutoLockIntervalOptions(): { + value: number; + label: string; + }[]; + documentVisibilityChanged(visible: boolean): Promise; + beginAutoLockTimer(): Promise; + cancelAutoLockTimer(): void; +} diff --git a/dist/@types/app/assets/javascripts/services/nativeExtManager.d.ts b/dist/@types/app/assets/javascripts/services/nativeExtManager.d.ts new file mode 100644 index 000000000..f0d040bdf --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/nativeExtManager.d.ts @@ -0,0 +1,18 @@ +import { SNPredicate, ApplicationService } from 'snjs'; +import { PayloadContent } from '@node_modules/snjs/dist/@types/protocol/payloads/generator'; +/** A class for handling installation of system extensions */ +export declare class NativeExtManager extends ApplicationService { + extManagerId: string; + batchManagerId: string; + /** @override */ + onAppLaunch(): Promise; + get extManagerPred(): SNPredicate; + get batchManagerPred(): SNPredicate; + get extMgrUrl(): any; + get batchMgrUrl(): any; + reload(): void; + resolveExtensionsManager(): Promise; + extensionsManagerTemplateContent(): PayloadContent; + resolveBatchManager(): Promise; + batchManagerTemplateContent(): PayloadContent; +} diff --git a/dist/@types/app/assets/javascripts/services/preferencesManager.d.ts b/dist/@types/app/assets/javascripts/services/preferencesManager.d.ts new file mode 100644 index 000000000..5d521f4d6 --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/preferencesManager.d.ts @@ -0,0 +1,14 @@ +import { WebApplication } from '@/ui_models/application'; +import { ApplicationService, WebPrefKey } from 'snjs'; +export declare class PreferencesManager extends ApplicationService { + private userPreferences; + private loadingPrefs; + /** @override */ + onAppLaunch(): Promise; + get webApplication(): WebApplication; + streamPreferences(): void; + private loadSingleton; + syncUserPreferences(): void; + getValue(key: WebPrefKey, defaultValue?: any): any; + setUserPrefValue(key: WebPrefKey, value: any, sync?: boolean): Promise; +} diff --git a/dist/@types/app/assets/javascripts/services/state.d.ts b/dist/@types/app/assets/javascripts/services/state.d.ts new file mode 100644 index 000000000..8854ab5a2 --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/state.d.ts @@ -0,0 +1,72 @@ +/// +import { SNTag, SNNote, SNUserPrefs } from 'snjs'; +import { WebApplication } from '@/ui_models/application'; +import { Editor } from '@/ui_models/editor'; +export declare enum AppStateEvent { + TagChanged = 1, + ActiveEditorChanged = 2, + PreferencesChanged = 3, + PanelResized = 4, + EditorFocused = 5, + BeganBackupDownload = 6, + EndedBackupDownload = 7, + DesktopExtsReady = 8, + WindowDidFocus = 9, + WindowDidBlur = 10 +} +export declare enum EventSource { + UserInteraction = 1, + Script = 2 +} +declare type ObserverCallback = (event: AppStateEvent, data?: any) => Promise; +export declare class AppState { + $rootScope: ng.IRootScopeService; + $timeout: ng.ITimeoutService; + application: WebApplication; + observers: ObserverCallback[]; + locked: boolean; + unsubApp: any; + rootScopeCleanup1: any; + rootScopeCleanup2: any; + onVisibilityChange: any; + selectedTag?: SNTag; + userPreferences?: SNUserPrefs; + multiEditorEnabled: boolean; + constructor($rootScope: ng.IRootScopeService, $timeout: ng.ITimeoutService, application: WebApplication); + deinit(): void; + /** + * Creates a new editor if one doesn't exist. If one does, we'll replace the + * editor's note with an empty one. + */ + createEditor(title?: string): void; + openEditor(noteUuid: string): Promise; + getActiveEditor(): Editor; + getEditors(): Editor[]; + closeEditor(editor: Editor): void; + closeActiveEditor(): void; + closeAllEditors(): void; + editorForNote(note: SNNote): Editor | undefined; + streamNotesAndTags(): void; + addAppEventObserver(): void; + isLocked(): boolean; + registerVisibilityObservers(): void; + /** @returns A function that unregisters this observer */ + addObserver(callback: ObserverCallback): () => void; + notifyEvent(eventName: AppStateEvent, data?: any): Promise; + setSelectedTag(tag: SNTag): void; + /** Returns the tags that are referncing this note */ + getNoteTags(note: SNNote): SNTag[]; + /** Returns the notes this tag references */ + getTagNotes(tag: SNTag): SNNote[]; + getSelectedTag(): SNTag | undefined; + setUserPreferences(preferences: SNUserPrefs): void; + panelDidResize(name: string, collapsed: boolean): void; + editorDidFocus(eventSource: EventSource): void; + beganBackupDownload(): void; + endedBackupDownload(success: boolean): void; + /** + * When the desktop appplication extension server is ready. + */ + desktopExtensionsReady(): void; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/services/statusManager.d.ts b/dist/@types/app/assets/javascripts/services/statusManager.d.ts new file mode 100644 index 000000000..d5b83f03a --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/statusManager.d.ts @@ -0,0 +1,17 @@ +import { FooterStatus } from '@/types'; +declare type StatusCallback = (string: string) => void; +export declare class StatusManager { + private statuses; + private observers; + statusFromString(string: string): { + string: string; + }; + replaceStatusWithString(status: FooterStatus, string: string): FooterStatus; + addStatusFromString(string: string): FooterStatus; + addStatus(status: FooterStatus): FooterStatus; + removeStatus(status: FooterStatus): undefined; + getStatusString(): string; + notifyObservers(): void; + addStatusObserver(callback: StatusCallback): () => void; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/services/themeManager.d.ts b/dist/@types/app/assets/javascripts/services/themeManager.d.ts new file mode 100644 index 000000000..f141d6ea9 --- /dev/null +++ b/dist/@types/app/assets/javascripts/services/themeManager.d.ts @@ -0,0 +1,23 @@ +import { WebApplication } from '@/ui_models/application'; +import { ApplicationService, ApplicationEvent } from 'snjs'; +export declare class ThemeManager extends ApplicationService { + private activeThemes; + private unsubState; + private unregisterDesktop; + private unregisterComponent; + /** @override */ + onAppLaunch(): Promise; + onAppEvent(event: ApplicationEvent): void; + get webApplication(): WebApplication; + deinit(): void; + /** @override */ + onAppStart(): Promise; + private activateCachedThemes; + private registerObservers; + private deactivateAllThemes; + private activateTheme; + private deactivateTheme; + private cacheThemes; + private decacheThemes; + private getCachedThemes; +} diff --git a/dist/@types/app/assets/javascripts/strings.d.ts b/dist/@types/app/assets/javascripts/strings.d.ts new file mode 100644 index 000000000..9b5dd3500 --- /dev/null +++ b/dist/@types/app/assets/javascripts/strings.d.ts @@ -0,0 +1,36 @@ +/** @generic */ +export declare const STRING_SESSION_EXPIRED = "Your session has expired. New changes will not be pulled in. Please sign out and sign back in to refresh your session."; +export declare const STRING_DEFAULT_FILE_ERROR = "Please use FileSafe or the Bold Editor to attach images and files. Learn more at standardnotes.org/filesafe."; +export declare const STRING_GENERIC_SYNC_ERROR = "There was an error syncing. Please try again. If all else fails, try signing out and signing back in."; +export declare function StringSyncException(data: any): string; +/** @footer */ +export declare const STRING_NEW_UPDATE_READY = "A new update is ready to install. Please use the top-level 'Updates' menu to manage installation."; +/** @tags */ +export declare const STRING_DELETE_TAG = "Are you sure you want to delete this tag? Note: deleting a tag will not delete its notes."; +/** @editor */ +export declare const STRING_DELETED_NOTE = "The note you are attempting to edit has been deleted, and is awaiting sync. Changes you make will be disregarded."; +export declare const STRING_INVALID_NOTE = "The note you are attempting to save can not be found or has been deleted. Changes you make will not be synced. Please copy this note's text and start a new note."; +export declare const STRING_ELLIPSES = "..."; +export declare const STRING_GENERIC_SAVE_ERROR = "There was an error saving your note. Please try again."; +export declare const STRING_DELETE_PLACEHOLDER_ATTEMPT = "This note is a placeholder and cannot be deleted. To remove from your list, simply navigate to a different note."; +export declare const STRING_DELETE_LOCKED_ATTEMPT = "This note is locked. If you'd like to delete it, unlock it, and try again."; +export declare function StringDeleteNote(title: string, permanently: boolean): string; +export declare function StringEmptyTrash(count: number): string; +/** @account */ +export declare const STRING_ACCOUNT_MENU_UNCHECK_MERGE = "Unchecking this option means any of the notes you have written while you were signed out will be deleted. Are you sure you want to discard these notes?"; +export declare const STRING_SIGN_OUT_CONFIRMATION = "Are you sure you want to end your session? This will delete all local items and extensions."; +export declare const STRING_ERROR_DECRYPTING_IMPORT = "There was an error decrypting your items. Make sure the password you entered is correct and try again."; +export declare const STRING_E2E_ENABLED = "End-to-end encryption is enabled. Your data is encrypted on your device first, then synced to your private cloud."; +export declare const STRING_LOCAL_ENC_ENABLED = "Encryption is enabled. Your data is encrypted using your passcode before it is saved to your device storage."; +export declare const STRING_ENC_NOT_ENABLED = "Encryption is not enabled. Sign in, register, or add a passcode lock to enable encryption."; +export declare const STRING_IMPORT_SUCCESS = "Your data has been successfully imported."; +export declare const STRING_REMOVE_PASSCODE_CONFIRMATION = "Are you sure you want to remove your application passcode?"; +export declare const STRING_REMOVE_PASSCODE_OFFLINE_ADDENDUM = " This will remove encryption from your local data."; +export declare const STRING_NON_MATCHING_PASSCODES = "The two passcodes you entered do not match. Please try again."; +export declare const STRING_NON_MATCHING_PASSWORDS = "The two passwords you entered do not match. Please try again."; +export declare const STRING_GENERATING_LOGIN_KEYS = "Generating Login Keys..."; +export declare const STRING_GENERATING_REGISTER_KEYS = "Generating Account Keys..."; +export declare const STRING_INVALID_IMPORT_FILE = "Unable to open file. Ensure it is a proper JSON file and try again."; +export declare function StringImportError(errorCount: number): string; +/** @password_change */ +export declare const STRING_FAILED_PASSWORD_CHANGE = "There was an error re-encrypting your items. Your password was changed, but not all your items were properly re-encrypted and synced. You should try syncing again. If all else fails, you should restore your notes from backup."; diff --git a/dist/@types/app/assets/javascripts/types.d.ts b/dist/@types/app/assets/javascripts/types.d.ts new file mode 100644 index 000000000..2e0727d6b --- /dev/null +++ b/dist/@types/app/assets/javascripts/types.d.ts @@ -0,0 +1,41 @@ +/// +import { SNComponent } from 'snjs'; +export declare class WebDirective implements ng.IDirective { + controller?: string | ng.Injectable; + controllerAs?: string; + bindToController?: boolean | { + [boundProperty: string]: string; + }; + restrict?: string; + replace?: boolean; + scope?: boolean | { + [boundProperty: string]: string; + }; + template?: string | ((tElement: any, tAttrs: any) => string); + transclude?: boolean; +} +export declare enum PasswordWizardType { + ChangePassword = 1, + AccountUpgrade = 2 +} +export interface PasswordWizardScope extends Partial { + type: PasswordWizardType; + application: any; +} +export interface PermissionsModalScope extends Partial { + application: any; + component: SNComponent; + permissionsString: string; + callback: (approved: boolean) => void; +} +export declare type PanelPuppet = { + onReady?: () => void; + ready?: boolean; + setWidth?: (width: number) => void; + setLeft?: (left: number) => void; + isCollapsed?: () => boolean; + flash?: () => void; +}; +export declare type FooterStatus = { + string: string; +}; diff --git a/dist/@types/app/assets/javascripts/ui_models/app_state.d.ts b/dist/@types/app/assets/javascripts/ui_models/app_state.d.ts new file mode 100644 index 000000000..8854ab5a2 --- /dev/null +++ b/dist/@types/app/assets/javascripts/ui_models/app_state.d.ts @@ -0,0 +1,72 @@ +/// +import { SNTag, SNNote, SNUserPrefs } from 'snjs'; +import { WebApplication } from '@/ui_models/application'; +import { Editor } from '@/ui_models/editor'; +export declare enum AppStateEvent { + TagChanged = 1, + ActiveEditorChanged = 2, + PreferencesChanged = 3, + PanelResized = 4, + EditorFocused = 5, + BeganBackupDownload = 6, + EndedBackupDownload = 7, + DesktopExtsReady = 8, + WindowDidFocus = 9, + WindowDidBlur = 10 +} +export declare enum EventSource { + UserInteraction = 1, + Script = 2 +} +declare type ObserverCallback = (event: AppStateEvent, data?: any) => Promise; +export declare class AppState { + $rootScope: ng.IRootScopeService; + $timeout: ng.ITimeoutService; + application: WebApplication; + observers: ObserverCallback[]; + locked: boolean; + unsubApp: any; + rootScopeCleanup1: any; + rootScopeCleanup2: any; + onVisibilityChange: any; + selectedTag?: SNTag; + userPreferences?: SNUserPrefs; + multiEditorEnabled: boolean; + constructor($rootScope: ng.IRootScopeService, $timeout: ng.ITimeoutService, application: WebApplication); + deinit(): void; + /** + * Creates a new editor if one doesn't exist. If one does, we'll replace the + * editor's note with an empty one. + */ + createEditor(title?: string): void; + openEditor(noteUuid: string): Promise; + getActiveEditor(): Editor; + getEditors(): Editor[]; + closeEditor(editor: Editor): void; + closeActiveEditor(): void; + closeAllEditors(): void; + editorForNote(note: SNNote): Editor | undefined; + streamNotesAndTags(): void; + addAppEventObserver(): void; + isLocked(): boolean; + registerVisibilityObservers(): void; + /** @returns A function that unregisters this observer */ + addObserver(callback: ObserverCallback): () => void; + notifyEvent(eventName: AppStateEvent, data?: any): Promise; + setSelectedTag(tag: SNTag): void; + /** Returns the tags that are referncing this note */ + getNoteTags(note: SNNote): SNTag[]; + /** Returns the notes this tag references */ + getTagNotes(tag: SNTag): SNNote[]; + getSelectedTag(): SNTag | undefined; + setUserPreferences(preferences: SNUserPrefs): void; + panelDidResize(name: string, collapsed: boolean): void; + editorDidFocus(eventSource: EventSource): void; + beganBackupDownload(): void; + endedBackupDownload(success: boolean): void; + /** + * When the desktop appplication extension server is ready. + */ + desktopExtensionsReady(): void; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/ui_models/application.d.ts b/dist/@types/app/assets/javascripts/ui_models/application.d.ts new file mode 100644 index 000000000..f66299bd6 --- /dev/null +++ b/dist/@types/app/assets/javascripts/ui_models/application.d.ts @@ -0,0 +1,50 @@ +/// +import { ComponentGroup } from './component_group'; +import { EditorGroup } from '@/ui_models/editor_group'; +import { PasswordWizardType } from '@/types'; +import { SNApplication, Challenge, ChallengeOrchestrator, ProtectedAction } from 'snjs'; +import { DesktopManager, LockManager, ArchiveManager, NativeExtManager, StatusManager, ThemeManager, PreferencesManager, KeyboardManager } from '@/services'; +import { AppState } from '@/ui_models/app_state'; +declare type WebServices = { + appState: AppState; + desktopService: DesktopManager; + lockService: LockManager; + archiveService: ArchiveManager; + nativeExtService: NativeExtManager; + statusService: StatusManager; + themeService: ThemeManager; + prefsService: PreferencesManager; + keyboardService: KeyboardManager; +}; +export declare class WebApplication extends SNApplication { + private $compile?; + private scope?; + private onDeinit?; + private webServices; + private currentAuthenticationElement?; + editorGroup: EditorGroup; + componentGroup: ComponentGroup; + constructor($compile: ng.ICompileService, $timeout: ng.ITimeoutService, scope: ng.IScope, onDeinit: (app: WebApplication) => void); + /** @override */ + deinit(): void; + setWebServices(services: WebServices): void; + getAppState(): AppState; + getDesktopService(): DesktopManager; + getLockService(): LockManager; + getArchiveService(): ArchiveManager; + getNativeExtService(): NativeExtManager; + getStatusService(): StatusManager; + getThemeService(): ThemeManager; + getPrefsService(): PreferencesManager; + getKeyboardService(): KeyboardManager; + checkForSecurityUpdate(): Promise; + presentPasswordWizard(type: PasswordWizardType): void; + promptForChallenge(challenge: Challenge, orchestrator: ChallengeOrchestrator): void; + performProtocolUpgrade(): Promise; + presentPrivilegesModal(action: ProtectedAction, onSuccess?: any, onCancel?: any): Promise; + presentPrivilegesManagementModal(): void; + authenticationInProgress(): boolean; + presentPasswordModal(callback: () => void): void; + presentRevisionPreviewModal(uuid: string, content: any): void; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/ui_models/application_group.d.ts b/dist/@types/app/assets/javascripts/ui_models/application_group.d.ts new file mode 100644 index 000000000..921c71f05 --- /dev/null +++ b/dist/@types/app/assets/javascripts/ui_models/application_group.d.ts @@ -0,0 +1,26 @@ +/// +import { WebApplication } from './application'; +declare type AppManagerChangeCallback = () => void; +export declare class ApplicationGroup { + $compile: ng.ICompileService; + $rootScope: ng.IRootScopeService; + $timeout: ng.ITimeoutService; + applications: WebApplication[]; + changeObservers: AppManagerChangeCallback[]; + activeApplication?: WebApplication; + constructor($compile: ng.ICompileService, $rootScope: ng.IRootScopeService, $timeout: ng.ITimeoutService); + private createDefaultApplication; + /** @callback */ + onApplicationDeinit(application: WebApplication): void; + private createNewApplication; + get application(): WebApplication | undefined; + getApplications(): WebApplication[]; + /** + * Notifies observer when the active application has changed. + * Any application which is no longer active is destroyed, and + * must be removed from the interface. + */ + addApplicationChangeObserver(callback: AppManagerChangeCallback): void; + private notifyObserversOfAppChange; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/ui_models/component_group.d.ts b/dist/@types/app/assets/javascripts/ui_models/component_group.d.ts new file mode 100644 index 000000000..fde939585 --- /dev/null +++ b/dist/@types/app/assets/javascripts/ui_models/component_group.d.ts @@ -0,0 +1,23 @@ +import { SNComponent, ComponentArea } from 'snjs'; +import { WebApplication } from './application'; +import { UuidString } from '@node_modules/snjs/dist/@types/types'; +export declare class ComponentGroup { + private application; + changeObservers: any[]; + activeComponents: UuidString[]; + constructor(application: WebApplication); + get componentManager(): import("snjs/dist/@types").SNComponentManager; + deinit(): void; + activateComponent(component: SNComponent): Promise; + deactivateComponent(component: SNComponent, notify?: boolean): Promise; + deactivateComponentForArea(area: ComponentArea): Promise; + activeComponentForArea(area: ComponentArea): SNComponent; + activeComponentsForArea(area: ComponentArea): SNComponent[]; + allComponentsForArea(area: ComponentArea): SNComponent[]; + private allActiveComponents; + /** + * Notifies observer when the active editor has changed. + */ + addChangeObserver(callback: () => void): () => void; + private notifyObservers; +} diff --git a/dist/@types/app/assets/javascripts/ui_models/editor.d.ts b/dist/@types/app/assets/javascripts/ui_models/editor.d.ts new file mode 100644 index 000000000..4ffa7278e --- /dev/null +++ b/dist/@types/app/assets/javascripts/ui_models/editor.d.ts @@ -0,0 +1,32 @@ +import { SNNote, PayloadSource } from 'snjs'; +import { WebApplication } from './application'; +export declare class Editor { + note: SNNote; + private application; + private _onNoteChange?; + private _onNoteValueChange?; + private removeStreamObserver; + isTemplateNote: boolean; + constructor(application: WebApplication, noteUuid?: string, noteTitle?: string); + deinit(): void; + private handleNoteStream; + insertTemplatedNote(): Promise; + /** + * Reverts the editor to a blank state, removing any existing note from view, + * and creating a placeholder note. + */ + reset(noteTitle?: string): Promise; + /** + * Register to be notified when the editor's note changes. + */ + onNoteChange(callback: () => void): void; + /** + * Register to be notified when the editor's note's values change + * (and thus a new object reference is created) + */ + onNoteValueChange(callback: (note: SNNote, source?: PayloadSource) => void): void; + /** + * Sets the editor contents by setting its note. + */ + setNote(note: SNNote): void; +} diff --git a/dist/@types/app/assets/javascripts/ui_models/editor_group.d.ts b/dist/@types/app/assets/javascripts/ui_models/editor_group.d.ts new file mode 100644 index 000000000..afcbf20a5 --- /dev/null +++ b/dist/@types/app/assets/javascripts/ui_models/editor_group.d.ts @@ -0,0 +1,22 @@ +import { Editor } from './editor'; +import { WebApplication } from './application'; +declare type EditorGroupChangeCallback = () => void; +export declare class EditorGroup { + editors: Editor[]; + private application; + changeObservers: EditorGroupChangeCallback[]; + constructor(application: WebApplication); + deinit(): void; + createEditor(noteUuid?: string, noteTitle?: string): void; + deleteEditor(editor: Editor): void; + closeEditor(editor: Editor): void; + closeActiveEditor(): void; + closeAllEditors(): void; + get activeEditor(): Editor; + /** + * Notifies observer when the active editor has changed. + */ + addChangeObserver(callback: EditorGroupChangeCallback): () => void; + private notifyObservers; +} +export {}; diff --git a/dist/@types/app/assets/javascripts/utils.d.ts b/dist/@types/app/assets/javascripts/utils.d.ts new file mode 100644 index 000000000..b342b33f3 --- /dev/null +++ b/dist/@types/app/assets/javascripts/utils.d.ts @@ -0,0 +1,7 @@ +export declare function getParameterByName(name: string, url: string): string | null; +export declare function isNullOrUndefined(value: any): boolean; +export declare function getPlatformString(): string; +export declare function dateToLocalizedString(date: Date): string; +/** Via https://davidwalsh.name/javascript-debounce-function */ +export declare function debounce(this: any, func: any, wait: number, immediate?: boolean): () => void; +export declare function isDesktopApplication(): any; diff --git a/dist/@types/app/assets/javascripts/views/abstract/pure_view_ctrl.d.ts b/dist/@types/app/assets/javascripts/views/abstract/pure_view_ctrl.d.ts new file mode 100644 index 000000000..20337fcef --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/abstract/pure_view_ctrl.d.ts @@ -0,0 +1,37 @@ +/// +import { ApplicationEvent } from 'snjs'; +import { WebApplication } from '@/ui_models/application'; +export declare type CtrlState = Partial>; +export declare type CtrlProps = Partial>; +export declare class PureViewCtrl { + $timeout: ng.ITimeoutService; + /** Passed through templates */ + application: WebApplication; + props: CtrlProps; + state: CtrlState; + private unsubApp; + private unsubState; + private stateTimeout; + constructor($timeout: ng.ITimeoutService); + $onInit(): void; + deinit(): void; + $onDestroy(): void; + get appState(): import("../../ui_models/app_state").AppState; + /** @private */ + resetState(): Promise; + /** @override */ + getInitialState(): {}; + setState(state: CtrlState): Promise; + updateUI(func: () => void): Promise; + initProps(props: CtrlProps): void; + addAppStateObserver(): void; + onAppStateEvent(eventName: any, data: any): void; + addAppEventObserver(): void; + onAppEvent(eventName: ApplicationEvent): void; + /** @override */ + onAppStart(): Promise; + onAppLaunch(): Promise; + onAppKeyChange(): Promise; + onAppIncrementalSync(): void; + onAppFullSync(): void; +} diff --git a/dist/@types/app/assets/javascripts/views/application/application_view.d.ts b/dist/@types/app/assets/javascripts/views/application/application_view.d.ts new file mode 100644 index 000000000..92b407034 --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/application/application_view.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from '@/types'; +export declare class ApplicationView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/application_group/application_group.d.ts b/dist/@types/app/assets/javascripts/views/application_group/application_group.d.ts new file mode 100644 index 000000000..ecb3b7d0e --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/application_group/application_group.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from '@/types'; +export declare class ApplicationGroupView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/application_group/application_group_view.d.ts b/dist/@types/app/assets/javascripts/views/application_group/application_group_view.d.ts new file mode 100644 index 000000000..ecb3b7d0e --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/application_group/application_group_view.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from '@/types'; +export declare class ApplicationGroupView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/challenge_modal/challenge_modal.d.ts b/dist/@types/app/assets/javascripts/views/challenge_modal/challenge_modal.d.ts new file mode 100644 index 000000000..be099756c --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/challenge_modal/challenge_modal.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from '@/types'; +export declare class ChallengeModal extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/constants.d.ts b/dist/@types/app/assets/javascripts/views/constants.d.ts new file mode 100644 index 000000000..3eadaa31f --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/constants.d.ts @@ -0,0 +1,2 @@ +export declare const PANEL_NAME_NOTES = "notes"; +export declare const PANEL_NAME_TAGS = "tags"; diff --git a/dist/@types/app/assets/javascripts/views/editor/editor_view.d.ts b/dist/@types/app/assets/javascripts/views/editor/editor_view.d.ts new file mode 100644 index 000000000..5061db325 --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/editor/editor_view.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from '@/types'; +export declare class EditorView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/editor_group/editor_group.d.ts b/dist/@types/app/assets/javascripts/views/editor_group/editor_group.d.ts new file mode 100644 index 000000000..4c185c250 --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/editor_group/editor_group.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class EditorGroupView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/editor_group/editor_group_view.d.ts b/dist/@types/app/assets/javascripts/views/editor_group/editor_group_view.d.ts new file mode 100644 index 000000000..4c185c250 --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/editor_group/editor_group_view.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class EditorGroupView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/footer/footer_view.d.ts b/dist/@types/app/assets/javascripts/views/footer/footer_view.d.ts new file mode 100644 index 000000000..27f2ce800 --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/footer/footer_view.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from '@/types'; +export declare class FooterView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/index.d.ts b/dist/@types/app/assets/javascripts/views/index.d.ts new file mode 100644 index 000000000..fc5b9525f --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/index.d.ts @@ -0,0 +1,9 @@ +export { PureViewCtrl } from './abstract/pure_view_ctrl'; +export { ApplicationGroupView } from './application_group/application_group_view'; +export { ApplicationView } from './application/application_view'; +export { EditorGroupView } from './editor_group/editor_group_view'; +export { EditorView } from './editor/editor_view'; +export { FooterView } from './footer/footer_view'; +export { NotesView } from './notes/notes_view'; +export { TagsView } from './tags/tags_view'; +export { ChallengeModal } from './challenge_modal/challenge_modal'; diff --git a/dist/@types/app/assets/javascripts/views/notes/note_utils.d.ts b/dist/@types/app/assets/javascripts/views/notes/note_utils.d.ts new file mode 100644 index 000000000..2f0abe733 --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/notes/note_utils.d.ts @@ -0,0 +1,11 @@ +import { SNNote, SNTag } from 'snjs'; +export declare enum NoteSortKey { + CreatedAt = "created_at", + UserUpdatedAt = "userModifiedDate", + Title = "title", + /** @legacy Use UserUpdatedAt instead */ + UpdatedAt = "updated_at", + /** @legacy Use UserUpdatedAt instead */ + ClientUpdatedAt = "client_updated_at" +} +export declare function notePassesFilter(note: SNNote, selectedTag: SNTag, showArchived: boolean, hidePinned: boolean, filterText: string): boolean; diff --git a/dist/@types/app/assets/javascripts/views/notes/notes_view.d.ts b/dist/@types/app/assets/javascripts/views/notes/notes_view.d.ts new file mode 100644 index 000000000..2b50a2911 --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/notes/notes_view.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from './../../types'; +export declare class NotesView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/views/tags/tags_view.d.ts b/dist/@types/app/assets/javascripts/views/tags/tags_view.d.ts new file mode 100644 index 000000000..e11577d22 --- /dev/null +++ b/dist/@types/app/assets/javascripts/views/tags/tags_view.d.ts @@ -0,0 +1,4 @@ +import { WebDirective } from '@/types'; +export declare class TagsView extends WebDirective { + constructor(); +} diff --git a/dist/@types/app/assets/javascripts/web_device_interface.d.ts b/dist/@types/app/assets/javascripts/web_device_interface.d.ts new file mode 100644 index 000000000..9ddc931e1 --- /dev/null +++ b/dist/@types/app/assets/javascripts/web_device_interface.d.ts @@ -0,0 +1,29 @@ +import { DeviceInterface, SNApplication } from 'snjs'; +export declare class WebDeviceInterface extends DeviceInterface { + private database; + constructor(namespace: string, timeout: any); + setApplication(application: SNApplication): void; + deinit(): void; + getRawStorageValue(key: string): Promise; + getAllRawStorageKeyValues(): Promise<{ + key: string; + value: any; + }[]>; + setRawStorageValue(key: string, value: any): Promise; + removeRawStorageValue(key: string): Promise; + removeAllRawStorageValues(): Promise; + openDatabase(): Promise<{ + isNewDatabase?: boolean | undefined; + } | undefined>; + private getDatabaseKeyPrefix; + private keyForPayloadId; + getAllRawDatabasePayloads(): Promise; + saveRawDatabasePayload(payload: any): Promise; + saveRawDatabasePayloads(payloads: any[]): Promise; + removeRawDatabasePayloadWithId(id: string): Promise; + removeAllRawDatabasePayloads(): Promise; + getKeychainValue(): Promise; + setKeychainValue(value: any): Promise; + clearKeychainValue(): Promise; + openUrl(url: string): void; +} diff --git a/dist/@types/vendor/assets/javascripts/angular-sanitize.d.ts b/dist/@types/vendor/assets/javascripts/angular-sanitize.d.ts new file mode 100644 index 000000000..7f565f6f2 --- /dev/null +++ b/dist/@types/vendor/assets/javascripts/angular-sanitize.d.ts @@ -0,0 +1,242 @@ +/** + * @ngdoc module + * @name ngSanitize + * @description + * + * The `ngSanitize` module provides functionality to sanitize HTML. + * + * See {@link ngSanitize.$sanitize `$sanitize`} for usage. + */ +/** + * @ngdoc service + * @name $sanitize + * @kind function + * + * @description + * Sanitizes an html string by stripping all potentially dangerous tokens. + * + * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are + * then serialized back to a properly escaped HTML string. This means that no unsafe input can make + * it into the returned string. + * + * The whitelist for URL sanitization of attribute values is configured using the functions + * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link $compileProvider}. + * + * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}. + * + * @param {string} html HTML input. + * @returns {string} Sanitized HTML. + * + * @example + + + +

+ Snippet: + + + + + + + + + + + + + + + + + + + + + + + + + +
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html="snippet">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value +
<div ng-bind-html="deliberatelyTrustDangerousSnippet()">
+</div>
+
ng-bindAutomatically escapes
<div ng-bind="snippet">
</div>
+
+ + + it('should sanitize the html snippet by default', function() { + expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')). + toBe('

an html\nclick here\nsnippet

'); + }); + + it('should inline raw snippet if bound to a trusted value', function() { + expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')). + toBe("

an html\n" + + "click here\n" + + "snippet

"); + }); + + it('should escape snippet without any filter', function() { + expect(element(by.css('#bind-default div')).getAttribute('innerHTML')). + toBe("<p style=\"color:blue\">an html\n" + + "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + + "snippet</p>"); + }); + + it('should update', function() { + element(by.model('snippet')).clear(); + element(by.model('snippet')).sendKeys('new text'); + expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')). + toBe('new text'); + expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe( + 'new text'); + expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe( + "new <b onclick=\"alert(1)\">text</b>"); + }); +
+ + */ +/** + * @ngdoc provider + * @name $sanitizeProvider + * @this + * + * @description + * Creates and configures {@link $sanitize} instance. + */ +declare function $SanitizeProvider(): void; +declare class $SanitizeProvider { + $get: (string | (($$sanitizeUri: any) => (html: any) => string))[]; + /** + * @ngdoc method + * @name $sanitizeProvider#enableSvg + * @kind function + * + * @description + * Enables a subset of svg to be supported by the sanitizer. + * + *
+ *

By enabling this setting without taking other precautions, you might expose your + * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned + * outside of the containing element and be rendered over other elements on the page (e.g. a login + * link). Such behavior can then result in phishing incidents.

+ * + *

To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg + * tags within the sanitized content:

+ * + *
+ * + *

+     *   .rootOfTheIncludedContent svg {
+     *     overflow: hidden !important;
+     *   }
+     *   
+ *
+ * + * @param {boolean=} flag Enable or disable SVG support in the sanitizer. + * @returns {boolean|$sanitizeProvider} Returns the currently configured value if called + * without an argument or self for chaining otherwise. + */ + enableSvg: (enableSvg: any) => any; + /** + * @ngdoc method + * @name $sanitizeProvider#addValidElements + * @kind function + * + * @description + * Extends the built-in lists of valid HTML/SVG elements, i.e. elements that are considered safe + * and are not stripped off during sanitization. You can extend the following lists of elements: + * + * - `htmlElements`: A list of elements (tag names) to extend the current list of safe HTML + * elements. HTML elements considered safe will not be removed during sanitization. All other + * elements will be stripped off. + * + * - `htmlVoidElements`: This is similar to `htmlElements`, but marks the elements as + * "void elements" (similar to HTML + * [void elements](https://rawgit.com/w3c/html/html5.1-2/single-page.html#void-elements)). These + * elements have no end tag and cannot have content. + * + * - `svgElements`: This is similar to `htmlElements`, but for SVG elements. This list is only + * taken into account if SVG is {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for + * `$sanitize`. + * + *
+ * This method must be called during the {@link angular.Module#config config} phase. Once the + * `$sanitize` service has been instantiated, this method has no effect. + *
+ * + *
+ * Keep in mind that extending the built-in lists of elements may expose your app to XSS or + * other vulnerabilities. Be very mindful of the elements you add. + *
+ * + * @param {Array|Object} elements - A list of valid HTML elements or an object with one or + * more of the following properties: + * - **htmlElements** - `{Array}` - A list of elements to extend the current list of + * HTML elements. + * - **htmlVoidElements** - `{Array}` - A list of elements to extend the current list of + * void HTML elements; i.e. elements that do not have an end tag. + * - **svgElements** - `{Array}` - A list of elements to extend the current list of SVG + * elements. The list of SVG elements is only taken into account if SVG is + * {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for `$sanitize`. + * + * Passing an array (`[...]`) is equivalent to passing `{htmlElements: [...]}`. + * + * @return {$sanitizeProvider} Returns self for chaining. + */ + addValidElements: (elements: Object | string[]) => any; + /** + * @ngdoc method + * @name $sanitizeProvider#addValidAttrs + * @kind function + * + * @description + * Extends the built-in list of valid attributes, i.e. attributes that are considered safe and are + * not stripped off during sanitization. + * + * **Note**: + * The new attributes will not be treated as URI attributes, which means their values will not be + * sanitized as URIs using `$compileProvider`'s + * {@link ng.$compileProvider#aHrefSanitizationWhitelist aHrefSanitizationWhitelist} and + * {@link ng.$compileProvider#imgSrcSanitizationWhitelist imgSrcSanitizationWhitelist}. + * + *
+ * This method must be called during the {@link angular.Module#config config} phase. Once the + * `$sanitize` service has been instantiated, this method has no effect. + *
+ * + *
+ * Keep in mind that extending the built-in list of attributes may expose your app to XSS or + * other vulnerabilities. Be very mindful of the attributes you add. + *
+ * + * @param {Array} attrs - A list of valid attributes. + * + * @returns {$sanitizeProvider} Returns self for chaining. + */ + addValidAttrs: (attrs: string[]) => any; +} +declare function sanitizeText(chars: any): string; +declare var $sanitizeMinErr: any; +declare var bind: any; +declare var extend: any; +declare var forEach: any; +declare var isArray: any; +declare var isDefined: any; +declare var lowercase: any; +declare var noop: any; +declare var nodeContains: any; +declare var htmlParser: any; +declare var htmlSanitizeWriter: any; diff --git a/dist/@types/vendor/assets/javascripts/zip/deflate.d.ts b/dist/@types/vendor/assets/javascripts/zip/deflate.d.ts new file mode 100644 index 000000000..e69de29bb diff --git a/dist/@types/vendor/assets/javascripts/zip/inflate.d.ts b/dist/@types/vendor/assets/javascripts/zip/inflate.d.ts new file mode 100644 index 000000000..e69de29bb diff --git a/dist/@types/vendor/assets/javascripts/zip/z-worker.d.ts b/dist/@types/vendor/assets/javascripts/zip/z-worker.d.ts new file mode 100644 index 000000000..e69de29bb diff --git a/dist/@types/vendor/assets/javascripts/zip/zip.d.ts b/dist/@types/vendor/assets/javascripts/zip/zip.d.ts new file mode 100644 index 000000000..e69de29bb diff --git a/dist/javascripts/app.js b/dist/javascripts/app.js index 288ce909f..024adf779 100644 --- a/dist/javascripts/app.js +++ b/dist/javascripts/app.js @@ -1,30 +1,15 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=74)}([function(e,t,n){e.exports=n(46)},function(e,t){function n(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}e.exports=function(e){return function(){var t=this,r=arguments;return new Promise((function(i,a){var o=e.apply(t,r);function s(e){n(o,i,a,s,c,"next",e)}function c(e){n(o,i,a,s,c,"throw",e)}s(void 0)}))}}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function n(e,t){for(var n=0;n>>2]>>>24-a%4*8&255;t[r+a>>>2]|=o<<24-(r+a)%4*8}else for(a=0;a>>2]=n[a>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=a.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n,r=[],i=function(t){t=t;var n=987654321,r=4294967295;return function(){var i=((n=36969*(65535&n)+(n>>16)&r)<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r;return i/=4294967296,(i+=.5)*(e.random()>.5?1:-1)}},a=0;a>>2]>>>24-i%4*8&255;r.push((a>>>4).toString(16)),r.push((15&a).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new o.init(n,t/2)}},u=s.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(a))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},f=i.BufferedBlockAlgorithm=a.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,a=this.blockSize,s=i/(4*a),c=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*a,u=e.min(4*c,i);if(c){for(var l=0;l>>2];e.sigBytes-=t}},v=(r.BlockCipher=l.extend({cfg:l.cfg.extend({mode:d,padding:h}),reset:function(){l.reset.call(this);var e=this.cfg,t=e.iv,n=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var r=n.createEncryptor;else r=n.createDecryptor,this._minBufferSize=1;this._mode&&this._mode.__creator==r?this._mode.init(this,t&&t.words):(this._mode=r.call(n,this,t&&t.words),this._mode.__creator=r)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4}),r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),m=(n.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext,n=e.salt;if(n)var r=a.create([1398893684,1701076831]).concat(n).concat(t);else r=t;return r.toString(c)},parse:function(e){var t=c.parse(e),n=t.words;if(1398893684==n[0]&&1701076831==n[1]){var r=a.create(n.slice(2,4));n.splice(0,4),t.sigBytes-=16}return v.create({ciphertext:t,salt:r})}},y=r.SerializableCipher=i.extend({cfg:i.extend({format:m}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r),a=i.finalize(t),o=i.cfg;return v.create({ciphertext:a,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),g=(n.kdf={}).OpenSSL={execute:function(e,t,n,r){r||(r=a.random(8));var i=u.create({keySize:t+n}).compute(e,r),o=a.create(i.words.slice(t),4*n);return i.sigBytes=4*t,v.create({key:i,iv:o,salt:r})}},b=r.PasswordBasedCipher=y.extend({cfg:y.cfg.extend({kdf:g}),encrypt:function(e,t,n,r){var i=(r=this.cfg.extend(r)).kdf.execute(n,e.keySize,e.ivSize);r.iv=i.iv;var a=y.encrypt.call(this,e,t,i.key,r);return a.mixIn(i),a},decrypt:function(e,t,n,r){r=this.cfg.extend(r),t=this._parse(t,r.format);var i=r.kdf.execute(n,e.keySize,e.ivSize,t.salt);return r.iv=i.iv,y.decrypt.call(this,e,t,i.key,r)}})}()},"object"===c(t)?e.exports=t=s(n(0),n(2)):(i=[n(0),n(2)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){var t,n,r,i,a,o,s;return r=(n=(t=e).lib).Base,i=n.WordArray,o=(a=t.algo).MD5,s=a.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:o,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),a=i.create(),o=a.words,s=n.keySize,c=n.iterations;o.length>>2]>>>24-a%4*8&255)<<16|(t[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|t[a+2>>>2]>>>24-(a+2)%4*8&255,s=0;s<4&&a+.75*s>>6*(3-s)&63));var c=r.charAt(64);if(c)for(;i.length%4;)i.push(c);return i.join("")},parse:function(e){var t=e.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var a=0;a>>6-o%4*2;i[a>>>2]|=(s|c)<<24-a%4*8,a++}return n.create(i,a)}(e,t,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},e.enc.Base64},"object"===c(t)?e.exports=t=s(n(0)):(i=[n(0)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(t){var n=e,r=n.lib,i=r.WordArray,a=r.Hasher,o=n.algo,s=[];!function(){for(var e=0;e<64;e++)s[e]=4294967296*t.abs(t.sin(e+1))|0}();var c=o.MD5=a.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,i=e[r];e[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var a=this._hash.words,o=e[t+0],c=e[t+1],d=e[t+2],h=e[t+3],v=e[t+4],m=e[t+5],y=e[t+6],g=e[t+7],b=e[t+8],k=e[t+9],w=e[t+10],x=e[t+11],S=e[t+12],$=e[t+13],_=e[t+14],M=e[t+15],C=a[0],A=a[1],O=a[2],I=a[3];C=u(C,A,O,I,o,7,s[0]),I=u(I,C,A,O,c,12,s[1]),O=u(O,I,C,A,d,17,s[2]),A=u(A,O,I,C,h,22,s[3]),C=u(C,A,O,I,v,7,s[4]),I=u(I,C,A,O,m,12,s[5]),O=u(O,I,C,A,y,17,s[6]),A=u(A,O,I,C,g,22,s[7]),C=u(C,A,O,I,b,7,s[8]),I=u(I,C,A,O,k,12,s[9]),O=u(O,I,C,A,w,17,s[10]),A=u(A,O,I,C,x,22,s[11]),C=u(C,A,O,I,S,7,s[12]),I=u(I,C,A,O,$,12,s[13]),O=u(O,I,C,A,_,17,s[14]),C=l(C,A=u(A,O,I,C,M,22,s[15]),O,I,c,5,s[16]),I=l(I,C,A,O,y,9,s[17]),O=l(O,I,C,A,x,14,s[18]),A=l(A,O,I,C,o,20,s[19]),C=l(C,A,O,I,m,5,s[20]),I=l(I,C,A,O,w,9,s[21]),O=l(O,I,C,A,M,14,s[22]),A=l(A,O,I,C,v,20,s[23]),C=l(C,A,O,I,k,5,s[24]),I=l(I,C,A,O,_,9,s[25]),O=l(O,I,C,A,h,14,s[26]),A=l(A,O,I,C,b,20,s[27]),C=l(C,A,O,I,$,5,s[28]),I=l(I,C,A,O,d,9,s[29]),O=l(O,I,C,A,g,14,s[30]),C=f(C,A=l(A,O,I,C,S,20,s[31]),O,I,m,4,s[32]),I=f(I,C,A,O,b,11,s[33]),O=f(O,I,C,A,x,16,s[34]),A=f(A,O,I,C,_,23,s[35]),C=f(C,A,O,I,c,4,s[36]),I=f(I,C,A,O,v,11,s[37]),O=f(O,I,C,A,g,16,s[38]),A=f(A,O,I,C,w,23,s[39]),C=f(C,A,O,I,$,4,s[40]),I=f(I,C,A,O,o,11,s[41]),O=f(O,I,C,A,h,16,s[42]),A=f(A,O,I,C,y,23,s[43]),C=f(C,A,O,I,k,4,s[44]),I=f(I,C,A,O,S,11,s[45]),O=f(O,I,C,A,M,16,s[46]),C=p(C,A=f(A,O,I,C,d,23,s[47]),O,I,o,6,s[48]),I=p(I,C,A,O,g,10,s[49]),O=p(O,I,C,A,_,15,s[50]),A=p(A,O,I,C,m,21,s[51]),C=p(C,A,O,I,S,6,s[52]),I=p(I,C,A,O,h,10,s[53]),O=p(O,I,C,A,w,15,s[54]),A=p(A,O,I,C,c,21,s[55]),C=p(C,A,O,I,b,6,s[56]),I=p(I,C,A,O,M,10,s[57]),O=p(O,I,C,A,y,15,s[58]),A=p(A,O,I,C,$,21,s[59]),C=p(C,A,O,I,v,6,s[60]),I=p(I,C,A,O,x,10,s[61]),O=p(O,I,C,A,d,15,s[62]),A=p(A,O,I,C,k,21,s[63]),a[0]=a[0]+C|0,a[1]=a[1]+A|0,a[2]=a[2]+O|0,a[3]=a[3]+I|0},_doFinalize:function(){var e=this._data,n=e.words,r=8*this._nDataBytes,i=8*e.sigBytes;n[i>>>5]|=128<<24-i%32;var a=t.floor(r/4294967296),o=r;n[15+(i+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),n[14+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),e.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,c=s.words,u=0;u<4;u++){var l=c[u];c[u]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,n,r,i,a,o){var s=e+(t&n|~t&r)+i+o;return(s<>>32-a)+t}function l(e,t,n,r,i,a,o){var s=e+(t&r|n&~r)+i+o;return(s<>>32-a)+t}function f(e,t,n,r,i,a,o){var s=e+(t^n^r)+i+o;return(s<>>32-a)+t}function p(e,t,n,r,i,a,o){var s=e+(n^(t|~r))+i+o;return(s<>>32-a)+t}n.MD5=a._createHelper(c),n.HmacMD5=a._createHmacHelper(c)}(Math),e.MD5},"object"===c(t)?e.exports=t=s(n(0)):(i=[n(0)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){"use strict";(function(e){function r(){return"undefined"!=typeof window?window:void 0!==e?e:null}function i(){return!("undefined"!=typeof document&&document.documentMode||/Edge/.test(navigator.userAgent))&&r().crypto&&r().crypto.subtle}function a(){return r().crypto?r().crypto.subtle:null}function o(){var e=r(),t=e.crypto||e.msCrypto;if(t){var n=new Uint32Array(4);t.getRandomValues(n);var i=-1;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){i++;var t=n[i>>3]>>i%8*4&15;return("x"==e?t:3&t|8).toString(16)}))}var a=(new Date).getTime();return e.performance&&"function"==typeof e.performance.now&&(a+=performance.now()),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=(a+16*Math.random())%16|0;return a=Math.floor(a/16),("x"==e?t:3&t|8).toString(16)}))}n.d(t,"b",(function(){return r})),n.d(t,"d",(function(){return i})),n.d(t,"c",(function(){return a})),n.d(t,"a",(function(){return o}))}).call(this,n(35))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){var t,n,r,i,a;return n=(t=e).lib,r=n.Base,i=n.WordArray,(a=t.x64={}).Word=r.extend({init:function(e,t){this.high=e,this.low=t}}),a.WordArray=r.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:8*e.length},toX32:function(){for(var e=this.words,t=e.length,n=[],r=0;r>>31}var f=(r<<5|r>>>27)+c+o[u];f+=u<20?1518500249+(i&a|~i&s):u<40?1859775393+(i^a^s):u<60?(i&a|i&s|a&s)-1894007588:(i^a^s)-899497514,c=s,s=a,a=i<<30|i>>>2,i=r,r=f}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=i._createHelper(s),t.HmacSHA1=i._createHmacHelper(s),e.SHA1},"object"===c(t)?e.exports=t=s(n(0)):(i=[n(0)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){var t,n,r;n=(t=e).lib.Base,r=t.enc.Utf8,t.algo.HMAC=n.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=r.parse(t));var n=e.blockSize,i=4*n;t.sigBytes>i&&(t=e.finalize(t)),t.clamp();for(var a=this._oKey=t.clone(),o=this._iKey=t.clone(),s=a.words,c=o.words,u=0;u>>7)^(h<<14|h>>>18)^h>>>3,m=u[d-2],y=(m<<15|m>>>17)^(m<<13|m>>>19)^m>>>10;u[d]=v+u[d-7]+y+u[d-16]}var g=r&i^r&a^i&a,b=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),k=p+((s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25))+(s&l^~s&f)+c[d]+u[d];p=f,f=l,l=s,s=o+k|0,o=a,a=i,i=r,r=k+(b+g)|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+o|0,n[4]=n[4]+s|0,n[5]=n[5]+l|0,n[6]=n[6]+f|0,n[7]=n[7]+p|0},_doFinalize:function(){var e=this._data,n=e.words,r=8*this._nDataBytes,i=8*e.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=t.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,e.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}});n.SHA256=a._createHelper(l),n.HmacSHA256=a._createHmacHelper(l)}(Math),e.SHA256},"object"===c(t)?e.exports=t=s(n(0)):(i=[n(0)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(){var t=e,n=t.lib.Hasher,r=t.x64,i=r.Word,a=r.WordArray,o=t.algo;function s(){return i.create.apply(i,arguments)}var c=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],u=[];!function(){for(var e=0;e<80;e++)u[e]=s()}();var l=o.SHA512=n.extend({_doReset:function(){this._hash=new a.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],l=n[5],f=n[6],p=n[7],d=r.high,h=r.low,v=i.high,m=i.low,y=a.high,g=a.low,b=o.high,k=o.low,w=s.high,x=s.low,S=l.high,$=l.low,_=f.high,M=f.low,C=p.high,A=p.low,O=d,I=h,E=v,D=m,R=y,P=g,T=b,j=k,F=w,N=x,L=S,U=$,B=_,H=M,z=C,V=A,W=0;W<80;W++){var K=u[W];if(W<16)var q=K.high=0|e[t+2*W],J=K.low=0|e[t+2*W+1];else{var G=u[W-15],Y=G.high,Z=G.low,X=(Y>>>1|Z<<31)^(Y>>>8|Z<<24)^Y>>>7,Q=(Z>>>1|Y<<31)^(Z>>>8|Y<<24)^(Z>>>7|Y<<25),ee=u[W-2],te=ee.high,ne=ee.low,re=(te>>>19|ne<<13)^(te<<3|ne>>>29)^te>>>6,ie=(ne>>>19|te<<13)^(ne<<3|te>>>29)^(ne>>>6|te<<26),ae=u[W-7],oe=ae.high,se=ae.low,ce=u[W-16],ue=ce.high,le=ce.low;q=(q=(q=X+oe+((J=Q+se)>>>0>>0?1:0))+re+((J+=ie)>>>0>>0?1:0))+ue+((J+=le)>>>0>>0?1:0),K.high=q,K.low=J}var fe,pe=F&L^~F&B,de=N&U^~N&H,he=O&E^O&R^E&R,ve=I&D^I&P^D&P,me=(O>>>28|I<<4)^(O<<30|I>>>2)^(O<<25|I>>>7),ye=(I>>>28|O<<4)^(I<<30|O>>>2)^(I<<25|O>>>7),ge=(F>>>14|N<<18)^(F>>>18|N<<14)^(F<<23|N>>>9),be=(N>>>14|F<<18)^(N>>>18|F<<14)^(N<<23|F>>>9),ke=c[W],we=ke.high,xe=ke.low,Se=z+ge+((fe=V+be)>>>0>>0?1:0),$e=ye+ve;z=B,V=H,B=L,H=U,L=F,U=N,F=T+(Se=(Se=(Se=Se+pe+((fe+=de)>>>0>>0?1:0))+we+((fe+=xe)>>>0>>0?1:0))+q+((fe+=J)>>>0>>0?1:0))+((N=j+fe|0)>>>0>>0?1:0)|0,T=R,j=P,R=E,P=D,E=O,D=I,O=Se+(me+he+($e>>>0>>0?1:0))+((I=fe+$e|0)>>>0>>0?1:0)|0}h=r.low=h+I,r.high=d+O+(h>>>0>>0?1:0),m=i.low=m+D,i.high=v+E+(m>>>0>>0?1:0),g=a.low=g+P,a.high=y+R+(g>>>0

>>0?1:0),k=o.low=k+j,o.high=b+T+(k>>>0>>0?1:0),x=s.low=x+N,s.high=w+F+(x>>>0>>0?1:0),$=l.low=$+U,l.high=S+L+($>>>0>>0?1:0),M=f.low=M+H,f.high=_+B+(M>>>0>>0?1:0),A=p.low=A+V,p.high=C+z+(A>>>0>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[30+(r+128>>>10<<5)]=Math.floor(n/4294967296),t[31+(r+128>>>10<<5)]=n,e.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});t.SHA512=n._createHelper(l),t.HmacSHA512=n._createHmacHelper(l)}(),e.SHA512},"object"===c(t)?e.exports=t=s(n(0),n(6)):(i=[n(0),n(6)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return e},"object"===c(t)?e.exports=t=s(n(0),n(6),n(12),n(13),n(3),n(4),n(7),n(9),n(14),n(10),n(15),n(16),n(17),n(8),n(18),n(2),n(1),n(19),n(20),n(21),n(22),n(23),n(24),n(25),n(26),n(27),n(28),n(29),n(30),n(31),n(32),n(33),n(34)):(i=[n(0),n(6),n(12),n(13),n(3),n(4),n(7),n(9),n(14),n(10),n(15),n(16),n(17),n(8),n(18),n(2),n(1),n(19),n(20),n(21),n(22),n(23),n(24),n(25),n(26),n(27),n(28),n(29),n(30),n(31),n(32),n(33),n(34)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(){if("function"==typeof ArrayBuffer){var t=e.lib.WordArray,n=t.init;(t.init=function(e){if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),(e instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array)&&(e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),e instanceof Uint8Array){for(var t=e.byteLength,r=[],i=0;i>>2]|=e[i]<<24-i%4*8;n.call(this,r,t)}else n.apply(this,arguments)}).prototype=t}}(),e.lib.WordArray},"object"===c(t)?e.exports=t=s(n(0)):(i=[n(0)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(){var t=e,n=t.lib.WordArray,r=t.enc;function i(e){return e<<8&4278255360|e>>>8&16711935}r.Utf16=r.Utf16BE={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i>>2]>>>16-i%4*8&65535;r.push(String.fromCharCode(a))}return r.join("")},parse:function(e){for(var t=e.length,r=[],i=0;i>>1]|=e.charCodeAt(i)<<16-i%2*16;return n.create(r,2*t)}},r.Utf16LE={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],a=0;a>>2]>>>16-a%4*8&65535);r.push(String.fromCharCode(o))}return r.join("")},parse:function(e){for(var t=e.length,r=[],a=0;a>>1]|=i(e.charCodeAt(a)<<16-a%2*16);return n.create(r,2*t)}}}(),e.enc.Utf16},"object"===c(t)?e.exports=t=s(n(0)):(i=[n(0)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){var t,n,r,i,a;return n=(t=e).lib.WordArray,r=t.algo,i=r.SHA256,a=r.SHA224=i.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var e=i._doFinalize.call(this);return e.sigBytes-=4,e}}),t.SHA224=i._createHelper(a),t.HmacSHA224=i._createHmacHelper(a),e.SHA224},"object"===c(t)?e.exports=t=s(n(0),n(9)):(i=[n(0),n(9)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){var t,n,r,i,a,o,s;return n=(t=e).x64,r=n.Word,i=n.WordArray,a=t.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new i.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var e=o._doFinalize.call(this);return e.sigBytes-=16,e}}),t.SHA384=o._createHelper(s),t.HmacSHA384=o._createHmacHelper(s),e.SHA384},"object"===c(t)?e.exports=t=s(n(0),n(6),n(10)):(i=[n(0),n(6),n(10)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(t){var n=e,r=n.lib,i=r.WordArray,a=r.Hasher,o=n.x64.Word,s=n.algo,c=[],u=[],l=[];!function(){for(var e=1,t=0,n=0;n<24;n++){c[e+5*t]=(n+1)*(n+2)/2%64;var r=(2*e+3*t)%5;e=t%5,t=r}for(e=0;e<5;e++)for(t=0;t<5;t++)u[e+5*t]=t+(2*e+3*t)%5*5;for(var i=1,a=0;a<24;a++){for(var s=0,f=0,p=0;p<7;p++){if(1&i){var d=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),(A=n[i]).high^=o,A.low^=a}for(var s=0;s<24;s++){for(var p=0;p<5;p++){for(var d=0,h=0,v=0;v<5;v++)d^=(A=n[p+5*v]).high,h^=A.low;var m=f[p];m.high=d,m.low=h}for(p=0;p<5;p++){var y=f[(p+4)%5],g=f[(p+1)%5],b=g.high,k=g.low;for(d=y.high^(b<<1|k>>>31),h=y.low^(k<<1|b>>>31),v=0;v<5;v++)(A=n[p+5*v]).high^=d,A.low^=h}for(var w=1;w<25;w++){var x=(A=n[w]).high,S=A.low,$=c[w];$<32?(d=x<<$|S>>>32-$,h=S<<$|x>>>32-$):(d=S<<$-32|x>>>64-$,h=x<<$-32|S>>>64-$);var _=f[u[w]];_.high=d,_.low=h}var M=f[0],C=n[0];for(M.high=C.high,M.low=C.low,p=0;p<5;p++)for(v=0;v<5;v++){var A=n[w=p+5*v],O=f[w],I=f[(p+1)%5+5*v],E=f[(p+2)%5+5*v];A.high=O.high^~I.high&E.high,A.low=O.low^~I.low&E.low}A=n[0];var D=l[s];A.high^=D.high,A.low^=D.low}},_doFinalize:function(){var e=this._data,n=e.words,r=(this._nDataBytes,8*e.sigBytes),a=32*this.blockSize;n[r>>>5]|=1<<24-r%32,n[(t.ceil((r+1)/a)*a>>>5)-1]|=128,e.sigBytes=4*n.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,c=s/8,u=[],l=0;l>>24)|4278255360&(p<<24|p>>>8),d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),u.push(d),u.push(p)}return new i.init(u,s)},clone:function(){for(var e=a.clone.call(this),t=e._state=this._state.slice(0),n=0;n<25;n++)t[n]=t[n].clone();return e}});n.SHA3=a._createHelper(p),n.HmacSHA3=a._createHmacHelper(p)}(Math),e.SHA3},"object"===c(t)?e.exports=t=s(n(0),n(6)):(i=[n(0),n(6)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){ -/** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -return function(t){var n=e,r=n.lib,i=r.WordArray,a=r.Hasher,o=n.algo,s=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),c=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),u=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),l=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),f=i.create([0,1518500249,1859775393,2400959708,2840853838]),p=i.create([1352829926,1548603684,1836072691,2053994217,0]),d=o.RIPEMD160=a.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,i=e[r];e[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var a,o,d,k,w,x,S,$,_,M,C,A=this._hash.words,O=f.words,I=p.words,E=s.words,D=c.words,R=u.words,P=l.words;for(x=a=A[0],S=o=A[1],$=d=A[2],_=k=A[3],M=w=A[4],n=0;n<80;n+=1)C=a+e[t+E[n]]|0,C+=n<16?h(o,d,k)+O[0]:n<32?v(o,d,k)+O[1]:n<48?m(o,d,k)+O[2]:n<64?y(o,d,k)+O[3]:g(o,d,k)+O[4],C=(C=b(C|=0,R[n]))+w|0,a=w,w=k,k=b(d,10),d=o,o=C,C=x+e[t+D[n]]|0,C+=n<16?g(S,$,_)+I[0]:n<32?y(S,$,_)+I[1]:n<48?m(S,$,_)+I[2]:n<64?v(S,$,_)+I[3]:h(S,$,_)+I[4],C=(C=b(C|=0,P[n]))+M|0,x=M,M=_,_=b($,10),$=S,S=C;C=A[1]+d+_|0,A[1]=A[2]+k+M|0,A[2]=A[3]+w+x|0,A[3]=A[4]+a+S|0,A[4]=A[0]+o+$|0,A[0]=C},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e.sigBytes=4*(t.length+1),this._process();for(var i=this._hash,a=i.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return i},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}});function h(e,t,n){return e^t^n}function v(e,t,n){return e&t|~e&n}function m(e,t,n){return(e|~t)^n}function y(e,t,n){return e&n|t&~n}function g(e,t,n){return e^(t|~n)}function b(e,t){return e<>>32-t}n.RIPEMD160=a._createHelper(d),n.HmacRIPEMD160=a._createHmacHelper(d)}(Math),e.RIPEMD160},"object"===c(t)?e.exports=t=s(n(0)):(i=[n(0)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){var t,n,r,i,a,o,s,c;return r=(n=(t=e).lib).Base,i=n.WordArray,o=(a=t.algo).SHA1,s=a.HMAC,c=a.PBKDF2=r.extend({cfg:r.extend({keySize:4,hasher:o,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=s.create(n.hasher,e),a=i.create(),o=i.create([1]),c=a.words,u=o.words,l=n.keySize,f=n.iterations;c.length>24&255)){var t=e>>16&255,n=e>>8&255,r=255&e;255===t?(t=0,255===n?(n=0,255===r?r=0:++r):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=r}else e+=1<<24;return e}var r=t.Encryptor=t.extend({processBlock:function(e,t){var r=this._cipher,i=r.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),function(e){0===(e[0]=n(e[0]))&&(e[1]=n(e[1]))}(o);var s=o.slice(0);r.encryptBlock(s,0);for(var c=0;c>>2]|=i<<24-a%4*8,e.sigBytes+=i},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Ansix923},"object"===c(t)?e.exports=t=s(n(0),n(1)):(i=[n(0),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return e.pad.Iso10126={pad:function(t,n){var r=4*n,i=r-t.sigBytes%r;t.concat(e.lib.WordArray.random(i-1)).concat(e.lib.WordArray.create([i<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Iso10126},"object"===c(t)?e.exports=t=s(n(0),n(1)):(i=[n(0),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return e.pad.Iso97971={pad:function(t,n){t.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(t,n)},unpad:function(t){e.pad.ZeroPadding.unpad(t),t.sigBytes--}},e.pad.Iso97971},"object"===c(t)?e.exports=t=s(n(0),n(1)):(i=[n(0),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return e.pad.ZeroPadding={pad:function(e,t){var n=4*t;e.clamp(),e.sigBytes+=n-(e.sigBytes%n||n)},unpad:function(e){for(var t=e.words,n=e.sigBytes-1;!(t[n>>>2]>>>24-n%4*8&255);)n--;e.sigBytes=n+1}},e.pad.ZeroPadding},"object"===c(t)?e.exports=t=s(n(0),n(1)):(i=[n(0),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding},"object"===c(t)?e.exports=t=s(n(0),n(1)):(i=[n(0),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){var t,n,r;return n=(t=e).lib.CipherParams,r=t.enc.Hex,t.format.Hex={stringify:function(e){return e.ciphertext.toString(r)},parse:function(e){var t=r.parse(e);return n.create({ciphertext:t})}},e.format.Hex},"object"===c(t)?e.exports=t=s(n(0),n(1)):(i=[n(0),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(){var t=e,n=t.lib.BlockCipher,r=t.algo,i=[],a=[],o=[],s=[],c=[],u=[],l=[],f=[],p=[],d=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var n=0,r=0;for(t=0;t<256;t++){var h=r^r<<1^r<<2^r<<3^r<<4;h=h>>>8^255&h^99,i[n]=h,a[h]=n;var v=e[n],m=e[v],y=e[m],g=257*e[h]^16843008*h;o[n]=g<<24|g>>>8,s[n]=g<<16|g>>>16,c[n]=g<<8|g>>>24,u[n]=g,g=16843009*y^65537*m^257*v^16843008*n,l[h]=g<<24|g>>>8,f[h]=g<<16|g>>>16,p[h]=g<<8|g>>>24,d[h]=g,n?(n=v^e[e[e[y^v]]],r^=e[e[r]]):n=r=1}}();var h=[0,1,2,4,8,16,32,64,128,27,54],v=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,n=e.sigBytes/4,r=4*((this._nRounds=n+6)+1),a=this._keySchedule=[],o=0;o6&&o%n==4&&(s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=i[(s=s<<8|s>>>24)>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=h[o/n|0]<<24),a[o]=a[o-n]^s}for(var c=this._invKeySchedule=[],u=0;u>>24]]^f[i[s>>>16&255]]^p[i[s>>>8&255]]^d[i[255&s]]}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,s,c,u,i)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,l,f,p,d,a),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,a,o,s){for(var c=this._nRounds,u=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],p=e[t+3]^n[3],d=4,h=1;h>>24]^i[l>>>16&255]^a[f>>>8&255]^o[255&p]^n[d++],m=r[l>>>24]^i[f>>>16&255]^a[p>>>8&255]^o[255&u]^n[d++],y=r[f>>>24]^i[p>>>16&255]^a[u>>>8&255]^o[255&l]^n[d++],g=r[p>>>24]^i[u>>>16&255]^a[l>>>8&255]^o[255&f]^n[d++];u=v,l=m,f=y,p=g}v=(s[u>>>24]<<24|s[l>>>16&255]<<16|s[f>>>8&255]<<8|s[255&p])^n[d++],m=(s[l>>>24]<<24|s[f>>>16&255]<<16|s[p>>>8&255]<<8|s[255&u])^n[d++],y=(s[f>>>24]<<24|s[p>>>16&255]<<16|s[u>>>8&255]<<8|s[255&l])^n[d++],g=(s[p>>>24]<<24|s[u>>>16&255]<<16|s[l>>>8&255]<<8|s[255&f])^n[d++],e[t]=v,e[t+1]=m,e[t+2]=y,e[t+3]=g},keySize:8});t.AES=n._createHelper(v)}(),e.AES},"object"===c(t)?e.exports=t=s(n(0),n(3),n(4),n(2),n(1)):(i=[n(0),n(3),n(4),n(2),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(){var t=e,n=t.lib,r=n.WordArray,i=n.BlockCipher,a=t.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],c=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],u=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],l=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],f=a.DES=i.extend({_doReset:function(){for(var e=this._key.words,t=[],n=0;n<56;n++){var r=o[n]-1;t[n]=e[r>>>5]>>>31-r%32&1}for(var i=this._subKeys=[],a=0;a<16;a++){var u=i[a]=[],l=c[a];for(n=0;n<24;n++)u[n/6|0]|=t[(s[n]-1+l)%28]<<31-n%6,u[4+(n/6|0)]|=t[28+(s[n+24]-1+l)%28]<<31-n%6;for(u[0]=u[0]<<1|u[0]>>>31,n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var f=this._invSubKeys=[];for(n=0;n<16;n++)f[n]=i[15-n]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._subKeys)},decryptBlock:function(e,t){this._doCryptBlock(e,t,this._invSubKeys)},_doCryptBlock:function(e,t,n){this._lBlock=e[t],this._rBlock=e[t+1],p.call(this,4,252645135),p.call(this,16,65535),d.call(this,2,858993459),d.call(this,8,16711935),p.call(this,1,1431655765);for(var r=0;r<16;r++){for(var i=n[r],a=this._lBlock,o=this._rBlock,s=0,c=0;c<8;c++)s|=u[c][((o^i[c])&l[c])>>>0];this._lBlock=o,this._rBlock=a^s}var f=this._lBlock;this._lBlock=this._rBlock,this._rBlock=f,p.call(this,1,1431655765),d.call(this,8,16711935),d.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),e[t]=this._lBlock,e[t+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(e,t){var n=(this._lBlock>>>e^this._rBlock)&t;this._rBlock^=n,this._lBlock^=n<>>e^this._lBlock)&t;this._lBlock^=n,this._rBlock^=n<>>2]>>>24-o%4*8&255;a=(a+r[i]+s)%256;var c=r[i];r[i]=r[a],r[a]=c}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=a.call(this)},keySize:8,ivSize:0});function a(){for(var e=this._S,t=this._i,n=this._j,r=0,i=0;i<4;i++){n=(n+e[t=(t+1)%256])%256;var a=e[t];e[t]=e[n],e[n]=a,r|=e[(e[t]+e[n])%256]<<24-8*i}return this._i=t,this._j=n,r}t.RC4=n._createHelper(i);var o=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)a.call(this)}});t.RC4Drop=n._createHelper(o)}(),e.RC4},"object"===c(t)?e.exports=t=s(n(0),n(3),n(4),n(2),n(1)):(i=[n(0),n(3),n(4),n(2),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(){var t=e,n=t.lib.StreamCipher,r=t.algo,i=[],a=[],o=[],s=r.Rabbit=n.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,n=0;n<4;n++)e[n]=16711935&(e[n]<<8|e[n]>>>24)|4278255360&(e[n]<<24|e[n]>>>8);var r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],i=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,n=0;n<4;n++)c.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(t){var a=t.words,o=a[0],s=a[1],u=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=u>>>16|4294901760&l,p=l<<16|65535&u;for(i[0]^=u,i[1]^=f,i[2]^=l,i[3]^=p,i[4]^=u,i[5]^=f,i[6]^=l,i[7]^=p,n=0;n<4;n++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),i[0]=n[0]^n[5]>>>16^n[3]<<16,i[1]=n[2]^n[7]>>>16^n[5]<<16,i[2]=n[4]^n[1]>>>16^n[7]<<16,i[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)i[r]=16711935&(i[r]<<8|i[r]>>>24)|4278255360&(i[r]<<24|i[r]>>>8),e[t+r]^=i[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)a[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],i=65535&r,s=r>>>16,c=((i*i>>>17)+i*s>>>15)+s*s,u=((4294901760&r)*r|0)+((65535&r)*r|0);o[n]=c^u}e[0]=o[0]+(o[7]<<16|o[7]>>>16)+(o[6]<<16|o[6]>>>16)|0,e[1]=o[1]+(o[0]<<8|o[0]>>>24)+o[7]|0,e[2]=o[2]+(o[1]<<16|o[1]>>>16)+(o[0]<<16|o[0]>>>16)|0,e[3]=o[3]+(o[2]<<8|o[2]>>>24)+o[1]|0,e[4]=o[4]+(o[3]<<16|o[3]>>>16)+(o[2]<<16|o[2]>>>16)|0,e[5]=o[5]+(o[4]<<8|o[4]>>>24)+o[3]|0,e[6]=o[6]+(o[5]<<16|o[5]>>>16)+(o[4]<<16|o[4]>>>16)|0,e[7]=o[7]+(o[6]<<8|o[6]>>>24)+o[5]|0}t.Rabbit=n._createHelper(s)}(),e.Rabbit},"object"===c(t)?e.exports=t=s(n(0),n(3),n(4),n(2),n(1)):(i=[n(0),n(3),n(4),n(2),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t,n){var r,i,a,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}s=function(e){return function(){var t=e,n=t.lib.StreamCipher,r=t.algo,i=[],a=[],o=[],s=r.RabbitLegacy=n.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],r=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(t){var a=t.words,o=a[0],s=a[1],u=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=u>>>16|4294901760&l,p=l<<16|65535&u;for(r[0]^=u,r[1]^=f,r[2]^=l,r[3]^=p,r[4]^=u,r[5]^=f,r[6]^=l,r[7]^=p,i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),i[0]=n[0]^n[5]>>>16^n[3]<<16,i[1]=n[2]^n[7]>>>16^n[5]<<16,i[2]=n[4]^n[1]>>>16^n[7]<<16,i[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)i[r]=16711935&(i[r]<<8|i[r]>>>24)|4278255360&(i[r]<<24|i[r]>>>8),e[t+r]^=i[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)a[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],i=65535&r,s=r>>>16,c=((i*i>>>17)+i*s>>>15)+s*s,u=((4294901760&r)*r|0)+((65535&r)*r|0);o[n]=c^u}e[0]=o[0]+(o[7]<<16|o[7]>>>16)+(o[6]<<16|o[6]>>>16)|0,e[1]=o[1]+(o[0]<<8|o[0]>>>24)+o[7]|0,e[2]=o[2]+(o[1]<<16|o[1]>>>16)+(o[0]<<16|o[0]>>>16)|0,e[3]=o[3]+(o[2]<<8|o[2]>>>24)+o[1]|0,e[4]=o[4]+(o[3]<<16|o[3]>>>16)+(o[2]<<16|o[2]>>>16)|0,e[5]=o[5]+(o[4]<<8|o[4]>>>24)+o[3]|0,e[6]=o[6]+(o[5]<<16|o[5]>>>16)+(o[4]<<16|o[4]>>>16)|0,e[7]=o[7]+(o[6]<<8|o[6]>>>24)+o[5]|0}t.RabbitLegacy=n._createHelper(s)}(),e.RabbitLegacy},"object"===c(t)?e.exports=t=s(n(0),n(3),n(4),n(2),n(1)):(i=[n(0),n(3),n(4),n(2),n(1)],void 0===(a="function"==typeof(r=s)?r.apply(t,i):r)||(e.exports=a))},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==o(Symbol.iterator)?function(e){return o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":o(e)})(e)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){"use strict";n.r(t);var r=n(5),i=n(11),a=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.DefaultPBKDF2Length=768}var t;return(t=[{key:"generateUUIDSync",value:function(){return Object(r.a)()}},{key:"generateUUID",value:function(){return regeneratorRuntime.async((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",Object(r.a)());case 1:case"end":return e.stop()}}))}},{key:"timingSafeEqual",value:function(e,t){var n=String(e),r=String(t),i=n.length,a=0;i!==r.length&&(r=n,a=1);for(var o=0;o0&&void 0!==l[0]?l[0]:{},t=e.password,n=e.pw_salt,r=e.pw_cost,f.next=3,regeneratorRuntime.awrap(this.pbkdf2(t,n,r,this.DefaultPBKDF2Length));case 3:return i=f.sent,a=i.length,o=a/3,s=i.slice(0,o),c=i.slice(o,2*o),u=i.slice(2*o,3*o),f.abrupt("return",[s,c,u]);case 10:case"end":return f.stop()}}),null,this)}}])&&function(e,t){for(var n=0;n-1&&e%1==0&&e1),t})),s(e,l(e),n),u&&(n=i(n,7,c));for(var f=t.length;f--;)a(n,t[f]);return n}));e.exports=f},function(e,t,n){var r=n(11)(n(5),"Map");e.exports=r},function(e,t,n){var r=n(12),i=n(4);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){var r=n(114),i=n(121),a=n(123),o=n(124),s=n(125);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){(function(e){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=n(57),a="object"==r(t)&&t&&!t.nodeType&&t,o=a&&"object"==r(e)&&e&&!e.nodeType&&e,s=o&&o.exports===a&&i.process,c=function(){try{return o&&o.require&&o.require("util").types||s&&s.binding&&s.binding("util")}catch(e){}}();e.exports=c}).call(this,n(22)(e))},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=n(3),a=n(34),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;e.exports=function(e,t){if(i(e))return!1;var n=r(e);return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!a(e))||s.test(e)||!o.test(e)||null!=t&&e in Object(t)}},function(e,t){e.exports=function(e){return e}},function(e,t,n){var r=n(78);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t,n){var r=n(63);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},function(e,t){e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n-1:!!l&&r(e,t,n)>-1}},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){(function(t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r="object"==(void 0===t?"undefined":n(t))&&t&&t.Object===Object&&t;e.exports=r}).call(this,n(56))},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},function(e,t,n){var r=n(126),i=n(6);e.exports=function e(t,n,a,o,s){return t===n||(null==t||null==n||!i(t)&&!i(n)?t!=t&&n!=n:r(t,n,a,o,e,s))}},function(e,t,n){var r=n(61),i=n(129),a=n(62);e.exports=function(e,t,n,o,s,c){var u=1&n,l=e.length,f=t.length;if(l!=f&&!(u&&f>l))return!1;var p=c.get(e);if(p&&c.get(t))return p==t;var d=-1,h=!0,v=2&n?new r:void 0;for(c.set(e,t),c.set(t,e);++d1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),t=Object(t);++r-1?s[c?t[u]:u]:void 0}}},function(e,t,n){var r=n(97),i=n(143),a=n(71);e.exports=function(e){var t=i(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},function(e,t,n){var r=n(24),i=n(59);e.exports=function(e,t,n,a){var o=n.length,s=o,c=!a;if(null==e)return!s;for(e=Object(e);o--;){var u=n[o];if(c&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++o-1}},function(e,t,n){var r=n(26);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},function(e,t,n){var r=n(25);e.exports=function(){this.__data__=new r,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var r=n(25),i=n(37),a=n(39);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var r=n(38),i=n(111),a=n(4),o=n(58),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,f=u.hasOwnProperty,p=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||i(e))&&(r(e)?p:s).test(o(e))}},function(e,t,n){var r=n(14),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var i=o.call(e);return r&&(t?e[s]=n:delete e[s]),i}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var r,i=n(112),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},function(e,t,n){var r=n(5)["__core-js_shared__"];e.exports=r},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var r=n(115),i=n(25),a=n(37);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},function(e,t,n){var r=n(116),i=n(117),a=n(118),o=n(119),s=n(120);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++ti?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(i);++r0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=n(18),a=n(10),o=n(19),s=n(4);e.exports=function(e,t,n){if(!s(n))return!1;var c=r(t);return!!("number"==c?a(n)&&o(t,n.length):"string"==c&&t in n)&&i(n[t],e)}},function(e,t,n){var r=n(24),i=n(176),a=n(53),o=n(177),s=n(178),c=n(80),u=n(51),l=n(179),f=n(180),p=n(64),d=n(90),h=n(32),v=n(181),m=n(182),y=n(82),g=n(3),b=n(30),k=n(186),w=n(4),x=n(188),S=n(13),$="[object Arguments]",_="[object Function]",M="[object Object]",C={};C[$]=C["[object Array]"]=C["[object ArrayBuffer]"]=C["[object DataView]"]=C["[object Boolean]"]=C["[object Date]"]=C["[object Float32Array]"]=C["[object Float64Array]"]=C["[object Int8Array]"]=C["[object Int16Array]"]=C["[object Int32Array]"]=C["[object Map]"]=C["[object Number]"]=C[M]=C["[object RegExp]"]=C["[object Set]"]=C["[object String]"]=C["[object Symbol]"]=C["[object Uint8Array]"]=C["[object Uint8ClampedArray]"]=C["[object Uint16Array]"]=C["[object Uint32Array]"]=!0,C["[object Error]"]=C[_]=C["[object WeakMap]"]=!1,e.exports=function e(t,n,A,O,I,E){var D,R=1&n,P=2&n,T=4&n;if(A&&(D=I?A(t,O,I,E):A(t)),void 0!==D)return D;if(!w(t))return t;var j=g(t);if(j){if(D=v(t),!R)return u(t,D)}else{var F=h(t),N=F==_||"[object GeneratorFunction]"==F;if(b(t))return c(t,R);if(F==M||F==$||N&&!I){if(D=P||N?{}:y(t),!R)return P?f(t,s(D,t)):l(t,o(D,t))}else{if(!C[F])return I?t:{};D=m(t,F,R)}}E||(E=new r);var L=E.get(t);if(L)return L;E.set(t,D),x(t)?t.forEach((function(r){D.add(e(r,n,A,r,t,E))})):k(t)&&t.forEach((function(r,i){D.set(i,e(r,n,A,i,t,E))}));var U=T?P?d:p:P?keysIn:S,B=j?void 0:U(t);return i(B||t,(function(r,i){B&&(r=t[i=r]),a(D,i,e(r,n,A,i,t,E))})),D}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n0&&a(l)?n>1?e(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},function(e,t,n){var r=n(14),i=n(29),a=n(3),o=r?r.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||i(e)||!!(o&&e&&e[o])}},function(e,t,n){var r=n(195),i=n(72);e.exports=function(e,t){return r(e,t,(function(t,n){return i(e,n)}))}},function(e,t,n){var r=n(33),i=n(196),a=n(15);e.exports=function(e,t,n){for(var o=-1,s=t.length,c={};++o-1;)d!==e&&c.call(d,h,1),c.call(e,h,1);return e}},function(e,t){e.exports=function(e){return e!=e}},function(e,t){e.exports=function(e,t,n){for(var r=n-1,i=e.length;++r=200){var v=t?null:s(e);if(v)return c(v);p=!1,l=o,h=new r}else h=t?[]:d;e:for(;++u-1}},function(e,t){e.exports=function(e,t,n){for(var r=-1,i=null==e?0:e.length;++r0&&void 0!==l[0]?l[0]:{},t=e.ciphertextToAuth,n=e.contentCiphertext,r=e.encryptionKey,i=e.iv,a=e.authHash,o=e.authKey,!(l.length>1?l[1]:void 0)||a){f.next=5;break}return console.error("Auth hash is required."),f.abrupt("return");case 5:if(!a){f.next=12;break}return f.next=8,regeneratorRuntime.awrap(this.crypto.hmac256(t,o));case 8:if(s=f.sent,!1!==this.crypto.timingSafeEqual(a,s)){f.next=12;break}return console.error("Auth hash does not match, returning null."),f.abrupt("return",null);case 12:return f.next=14,regeneratorRuntime.awrap(this.crypto.hexStringToArrayBuffer(r));case 14:return c=f.sent,f.next=17,regeneratorRuntime.awrap(this.crypto.hexStringToArrayBuffer(i||""));case 17:return u=f.sent,f.abrupt("return",this.crypto.aes256CbcDecrypt(n,c,u));case 19:case"end":return f.stop()}}),null,this)}},{key:"encryptText",value:function(e,t,n){var r,i;return regeneratorRuntime.async((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,regeneratorRuntime.awrap(this.crypto.hexStringToArrayBuffer(t));case 2:return r=a.sent,a.next=5,regeneratorRuntime.awrap(this.crypto.hexStringToArrayBuffer(n||""));case 5:return i=a.sent,a.abrupt("return",this.crypto.aes256CbcEncrypt(e,r,i));case 7:case"end":return a.stop()}}),null,this)}}])&&i(t.prototype,n),e}();function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n5e3)||this.crypto instanceof r.SNWebCrypto}},{key:"supportedVersions",value:function(){return["001","002","003"]}},{key:"isVersionNewerThanLibraryVersion",value:function(e){var t=this.version();return parseInt(e)>parseInt(t)}},{key:"isProtocolVersionOutdated",value:function(e){var t={"001":Date.parse("2018-01-01"),"002":Date.parse("2020-01-01")}[e];return!!t&&new Date>t}},{key:"costMinimumForVersion",value:function(e){return{"001":f.pwCost(),"002":y.pwCost(),"003":S.pwCost()}[e]}},{key:"defaultPasswordGenerationCost",value:function(){return this.costMinimumForVersion(this.version())}},{key:"versionForItem",value:function(e){return e.content.substring(0,3)}},{key:"createOperatorForLatestVersion",value:function(){return this.createOperatorForVersion(this.version())}},{key:"createOperatorForVersion",value:function(e){if("001"===e)return new f(this.crypto);if("002"===e)return new y(this.crypto);if("003"===e)return new S(this.crypto);if("000"===e)return this.createOperatorForLatestVersion();throw"Unable to find operator for version ".concat(e)}},{key:"operatorForVersion",value:function(e){var t=e,n=this.operators[t];return n||(n=this.createOperatorForVersion(e),this.operators[t]=n),n}},{key:"defaultOperator",value:function(){return this.operatorForVersion(this.version())}},{key:"computeEncryptionKeysForUser",value:function(e,t){var n,r;return regeneratorRuntime.async((function(i){for(;;)switch(i.prev=i.next){case 0:return n=t.version,r=this.operatorForVersion(n),i.abrupt("return",r.computeEncryptionKeysForUser(e,t));case 3:case"end":return i.stop()}}),null,this)}},{key:"generateInitialKeysAndAuthParamsForUser",value:function(e,t){var n;return regeneratorRuntime.async((function(r){for(;;)switch(r.prev=r.next){case 0:return n=this.defaultOperator(),r.abrupt("return",n.generateInitialKeysAndAuthParamsForUser(e,t));case 2:case"end":return r.stop()}}),null,this)}},{key:"decryptItem",value:function(e,t){var n,r;return regeneratorRuntime.async((function(i){for(;;)switch(i.prev=i.next){case 0:return n=this.versionForItem(e),r=this.operatorForVersion(n),i.abrupt("return",r.decryptItem(e,t));case 3:case"end":return i.stop()}}),null,this)}},{key:"encryptItem",value:function(e,t,n){var r,i;return regeneratorRuntime.async((function(a){for(;;)switch(a.prev=a.next){case 0:return r=n.version,i=this.operatorForVersion(r),a.abrupt("return",i.encryptItem(e,t,n));case 3:case"end":return a.stop()}}),null,this)}},{key:"decryptMultipleItems",value:function(e,t,n){var r,i=this;return regeneratorRuntime.async((function(a){for(;;)switch(a.prev=a.next){case 0:return r=function(e){return regeneratorRuntime.async((function(r){for(;;)switch(r.prev=r.next){case 0:if(e){r.next=2;break}return r.abrupt("return");case 2:if(!0!==e.deleted||null!==e.content){r.next=4;break}return r.abrupt("return");case 4:if(!("string"==typeof e.content||e.content instanceof String)){r.next=19;break}return r.prev=6,r.next=9,regeneratorRuntime.awrap(i.decryptItem(e,t));case 9:r.next=19;break;case 11:if(r.prev=11,r.t0=r.catch(6),e.errorDecrypting||(e.errorDecryptingValueChanged=!0),e.errorDecrypting=!0,!n){r.next=17;break}throw r.t0;case 17:return console.error("Error decrypting item",e,r.t0),r.abrupt("return");case 19:case"end":return r.stop()}}),null,null,[[6,11]])},a.abrupt("return",Promise.all(e.map((function(e){return r(e)}))));case 2:case"end":return a.stop()}}))}}])&&_(t.prototype,n),e}(),C=new M,A=n(2),O=n.n(A),I=n(0),E=n.n(I),D=n(3),R=n.n(D),P=n(92),T=n.n(P);function j(e,t){for(var n=0;n"==n.operator?v>h:"<="==n.operator?v<=h:">="==n.operator?v>=h:"startsWith"==n.operator?v.startsWith(h):"in"==n.operator?-1!=h.indexOf(v):"includes"==n.operator?this.resolveIncludesPredicate(v,h):"matches"==n.operator&&new RegExp(h).test(v)}},{key:"resolveIncludesPredicate",value:function(t,n){if("string"==typeof n)return t.includes(n);var r;r=Array.isArray(n)?e.fromArray(n):n;var i=!0,a=!1,o=void 0;try{for(var s,c=t[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var u=s.value;if(this.ObjectSatisfiesPredicate(u,r))return!0}}catch(e){a=!0,o=e}finally{try{i||null==c.return||c.return()}finally{if(a)throw o}}return!1}},{key:"ItemSatisfiesPredicate",value:function(t,n){return Array.isArray(n)&&(n=e.fromArray(n)),this.ObjectSatisfiesPredicate(t,n)}},{key:"ItemSatisfiesPredicates",value:function(e,t){var n=!0,r=!1,i=void 0;try{for(var a,o=t[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(!this.ItemSatisfiesPredicate(e,s))return!1}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return!0}},{key:"DateFromString",value:function(e){var t=e.split("."),n=t[1],r=new Date,i=parseInt(t[0]);return"days"==n?r.setDate(r.getDate()-i):"hours"==n&&r.setHours(r.getHours()-i),r}},{key:"IsRecursiveOperator",value:function(e){return["and","or"].includes(e)}}])&&j(t,n),e}();function L(e){return(L="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function U(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.content={},this.referencingObjects=[],this.updateFromJSON(t),this.uuid||Object($.c)()&&(this.uuid=C.crypto.generateUUIDSync()),"object"!==L(this.content)||this.content.references||(this.content.references=[])}var t,n,r;return t=e,r=[{key:"deepMerge",value:function(e,t){return T()(e,t,(function(e,t){if(R()(e))return t})),e}},{key:"AreItemContentsEqual",value:function(t){var n=t.leftContent,r=t.rightContent,i=t.keysToIgnore,a=t.appDataKeysToIgnore,o=function(e,t){if(!e)return e;var n=!0,r=!1,i=void 0;try{for(var a,o=t[Symbol.iterator]();!(n=(a=o.next()).done);n=!0)delete e[a.value]}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return e};return(n=JSON.parse(JSON.stringify(n))).appData&&o(n.appData[e.AppDomain],a),n=o(n,i),(r=JSON.parse(JSON.stringify(r))).appData&&o(r.appData[e.AppDomain],a),r=o(r,i),JSON.stringify(n)===JSON.stringify(r)}}],(n=[{key:"initUUID",value:function(){return regeneratorRuntime.async((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.uuid){e.next=4;break}return e.next=3,regeneratorRuntime.awrap(C.crypto.generateUUID());case 3:this.uuid=e.sent;case 4:case"end":return e.stop()}}),null,this)}},{key:"updateFromJSON",value:function(t){if(t){this.deleted=t.deleted,this.uuid=t.uuid,this.enc_item_key=t.enc_item_key,this.auth_hash=t.auth_hash,this.auth_params=t.auth_params;for(var n=0,r=["errorDecrypting","dirty","dirtyCount","dirtiedDate","dummy"];nt.title})).map((function(e,t){return"#"+e.title})).join(" ")}}],(r=[{key:"mapContentToLocalProperties",value:function(e){X(Q(t.prototype),"mapContentToLocalProperties",this).call(this,e),this.title=e.title}},{key:"structureParams",value:function(){var e={title:this.title},n=X(Q(t.prototype),"structureParams",this).call(this);return Object.assign(n,e),n}},{key:"addItemAsRelationship",value:function(e){"Note"==e.content_type&&(Object($.a)(this.notes,"uuid",e.uuid)||(this.notes.push(e),e.tags.push(this))),X(Q(t.prototype),"addItemAsRelationship",this).call(this,e)}},{key:"removeItemAsRelationship",value:function(e){"Note"==e.content_type&&(E()(this.notes,{uuid:e.uuid}),E()(e.tags,{uuid:this.uuid})),X(Q(t.prototype),"removeItemAsRelationship",this).call(this,e)}},{key:"updateLocalRelationships",value:function(){var e=this.content.references.map((function(e){return e.uuid}));this.notes.slice().forEach(function(t){e.includes(t.uuid)||(E()(t.tags,{uuid:this.uuid}),E()(this.notes,{uuid:t.uuid}),t.setIsNoLongerBeingReferencedBy(this))}.bind(this))}},{key:"isBeingRemovedLocally",value:function(){var e=this;this.notes.forEach((function(t){E()(t.tags,{uuid:e.uuid}),t.setIsNoLongerBeingReferencedBy(e)})),this.notes.length=0,X(Q(t.prototype),"isBeingRemovedLocally",this).call(this)}},{key:"informReferencesOfUUIDChange",value:function(e,t){var n=!0,r=!1,i=void 0;try{for(var a,o=this.notes[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;E()(s.tags,{uuid:e}),s.tags.push(this)}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}},{key:"didFinishSyncing",value:function(){var e=!0,t=!1,n=void 0;try{for(var r,i=this.notes[Symbol.iterator]();!(e=(r=i.next()).done);e=!0)r.value.tagDidFinishSyncing(this)}catch(e){t=!0,n=e}finally{try{e||null==i.return||i.return()}finally{if(t)throw n}}}},{key:"isSmartTag",value:function(){return"SN|SmartTag"==this.content_type}},{key:"displayName",get:function(){return"Tag"}}])&&Z(n.prototype,r),i&&Z(n,i),t}(B);function ne(e){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function re(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];if(!e.errorDecrypting){var n=e.contentObject;if(e.updateLocalRelationships(),n.references){var r=n.references.slice(),i=r.map((function(e){return e.uuid})),a=!0,o=this.findItems(i,a),s=!0,c=!1,u=void 0;try{for(var l,f=o.entries()[Symbol.iterator]();!(s=(l=f.next()).done);s=!0){var p=yt(l.value,2),d=p[0],h=p[1];if(h)e.addItemAsRelationship(h),t&&this.setItemDirty(h,!0);else{var v=i[d],m=this.missedReferenceBuildKey(v,e.uuid);if(!this.missedReferences[m]){var y={reference_uuid:v,for_item:e};this.missedReferences[m]=y}}}}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}}}}},{key:"notifySyncObserversOfModels",value:function(e,t,n){var r,i,a,o,s,c,u,l=this;return regeneratorRuntime.async((function(f){for(;;)switch(f.prev=f.next){case 0:r=this.itemSyncObservers.sort((function(e,t){return e.priority0)){v.next=25;break}return v.next=25,regeneratorRuntime.awrap(l._callSyncObserverCallbackWithTimeout(r,i,a,o,t,n));case 25:case"end":return v.stop()}}),null,null,[[6,10,14,22],[15,,17,21]])},c=r[Symbol.iterator]();case 7:if(i=(u=c.next()).done){f.next=13;break}return f.next=10,regeneratorRuntime.awrap(s());case 10:i=!0,f.next=7;break;case 13:f.next=19;break;case 15:f.prev=15,f.t0=f.catch(4),a=!0,o=f.t0;case 19:f.prev=19,f.prev=20,i||null==c.return||c.return();case 22:if(f.prev=22,!a){f.next=25;break}throw o;case 25:return f.finish(22);case 26:return f.finish(19);case 27:case"end":return f.stop()}}),null,this,[[4,15,19,27],[20,,22,26]])}},{key:"_callSyncObserverCallbackWithTimeout",value:function(e,t,n,r,i,a){var o=this;return regeneratorRuntime.async((function(s){for(;;)switch(s.prev=s.next){case 0:return s.abrupt("return",new Promise((function(s,c){o.$timeout((function(){try{e.callback(t,n,r,i,a)}catch(e){console.error("Sync observer exception",e)}finally{s()}}))})));case 1:case"end":return s.stop()}}))}},{key:"setItemDirty",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0;this.setItemsDirty([e],t,n,r,i)}},{key:"setItemsDirty",value:function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0,o=!0,s=!1,c=void 0;try{for(var u,l=t[Symbol.iterator]();!(o=(u=l.next()).done);o=!0){var f=u.value;f.setDirty(n,r)}}catch(e){s=!0,c=e}finally{try{o||null==l.return||l.return()}finally{if(s)throw c}}this.notifySyncObserversOfModels(t,i||e.MappingSourceLocalDirtied,a)}},{key:"createItem",value:function(t){var n=e.ContentTypeClassMapping&&e.ContentTypeClassMapping[t.content_type];return n||(n=B),new n(t)}},{key:"createDuplicateItemFromResponseItem",value:function(e){var t,n;return regeneratorRuntime.async((function(r){for(;;)switch(r.prev=r.next){case 0:if("function"!=typeof e.setDirty){r.next=3;break}return console.error("Attempting to create conflicted copy of non-response item."),r.abrupt("return",null);case 3:return t=JSON.parse(JSON.stringify(e)),r.next=6,regeneratorRuntime.awrap(C.crypto.generateUUID());case 6:return t.uuid=r.sent,n=this.createItem(t),r.abrupt("return",n);case 9:case"end":return r.stop()}}),null,this)}},{key:"duplicateItemAndAddAsConflict",value:function(e){return this.duplicateItemWithCustomContentAndAddAsConflict({content:e.content,duplicateOf:e})}},{key:"duplicateItemWithCustomContentAndAddAsConflict",value:function(e){var t=e.content,n=e.duplicateOf,r=this.duplicateItemWithCustomContent({content:t,duplicateOf:n});return this.addDuplicatedItemAsConflict({duplicate:r,duplicateOf:n}),r}},{key:"addDuplicatedItemAsConflict",value:function(e){var t=e.duplicate,n=e.duplicateOf;this.addDuplicatedItem(t,n),t.content.conflict_of=n.uuid}},{key:"duplicateItemWithCustomContent",value:function(e){var t=e.content,n=e.duplicateOf,r=new n.constructor({content:t});return r.created_at=n.created_at,r.content_type||(r.content_type=n.content_type),r}},{key:"duplicateItemAndAdd",value:function(e){var t=this.duplicateItemWithoutAdding(e);return this.addDuplicatedItem(t,e),t}},{key:"duplicateItemWithoutAdding",value:function(e){var t=new e.constructor({content:e.content});return t.created_at=e.created_at,t.content_type||(t.content_type=e.content_type),t}},{key:"addDuplicatedItem",value:function(e,t){this.addItem(e);var n=!0,r=!1,i=void 0;try{for(var a,o=t.referencingObjects[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;s.addItemAsRelationship(e),this.setItemDirty(s,!0)}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}this.resolveReferencesForItem(e),this.setItemDirty(e,!0)}},{key:"addItem",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.addItems([e],t)}},{key:"addItems",value:function(e){var t=this;arguments.length>1&&void 0!==arguments[1]&&arguments[1],e.forEach((function(e){t.itemsHash[e.uuid]||(t.itemsHash[e.uuid]=e,t.items.push(e))}))}},{key:"addItemSyncObserver",value:function(e,t,n){this.addItemSyncObserverWithPriority({id:e,types:t,callback:n,priority:1})}},{key:"addItemSyncObserverWithPriority",value:function(e){var t=e.id,n=e.priority,r=e.types,i=e.callback;Array.isArray(r)||(r=[r]),this.itemSyncObservers.push({id:t,types:r,priority:n,callback:i})}},{key:"removeItemSyncObserver",value:function(e){E()(this.itemSyncObservers,O()(this.itemSyncObservers,{id:e}))}},{key:"getDirtyItems",value:function(){return this.items.filter((function(e){return 1==e.dirty&&!e.dummy&&(!e.errorDecrypting||e.deleted)}))}},{key:"clearDirtyItems",value:function(e){var t=!0,n=!1,r=void 0;try{for(var i,a=e[Symbol.iterator]();!(t=(i=a.next()).done);t=!0)i.value.setDirty(!1)}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}}},{key:"removeAndDirtyAllRelationshipsForItem",value:function(e){if(!e.errorDecrypting){var t=!0,n=!1,r=void 0;try{for(var i,a=e.content.references[Symbol.iterator]();!(t=(i=a.next()).done);t=!0){var o=i.value,s=this.findItem(o.uuid);s&&(e.removeItemAsRelationship(s),s.hasRelationshipWithItem(e)&&(s.removeItemAsRelationship(e),this.setItemDirty(s,!0)))}}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}}var c=!0,u=!1,l=void 0;try{for(var f,p=e.referencingObjects[Symbol.iterator]();!(c=(f=p.next()).done);c=!0){var d=f.value;d.removeItemAsRelationship(e),this.setItemDirty(d,!0)}}catch(e){u=!0,l=e}finally{try{c||null==p.return||p.return()}finally{if(u)throw l}}e.referencingObjects=[]}},{key:"setAllItemsDirty",value:function(){var e=this.allItems;this.setItemsDirty(e,!0)}},{key:"setItemToBeDeleted",value:function(e){e.deleted=!0,e.dummy||this.setItemDirty(e,!0),this.removeAndDirtyAllRelationshipsForItem(e)}},{key:"removeItemLocally",value:function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:E()(this.items,{uuid:e.uuid}),delete this.itemsHash[e.uuid],e.isBeingRemovedLocally();case 3:case"end":return t.stop()}}),null,this)}},{key:"allItemsMatchingTypes",value:function(e){return this.allItems.filter((function(t){return(lt()(e,t.content_type)||lt()(e,"*"))&&!t.dummy}))}},{key:"invalidItems",value:function(){return this.allItems.filter((function(e){return e.errorDecrypting}))}},{key:"validItemsForContentType",value:function(e){return this.allItems.filter((function(t){return t.content_type==e&&!t.errorDecrypting}))}},{key:"findItem",value:function(e){return this.itemsHash[e]}},{key:"findItems",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],r=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var c=o.value,u=this.itemsHash[c];(u||t)&&n.push(u)}}catch(e){i=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return n}},{key:"itemsMatchingPredicate",value:function(e){return this.itemsMatchingPredicates([e])}},{key:"itemsMatchingPredicates",value:function(e){return this.filterItemsWithPredicates(this.allItems,e)}},{key:"filterItemsWithPredicates",value:function(e,t){return e.filter((function(e){var n=!0,r=!1,i=void 0;try{for(var a,o=t[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(!e.satisfiesPredicate(s))return!1}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return!0}))}},{key:"importItems",value:function(t){var n,r,i,a,o,s,c,u,l,f,p,d,h,v,m,y,g,b,k,w,x,S,$,_,M,C,A;return regeneratorRuntime.async((function(O){for(;;)switch(O.prev=O.next){case 0:n=[],r={},i=!0,a=!1,o=void 0,O.prev=5,s=t[Symbol.iterator]();case 7:if(i=(c=s.next()).done){O.next=18;break}if(u=c.value,l=this.findItem(u.uuid)){O.next=13;break}return r[u.uuid]={},O.abrupt("continue",15);case 13:f=this.duplicateItemWithoutAdding(l),r[u.uuid]={frozenValue:f,itemRef:l};case 15:i=!0,O.next=7;break;case 18:O.next=24;break;case 20:O.prev=20,O.t0=O.catch(5),a=!0,o=O.t0;case 24:O.prev=24,O.prev=25,i||null==s.return||s.return();case 27:if(O.prev=27,!a){O.next=30;break}throw o;case 30:return O.finish(27);case 31:return O.finish(24);case 32:p=!0,d=!1,h=void 0,O.prev=35,v=t[Symbol.iterator]();case 37:if(p=(m=v.next()).done){O.next=52;break}if(y=m.value,g=r[y.uuid],b=g.frozenValue,k=g.itemRef,!b||k.errorDecrypting){O.next=47;break}return O.next=43,regeneratorRuntime.awrap(this.createDuplicateItemFromResponseItem(y));case 43:w=O.sent,y.deleted||b.isItemContentEqualWith(w)||(this.addDuplicatedItemAsConflict({duplicate:w,duplicateOf:k}),n.push(w)),O.next=49;break;case 47:n.push(y),k&&k.errorDecrypting&&(k.errorDecrypting=!1);case 49:p=!0,O.next=37;break;case 52:O.next=58;break;case 54:O.prev=54,O.t1=O.catch(35),d=!0,h=O.t1;case 58:O.prev=58,O.prev=59,p||null==v.return||v.return();case 61:if(O.prev=61,!d){O.next=64;break}throw h;case 64:return O.finish(61);case 65:return O.finish(58);case 66:return O.next=68,regeneratorRuntime.awrap(this.mapResponseItemsToLocalModels(n,e.MappingSourceFileImport));case 68:for(x=O.sent,S=!0,$=!1,_=void 0,O.prev=72,M=x[Symbol.iterator]();!(S=(C=M.next()).done);S=!0)A=C.value,this.setItemDirty(A,!0,!1),A.deleted=!1;O.next=80;break;case 76:O.prev=76,O.t2=O.catch(72),$=!0,_=O.t2;case 80:O.prev=80,O.prev=81,S||null==M.return||M.return();case 83:if(O.prev=83,!$){O.next=86;break}throw _;case 86:return O.finish(83);case 87:return O.finish(80);case 88:return O.abrupt("return",x);case 89:case"end":return O.stop()}}),null,this,[[5,20,24,32],[25,,27,31],[35,54,58,66],[59,,61,65],[72,76,80,88],[81,,83,87]])}},{key:"getAllItemsJSONData",value:function(e,t,n){return regeneratorRuntime.async((function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",this.getJSONDataForItems(this.allItems,e,t,n));case 1:case"end":return r.stop()}}),null,this)}},{key:"getJSONDataForItems",value:function(e,t,n,r){return regeneratorRuntime.async((function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",Promise.all(e.map((function(e){return new G(e,t,n).paramsForExportFile()}))).then((function(e){if(r&&0==e.length)return null;var i={items:e};return t&&(i.auth_params=n),JSON.stringify(i,null,2)})));case 1:case"end":return i.stop()}}))}},{key:"computeDataIntegrityHash",value:function(){var e,t,n,r;return regeneratorRuntime.async((function(i){for(;;)switch(i.prev=i.next){case 0:return i.prev=0,e=this.allNondummyItems.sort((function(e,t){return t.updated_at-e.updated_at})),t=e.map((function(e){return e.updatedAtTimestamp()})),n=t.join(","),i.next=6,regeneratorRuntime.awrap(C.crypto.sha256(n));case 6:return r=i.sent,i.abrupt("return",r);case 10:return i.prev=10,i.t0=i.catch(0),console.error("Error computing data integrity hash",i.t0),i.abrupt("return",null);case 14:case"end":return i.stop()}}),null,this,[[0,10]])}},{key:"allItems",get:function(){return this.items.slice()}},{key:"allNondummyItems",get:function(){return this.items.filter((function(e){return!e.dummy}))}}])&>(t.prototype,n),e}();function kt(e,t){for(var n=0;n0&&i!=bt.MappingSourceRemoteSaved&&e.isDesktop&&e.desktopManager.syncComponentsInstallation(o);var s=!0,c=!1,u=void 0;try{for(var l,f=o[Symbol.iterator]();!(s=(l=f.next()).done);s=!0){var p=l.value,d=O()(e.activeComponents,{uuid:p.uuid});!p.active||p.deleted||d?!p.active&&d&&e.deactivateComponent(p):e.activateComponent(p)}}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}var h=!0,v=!1,m=void 0;try{for(var y,g=function(){var n=y.value;if(a&&a==n.component.uuid)return"continue";var r=t.filter((function(e){return-1!==n.contentTypes.indexOf(e.content_type)}));if(0==r.length)return"continue";var i=[{name:"stream-items",content_types:n.contentTypes.sort()}];e.runWithPermissions(n.component,i,(function(){e.sendItemsInReply(n.component,r,n.originalMessage)}))},b=e.streamObservers[Symbol.iterator]();!(h=(y=b.next()).done);h=!0)g()}catch(e){v=!0,m=e}finally{try{h||null==b.return||b.return()}finally{if(v)throw m}}var k=[{name:"stream-context-item"}],w=!0,x=!1,S=void 0;try{for(var $,_=function(){var n=$.value;if(a&&a==n.component.uuid)return"continue";var r=!0,o=!1,s=void 0;try{for(var c,u=e.handlers[Symbol.iterator]();!(r=(c=u.next()).done);r=!0){var l=c.value;(l.areas.includes(n.component.area)||l.areas.includes("*"))&&l.contextRequestHandler&&(C=l.contextRequestHandler(n.component))&&(A=O()(t,{uuid:C.uuid}))&&e.runWithPermissions(n.component,k,(function(){e.sendContextItemInReply(n.component,A,n.originalMessage,i)}))}}catch(e){o=!0,s=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw s}}},M=e.contextStreamObservers[Symbol.iterator]();!(w=($=M.next()).done);w=!0){var C,A;_()}}catch(e){x=!0,S=e}finally{try{w||null==M.return||M.return()}finally{if(x)throw S}}}))}},{key:"configureForNonMobileUsage",value:function(){var e=this,t=function(t){var n=!0,r=!1,i=void 0;try{for(var a,o=e.activeComponents[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(document.activeElement==e.iframeForComponent(s)){e.$timeout((function(){e.focusChangedForComponent(s)}));break}}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}};window.addEventListener?window.addEventListener("focus",t,!0):window.attachEvent("onfocusout",t),window.addEventListener?window.addEventListener("blur",t,!0):window.attachEvent("onblur",t),this.desktopManager.registerUpdateObserver((function(t){t.active&&t.isTheme()&&e.postActiveThemesToAllComponents()})),window.addEventListener("message",(function(t){e.loggingEnabled&&console.log("Web app: received message",t),t.data.sessionKey&&e.handleMessage(e.componentForSessionKey(t.data.sessionKey),t.data)}),!1)}},{key:"postActiveThemesToAllComponents",value:function(){var e=!0,t=!1,n=void 0;try{for(var r,i=this.components[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){var a=r.value;!a.isTheme()&&a.active&&a.window&&this.postActiveThemesToComponent(a)}}catch(e){t=!0,n=e}finally{try{e||null==i.return||i.return()}finally{if(t)throw n}}}},{key:"getActiveThemes",value:function(){return this.componentsForArea("themes").filter((function(e){return e.active}))}},{key:"urlsForActiveThemes",value:function(){var e=this;return this.getActiveThemes().map((function(t){return e.urlForComponent(t)}))}},{key:"postActiveThemesToComponent",value:function(e){var t={themes:this.urlsForActiveThemes()};this.sendMessageToComponent(e,{action:"themes",data:t})}},{key:"contextItemDidChangeInArea",value:function(e){var t=!0,n=!1,r=void 0;try{for(var i,a=this.handlers[Symbol.iterator]();!(t=(i=a.next()).done);t=!0){var o=i.value;if(!1!==o.areas.includes(e)||o.areas.includes("*")){var s=this.contextStreamObservers.filter((function(t){return t.component.area===e})),c=!0,u=!1,l=void 0;try{for(var f,p=s[Symbol.iterator]();!(c=(f=p.next()).done);c=!0){var d=f.value;if(o.contextRequestHandler){var h=o.contextRequestHandler(d.component);h&&this.sendContextItemInReply(d.component,h,d.originalMessage)}}}catch(e){u=!0,l=e}finally{try{c||null==p.return||p.return()}finally{if(u)throw l}}}}}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}}},{key:"setComponentHidden",value:function(e,t){if(t)e.hidden=!0;else if(e.hidden){e.hidden=!1;var n=O()(this.contextStreamObservers,{identifier:e.uuid});n&&this.handleStreamContextItemMessage(e,n.originalMessage);var r=O()(this.streamObservers,{identifier:e.uuid});r&&this.handleStreamItemsMessage(e,r.originalMessage)}}},{key:"jsonForItem",value:function(t,n,r){var i={uuid:t.uuid,content_type:t.content_type,created_at:t.created_at,updated_at:t.updated_at,deleted:t.deleted};return i.content=t.createContentJSONFromProperties(),i.clientData=t.getDomainDataItem(n.getClientDataKey(),e.ClientDataDomain)||{},!r||r!=bt.MappingSourceRemoteSaved&&r!=bt.MappingSourceLocalSaved||(i.isMetadataUpdate=!0),this.removePrivatePropertiesFromResponseItems([i],n,{type:"outgoing"}),i}},{key:"sendItemsInReply",value:function(e,t,n,r){var i=this;this.loggingEnabled&&console.log("Web|componentManager|sendItemsInReply",e,t,n);var a={items:{}},o=t.map((function(t){return i.jsonForItem(t,e,r)}));a.items=o,this.replyToMessage(e,n,a)}},{key:"sendContextItemInReply",value:function(e,t,n,r){this.loggingEnabled&&console.log("Web|componentManager|sendContextItemInReply",e,t,n);var i={item:this.jsonForItem(t,e,r)};this.replyToMessage(e,n,i)}},{key:"replyToMessage",value:function(e,t,n){var r={action:"reply",original:t,data:n};this.sendMessageToComponent(e,r)}},{key:"sendMessageToComponent",value:function(e,t){if(!e.hidden||["component-registered","themes"].includes(t.action)){this.loggingEnabled&&console.log("Web|sendMessageToComponent",e,t);var n=this.urlForComponent(e);n.startsWith("http")||n.startsWith("file")||(n=window.location.href+n),e.window||this.alertManager.alert({text:"Standard Notes is trying to communicate with ".concat(e.name,", but an error is occurring. Please restart this extension and try again.")}),this.isMobile&&(t=JSON.stringify(t)),e.window.postMessage(t,n)}else this.loggingEnabled&&console.log("Component disabled for current item, not sending any messages.",e.name)}},{key:"componentsForArea",value:function(e){return this.components.filter((function(t){return t.area===e}))}},{key:"urlForComponent",value:function(e){if(e.offlineOnly&&!this.isDesktop)return null;if(e.offlineOnly||this.isDesktop&&e.local_url)return e.local_url&&e.local_url.replace("sn://",this.desktopManager.getExtServerHost());var t=e.hosted_url||e.legacy_url;if(this.isMobile){var n="ios"==this.platform?"localhost":"10.0.2.2";t=t.replace("localhost",n).replace("sn.local",n)}return t}},{key:"componentForUrl",value:function(e){return this.components.filter((function(t){return t.hosted_url===e||t.legacy_url===e}))[0]}},{key:"componentForSessionKey",value:function(e){var t=O()(this.components,{sessionKey:e});if(!t){var n=!0,r=!1,i=void 0;try{for(var a,o=this.handlers[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(s.componentForSessionKeyHandler&&(t=s.componentForSessionKeyHandler(e)))break}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}return t}},{key:"handleMessage",value:function(e,t){var n=this;if(!e)return console.log("Component not defined for message, returning",t),void this.alertManager.alert({text:"An extension is trying to communicate with Standard Notes, but there is an error establishing a bridge. Please restart the app and try again."});if(e.readonly&&["save-items","associate-item","deassociate-item","create-item","create-items","delete-items","set-component-data"].includes(t.action))this.alertManager.alert({text:"The extension ".concat(e.name," is trying to save, but it is in a locked state and cannot accept changes.")});else{if("stream-items"===t.action)this.handleStreamItemsMessage(e,t);else if("stream-context-item"===t.action)this.handleStreamContextItemMessage(e,t);else if("set-component-data"===t.action)this.handleSetComponentDataMessage(e,t);else if("delete-items"===t.action)this.handleDeleteItemsMessage(e,t);else if("create-items"===t.action||"create-item"===t.action)this.handleCreateItemsMessage(e,t);else if("save-items"===t.action)this.handleSaveItemsMessage(e,t);else if("toggle-activate-component"===t.action){var r=this.modelManager.findItem(t.data.uuid);this.handleToggleComponentMessage(e,r,t)}else"request-permissions"===t.action?this.handleRequestPermissionsMessage(e,t):"install-local-component"===t.action?this.handleInstallLocalComponentMessage(e,t):"duplicate-item"===t.action&&this.handleDuplicateItemMessage(e,t);var i=!0,a=!1,o=void 0;try{for(var s,c=function(){var r=s.value;r.actionHandler&&(r.areas.includes(e.area)||r.areas.includes("*"))&&n.$timeout((function(){r.actionHandler(e,t.action,t.data)}))},u=this.handlers[Symbol.iterator]();!(i=(s=u.next()).done);i=!0)c()}catch(e){a=!0,o=e}finally{try{i||null==u.return||u.return()}finally{if(a)throw o}}}}},{key:"removePrivatePropertiesFromResponseItems",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("incoming"==n.type){var r=["updated_at"],i=!0,a=!1,o=void 0;try{for(var s,c=e[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var u=s.value;if("function"!=typeof u.setDirty){var l=!0,f=!1,p=void 0;try{for(var d,h=r[Symbol.iterator]();!(l=(d=h.next()).done);l=!0){var v=d.value;delete u[v]}}catch(e){f=!0,p=e}finally{try{l||null==h.return||h.return()}finally{if(f)throw p}}}else console.error("Attempting to pass object. Use JSON.")}}catch(e){a=!0,o=e}finally{try{i||null==c.return||c.return()}finally{if(a)throw o}}}if(!(t&&this.nativeExtManager&&this.nativeExtManager.isSystemExtension(t))){var m=["autoupdateDisabled","permissions","active"];n&&n.includeUrls&&(m=m.concat(["url","hosted_url","local_url"]));var y=!0,g=!1,b=void 0;try{for(var k,w=e[Symbol.iterator]();!(y=(k=w.next()).done);y=!0){var x=k.value;if("function"!=typeof x.setDirty){var S=!0,$=!1,_=void 0;try{for(var M,C=m[Symbol.iterator]();!(S=(M=C.next()).done);S=!0){var A=M.value;delete x.content[A]}}catch(e){$=!0,_=e}finally{try{S||null==C.return||C.return()}finally{if($)throw _}}}else console.error("Attempting to pass object. Use JSON.")}}catch(e){g=!0,b=e}finally{try{y||null==w.return||w.return()}finally{if(g)throw b}}}}},{key:"handleStreamItemsMessage",value:function(e,t){var n=this,r=[{name:"stream-items",content_types:t.data.content_types.sort()}];this.runWithPermissions(e,r,(function(){O()(n.streamObservers,{identifier:e.uuid})||n.streamObservers.push({identifier:e.uuid,component:e,originalMessage:t,contentTypes:t.data.content_types});var r=[],i=!0,a=!1,o=void 0;try{for(var s,c=t.data.content_types[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var u=s.value;r=r.concat(n.modelManager.validItemsForContentType(u))}}catch(e){a=!0,o=e}finally{try{i||null==c.return||c.return()}finally{if(a)throw o}}n.sendItemsInReply(e,r,t)}))}},{key:"handleStreamContextItemMessage",value:function(e,t){var n=this;this.runWithPermissions(e,[{name:"stream-context-item"}],(function(){O()(n.contextStreamObservers,{identifier:e.uuid})||n.contextStreamObservers.push({identifier:e.uuid,component:e,originalMessage:t});var r=!0,i=!1,a=void 0;try{for(var o,s=n.handlersForArea(e.area)[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var c=o.value;if(c.contextRequestHandler){var u=c.contextRequestHandler(e);u&&n.sendContextItemInReply(e,u,t)}}}catch(e){i=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}}))}},{key:"isItemIdWithinComponentContextJurisdiction",value:function(e,t){return this.itemIdsInContextJurisdictionForComponent(t).includes(e)}},{key:"itemIdsInContextJurisdictionForComponent",value:function(e){var t=[],n=!0,r=!1,i=void 0;try{for(var a,o=this.handlersForArea(e.area)[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(s.contextRequestHandler){var c=s.contextRequestHandler(e);c&&t.push(c.uuid)}}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return t}},{key:"handlersForArea",value:function(e){return this.handlers.filter((function(t){return t.areas.includes(e)}))}},{key:"handleSaveItemsMessage",value:function(t,n){var r,i,a,o,s,c,u,l,f,p,d,h=this;return regeneratorRuntime.async((function(v){for(;;)switch(v.prev=v.next){case 0:r=n.data.items,i=[],a=this.itemIdsInContextJurisdictionForComponent(t),o=r.slice(),s=!0,c=!1,u=void 0,v.prev=7,l=r.slice()[Symbol.iterator]();case 9:if(s=(f=l.next()).done){v.next=18;break}if(p=f.value,!a.includes(p.uuid)){v.next=15;break}return i.push({name:"stream-context-item"}),Pe()(o,p),v.abrupt("break",18);case 15:s=!0,v.next=9;break;case 18:v.next=24;break;case 20:v.prev=20,v.t0=v.catch(7),c=!0,u=v.t0;case 24:v.prev=24,v.prev=25,s||null==l.return||l.return();case 27:if(v.prev=27,!c){v.next=30;break}throw u;case 30:return v.finish(27);case 31:return v.finish(24);case 32:o.length>0&&(d=ct()(o.map((function(e){return e.content_type}))).sort(),i.push({name:"stream-items",content_types:d})),this.runWithPermissions(t,i,(function(){var i,a,o,s,c,u,l,f,p,d,v,m,y,g,b,k,w,x,S;return regeneratorRuntime.async((function($){for(;;)switch($.prev=$.next){case 0:for(h.removePrivatePropertiesFromResponseItems(r,t,{includeUrls:!0,type:"incoming"}),i=r.map((function(e){return e.uuid})),a=h.modelManager.findItems(i),o=0,s=!0,c=!1,u=void 0,$.prev=7,l=a[Symbol.iterator]();!(s=(f=l.next()).done);s=!0)(p=f.value).locked&&(E()(r,{uuid:p.uuid}),o++);$.next=15;break;case 11:$.prev=11,$.t0=$.catch(7),c=!0,u=$.t0;case 15:$.prev=15,$.prev=16,s||null==l.return||l.return();case 18:if($.prev=18,!c){$.next=21;break}throw u;case 21:return $.finish(18);case 22:return $.finish(15);case 23:return o>0&&(d=1==o?"item":"items",v=1==o?"is":"are",h.alertManager.alert({title:"Items Locked",text:"".concat(o," ").concat(d," you are attempting to save ").concat(v," locked and cannot be edited.")})),$.next=26,regeneratorRuntime.awrap(h.modelManager.mapResponseItemsToLocalModels(r,bt.MappingSourceComponentRetrieved,t.uuid));case 26:m=$.sent,y=!0,g=!1,b=void 0,$.prev=30,k=r[Symbol.iterator]();case 32:if(y=(w=k.next()).done){$.next=42;break}if(x=w.value,S=O()(m,{uuid:x.uuid})){$.next=38;break}return h.alertManager.alert({text:"The extension ".concat(t.name," is trying to save an item with type ").concat(x.content_type,", but that item does not exist. Please restart this extension and try again.")}),$.abrupt("continue",39);case 38:S.locked||(x.clientData&&S.setDomainDataItem(t.getClientDataKey(),x.clientData,e.ClientDataDomain),h.modelManager.setItemDirty(S,!0,!0,bt.MappingSourceComponentRetrieved,t.uuid));case 39:y=!0,$.next=32;break;case 42:$.next=48;break;case 44:$.prev=44,$.t1=$.catch(30),g=!0,b=$.t1;case 48:$.prev=48,$.prev=49,y||null==k.return||k.return();case 51:if($.prev=51,!g){$.next=54;break}throw b;case 54:return $.finish(51);case 55:return $.finish(48);case 56:h.syncManager.sync().then((function(e){var r=Object.assign({},n);r.action=e&&e.error?"save-error":"save-success",h.replyToMessage(t,n,{error:e&&e.error}),h.handleMessage(t,r)}));case 57:case"end":return $.stop()}}),null,null,[[7,11,15,23],[16,,18,22],[30,44,48,56],[49,,51,55]])}));case 34:case"end":return v.stop()}}),null,this,[[7,20,24,32],[25,,27,31]])}},{key:"handleDuplicateItemMessage",value:function(e,t){var n=this,r=t.data.item,i=this.modelManager.findItem(r.uuid),a=[{name:"stream-items",content_types:[i.content_type]}];this.runWithPermissions(e,a,(function(){var r=n.modelManager.duplicateItemAndAdd(i);n.syncManager.sync(),n.replyToMessage(e,t,{item:n.jsonForItem(r,e)})}))}},{key:"handleCreateItemsMessage",value:function(t,n){var r=this,i=n.data.item?[n.data.item]:n.data.items,a=[{name:"stream-items",content_types:ct()(i.map((function(e){return e.content_type})))}];this.runWithPermissions(t,a,(function(){r.removePrivatePropertiesFromResponseItems(i,t,{type:"incoming"});var a=[],o=!0,s=!1,c=void 0;try{for(var u,l=i[Symbol.iterator]();!(o=(u=l.next()).done);o=!0){var f=u.value,p=r.modelManager.createItem(f);f.clientData&&p.setDomainDataItem(t.getClientDataKey(),f.clientData,e.ClientDataDomain),r.modelManager.addItem(p),r.modelManager.resolveReferencesForItem(p,!0),r.modelManager.setItemDirty(p,!0),a.push(p)}}catch(e){s=!0,c=e}finally{try{o||null==l.return||l.return()}finally{if(s)throw c}}r.syncManager.sync();var d="create-item"==n.action?{item:r.jsonForItem(a[0],t)}:{items:a.map((function(e){return r.jsonForItem(e,t)}))};r.replyToMessage(t,n,d)}))}},{key:"handleDeleteItemsMessage",value:function(e,t){var n=this,r=[{name:"stream-items",content_types:ct()(t.data.items.map((function(e){return e.content_type}))).sort()}];this.runWithPermissions(e,r,(function(){var r,i,a,o,s,c,u,l,f,p,d;return regeneratorRuntime.async((function(h){for(;;)switch(h.prev=h.next){case 0:return r=t.data.items,i=1==r.length?"item":"items",a=null,o=!0,h.next=6,regeneratorRuntime.awrap(n.alertManager.confirm({text:"Are you sure you want to delete ".concat(r.length," ").concat(i,"?")}).catch((function(){o=!1})));case 6:if(!o){h.next=42;break}s=!0,c=!1,u=void 0,h.prev=10,l=r[Symbol.iterator]();case 12:if(s=(f=l.next()).done){h.next=24;break}if(p=f.value,d=n.modelManager.findItem(p.uuid)){h.next=18;break}return n.alertManager.alert({text:"The item you are trying to delete cannot be found."}),h.abrupt("continue",21);case 18:["SN|Component","SN|Theme"].includes(d.content_type)&&n.deactivateComponent(d,!0),n.modelManager.setItemToBeDeleted(d),n.modelManager.notifySyncObserversOfModels([d],bt.MappingSourceRemoteSaved);case 21:s=!0,h.next=12;break;case 24:h.next=30;break;case 26:h.prev=26,h.t0=h.catch(10),c=!0,u=h.t0;case 30:h.prev=30,h.prev=31,s||null==l.return||l.return();case 33:if(h.prev=33,!c){h.next=36;break}throw u;case 36:return h.finish(33);case 37:return h.finish(30);case 38:n.syncManager.sync(),a={deleted:!0},h.next=43;break;case 42:a={deleted:!1};case 43:n.replyToMessage(e,t,a);case 44:case"end":return h.stop()}}),null,null,[[10,26,30,38],[31,,33,37]])}))}},{key:"handleRequestPermissionsMessage",value:function(e,t){var n=this;this.runWithPermissions(e,t.data.permissions,(function(){n.replyToMessage(e,t,{approved:!0})}))}},{key:"handleSetComponentDataMessage",value:function(e,t){var n=this;this.runWithPermissions(e,[],(function(){e.componentData=t.data.componentData,n.modelManager.setItemDirty(e,!0),n.syncManager.sync()}))}},{key:"handleToggleComponentMessage",value:function(e,t,n){this.toggleComponent(t)}},{key:"toggleComponent",value:function(e){var t=this;if("modal"==e.area)this.openModalComponent(e);else if(e.active)this.deactivateComponent(e);else if("SN|Theme"==e.content_type){var n=this.getActiveThemes();this.activateComponent(e),e.isLayerable()||setTimeout((function(){var e=!0,r=!1,i=void 0;try{for(var a,o=n[Symbol.iterator]();!(e=(a=o.next()).done);e=!0){var s=a.value;s&&!s.isLayerable()&&t.deactivateComponent(s)}}catch(e){r=!0,i=e}finally{try{e||null==o.return||o.return()}finally{if(r)throw i}}}),10)}else this.activateComponent(e)}},{key:"handleInstallLocalComponentMessage",value:function(e,t){if(!this.nativeExtManager||this.nativeExtManager.isSystemExtension(e)){var n=this.modelManager.findItem(t.data.uuid);this.desktopManager.installComponent(n)}}},{key:"runWithPermissions",value:function(e,t,n){e.permissions||(e.permissions=[]),t=JSON.parse(JSON.stringify(t));var r=e.permissions,i=!0,a=!1,o=void 0;try{for(var s,c=function(){var e=s.value,n=r.find((function(t){return t.name==e.name}));if(!n)return"continue";var i=e.content_types;if(!i)return Pe()(t,e),"continue";var a=!0,o=!1,c=void 0;try{for(var u,l=n.content_types[Symbol.iterator]();!(a=(u=l.next()).done);a=!0){var f=u.value;Pe()(i,f)}}catch(e){o=!0,c=e}finally{try{a||null==l.return||l.return()}finally{if(o)throw c}}0==i.length&&Pe()(t,e)},u=t.slice()[Symbol.iterator]();!(i=(s=u.next()).done);i=!0)c()}catch(e){a=!0,o=e}finally{try{i||null==u.return||u.return()}finally{if(a)throw o}}t.length>0?this.promptForPermissions(e,t,(function(e){e&&n()})):n()}},{key:"promptForPermissions",value:function(e,t,n){var r=this,i={};i.component=e,i.permissions=t,i.permissionsString=this.permissionsStringForPermissions(t,e),i.actionBlock=n,i.callback=function(n){if(n){var a=!0,o=!1,s=void 0;try{for(var c,u=function(){var t=c.value,n=e.permissions.find((function(e){return e.name==t.name}));if(n){var r=n.content_types||[];n.content_types=ct()(r.concat(t.content_types))}else e.permissions.push(t)},l=t[Symbol.iterator]();!(a=(c=l.next()).done);a=!0)u()}catch(e){o=!0,s=e}finally{try{a||null==l.return||l.return()}finally{if(o)throw s}}r.modelManager.setItemDirty(e,!0),r.syncManager.sync()}r.permissionDialogs=r.permissionDialogs.filter((function(r){return r==i?(r.actionBlock&&r.actionBlock(n),!1):!!(r.component!=e||r.permissions!=t&&(a=t,r.permissions.some((function(e){return!a.find((function(t){return JSON.stringify(t)===JSON.stringify(e)}))}))))||(n&&r.actionBlock&&r.actionBlock(n),!1);var a})),r.permissionDialogs.length>0&&r.presentPermissionsDialog(r.permissionDialogs[0])};var a=O()(this.permissionDialogs,{component:e});this.permissionDialogs.push(i),a?console.log("Existing dialog, not presenting."):this.presentPermissionsDialog(i)}},{key:"presentPermissionsDialog",value:function(e){console.error("Must override")}},{key:"openModalComponent",value:function(e){console.error("Must override")}},{key:"registerHandler",value:function(e){this.handlers.push(e)}},{key:"deregisterHandler",value:function(e){var t=O()(this.handlers,{identifier:e});t?this.handlers.splice(this.handlers.indexOf(t),1):console.log("Attempting to deregister non-existing handler")}},{key:"registerComponentWindow",value:function(e,t){return regeneratorRuntime.async((function(n){for(;;)switch(n.prev=n.next){case 0:return e.window===t&&this.loggingEnabled&&console.log("Web|componentManager","attempting to re-register same component window."),this.loggingEnabled&&console.log("Web|componentManager|registerComponentWindow",e),e.window=t,n.next=5,regeneratorRuntime.awrap(C.crypto.generateUUID());case 5:e.sessionKey=n.sent,this.sendMessageToComponent(e,{action:"component-registered",sessionKey:e.sessionKey,componentData:e.componentData,data:{uuid:e.uuid,environment:this.environment,platform:this.platform,activeThemeUrls:this.urlsForActiveThemes()}}),this.postActiveThemesToComponent(e),this.desktopManager&&this.desktopManager.notifyComponentActivation(e);case 9:case"end":return n.stop()}}),null,this)}},{key:"activateComponent",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=1!=e.active;e.active=!0;var i=!0,a=!1,o=void 0;try{for(var s,c=function(){var n=s.value;(n.areas.includes(e.area)||n.areas.includes("*"))&&t.$uiRunner((function(){n.activationHandler&&n.activationHandler(e)}))},u=this.handlers[Symbol.iterator]();!(i=(s=u.next()).done);i=!0)c()}catch(e){a=!0,o=e}finally{try{i||null==u.return||u.return()}finally{if(a)throw o}}r&&!n&&(this.modelManager.setItemDirty(e,!0),this.syncManager.sync()),this.activeComponents.includes(e)||this.activeComponents.push(e),"themes"==e.area&&this.postActiveThemesToAllComponents()}},{key:"deactivateComponent",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=0!=e.active;e.active=!1,e.sessionKey=null;var i=!0,a=!1,o=void 0;try{for(var s,c=function(){var n=s.value;(n.areas.includes(e.area)||n.areas.includes("*"))&&t.$uiRunner((function(){n.activationHandler&&n.activationHandler(e)}))},u=this.handlers[Symbol.iterator]();!(i=(s=u.next()).done);i=!0)c()}catch(e){a=!0,o=e}finally{try{i||null==u.return||u.return()}finally{if(a)throw o}}r&&!n&&(this.modelManager.setItemDirty(e,!0),this.syncManager.sync()),Pe()(this.activeComponents,e),this.streamObservers=this.streamObservers.filter((function(t){return t.component!==e})),this.contextStreamObservers=this.contextStreamObservers.filter((function(t){return t.component!==e})),"themes"==e.area&&this.postActiveThemesToAllComponents()}},{key:"reloadComponent",value:function(e){var t,n,r,i,a,o,s=this;return regeneratorRuntime.async((function(c){for(;;)switch(c.prev=c.next){case 0:for(e.active=!1,t=!0,n=!1,r=void 0,c.prev=4,i=function(){var t=o.value;(t.areas.includes(e.area)||t.areas.includes("*"))&&s.$uiRunner((function(){t.activationHandler&&t.activationHandler(e)}))},a=this.handlers[Symbol.iterator]();!(t=(o=a.next()).done);t=!0)i();c.next=13;break;case 9:c.prev=9,c.t0=c.catch(4),n=!0,r=c.t0;case 13:c.prev=13,c.prev=14,t||null==a.return||a.return();case 16:if(c.prev=16,!n){c.next=19;break}throw r;case 19:return c.finish(16);case 20:return c.finish(13);case 21:return this.streamObservers=this.streamObservers.filter((function(t){return t.component!==e})),this.contextStreamObservers=this.contextStreamObservers.filter((function(t){return t.component!==e})),"themes"==e.area&&this.postActiveThemesToAllComponents(),c.abrupt("return",new Promise((function(t,n){s.$timeout((function(){e.active=!0;var n=!0,r=!1,i=void 0;try{for(var a,o=s.handlers[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var c=a.value;(c.areas.includes(e.area)||c.areas.includes("*"))&&s.$uiRunner((function(){c.activationHandler&&c.activationHandler(e),t()}))}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}s.activeComponents.includes(e)||s.activeComponents.push(e),"themes"==e.area&&s.postActiveThemesToAllComponents(),t()}))})));case 25:case"end":return c.stop()}}),null,this,[[4,9,13,21],[14,,16,20]])}},{key:"deleteComponent",value:function(e){this.modelManager.setItemToBeDeleted(e),this.syncManager.sync()}},{key:"isComponentActive",value:function(e){return e.active}},{key:"iframeForComponent",value:function(e){for(var t=0,n=Array.from(document.getElementsByTagName("iframe"));t0?e==t-1?2==t?" and ":", and ":", ":""};return e.forEach((function(e,o){if("stream-items"===e.name){for(var s=e.content_types.map((function(e){var t=n.modelManager.humanReadableDisplayForContentType(e);return t?t+"s":"items of type "+e})),c="",u=0;u=2&&o0&&void 0!==arguments[0]?arguments[0]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.entries||(this.entries=[]),t.entries){var n=!0,r=!1,i=void 0;try{for(var a,o=t.entries[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value,c=this.createEntryForItem(s.item);c.setPreviousEntry(this.getLastEntry()),this.entries.push(c)}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}}var t,n;return t=e,(n=[{key:"createEntryForItem",value:function(t){var n=e.HistoryEntryClassMapping&&e.HistoryEntryClassMapping[t.content_type];return n||(n=St),new n(t)}},{key:"getLastEntry",value:function(){return this.entries[this.entries.length-1]}},{key:"addHistoryEntryForItem",value:function(e){var t=this.createEntryForItem(e),n=this.getLastEntry();if(t.setPreviousEntry(n),!t.isSameAsEntry(n))return this.entries.push(t),t}},{key:"clear",value:function(){this.entries.length=0}},{key:"optimize",value:function(){var t=this,n=[],r=function(t){return t.deltaSize()>e.LargeEntryDeltaThreshold},i=function(e,i,a){if(a?n.push(e):-1!==(i=n.indexOf(e))&&n.splice(i,1),a&&r(e)&&-1==e.operationVector()){var o=t.entries[i-1];o&&n.push(o)}};this.entries.forEach((function(e,n){if(0==n||n==t.entries.length-1)i(e,n,!0);else{var a=r(e);i(e,n,a)}})),this.entries=this.entries.filter((function(e,t){return-1!==n.indexOf(e)}))}}])&&$t(t.prototype,n),e}();function Mt(e){return(Mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ct(e,t){for(var n=0;nt.LargeItemEntryAmountThreshold&&n.optimize()}}])&&Ct(n.prototype,r),t}(B);function Et(e,t){for(var n=0;n5&&void 0!==s[5]&&s[5],c.abrupt("return",new Promise((function(s,c){var u;return regeneratorRuntime.async((function(l){for(;;)switch(l.prev=l.next){case 0:if((u=new XMLHttpRequest).onreadystatechange=function(){if(4==u.readyState){var e=u.responseText;if(e)try{e=JSON.parse(e)}catch(e){}u.status>=200&&u.status<=299?o.$timeout((function(){r(e),s(e)})):(console.error("Request error:",e),o.$timeout((function(){i(e,u.status),c(e)})))}},"get"==e&&Object.keys(n).length>0&&(t=o.urlForUrlAndParams(t,n)),u.open(e,t,!0),u.setRequestHeader("Content-type","application/json"),!a){l.next=8;break}return l.next=8,regeneratorRuntime.awrap(o.setAuthHeadersForRequest(u));case 8:"post"==e||"patch"==e?u.send(JSON.stringify(n)):u.send();case 9:case"end":return l.stop()}}))})));case 2:case"end":return c.stop()}}))}},{key:"urlForUrlAndParams",value:function(e,t){var n=Object.keys(t).map((function(e){return e+"="+encodeURIComponent(t[e])})).join("&");return e.includes("?")?e+"&"+n:e+"?"+n}}]),e}();function Pt(e,t){for(var n=0;n=this.MaxDiscordanceBeforeOutOfSync&&(this.outOfSync||(this.outOfSync=!0,this.notifyEvent("enter-out-of-sync"))),n.abrupt("return",!1);case 13:return this.outOfSync&&(this.outOfSync=!1,this.notifyEvent("exit-out-of-sync")),this.syncDiscordance=0,n.abrupt("return",!0);case 16:case"end":return n.stop()}}),null,this)}},{key:"isOutOfSync",value:function(){return this.outOfSync}},{key:"getServerURL",value:function(){return regeneratorRuntime.async((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,regeneratorRuntime.awrap(this.storageManager.getItem("server"));case 2:if(e.t0=e.sent,e.t0){e.next=5;break}e.t0=window._default_sf_server;case 5:return e.abrupt("return",e.t0);case 6:case"end":return e.stop()}}),null,this)}},{key:"getSyncURL",value:function(){return regeneratorRuntime.async((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,regeneratorRuntime.awrap(this.getServerURL());case 2:return e.t0=e.sent,e.abrupt("return",e.t0+"/items/sync");case 4:case"end":return e.stop()}}),null,this)}},{key:"registerSyncStatusObserver",value:function(e){var t={key:new Date,callback:e};return this.syncStatusObservers.push(t),t}},{key:"removeSyncStatusObserver",value:function(e){Pe()(this.syncStatusObservers,e)}},{key:"syncStatusDidChange",value:function(){var e=this;this.syncStatusObservers.forEach((function(t){t.callback(e.syncStatus)}))}},{key:"addEventHandler",value:function(e){return this.eventHandlers.push(e),e}},{key:"removeEventHandler",value:function(e){Pe()(this.eventHandlers,e)}},{key:"notifyEvent",value:function(e,t){var n=!0,r=!1,i=void 0;try{for(var a,o=this.eventHandlers[Symbol.iterator]();!(n=(a=o.next()).done);n=!0)(0,a.value)(e,t||{})}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}},{key:"setKeyRequestHandler",value:function(e){this.keyRequestHandler=e}},{key:"getActiveKeyInfo",value:function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this.keyRequestHandler(e));case 1:case"end":return t.stop()}}),null,this)}},{key:"initialDataLoaded",value:function(){return!0===this._initialDataLoaded}},{key:"_sortLocalItems",value:function(e){var t=this;return e.sort((function(e,n){var r=new Date(n.updated_at)-new Date(e.updated_at),i=t.contentTypeLoadPriority,a=0,o=0;return i&&(a=i.indexOf(e.content_type),o=i.indexOf(n.content_type),-1==a&&(a=i.length),-1==o&&(o=i.length)),a==o?r:a0&&void 0!==s[0]?s[0]:{},n=t.incrementalCallback,r=t.batchSize,!(i=t.options)||!i.simulateHighLatency){c.next=5;break}return a=i.simulatedLatency||1e3,c.next=5,regeneratorRuntime.awrap(this._awaitSleep(a));case 5:if(!this.loadLocalDataPromise){c.next=7;break}return c.abrupt("return",this.loadLocalDataPromise);case 7:return r||(r=100),this.loadLocalDataPromise=this.storageManager.getAllModels().then((function(t){var i=(t=(t=o._sortLocalItems(t)).filter((function(e){var t=o.modelManager.findItem(e.uuid);return!t||new Date(e.dirtiedDate)>t.dirtiedDate}))).length,a=0,s=[];return function c(){var u,l;return regeneratorRuntime.async((function(f){for(;;)switch(f.prev=f.next){case 0:return u=t.slice(a,a+r),f.next=3,regeneratorRuntime.awrap(o.handleItemsResponse(u,null,bt.MappingSourceLocalRetrieved,e.KeyRequestLoadLocal));case 3:if(l=f.sent,s.push(l),!((a+=u.length)0)){m.next=23;break}return m.next=23,regeneratorRuntime.awrap(Promise.all(s.map((function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.storageManager.deleteModel(e));case 1:case"end":return t.stop()}}))}))));case 23:return m.next=25,regeneratorRuntime.awrap(r.getActiveKeyInfo(e.KeyRequestSaveLocal));case 25:if(h=m.sent,!(o.length>0)){m.next=33;break}return m.next=29,regeneratorRuntime.awrap(Promise.all(o.map((function(e){var t;return regeneratorRuntime.async((function(r){for(;;)switch(r.prev=r.next){case 0:return t=new G(e,h.keys,h.auth_params),r.next=3,regeneratorRuntime.awrap(t.paramsForLocalStorage());case 3:return t=r.sent,n&&delete t.dirty,r.abrupt("return",t);case 6:case"end":return r.stop()}}))}))).catch((function(e){return a(e)})));case 29:return v=m.sent,m.next=32,regeneratorRuntime.awrap(r.storageManager.saveModels(v).catch((function(e){console.error("Error writing items",e),r.syncStatus.localError=e,r.syncStatusDidChange(),a()})));case 32:r.syncStatus.localError&&(r.syncStatus.localError=null,r.syncStatusDidChange());case 33:i();case 34:case"end":return m.stop()}}),null,null,[[4,8,12,20],[13,,15,19]])})));case 3:case"end":return i.stop()}}))}},{key:"syncOffline",value:function(e){var t,n,r,i,a,o=this;return regeneratorRuntime.async((function(s){for(;;)switch(s.prev=s.next){case 0:for(t=!0,n=!1,r=void 0,s.prev=3,i=e[Symbol.iterator]();!(t=(a=i.next()).done);t=!0)a.value.updated_at=new Date;s.next=11;break;case 7:s.prev=7,s.t0=s.catch(3),n=!0,r=s.t0;case 11:s.prev=11,s.prev=12,t||null==i.return||i.return();case 14:if(s.prev=14,!n){s.next=17;break}throw r;case 17:return s.finish(14);case 18:return s.finish(11);case 19:return s.abrupt("return",this.writeItemsToLocalStorage(e,!0).then((function(t){var n=!0,r=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done);n=!0){var c=a.value;c.deleted&&o.modelManager.removeItemLocally(c)}}catch(e){r=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(r)throw i}}return o.modelManager.clearDirtyItems(e),o.modelManager.didSyncModelsOffline(e),o.notifyEvent("sync:completed",{savedItems:e}),{saved_items:e}})));case 20:case"end":return s.stop()}}),null,this,[[3,7,11,19],[12,,14,18]])}},{key:"markAllItemsDirtyAndSaveOffline",value:function(e){var t,n,r,i,a,o,s,c,u,l,f,p,d;return regeneratorRuntime.async((function(h){for(;;)switch(h.prev=h.next){case 0:if(!e){h.next=28;break}t=this.modelManager.allNondummyItems.filter((function(e){return!e.errorDecrypting})).slice(),n=!0,r=!1,i=void 0,h.prev=5,a=t[Symbol.iterator]();case 7:if(n=(o=a.next()).done){h.next=14;break}return s=o.value,h.next=11,regeneratorRuntime.awrap(this.modelManager.alternateUUIDForItem(s));case 11:n=!0,h.next=7;break;case 14:h.next=20;break;case 16:h.prev=16,h.t0=h.catch(5),r=!0,i=h.t0;case 20:h.prev=20,h.prev=21,n||null==a.return||a.return();case 23:if(h.prev=23,!r){h.next=26;break}throw i;case 26:return h.finish(23);case 27:return h.finish(20);case 28:for(c=this.modelManager.allNondummyItems,u=!0,l=!1,f=void 0,h.prev=32,p=c[Symbol.iterator]();!(u=(d=p.next()).done);u=!0)d.value.setDirty(!0);h.next=40;break;case 36:h.prev=36,h.t1=h.catch(32),l=!0,f=h.t1;case 40:h.prev=40,h.prev=41,u||null==p.return||p.return();case 43:if(h.prev=43,!l){h.next=46;break}throw f;case 46:return h.finish(43);case 47:return h.finish(40);case 48:return h.abrupt("return",this.writeItemsToLocalStorage(c,!1));case 49:case"end":return h.stop()}}),null,this,[[5,16,20,28],[21,,23,27],[32,36,40,48],[41,,43,47]])}},{key:"setSyncToken",value:function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return this._syncToken=e,t.next=3,regeneratorRuntime.awrap(this.storageManager.setItem("syncToken",e));case 3:case"end":return t.stop()}}),null,this)}},{key:"getSyncToken",value:function(){return regeneratorRuntime.async((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._syncToken){e.next=4;break}return e.next=3,regeneratorRuntime.awrap(this.storageManager.getItem("syncToken"));case 3:this._syncToken=e.sent;case 4:return e.abrupt("return",this._syncToken);case 5:case"end":return e.stop()}}),null,this)}},{key:"setCursorToken",value:function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:if(this._cursorToken=e,!e){t.next=6;break}return t.next=4,regeneratorRuntime.awrap(this.storageManager.setItem("cursorToken",e));case 4:t.next=8;break;case 6:return t.next=8,regeneratorRuntime.awrap(this.storageManager.removeItem("cursorToken"));case 8:case"end":return t.stop()}}),null,this)}},{key:"getCursorToken",value:function(){return regeneratorRuntime.async((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._cursorToken){e.next=4;break}return e.next=3,regeneratorRuntime.awrap(this.storageManager.getItem("cursorToken"));case 3:this._cursorToken=e.sent;case 4:return e.abrupt("return",this._cursorToken);case 5:case"end":return e.stop()}}),null,this)}},{key:"clearQueuedCallbacks",value:function(){this._queuedCallbacks=[]}},{key:"callQueuedCallbacks",value:function(e){var t=this.queuedCallbacks;if(t.length){var n=!0,r=!1,i=void 0;try{for(var a,o=t[Symbol.iterator]();!(n=(a=o.next()).done);n=!0)(0,a.value)(e)}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}this.clearQueuedCallbacks()}}},{key:"beginCheckingIfSyncIsTakingTooLong",value:function(){this.syncStatus.checker&&this.stopCheckingIfSyncIsTakingTooLong(),this.syncStatus.checker=this.$interval(function(){(new Date-this.syncStatus.syncStart)/1e3>5&&(this.notifyEvent("sync:taking-too-long"),this.stopCheckingIfSyncIsTakingTooLong())}.bind(this),500)}},{key:"stopCheckingIfSyncIsTakingTooLong",value:function(){this.$interval.hasOwnProperty("cancel")?this.$interval.cancel(this.syncStatus.checker):clearInterval(this.syncStatus.checker),this.syncStatus.checker=null}},{key:"lockSyncing",value:function(){this.syncLocked=!0}},{key:"unlockSyncing",value:function(){this.syncLocked=!1}},{key:"sync",value:function(){var t,n=this,r=arguments;return regeneratorRuntime.async((function(i){for(;;)switch(i.prev=i.next){case 0:if(t=r.length>0&&void 0!==r[0]?r[0]:{},!this.syncLocked){i.next=4;break}return console.log("Sync Locked, Returning;"),i.abrupt("return");case 4:return i.abrupt("return",new Promise((function(r,i){var a,o,s,c,u,l,f,p,d,h,v,m,y,g;return regeneratorRuntime.async((function(i){for(;;)switch(i.prev=i.next){case 0:return t||(t={}),a=n.modelManager.getDirtyItems(),o=a.filter((function(e){return!n.lastDirtyItemsSave||e.dirtiedDate>n.lastDirtyItemsSave})),i.next=5,regeneratorRuntime.awrap(n.getActiveKeyInfo(e.KeyRequestLoadSaveAccount));case 5:if(s=i.sent,c=n.syncStatus.syncOpInProgress,u=n.initialDataLoaded(),!c&&u){i.next=16;break}return n.performSyncAgainOnCompletion=!0,n.lastDirtyItemsSave=new Date,i.next=13,regeneratorRuntime.awrap(n.writeItemsToLocalStorage(o,!1));case 13:return c&&(n.queuedCallbacks.push(r),n.loggingEnabled&&console.warn("Attempting to sync while existing sync is in progress.")),u||(n.loggingEnabled&&console.warn("(1) Attempting to perform online sync before local data has loaded"),r()),i.abrupt("return");case 16:if(n.syncStatus.syncOpInProgress=!0,!s.offline){i.next=19;break}return i.abrupt("return",n.syncOffline(a).then((function(e){n.syncStatus.syncOpInProgress=!1,r(e)})).catch((function(e){n.notifyEvent("sync-exception",e)})));case 19:if(n.initialDataLoaded()){i.next=22;break}return console.error("Attempting to perform online sync before local data has loaded"),i.abrupt("return");case 22:return n.loggingEnabled&&console.log("Syncing online user."),l=n.syncStatus.needsMoreSync,n.syncStatus.syncStart=new Date,n.beginCheckingIfSyncIsTakingTooLong(),f=n.PerSyncItemUploadLimit,(p=a.slice(0,f)).lengthn.syncStatus.total&&(n.syncStatus.total=n.syncStatus.current),n.syncStatusDidChange(),i.next=34,regeneratorRuntime.awrap(n.writeItemsToLocalStorage(o,!1));case 34:return n.lastDirtyItemsSave=new Date,t.onPreSyncSave&&t.onPreSyncSave(),n.allRetreivedItems||(n.allRetreivedItems=[]),n.allSavedItems||(n.allSavedItems=[]),(d={}).limit=n.ServerItemDownloadLimit,t.performIntegrityCheck&&(d.compute_integrity=!0),i.prev=41,i.next=44,regeneratorRuntime.awrap(Promise.all(p.map((function(e){var n=new G(e,s.keys,s.auth_params);return n.additionalFields=t.additionalFields,n.paramsForSync()}))).then((function(e){d.items=e})));case 44:i.next=49;break;case 46:i.prev=46,i.t0=i.catch(41),n.notifyEvent("sync-exception",i.t0);case 49:for(h=!0,v=!1,m=void 0,i.prev=52,y=p[Symbol.iterator]();!(h=(g=y.next()).done);h=!0)g.value.dirtyCount=0;i.next=60;break;case 56:i.prev=56,i.t1=i.catch(52),v=!0,m=i.t1;case 60:i.prev=60,i.prev=61,h||null==y.return||y.return();case 63:if(i.prev=63,!v){i.next=66;break}throw m;case 66:return i.finish(63);case 67:return i.finish(60);case 68:return i.next=70,regeneratorRuntime.awrap(n.getSyncToken());case 70:return d.sync_token=i.sent,i.next=73,regeneratorRuntime.awrap(n.getCursorToken());case 73:return d.cursor_token=i.sent,d.api=Rt.getApiVersion(),n.loggingEnabled&&console.log("Syncing with params",d),i.prev=76,i.t2=n.httpManager,i.next=80,regeneratorRuntime.awrap(n.getSyncURL());case 80:i.t3=i.sent,i.t4=d,i.t5=function(e){n.handleSyncSuccess(p,e,t).then((function(){r(e)})).catch((function(e){console.log("Caught sync success exception:",e),n.handleSyncError(e,null,a).then((function(t){n.notifyEvent("sync-exception",e),r(t)}))}))},i.t6=function(e,t){n.handleSyncError(e,t,a).then((function(e){r(e)}))},i.t2.postAuthenticatedAbsolute.call(i.t2,i.t3,i.t4,i.t5,i.t6),i.next=90;break;case 87:i.prev=87,i.t7=i.catch(76),console.log("Sync exception caught:",i.t7);case 90:case"end":return i.stop()}}),null,null,[[41,46],[52,56,60,68],[61,,63,67],[76,87]])})));case 5:case"end":return i.stop()}}),null,this)}},{key:"_awaitSleep",value:function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return console.warn("Simulating high latency sync request",e),t.abrupt("return",new Promise((function(t,n){setTimeout((function(){t()}),e)})));case 2:case"end":return t.stop()}}))}},{key:"handleSyncSuccess",value:function(t,n,r){var i,a,o,s,c,u,l,f,p,d,h,v,m,y,g,b,k,w,x,S,$,_,M,A,O,I,E,D=this;return regeneratorRuntime.async((function(R){for(;;)switch(R.prev=R.next){case 0:if(!r.simulateHighLatency){R.next=4;break}return i=r.simulatedLatency||1e3,R.next=4,regeneratorRuntime.awrap(this._awaitSleep(i));case 4:for(this.syncStatus.error=null,this.loggingEnabled&&console.log("Sync response",n),a=this.allSavedItems.map((function(e){return e.uuid})),o=n.saved_items.map((function(e){return e.uuid})),s=[],n.retrieved_items=n.retrieved_items.filter((function(e){var t=a.includes(e.uuid),n=o.includes(e.uuid);if(t||n)return s.push(e),!1;var r=D.modelManager.findItem(e.uuid);return!r||!r.dirty||(s.push(e),!1)})),c=[],u=!0,l=!1,f=void 0,R.prev=14,p=t[Symbol.iterator]();!(u=(d=p.next()).done);u=!0)0==(h=d.value).dirtyCount&&c.push(h);R.next=22;break;case 18:R.prev=18,R.t0=R.catch(14),l=!0,f=R.t0;case 22:R.prev=22,R.prev=23,u||null==p.return||p.return();case 25:if(R.prev=25,!l){R.next=28;break}throw f;case 28:return R.finish(25);case 29:return R.finish(22);case 30:if(this.modelManager.clearDirtyItems(c),v=[],!(s.length>0)){R.next=72;break}return R.next=35,regeneratorRuntime.awrap(this.getActiveKeyInfo(e.KeyRequestLoadSaveAccount));case 35:return m=R.sent.keys,R.next=38,regeneratorRuntime.awrap(C.decryptMultipleItems(s,m));case 38:y=!0,g=!1,b=void 0,R.prev=41,k=s[Symbol.iterator]();case 43:if(y=(w=k.next()).done){R.next=58;break}if(x=w.value,S=this.modelManager.findItem(x.uuid),$=JSON.parse(x.content),S&&$){R.next=49;break}return R.abrupt("continue",55);case 49:if(!S||S.isContentEqualWithNonItemContent($)){R.next=55;break}return R.next=52,regeneratorRuntime.awrap(this.modelManager.createDuplicateItemFromResponseItem(x));case 52:_=R.sent,this.modelManager.addDuplicatedItemAsConflict({duplicate:_,duplicateOf:S}),v.push(_);case 55:y=!0,R.next=43;break;case 58:R.next=64;break;case 60:R.prev=60,R.t1=R.catch(41),g=!0,b=R.t1;case 64:R.prev=64,R.prev=65,y||null==k.return||k.return();case 67:if(R.prev=67,!g){R.next=70;break}throw b;case 70:return R.finish(67);case 71:return R.finish(64);case 72:return R.next=74,regeneratorRuntime.awrap(this.handleItemsResponse(n.retrieved_items,null,bt.MappingSourceRemoteRetrieved,e.KeyRequestLoadSaveAccount));case 74:return M=R.sent,this.allRetreivedItems=this.allRetreivedItems.concat(M),this.syncStatus.retrievedCount=this.allRetreivedItems.length,A=["content","auth_hash"],R.next=80,regeneratorRuntime.awrap(this.handleItemsResponse(n.saved_items,A,bt.MappingSourceRemoteSaved,e.KeyRequestLoadSaveAccount));case 80:return O=R.sent,this.allSavedItems=this.allSavedItems.concat(O),I=n.unsaved,R.next=85,regeneratorRuntime.awrap(this.deprecated_handleUnsavedItemsResponse(I));case 85:return R.next=87,regeneratorRuntime.awrap(this.handleConflictsResponse(n.conflicts));case 87:if(R.t2=R.sent,R.t2){R.next=90;break}R.t2=[];case 90:if(E=R.t2,!((v=v.concat(E)).length>0)){R.next=95;break}return R.next=95,regeneratorRuntime.awrap(this.writeItemsToLocalStorage(v,!1));case 95:return R.next=97,regeneratorRuntime.awrap(this.writeItemsToLocalStorage(O,!1));case 97:return R.next=99,regeneratorRuntime.awrap(this.writeItemsToLocalStorage(M,!1));case 99:if(!n.integrity_hash||n.cursor_token){R.next=104;break}return R.next=102,regeneratorRuntime.awrap(this.handleServerIntegrityHash(n.integrity_hash));case 102:R.sent||this.syncDiscordance0)){R.next=122;break}return this.performSyncAgainOnCompletion=!1,R.abrupt("return",new Promise((function(e,t){setTimeout((function(){D.sync(r).then(e)}),10)})));case 122:return this.syncStatus.retrievedCount=0,this.syncStatus.current=0,this.syncStatus.total=0,this.syncStatusDidChange(),(this.allRetreivedItems.length>=this.majorDataChangeThreshold||O.length>=this.majorDataChangeThreshold||I&&I.length>=this.majorDataChangeThreshold||v&&v.length>=this.majorDataChangeThreshold)&&this.notifyEvent("major-data-change"),this.callQueuedCallbacks(n),this.notifyEvent("sync:completed",{retrievedItems:this.allRetreivedItems,savedItems:this.allSavedItems}),this.allRetreivedItems=[],this.allSavedItems=[],this.performSyncAgainOnCompletion&&(this.performSyncAgainOnCompletion=!1,setTimeout((function(){D.sync(r)}),10)),R.abrupt("return",n);case 133:case"end":return R.stop()}}),null,this,[[14,18,22,30],[23,,25,29],[41,60,64,72],[65,,67,71]])}},{key:"handleSyncError",value:function(e,t,n){return regeneratorRuntime.async((function(r){for(;;)switch(r.prev=r.next){case 0:return console.log("Sync error: ",e),401==t&&this.notifyEvent("sync-session-invalid"),e?"string"==typeof e&&(e={error:{message:e}}):e={error:{message:"Could not connect to server."}},this.syncStatus.syncOpInProgress=!1,this.syncStatus.error=e.error,this.syncStatusDidChange(),this.writeItemsToLocalStorage(n,!1),this.modelManager.didSyncModelsOffline(n),this.stopCheckingIfSyncIsTakingTooLong(),this.notifyEvent("sync:error",e.error),this.callQueuedCallbacks({error:"Sync error"}),r.abrupt("return",e);case 12:case"end":return r.stop()}}),null,this)}},{key:"handleItemsResponse",value:function(e,t,n,r){var i,a,o;return regeneratorRuntime.async((function(s){for(;;)switch(s.prev=s.next){case 0:return s.next=2,regeneratorRuntime.awrap(this.getActiveKeyInfo(r));case 2:return i=s.sent.keys,s.next=5,regeneratorRuntime.awrap(C.decryptMultipleItems(e,i));case 5:return s.next=7,regeneratorRuntime.awrap(this.modelManager.mapResponseItemsToLocalModelsOmittingFields(e,t,n));case 7:return a=s.sent,(o=a.filter((function(e){var t=e.errorDecryptingValueChanged;return e.errorDecryptingValueChanged=!1,t}))).length>0&&this.writeItemsToLocalStorage(o,!1),s.abrupt("return",a);case 11:case"end":return s.stop()}}),null,this)}},{key:"refreshErroredItems",value:function(){var t;return regeneratorRuntime.async((function(n){for(;;)switch(n.prev=n.next){case 0:if(!((t=this.modelManager.allNondummyItems.filter((function(e){return 1==e.errorDecrypting}))).length>0)){n.next=3;break}return n.abrupt("return",this.handleItemsResponse(t,null,bt.MappingSourceLocalRetrieved,e.KeyRequestLoadSaveAccount));case 3:case"end":return n.stop()}}),null,this)}},{key:"handleConflictsResponse",value:function(t){var n,r,i,a,o,s,c,u,l,f,p,d,h,v,m,y,g,b,k,w,x,S,$,_,M,A,O,I,E,D,R;return regeneratorRuntime.async((function(P){for(;;)switch(P.prev=P.next){case 0:if(t&&0!=t.length){P.next=2;break}return P.abrupt("return");case 2:this.loggingEnabled&&console.log("Handle Conflicted Items:",t),n={},r=!0,i=!1,a=void 0,P.prev=7,o=t[Symbol.iterator]();case 9:if(r=(s=o.next()).done){P.next=21;break}if(c=s.value,u=c.server_item||c.unsaved_item,l=this.modelManager.findItem(u.uuid)){P.next=16;break}return n[u.uuid]={},P.abrupt("continue",18);case 16:f=l.getContentCopy(),n[u.uuid]={frozenCurrentContent:f,itemRef:l};case 18:r=!0,P.next=9;break;case 21:P.next=27;break;case 23:P.prev=23,P.t0=P.catch(7),i=!0,a=P.t0;case 27:P.prev=27,P.prev=28,r||null==o.return||o.return();case 30:if(P.prev=30,!i){P.next=33;break}throw a;case 33:return P.finish(30);case 34:return P.finish(27);case 35:p=[],d=!0,h=!1,v=void 0,P.prev=39,m=t[Symbol.iterator]();case 41:if(d=(y=m.next()).done){P.next=93;break}return g=y.value,b=g.server_item||g.unsaved_item,P.t1=regeneratorRuntime,P.t2=C,P.t3=[b],P.next=49,regeneratorRuntime.awrap(this.getActiveKeyInfo(e.KeyRequestLoadSaveAccount));case 49:return P.t4=P.sent.keys,P.t5=P.t2.decryptMultipleItems.call(P.t2,P.t3,P.t4),P.next=53,P.t1.awrap.call(P.t1,P.t5);case 53:if(k=n[b.uuid],w=k.frozenCurrentContent,x=k.itemRef){P.next=56;break}return P.abrupt("continue",90);case 56:if(p.push(x),"uuid_conflict"!==g.type){P.next=64;break}return P.next=60,regeneratorRuntime.awrap(this.modelManager.alternateUUIDForItem(x));case 60:S=P.sent,p.push(S),P.next=90;break;case 64:if("sync_conflict"!==g.type){P.next=88;break}return P.next=67,regeneratorRuntime.awrap(this.modelManager.createDuplicateItemFromResponseItem(b));case 67:if($=P.sent,_=this.modelManager.duplicateItemWithCustomContent({content:w,duplicateOf:x}),M=!_.isItemContentEqualWith($),A=!x.isItemContentEqualWith($),O=!1,I=!1,E=!1,D=!1,b.deleted||x.deleted?D=!0:M?(new Date-x.client_updated_at)/1e3<20?(E=!0,I=!0):(O=!0,D=!0):A?SFItem.AreItemContentsEqual({leftContent:x.content,rightContent:$.content,keysToIgnore:x.keysToIgnoreWhenCheckingContentEquality().concat(["references"]),appDataKeysToIgnore:x.appDataKeysToIgnoreWhenCheckingContentEquality()})?E=!0:(O=!0,D=!0):D=!0,!O){P.next=81;break}return P.next=79,regeneratorRuntime.awrap(this.modelManager.duplicateItemWithCustomContentAndAddAsConflict({content:w,duplicateOf:x}));case 79:R=P.sent,p.push(R);case 81:if(I&&(this.modelManager.addDuplicatedItemAsConflict({duplicate:$,duplicateOf:x}),p.push($)),!D){P.next=85;break}return P.next=85,regeneratorRuntime.awrap(this.modelManager.mapResponseItemsToLocalModelsOmittingFields([b],null,bt.MappingSourceRemoteRetrieved));case 85:E&&(x.updated_at=$.updated_at,x.setDirty(!0)),P.next=90;break;case 88:return console.error("Unsupported conflict type",g.type),P.abrupt("continue",90);case 90:d=!0,P.next=41;break;case 93:P.next=99;break;case 95:P.prev=95,P.t6=P.catch(39),h=!0,v=P.t6;case 99:P.prev=99,P.prev=100,d||null==m.return||m.return();case 102:if(P.prev=102,!h){P.next=105;break}throw v;case 105:return P.finish(102);case 106:return P.finish(99);case 107:return P.abrupt("return",p);case 108:case"end":return P.stop()}}),null,this,[[7,23,27,35],[28,,30,34],[39,95,99,107],[100,,102,106]])}},{key:"deprecated_handleUnsavedItemsResponse",value:function(t){var n,r,i,a,o,s,c,u,l,f;return regeneratorRuntime.async((function(p){for(;;)switch(p.prev=p.next){case 0:if(t&&0!=t.length){p.next=2;break}return p.abrupt("return");case 2:this.loggingEnabled&&console.log("Handle Unsaved Items:",t),n=!0,r=!1,i=void 0,p.prev=6,a=t[Symbol.iterator]();case 8:if(n=(o=a.next()).done){p.next=37;break}return s=o.value,c=s.item,p.t0=regeneratorRuntime,p.t1=C,p.t2=[c],p.next=16,regeneratorRuntime.awrap(this.getActiveKeyInfo(e.KeyRequestLoadSaveAccount));case 16:return p.t3=p.sent.keys,p.t4=p.t1.decryptMultipleItems.call(p.t1,p.t2,p.t3),p.next=20,p.t0.awrap.call(p.t0,p.t4);case 20:if(u=this.modelManager.findItem(c.uuid)){p.next=23;break}return p.abrupt("continue",34);case 23:if("uuid_conflict"!==(l=s.error).tag){p.next=29;break}return p.next=27,regeneratorRuntime.awrap(this.modelManager.alternateUUIDForItem(u));case 27:p.next=34;break;case 29:if("sync_conflict"!==l.tag){p.next=34;break}return p.next=32,regeneratorRuntime.awrap(this.modelManager.createDuplicateItemFromResponseItem(c));case 32:f=p.sent,c.deleted||u.isItemContentEqualWith(f)||this.modelManager.addDuplicatedItemAsConflict({duplicate:f,duplicateOf:u});case 34:n=!0,p.next=8;break;case 37:p.next=43;break;case 39:p.prev=39,p.t5=p.catch(6),r=!0,i=p.t5;case 43:p.prev=43,p.prev=44,n||null==a.return||a.return();case 46:if(p.prev=46,!r){p.next=49;break}throw i;case 49:return p.finish(46);case 50:return p.finish(43);case 51:case"end":return p.stop()}}),null,this,[[6,39,43,51],[44,,46,50]])}},{key:"stateless_downloadAllItems",value:function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise((function(r,i){var a;return regeneratorRuntime.async((function(o){for(;;)switch(o.prev=o.next){case 0:return a={limit:n.limit||500,sync_token:n.syncToken,cursor_token:n.cursorToken,content_type:n.contentType,event:n.event,api:Rt.getApiVersion()},o.prev=1,o.t0=t.httpManager,o.next=5,regeneratorRuntime.awrap(t.getSyncURL());case 5:o.t1=o.sent,o.t2=a,o.t3=function(i){var a,o;return regeneratorRuntime.async((function(s){for(;;)switch(s.prev=s.next){case 0:return n.retrievedItems||(n.retrievedItems=[]),a=i.retrieved_items,s.next=4,regeneratorRuntime.awrap(t.getActiveKeyInfo(e.KeyRequestLoadSaveAccount));case 4:return o=s.sent.keys,s.next=7,regeneratorRuntime.awrap(C.decryptMultipleItems(a,o));case 7:n.retrievedItems=n.retrievedItems.concat(a.map((function(e){return t.modelManager.createItem(e)}))),n.syncToken=i.sync_token,n.cursorToken=i.cursor_token,n.cursorToken?t.stateless_downloadAllItems(n).then(r):r(n.retrievedItems);case 11:case"end":return s.stop()}}))},o.t4=function(e,t){i(e)},o.t0.postAuthenticatedAbsolute.call(o.t0,o.t1,o.t2,o.t3,o.t4),o.next=16;break;case 12:o.prev=12,o.t5=o.catch(1),console.log("Download all items exception caught:",o.t5),i(o.t5);case 16:case"end":return o.stop()}}),null,null,[[1,12]])}))}},{key:"resolveOutOfSync",value:function(){var e=this;return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this.stateless_downloadAllItems({event:"resolve-out-of-sync"}).then((function(t){var n,r,i,a,o,s,c,u;return regeneratorRuntime.async((function(l){for(;;)switch(l.prev=l.next){case 0:n=[],r=!0,i=!1,a=void 0,l.prev=4,o=t[Symbol.iterator]();case 6:if(r=(s=o.next()).done){l.next=18;break}if(c=s.value,!(u=e.modelManager.findItem(c.uuid))){l.next=14;break}if(c.isItemContentEqualWith(u)){l.next=14;break}return l.next=14,regeneratorRuntime.awrap(e.modelManager.duplicateItemAndAddAsConflict(u));case 14:n.push(c);case 15:r=!0,l.next=6;break;case 18:l.next=24;break;case 20:l.prev=20,l.t0=l.catch(4),i=!0,a=l.t0;case 24:l.prev=24,l.prev=25,r||null==o.return||o.return();case 27:if(l.prev=27,!i){l.next=30;break}throw a;case 30:return l.finish(27);case 31:return l.finish(24);case 32:return l.next=34,regeneratorRuntime.awrap(e.modelManager.mapResponseItemsToLocalModelsWithOptions({items:n,source:bt.MappingSourceRemoteRetrieved}));case 34:return l.next=36,regeneratorRuntime.awrap(e.writeItemsToLocalStorage(e.modelManager.allNondummyItems));case 36:return l.abrupt("return",e.sync({performIntegrityCheck:!0}));case 37:case"end":return l.stop()}}),null,null,[[4,20,24,32],[25,,27,31]])})));case 1:case"end":return t.stop()}}),null,this)}},{key:"handleSignout",value:function(){return regeneratorRuntime.async((function(e){for(;;)switch(e.prev=e.next){case 0:return this.outOfSync=!1,this.loadLocalDataPromise=null,this.performSyncAgainOnCompletion=!1,this.syncStatus.syncOpInProgress=!1,this._queuedCallbacks=[],this.syncStatus={},e.abrupt("return",this.clearSyncToken());case 7:case"end":return e.stop()}}),null,this)}},{key:"clearSyncToken",value:function(){return regeneratorRuntime.async((function(e){for(;;)switch(e.prev=e.next){case 0:return this._syncToken=null,this._cursorToken=null,e.abrupt("return",this.storageManager.removeItem("syncToken"));case 3:case"end":return e.stop()}}),null,this)}},{key:"__setLocalDataNotLoaded",value:function(){this.loadLocalDataPromise=null,this._initialDataLoaded=!1}},{key:"queuedCallbacks",get:function(){return this._queuedCallbacks||(this._queuedCallbacks=[]),this._queuedCallbacks}}])&&jt(t.prototype,n),e}();function Nt(e,t){for(var n=0;n0||o.customHandler)){A.next=77;break}return A.next=75,regeneratorRuntime.awrap(this.runMigration(o,o.items));case 75:A.next=78;break;case 77:this.markMigrationCompleted(o);case 78:g=!0,A.next=70;break;case 81:A.next=87;break;case 83:A.prev=83,A.t3=A.catch(68),b=!0,k=A.t3;case 87:A.prev=87,A.prev=88,g||null==w.return||w.return();case 90:if(A.prev=90,!b){A.next=93;break}throw k;case 93:return A.finish(90);case 94:return A.finish(87);case 95:for(S=!0,$=!1,_=void 0,A.prev=98,M=this.completionHandlers[Symbol.iterator]();!(S=(C=M.next()).done);S=!0)(0,C.value)();A.next=106;break;case 102:A.prev=102,A.t4=A.catch(98),$=!0,_=A.t4;case 106:A.prev=106,A.prev=107,S||null==M.return||M.return();case 109:if(A.prev=109,!$){A.next=112;break}throw _;case 112:return A.finish(109);case 113:return A.finish(106);case 114:case"end":return A.stop()}}),null,this,[[6,10,14,22],[15,,17,21],[25,53,57,65],[32,36,40,48],[41,,43,47],[58,,60,64],[68,83,87,95],[88,,90,94],[98,102,106,114],[107,,109,113]])}},{key:"encode",value:function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",window.btoa(e));case 1:case"end":return t.stop()}}))}},{key:"decode",value:function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",window.atob(e));case 1:case"end":return t.stop()}}))}},{key:"getCompletedMigrations",value:function(){var e;return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:if(this._completed){t.next=5;break}return t.next=3,regeneratorRuntime.awrap(this.storageManager.getItem("migrations"));case 3:e=t.sent,this._completed=e?JSON.parse(e):[];case 5:return t.abrupt("return",this._completed);case 6:case"end":return t.stop()}}),null,this)}},{key:"getPendingMigrations",value:function(){var e,t,n,r,i,a,o,s;return regeneratorRuntime.async((function(c){for(;;)switch(c.prev=c.next){case 0:return c.next=2,regeneratorRuntime.awrap(this.getCompletedMigrations());case 2:e=c.sent,t=[],n=!0,r=!1,i=void 0,c.prev=7,a=this.migrations[Symbol.iterator]();case 9:if(n=(o=a.next()).done){c.next=22;break}return s=o.value,c.t0=e,c.next=14,regeneratorRuntime.awrap(this.encode(s.name));case 14:if(c.t1=c.sent,c.t2=c.t0.indexOf.call(c.t0,c.t1),c.t3=-1,c.t2!=c.t3){c.next=19;break}t.push(s);case 19:n=!0,c.next=9;break;case 22:c.next=28;break;case 24:c.prev=24,c.t4=c.catch(7),r=!0,i=c.t4;case 28:c.prev=28,c.prev=29,n||null==a.return||a.return();case 31:if(c.prev=31,!r){c.next=34;break}throw i;case 34:return c.finish(31);case 35:return c.finish(28);case 36:return c.abrupt("return",t);case 37:case"end":return c.stop()}}),null,this,[[7,24,28,36],[29,,31,35]])}},{key:"markMigrationCompleted",value:function(e){var t;return regeneratorRuntime.async((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,regeneratorRuntime.awrap(this.getCompletedMigrations());case 2:return t=n.sent,n.t0=t,n.next=6,regeneratorRuntime.awrap(this.encode(e.name));case 6:n.t1=n.sent,n.t0.push.call(n.t0,n.t1),this.storageManager.setItem("migrations",JSON.stringify(t)),e.running=!1;case 10:case"end":return n.stop()}}),null,this)}},{key:"runMigration",value:function(e,t){var n=this;return regeneratorRuntime.async((function(r){for(;;)switch(r.prev=r.next){case 0:if(!e.running){r.next=2;break}return r.abrupt("return");case 2:if(console.log("Running migration:",e.name),e.running=!0,!e.customHandler){r.next=8;break}return r.abrupt("return",e.customHandler().then((function(){n.markMigrationCompleted(e)})));case 8:return r.abrupt("return",e.handler(t).then((function(){n.markMigrationCompleted(e)})));case 9:case"end":return r.stop()}}))}}])&&zt(t.prototype,n),e}();function Wt(e,t){for(var n=0;n0);case 4:case"end":return t.stop()}}),null,this)}},{key:"actionRequiresPrivilege",value:function(e){var t;return regeneratorRuntime.async((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,regeneratorRuntime.awrap(this.getSessionExpirey());case 2:if(!(n.sent>new Date)){n.next=5;break}return n.abrupt("return",!1);case 5:return n.next=7,regeneratorRuntime.awrap(this.netCredentialsForAction(e));case 7:return t=n.sent,n.abrupt("return",t.length>0);case 9:case"end":return n.stop()}}),null,this)}},{key:"savePrivileges",value:function(){var e;return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,regeneratorRuntime.awrap(this.getPrivileges());case 2:e=t.sent,this.modelManager.setItemDirty(e,!0),this.syncManager.sync();case 5:case"end":return t.stop()}}),null,this)}},{key:"authenticateAction",value:function(e,t){var n,r,i,a,o,s,c,u,l;return regeneratorRuntime.async((function(f){for(;;)switch(f.prev=f.next){case 0:return f.next=2,regeneratorRuntime.awrap(this.netCredentialsForAction(e));case 2:n=f.sent,r=[],i=[],a=!0,o=!1,s=void 0,f.prev=7,c=n[Symbol.iterator]();case 9:if(a=(u=c.next()).done){f.next=18;break}return l=u.value,f.next=13,regeneratorRuntime.awrap(this._verifyAuthenticationParameters(l,t[l]));case 13:f.sent?r.push(l):i.push(l);case 15:a=!0,f.next=9;break;case 18:f.next=24;break;case 20:f.prev=20,f.t0=f.catch(7),o=!0,s=f.t0;case 24:f.prev=24,f.prev=25,a||null==c.return||c.return();case 27:if(f.prev=27,!o){f.next=30;break}throw s;case 30:return f.finish(27);case 31:return f.finish(24);case 32:return f.abrupt("return",{success:0==i.length,successfulCredentials:r,failedCredentials:i});case 33:case"end":return f.stop()}}),null,this,[[7,20,24,32],[25,,27,31]])}},{key:"_verifyAuthenticationParameters",value:function(t,n){var r,i,a=this;return regeneratorRuntime.async((function(o){for(;;)switch(o.prev=o.next){case 0:if(r=function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",a.delegate.verifyAccountPassword(e));case 1:case"end":return t.stop()}}))},i=function(e){return regeneratorRuntime.async((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",a.delegate.verifyLocalPasscode(e));case 1:case"end":return t.stop()}}))},t!=e.CredentialAccountPassword){o.next=6;break}return o.abrupt("return",r(n));case 6:if(t!=e.CredentialLocalPasscode){o.next=8;break}return o.abrupt("return",i(n));case 8:case"end":return o.stop()}}))}}])&&qt(t.prototype,n),e}();function Gt(e,t){for(var n=0;n0){var s=n.modelManager.itemsMatchingPredicates(i);if(s.length>=2){var c=s.sort((function(e,t){return e.errorDecrypting?1:t.errorDecrypting?-1:e.created_at - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */(function(){var a="Expected a function",o="__lodash_placeholder__",s=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",u="[object Array]",l="[object Boolean]",f="[object Date]",p="[object Error]",d="[object Function]",h="[object GeneratorFunction]",v="[object Map]",m="[object Number]",y="[object Object]",g="[object RegExp]",b="[object Set]",k="[object String]",w="[object Symbol]",x="[object WeakMap]",S="[object ArrayBuffer]",$="[object DataView]",_="[object Float32Array]",M="[object Float64Array]",C="[object Int8Array]",A="[object Int16Array]",O="[object Int32Array]",I="[object Uint8Array]",E="[object Uint16Array]",D="[object Uint32Array]",R=/\b__p \+= '';/g,P=/\b(__p \+=) '' \+/g,T=/(__e\(.*?\)|\b__t\)) \+\n'';/g,j=/&(?:amp|lt|gt|quot|#39);/g,F=/[&<>"']/g,N=RegExp(j.source),L=RegExp(F.source),U=/<%-([\s\S]+?)%>/g,B=/<%([\s\S]+?)%>/g,H=/<%=([\s\S]+?)%>/g,z=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,V=/^\w*$/,W=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,K=/[\\^$.*+?()[\]{}|]/g,q=RegExp(K.source),J=/^\s+|\s+$/g,G=/^\s+/,Y=/\s+$/,Z=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,X=/\{\n\/\* \[wrapped with (.+)\] \*/,Q=/,? & /,ee=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,te=/\\(\\)?/g,ne=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,re=/\w*$/,ie=/^[-+]0x[0-9a-f]+$/i,ae=/^0b[01]+$/i,oe=/^\[object .+?Constructor\]$/,se=/^0o[0-7]+$/i,ce=/^(?:0|[1-9]\d*)$/,ue=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,le=/($^)/,fe=/['\n\r\u2028\u2029\\]/g,pe="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",de="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",he="[\\ud800-\\udfff]",ve="["+de+"]",me="["+pe+"]",ye="\\d+",ge="[\\u2700-\\u27bf]",be="[a-z\\xdf-\\xf6\\xf8-\\xff]",ke="[^\\ud800-\\udfff"+de+ye+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",we="\\ud83c[\\udffb-\\udfff]",xe="[^\\ud800-\\udfff]",Se="(?:\\ud83c[\\udde6-\\uddff]){2}",$e="[\\ud800-\\udbff][\\udc00-\\udfff]",_e="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Me="(?:"+be+"|"+ke+")",Ce="(?:"+_e+"|"+ke+")",Ae="(?:"+me+"|"+we+")"+"?",Oe="[\\ufe0e\\ufe0f]?"+Ae+("(?:\\u200d(?:"+[xe,Se,$e].join("|")+")[\\ufe0e\\ufe0f]?"+Ae+")*"),Ie="(?:"+[ge,Se,$e].join("|")+")"+Oe,Ee="(?:"+[xe+me+"?",me,Se,$e,he].join("|")+")",De=RegExp("['’]","g"),Re=RegExp(me,"g"),Pe=RegExp(we+"(?="+we+")|"+Ee+Oe,"g"),Te=RegExp([_e+"?"+be+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ve,_e,"$"].join("|")+")",Ce+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ve,_e+Me,"$"].join("|")+")",_e+"?"+Me+"+(?:['’](?:d|ll|m|re|s|t|ve))?",_e+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ye,Ie].join("|"),"g"),je=RegExp("[\\u200d\\ud800-\\udfff"+pe+"\\ufe0e\\ufe0f]"),Fe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Ne=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Le=-1,Ue={};Ue[_]=Ue[M]=Ue[C]=Ue[A]=Ue[O]=Ue[I]=Ue["[object Uint8ClampedArray]"]=Ue[E]=Ue[D]=!0,Ue[c]=Ue[u]=Ue[S]=Ue[l]=Ue[$]=Ue[f]=Ue[p]=Ue[d]=Ue[v]=Ue[m]=Ue[y]=Ue[g]=Ue[b]=Ue[k]=Ue[x]=!1;var Be={};Be[c]=Be[u]=Be[S]=Be[$]=Be[l]=Be[f]=Be[_]=Be[M]=Be[C]=Be[A]=Be[O]=Be[v]=Be[m]=Be[y]=Be[g]=Be[b]=Be[k]=Be[w]=Be[I]=Be["[object Uint8ClampedArray]"]=Be[E]=Be[D]=!0,Be[p]=Be[d]=Be[x]=!1;var He={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ze=parseFloat,Ve=parseInt,We="object"==typeof e&&e&&e.Object===Object&&e,Ke="object"==typeof self&&self&&self.Object===Object&&self,qe=We||Ke||Function("return this")(),Je=t&&!t.nodeType&&t,Ge=Je&&"object"==typeof r&&r&&!r.nodeType&&r,Ye=Ge&&Ge.exports===Je,Ze=Ye&&We.process,Xe=function(){try{var e=Ge&&Ge.require&&Ge.require("util").types;return e||Ze&&Ze.binding&&Ze.binding("util")}catch(e){}}(),Qe=Xe&&Xe.isArrayBuffer,et=Xe&&Xe.isDate,tt=Xe&&Xe.isMap,nt=Xe&&Xe.isRegExp,rt=Xe&&Xe.isSet,it=Xe&&Xe.isTypedArray;function at(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function ot(e,t,n,r){for(var i=-1,a=null==e?0:e.length;++i-1}function pt(e,t,n){for(var r=-1,i=null==e?0:e.length;++r-1;);return n}function Pt(e,t){for(var n=e.length;n--&&wt(t,e[n],0)>-1;);return n}function Tt(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}var jt=Mt({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Ft=Mt({"&":"&","<":"<",">":">",'"':""","'":"'"});function Nt(e){return"\\"+He[e]}function Lt(e){return je.test(e)}function Ut(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function Bt(e,t){return function(n){return e(t(n))}}function Ht(e,t){for(var n=-1,r=e.length,i=0,a=[];++n",""":'"',"'":"'"});var Jt=function e(t){var n,r=(t=null==t?qe:Jt.defaults(qe.Object(),t,Jt.pick(qe,Ne))).Array,i=t.Date,pe=t.Error,de=t.Function,he=t.Math,ve=t.Object,me=t.RegExp,ye=t.String,ge=t.TypeError,be=r.prototype,ke=de.prototype,we=ve.prototype,xe=t["__core-js_shared__"],Se=ke.toString,$e=we.hasOwnProperty,_e=0,Me=(n=/[^.]+$/.exec(xe&&xe.keys&&xe.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",Ce=we.toString,Ae=Se.call(ve),Oe=qe._,Ie=me("^"+Se.call($e).replace(K,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ee=Ye?t.Buffer:void 0,Pe=t.Symbol,je=t.Uint8Array,He=Ee?Ee.allocUnsafe:void 0,We=Bt(ve.getPrototypeOf,ve),Ke=ve.create,Je=we.propertyIsEnumerable,Ge=be.splice,Ze=Pe?Pe.isConcatSpreadable:void 0,Xe=Pe?Pe.iterator:void 0,gt=Pe?Pe.toStringTag:void 0,Mt=function(){try{var e=Qi(ve,"defineProperty");return e({},"",{}),e}catch(e){}}(),Gt=t.clearTimeout!==qe.clearTimeout&&t.clearTimeout,Yt=i&&i.now!==qe.Date.now&&i.now,Zt=t.setTimeout!==qe.setTimeout&&t.setTimeout,Xt=he.ceil,Qt=he.floor,en=ve.getOwnPropertySymbols,tn=Ee?Ee.isBuffer:void 0,nn=t.isFinite,rn=be.join,an=Bt(ve.keys,ve),on=he.max,sn=he.min,cn=i.now,un=t.parseInt,ln=he.random,fn=be.reverse,pn=Qi(t,"DataView"),dn=Qi(t,"Map"),hn=Qi(t,"Promise"),vn=Qi(t,"Set"),mn=Qi(t,"WeakMap"),yn=Qi(ve,"create"),gn=mn&&new mn,bn={},kn=Ma(pn),wn=Ma(dn),xn=Ma(hn),Sn=Ma(vn),$n=Ma(mn),_n=Pe?Pe.prototype:void 0,Mn=_n?_n.valueOf:void 0,Cn=_n?_n.toString:void 0;function An(e){if(Vo(e)&&!Ro(e)&&!(e instanceof Dn)){if(e instanceof En)return e;if($e.call(e,"__wrapped__"))return Ca(e)}return new En(e)}var On=function(){function e(){}return function(t){if(!zo(t))return{};if(Ke)return Ke(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function In(){}function En(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Dn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Rn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Yn(e,t,n,r,i,a){var o,s=1&t,u=2&t,p=4&t;if(n&&(o=i?n(e,r,i,a):n(e)),void 0!==o)return o;if(!zo(e))return e;var x=Ro(e);if(x){if(o=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&$e.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!s)return yi(e,o)}else{var R=na(e),P=R==d||R==h;if(Fo(e))return fi(e,s);if(R==y||R==c||P&&!i){if(o=u||P?{}:ia(e),!s)return u?function(e,t){return gi(e,ta(e),t)}(e,function(e,t){return e&&gi(t,ws(t),e)}(o,e)):function(e,t){return gi(e,ea(e),t)}(e,Kn(o,e))}else{if(!Be[R])return i?e:{};o=function(e,t,n){var r=e.constructor;switch(t){case S:return pi(e);case l:case f:return new r(+e);case $:return function(e,t){var n=t?pi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case _:case M:case C:case A:case O:case I:case"[object Uint8ClampedArray]":case E:case D:return di(e,n);case v:return new r;case m:case k:return new r(e);case g:return function(e){var t=new e.constructor(e.source,re.exec(e));return t.lastIndex=e.lastIndex,t}(e);case b:return new r;case w:return i=e,Mn?ve(Mn.call(i)):{}}var i}(e,R,s)}}a||(a=new Fn);var T=a.get(e);if(T)return T;a.set(e,o),Go(e)?e.forEach((function(r){o.add(Yn(r,t,n,r,e,a))})):Wo(e)&&e.forEach((function(r,i){o.set(i,Yn(r,t,n,i,e,a))}));var j=x?void 0:(p?u?Ki:Wi:u?ws:ks)(e);return st(j||e,(function(r,i){j&&(r=e[i=r]),zn(o,i,Yn(r,t,n,i,e,a))})),o}function Zn(e,t,n){var r=n.length;if(null==e)return!r;for(e=ve(e);r--;){var i=n[r],a=t[i],o=e[i];if(void 0===o&&!(i in e)||!a(o))return!1}return!0}function Xn(e,t,n){if("function"!=typeof e)throw new ge(a);return ba((function(){e.apply(void 0,n)}),t)}function Qn(e,t,n,r){var i=-1,a=ft,o=!0,s=e.length,c=[],u=t.length;if(!s)return c;n&&(t=dt(t,It(n))),r?(a=pt,o=!1):t.length>=200&&(a=Dt,o=!1,t=new jn(t));e:for(;++i-1},Pn.prototype.set=function(e,t){var n=this.__data__,r=Vn(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Tn.prototype.clear=function(){this.size=0,this.__data__={hash:new Rn,map:new(dn||Pn),string:new Rn}},Tn.prototype.delete=function(e){var t=Zi(this,e).delete(e);return this.size-=t?1:0,t},Tn.prototype.get=function(e){return Zi(this,e).get(e)},Tn.prototype.has=function(e){return Zi(this,e).has(e)},Tn.prototype.set=function(e,t){var n=Zi(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},jn.prototype.add=jn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},jn.prototype.has=function(e){return this.__data__.has(e)},Fn.prototype.clear=function(){this.__data__=new Pn,this.size=0},Fn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Fn.prototype.get=function(e){return this.__data__.get(e)},Fn.prototype.has=function(e){return this.__data__.has(e)},Fn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Pn){var r=n.__data__;if(!dn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Tn(r)}return n.set(e,t),this.size=n.size,this};var er=wi(cr),tr=wi(ur,!0);function nr(e,t){var n=!0;return er(e,(function(e,r,i){return n=!!t(e,r,i)})),n}function rr(e,t,n){for(var r=-1,i=e.length;++r0&&n(s)?t>1?ar(s,t-1,n,r,i):ht(i,s):r||(i[i.length]=s)}return i}var or=xi(),sr=xi(!0);function cr(e,t){return e&&or(e,t,ks)}function ur(e,t){return e&&sr(e,t,ks)}function lr(e,t){return lt(t,(function(t){return Uo(e[t])}))}function fr(e,t){for(var n=0,r=(t=si(t,e)).length;null!=e&&nt}function vr(e,t){return null!=e&&$e.call(e,t)}function mr(e,t){return null!=e&&t in ve(e)}function yr(e,t,n){for(var i=n?pt:ft,a=e[0].length,o=e.length,s=o,c=r(o),u=1/0,l=[];s--;){var f=e[s];s&&t&&(f=dt(f,It(t))),u=sn(f.length,u),c[s]=!n&&(t||a>=120&&f.length>=120)?new jn(s&&f):void 0}f=e[0];var p=-1,d=c[0];e:for(;++p=s)return c;var u=n[r];return c*("desc"==u?-1:1)}}return e.index-t.index}(e,t,n)}))}function Rr(e,t,n){for(var r=-1,i=t.length,a={};++r-1;)s!==e&&Ge.call(s,c,1),Ge.call(e,c,1);return e}function Tr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==a){var a=i;oa(i)?Ge.call(e,i,1):Qr(e,i)}}return e}function jr(e,t){return e+Qt(ln()*(t-e+1))}function Fr(e,t){var n="";if(!e||t<1||t>9007199254740991)return n;do{t%2&&(n+=e),(t=Qt(t/2))&&(e+=e)}while(t);return n}function Nr(e,t){return ka(ha(e,t,Ks),e+"")}function Lr(e){return Ln(Os(e))}function Ur(e,t){var n=Os(e);return Sa(n,Gn(t,0,n.length))}function Br(e,t,n,r){if(!zo(e))return e;for(var i=-1,a=(t=si(t,e)).length,o=a-1,s=e;null!=s&&++ia?0:a+t),(n=n>a?a:n)<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var o=r(a);++i>>1,o=e[a];null!==o&&!Zo(o)&&(n?o<=t:o=200){var u=t?null:Fi(e);if(u)return zt(u);o=!1,i=Dt,c=new jn}else c=t?[]:s;e:for(;++r=r?e:Wr(e,t,n)}var li=Gt||function(e){return qe.clearTimeout(e)};function fi(e,t){if(t)return e.slice();var n=e.length,r=He?He(n):new e.constructor(n);return e.copy(r),r}function pi(e){var t=new e.constructor(e.byteLength);return new je(t).set(new je(e)),t}function di(e,t){var n=t?pi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function hi(e,t){if(e!==t){var n=void 0!==e,r=null===e,i=e==e,a=Zo(e),o=void 0!==t,s=null===t,c=t==t,u=Zo(t);if(!s&&!u&&!a&&e>t||a&&o&&c&&!s&&!u||r&&o&&c||!n&&c||!i)return 1;if(!r&&!a&&!u&&e1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,o&&sa(n[0],n[1],o)&&(a=i<3?void 0:a,i=1),t=ve(t);++r-1?i[a?t[o]:o]:void 0}}function Ci(e){return Vi((function(t){var n=t.length,r=n,i=En.prototype.thru;for(e&&t.reverse();r--;){var o=t[r];if("function"!=typeof o)throw new ge(a);if(i&&!s&&"wrapper"==Ji(o))var s=new En([],!0)}for(r=s?r:n;++r1&&b.reverse(),f&&us))return!1;var u=a.get(e),l=a.get(t);if(u&&l)return u==t&&l==e;var f=-1,p=!0,d=2&n?new jn:void 0;for(a.set(e,t),a.set(t,e);++f-1&&e%1==0&&e1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(Z,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return st(s,(function(n){var r="_."+n[0];t&n[1]&&!ft(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(X);return t?t[1].split(Q):[]}(r),n)))}function xa(e){var t=0,n=0;return function(){var r=cn(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Sa(e,t){var n=-1,r=e.length,i=r-1;for(t=void 0===t?r:t;++n1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,qa(e,n)}));function eo(e){var t=An(e);return t.__chain__=!0,t}function to(e,t){return t(e)}var no=Vi((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return Jn(t,e)};return!(t>1||this.__actions__.length)&&r instanceof Dn&&oa(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:to,args:[i],thisArg:void 0}),new En(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(i)}));var ro=bi((function(e,t,n){$e.call(e,n)?++e[n]:qn(e,n,1)}));var io=Mi(Ea),ao=Mi(Da);function oo(e,t){return(Ro(e)?st:er)(e,Yi(t,3))}function so(e,t){return(Ro(e)?ct:tr)(e,Yi(t,3))}var co=bi((function(e,t,n){$e.call(e,n)?e[n].push(t):qn(e,n,[t])}));var uo=Nr((function(e,t,n){var i=-1,a="function"==typeof t,o=To(e)?r(e.length):[];return er(e,(function(e){o[++i]=a?at(t,e,n):gr(e,t,n)})),o})),lo=bi((function(e,t,n){qn(e,n,t)}));function fo(e,t){return(Ro(e)?dt:Cr)(e,Yi(t,3))}var po=bi((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var ho=Nr((function(e,t){if(null==e)return[];var n=t.length;return n>1&&sa(e,t[0],t[1])?t=[]:n>2&&sa(t[0],t[1],t[2])&&(t=[t[0]]),Dr(e,ar(t,1),[])})),vo=Yt||function(){return qe.Date.now()};function mo(e,t,n){return t=n?void 0:t,Li(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function yo(e,t){var n;if("function"!=typeof t)throw new ge(a);return e=rs(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}}var go=Nr((function(e,t,n){var r=1;if(n.length){var i=Ht(n,Gi(go));r|=32}return Li(e,r,t,n,i)})),bo=Nr((function(e,t,n){var r=3;if(n.length){var i=Ht(n,Gi(bo));r|=32}return Li(t,r,e,n,i)}));function ko(e,t,n){var r,i,o,s,c,u,l=0,f=!1,p=!1,d=!0;if("function"!=typeof e)throw new ge(a);function h(t){var n=r,a=i;return r=i=void 0,l=t,s=e.apply(a,n)}function v(e){return l=e,c=ba(y,t),f?h(e):s}function m(e){var n=e-u;return void 0===u||n>=t||n<0||p&&e-l>=o}function y(){var e=vo();if(m(e))return g(e);c=ba(y,function(e){var n=t-(e-u);return p?sn(n,o-(e-l)):n}(e))}function g(e){return c=void 0,d&&r?h(e):(r=i=void 0,s)}function b(){var e=vo(),n=m(e);if(r=arguments,i=this,u=e,n){if(void 0===c)return v(u);if(p)return li(c),c=ba(y,t),h(u)}return void 0===c&&(c=ba(y,t)),s}return t=as(t)||0,zo(n)&&(f=!!n.leading,o=(p="maxWait"in n)?on(as(n.maxWait)||0,t):o,d="trailing"in n?!!n.trailing:d),b.cancel=function(){void 0!==c&&li(c),l=0,r=u=i=c=void 0},b.flush=function(){return void 0===c?s:g(vo())},b}var wo=Nr((function(e,t){return Xn(e,1,t)})),xo=Nr((function(e,t,n){return Xn(e,as(t)||0,n)}));function So(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new ge(a);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(So.Cache||Tn),n}function $o(e){if("function"!=typeof e)throw new ge(a);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}So.Cache=Tn;var _o=ci((function(e,t){var n=(t=1==t.length&&Ro(t[0])?dt(t[0],It(Yi())):dt(ar(t,1),It(Yi()))).length;return Nr((function(r){for(var i=-1,a=sn(r.length,n);++i=t})),Do=br(function(){return arguments}())?br:function(e){return Vo(e)&&$e.call(e,"callee")&&!Je.call(e,"callee")},Ro=r.isArray,Po=Qe?It(Qe):function(e){return Vo(e)&&dr(e)==S};function To(e){return null!=e&&Ho(e.length)&&!Uo(e)}function jo(e){return Vo(e)&&To(e)}var Fo=tn||ac,No=et?It(et):function(e){return Vo(e)&&dr(e)==f};function Lo(e){if(!Vo(e))return!1;var t=dr(e);return t==p||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!qo(e)}function Uo(e){if(!zo(e))return!1;var t=dr(e);return t==d||t==h||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Bo(e){return"number"==typeof e&&e==rs(e)}function Ho(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function zo(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Vo(e){return null!=e&&"object"==typeof e}var Wo=tt?It(tt):function(e){return Vo(e)&&na(e)==v};function Ko(e){return"number"==typeof e||Vo(e)&&dr(e)==m}function qo(e){if(!Vo(e)||dr(e)!=y)return!1;var t=We(e);if(null===t)return!0;var n=$e.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&Se.call(n)==Ae}var Jo=nt?It(nt):function(e){return Vo(e)&&dr(e)==g};var Go=rt?It(rt):function(e){return Vo(e)&&na(e)==b};function Yo(e){return"string"==typeof e||!Ro(e)&&Vo(e)&&dr(e)==k}function Zo(e){return"symbol"==typeof e||Vo(e)&&dr(e)==w}var Xo=it?It(it):function(e){return Vo(e)&&Ho(e.length)&&!!Ue[dr(e)]};var Qo=Pi(Mr),es=Pi((function(e,t){return e<=t}));function ts(e){if(!e)return[];if(To(e))return Yo(e)?Kt(e):yi(e);if(Xe&&e[Xe])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Xe]());var t=na(e);return(t==v?Ut:t==b?zt:Os)(e)}function ns(e){return e?(e=as(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function rs(e){var t=ns(e),n=t%1;return t==t?n?t-n:t:0}function is(e){return e?Gn(rs(e),0,4294967295):0}function as(e){if("number"==typeof e)return e;if(Zo(e))return NaN;if(zo(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=zo(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(J,"");var n=ae.test(e);return n||se.test(e)?Ve(e.slice(2),n?2:8):ie.test(e)?NaN:+e}function os(e){return gi(e,ws(e))}function ss(e){return null==e?"":Zr(e)}var cs=ki((function(e,t){if(fa(t)||To(t))gi(t,ks(t),e);else for(var n in t)$e.call(t,n)&&zn(e,n,t[n])})),us=ki((function(e,t){gi(t,ws(t),e)})),ls=ki((function(e,t,n,r){gi(t,ws(t),e,r)})),fs=ki((function(e,t,n,r){gi(t,ks(t),e,r)})),ps=Vi(Jn);var ds=Nr((function(e,t){e=ve(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&sa(t[0],t[1],i)&&(r=1);++n1),t})),gi(e,Ki(e),n),r&&(n=Yn(n,7,Hi));for(var i=t.length;i--;)Qr(n,t[i]);return n}));var _s=Vi((function(e,t){return null==e?{}:function(e,t){return Rr(e,t,(function(t,n){return ms(e,n)}))}(e,t)}));function Ms(e,t){if(null==e)return{};var n=dt(Ki(e),(function(e){return[e]}));return t=Yi(t),Rr(e,n,(function(e,n){return t(e,n[0])}))}var Cs=Ni(ks),As=Ni(ws);function Os(e){return null==e?[]:Et(e,ks(e))}var Is=$i((function(e,t,n){return t=t.toLowerCase(),e+(n?Es(t):t)}));function Es(e){return Ls(ss(e).toLowerCase())}function Ds(e){return(e=ss(e))&&e.replace(ue,jt).replace(Re,"")}var Rs=$i((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),Ps=$i((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Ts=Si("toLowerCase");var js=$i((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var Fs=$i((function(e,t,n){return e+(n?" ":"")+Ls(t)}));var Ns=$i((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Ls=Si("toUpperCase");function Us(e,t,n){return e=ss(e),void 0===(t=n?void 0:t)?function(e){return Fe.test(e)}(e)?function(e){return e.match(Te)||[]}(e):function(e){return e.match(ee)||[]}(e):e.match(t)||[]}var Bs=Nr((function(e,t){try{return at(e,void 0,t)}catch(e){return Lo(e)?e:new pe(e)}})),Hs=Vi((function(e,t){return st(t,(function(t){t=_a(t),qn(e,t,go(e[t],e))})),e}));function zs(e){return function(){return e}}var Vs=Ci(),Ws=Ci(!0);function Ks(e){return e}function qs(e){return Sr("function"==typeof e?e:Yn(e,1))}var Js=Nr((function(e,t){return function(n){return gr(n,e,t)}})),Gs=Nr((function(e,t){return function(n){return gr(e,n,t)}}));function Ys(e,t,n){var r=ks(t),i=lr(t,r);null!=n||zo(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=lr(t,ks(t)));var a=!(zo(n)&&"chain"in n&&!n.chain),o=Uo(e);return st(i,(function(n){var r=t[n];e[n]=r,o&&(e.prototype[n]=function(){var t=this.__chain__;if(a||t){var n=e(this.__wrapped__),i=n.__actions__=yi(this.__actions__);return i.push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,ht([this.value()],arguments))})})),e}function Zs(){}var Xs=Ei(dt),Qs=Ei(ut),ec=Ei(yt);function tc(e){return ca(e)?_t(_a(e)):function(e){return function(t){return fr(t,e)}}(e)}var nc=Ri(),rc=Ri(!0);function ic(){return[]}function ac(){return!1}var oc=Ii((function(e,t){return e+t}),0),sc=ji("ceil"),cc=Ii((function(e,t){return e/t}),1),uc=ji("floor");var lc,fc=Ii((function(e,t){return e*t}),1),pc=ji("round"),dc=Ii((function(e,t){return e-t}),0);return An.after=function(e,t){if("function"!=typeof t)throw new ge(a);return e=rs(e),function(){if(--e<1)return t.apply(this,arguments)}},An.ary=mo,An.assign=cs,An.assignIn=us,An.assignInWith=ls,An.assignWith=fs,An.at=ps,An.before=yo,An.bind=go,An.bindAll=Hs,An.bindKey=bo,An.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Ro(e)?e:[e]},An.chain=eo,An.chunk=function(e,t,n){t=(n?sa(e,t,n):void 0===t)?1:on(rs(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var a=0,o=0,s=r(Xt(i/t));ai?0:i+n),(r=void 0===r||r>i?i:rs(r))<0&&(r+=i),r=n>r?0:is(r);n>>0)?(e=ss(e))&&("string"==typeof t||null!=t&&!Jo(t))&&!(t=Zr(t))&&Lt(e)?ui(Kt(e),0,n):e.split(t,n):[]},An.spread=function(e,t){if("function"!=typeof e)throw new ge(a);return t=null==t?0:on(rs(t),0),Nr((function(n){var r=n[t],i=ui(n,0,t);return r&&ht(i,r),at(e,this,i)}))},An.tail=function(e){var t=null==e?0:e.length;return t?Wr(e,1,t):[]},An.take=function(e,t,n){return e&&e.length?Wr(e,0,(t=n||void 0===t?1:rs(t))<0?0:t):[]},An.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?Wr(e,(t=r-(t=n||void 0===t?1:rs(t)))<0?0:t,r):[]},An.takeRightWhile=function(e,t){return e&&e.length?ti(e,Yi(t,3),!1,!0):[]},An.takeWhile=function(e,t){return e&&e.length?ti(e,Yi(t,3)):[]},An.tap=function(e,t){return t(e),e},An.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new ge(a);return zo(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),ko(e,t,{leading:r,maxWait:t,trailing:i})},An.thru=to,An.toArray=ts,An.toPairs=Cs,An.toPairsIn=As,An.toPath=function(e){return Ro(e)?dt(e,_a):Zo(e)?[e]:yi($a(ss(e)))},An.toPlainObject=os,An.transform=function(e,t,n){var r=Ro(e),i=r||Fo(e)||Xo(e);if(t=Yi(t,4),null==n){var a=e&&e.constructor;n=i?r?new a:[]:zo(e)&&Uo(a)?On(We(e)):{}}return(i?st:cr)(e,(function(e,r,i){return t(n,e,r,i)})),n},An.unary=function(e){return mo(e,1)},An.union=za,An.unionBy=Va,An.unionWith=Wa,An.uniq=function(e){return e&&e.length?Xr(e):[]},An.uniqBy=function(e,t){return e&&e.length?Xr(e,Yi(t,2)):[]},An.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Xr(e,void 0,t):[]},An.unset=function(e,t){return null==e||Qr(e,t)},An.unzip=Ka,An.unzipWith=qa,An.update=function(e,t,n){return null==e?e:ei(e,t,oi(n))},An.updateWith=function(e,t,n,r){return r="function"==typeof r?r:void 0,null==e?e:ei(e,t,oi(n),r)},An.values=Os,An.valuesIn=function(e){return null==e?[]:Et(e,ws(e))},An.without=Ja,An.words=Us,An.wrap=function(e,t){return Mo(oi(t),e)},An.xor=Ga,An.xorBy=Ya,An.xorWith=Za,An.zip=Xa,An.zipObject=function(e,t){return ii(e||[],t||[],zn)},An.zipObjectDeep=function(e,t){return ii(e||[],t||[],Br)},An.zipWith=Qa,An.entries=Cs,An.entriesIn=As,An.extend=us,An.extendWith=ls,Ys(An,An),An.add=oc,An.attempt=Bs,An.camelCase=Is,An.capitalize=Es,An.ceil=sc,An.clamp=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=as(n))==n?n:0),void 0!==t&&(t=(t=as(t))==t?t:0),Gn(as(e),t,n)},An.clone=function(e){return Yn(e,4)},An.cloneDeep=function(e){return Yn(e,5)},An.cloneDeepWith=function(e,t){return Yn(e,5,t="function"==typeof t?t:void 0)},An.cloneWith=function(e,t){return Yn(e,4,t="function"==typeof t?t:void 0)},An.conformsTo=function(e,t){return null==t||Zn(e,t,ks(t))},An.deburr=Ds,An.defaultTo=function(e,t){return null==e||e!=e?t:e},An.divide=cc,An.endsWith=function(e,t,n){e=ss(e),t=Zr(t);var r=e.length,i=n=void 0===n?r:Gn(rs(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},An.eq=Oo,An.escape=function(e){return(e=ss(e))&&L.test(e)?e.replace(F,Ft):e},An.escapeRegExp=function(e){return(e=ss(e))&&q.test(e)?e.replace(K,"\\$&"):e},An.every=function(e,t,n){var r=Ro(e)?ut:nr;return n&&sa(e,t,n)&&(t=void 0),r(e,Yi(t,3))},An.find=io,An.findIndex=Ea,An.findKey=function(e,t){return bt(e,Yi(t,3),cr)},An.findLast=ao,An.findLastIndex=Da,An.findLastKey=function(e,t){return bt(e,Yi(t,3),ur)},An.floor=uc,An.forEach=oo,An.forEachRight=so,An.forIn=function(e,t){return null==e?e:or(e,Yi(t,3),ws)},An.forInRight=function(e,t){return null==e?e:sr(e,Yi(t,3),ws)},An.forOwn=function(e,t){return e&&cr(e,Yi(t,3))},An.forOwnRight=function(e,t){return e&&ur(e,Yi(t,3))},An.get=vs,An.gt=Io,An.gte=Eo,An.has=function(e,t){return null!=e&&ra(e,t,vr)},An.hasIn=ms,An.head=Pa,An.identity=Ks,An.includes=function(e,t,n,r){e=To(e)?e:Os(e),n=n&&!r?rs(n):0;var i=e.length;return n<0&&(n=on(i+n,0)),Yo(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&wt(e,t,n)>-1},An.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:rs(n);return i<0&&(i=on(r+i,0)),wt(e,t,i)},An.inRange=function(e,t,n){return t=ns(t),void 0===n?(n=t,t=0):n=ns(n),function(e,t,n){return e>=sn(t,n)&&e=-9007199254740991&&e<=9007199254740991},An.isSet=Go,An.isString=Yo,An.isSymbol=Zo,An.isTypedArray=Xo,An.isUndefined=function(e){return void 0===e},An.isWeakMap=function(e){return Vo(e)&&na(e)==x},An.isWeakSet=function(e){return Vo(e)&&"[object WeakSet]"==dr(e)},An.join=function(e,t){return null==e?"":rn.call(e,t)},An.kebabCase=Rs,An.last=Na,An.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=rs(n))<0?on(r+i,0):sn(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):kt(e,St,i,!0)},An.lowerCase=Ps,An.lowerFirst=Ts,An.lt=Qo,An.lte=es,An.max=function(e){return e&&e.length?rr(e,Ks,hr):void 0},An.maxBy=function(e,t){return e&&e.length?rr(e,Yi(t,2),hr):void 0},An.mean=function(e){return $t(e,Ks)},An.meanBy=function(e,t){return $t(e,Yi(t,2))},An.min=function(e){return e&&e.length?rr(e,Ks,Mr):void 0},An.minBy=function(e,t){return e&&e.length?rr(e,Yi(t,2),Mr):void 0},An.stubArray=ic,An.stubFalse=ac,An.stubObject=function(){return{}},An.stubString=function(){return""},An.stubTrue=function(){return!0},An.multiply=fc,An.nth=function(e,t){return e&&e.length?Er(e,rs(t)):void 0},An.noConflict=function(){return qe._===this&&(qe._=Oe),this},An.noop=Zs,An.now=vo,An.pad=function(e,t,n){e=ss(e);var r=(t=rs(t))?Wt(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Di(Qt(i),n)+e+Di(Xt(i),n)},An.padEnd=function(e,t,n){e=ss(e);var r=(t=rs(t))?Wt(e):0;return t&&rt){var r=e;e=t,t=r}if(n||e%1||t%1){var i=ln();return sn(e+i*(t-e+ze("1e-"+((i+"").length-1))),t)}return jr(e,t)},An.reduce=function(e,t,n){var r=Ro(e)?vt:Ct,i=arguments.length<3;return r(e,Yi(t,4),n,i,er)},An.reduceRight=function(e,t,n){var r=Ro(e)?mt:Ct,i=arguments.length<3;return r(e,Yi(t,4),n,i,tr)},An.repeat=function(e,t,n){return t=(n?sa(e,t,n):void 0===t)?1:rs(t),Fr(ss(e),t)},An.replace=function(){var e=arguments,t=ss(e[0]);return e.length<3?t:t.replace(e[1],e[2])},An.result=function(e,t,n){var r=-1,i=(t=si(t,e)).length;for(i||(i=1,e=void 0);++r9007199254740991)return[];var n=4294967295,r=sn(e,4294967295);e-=4294967295;for(var i=Ot(r,t=Yi(t));++n=a)return e;var s=n-Wt(r);if(s<1)return r;var c=o?ui(o,0,s).join(""):e.slice(0,s);if(void 0===i)return c+r;if(o&&(s+=c.length-s),Jo(i)){if(e.slice(s).search(i)){var u,l=c;for(i.global||(i=me(i.source,ss(re.exec(i))+"g")),i.lastIndex=0;u=i.exec(l);)var f=u.index;c=c.slice(0,void 0===f?s:f)}}else if(e.indexOf(Zr(i),s)!=s){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+r},An.unescape=function(e){return(e=ss(e))&&N.test(e)?e.replace(j,qt):e},An.uniqueId=function(e){var t=++_e;return ss(e)+t},An.upperCase=Ns,An.upperFirst=Ls,An.each=oo,An.eachRight=so,An.first=Pa,Ys(An,(lc={},cr(An,(function(e,t){$e.call(An.prototype,t)||(lc[t]=e)})),lc),{chain:!1}),An.VERSION="4.17.19",st(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){An[e].placeholder=An})),st(["drop","take"],(function(e,t){Dn.prototype[e]=function(n){n=void 0===n?1:on(rs(n),0);var r=this.__filtered__&&!t?new Dn(this):this.clone();return r.__filtered__?r.__takeCount__=sn(n,r.__takeCount__):r.__views__.push({size:sn(n,4294967295),type:e+(r.__dir__<0?"Right":"")}),r},Dn.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),st(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;Dn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Yi(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),st(["head","last"],(function(e,t){var n="take"+(t?"Right":"");Dn.prototype[e]=function(){return this[n](1).value()[0]}})),st(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");Dn.prototype[e]=function(){return this.__filtered__?new Dn(this):this[n](1)}})),Dn.prototype.compact=function(){return this.filter(Ks)},Dn.prototype.find=function(e){return this.filter(e).head()},Dn.prototype.findLast=function(e){return this.reverse().find(e)},Dn.prototype.invokeMap=Nr((function(e,t){return"function"==typeof e?new Dn(this):this.map((function(n){return gr(n,e,t)}))})),Dn.prototype.reject=function(e){return this.filter($o(Yi(e)))},Dn.prototype.slice=function(e,t){e=rs(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Dn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=rs(t))<0?n.dropRight(-t):n.take(t-e)),n)},Dn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Dn.prototype.toArray=function(){return this.take(4294967295)},cr(Dn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=An[r?"take"+("last"==t?"Right":""):t],a=r||/^find/.test(t);i&&(An.prototype[t]=function(){var t=this.__wrapped__,o=r?[1]:arguments,s=t instanceof Dn,c=o[0],u=s||Ro(t),l=function(e){var t=i.apply(An,ht([e],o));return r&&f?t[0]:t};u&&n&&"function"==typeof c&&1!=c.length&&(s=u=!1);var f=this.__chain__,p=!!this.__actions__.length,d=a&&!f,h=s&&!p;if(!a&&u){t=h?t:new Dn(this);var v=e.apply(t,o);return v.__actions__.push({func:to,args:[l],thisArg:void 0}),new En(v,f)}return d&&h?e.apply(this,o):(v=this.thru(l),d?r?v.value()[0]:v.value():v)})})),st(["pop","push","shift","sort","splice","unshift"],(function(e){var t=be[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);An.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Ro(i)?i:[],e)}return this[n]((function(n){return t.apply(Ro(n)?n:[],e)}))}})),cr(Dn.prototype,(function(e,t){var n=An[t];if(n){var r=n.name+"";$e.call(bn,r)||(bn[r]=[]),bn[r].push({name:t,func:n})}})),bn[Ai(void 0,2).name]=[{name:"wrapper",func:void 0}],Dn.prototype.clone=function(){var e=new Dn(this.__wrapped__);return e.__actions__=yi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=yi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=yi(this.__views__),e},Dn.prototype.reverse=function(){if(this.__filtered__){var e=new Dn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Dn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Ro(e),r=t<0,i=n?e.length:0,a=function(e,t,n){var r=-1,i=n.length;for(;++r=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},An.prototype.plant=function(e){for(var t,n=this;n instanceof In;){var r=Ca(n);r.__index__=0,r.__values__=void 0,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},An.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Dn){var t=e;return this.__actions__.length&&(t=new Dn(this)),(t=t.reverse()).__actions__.push({func:to,args:[Ha],thisArg:void 0}),new En(t,this.__chain__)}return this.thru(Ha)},An.prototype.toJSON=An.prototype.valueOf=An.prototype.value=function(){return ni(this.__wrapped__,this.__actions__)},An.prototype.first=An.prototype.head,Xe&&(An.prototype[Xe]=function(){return this}),An}();qe._=Jt,void 0===(i=function(){return Jt}.call(t,n,t,r))||(r.exports=i)}).call(this)}).call(this,n(51),n(52)(e))},function(e,t,n){"use strict";var r=Object.prototype.hasOwnProperty;function i(e,t){return Array.isArray(e)?function(e,t){for(var n,r="",a="",o=Array.isArray(t),s=0;s]/;function c(e){var t=""+e,n=s.exec(t);if(!n)return e;var r,i,a,o="";for(r=n.index,i=0;r ":" ")+n+"| "+e})).join("\n");throw t.path=r,t.message=(r||"Pug")+":"+i+"\n"+o+"\n\n"+t.message,t}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){var r=n(73);function i(t,n,a){return"undefined"!=typeof Reflect&&Reflect.get?e.exports=i=Reflect.get:e.exports=i=function(e,t,n){var i=r(e,t);if(i){var a=Object.getOwnPropertyDescriptor(i,t);return a.get?a.get.call(n):a.value}},i(t,n,a||t)}e.exports=i},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){function n(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=n=function(e){return typeof e}:e.exports=n=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(t)}e.exports=n},function(e,t,n){var r;window,r=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";function r(e,t){for(var n=0;n\n

").concat(e.text,"
\n \n ")}(e,t)})).join("");return"\n
\n ".concat(e,"\n
\n ")}},{key:"templateString",value:function(){var e=this.buttonsString(),t=this.title?"
".concat(this.title,"
"):"",n=this.text?"

".concat(this.text,"

"):"";return'\n
\n
\n
\n
\n
\n
\n
\n '.concat(t,'\n\n
\n ').concat(n,"\n
\n\n
\n ").concat(e,"\n
\n
\n
\n
\n
\n
\n
\n ")}},{key:"dismiss",value:function(){this.onElement.removeChild(this.element),document.removeEventListener("keyup",this.keyupListener)}},{key:"primaryButton",value:function(){var e=this.buttons.find((function(e){return!0===e.primary}));return e||(e=this.buttons[this.buttons.length-1]),e}},{key:"present",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.onElement;n||(n=document.body),this.onElement=n,this.element=document.createElement("div"),this.element.className="sn-component",this.element.innerHTML=this.templateString().trim(),document.addEventListener("keyup",this.keyupListener),this.buttons.forEach((function(t,n){e.element.querySelector("#button-".concat(n)).onclick=function(){t.action&&t.action(),e.dismiss()}})),n.appendChild(this.element)}}])&&r(t.prototype,n),i&&r(t,i),e}();n.d(t,"SKAlert",(function(){return i}))}])},e.exports=r()},function(e,t,n){var r=n(48);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(50);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(53);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(54);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(55);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(56);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(57);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(58);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(59);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(60);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(61);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(62);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(63);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(64);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(65);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(66);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(67);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(68);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(69);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(70);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(71);e.exports=(r.default||r).apply(r,[])},function(e,t,n){var r=n(72);e.exports=(r.default||r).apply(r,[])},function(e,t,n){},function(e,t,n){},function(e,t){ +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=226)}([function(e,t,n){e.exports=n(102)},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){window,e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=141)}([function(e,t,n){e.exports=n(142)},function(e,t,n){"use strict";(function(e){n.d(t,"m",(function(){return m})),n.d(t,"i",(function(){return I})),n.d(t,"t",(function(){return w})),n.d(t,"r",(function(){return C})),n.d(t,"l",(function(){return B})),n.d(t,"D",(function(){return E})),n.d(t,"f",(function(){return k})),n.d(t,"q",(function(){return _})),n.d(t,"o",(function(){return S})),n.d(t,"p",(function(){return Q})),n.d(t,"s",(function(){return x})),n.d(t,"n",(function(){return D})),n.d(t,"J",(function(){return P})),n.d(t,"K",(function(){return M})),n.d(t,"w",(function(){return F})),n.d(t,"j",(function(){return O})),n.d(t,"G",(function(){return R})),n.d(t,"B",(function(){return T})),n.d(t,"b",(function(){return j})),n.d(t,"k",(function(){return H})),n.d(t,"c",(function(){return N})),n.d(t,"e",(function(){return U})),n.d(t,"C",(function(){return L})),n.d(t,"d",(function(){return K})),n.d(t,"x",(function(){return G})),n.d(t,"F",(function(){return $})),n.d(t,"H",(function(){return Y})),n.d(t,"v",(function(){return J})),n.d(t,"z",(function(){return V})),n.d(t,"y",(function(){return z})),n.d(t,"u",(function(){return q})),n.d(t,"a",(function(){return W})),n.d(t,"h",(function(){return X})),n.d(t,"A",(function(){return Z})),n.d(t,"g",(function(){return ee})),n.d(t,"I",(function(){return te})),n.d(t,"E",(function(){return ne}));var r=n(0),i=n.n(r),a=n(42),o=n.n(a),s=n(38),c=n.n(s),u=n(34),l=n.n(u),f=n(139),A=n.n(f),h=n(140),p=n.n(h),d=n(55),g=n.n(d);function y(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function v(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){y(a,r,i,o,s,"next",e)}function s(e){y(a,r,i,o,s,"throw",e)}o(void 0)}))}}function b(e){return(b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function m(){return"undefined"!=typeof window?window:void 0!==e?e:null}function I(e){return Object.keys(e).map((function(t){return e[t]}))}function w(){return null!==m()&&!(document&&document.documentMode)||/Edge/.test(navigator.userAgent)&&window.crypto&&!!window.crypto.subtle}function C(){return"undefined"!=typeof navigator&&"ReactNative"===navigator.product}function B(e,t,n){return e.find((function(e){return e[t]===n}))}function E(e,t){return c()(e,t)}function k(){for(var e=[],t=arguments.length,n=new Array(t),r=0;rt?e:t}function P(e,t,n){return p()(e.concat(t),(function(e,t){var r=!0,i=!1,a=void 0;try{for(var o,s=n[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var c=o.value;if(e[c]!==t[c])return!1}}catch(e){i=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return!0}))}function M(e){return g()(e)}function F(e){return e[e.length-1]}function O(e,t){var n=!0,r=!1,i=void 0;try{for(var a,o=t[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;e.push(s)}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}function R(e,t){var n=!0,r=!1,i=void 0;try{for(var a,o=t[Symbol.iterator]();!(n=(a=o.next()).done);n=!0)T(e,a.value)}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}function T(e,t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}function j(e,t){e.includes(t)||e.push(t)}function H(e,t){o()(e,t)}function N(e,t){return e.filter((function(e){return!t.includes(e)})).concat(t.filter((function(t){return!e.includes(t)})))}function U(e,t){return!(e&&!t||!e&&t)&&(e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():e instanceof String&&t instanceof String?e===t:Y(e,t))}function L(e,t){e.splice(t,1)}function K(e,t){var n=e.slice();return L(n,t),n}function G(e){for(var t=[],n=0,r=Object.keys(e);n0}},{key:"canDecryptWithKey",value:(N=b(c.a.mark((function e(t){var n,r;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=this.values[o.Wrapped],e.next=3,this.decryptWrappedValue(n,t);case 3:return r=e.sent,e.abrupt("return",!r.errorDecrypting);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return N.apply(this,arguments)})},{key:"decryptWrappedValue",value:(H=b(c.a.mark((function e(t,n){var r,i;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.content_type){e.next=2;break}throw"Attempting to decrypt nonexistent wrapped value";case 2:return r=Object(f.e)(t,{content_type:p.a.EncryptedStorage}),e.next=5,this.encryptionDelegate.payloadByDecryptingPayload(r,n);case 5:return i=e.sent,e.abrupt("return",i);case 7:case"end":return e.stop()}}),e,this)}))),function(e,t){return H.apply(this,arguments)})},{key:"decryptStorage",value:(j=b(c.a.mark((function e(){var t,n;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.values[o.Wrapped],e.next=3,this.decryptWrappedValue(t);case 3:if(!(n=e.sent).errorDecrypting){e.next=6;break}throw"Unable to decrypt storage.";case 6:this.values[o.Unwrapped]=Object(d.a)(n.contentObject),delete this.values[o.Wrapped];case 8:case"end":return e.stop()}}),e,this)}))),function(){return j.apply(this,arguments)})},{key:"generatePersistenceValue",value:(T=b(c.a.mark((function e(){var t,n,r,i;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=Object.assign({},this.values),n=t[o.Unwrapped],e.t0=f.e,e.next=5,g.a.GenerateUuid();case 5:return e.t1=e.sent,e.t2=n,e.t3=p.a.EncryptedStorage,e.t4={uuid:e.t1,content:e.t2,content_type:e.t3},r=(0,e.t0)(e.t4),e.next=12,this.encryptionDelegate.payloadByEncryptingPayload(r,A.a.LocalStoragePreferEncrypted);case 12:return i=e.sent,t[o.Wrapped]=i.ejected(),t[o.Unwrapped]=void 0,e.abrupt("return",t);case 16:case"end":return e.stop()}}),e,this)}))),function(){return T.apply(this,arguments)})},{key:"repersistToDisk",value:(R=b(c.a.mark((function e(){var t=this;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.storagePersistable){e.next=2;break}return e.abrupt("return");case 2:if(this.persistencePolicy!==r.Ephemeral){e.next=4;break}return e.abrupt("return");case 4:return e.abrupt("return",this.executeCriticalFunction(b(c.a.mark((function e(){var n;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.generatePersistenceValue();case 2:return n=e.sent,t.values[o.Wrapped]=n[o.Wrapped],e.abrupt("return",t.deviceInterface.setRawStorageValue(t.getPersistenceKey(),JSON.stringify(n)));case 5:case"end":return e.stop()}}),e)})))));case 5:case"end":return e.stop()}}),e,this)}))),function(){return R.apply(this,arguments)})},{key:"setValue",value:(O=b(c.a.mark((function e(t,n){var r,i=arguments;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=i.length>2&&void 0!==i[2]?i[2]:a.Default,this.values){e.next=3;break}throw"Attempting to set storage key ".concat(t," before loading local storage.");case 3:return this.values[this.domainKeyForMode(r)][t]=n,e.abrupt("return",this.repersistToDisk());case 5:case"end":return e.stop()}}),e,this)}))),function(e,t){return O.apply(this,arguments)})},{key:"getValue",value:(F=b(c.a.mark((function e(t){var n,r=arguments;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.length>1&&void 0!==r[1]?r[1]:a.Default,this.values){e.next=3;break}throw"Attempting to get storage key ".concat(t," before loading local storage.");case 3:if(this.values[this.domainKeyForMode(n)]){e.next=5;break}throw"Storage domain mode not available ".concat(n," for key ").concat(t);case 5:return e.abrupt("return",this.values[this.domainKeyForMode(n)][t]);case 6:case"end":return e.stop()}}),e,this)}))),function(e){return F.apply(this,arguments)})},{key:"removeValue",value:(M=b(c.a.mark((function e(t){var n,r=arguments;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.length>1&&void 0!==r[1]?r[1]:a.Default,this.values){e.next=3;break}throw"Attempting to remove storage key ".concat(t," before loading local storage.");case 3:return delete this.values[this.domainKeyForMode(n)][t],e.abrupt("return",this.repersistToDisk());case 5:case"end":return e.stop()}}),e,this)}))),function(e){return M.apply(this,arguments)})},{key:"getPersistenceKey",value:function(){return Object(u.c)(this.namespace,u.a.StorageObject)}},{key:"defaultValuesObject",value:function(e,n,r){return t.defaultValuesObject(e,n,r)}},{key:"domainKeyForMode",value:function(e){if(e===a.Default)return o.Unwrapped;if(e===a.Nonwrapped)return o.Nonwrapped;throw"Invalid mode"}},{key:"clearValues",value:(P=b(c.a.mark((function e(){return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.setInitialValues(),e.next=3,this.repersistToDisk();case 3:case"end":return e.stop()}}),e,this)}))),function(){return P.apply(this,arguments)})},{key:"getAllRawPayloads",value:(D=b(c.a.mark((function e(){return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.deviceInterface.getAllRawDatabasePayloads());case 1:case"end":return e.stop()}}),e,this)}))),function(){return D.apply(this,arguments)})},{key:"savePayload",value:(x=b(c.a.mark((function e(t){return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.savePayloads([t]));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return x.apply(this,arguments)})},{key:"savePayloads",value:(Q=b(c.a.mark((function e(t){var n,a,o,s,u,l,f,h,p=this;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.persistencePolicy!==r.Ephemeral){e.next=2;break}return e.abrupt("return");case 2:n=[],a=!0,o=!1,s=void 0,e.prev=6,u=t[Symbol.iterator]();case 8:if(a=(l=u.next()).done){e.next=24;break}if(!(f=l.value).discardable){e.next=15;break}return e.next=13,this.deletePayloadWithId(f.uuid);case 13:e.next=21;break;case 15:if(f.uuid){e.next=17;break}throw Error("Attempting to persist payload with no uuid");case 17:return e.next=19,this.encryptionDelegate.payloadByEncryptingPayload(f,this.encryptionPolicy===i.Default?A.a.LocalStoragePreferEncrypted:A.a.LocalStorageDecrypted);case 19:h=e.sent,n.push(h.ejected());case 21:a=!0,e.next=8;break;case 24:e.next=30;break;case 26:e.prev=26,e.t0=e.catch(6),o=!0,s=e.t0;case 30:e.prev=30,e.prev=31,a||null==u.return||u.return();case 33:if(e.prev=33,!o){e.next=36;break}throw s;case 36:return e.finish(33);case 37:return e.finish(30);case 38:return e.abrupt("return",this.executeCriticalFunction(b(c.a.mark((function e(){return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",p.deviceInterface.saveRawDatabasePayloads(n));case 1:case"end":return e.stop()}}),e)})))));case 39:case"end":return e.stop()}}),e,this,[[6,26,30,38],[31,,33,37]])}))),function(e){return Q.apply(this,arguments)})},{key:"deletePayloads",value:(S=b(c.a.mark((function e(t){var n,r,i,a,o,s;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=!0,r=!1,i=void 0,e.prev=3,a=t[Symbol.iterator]();case 5:if(n=(o=a.next()).done){e.next=12;break}return s=o.value,e.next=9,this.deletePayloadWithId(s.uuid);case 9:n=!0,e.next=5;break;case 12:e.next=18;break;case 14:e.prev=14,e.t0=e.catch(3),r=!0,i=e.t0;case 18:e.prev=18,e.prev=19,n||null==a.return||a.return();case 21:if(e.prev=21,!r){e.next=24;break}throw i;case 24:return e.finish(21);case 25:return e.finish(18);case 26:case"end":return e.stop()}}),e,this,[[3,14,18,26],[19,,21,25]])}))),function(e){return S.apply(this,arguments)})},{key:"deletePayloadWithId",value:(_=b(c.a.mark((function e(t){var n=this;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.executeCriticalFunction(b(c.a.mark((function e(){return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",n.deviceInterface.removeRawDatabasePayloadWithId(t));case 1:case"end":return e.stop()}}),e)})))));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return _.apply(this,arguments)})},{key:"clearAllPayloads",value:(k=b(c.a.mark((function e(){var t=this;return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.executeCriticalFunction(b(c.a.mark((function e(){return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",t.deviceInterface.removeAllRawDatabasePayloads());case 1:case"end":return e.stop()}}),e)})))));case 1:case"end":return e.stop()}}),e,this)}))),function(){return k.apply(this,arguments)})},{key:"clearAllData",value:(v=b(c.a.mark((function e(){return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",Promise.all([this.clearValues(),this.clearAllPayloads()]));case 1:case"end":return e.stop()}}),e,this)}))),function(){return v.apply(this,arguments)})}],h=[{key:"defaultValuesObject",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return E(e={},o.Wrapped,t),E(e,o.Unwrapped,n),E(e,o.Nonwrapped,r),e}}],s&&m(n.prototype,s),h&&m(n,h),t}(h.a)},function(e,t,n){"use strict";function r(e,t){for(var n=0;n1?t-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0,r=new t;return r.source=n,e.length>0&&r.set(e),Object.freeze(r),r}},{key:"FromCollection",value:function(e){var n=new t(!0,Object.freeze(Object.assign({},e.map)),Object.freeze(Object.assign({},e.typedMap)),Object.freeze(e.referenceMap.makeCopy()),Object.freeze(e.conflictMap.makeCopy()));return Object.freeze(n),n}}],(r=[{key:"payloads",get:function(){return this.all()}}])&&a(n.prototype,r),f&&a(n,f),t}(n(41).a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"c",(function(){return o}));var r,i=n(10);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){var t;return(t={},a(t,i.a.FullSyncCompleted,r.CompletedFullSync),a(t,i.a.SingleSyncCompleted,r.CompletedIncrementalSync),a(t,i.a.SyncError,r.FailedSync),a(t,i.a.SyncTakingTooLong,r.HighLatencySync),a(t,i.a.EnterOutOfSync,r.EnteredOutOfSync),a(t,i.a.ExitOutOfSync,r.ExitedOutOfSync),a(t,i.a.LocalDataLoaded,r.LocalDataLoaded),a(t,i.a.MajorDataChange,r.MajorDataChange),a(t,i.a.LocalDataIncrementalLoad,r.LocalDataIncrementalLoad),a(t,i.a.StatusChanged,r.SyncStatusChanged),a(t,i.a.SyncWillBegin,r.WillSync),a(t,i.a.InvalidSession,r.InvalidSyncSession),a(t,i.a.DatabaseReadError,r.LocalDatabaseReadError),a(t,i.a.DatabaseWriteError,r.LocalDatabaseWriteError),t)[e]}n.d(t,"b",(function(){return i.a})),function(e){e[e.SignedIn=2]="SignedIn",e[e.SignedOut=3]="SignedOut",e[e.CompletedFullSync=5]="CompletedFullSync",e[e.FailedSync=6]="FailedSync",e[e.HighLatencySync=7]="HighLatencySync",e[e.EnteredOutOfSync=8]="EnteredOutOfSync",e[e.ExitedOutOfSync=9]="ExitedOutOfSync",e[e.Started=10]="Started",e[e.Launched=11]="Launched",e[e.LocalDataLoaded=12]="LocalDataLoaded",e[e.KeyStatusChanged=13]="KeyStatusChanged",e[e.MajorDataChange=14]="MajorDataChange",e[e.CompletedRestart=15]="CompletedRestart",e[e.LocalDataIncrementalLoad=16]="LocalDataIncrementalLoad",e[e.SyncStatusChanged=17]="SyncStatusChanged",e[e.WillSync=18]="WillSync",e[e.InvalidSyncSession=19]="InvalidSyncSession",e[e.LocalDatabaseReadError=20]="LocalDatabaseReadError",e[e.LocalDatabaseWriteError=21]="LocalDatabaseWriteError",e[e.CompletedIncrementalSync=22]="CompletedIncrementalSync"}(r||(r={}))},function(e,t,n){"use strict";var r;n.d(t,"a",(function(){return r})),function(e){e[e.PreparingForLaunch_0=0]="PreparingForLaunch_0",e[e.ReadyForLaunch_05=.5]="ReadyForLaunch_05",e[e.StorageDecrypted_09=.9]="StorageDecrypted_09",e[e.Launched_10=1]="Launched_10",e[e.LoadingDatabase_11=1.1]="LoadingDatabase_11",e[e.LoadedDatabase_12=1.2]="LoadedDatabase_12",e[e.FullSyncCompleted_13=1.3]="FullSyncCompleted_13",e[e.SignedIn_30=3]="SignedIn_30"}(r||(r={}))},function(e,t,n){"use strict";var r;n.d(t,"a",(function(){return r})),function(e){e[e.KeepLeft=1]="KeepLeft",e[e.KeepRight=2]="KeepRight",e[e.KeepLeftDuplicateRight=3]="KeepLeftDuplicateRight",e[e.DuplicateLeftKeepRight=4]="DuplicateLeftKeepRight",e[e.KeepLeftMergeRefs=5]="KeepLeftMergeRefs"}(r||(r={}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(1);function i(e,t){for(var n=0;n"===t.operator?d>p:"<="===t.operator?d<=p:">="===t.operator?d>=p:"startsWith"===t.operator?d.startsWith(p):"in"===t.operator?-1!==p.indexOf(d):"includes"===t.operator?this.resolveIncludesPredicate(d,p):"matches"===t.operator&&new RegExp(p).test(d)}},{key:"resolveIncludesPredicate",value:function(t,n){if(Object(r.s)(n))return t.includes(n);var i;i=Array.isArray(n)?e.FromArray(n):n;var a=!0,o=!1,s=void 0;try{for(var c,u=t[Symbol.iterator]();!(a=(c=u.next()).done);a=!0){var l=c.value;if(this.ObjectSatisfiesPredicate(l,i))return!0}}catch(e){o=!0,s=e}finally{try{a||null==u.return||u.return()}finally{if(o)throw s}}return!1}},{key:"ItemSatisfiesPredicate",value:function(t,n){return Array.isArray(n)&&(n=e.FromArray(n)),this.ObjectSatisfiesPredicate(t,n)}},{key:"ItemSatisfiesPredicates",value:function(e,t){var n=!0,r=!1,i=void 0;try{for(var a,o=t[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(!this.ItemSatisfiesPredicate(e,s))return!1}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return!0}},{key:"DateFromString",value:function(e){var t=e.split("."),n=t[1],r=new Date,i=parseInt(t[0]);return"days"===n?r.setDate(r.getDate()-i):"hours"===n&&r.setHours(r.getHours()-i),r}}],(n=[{key:"isRecursive",value:function(){return["and","or"].includes(this.operator)}},{key:"arrayRepresentation",value:function(){return[this.keypath,this.operator,this.value]}},{key:"valueAsArray",value:function(){return this.value}}])&&i(t.prototype,n),o&&i(t,o),e}()},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i,a;function o(e){return{"mac-web":a.MacWeb,"mac-desktop":a.MacDesktop,"linux-web":a.LinuxWeb,"linux-desktop":a.LinuxDesktop,"windows-web":a.WindowsWeb,"windows-desktop":a.WindowsDesktop,ios:a.Ios,android:a.Android}[e]}function s(e){var t;return(r(t={},a.MacWeb,"mac-web"),r(t,a.MacDesktop,"mac-desktop"),r(t,a.LinuxWeb,"linux-web"),r(t,a.LinuxDesktop,"linux-desktop"),r(t,a.WindowsWeb,"windows-web"),r(t,a.WindowsDesktop,"windows-desktop"),r(t,a.Ios,"ios"),r(t,a.Android,"android"),t)[e]}function c(e){var t;return(r(t={},i.Web,"web"),r(t,i.Desktop,"desktop"),r(t,i.Mobile,"mobile"),t)[e]}function u(e){return e===i.Web||e===i.Desktop}function l(e){return e===i.Mobile}n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a})),n.d(t,"f",(function(){return o})),n.d(t,"g",(function(){return s})),n.d(t,"c",(function(){return c})),n.d(t,"e",(function(){return u})),n.d(t,"d",(function(){return l})),function(e){e[e.Web=1]="Web",e[e.Desktop=2]="Desktop",e[e.Mobile=3]="Mobile"}(i||(i={})),function(e){e[e.Ios=1]="Ios",e[e.Android=2]="Android",e[e.MacWeb=3]="MacWeb",e[e.MacDesktop=4]="MacDesktop",e[e.WindowsWeb=5]="WindowsWeb",e[e.WindowsDesktop=6]="WindowsDesktop",e[e.LinuxWeb=7]="LinuxWeb",e[e.LinuxDesktop=8]="LinuxDesktop"}(a||(a={}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return v}));var r=n(0),i=n.n(r),a=n(13),o=n(2),s=n(6),c=n(4),u=n(9),l=n(20);function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function A(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function p(e,t){for(var n=0;n=0?Object(r.y)(this.content,["pw_cost"]):this.content}},{key:"isKeyParamsObject",get:function(){return!0}},{key:"kdfIterations",get:function(){return this.content.pw_cost}},{key:"seed",get:function(){return this.content.pw_nonce}},{key:"identifier",get:function(){return this.content.identifier||this.content.email}},{key:"salt",get:function(){return this.content.pw_salt}},{key:"version",get:function(){return this.content.version}}])&&a(t.prototype,n),e}()},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){"use strict";var r;n.d(t,"a",(function(){return r})),function(e){e.LastSyncToken="sync_token",e.PaginationToken="cursor_token",e.IntegrityCheck="compute_integrity",e.IntegrityResult="integrity_hash",e.SyncDlLimit="limit",e.SyncPayloads="items",e.ApiVersion="api"}(r||(r={}))},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=n(112),a="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,o=i||a||Function("return this")();e.exports=o},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return d}));var r,i=n(41),a=n(1);function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n0&&this.filterSortElements(o)}}},{key:"displayElements",value:function(e){var t=this.sortedMap[e];if(!t)throw Error("Attempting to access display elements for \n non-configured content type ".concat(e));return t.slice()}},{key:"filterSortElements",value:function(e){if(0!==Object.keys(this.displaySortBy).length){var t=new Set,n=!0,r=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(n=(o=s.next()).done);n=!0){var c=o.value,u=c.content_type,l=this.displaySortBy[u];if(l){var f=this.displayFilter[u],A=this.filteredMap[u],h=this.sortedMap[u],p=!(c.deleted||!this.map[c.uuid])&&(!f||f(c)),d=A[c.uuid];if(p)if(Object(a.p)(d))h.push(c),t.add(u);else{var g=h[d],y=g[l.key],v=c[l.key];h[d]=c;var b=g.pinned!==c.pinned;Object(a.e)(y,v)&&!b||t.add(u)}else Object(a.p)(d)||(delete A[c.uuid],h[d]=void 0,t.add(u))}}}catch(e){r=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(r)throw i}}var m=!0,I=!1,w=void 0;try{for(var C,B=t.values()[Symbol.iterator]();!(m=(C=B.next()).done);m=!0){var E=C.value;this.resortContentType(E)}}catch(e){I=!0,w=e}finally{try{m||null==B.return||B.return()}finally{if(I)throw w}}}}},{key:"resortContentType",value:function(e){var t=this.sortedMap[e],n=this.displaySortBy[e],i=this.filteredMap[e],a=t.sort((function(e,t){return function e(t,i){var a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!t)return-1;if(!i)return 1;if(!a){if(t.pinned&&i.pinned)return e(t,i,!0);if(t.pinned)return-1;if(i.pinned)return 1}var o=t[n.key]||"",s=i[n.key]||"",c=1;if("asc"===n.dir&&(c*=-1),n.key===r.Title){if(o=o.toLowerCase(),s=s.toLowerCase(),0===o.length&&0===s.length)return 0;if(0===o.length&&0!==s.length)return 1*c;if(0!==o.length&&0===s.length)return-1*c;c*=-1}return o>s?-1*c:o5&&(e.receiver(a.a.SyncTakingTooLong),e.stopTimingMonitor())}),500)}},{key:"stopTimingMonitor",value:function(){Object.prototype.hasOwnProperty.call(this.interval,"cancel")?this.interval.cancel(this.timingMonitor):clearInterval(this.timingMonitor),this.timingMonitor=null}},{key:"hasError",value:function(){return!!this.error}},{key:"setError",value:function(e){this.error=e}},{key:"clearError",value:function(){this.error=null}},{key:"reset",value:function(){this.downloaded=0,this.completedUpload=0,this.totalUpload=0,this.inProgress=!1,this.syncing=!1,this.error=null,this.stopTimingMonitor(),this.receiver(a.a.StatusChanged)}},{key:"syncInProgress",get:function(){return!0===this.syncing}},{key:"secondsSinceSyncStart",get:function(){return((new Date).getTime()-this.syncStart.getTime())/1e3}}])&&f(t.prototype,n),e}();function p(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function d(e,t){for(var n=0;n=this.maxDiscordance&&!this.outOfSync&&(this.outOfSync=!0,this.receiver(a.a.EnterOutOfSync))):(this.outOfSync&&(this.outOfSync=!1,this.receiver(a.a.ExitOutOfSync)),this.discordance=0);case 4:case"end":return e.stop()}}),e,this)})),o=function(){var e=this,t=arguments;return new Promise((function(n,i){var a=r.apply(e,t);function o(e){p(a,n,i,o,s,"next",e)}function s(e){p(a,n,i,o,s,"throw",e)}o(void 0)}))},function(e,t){return o.apply(this,arguments)})},{key:"needsSync",get:function(){return this.discordance>0&&this.discordance0&&t.push(n),e.next=7,this.collectionByProcessingPayloads(this.response.savedPayloads,b.a.RemoteSaved);case 7:if((r=e.sent).all().length>0&&t.push(r),!(this.response.uuidConflictPayloads.length>0)){e.next=14;break}return e.next=12,this.collectionByProcessingPayloads(this.response.uuidConflictPayloads,b.a.ConflictUuid);case 12:(a=e.sent).all().length>0&&t.push(a);case 14:if(!(this.response.dataConflictPayloads.length>0)){e.next=19;break}return e.next=17,this.collectionByProcessingPayloads(this.response.dataConflictPayloads,b.a.ConflictData);case 17:(o=e.sent).all().length>0&&t.push(o);case 19:return e.abrupt("return",t);case 20:case"end":return e.stop()}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"collectionByProcessingPayloads",value:(r=re(i.a.mark((function e(t,n){var r,a,o,s,c,u=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=k.a.WithPayloads(t,n),a=Z(n),o=new a(this.baseCollection,r,this.relatedCollectionSet),e.next=5,o.resultingCollection();case 5:return s=e.sent,c=s.all().map((function(e){var t=u.finalDirtyStateForPayload(e);return Object(v.b)(e,{dirty:t,dirtiedDate:t?new Date:void 0})})),e.abrupt("return",k.a.WithPayloads(c,n));case 8:case"end":return e.stop()}}),e,this)}))),function(e,t){return r.apply(this,arguments)})},{key:"finalDirtyStateForPayload",value:function(e){var t=this.baseCollection.find(e.uuid);return t?e.dirtiedDate&&e.dirtiedDate>t.dirtiedDate?e.dirty:t.dirtiedDate>t.lastSyncBegan:e.dirty}}])&&ie(t.prototype,n),e}(),ce=n(35);function ue(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return e.filter((function(e){return!!e.uuid}))}},{key:"error",get:function(){return this.rawResponse.error}},{key:"status",get:function(){return this.rawResponse.status}},{key:"lastSyncToken",get:function(){return this.rawResponse[ce.a.LastSyncToken]}},{key:"paginationToken",get:function(){return this.rawResponse[ce.a.PaginationToken]}},{key:"integrityHash",get:function(){return this.rawResponse[ce.a.IntegrityResult]}},{key:"checkIntegrity",get:function(){return this.integrityHash&&!this.paginationToken}},{key:"numberOfItemsInvolved",get:function(){return this.allProcessedPayloads.length}},{key:"allProcessedPayloads",get:function(){return this.savedPayloads.concat(this.retrievedPayloads).concat(this.dataConflictPayloads).concat(this.uuidConflictPayloads)}},{key:"rawUuidConflictItems",get:function(){return this.rawConflictObjects.filter((function(e){return e.type===oe.UuidConflict})).map((function(e){return e.unsaved_item||e.item}))}},{key:"rawDataConflictItems",get:function(){return this.rawConflictObjects.filter((function(e){return e.type===oe.ConflictingData})).map((function(e){return e.server_item||e.item}))}},{key:"rawConflictObjects",get:function(){var e=this.rawResponse.conflicts||[],t=this.rawResponse.unsaved||[];return e.concat(t)}},{key:"hasError",get:function(){return!Object(c.p)(this.rawResponse.error)}}])&&ue(t.prototype,n),e}();function he(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function pe(e,t){for(var n=0;nn})),this.state.lastPreSyncSave=new Date,e.abrupt("return",r);case 6:case"end":return e.stop()}}),e,this)}))),function(e){return D.apply(this,arguments)})},{key:"queueStrategyResolveOnNext",value:function(){var e=this;return new Promise((function(t,n){e.resolveQueue.push({resolve:t,reject:n})}))}},{key:"queueStrategyForceSpawnNew",value:function(e){var t=this;return new Promise((function(n,r){t.spawnQueue.push({resolve:n,reject:r,options:e})}))}},{key:"popSpawnQueue",value:function(){if(0===this.spawnQueue.length)return null;var e=this.spawnQueue[0];return Object(c.C)(this.spawnQueue,0),this.log("Syncing again from spawn queue"),this.sync(function(e){for(var t=1;t0&&void 0!==P[0]?P[0]:{},!this.locked){e.next=4;break}return this.log("Sync Locked"),e.abrupt("return");case 4:return n=function(){return D.syncLock},r=function(){D.syncLock=!0},o=function(){D.syncLock=!1},u=this.opStatus.syncInProgress,l=this.databaseLoaded,(f=!n())&&l&&!u&&r(),t.source||(t.source=xe.External),e.next=14,this.itemsNeedingSync();case 14:return A=e.sent,h=A.filter((function(e){return e.neverSynced&&e.deleted})),Object(c.G)(A,h),p=A.map((function(e){return e.payloadRepresentation()})),e.next=20,this.popPayloadsNeedingPreSyncSave(p);case 20:return d=e.sent,e.next=23,this.persistPayloads(d);case 23:if(g=this.resolveQueue.slice(),y=Object(c.p)(t.queueStrategy)?Se.ResolveOnNext:t.queueStrategy,!u&&l&&f){e.next=36;break}if(this.log(f?u?"Attempting to sync while existing sync in progress.":"Attempting to sync before local database has loaded.":"Another function call has begun preparing for sync."),y!==Se.ResolveOnNext){e.next=31;break}return e.abrupt("return",this.queueStrategyResolveOnNext());case 31:if(y!==Se.ForceSpawnNew){e.next=35;break}return e.abrupt("return",this.queueStrategyForceSpawnNew({mode:t.mode,checkIntegrity:t.checkIntegrity,source:t.source}));case 35:throw"Unhandled timing strategy ".concat(y);case 36:if(this.opStatus.setDidBegin(),this.notifyEvent(a.a.SyncWillBegin),Object(c.G)(this.resolveQueue,g),v=new Date,!(A.length>0)){e.next=43;break}return e.next=43,this.itemManager.changeItems(Object(Re.b)(A),(function(e){e.lastSyncBegan=v}),s.c.NonDirtying,b.a.PreSyncSave);case 43:if(m=this.sessionManager.online(),i=t.mode,I=m&&!D.completedOnlineDownloadFirstSync?Qe.DownloadFirst:Object(c.p)(i)?Qe.Default:i,w=[],I!==Qe.Default){e.next=58;break}if(!m||this.completedOnlineDownloadFirstSync){e.next=49;break}throw"Attempting to default mode sync without having completed initial.";case 49:if(!m){e.next=55;break}return e.next=52,this.payloadsByPreparingForServer(p);case 52:w=e.sent,e.next=56;break;case 55:w=p;case 56:e.next=59;break;case 58:I===Qe.DownloadFirst&&(w=[]);case 59:if(!m){e.next=65;break}return e.next=62,this.syncOnlineOperation(w,t.checkIntegrity,t.source,I);case 62:C=e.sent,e.next=68;break;case 65:return e.next=67,this.syncOfflineOperation(w,t.source,I);case 67:C=e.sent;case 68:return e.next=70,C.run();case 70:if(this.opStatus.setDidEnd(),o(),!this.opStatus.hasError()){e.next=74;break}return e.abrupt("return");case 74:if(this.opStatus.reset(),this.state.lastSyncDate=new Date,C instanceof ge&&C.numberOfItemsInvolved>=this.majorChangeThreshold&&this.notifyEvent(a.a.MajorDataChange),!(h.length>0)){e.next=80;break}return e.next=80,this.handleNeverSyncedDeleted(h);case 80:if(I===Qe.DownloadFirst){e.next=83;break}return e.next=83,this.notifyEvent(a.a.FullSyncCompleted,{source:t.source});case 83:if(I!==Qe.DownloadFirst){e.next=91;break}return m&&(this.completedOnlineDownloadFirstSync=!0),e.next=87,this.notifyEvent(a.a.DownloadFirstSyncCompleted);case 87:return e.next=89,this.sync({source:xe.AfterDownloadFirst,checkIntegrity:!0,awaitAll:t.awaitAll});case 89:e.next=117;break;case 91:if(this.popSpawnQueue()||!(this.resolveQueue.length>0)){e.next=99;break}if(this.log("Syncing again from resolve queue"),B=this.sync({source:xe.ResolveQueue,checkIntegrity:t.checkIntegrity}),!t.awaitAll){e.next=97;break}return e.next=97,B;case 97:e.next=117;break;case 99:return e.next=101,this.itemsNeedingSync();case 101:if(e.t0=e.sent.length,!(e.t0>0)){e.next=107;break}return e.next=105,this.sync({source:xe.MoreDirtyItems,checkIntegrity:t.checkIntegrity,awaitAll:t.awaitAll});case 105:e.next=117;break;case 107:if(!(C instanceof ge&&C.checkIntegrity)){e.next=116;break}if(!this.state.needsSync||!C.done){e.next=114;break}if(this.log("Syncing again from integrity check"),E=this.sync({checkIntegrity:!0,queueStrategy:Se.ForceSpawnNew,source:xe.IntegrityCheck,awaitAll:t.awaitAll}),!t.awaitAll){e.next=114;break}return e.next=114,E;case 114:e.next=117;break;case 116:this.state.clearIntegrityHashes();case 117:for(k=!0,_=!1,S=void 0,e.prev=120,Q=g[Symbol.iterator]();!(k=(x=Q.next()).done);k=!0)x.value.resolve();e.next=128;break;case 124:e.prev=124,e.t1=e.catch(120),_=!0,S=e.t1;case 128:e.prev=128,e.prev=129,k||null==Q.return||Q.return();case 131:if(e.prev=131,!_){e.next=134;break}throw S;case 134:return e.finish(131);case 135:return e.finish(128);case 136:case"end":return e.stop()}var i}),e,this,[[120,124,128,136],[129,,131,135]])}))),function(){return Q.apply(this,arguments)})},{key:"syncOnlineOperation",value:(S=Ne(i.a.mark((function e(t,n,r,a){var o,s=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.log("Syncing online user","source:",r,"integrity check",n,"mode:",a,"payloads:",t),e.t0=ge,e.t1=t,e.t2=function(){var e=Ne(i.a.mark((function e(t,n){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==fe.Response){e.next=10;break}if(!n.hasError){e.next=6;break}return e.next=4,s.handleErrorServerResponse(n);case 4:e.next=8;break;case 6:return e.next=8,s.handleSuccessServerResponse(o,n);case 8:e.next=13;break;case 10:if(t!==fe.StatusChanged){e.next=13;break}return e.next=13,s.handleStatusChange(o);case 13:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),e.next=6,this.getLastSyncToken();case 6:return e.t3=e.sent,e.next=9,this.getPaginationToken();case 9:return e.t4=e.sent,e.t5=n,e.t6=this.apiService,o=new e.t0(e.t1,e.t2,e.t3,e.t4,e.t5,e.t6),e.abrupt("return",o);case 14:case"end":return e.stop()}}),e,this)}))),function(e,t,n,r){return S.apply(this,arguments)})},{key:"syncOfflineOperation",value:(E=Ne(i.a.mark((function e(t,n,r){var a,o=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.log("Syncing offline user","source:",n,"mode:",r,"payloads:",t),a=new me(t,function(){var e=Ne(i.a.mark((function e(t,n){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==fe.Response){e.next=3;break}return e.next=3,o.handleOfflineResponse(n);case 3:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()),e.abrupt("return",a);case 3:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return E.apply(this,arguments)})},{key:"handleStatusChange",value:(B=Ne(i.a.mark((function e(t){var n,r,a;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.pendingUploadCount(),r=t.totalUploadCount(),a=r-n,this.opStatus.setUploadStatus(a,r);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return B.apply(this,arguments)})},{key:"handleOfflineResponse",value:(w=Ne(i.a.mark((function e(t){var n,r,o;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.log("Offline Sync Response",t.rawResponse),!((n=t.savedPayloads).length>0)){e.next=8;break}return e.next=5,this.modelManager.emitPayloads(n,b.a.LocalSaved);case 5:return r=this.modelManager.find(Object(Re.b)(n)),e.next=8,this.persistPayloads(r);case 8:if(!((o=t.deletedPayloads).length>0)){e.next=12;break}return e.next=12,this.deletePayloads(o);case 12:return this.opStatus.clearError(),this.opStatus.setDownloadStatus(t.retrievedPayloads.length),e.next=16,this.notifyEvent(a.a.SingleSyncCompleted,t);case 16:case"end":return e.stop()}}),e,this)}))),function(e){return w.apply(this,arguments)})},{key:"handleErrorServerResponse",value:(I=Ne(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.log("Sync Error",t),401===t.status&&this.notifyEvent(a.a.InvalidSession),this.opStatus.setError(t.error),this.notifyEvent(a.a.SyncError,t.error);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return I.apply(this,arguments)})},{key:"handleSuccessServerResponse",value:(m=Ne(i.a.mark((function e(t,n){var r,o,s,u,l,f,A,h,p,d,g,y,v,b,m,I,w,C,B,E;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._simulate_latency){e.next=3;break}return e.next=3,Object(c.E)(this._simulate_latency.latency);case 3:this.log("Online Sync Response",n.rawResponse),this.setLastSyncToken(n.lastSyncToken),this.setPaginationToken(n.paginationToken),this.opStatus.clearError(),this.opStatus.setDownloadStatus(n.retrievedPayloads.length),r=[],o=!0,s=!1,u=void 0,e.prev=12,l=n.allProcessedPayloads[Symbol.iterator]();case 14:if(o=(f=l.next()).done){e.next=25;break}if(!(A=f.value).deleted&&A.fields.includes(Pe.a.Content)){e.next=18;break}return e.abrupt("continue",22);case 18:return e.next=20,this.protocolService.payloadByDecryptingPayload(A);case 20:h=e.sent,r.push(h);case 22:o=!0,e.next=14;break;case 25:e.next=31;break;case 27:e.prev=27,e.t0=e.catch(12),s=!0,u=e.t0;case 31:e.prev=31,e.prev=32,o||null==l.return||l.return();case 34:if(e.prev=34,!s){e.next=37;break}throw u;case 37:return e.finish(34);case 38:return e.finish(31);case 39:return p=this.modelManager.getMasterCollection(),d=new se(n,r,p,t.payloadsSavedOrSaving),e.next=43,d.collectionsByProcessingResponse();case 43:g=e.sent,y=!0,v=!1,b=void 0,e.prev=47,m=g[Symbol.iterator]();case 49:if(y=(I=m.next()).done){e.next=59;break}return w=I.value,e.next=53,this.modelManager.emitCollection(w);case 53:return C=this.modelManager.find(w.uuids()),e.next=56,this.persistPayloads(C);case 56:y=!0,e.next=49;break;case 59:e.next=65;break;case 61:e.prev=61,e.t1=e.catch(47),v=!0,b=e.t1;case 65:e.prev=65,e.prev=66,y||null==m.return||m.return();case 68:if(e.prev=68,!v){e.next=71;break}throw b;case 71:return e.finish(68);case 72:return e.finish(65);case 73:if(!((B=n.deletedPayloads).length>0)){e.next=77;break}return e.next=77,this.deletePayloads(B);case 77:return e.next=79,this.notifyEvent(a.a.SingleSyncCompleted,n);case 79:if(!n.checkIntegrity){e.next=85;break}return e.next=82,this.computeDataIntegrityHash();case 82:return E=e.sent,e.next=85,this.state.setIntegrityHashes(E,n.integrityHash);case 85:case"end":return e.stop()}}),e,this,[[12,27,31,39],[32,,34,38],[47,61,65,73],[66,,68,72]])}))),function(e,t){return m.apply(this,arguments)})},{key:"handleNeverSyncedDeleted",value:(g=Ne(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.map((function(e){return e.payloadRepresentation({dirty:!1})})),e.next=3,this.modelManager.emitPayloads(n,b.a.LocalChanged);case 3:return e.next=5,this.persistPayloads(n);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return g.apply(this,arguments)})},{key:"persistPayloads",value:(d=Ne(i.a.mark((function e(t){var n=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==t.length){e.next=2;break}return e.abrupt("return");case 2:return e.abrupt("return",this.storageService.savePayloads(t).catch((function(e){throw n.notifyEvent(a.a.DatabaseWriteError,e),e})));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return d.apply(this,arguments)})},{key:"deletePayloads",value:(p=Ne(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.persistPayloads(t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return p.apply(this,arguments)})},{key:"computeDataIntegrityHash",value:(A=Ne(i.a.mark((function e(){var t,n,r;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,t=this.itemManager.nonDeletedItems.sort((function(e,t){return t.updated_at.getTime()-e.updated_at.getTime()})),n=t.map((function(e){return e.updatedAtTimestamp()})),r=n.join(","),e.abrupt("return",this.protocolService.crypto.sha256(r));case 7:return e.prev=7,e.t0=e.catch(0),console.error("Error computing data integrity hash",e.t0),e.abrupt("return",void 0);case 11:case"end":return e.stop()}}),e,this,[[0,7]])}))),function(){return A.apply(this,arguments)})},{key:"resolveOutOfSync",value:(f=Ne(i.a.mark((function e(){var t,n,r,a;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=new C(this.apiService,this.protocolService,void 0,"resolve-out-of-sync"),e.next=3,t.run();case 3:return n=e.sent,r=new De(this.modelManager.getMasterCollection(),k.a.WithPayloads(n,b.a.RemoteRetrieved)),e.next=7,r.resultingCollection();case 7:return a=e.sent,e.next=10,this.modelManager.emitCollection(a);case 10:return e.next=12,this.persistPayloads(a.payloads);case 12:return e.abrupt("return",this.sync({checkIntegrity:!0,source:xe.ResolveOutOfSync}));case 13:case"end":return e.stop()}}),e,this)}))),function(){return f.apply(this,arguments)})},{key:"statelessDownloadAllItems",value:(u=Ne(i.a.mark((function e(t,n){var r,a;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new C(this.apiService,this.protocolService,t,n),e.next=3,r.run();case 3:return a=e.sent,e.abrupt("return",a.map((function(e){return Object(Oe.a)(e)})));case 5:case"end":return e.stop()}}),e,this)}))),function(e,t){return u.apply(this,arguments)})},{key:"ut_setDatabaseLoaded",value:function(e){this.databaseLoaded=e}},{key:"ut_clearLastSyncDate",value:function(){this.state.lastSyncDate=void 0}},{key:"ut_beginLatencySimulator",value:function(e){this._simulate_latency={latency:e||1e3,enabled:!0}}},{key:"ut_endLatencySimulator",value:function(){this._simulate_latency=null}}])&&Ue(n.prototype,r),t}(u.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var r=n(1);function i(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1?arguments[1]:void 0,i=arguments.length>2?arguments[2]:void 0,a=arguments.length>3?arguments[3]:void 0,s=arguments.length>4?arguments[4]:void 0;l(this,e),A(this,"map",{}),A(this,"typedMap",(u(t={}),t)),A(this,"dirtyIndex",new Set),A(this,"invalidsIndex",new Set),A(this,"nondeletedIndex",new Set),A(this,"referenceMap",void 0),A(this,"conflictMap",void 0),n?(this.map=r,this.typedMap=i,this.referenceMap=a,this.conflictMap=s):(this.referenceMap=new o,this.conflictMap=new o)}var t,n;return t=e,(n=[{key:"uuids",value:function(){return Object.keys(this.map)}},{key:"all",value:function(e){var t=this;if(e){if(Array.isArray(e)){var n=[],i=!0,a=!1,o=void 0;try{for(var s,c=e[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var u=s.value;Object(r.j)(n,this.typedMap[u]||[])}}catch(e){a=!0,o=e}finally{try{i||null==c.return||c.return()}finally{if(a)throw o}}return n}var l;return(null===(l=this.typedMap[e])||void 0===l?void 0:l.slice())||[]}return Object.keys(this.map).map((function(e){return t.map[e]}))}},{key:"find",value:function(e){return this.map[e]}},{key:"dirtyElements",value:function(){var e=Array.from(this.dirtyIndex);return this.findAll(e)}},{key:"invalidElements",value:function(){var e=Array.from(this.invalidsIndex);return this.findAll(e)}},{key:"nondeletedElements",value:function(){var e=Array.from(this.nondeletedIndex);return this.findAll(e)}},{key:"findAll",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],r=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var c=o.value,u=this.map[c];(u||t)&&n.push(u)}}catch(e){i=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return n}},{key:"set",value:function(e){if(0!==(e=Array.isArray(e)?e:[e]).length){var t=!0,n=!1,r=void 0;try{for(var i,a=e[Symbol.iterator]();!(t=(i=a.next()).done);t=!0){var o=i.value;if(this.map[o.uuid]=o,this.setToTypedMap(o),o.dirty?this.dirtyIndex.add(o.uuid):this.dirtyIndex.delete(o.uuid),o.errorDecrypting||o.waitingForKey?this.invalidsIndex.add(o.uuid):this.invalidsIndex.delete(o.uuid),o.deleted)this.referenceMap.removeFromMap(o.uuid),this.nondeletedIndex.delete(o.uuid);else{this.nondeletedIndex.add(o.uuid);var s=o.safeContent.conflict_of;s&&this.conflictMap.establishRelationship(s,o.uuid),this.referenceMap.setAllRelationships(o.uuid,o.references.map((function(e){return e.uuid})))}}}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}}else console.warn("Attempting to set 0 elements onto collection")}},{key:"discard",value:function(e){e=Array.isArray(e)?e:[e];var t=!0,n=!1,r=void 0;try{for(var i,a=e[Symbol.iterator]();!(t=(i=a.next()).done);t=!0){var o=i.value;this.conflictMap.removeFromMap(o.uuid),this.referenceMap.removeFromMap(o.uuid),this.deleteFromTypedMap(o),delete this.map[o.uuid]}}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}}},{key:"setToTypedMap",value:function(e){var t=this.typedMap[e.content_type]||[];c()(t,{uuid:e.uuid}),t.push(e),this.typedMap[e.content_type]=t}},{key:"deleteFromTypedMap",value:function(e){var t=this.typedMap[e.content_type]||[];c()(t,{uuid:e.uuid}),this.typedMap[e.content_type]=t}},{key:"uuidsThatReferenceUuid",value:function(e){if(!Object(r.s)(e))throw Error("Must use uuid string");return this.referenceMap.getInverseRelationships(e)}},{key:"elementsReferencingElement",value:function(e){var t=this.uuidsThatReferenceUuid(e.uuid);return this.findAll(t)}},{key:"conflictsOf",value:function(e){var t=this.conflictMap.getDirectRelationships(e);return this.findAll(t)}}])&&f(t.prototype,n),e}()},function(e,t,n){var r=n(95),i=n(213);e.exports=function(e,t){var n=[];if(!e||!e.length)return n;var a=-1,o=[],s=e.length;for(t=r(t,3);++at.title?1:-1})).map((function(e){return"#"+e.title})).join(" ")}}]),t}(r.d),p=function(e){function t(){return o(this,t),u(this,l(t).apply(this,arguments))}return A(t,e),c(t,[{key:"title",set:function(e){this.content.title=e}}]),t}(r.b)},function(e,t,n){"use strict";n.d(t,"b",(function(){return d})),n.d(t,"a",(function(){return g}));var r=n(12),i=n(1),a=n(6);function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n0&&(e.url=this.urlForUrlAndParams(e.url,e.params)),t.open(e.verb,e.url,!0),t.setRequestHeader("Content-type","application/json"),e.authentication&&t.setRequestHeader("Authorization","Bearer "+e.authentication),t}},{key:"runRequest",value:(o=u(a.a.mark((function e(t,n,i){var o=this;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise((function(e,a){t.onreadystatechange=function(){o.stateChangeHandlerForRequest(t,e,a)},n===r.Post||n===r.Patch?t.send(JSON.stringify(i)):t.send()})));case 1:case"end":return e.stop()}}),e)}))),function(e,t,n){return o.apply(this,arguments)})},{key:"stateChangeHandlerForRequest",value:function(e,t,n){if(4===e.readyState){var r=e.status,i={status:r};try{var a=JSON.parse(e.responseText);Object.assign(i,a)}catch(e){}r>=200&&r<=299?t(i):(i.error||(i.error={status:r}),n(i))}}},{key:"urlForUrlAndParams",value:function(e,t){var n=Object.keys(t).map((function(e){return e+"="+encodeURIComponent(t[e])})).join("&");return e.includes("?")?e+"&"+n:e+"?"+n}},{key:"isErrorResponseExpiredToken",value:function(e){return 498===e.status}}])&&f(n.prototype,i),t}(o.a)},function(e,t,n){"use strict";n.d(t,"b",(function(){return p})),n.d(t,"a",(function(){return d}));var r=n(6),i=n(60);function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n0}},{key:"isExpired",value:function(){return!!this.canExpire()&&this.getExpireAt()0);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return d.apply(this,arguments)})},{key:"actionRequiresPrivilege",value:(u=g(s.a.mark((function e(t){var n;return s.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getSessionExpirey();case 2:if(!(e.sent>new Date)){e.next=5;break}return e.abrupt("return",!1);case 5:return e.next=7,this.netCredentialsForAction(t);case 7:return n=e.sent,e.abrupt("return",n.length>0);case 9:case"end":return e.stop()}}),e,this)}))),function(e){return u.apply(this,arguments)})},{key:"authenticateAction",value:(o=g(s.a.mark((function e(t,n){var r,i,a,o,c,u,l,f,A;return s.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.netCredentialsForAction(t);case 2:r=e.sent,i=[],a=[],o=!0,c=!1,u=void 0,e.prev=8,l=r[Symbol.iterator]();case 10:if(o=(f=l.next()).done){e.next=19;break}return A=f.value,e.next=14,this.verifyAuthenticationParameters(A,n[A]);case 14:e.sent?i.push(A):a.push(A);case 16:o=!0,e.next=10;break;case 19:e.next=25;break;case 21:e.prev=21,e.t0=e.catch(8),c=!0,u=e.t0;case 25:e.prev=25,e.prev=26,o||null==l.return||l.return();case 28:if(e.prev=28,!c){e.next=31;break}throw u;case 31:return e.finish(28);case 32:return e.finish(25);case 33:return e.abrupt("return",{success:0===a.length,successfulCredentials:i,failedCredentials:a});case 34:case"end":return e.stop()}}),e,this,[[8,21,25,33],[26,,28,32]])}))),function(e,t){return o.apply(this,arguments)})},{key:"verifyAuthenticationParameters",value:(i=g(s.a.mark((function e(t,n){var r,i,a,o;return s.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==h.a.AccountPassword){e.next=8;break}return e.next=3,this.protocolService.validateAccountPassword(n);case 3:return r=e.sent,i=r.valid,e.abrupt("return",i);case 8:if(t!==h.a.LocalPasscode){e.next=14;break}return e.next=11,this.protocolService.validatePasscode(n);case 11:return a=e.sent,o=a.valid,e.abrupt("return",o);case 14:case"end":return e.stop()}}),e,this)}))),function(e,t){return i.apply(this,arguments)})},{key:"displayInfoForCredential",value:function(e){return C[e]}},{key:"displayInfoForAction",value:function(e){return B[e]}},{key:"getSessionLengthOptions",value:function(){return[{value:a.None,label:"Don't Remember"},{value:a.FiveMinutes,label:"5 Minutes"},{value:a.OneHour,label:"1 Hour"},{value:a.OneWeek,label:"1 Week"}]}}])&&y(n.prototype,r),t}(u.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return T}));var r,i=n(0),a=n.n(i),o=n(13),s=n(11),c=n(9),u=n(33),l=n(59),f=n(44),A=n(45),h=n(46),p=n(12),d=n(3),g=n(2),y=n(24),v=n(19),b=n(29),m=n(16),I=n(20),w=n(1),C=n(18),B=n(4),E=n(8),k=n(14);function _(e){return(_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function S(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function Q(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){S(a,r,i,o,s,"next",e)}function s(e){S(a,r,i,o,s,"throw",e)}o(void 0)}))}}function x(e,t){for(var n=0;n0&&s.decryptErroredItems()})),s}var n,i,m,S,T,j,H,N,U,L,K,G,$,Y,J,V,z,q,W,X,Z,ee,te,ne,re,ie,ae,oe,se,ce,ue,le,fe,Ae,he,pe,de,ge,ye,ve,be,me,Ie,we,Ce;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&F(e,t)}(t,e),n=t,(i=[{key:"deinit",value:function(){this.itemManager=void 0,this.modelManager=void 0,this.deviceInterface=void 0,this.storageService=void 0,this.crypto.deinit(),this.crypto=void 0,this.operators={},this.keyObservers.length=0,this.removeItemsObserver(),this.removeItemsObserver=null,this.rootKey=void 0,P(M(t.prototype),"deinit",this).call(this)}},{key:"initialize",value:(Ce=Q(a.a.mark((function e(){var t,n,i,o;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getWrappedRootKey();case 2:return t=e.sent,e.next=5,this.getAccountKeyParams();case 5:return n=e.sent,e.next=8,this.hasRootKeyWrapper();case 8:if(i=e.sent,o=!Object(w.p)(t)||!Object(w.p)(n),!i||!o){e.next=14;break}this.keyMode=r.RootKeyPlusWrapper,e.next=27;break;case 14:if(!i||o){e.next=18;break}this.keyMode=r.WrapperOnly,e.next=27;break;case 18:if(i||!o){e.next=22;break}this.keyMode=r.RootKeyOnly,e.next=27;break;case 22:if(i||o){e.next=26;break}this.keyMode=r.RootKeyNone,e.next=27;break;case 26:throw"Invalid key mode condition";case 27:if(this.keyMode!==r.RootKeyOnly){e.next=33;break}return e.next=30,this.getRootKeyFromKeychain();case 30:return this.rootKey=e.sent,e.next=33,this.notifyObserversOfKeyChange();case 33:case"end":return e.stop()}}),e,this)}))),function(){return Ce.apply(this,arguments)})},{key:"getLatestVersion",value:function(){return c.a.V004}},{key:"getUserVersion",value:(we=Q(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getAccountKeyParams();case 2:return t=e.sent,e.abrupt("return",t&&t.version);case 4:case"end":return e.stop()}}),e,this)}))),function(){return we.apply(this,arguments)})},{key:"upgradeAvailable",value:(Ie=Q(a.a.mark((function e(){var t,n;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.accountUpgradeAvailable();case 2:return t=e.sent,e.next=5,this.passcodeUpgradeAvailable();case 5:return n=e.sent,e.abrupt("return",t||n);case 7:case"end":return e.stop()}}),e,this)}))),function(){return Ie.apply(this,arguments)})},{key:"accountUpgradeAvailable",value:(me=Q(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getUserVersion();case 2:if(t=e.sent){e.next=5;break}return e.abrupt("return",!1);case 5:return e.abrupt("return",t!==this.getLatestVersion());case 6:case"end":return e.stop()}}),e,this)}))),function(){return me.apply(this,arguments)})},{key:"passcodeUpgradeAvailable",value:(be=Q(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getRootKeyWrapperKeyParams();case 2:if(t=e.sent){e.next=5;break}return e.abrupt("return",!1);case 5:return e.abrupt("return",t.version!==this.getLatestVersion());case 6:case"end":return e.stop()}}),e,this)}))),function(){return be.apply(this,arguments)})},{key:"platformSupportsKeyDerivation",value:function(e){return Object(c.b)(e.version,c.a.V004)>=0||!!Object(w.t)()}},{key:"supportedVersions",value:function(){return[c.a.V001,c.a.V002,c.a.V003,c.a.V004]}},{key:"isVersionNewerThanLibraryVersion",value:function(e){var t=this.getLatestVersion();return 1===Object(c.b)(e,t)}},{key:"isProtocolVersionOutdated",value:function(e){var t,n=(O(t={},c.a.V001,Date.parse("2018-01-01")),O(t,c.a.V002,Date.parse("2020-01-01")),t)[e];return!!n&&(new Date).getTime()>n}},{key:"costMinimumForVersion",value:function(e){if(Object(c.b)(e,c.a.V003)>=0)throw"Cost minimums only apply to versions <= 002";if(e===c.a.V001)return C.a.PbkdfMinCost;if(e===c.a.V002)return C.b.PbkdfMinCost;throw"Invalid version for cost minimum: ".concat(e)}},{key:"createOperatorForLatestVersion",value:function(){return this.createOperatorForVersion(this.getLatestVersion())}},{key:"createOperatorForVersion",value:function(e){if(e===c.a.V001)return new h.a(this.crypto);if(e===c.a.V002)return new A.a(this.crypto);if(e===c.a.V003)return new f.a(this.crypto);if(e===c.a.V004)return new l.a(this.crypto);if(e===c.a.V000Base64Decrypted)return this.createOperatorForLatestVersion();throw"Unable to find operator for version ".concat(e)}},{key:"operatorForVersion",value:function(e){var t=e,n=this.operators[t];return n||(n=this.createOperatorForVersion(e),this.operators[t]=n),n}},{key:"defaultOperator",value:function(){return this.operatorForVersion(this.getLatestVersion())}},{key:"computeRootKey",value:(ve=Q(a.a.mark((function e(t,n){var r,i;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=n.version,i=this.operatorForVersion(r),e.abrupt("return",i.computeRootKey(t,n));case 3:case"end":return e.stop()}}),e,this)}))),function(e,t){return ve.apply(this,arguments)})},{key:"createRootKey",value:(ye=Q(a.a.mark((function e(t,n){var r;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.defaultOperator(),e.abrupt("return",r.createRootKey(t,n));case 2:case"end":return e.stop()}}),e,this)}))),function(e,t){return ye.apply(this,arguments)})},{key:"payloadContentFormatForIntent",value:function(e,t){if(t){if(e===s.a.Sync||e===s.a.FileEncrypted||e===s.a.FilePreferEncrypted||e===s.a.LocalStorageEncrypted||e===s.a.LocalStoragePreferEncrypted)return p.a.EncryptedString;throw"Unhandled encrypted case in protocolService.payloadContentFormatForIntent."}if(e===s.a.LocalStorageDecrypted||e===s.a.LocalStoragePreferEncrypted||e===s.a.FileDecrypted||e===s.a.FilePreferEncrypted)return p.a.DecryptedBareObject;if(e===s.a.SyncDecrypted)return p.a.DecryptedBase64String;throw"Unhandled decrypted case in protocolService.payloadContentFormatForIntent."}},{key:"payloadByEncryptingPayload",value:(ge=Q(a.a.mark((function e(t,n,r){var i,o,c,u,l;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.errorDecrypting){e.next=2;break}return e.abrupt("return",t);case 2:if(!t.deleted){e.next=4;break}return e.abrupt("return",t);case 4:if(!Object(w.p)(n)){e.next=6;break}throw"Attempting to encrypt payload with null intent";case 6:if(r||Object(s.c)(n)){e.next=10;break}return e.next=9,this.keyToUseForEncryptionOfPayload(t,n);case 9:r=e.sent;case 10:if(r||!Object(s.b)(n)){e.next=12;break}throw Error("Attempting to generate encrypted payload with no key.");case 12:if(t.format===p.a.DecryptedBareObject){e.next=14;break}throw"Attempting to encrypt already encrypted payload.";case 14:if(t.content){e.next=16;break}throw"Attempting to encrypt payload with no content.";case 16:if(t.uuid){e.next=18;break}throw"Attempting to encrypt payload with no uuid.";case 18:return i=r?r.version:this.getLatestVersion(),o=this.payloadContentFormatForIntent(n,r),c=this.operatorForVersion(i),e.next=23,c.generateEncryptedParameters(t,o,r);case 23:if(u=e.sent){e.next=26;break}throw"Unable to generate encryption parameters";case 26:return l=Object(g.d)(t,n,u),e.abrupt("return",l);case 28:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return ge.apply(this,arguments)})},{key:"payloadsByEncryptingPayloads",value:(de=Q(a.a.mark((function e(t,n){var r,i,o,s,c,u,l,f,A;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=[],i=!0,o=!1,s=void 0,e.prev=4,c=t[Symbol.iterator]();case 6:if(i=(u=c.next()).done){e.next=16;break}return l=u.value,f=Object(w.o)(n)?n(l):n,e.next=11,this.payloadByEncryptingPayload(l,f);case 11:A=e.sent,r.push(A);case 13:i=!0,e.next=6;break;case 16:e.next=22;break;case 18:e.prev=18,e.t0=e.catch(4),o=!0,s=e.t0;case 22:e.prev=22,e.prev=23,i||null==c.return||c.return();case 25:if(e.prev=25,!o){e.next=28;break}throw s;case 28:return e.finish(25);case 29:return e.finish(22);case 30:return e.abrupt("return",r);case 31:case"end":return e.stop()}}),e,this,[[4,18,22,30],[23,,25,29]])}))),function(e,t){return de.apply(this,arguments)})},{key:"payloadByDecryptingPayload",value:(pe=Q(a.a.mark((function e(t,n){var r,i,o,s,c;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.content){e.next=2;break}throw"Attempting to decrypt payload that has no content.";case 2:if((r=t.format)!==p.a.DecryptedBareObject){e.next=5;break}return e.abrupt("return",t);case 5:if(n||r!==p.a.EncryptedString){e.next=11;break}return e.next=8,this.keyToUseForDecryptionOfPayload(t);case 8:if(n=e.sent){e.next=11;break}return e.abrupt("return",Object(g.e)(t,{waitingForKey:!0,errorDecrypting:!0}));case 11:return i=t.version,o=this.operatorForVersion(i),s=Object(g.c)(t),e.next=16,o.generateDecryptedParameters(s,n);case 16:return c=e.sent,e.abrupt("return",Object(g.e)(t,c));case 18:case"end":return e.stop()}}),e,this)}))),function(e,t){return pe.apply(this,arguments)})},{key:"payloadsByDecryptingPayloads",value:(he=Q(a.a.mark((function e(t,n){var r,i,o,s,c,u,l,f;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=[],i=!0,o=!1,s=void 0,e.prev=4,c=t[Symbol.iterator]();case 6:if(i=(u=c.next()).done){e.next=32;break}if(l=u.value){e.next=11;break}return r.push(l),e.abrupt("continue",29);case 11:if(!0!==l.deleted||!Object(w.p)(l.content)){e.next=14;break}return r.push(l),e.abrupt("continue",29);case 14:if(Object(w.s)(l.content)){e.next=18;break}return r.push(l),e.abrupt("continue",29);case 18:return e.prev=18,e.next=21,this.payloadByDecryptingPayload(l,n);case 21:f=e.sent,r.push(f),e.next=29;break;case 25:e.prev=25,e.t0=e.catch(18),r.push(Object(g.e)(l,{errorDecrypting:!0,errorDecryptingValueChanged:!l.errorDecrypting})),console.error("Error decrypting payload",l,e.t0);case 29:i=!0,e.next=6;break;case 32:e.next=38;break;case 34:e.prev=34,e.t1=e.catch(4),o=!0,s=e.t1;case 38:e.prev=38,e.prev=39,i||null==c.return||c.return();case 41:if(e.prev=41,!o){e.next=44;break}throw s;case 44:return e.finish(41);case 45:return e.finish(38);case 46:return e.abrupt("return",r);case 47:case"end":return e.stop()}}),e,this,[[4,34,38,46],[18,25],[39,,41,45]])}))),function(e,t){return he.apply(this,arguments)})},{key:"decryptErroredItems",value:(Ae=Q(a.a.mark((function e(){var t,n,r;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==(t=this.itemManager.invalidItems).length){e.next=3;break}return e.abrupt("return");case 3:return n=t.map((function(e){return e.payloadRepresentation()})),e.next=6,this.payloadsByDecryptingPayloads(n);case 6:return r=e.sent,e.next=9,this.modelManager.emitPayloads(r,d.a.LocalChanged);case 9:case"end":return e.stop()}}),e,this)}))),function(){return Ae.apply(this,arguments)})},{key:"payloadsByDecryptingBackupFile",value:(fe=Q(a.a.mark((function e(t,n){var r,i,o,s,c;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t.keyParams||t.auth_params,i=t.items,o=i.map((function(e){return Object(g.f)(e,d.a.FileImport)})),!r){e.next=12;break}return e.next=6,this.computeRootKey(n,r);case 6:return c=e.sent,e.next=9,this.payloadsByDecryptingPayloads(o,c);case 9:s=e.sent,e.next=13;break;case 12:s=o;case 13:return e.abrupt("return",s);case 14:case"end":return e.stop()}}),e,this)}))),function(e,t){return fe.apply(this,arguments)})},{key:"createKeyParams",value:function(e){return e.version||(e.version=c.a.V002),Object(u.a)(e)}},{key:"createBackupFile",value:(le=Q(a.a.mark((function e(t){var n,r,i,o,c,u,l,f,A,h,p,y,v,b,m,I=arguments;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=I.length>1&&void 0!==I[1]?I[1]:s.a.FilePreferEncrypted,r=I.length>2&&void 0!==I[2]&&I[2],i=t||this.itemManager.items,!r||0!==i.length){e.next=5;break}return e.abrupt("return",void 0);case 5:o=[],c=!0,u=!1,l=void 0,e.prev=9,f=i[Symbol.iterator]();case 11:if(c=(A=f.next()).done){e.next=25;break}if(!(h=A.value).errorDecrypting){e.next=17;break}o.push(h.payload),e.next=22;break;case 17:return p=Object(g.f)(h.payload,d.a.FileImport),e.next=20,this.payloadByEncryptingPayload(p,n);case 20:y=e.sent,o.push(y);case 22:c=!0,e.next=11;break;case 25:e.next=31;break;case 27:e.prev=27,e.t0=e.catch(9),u=!0,l=e.t0;case 31:e.prev=31,e.prev=32,c||null==f.return||f.return();case 34:if(e.prev=34,!u){e.next=37;break}throw l;case 37:return e.finish(34);case 38:return e.finish(31);case 39:return v={items:o.map((function(e){return e.ejected()}))},e.next=42,this.getRootKeyParams();case 42:return(b=e.sent)&&n!==s.a.FileDecrypted&&(v.keyParams=b.getPortableValue()),m=2,e.abrupt("return",JSON.stringify(v,null,m));case 46:case"end":return e.stop()}}),e,this,[[9,27,31,39],[32,,34,38]])}))),function(e){return le.apply(this,arguments)})},{key:"onKeyStatusChange",value:function(e){var t=this;return this.keyObservers.push(e),function(){Object(w.B)(t.keyObservers,e)}}},{key:"notifyObserversOfKeyChange",value:(ue=Q(a.a.mark((function e(){var t,n,r,i,o,s;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=!0,n=!1,r=void 0,e.prev=3,i=this.keyObservers[Symbol.iterator]();case 5:if(t=(o=i.next()).done){e.next=12;break}return s=o.value,e.next=9,s();case 9:t=!0,e.next=5;break;case 12:e.next=18;break;case 14:e.prev=14,e.t0=e.catch(3),n=!0,r=e.t0;case 18:e.prev=18,e.prev=19,t||null==i.return||i.return();case 21:if(e.prev=21,!n){e.next=24;break}throw r;case 24:return e.finish(21);case 25:return e.finish(18);case 26:case"end":return e.stop()}}),e,this,[[3,14,18,26],[19,,21,25]])}))),function(){return ue.apply(this,arguments)})},{key:"getRootKeyFromKeychain",value:(ce=Q(a.a.mark((function e(){var t,n;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.deviceInterface.getKeychainValue();case 2:if(t=e.sent,!Object(w.p)(t)){e.next=5;break}return e.abrupt("return",void 0);case 5:return e.next=7,b.a.Create(t);case 7:return n=e.sent,e.abrupt("return",n);case 9:case"end":return e.stop()}}),e,this)}))),function(){return ce.apply(this,arguments)})},{key:"saveRootKeyToKeychain",value:(se=Q(a.a.mark((function e(){var t,n=this;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!Object(w.p)(this.rootKey)){e.next=2;break}throw"Attempting to non-existent root key to the keychain.";case 2:if(this.keyMode===r.RootKeyOnly){e.next=4;break}throw"Should not be persisting wrapped key to keychain.";case 4:return t=this.rootKey.getPersistableValue(),e.abrupt("return",this.executeCriticalFunction((function(){return n.deviceInterface.setKeychainValue(t)})));case 6:case"end":return e.stop()}}),e,this)}))),function(){return se.apply(this,arguments)})},{key:"hasRootKeyWrapper",value:(oe=Q(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getRootKeyWrapperKeyParams();case 2:return t=e.sent,e.abrupt("return",!Object(w.p)(t));case 4:case"end":return e.stop()}}),e,this)}))),function(){return oe.apply(this,arguments)})},{key:"hasPasscode",value:function(){return this.keyMode===r.WrapperOnly||this.keyMode===r.RootKeyPlusWrapper}},{key:"rootKeyNeedsUnwrapping",value:(ae=Q(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.hasRootKeyWrapper();case 2:if(e.t0=e.sent,!e.t0){e.next=5;break}e.t0=Object(w.p)(this.rootKey);case 5:return e.abrupt("return",e.t0);case 6:case"end":return e.stop()}}),e,this)}))),function(){return ae.apply(this,arguments)})},{key:"getRootKeyWrapperKeyParams",value:(ie=Q(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.storageService.getValue(E.b.RootKeyWrapperKeyParams,k.d.Nonwrapped);case 2:if(t=e.sent){e.next=5;break}return e.abrupt("return",void 0);case 5:return e.abrupt("return",this.createKeyParams(t));case 6:case"end":return e.stop()}}),e,this)}))),function(){return ie.apply(this,arguments)})},{key:"getWrappedRootKey",value:(re=Q(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.storageService.getValue(E.b.WrappedRootKey,k.d.Nonwrapped));case 1:case"end":return e.stop()}}),e,this)}))),function(){return re.apply(this,arguments)})},{key:"getRootKeyParams",value:(ne=Q(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.keyMode!==r.WrapperOnly){e.next=4;break}return e.abrupt("return",this.getRootKeyWrapperKeyParams());case 4:if(this.keyMode!==r.RootKeyOnly&&this.keyMode!==r.RootKeyPlusWrapper){e.next=8;break}return e.abrupt("return",this.getAccountKeyParams());case 8:if(this.keyMode!==r.RootKeyNone){e.next=12;break}return e.abrupt("return",void 0);case 12:throw"Unhandled key mode for getRootKeyParams ".concat(this.keyMode);case 13:case"end":return e.stop()}}),e,this)}))),function(){return ne.apply(this,arguments)})},{key:"getAccountKeyParams",value:(te=Q(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.storageService.getValue(E.b.RootKeyParams,k.d.Nonwrapped);case 2:if(t=e.sent){e.next=5;break}return e.abrupt("return",void 0);case 5:return e.abrupt("return",this.createKeyParams(t));case 6:case"end":return e.stop()}}),e,this)}))),function(){return te.apply(this,arguments)})},{key:"validateWrappingKey",value:(ee=Q(a.a.mark((function e(t){var n,i,o;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getWrappedRootKey();case 2:if(n=e.sent,this.keyMode!==r.WrapperOnly){e.next=7;break}return e.abrupt("return",this.storageService.canDecryptWithKey(t));case 7:if(this.keyMode!==r.RootKeyOnly&&this.keyMode!==r.RootKeyPlusWrapper){e.next=15;break}return i=Object(g.e)(n),e.next=11,this.payloadByDecryptingPayload(i,t);case 11:return o=e.sent,e.abrupt("return",!o.errorDecrypting);case 15:throw"Unhandled case in validateWrappingKey";case 16:case"end":return e.stop()}}),e,this)}))),function(e){return ee.apply(this,arguments)})},{key:"computeWrappingKey",value:(Z=Q(a.a.mark((function e(t){var n,r;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getRootKeyWrapperKeyParams();case 2:return n=e.sent,e.next=5,this.computeRootKey(t,n);case 5:return r=e.sent,e.abrupt("return",r);case 7:case"end":return e.stop()}}),e,this)}))),function(e){return Z.apply(this,arguments)})},{key:"unwrapRootKey",value:(X=Q(a.a.mark((function e(t){var n,i,o;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.keyMode!==r.WrapperOnly){e.next=3;break}return this.rootKey=t,e.abrupt("return");case 3:if(this.keyMode===r.RootKeyPlusWrapper){e.next=5;break}throw"Invalid key mode condition for unwrapping.";case 5:return e.next=7,this.getWrappedRootKey();case 7:return n=e.sent,i=Object(g.e)(n),e.next=11,this.payloadByDecryptingPayload(i,t);case 11:if(!(o=e.sent).errorDecrypting){e.next=16;break}throw Error("Unable to decrypt root key with provided wrapping key.");case 16:return e.next=18,b.a.Create(o.contentObject,o.uuid);case 18:return this.rootKey=e.sent,e.next=21,this.notifyObserversOfKeyChange();case 21:case"end":return e.stop()}}),e,this)}))),function(e){return X.apply(this,arguments)})},{key:"setNewRootKeyWrapper",value:(W=Q(a.a.mark((function e(t,n){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.keyMode!==r.RootKeyNone){e.next=4;break}this.keyMode=r.WrapperOnly,e.next=9;break;case 4:if(this.keyMode!==r.RootKeyOnly){e.next=8;break}this.keyMode=r.RootKeyPlusWrapper,e.next=9;break;case 8:throw Error("Attempting to set wrapper on already wrapped key.");case 9:return e.next=11,this.deviceInterface.clearKeychainValue();case 11:if(this.keyMode!==r.WrapperOnly&&this.keyMode!==r.RootKeyPlusWrapper){e.next=26;break}if(this.keyMode!==r.WrapperOnly){e.next=18;break}return this.rootKey=t,e.next=16,this.reencryptItemsKeys();case 16:e.next=20;break;case 18:return e.next=20,this.wrapAndPersistRootKey(t);case 20:return e.next=22,this.storageService.setValue(E.b.RootKeyWrapperKeyParams,n.getPortableValue(),k.d.Nonwrapped);case 22:return e.next=24,this.notifyObserversOfKeyChange();case 24:e.next=27;break;case 26:throw Error("Invalid keyMode on setNewRootKeyWrapper");case 27:case"end":return e.stop()}}),e,this)}))),function(e,t){return W.apply(this,arguments)})},{key:"wrapAndPersistRootKey",value:(q=Q(a.a.mark((function e(t){var n,r;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=Object(g.e)(this.rootKey,{content:this.rootKey.getPersistableValue()}),e.next=3,this.payloadByEncryptingPayload(n,s.a.LocalStorageEncrypted,t);case 3:return r=e.sent,e.next=6,this.storageService.setValue(E.b.WrappedRootKey,r.ejected(),k.d.Nonwrapped);case 6:case"end":return e.stop()}}),e,this)}))),function(e){return q.apply(this,arguments)})},{key:"removeRootKeyWrapper",value:(z=Q(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.keyMode===r.WrapperOnly||this.keyMode===r.RootKeyPlusWrapper){e.next=2;break}throw"Attempting to remove root key wrapper on unwrapped key.";case 2:return this.keyMode===r.WrapperOnly?(this.keyMode=r.RootKeyNone,this.rootKey=void 0):this.keyMode===r.RootKeyPlusWrapper&&(this.keyMode=r.RootKeyOnly),e.next=5,this.storageService.removeValue(E.b.WrappedRootKey,k.d.Nonwrapped);case 5:return e.next=7,this.storageService.removeValue(E.b.RootKeyWrapperKeyParams,k.d.Nonwrapped);case 7:if(this.keyMode!==r.RootKeyOnly){e.next=10;break}return e.next=10,this.saveRootKeyToKeychain();case 10:return e.next=12,this.notifyObserversOfKeyChange();case 12:case"end":return e.stop()}}),e,this)}))),function(){return z.apply(this,arguments)})},{key:"setNewRootKey",value:(V=Q(a.a.mark((function e(t,n,i){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n){e.next=2;break}throw Error("keyParams must be supplied if setting root key.");case 2:if(this.rootKey!==t){e.next=4;break}throw Error("Attempting to set root key as same current value.");case 4:if(this.keyMode!==r.WrapperOnly){e.next=8;break}this.keyMode=r.RootKeyPlusWrapper,e.next=16;break;case 8:if(this.keyMode!==r.RootKeyNone){e.next=12;break}this.keyMode=r.RootKeyOnly,e.next=16;break;case 12:if(this.keyMode!==r.RootKeyOnly&&this.keyMode!==r.RootKeyPlusWrapper){e.next=15;break}e.next=16;break;case 15:throw Error("Unhandled key mode for setNewRootKey ".concat(this.keyMode));case 16:return this.rootKey=t,e.next=19,this.storageService.setValue(E.b.RootKeyParams,n.getPortableValue(),k.d.Nonwrapped);case 19:if(this.keyMode!==r.RootKeyOnly){e.next=24;break}return e.next=22,this.saveRootKeyToKeychain();case 22:e.next=29;break;case 24:if(this.keyMode!==r.RootKeyPlusWrapper){e.next=29;break}if(i){e.next=27;break}throw Error("wrappingKey must be supplied");case 27:return e.next=29,this.wrapAndPersistRootKey(i);case 29:return e.next=31,this.notifyObserversOfKeyChange();case 31:return e.next=33,this.reencryptItemsKeys();case 33:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return V.apply(this,arguments)})},{key:"getRootKey",value:(J=Q(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.rootKey);case 1:case"end":return e.stop()}}),e,this)}))),function(){return J.apply(this,arguments)})},{key:"clearLocalKeyState",value:(Y=Q(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.deviceInterface.clearKeychainValue();case 2:return e.next=4,this.storageService.removeValue(E.b.WrappedRootKey,k.d.Nonwrapped);case 4:return e.next=6,this.storageService.removeValue(E.b.RootKeyWrapperKeyParams,k.d.Nonwrapped);case 6:return e.next=8,this.storageService.removeValue(E.b.RootKeyParams,k.d.Nonwrapped);case 8:return this.keyMode=r.RootKeyNone,this.rootKey=void 0,e.next=12,this.notifyObserversOfKeyChange();case 12:case"end":return e.stop()}}),e,this)}))),function(){return Y.apply(this,arguments)})},{key:"validateAccountPassword",value:($=Q(a.a.mark((function e(t){var n,r,i;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getRootKeyParams();case 2:return n=e.sent,e.next=5,this.computeRootKey(t,n);case 5:if(r=e.sent,!(i=r.compare(this.rootKey))){e.next=11;break}return e.abrupt("return",{valid:i,artifacts:{rootKey:r}});case 11:return e.abrupt("return",{valid:!1});case 12:case"end":return e.stop()}}),e,this)}))),function(e){return $.apply(this,arguments)})},{key:"validatePasscode",value:(G=Q(a.a.mark((function e(t){var n,r,i;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getRootKeyWrapperKeyParams();case 2:return n=e.sent,e.next=5,this.computeRootKey(t,n);case 5:return r=e.sent,e.next=8,this.validateWrappingKey(r);case 8:if(!(i=e.sent)){e.next=13;break}return e.abrupt("return",{valid:i,artifacts:{wrappingKey:r}});case 13:return e.abrupt("return",{valid:!1});case 14:case"end":return e.stop()}}),e,this)}))),function(e){return G.apply(this,arguments)})},{key:"contentTypeUsesRootKeyEncryption",value:function(e){return e===B.a.ItemsKey||e===B.a.EncryptedStorage}},{key:"keyToUseForEncryptionOfPayload",value:(K=Q(a.a.mark((function e(t,n){var r;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!Object(w.p)(n)){e.next=2;break}throw"Intent must be supplied when looking up key for encryption of item.";case 2:if(!this.contentTypeUsesRootKeyEncryption(t.content_type)){e.next=15;break}return e.next=5,this.getRootKey();case 5:if(r=e.sent){e.next=12;break}if(!Object(s.b)(n)){e.next=11;break}throw"Root key encryption is required but no root key is available.";case 11:return e.abrupt("return",void 0);case 12:return e.abrupt("return",r);case 15:return e.abrupt("return",this.getDefaultItemsKey());case 16:case"end":return e.stop()}}),e,this)}))),function(e,t){return K.apply(this,arguments)})},{key:"keyToUseForDecryptionOfPayload",value:(L=Q(a.a.mark((function e(t){var n,r;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.contentTypeUsesRootKeyEncryption(t.content_type)){e.next=2;break}return e.abrupt("return",this.getRootKey());case 2:if(!t.items_key_id){e.next=5;break}return n=this.itemsKeyForPayload(t),e.abrupt("return",n);case 5:if((r=t.version)!==this.getLatestVersion()){e.next=8;break}throw"No associated key found for item encrypted with latest protocol version.";case 8:return e.abrupt("return",this.defaultItemsKeyForItemVersion(r));case 9:case"end":return e.stop()}}),e,this)}))),function(e){return L.apply(this,arguments)})},{key:"onSyncEvent",value:(U=Q(a.a.mark((function e(t){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==y.b.FullSyncCompleted){e.next=3;break}return e.next=3,this.handleFullSyncCompletion();case 3:if(t!==y.b.DownloadFirstSyncCompleted){e.next=6;break}return e.next=6,this.handleDownloadFirstSyncCompletion();case 6:case"end":return e.stop()}}),e,this)}))),function(e){return U.apply(this,arguments)})},{key:"handleDownloadFirstSyncCompletion",value:(N=Q(a.a.mark((function e(){var t,n,r,i,s;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=this.latestItemsKeys(),n=t.filter((function(e){return e.neverSynced})),r=t.find((function(e){return!e.neverSynced&&e.isDefault})),Object(w.p)(r)){e.next=9;break}return e.next=7,this.itemManager.setItemsToBeDeleted(Object(o.b)(n));case 7:e.next=20;break;case 9:return e.next=11,this.getRootKey();case 11:if(!(i=e.sent)){e.next=20;break}if(!((s=n.filter((function(e){return e.version!==i.version}))).length>0)){e.next=17;break}return e.next=17,this.itemManager.setItemsToBeDeleted(Object(o.b)(s));case 17:if(0!==this.latestItemsKeys().length){e.next=20;break}return e.next=20,this.createNewDefaultItemsKey();case 20:case"end":return e.stop()}}),e,this)}))),function(){return N.apply(this,arguments)})},{key:"handleFullSyncCompletion",value:(H=Q(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.getDefaultItemsKey()){e.next=6;break}return e.next=4,this.createNewDefaultItemsKey();case 4:if(this.keyMode!==r.WrapperOnly){e.next=6;break}return e.abrupt("return",this.repersistAllItems());case 6:case"end":return e.stop()}}),e,this)}))),function(){return H.apply(this,arguments)})},{key:"repersistAllItems",value:(j=Q(a.a.mark((function e(){var t,n;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.itemManager.items,n=t.map((function(e){return Object(g.e)(e)})),e.abrupt("return",this.storageService.savePayloads(n));case 3:case"end":return e.stop()}}),e,this)}))),function(){return j.apply(this,arguments)})},{key:"latestItemsKeys",value:function(){return this.itemManager.itemsKeys()}},{key:"itemsKeyForPayload",value:function(e){return this.latestItemsKeys().find((function(t){return t.uuid===e.items_key_id}))}},{key:"getDefaultItemsKey",value:function(){var e=this.latestItemsKeys();return 1===e.length?e[0]:e.find((function(e){return e.isDefault}))}},{key:"reencryptItemsKeys",value:(T=Q(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!((t=this.latestItemsKeys()).length>0)){e.next=4;break}return e.next=4,this.itemManager.setItemsDirty(Object(o.b)(t));case 4:case"end":return e.stop()}}),e,this)}))),function(){return T.apply(this,arguments)})},{key:"defaultItemsKeyForItemVersion",value:(S=Q(a.a.mark((function e(t){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.latestItemsKeys().find((function(e){return e.version===t})));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return S.apply(this,arguments)})},{key:"createNewDefaultItemsKey",value:(m=Q(a.a.mark((function e(){var t,n,r,i,s,u;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getRootKey();case 2:if(t=e.sent,n=t?t.version:this.getLatestVersion(),!(Object(c.b)(n,R)<=0)){e.next=16;break}return e.t0=g.e,e.next=8,I.a.GenerateUuid();case 8:e.t1=e.sent,e.t2=B.a.ItemsKey,e.t3=Object(o.a)({itemsKey:t.masterKey,dataAuthenticationKey:t.dataAuthenticationKey,version:n}),e.t4={uuid:e.t1,content_type:e.t2,content:e.t3},i=(0,e.t0)(e.t4),r=Object(v.a)(i),e.next=19;break;case 16:return e.next=18,this.operatorForVersion(n).createItemsKey();case 18:r=e.sent;case 19:if(!(s=this.getDefaultItemsKey())){e.next=23;break}return e.next=23,this.itemManager.changeItemsKey(s.uuid,(function(e){e.isDefault=!1}));case 23:return e.next=25,this.itemManager.insertItem(r);case 25:return u=e.sent,e.next=28,this.itemManager.changeItemsKey(u.uuid,(function(e){e.isDefault=!0}));case 28:case"end":return e.stop()}}),e,this)}))),function(){return m.apply(this,arguments)})}])&&x(n.prototype,i),t}(m.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return C}));var r=n(0),i=n.n(r),a=n(30),o=n(18),s=n(33),c=n(44),u=n(12),l=n(2),f=n(9),A=n(29),h=n(1);function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function d(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function g(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){d(a,r,i,o,s,"next",e)}function s(e){d(a,r,i,o,s,"throw",e)}o(void 0)}))}}function y(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var n=0;n1&&void 0!==c[1])||c[1],r=c.length>2?c[2]:void 0,a=this.getChallengeOperation(t),o=!a,a||(a=this.createChallengeOperation(t,n)),r&&(r.orchestrator=a.orchestrator),e.abrupt("return",new Promise((function(e){a.setResolver(e),o&&s.challengeHandler(t,a.orchestrator)})));case 7:case"end":return e.stop()}}),e,this)}))),function(e){return f.apply(this,arguments)})},{key:"validateChallengeValue",value:(c=A(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.type!==u.d.LocalPasscode){e.next=4;break}return e.abrupt("return",this.protocolService.validatePasscode(t.value));case 4:if(t.type!==u.d.AccountPassword){e.next=8;break}return e.abrupt("return",this.protocolService.validateAccountPassword(t.value));case 8:if(t.type!==u.d.Biometric){e.next=10;break}return e.abrupt("return",{valid:!0===t.value});case 10:throw"Cannot validate challenge type ".concat(t.type);case 11:case"end":return e.stop()}}),e,this)}))),function(e){return c.apply(this,arguments)})},{key:"getLaunchChallenge",value:(a=A(i.a.mark((function e(){var t,n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=[],this.protocolService.hasPasscode()&&t.push(u.d.LocalPasscode),e.next=5,this.storageService.getValue(o.b.BiometricPrefs,s.d.Nonwrapped);case 5:if((n=e.sent)&&n.enabled&&t.push(u.d.Biometric),!(t.length>0)){e.next=12;break}return e.abrupt("return",new u.a(t,u.b.ApplicationUnlock));case 12:return e.abrupt("return",null);case 13:case"end":return e.stop()}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"isPasscodeLocked",value:function(){return this.protocolService.rootKeyNeedsUnwrapping()}},{key:"enableBiometrics",value:(r=A(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.storageService.setValue(o.b.BiometricPrefs,{enabled:!0},s.d.Nonwrapped);case 2:case"end":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"createChallengeOperation",value:function(e,t){var n=this,r=new C(e,t);return r.setOrchestratorFunctions((function(e,t,n,i){var a=new w(e,t,n,i);r.client=a}),(function(t,r,i){n.setValidationStatusForChallenge(e,t,r,i)}),(function(t){n.submitValuesForChallenge(e,t)}),(function(){n.cancelChallenge(e)})),this.setChallengeOperation(r),r}},{key:"getChallengeOperation",value:function(e){return this.challengeOperations[e.id]}},{key:"setChallengeOperation",value:function(e){this.challengeOperations[e.challenge.id]=e}},{key:"deleteChallengeOperation",value:function(e){delete this.challengeOperations[e.challenge.id]}},{key:"cancelChallenge",value:function(e){var t=this.challengeOperations[e.id];t.cancel(),this.deleteChallengeOperation(t)}},{key:"submitValuesForChallenge",value:(n=A(i.a.mark((function e(t,n){var r,a,o,s,c,l,f,A,h,p,d;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==n.length){e.next=2;break}throw Error("Attempting to submit 0 values for challenge");case 2:if(!(r=this.getChallengeOperation(t)).validate){e.next=36;break}a=!0,o=!1,s=void 0,e.prev=7,c=n[Symbol.iterator]();case 9:if(a=(l=c.next()).done){e.next=20;break}return f=l.value,e.next=13,this.validateChallengeValue(f);case 13:A=e.sent,h=A.valid,p=A.artifacts,this.setValidationStatusForChallenge(t,f,h,p);case 17:a=!0,e.next=9;break;case 20:e.next=26;break;case 22:e.prev=22,e.t0=e.catch(7),o=!0,s=e.t0;case 26:e.prev=26,e.prev=27,a||null==c.return||c.return();case 29:if(e.prev=29,!o){e.next=32;break}throw s;case 32:return e.finish(29);case 33:return e.finish(26);case 34:e.next=38;break;case 36:d=new u.c(t,n),r.complete(d);case 38:case"end":return e.stop()}}),e,this,[[7,22,26,34],[27,,29,33]])}))),function(e,t){return n.apply(this,arguments)})},{key:"setValidationStatusForChallenge",value:function(e,t,n,r){var i=this.getChallengeOperation(e);i.setValueStatus(t,n,r),i.isFinished()&&this.deleteChallengeOperation(i)}}]),t}(a.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var r=n(6),i=n(26),a=n(7);function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n0?"".concat(this.textCharDiffLength," characters added"):"Title or metadata changed":"".concat(this.textCharDiffLength," characters loaded")}}])&&o(n.prototype,r),t}(n(91).a),f=n(4);function A(e){var t,n,i,a=(t={},n=f.a.Note,i=l,n in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]=i,t)[e[r.a.ContentType]];if(!a)throw"Invalid item history class";return new a(e)}function h(e,t){for(var n=0;n15},r=function(r,i,a){if(a)t.push(r);else{var o=t.indexOf(r);-1!==o&&t.splice(o,1)}if(a&&n(r)&&-1===r.operationVector()){var s=e.entries[i-1];s&&t.push(s)}};this.entries.forEach((function(t,i){if(0===i||i===e.entries.length-1)r(t,i,!0);else{var a=n(t);r(t,i,a)}})),this.entries=this.entries.filter((function(e,n){return-1!==t.indexOf(e)}))}}])&&h(t.prototype,n),r&&h(t,r),e}()},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t,n){var r=n(145),i=n(146),a=n(147),o=n(148),s=n(149);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e2&&void 0!==r[2]&&r[2],r.length>3&&r[3],e.abrupt("return",new Promise((function(e,n){window.alert(t),e()})));case 3:case"end":return e.stop()}}),e)}))),function(e,t){return o.apply(this,arguments)})},{key:"confirm",value:(a=s(i.a.mark((function e(t,n){var r=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r.length>2&&void 0!==r[2]&&r[2],r.length>3&&void 0!==r[3]&&r[3],r.length>4&&r[4],r.length>5&&r[5],r.length>6&&void 0!==r[6]&&r[6],e.abrupt("return",new Promise((function(e,n){window.confirm(t)?e():n()})));case 6:case"end":return e.stop()}}),e)}))),function(e,t){return a.apply(this,arguments)})}])&&c(n.prototype,r),t}(n(16).a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return b}));var r=n(0),i=n.n(r),a=n(16),o=n(1),s=n(8),c=n(54),u=n(22);function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function f(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function A(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){f(a,r,i,o,s,"next",e)}function s(e){f(a,r,i,o,s,"throw",e)}o(void 0)}))}}function h(e,t){for(var n=0;n1&&void 0!==r[1])||r[1],e.next=3,this.apiService.setSession(t,n);case 3:case"end":return e.stop()}}),e,this)}))),function(e){return w.apply(this,arguments)})},{key:"online",value:function(){return!this.offline()}},{key:"offline",value:function(){return Object(o.p)(this.apiService.getSession())}},{key:"getUser",value:function(){return this.user}},{key:"signOut",value:(I=A(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.user=void 0,e.next=3,this.apiService.getSession();case 3:(t=e.sent)&&t.canExpire()&&this.apiService.signOut();case 5:case"end":return e.stop()}}),e,this)}))),function(){return I.apply(this,arguments)})},{key:"register",value:(m=A(i.a.mark((function e(t,n){var r,a,o,s,c=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(n.length<8)){e.next=2;break}return e.abrupt("return",{response:this.apiService.createErrorResponse(u.m(8))});case 2:return e.next=4,this.protocolService.createRootKey(t,n);case 4:return r=e.sent,a=r.key.serverPassword,o=r.keyParams,s=r.key,e.abrupt("return",this.apiService.register(t,a,o).then(function(){var e=A(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.handleAuthResponse(t);case 2:return e.abrupt("return",{response:t,keyParams:o,rootKey:s});case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 9:case"end":return e.stop()}}),e,this)}))),function(e,t){return m.apply(this,arguments)})},{key:"signIn",value:(b=A(i.a.mark((function e(t,n){var r,a,o,s,c,l,f,h,p,d,g,y,v=this,b=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=b.length>2&&void 0!==b[2]&&b[2],a=b.length>3?b[3]:void 0,o=b.length>4?b[4]:void 0,e.next=5,this.apiService.getAccountKeyParams(t,a,o);case 5:if(!(s=e.sent).error){e.next=8;break}return e.abrupt("return",{response:s});case 8:if(c={pw_cost:s.pw_cost,pw_nonce:s.pw_nonce,identifier:s.identifier,email:s.email,pw_salt:s.pw_salt,version:s.version},(l=this.protocolService.createKeyParams(c))&&l.version){e.next=12;break}return e.abrupt("return",{response:this.apiService.createErrorResponse(u.b)});case 12:if(this.protocolService.supportedVersions().includes(l.version)){e.next=18;break}if(!this.protocolService.isVersionNewerThanLibraryVersion(l.version)){e.next=17;break}return e.abrupt("return",{response:this.apiService.createErrorResponse(u.s)});case 17:return e.abrupt("return",{response:this.apiService.createErrorResponse(u.k)});case 18:if(!this.protocolService.isProtocolVersionOutdated(l.version)){e.next=29;break}if(f=this.protocolService.costMinimumForVersion(l.version),!(l.kdfIterations1&&void 0!==r[1])||r[1],this.session=t,!n){e.next=5;break}return e.next=5,this.storageService.setValue(h.b.Session,t);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return x.apply(this,arguments)})},{key:"getSession",value:function(){return this.session}},{key:"path",value:(Q=v(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getHost();case 2:if(n=e.sent){e.next=5;break}throw"Attempting to build path ".concat(t," with no host.");case 5:if(t){e.next=7;break}throw"Attempting to build path with null path.";case 7:return e.abrupt("return",Object(A.u)(n,t));case 8:case"end":return e.stop()}}),e,this)}))),function(e){return Q.apply(this,arguments)})},{key:"params",value:function(e){return c()(e,B({},u.a.ApiVersion,"20200115"))}},{key:"createErrorResponse",value:function(e){return{error:{message:e}}}},{key:"errorResponseWithFallbackMessage",value:function(e,t){return e.error.message||(e.error.message=t),e}},{key:"getAccountKeyParams",value:(S=v(i.a.mark((function e(t,n,r){var a,o,s,c=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.path("/auth/params");case 2:return a=e.sent,o=this.params({email:t}),n&&(o[n]=r),e.next=7,this.httpService.getAbsolute(a,o).catch((function(e){return c.errorResponseWithFallbackMessage(e,l.d)}));case 7:return s=e.sent,e.abrupt("return",s);case 9:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return S.apply(this,arguments)})},{key:"register",value:(_=v(i.a.mark((function e(t,n,r){var a,o,s,c=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.registering){e.next=2;break}return e.abrupt("return",this.createErrorResponse(l.i));case 2:return this.registering=!0,e.next=5,this.path("/auth");case 5:return a=e.sent,o=this.params(g({password:n,email:t},r.getPortableValue())),e.next=9,this.httpService.postAbsolute(a,o).catch((function(e){return c.errorResponseWithFallbackMessage(e,l.e)}));case 9:return s=e.sent,this.registering=!1,e.abrupt("return",s);case 12:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return _.apply(this,arguments)})},{key:"signIn",value:(k=v(i.a.mark((function e(t,n,r,a){var o,s,c,u=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.authenticating){e.next=2;break}return e.abrupt("return",this.createErrorResponse(l.h));case 2:return this.authenticating=!0,e.next=5,this.path("/auth/sign_in");case 5:return o=e.sent,s=this.params({email:t,password:n}),r&&(s[r]=a),e.next=10,this.httpService.postAbsolute(o,s).catch((function(e){return u.errorResponseWithFallbackMessage(e,l.d)}));case 10:return c=e.sent,this.authenticating=!1,e.abrupt("return",c);case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,n,r){return k.apply(this,arguments)})},{key:"signOut",value:(E=v(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.path("/auth/sign_out");case 2:return t=e.sent,e.abrupt("return",this.httpService.postAbsolute(t,void 0,this.session.accessToken));case 4:case"end":return e.stop()}}),e,this)}))),function(){return E.apply(this,arguments)})},{key:"changePassword",value:(y=v(i.a.mark((function e(t,n,r){var a,s,c,u=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.changing){e.next=2;break}return e.abrupt("return",this.createErrorResponse(l.a));case 2:if(!this.refreshingSession){e.next=4;break}return e.abrupt("return",this.createErrorResponse(l.j));case 4:return this.changing=!0,e.next=7,this.path("/auth/change_pw");case 7:return a=e.sent,s=this.params(g({current_password:t,new_password:n},r.getPortableValue())),e.next=11,this.httpService.postAbsolute(a,s,this.session.accessToken).catch(function(){var e=v(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!u.httpService.isErrorResponseExpiredToken(t)){e.next=2;break}return e.abrupt("return",u.refreshSessionThenRetryRequest({verb:o.a.Post,url:a,params:s}));case 2:return e.abrupt("return",u.errorResponseWithFallbackMessage(t,l.c));case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 11:return c=e.sent,this.changing=!1,e.abrupt("return",c);case 14:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return y.apply(this,arguments)})},{key:"sync",value:(d=v(i.a.mark((function e(t,n,r,a){var s,c,f,A,h,p,d,g=this,y=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=y.length>4&&void 0!==y[4]&&y[4],f=y.length>5?y[5]:void 0,A=y.length>6?y[6]:void 0,!this.refreshingSession){e.next=5;break}return e.abrupt("return",this.createErrorResponse(l.j));case 5:return e.next=7,this.path("/items/sync");case 7:return h=e.sent,p=this.params((B(s={},u.a.SyncPayloads,t.map((function(e){return e.ejected()}))),B(s,u.a.LastSyncToken,n),B(s,u.a.PaginationToken,r),B(s,u.a.IntegrityCheck,c),B(s,u.a.SyncDlLimit,a),B(s,"content_type",f),B(s,"event",A),s)),e.next=11,this.httpService.postAbsolute(h,p,this.session.accessToken).catch(function(){var e=v(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!g.httpService.isErrorResponseExpiredToken(t)){e.next=2;break}return e.abrupt("return",g.refreshSessionThenRetryRequest({verb:o.a.Post,url:h,params:p}));case 2:return e.abrupt("return",g.errorResponseWithFallbackMessage(t,l.f));case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}());case 11:return d=e.sent,e.abrupt("return",d);case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,n,r){return d.apply(this,arguments)})},{key:"refreshSessionThenRetryRequest",value:(f=v(i.a.mark((function e(t){var n=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.refreshSession().then((function(e){return(null==e?void 0:e.error)?e:n.httpService.runHttp(g({},t,{authentication:n.session.accessToken}))})));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return f.apply(this,arguments)})},{key:"refreshSession",value:(s=v(i.a.mark((function e(){var t,n,r,o=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.refreshingSession){e.next=2;break}return e.abrupt("return",this.createErrorResponse(l.j));case 2:return this.refreshingSession=!0,e.next=5,this.path("/session/refresh");case 5:return t=e.sent,n=this.params({access_token:this.session.accessToken,refresh_token:this.session.refreshToken}),e.next=9,this.httpService.postAbsolute(t,n).then(function(){var e=v(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=a.a.FromResponse(t),e.next=3,o.setSession(n);case 3:return e.abrupt("return",t);case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()).catch((function(e){return o.errorResponseWithFallbackMessage(e,l.g)}));case 9:return r=e.sent,this.refreshingSession=!1,e.abrupt("return",r);case 12:case"end":return e.stop()}}),e,this)}))),function(){return s.apply(this,arguments)})}])&&b(n.prototype,r),t}(f.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return P}));var r=n(0),i=n.n(r),a=n(13),o=n(19),s=n(4),c=n(3),u=n(2),l=n(6),f=n(38),A=n.n(f),h=n(55),p=n.n(h),d=n(42),g=n.n(d),y=n(16),v=n(7),b=n(20),m=n(1),I=n(28);function w(e){return(w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function C(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function B(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){C(a,r,i,o,s,"next",e)}function s(e){C(a,r,i,o,s,"throw",e)}o(void 0)}))}}function E(e,t){for(var n=0;n0&&i!==c.a.RemoteSaved&&e.isDesktop&&e.desktopManager.syncComponentsInstallation(u);var l=!0,f=!1,A=void 0;try{for(var h,p=u[Symbol.iterator]();!(l=(h=p.next()).done);l=!0){var d=h.value,g=e.activeComponents.includes(d.uuid);!d.active||d.deleted||g?!d.active&&g&&e.deactivateComponent(d.uuid):e.activateComponent(d.uuid)}}catch(e){f=!0,A=e}finally{try{l||null==p.return||p.return()}finally{if(f)throw A}}i!==c.a.LocalChanged&&e.notifyStreamObservers(o,i,a)}))}},{key:"notifyStreamObservers",value:function(e,t,n){var r=this,i=!0,a=!1,o=void 0;try{for(var s,c=function(){var t=s.value;if(n&&n===t.componentUuid)return"continue";var i=e.filter((function(e){return-1!==t.contentTypes.indexOf(e.content_type)}));if(0===i.length)return"continue";var a=[{name:v.a.StreamItems,content_types:t.contentTypes.sort()}];r.runWithPermissions(t.componentUuid,a,(function(){r.sendItemsInReply(t.componentUuid,i,t.originalMessage)}))},u=this.streamObservers[Symbol.iterator]();!(i=(s=u.next()).done);i=!0)c()}catch(e){a=!0,o=e}finally{try{i||null==u.return||u.return()}finally{if(a)throw o}}var l=[{name:v.a.StreamContextItem}],f=!0,h=!1,p=void 0;try{for(var d,g=function(){var i=d.value;if(n&&n===i.componentUuid)return"continue";var a=!0,o=!1,s=void 0;try{for(var c,u=r.handlers[Symbol.iterator]();!(a=(c=u.next()).done);a=!0){var f=c.value;if((f.areas.includes(i.area)||f.areas.includes(v.b.Any))&&f.contextRequestHandler){var h=f.contextRequestHandler(i.componentUuid);if(h&&"continue"===function(){var n=A()(e,{uuid:h.uuid});if(n){if(n.deleted)return"continue";r.runWithPermissions(i.componentUuid,l,(function(){r.sendContextItemInReply(i.componentUuid,n,i.originalMessage,t)}))}}())continue}}}catch(e){o=!0,s=e}finally{try{a||null==u.return||u.return()}finally{if(o)throw s}}},y=this.contextStreamObservers[Symbol.iterator]();!(f=(d=y.next()).done);f=!0)g()}catch(e){h=!0,p=e}finally{try{f||null==y.return||y.return()}finally{if(h)throw p}}}},{key:"isNativeExtension",value:function(e){var t=[window._extensions_manager_location,window._batch_manager_location],n=e.hosted_url,r=e.local_url&&e.local_url.replace("sn://","");return t.includes(n)||t.includes(r)}},{key:"configureForNonMobileUsage",value:function(){window.addEventListener?window.addEventListener("focus",this.detectFocusChange,!0):window.attachEvent("onfocusout",this.detectFocusChange),window.addEventListener?window.addEventListener("blur",this.detectFocusChange,!0):window.attachEvent("onblur",this.detectFocusChange),window.addEventListener("message",this.onWindowMessage)}},{key:"configureForDesktop",value:function(){var e=this;this.desktopManager.registerUpdateObserver((function(t){t.active&&t.isTheme()&&e.postActiveThemesToAllComponents()}))}},{key:"postActiveThemesToAllComponents",value:function(){var e=!0,t=!1,n=void 0;try{for(var r,i=this.components[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){var a=r.value,o=this.findOrCreateDataForComponent(a);!a.isTheme()&&a.active&&o.window&&this.postActiveThemesToComponent(a)}}catch(e){t=!0,n=e}finally{try{e||null==i.return||i.return()}finally{if(t)throw n}}}},{key:"getActiveThemes",value:function(){return this.componentsForArea(v.b.Themes).filter((function(e){return e.active}))}},{key:"urlsForActiveThemes",value:function(){var e=this.getActiveThemes(),t=[],n=!0,r=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value,c=this.urlForComponent(s);c&&t.push(c)}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return t}},{key:"postActiveThemesToComponent",value:function(e){var t={themes:this.urlsForActiveThemes()},n={action:v.a.ActivateThemes,data:t};this.sendMessageToComponent(e,n)}},{key:"contextItemDidChangeInArea",value:function(e){var t=!0,n=!1,r=void 0;try{for(var i,a=this.handlers[Symbol.iterator]();!(t=(i=a.next()).done);t=!0){var o=i.value;if(o.areas.includes(e)||o.areas.includes(v.b.Any)){var s=this.contextStreamObservers.filter((function(t){return t.area===e})),c=!0,u=!1,l=void 0;try{for(var f,A=s[Symbol.iterator]();!(c=(f=A.next()).done);c=!0){var h=f.value;if(o.contextRequestHandler){var p=o.contextRequestHandler(h.componentUuid);p&&this.sendContextItemInReply(h.componentUuid,p,h.originalMessage)}}}catch(e){u=!0,l=e}finally{try{c||null==A.return||A.return()}finally{if(u)throw l}}}}}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}}},{key:"isComponentHidden",value:function(e){return this.findOrCreateDataForComponent(e).hidden}},{key:"setComponentHidden",value:function(e,t){var n=this.findOrCreateDataForComponent(e);if(t)n.hidden=!0;else if(n.hidden){n.hidden=!1;var r=A()(this.contextStreamObservers,{identifier:e.uuid});r&&this.handleStreamContextItemMessage(e,r.originalMessage);var i=A()(this.streamObservers,{identifier:e.uuid});i&&this.handleStreamItemsMessage(e,i.originalMessage)}}},{key:"jsonForItem",value:function(e,t,n){var r=n===c.a.RemoteSaved||n===c.a.LocalSaved,i=(e.getDomainData(D)||{})[t.getClientDataKey()]||{},a={uuid:e.uuid,content_type:e.content_type,created_at:e.created_at,updated_at:e.updated_at,deleted:e.deleted,isMetadataUpdate:r,content:e.content,clientData:i};return this.removePrivatePropertiesFromResponseItems([a],t),a}},{key:"sendItemsInReply",value:function(e,t,n,r){var i=this,a=this.itemManager.findItem(e);this.log("Component manager send items in reply",a,t,n);var o={},s=t.map((function(e){return i.jsonForItem(e,a,r)}));o.items=s,this.replyToMessage(a,n,o)}},{key:"sendContextItemInReply",value:function(e,t,n,r){var i=this.itemManager.findItem(e);this.log("Component manager send context item in reply",i,t,n);var a={item:this.jsonForItem(t,i,r)};this.replyToMessage(i,n,a)}},{key:"replyToMessage",value:function(e,t,n){var r={action:v.a.Reply,original:t,data:n};this.sendMessageToComponent(e,r)}},{key:"sendMessageToComponent",value:function(e,t){var n=[v.a.ComponentRegistered,v.a.ActivateThemes],r=this.findOrCreateDataForComponent(e);if(!r.hidden||n.includes(t.action)){this.log("Component manager send message to component",e,t);var i=this.urlForComponent(e);i&&r.window||this.alertService.alert("Standard Notes is trying to communicate with ".concat(e.name,", \n but an error is occurring. Please restart this extension and try again.")),i.startsWith("http")||i.startsWith("file")||(i=window.location.href+i),r.window.postMessage(this.isMobile?JSON.stringify(t):t,i)}else this.log("Component disabled for current item, ignoring messages.",e.name)}},{key:"urlForComponent",value:function(e){if(e.offlineOnly&&!this.isDesktop)return null;if(e.offlineOnly||this.isDesktop&&e.local_url)return e.local_url&&e.local_url.replace("sn://",this.desktopManager.getExtServerHost());var t=e.hosted_url||e.legacy_url;if(this.isMobile){var n=this.platform===I.b.Ios?"localhost":"10.0.2.2";t=t.replace("localhost",n).replace("sn.local",n)}return t}},{key:"componentForUrl",value:function(e){return this.components.filter((function(t){return t.hosted_url===e||t.legacy_url===e}))[0]}},{key:"sessionKeyForComponent",value:function(e){return this.findOrCreateDataForComponent(e).sessionKey}},{key:"componentForSessionKey",value:function(e){for(var t,n=this,r=function(){var r=a[i],o=n.componentState[r];if((null==o?void 0:o.sessionKey)===e)return t=n.components.find((function(e){return e.uuid===r})),"break"},i=0,a=Object.keys(this.componentState);i2&&void 0!==arguments[2]&&arguments[2];if(!t||!this.isNativeExtension(t)){var r=["autoupdateDisabled","permissions","active"];n&&(r=r.concat(["url","hosted_url","local_url"]));var i=!0,a=!1,o=void 0;try{for(var s,c=e[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var u=s.value,l=!0,f=!1,A=void 0;try{for(var h,p=r[Symbol.iterator]();!(l=(h=p.next()).done);l=!0){var d=h.value;delete u.content[d]}}catch(e){f=!0,A=e}finally{try{l||null==p.return||p.return()}finally{if(f)throw A}}}}catch(e){a=!0,o=e}finally{try{i||null==c.return||c.return()}finally{if(a)throw o}}}}},{key:"handleStreamItemsMessage",value:function(e,t){var n=this,r=[{name:v.a.StreamItems,content_types:t.data.content_types.sort()}];this.runWithPermissions(e.uuid,r,(function(){A()(n.streamObservers,{identifier:e.uuid})||n.streamObservers.push({identifier:e.uuid,componentUuid:e.uuid,area:e.area,originalMessage:t,contentTypes:t.data.content_types});var r=[],i=!0,a=!1,o=void 0;try{for(var s,c=t.data.content_types[Symbol.iterator]();!(i=(s=c.next()).done);i=!0){var u=s.value;Object(m.j)(r,n.itemManager.nonErroredItemsForContentType(u))}}catch(e){a=!0,o=e}finally{try{i||null==c.return||c.return()}finally{if(a)throw o}}n.sendItemsInReply(e.uuid,r,t)}))}},{key:"handleStreamContextItemMessage",value:function(e,t){var n=this,r=[{name:v.a.StreamContextItem}];this.runWithPermissions(e.uuid,r,(function(){A()(n.contextStreamObservers,{identifier:e.uuid})||n.contextStreamObservers.push({identifier:e.uuid,componentUuid:e.uuid,area:e.area,originalMessage:t});var r=!0,i=!1,a=void 0;try{for(var o,s=n.handlersForArea(e.area)[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var c=o.value;if(c.contextRequestHandler){var u=c.contextRequestHandler(e.uuid);u&&n.sendContextItemInReply(e.uuid,u,t)}}}catch(e){i=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}}))}},{key:"isItemIdWithinComponentContextJurisdiction",value:function(e,t){return this.itemIdsInContextJurisdictionForComponent(t).includes(e)}},{key:"itemIdsInContextJurisdictionForComponent",value:function(e){var t=[],n=!0,r=!1,i=void 0;try{for(var a,o=this.handlersForArea(e.area)[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(s.contextRequestHandler){var c=s.contextRequestHandler(e.uuid);c&&t.push(c.uuid)}}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return t}},{key:"handlersForArea",value:function(e){return this.handlers.filter((function(t){return t.areas.includes(e)}))}},{key:"handleSaveItemsMessage",value:(M=B(i.a.mark((function e(t,n){var r,o,s,f,A,h,d,y,b,I,w,C=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=n.data.items,o=[],s=this.itemIdsInContextJurisdictionForComponent(t),f=r.slice(),A=!0,h=!1,d=void 0,e.prev=7,y=r.slice()[Symbol.iterator]();case 9:if(A=(b=y.next()).done){e.next=18;break}if(I=b.value,!s.includes(I.uuid)){e.next=15;break}return o.push({name:v.a.StreamContextItem}),Object(m.B)(f,I),e.abrupt("break",18);case 15:A=!0,e.next=9;break;case 18:e.next=24;break;case 20:e.prev=20,e.t0=e.catch(7),h=!0,d=e.t0;case 24:e.prev=24,e.prev=25,A||null==y.return||y.return();case 27:if(e.prev=27,!h){e.next=30;break}throw d;case 30:return e.finish(27);case 31:return e.finish(24);case 32:f.length>0&&(w=p()(f.map((function(e){return e.content_type}))).sort(),o.push({name:v.a.StreamItems,content_types:w})),this.runWithPermissions(t.uuid,o,B(i.a.mark((function e(){var o,s,f,A,h,p;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(C.removePrivatePropertiesFromResponseItems(r,t,!0),o=Object(a.b)(r),s=C.itemManager.findItems(o,!0),f=0,s.forEach((function(e,n){if(e)e.locked&&(g()(r,{uuid:e.uuid}),f++);else{var i=r[n];C.alertService.alert("The extension ".concat(t.name," is trying to save an item with type ")+"".concat(i.content_type,", but that item does not exist .")+"Please restart this extension and try again.")}})),!(f>0)){e.next=10;break}return A=1===f?"item":"items",h=1===f?"is":"are",C.alertService.alert("".concat(f," ").concat(A," you are attempting to save ").concat(h," locked and cannot be edited."),"Items Locked"),e.abrupt("return");case 10:return p=r.map((function(e){return Object(u.f)(e,c.a.ComponentRetrieved)})),e.next=13,C.itemManager.changeItems(o,(function(e){var n=Object(m.D)(p,{uuid:e.getUuid()});e.mergePayload(n);var i=Object(m.D)(r,{uuid:e.getUuid()});if(i.clientData){var a=Object(m.a)(e.getItem().getDomainData(D)||{});a[t.getClientDataKey()]=i.clientData,e.setDomainData(a,D)}}),l.c.UserInteraction,c.a.ComponentRetrieved,t.uuid);case 13:C.syncService.sync().then((function(){var e=Object.assign({},n);e.action=v.a.SaveSuccess,C.replyToMessage(t,n,{}),C.handleMessage(t,e)})).catch((function(){var e=Object.assign({},n);e.action=v.a.SaveError,C.replyToMessage(t,n,{error:v.a.SaveError}),C.handleMessage(t,e)}));case 14:case"end":return e.stop()}}),e)}))));case 34:case"end":return e.stop()}}),e,this,[[7,20,24,32],[25,,27,31]])}))),function(e,t){return M.apply(this,arguments)})},{key:"handleDuplicateItemMessage",value:function(e,t){var n=this,r=t.data.item,a=this.itemManager.findItem(r.uuid),o=[{name:v.a.StreamItems,content_types:[a.content_type]}];this.runWithPermissions(e.uuid,o,B(i.a.mark((function r(){var o;return i.a.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,n.itemManager.duplicateItem(a.uuid);case 2:o=r.sent,n.syncService.sync(),n.replyToMessage(e,t,{item:n.jsonForItem(o,e)});case 5:case"end":return r.stop()}}),r)}))))}},{key:"handleCreateItemsMessage",value:function(e,t){var n=this,r=t.data.item?[t.data.item]:t.data.items,a=p()(r.map((function(e){return e.content_type}))),s=[{name:v.a.StreamItems,content_types:a}];this.runWithPermissions(e.uuid,s,B(i.a.mark((function a(){var s,f,A,h,p,d,g,y;return i.a.wrap((function(a){for(;;)switch(a.prev=a.next){case 0:n.removePrivatePropertiesFromResponseItems(r,e),s=[],f=!0,A=!1,h=void 0,a.prev=5,p=i.a.mark((function t(){var r,a,f,A;return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if((r=g.value).uuid){t.next=5;break}return t.next=4,b.a.GenerateUuid();case 4:r.uuid=t.sent;case 5:return a=Object(u.f)(r,c.a.ComponentCreated),f=Object(o.a)(a),t.next=9,n.itemManager.insertItem(f);case 9:return A=t.sent,t.next=12,n.itemManager.changeItem(A.uuid,(function(t){if(r.clientData){var n=Object(m.a)(A.getDomainData(D)||{});n[e.getClientDataKey()]=r.clientData,t.setDomainData(n,D)}}),l.c.UserInteraction,c.a.ComponentCreated,e.uuid);case 12:s.push(A);case 13:case"end":return t.stop()}}),t)})),d=r[Symbol.iterator]();case 8:if(f=(g=d.next()).done){a.next=13;break}return a.delegateYield(p(),"t0",10);case 10:f=!0,a.next=8;break;case 13:a.next=19;break;case 15:a.prev=15,a.t1=a.catch(5),A=!0,h=a.t1;case 19:a.prev=19,a.prev=20,f||null==d.return||d.return();case 22:if(a.prev=22,!A){a.next=25;break}throw h;case 25:return a.finish(22);case 26:return a.finish(19);case 27:n.syncService.sync(),y=t.action===v.a.CreateItem?{item:n.jsonForItem(s[0],e)}:{items:s.map((function(t){return n.jsonForItem(t,e)}))},n.replyToMessage(e,t,y);case 30:case"end":return a.stop()}}),a,null,[[5,15,19,27],[20,,22,26]])}))))}},{key:"handleDeleteItemsMessage",value:function(e,t){var n=this,r=p()(t.data.items.map((function(e){return e.content_type}))).sort(),a=[{name:v.a.StreamItems,content_types:r}];this.runWithPermissions(e.uuid,a,B(i.a.mark((function r(){var a,o,c,u,l,f,A,h,p,d,g;return i.a.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=t.data.items,o=1===a.length?"item":"items",c=null,u=!0,r.next=6,n.alertService.confirm("Are you sure you want to delete ".concat(a.length," ").concat(o,"?")).catch((function(){u=!1}));case 6:if(!u){r.next=44;break}l=!0,f=!1,A=void 0,r.prev=10,h=a[Symbol.iterator]();case 12:if(l=(p=h.next()).done){r.next=26;break}if(d=p.value,g=n.itemManager.findItem(d.uuid)){r.next=18;break}return n.alertService.alert("The item you are trying to delete cannot be found."),r.abrupt("continue",23);case 18:if(![s.a.Component,s.a.Theme].includes(g.content_type)){r.next=21;break}return r.next=21,n.deactivateComponent(g.uuid);case 21:return r.next=23,n.itemManager.setItemToBeDeleted(g.uuid);case 23:l=!0,r.next=12;break;case 26:r.next=32;break;case 28:r.prev=28,r.t0=r.catch(10),f=!0,A=r.t0;case 32:r.prev=32,r.prev=33,l||null==h.return||h.return();case 35:if(r.prev=35,!f){r.next=38;break}throw A;case 38:return r.finish(35);case 39:return r.finish(32);case 40:n.syncService.sync(),c={deleted:!0},r.next=45;break;case 44:c={deleted:!1};case 45:n.replyToMessage(e,t,c);case 46:case"end":return r.stop()}}),r,null,[[10,28,32,40],[33,,35,39]])}))))}},{key:"handleRequestPermissionsMessage",value:function(e,t){var n=this;this.runWithPermissions(e.uuid,t.data.permissions,(function(){n.replyToMessage(e,t,{approved:!0})}))}},{key:"handleSetComponentDataMessage",value:function(e,t){var n=this;this.runWithPermissions(e.uuid,[],B(i.a.mark((function r(){return i.a.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,n.itemManager.changeComponent(e.uuid,(function(e){e.componentData=t.data.componentData}));case 2:n.syncService.sync();case 3:case"end":return r.stop()}}),r)}))))}},{key:"handleToggleComponentMessage",value:function(e,t){this.toggleComponent(e)}},{key:"toggleComponent",value:(P=B(i.a.mark((function e(t){var n,r,a=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.area!==v.b.Modal){e.next=4;break}this.openModalComponent(t),e.next=19;break;case 4:if(!t.active){e.next=9;break}return e.next=7,this.deactivateComponent(t.uuid);case 7:e.next=19;break;case 9:if(t.content_type!==s.a.Theme){e.next=17;break}return n=t,r=this.getActiveThemes(),e.next=14,this.activateComponent(t.uuid);case 14:n.isLayerable()||setTimeout(B(i.a.mark((function e(){var t,n,o,s,c,u;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=!0,n=!1,o=void 0,e.prev=3,s=r[Symbol.iterator]();case 5:if(t=(c=s.next()).done){e.next=13;break}if(!(u=c.value)||u.isLayerable()){e.next=10;break}return e.next=10,a.deactivateComponent(u.uuid);case 10:t=!0,e.next=5;break;case 13:e.next=19;break;case 15:e.prev=15,e.t0=e.catch(3),n=!0,o=e.t0;case 19:e.prev=19,e.prev=20,t||null==s.return||s.return();case 22:if(e.prev=22,!n){e.next=25;break}throw o;case 25:return e.finish(22);case 26:return e.finish(19);case 27:case"end":return e.stop()}}),e,null,[[3,15,19,27],[20,,22,26]])}))),10),e.next=19;break;case 17:return e.next=19,this.activateComponent(t.uuid);case 19:case"end":return e.stop()}}),e,this)}))),function(e){return P.apply(this,arguments)})},{key:"handleInstallLocalComponentMessage",value:function(e,t){if(this.isNativeExtension(e)){var n=this.itemManager.findItem(t.data.uuid);this.desktopManager.installComponent(n)}}},{key:"runWithPermissions",value:function(e,t,n){var r=this.itemManager.findItem(e);t=Object(m.a)(t);var a=r.permissions,o=!0,s=!1,c=void 0;try{for(var u,l=function(){var e=u.value,n=a.find((function(t){return t.name===e.name}));if(!n)return"continue";var r=e.content_types;if(!r)return Object(m.k)(t,e),"continue";var i=!0,o=!1,s=void 0;try{for(var c,l=n.content_types[Symbol.iterator]();!(i=(c=l.next()).done);i=!0){var f=c.value;Object(m.B)(r,f)}}catch(e){o=!0,s=e}finally{try{i||null==l.return||l.return()}finally{if(o)throw s}}0===r.length&&Object(m.k)(t,e)},f=t.slice()[Symbol.iterator]();!(o=(u=f.next()).done);o=!0)l()}catch(e){s=!0,c=e}finally{try{o||null==f.return||f.return()}finally{if(s)throw c}}t.length>0?this.promptForPermissions(r,t,function(){var e=B(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t&&n();case 1:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()):n()}},{key:"promptForPermissions",value:function(e,t,n){var r,a=this,o={component:e,permissions:t,permissionsString:this.permissionsStringForPermissions(t,e),actionBlock:n,callback:(r=B(i.a.mark((function n(r){return i.a.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!r){n.next=5;break}return a.log("Changing component to expand permissions",e),n.next=4,a.itemManager.changeItem(e.uuid,(function(n){var r=Object(m.a)(e.permissions),i=!0,a=!1,o=void 0;try{for(var s,c=function(){var e=s.value,t=r.find((function(t){return t.name===e.name}));if(t){var n=t.content_types||[];t.content_types=p()(n.concat(e.content_types))}else r.push(e)},u=t[Symbol.iterator]();!(i=(s=u.next()).done);i=!0)c()}catch(e){a=!0,o=e}finally{try{i||null==u.return||u.return()}finally{if(a)throw o}}n.permissions=r}));case 4:a.syncService.sync();case 5:a.permissionDialogs=a.permissionDialogs.filter((function(n){return n===o?(n.actionBlock&&n.actionBlock(r),!1):!!(n.component!==e||n.permissions!==t&&(i=t,n.permissions.some((function(e){return!i.find((function(t){return JSON.stringify(t)===JSON.stringify(e)}))}))))||(r&&n.actionBlock&&n.actionBlock(r),!1);var i})),a.permissionDialogs.length>0&&a.presentPermissionsDialog(a.permissionDialogs[0]);case 7:case"end":return n.stop()}}),n)}))),function(e){return r.apply(this,arguments)})},s=A()(this.permissionDialogs,{component:e});this.permissionDialogs.push(o),s?this.log("Existing dialog, not presenting."):this.presentPermissionsDialog(o)}},{key:"presentPermissionsDialog",value:function(e){throw"Must override SNComponentManager.presentPermissionsDialog"}},{key:"openModalComponent",value:function(e){throw"Must override SNComponentManager.presentPermissionsDialog"}},{key:"registerHandler",value:function(e){var t=this;return this.handlers.push(e),function(){var n=A()(t.handlers,{identifier:e.identifier});n?Object(m.B)(t.handlers,n):t.log("Attempting to deregister non-existing handler")}}},{key:"findOrCreateDataForComponent",value:function(e){var t=this.componentState[e.uuid];return t||(t={},this.componentState[e.uuid]=t),t}},{key:"setReadonlyStateForComponent",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this.findOrCreateDataForComponent(e);r.readonly=t,r.lockReadonly=n}},{key:"getReadonlyStateForComponent",value:function(e){var t=this.findOrCreateDataForComponent(e);return{readonly:t.readonly,lockReadonly:t.lockReadonly}}},{key:"registerComponentWindow",value:(C=B(i.a.mark((function e(t,n){var r;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.log("Register component window",t),(r=this.findOrCreateDataForComponent(t)).window===n&&this.log("Web|componentManager","attempting to re-register same component window."),this.log("Web|componentManager|registerComponentWindow",t),r.window=n,e.next=7,b.a.GenerateUuid();case 7:r.sessionKey=e.sent,this.sendMessageToComponent(t,{action:v.a.ComponentRegistered,sessionKey:r.sessionKey,componentData:t.componentData,data:{uuid:t.uuid,environment:Object(I.c)(this.environment),platform:Object(I.g)(this.platform),activeThemeUrls:this.urlsForActiveThemes()}}),this.postActiveThemesToComponent(t),this.desktopManager&&this.desktopManager.notifyComponentActivation(t);case 11:case"end":return e.stop()}}),e,this)}))),function(e,t){return C.apply(this,arguments)})},{key:"registerComponent",value:function(e){this.log("Registering component",e),Object(m.b)(this.activeComponents,e);var t=this.itemManager.findItem(e),n=!0,r=!1,i=void 0;try{for(var a,o=this.handlers[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;(s.areas.includes(t.area)||s.areas.includes(v.b.Any))&&s.activationHandler&&s.activationHandler(t)}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}t.area===v.b.Themes&&this.postActiveThemesToAllComponents()}},{key:"activateComponent",value:(y=B(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.log("Activating component",t),(n=this.itemManager.findItem(t)).active){e.next=5;break}return e.next=5,this.itemManager.changeComponent(n.uuid,(function(e){e.active=!0}));case 5:this.registerComponent(t),this.syncService.sync();case 7:case"end":return e.stop()}}),e,this)}))),function(e){return y.apply(this,arguments)})},{key:"deregisterComponent",value:function(e){this.log("Degregistering component",e);var t=this.itemManager.findItem(e);Object(m.B)(this.activeComponents,e),delete this.componentState[t.uuid];var n=!0,r=!1,i=void 0;try{for(var a,o=this.handlers[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;(s.areas.includes(t.area)||s.areas.includes(v.b.Any))&&s.activationHandler&&s.activationHandler(t)}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}this.streamObservers=this.streamObservers.filter((function(t){return t.componentUuid!==e})),this.contextStreamObservers=this.contextStreamObservers.filter((function(t){return t.componentUuid!==e})),t.area===v.b.Themes&&this.postActiveThemesToAllComponents()}},{key:"deactivateComponent",value:(d=B(i.a.mark((function e(t){var n,r;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.log("Deactivating component",t),!(r=null===(n=this.itemManager)||void 0===n?void 0:n.findItem(t)).active){e.next=5;break}return e.next=5,this.itemManager.changeComponent(r.uuid,(function(e){e.active=!1}));case 5:this.findOrCreateDataForComponent(r).sessionKey=void 0,this.deregisterComponent(t),this.syncService.sync();case 8:case"end":return e.stop()}}),e,this)}))),function(e){return d.apply(this,arguments)})},{key:"reloadComponent",value:(h=B(i.a.mark((function e(t){var n,r,a=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.log("Reloading component",t),r=null===(n=this.itemManager)||void 0===n?void 0:n.findItem(t),e.next=4,this.itemManager.changeComponent(r.uuid,(function(e){e.active=!1}));case 4:return this.deregisterComponent(r.uuid),e.abrupt("return",new Promise((function(e){a.timeout(B(i.a.mark((function t(){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,a.itemManager.changeComponent(r.uuid,(function(e){e.active=!0}));case 2:a.registerComponent(r.uuid),e();case 4:case"end":return t.stop()}}),t)}))))})));case 6:case"end":return e.stop()}}),e,this)}))),function(e){return h.apply(this,arguments)})},{key:"deleteComponent",value:(f=B(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.itemManager.setItemToBeDeleted(t);case 2:this.syncService.sync();case 3:case"end":return e.stop()}}),e,this)}))),function(e){return f.apply(this,arguments)})},{key:"isComponentActive",value:function(e){return e.active}},{key:"iframeForComponent",value:function(e){for(var t=0,n=Array.from(document.getElementsByTagName("iframe"));t0?e===t-1?2===t?" and ":", and ":", ":""};return e.forEach((function(e,a){if(e.name===v.a.StreamItems){for(var o=e.content_types.map((function(e){var t=Object(s.c)(e);return t?t+"s":"items of type "+e})),c="",u=0;u=2&&a0&&this.popQueue();case 6:case"end":return e.stop()}}),e,this)}))),function(){return d.apply(this,arguments)})},{key:"mergePayloadsOntoMaster",value:function(e){var t=[],n=[],r=[],i=!0,a=!1,s=void 0;try{for(var c,u=e[Symbol.iterator]();!(i=(c=u.next()).done);i=!0){var l=c.value;if(l.uuid&&l.content_type){var f=this.collection.find(l.uuid),A=f?Object(o.g)(f,l):l;A.discardable?(this.collection.discard(A),r.push(A)):(this.collection.set(A),f?t.push(A):n.push(A))}else console.error("Payload is corrupt:",l)}}catch(e){a=!0,s=e}finally{try{i||null==u.return||u.return()}finally{if(a)throw s}}return{changed:t,inserted:n,discarded:r}}},{key:"addObserver",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;Array.isArray(e)||(e=[e]);var i={types:e,priority:r,callback:t};return this.changeObservers.push(i),function(){Object(a.B)(n.changeObservers,i)}}},{key:"notifyChangeObservers",value:function(e,t,n,r,i){var a=this.changeObservers.slice().sort((function(e,t){return e.priority0&&(e.resolveQueue=e.resolveQueue.concat(n))})),this.removeSyncObserver=this.syncService.addEventObserver(function(){var t=d(i.a.mark((function t(n){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n!==f.a.DownloadFirstSyncCompleted&&n!==f.a.FullSyncCompleted){t.next=3;break}return t.next=3,e.resolveSingletonsForItems(e.popResolveQueue(),n);case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())}},{key:"registerPredicate",value:function(e){this.registeredPredicates.push(e)}},{key:"validItemsMatchingPredicate",value:function(e){return this.itemManager.itemsMatchingPredicate(e).filter((function(e){return!e.errorDecrypting}))}},{key:"resolveSingletonsForItems",value:(w=d(i.a.mark((function e(t,n){var r,a,o,s,u,l,A,h,p,d,g,y=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=function(e){var t=!0,n=!1,r=void 0;try{for(var i,a=y.registeredPredicates[Symbol.iterator]();!(t=(i=a.next()).done);t=!0){var o=i.value;if(e.satisfiesPredicate(o))return y.validItemsMatchingPredicate(o)}}catch(e){n=!0,r=e}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}},a=function(e){return e.isSingleton?y.validItemsMatchingPredicate(e.singletonPredicate):null},o=function(e){var t=a(e);return t&&t.length>0?t:r(e)},s=[],u=!0,l=!1,A=void 0,e.prev=7,h=t[Symbol.iterator]();case 9:if(u=(p=h.next()).done){e.next=22;break}if(d=p.value,!s.includes(d)){e.next=13;break}return e.abrupt("continue",19);case 13:if(g=o(d),Object(c.j)(s,g||[]),g&&!(g.length<=1)){e.next=17;break}return e.abrupt("continue",19);case 17:return e.next=19,this.handleStrategy(g,d.singletonStrategy);case 19:u=!0,e.next=9;break;case 22:e.next=28;break;case 24:e.prev=24,e.t0=e.catch(7),l=!0,A=e.t0;case 28:e.prev=28,e.prev=29,u||null==h.return||h.return();case 31:if(e.prev=31,!l){e.next=34;break}throw A;case 34:return e.finish(31);case 35:return e.finish(28);case 36:s.length>0&&n===f.a.FullSyncCompleted&&setTimeout((function(){y.syncService.sync()}));case 37:case"end":return e.stop()}}),e,this,[[7,24,28,36],[29,,31,35]])}))),function(e,t){return w.apply(this,arguments)})},{key:"handleStrategy",value:(p=d(i.a.mark((function e(t,n){var r,a;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n===o.e.KeepEarliest){e.next=2;break}throw"Unhandled singleton strategy";case 2:return r=t.sort((function(e,t){return e.errorDecrypting?1:t.errorDecrypting||e.created_at0)){e.next=3;break}return e.abrupt("return",o(s[0]));case 3:if(a.syncService.getLastSyncDate()){e.next=14;break}return c=!1,f=a.itemManager.addObserver(n,(function(e,n){if(n.length>0){var r=a.itemManager.subItemsMatchingPredicates(n,[t]);r.length>0&&(c=!0,o(r[0]))}})),e.next=8,a.syncService.sync();case 8:if(f(),!c){e.next=11;break}return e.abrupt("return");case 11:if(!((h=a.validItemsMatchingPredicate(t)).length>0)){e.next=14;break}return e.abrupt("return",o(h[0]));case 14:return p=a.itemManager.itemsMatchingPredicate(t).filter((function(e){return e.errorDecrypting})),e.next=17,a.itemManager.setItemsToBeDeleted(Object(A.b)(p));case 17:return e.t0=u.e,e.next=20,l.a.GenerateUuid();case 20:return e.t1=e.sent,e.t2=n,e.t3=r,e.t4=new Date,e.t5={uuid:e.t1,content_type:e.t2,content:e.t3,dirty:!0,dirtiedDate:e.t4},d=(0,e.t0)(e.t5),e.next=28,a.itemManager.emitItemFromPayload(d);case 28:if(g=e.sent){e.next=31;break}throw Error("Created singleton item should not be null ".concat(n));case 31:return e.next=33,a.syncService.sync();case 33:return e.abrupt("return",o(g));case 34:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 1:case"end":return e.stop()}}),e)}))),function(e,t,n){return s.apply(this,arguments)})}])&&g(n.prototype,r),t}(s.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));var r=n(0),i=n.n(r),a=n(2),o=n(16),s=n(90),c=n(3),u=n(8),l=n(1);function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function A(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function h(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){A(a,r,i,o,s,"next",e)}function s(e){A(a,r,i,o,s,"throw",e)}o(void 0)}))}}function p(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];return this.collection.findAll(e,t)}},{key:"itemsKeys",value:function(){return this.collection.displayElements(C.a.ItemsKey)}},{key:"addObserver",value:function(e,t){var n=this;Array.isArray(e)||(e=[e]);var r={contentType:e,callback:t};return this.observers.push(r),function(){Object(b.B)(n.observers,r)}}},{key:"itemsReferencingItem",value:function(e){if(!Object(b.s)(e))throw Error("Must use uuid string");var t=this.collection.uuidsThatReferenceUuid(e);return this.findItems(t)}},{key:"referencesForItem",value:function(e){if(!Object(b.s)(e))throw Error("Must use uuid string");var t=this.findItem(e).references.map((function(e){return e.uuid}));return this.findItems(t)}},{key:"onPayloadChange",value:(X=k(i.a.mark((function e(t,n,r,a,o){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.setPayloads(t,n,r,a,o));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t,n,r,i){return X.apply(this,arguments)})},{key:"setPayloads",value:(W=k(i.a.mark((function e(t,n,r,a,o){var s,c,u,l,f,A,h,p,g,y;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(s=t.map((function(e){return Object(d.a)(e)})),c=n.map((function(e){return Object(d.a)(e)})),(u=s.concat(c)).length>0&&this.collection.set(u),l=r.map((function(e){return Object(d.a)(e)})),f=!0,A=!1,h=void 0,e.prev=8,p=l[Symbol.iterator]();!(f=(g=p.next()).done);f=!0)y=g.value,this.collection.discard(y);e.next=16;break;case 12:e.prev=12,e.t0=e.catch(8),A=!0,h=e.t0;case 16:e.prev=16,e.prev=17,f||null==p.return||p.return();case 19:if(e.prev=19,!A){e.next=22;break}throw h;case 22:return e.finish(19);case 23:return e.finish(16);case 24:return e.next=26,this.notifyObservers(s,c,l,a,o);case 26:case"end":return e.stop()}}),e,this,[[8,12,16,24],[17,,19,23]])}))),function(e,t,n,r,i){return W.apply(this,arguments)})},{key:"notifyObservers",value:(q=k(i.a.mark((function e(t,n,r,a,o){var s,c,u,l,f,A,h,p,d,g,y;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:s=function(e,t){return e.filter((function(e){return t.includes(C.a.Any)||t.includes(e.content_type)}))},c=this.observers.slice(),u=!0,l=!1,f=void 0,e.prev=5,A=c[Symbol.iterator]();case 7:if(u=(h=A.next()).done){e.next=19;break}if(p=h.value,d=s(t,p.contentType),g=s(n,p.contentType),y=s(r,p.contentType),0!==d.length||0!==g.length||0!==y.length){e.next=14;break}return e.abrupt("continue",16);case 14:return e.next=16,p.callback(d,g,y,a,o);case 16:u=!0,e.next=7;break;case 19:e.next=25;break;case 21:e.prev=21,e.t0=e.catch(5),l=!0,f=e.t0;case 25:e.prev=25,e.prev=26,u||null==A.return||A.return();case 28:if(e.prev=28,!l){e.next=31;break}throw f;case 31:return e.finish(28);case 32:return e.finish(25);case 33:case"end":return e.stop()}}),e,this,[[5,21,25,33],[26,,28,32]])}))),function(e,t,n,r,i){return q.apply(this,arguments)})},{key:"changeItem",value:(z=k(i.a.mark((function e(t,n){var r,a,o,s,c=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=c.length>2&&void 0!==c[2]?c[2]:I.c.UserInteraction,a=c.length>3&&void 0!==c[3]?c[3]:w.a.LocalChanged,o=c.length>4?c[4]:void 0,Object(b.s)(t)){e.next=5;break}throw Error("Invalid uuid for changeItem");case 5:return e.next=7,this.changeItems([t],n,r,a,o);case 7:return s=e.sent,e.abrupt("return",s[0]);case 9:case"end":return e.stop()}}),e,this)}))),function(e,t){return z.apply(this,arguments)})},{key:"createMutatorForItem",value:function(e,t){return e.content_type===C.a.Note?new l.a(e,t):e.content_type===C.a.Tag?new c.b(e,t):e.content_type===C.a.Component?new v.c(e,t):e.content_type===C.a.ActionsExtension?new f.a(e,t):e.content_type===C.a.ItemsKey?new u.a(e,t):e.content_type===C.a.Privileges?new s.b(e,t):e.content_type===C.a.UserPrefs?new o.b(e,t):new I.b(e,t)}},{key:"changeItems",value:(V=k(i.a.mark((function e(t,n){var r,a,o,s,c,u,l,f,A,h,p,d,g,y,v=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=v.length>2&&void 0!==v[2]?v[2]:I.c.UserInteraction,a=v.length>3&&void 0!==v[3]?v[3]:w.a.LocalChanged,o=v.length>4?v[4]:void 0,s=this.findItems(t,!0),c=[],u=!0,l=!1,f=void 0,e.prev=8,A=s[Symbol.iterator]();case 10:if(u=(h=A.next()).done){e.next=21;break}if(p=h.value){e.next=14;break}throw Error("Attempting to change non-existant item");case 14:d=this.createMutatorForItem(p,r),n&&n(d),g=d.getResult(),c.push(g);case 18:u=!0,e.next=10;break;case 21:e.next=27;break;case 23:e.prev=23,e.t0=e.catch(8),l=!0,f=e.t0;case 27:e.prev=27,e.prev=28,u||null==A.return||A.return();case 30:if(e.prev=30,!l){e.next=33;break}throw f;case 33:return e.finish(30);case 34:return e.finish(27);case 35:return e.next=37,this.modelManager.emitPayloads(c,a,o);case 37:return y=this.findItems(c.map((function(e){return e.uuid}))),e.abrupt("return",y);case 39:case"end":return e.stop()}}),e,this,[[8,23,27,35],[28,,30,34]])}))),function(e,t){return V.apply(this,arguments)})},{key:"changeNote",value:(J=k(i.a.mark((function e(t,n){var r,a,o,s,c,u=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=u.length>2&&void 0!==u[2]?u[2]:I.c.UserInteraction,a=u.length>3&&void 0!==u[3]?u[3]:w.a.LocalChanged,o=u.length>4?u[4]:void 0,s=this.findItem(t)){e.next=6;break}throw Error("Attempting to change non-existant note");case 6:return c=new l.a(s,r),e.abrupt("return",this.applyTransform(c,n,a,o));case 8:case"end":return e.stop()}}),e,this)}))),function(e,t){return J.apply(this,arguments)})},{key:"changeComponent",value:(Y=k(i.a.mark((function e(t,n){var r,a,o,s,c,u=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=u.length>2&&void 0!==u[2]?u[2]:I.c.UserInteraction,a=u.length>3&&void 0!==u[3]?u[3]:w.a.LocalChanged,o=u.length>4?u[4]:void 0,s=this.findItem(t)){e.next=6;break}throw Error("Attempting to change non-existant component");case 6:return c=new v.c(s,r),e.abrupt("return",this.applyTransform(c,n,a,o));case 8:case"end":return e.stop()}}),e,this)}))),function(e,t){return Y.apply(this,arguments)})},{key:"changeActionsExtension",value:($=k(i.a.mark((function e(t,n){var r,a,o,s,c,u=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=u.length>2&&void 0!==u[2]?u[2]:I.c.UserInteraction,a=u.length>3&&void 0!==u[3]?u[3]:w.a.LocalChanged,o=u.length>4?u[4]:void 0,s=this.findItem(t)){e.next=6;break}throw Error("Attempting to change non-existant extension");case 6:return c=new f.a(s,r),e.abrupt("return",this.applyTransform(c,n,a,o));case 8:case"end":return e.stop()}}),e,this)}))),function(e,t){return $.apply(this,arguments)})},{key:"changeItemsKey",value:(G=k(i.a.mark((function e(t,n){var r,a,o,s,c,l=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=l.length>2&&void 0!==l[2]?l[2]:I.c.UserInteraction,a=l.length>3&&void 0!==l[3]?l[3]:w.a.LocalChanged,o=l.length>4?l[4]:void 0,s=this.findItem(t)){e.next=6;break}throw Error("Attempting to change non-existant itemsKey");case 6:return c=new u.a(s,r),e.abrupt("return",this.applyTransform(c,n,a,o));case 8:case"end":return e.stop()}}),e,this)}))),function(e,t){return G.apply(this,arguments)})},{key:"applyTransform",value:(K=k(i.a.mark((function e(t,n){var r,a,o,s=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=s.length>2&&void 0!==s[2]?s[2]:w.a.LocalChanged,a=s.length>3?s[3]:void 0,n(t),o=t.getResult(),e.abrupt("return",this.modelManager.emitPayload(o,r,a));case 5:case"end":return e.stop()}}),e,this)}))),function(e,t){return K.apply(this,arguments)})},{key:"setItemDirty",value:(L=k(i.a.mark((function e(t){var n,r,a=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=a.length>1&&void 0!==a[1]&&a[1],Object(b.s)(t)){e.next=3;break}throw Error("Must use uuid when setting item dirty");case 3:return e.next=5,this.setItemsDirty([t],n);case 5:return r=e.sent,e.abrupt("return",r[0]);case 7:case"end":return e.stop()}}),e,this)}))),function(e){return L.apply(this,arguments)})},{key:"setItemsDirty",value:(U=k(i.a.mark((function e(t){var n,r=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.length>1&&void 0!==r[1]&&r[1],Object(b.s)(t[0])){e.next=3;break}throw Error("Must use uuid when setting item dirty");case 3:return e.abrupt("return",this.changeItems(t,void 0,n?I.c.UserInteraction:I.c.Internal));case 4:case"end":return e.stop()}}),e,this)}))),function(e){return U.apply(this,arguments)})},{key:"getDirtyItems",value:function(){return this.collection.dirtyElements().filter((function(e){return!e.errorDecrypting||e.deleted}))}},{key:"insertItem",value:(N=k(i.a.mark((function e(t){var n,r;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.payload,e.next=3,this.emitItemFromPayload(n);case 3:return r=e.sent,e.abrupt("return",r);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return N.apply(this,arguments)})},{key:"duplicateItem",value:(H=k(i.a.mark((function e(t){var n,r,a,o,s,c=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=c.length>1&&void 0!==c[1]&&c[1],r=this.findItem(t),a=Object(m.e)(r),e.next=5,Object(p.c)(a,this.modelManager.getMasterCollection(),n);case 5:return o=e.sent,e.next=8,this.modelManager.emitPayloads(o,w.a.LocalChanged);case 8:return s=this.findItem(o[0].uuid),e.abrupt("return",s);case 10:case"end":return e.stop()}}),e,this)}))),function(e){return H.apply(this,arguments)})},{key:"createItem",value:(j=k(i.a.mark((function e(t,n){var r,a,o,s=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=s.length>2&&void 0!==s[2]&&s[2],a=s.length>3?s[3]:void 0,t){e.next=4;break}throw"Attempting to create item with no contentType";case 4:return e.t0=m.e,e.next=7,h.a.GenerateUuid();case 7:return e.t1=e.sent,e.t2=t,e.t3=n?Object(g.a)(n):void 0,e.t4=r,e.t5={uuid:e.t1,content_type:e.t2,content:e.t3,dirty:e.t4},e.t6=a,o=(0,e.t0)(e.t5,e.t6),e.next=16,this.modelManager.emitPayload(o,w.a.Constructor);case 16:return e.abrupt("return",this.findItem(o.uuid));case 17:case"end":return e.stop()}}),e,this)}))),function(e,t){return j.apply(this,arguments)})},{key:"createTemplateItem",value:(T=k(i.a.mark((function e(t,n){var r;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=m.e,e.next=3,h.a.GenerateUuid();case 3:return e.t1=e.sent,e.t2=t,e.t3=Object(g.a)(n||{}),e.t4={uuid:e.t1,content_type:e.t2,content:e.t3},r=(0,e.t0)(e.t4),e.abrupt("return",Object(d.a)(r));case 9:case"end":return e.stop()}}),e)}))),function(e,t){return T.apply(this,arguments)})},{key:"emitItemFromPayload",value:(R=k(i.a.mark((function e(t){var n,r=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=r.length>1&&void 0!==r[1]?r[1]:w.a.Constructor,e.next=3,this.modelManager.emitPayload(t,n);case 3:return e.abrupt("return",this.findItem(t.uuid));case 4:case"end":return e.stop()}}),e,this)}))),function(e){return R.apply(this,arguments)})},{key:"emitItemsFromPayloads",value:(O=k(i.a.mark((function e(t){var n,r,a=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=a.length>1&&void 0!==a[1]?a[1]:w.a.Constructor,e.next=3,this.modelManager.emitPayloads(t,n);case 3:return r=Object(g.b)(t),e.abrupt("return",this.findItems(r));case 5:case"end":return e.stop()}}),e,this)}))),function(e){return O.apply(this,arguments)})},{key:"setItemToBeDeleted",value:(F=k(i.a.mark((function e(t){var n,r,a,o,s,c,u,l,f,A;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=this.collection.uuidsThatReferenceUuid(t),r=this.findItem(t),e.next=4,this.changeItem(t,(function(e){e.setDeleted()}));case 4:a=e.sent,o=!0,s=!1,c=void 0,e.prev=8,u=n[Symbol.iterator]();case 10:if(o=(l=u.next()).done){e.next=19;break}if(f=l.value,!(A=this.findItem(f))){e.next=16;break}return e.next=16,this.changeItem(A.uuid,(function(e){e.removeItemAsRelationship(r)}));case 16:o=!0,e.next=10;break;case 19:e.next=25;break;case 21:e.prev=21,e.t0=e.catch(8),s=!0,c=e.t0;case 25:e.prev=25,e.prev=26,o||null==u.return||u.return();case 28:if(e.prev=28,!s){e.next=31;break}throw c;case 31:return e.finish(28);case 32:return e.finish(25);case 33:return e.abrupt("return",a);case 34:case"end":return e.stop()}}),e,this,[[8,21,25,33],[26,,28,32]])}))),function(e){return F.apply(this,arguments)})},{key:"setItemsToBeDeleted",value:(M=k(i.a.mark((function e(t){var n,r,a,o,s,c,u,l;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=[],r=!0,a=!1,o=void 0,e.prev=4,s=t[Symbol.iterator]();case 6:if(r=(c=s.next()).done){e.next=15;break}return u=c.value,e.next=10,this.setItemToBeDeleted(u);case 10:l=e.sent,n.push(l);case 12:r=!0,e.next=6;break;case 15:e.next=21;break;case 17:e.prev=17,e.t0=e.catch(4),a=!0,o=e.t0;case 21:e.prev=21,e.prev=22,r||null==s.return||s.return();case 24:if(e.prev=24,!a){e.next=27;break}throw o;case 27:return e.finish(24);case 28:return e.finish(21);case 29:return e.abrupt("return",n);case 30:case"end":return e.stop()}}),e,this,[[4,17,21,29],[22,,24,28]])}))),function(e){return M.apply(this,arguments)})},{key:"getItems",value:function(e){return this.collection.all(e)}},{key:"nonErroredItemsForContentType",value:function(e){return this.collection.all(e).filter((function(e){return!e.errorDecrypting&&!e.waitingForKey}))}},{key:"itemsMatchingPredicate",value:function(e){return this.itemsMatchingPredicates([e])}},{key:"itemsMatchingPredicates",value:function(e){return this.subItemsMatchingPredicates(this.items,e)}},{key:"subItemsMatchingPredicates",value:function(e,t){return e.filter((function(e){if(e.deleted)return!1;var n=!0,r=!1,i=void 0;try{for(var a,o=t[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(!e.satisfiesPredicate(s))return!1}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return!0}))}},{key:"findTagByTitle",value:function(e){return Object(b.D)(this.tags,{title:e})}},{key:"findOrCreateTagByTitle",value:(P=k(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=this.findTagByTitle(t),e.t0=n,e.t0){e.next=6;break}return e.next=5,this.createItem(C.a.Tag,Object(g.a)({title:t}),!0);case 5:e.t0=e.sent;case 6:return e.abrupt("return",e.t0);case 7:case"end":return e.stop()}}),e,this)}))),function(e){return P.apply(this,arguments)})},{key:"notesMatchingSmartTag",value:function(e){var t=[new A.a("content_type","=",C.a.Note),e.predicate];if(!e.isTrashTag){var n=new A.a("content.trashed","=",!1);t.push(n)}return this.itemsMatchingPredicates(t)}},{key:"emptyTrash",value:(E=k(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.trashedItems,e.abrupt("return",this.setItemsToBeDeleted(Object(g.b)(t)));case 2:case"end":return e.stop()}}),e,this)}))),function(){return E.apply(this,arguments)})},{key:"getSmartTags",value:function(){var e=this.collection.displayElements(C.a.SmartTag);return this.systemSmartTags.concat(e)}},{key:"removeAllItemsFromMemory",value:(y=k(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=Object(g.b)(this.items),e.next=3,this.changeItems(t,(function(e){e.setDeleted()}),I.c.NonDirtying);case 3:this.resetState(),this.modelManager.resetState();case 5:case"end":return e.stop()}}),e,this)}))),function(){return y.apply(this,arguments)})},{key:"removeItemLocally",value:function(e){this.collection.discard(e),this.modelManager.removePayloadLocally(e.payload)}},{key:"items",get:function(){return this.collection.all()}},{key:"nonDeletedItems",get:function(){return this.collection.nondeletedElements()}},{key:"invalidItems",get:function(){return this.collection.invalidElements()}},{key:"notes",get:function(){return this.collection.displayElements(C.a.Note)}},{key:"tags",get:function(){return this.collection.displayElements(C.a.Tag)}},{key:"components",get:function(){return this.collection.displayElements(C.a.Component)}},{key:"trashSmartTag",get:function(){return this.systemSmartTags.find((function(e){return e.isTrashTag}))}},{key:"trashedItems",get:function(){return this.notesMatchingSmartTag(this.trashSmartTag)}},{key:"noteCount",get:function(){return this.collection.all(C.a.Note).length}}])&&_(n.prototype,r),t}(y.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return Y}));var r={};n.r(r),n.d(r,"Migration20200115",(function(){return O}));var i=n(0),a=n.n(i),o=n(24),s=n(25),c=n(4),u=n(29),l=n(11),f=n(9),A=n(8),h=n(15),p=n(13),d=n(14),g=n(94),y=n(2),v=n(3),b=n(1),m=n(20),I=n(54),w=n(17),C=n(28);function B(e){return(B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function E(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t0&&A.startsWith(i),!n.includes(A)&&!p){e.next=18;break}return e.abrupt("continue",22);case 18:if(Object(b.p)(h)){e.next=22;break}return d=r(h),e.next=22,this.services.storageService.setValue(A,d);case 22:o=!0,e.next=11;break;case 25:e.next=31;break;case 27:e.prev=27,e.t0=e.catch(9),s=!0,c=e.t0;case 31:e.prev=31,e.prev=32,o||null==u.return||u.return();case 34:if(e.prev=34,!s){e.next=37;break}throw c;case 37:return e.finish(34);case 38:return e.finish(31);case 39:case"end":return e.stop()}}),e,this,[[9,27,31,39],[32,,34,38]])}))),function(){return _.apply(this,arguments)})},{key:"deleteLegacyStorageValues",value:(B=S(a.a.mark((function e(){var t,n,r,i,o,s,c,u;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=["mk","ak","jwt","ephemeral","cachedThemes"],n=[].concat(E(Object(b.x)(A.b)),E(Object(b.x)(F)),t),r=!0,i=!1,o=void 0,e.prev=5,s=n[Symbol.iterator]();case 7:if(r=(c=s.next()).done){e.next=14;break}return u=c.value,e.next=11,this.services.deviceInterface.removeRawStorageValue(u);case 11:r=!0,e.next=7;break;case 14:e.next=20;break;case 16:e.prev=16,e.t0=e.catch(5),i=!0,o=e.t0;case 20:e.prev=20,e.prev=21,r||null==s.return||s.return();case 23:if(e.prev=23,!i){e.next=26;break}throw o;case 26:return e.finish(23);case 27:return e.finish(20);case 28:case"end":return e.stop()}}),e,this,[[5,16,20,28],[21,,23,27]])}))),function(){return B.apply(this,arguments)})},{key:"migrateSessionStorage",value:(g=S(a.a.mark((function e(){var t,n;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=3,this.services.storageService.getValue("jwt");case 3:if(t=e.sent){e.next=6;break}return e.abrupt("return");case 6:return n=new I.a(t),e.next=9,this.services.storageService.setValue(A.b.Session,n);case 9:case"end":return e.stop()}}),e,this)}))),function(){return g.apply(this,arguments)})},{key:"createDefaultItemsKeyForAllPlatforms",value:(o=S(a.a.mark((function e(){var t,n,r,i;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.services.protocolService.getRootKey();case 2:if(!(t=e.sent)){e.next=19;break}return e.next=6,this.services.protocolService.getRootKeyParams();case 6:return n=e.sent,e.t0=y.e,e.next=10,m.a.GenerateUuid();case 10:return e.t1=e.sent,e.t2=c.a.ItemsKey,e.t3=Object(p.a)({itemsKey:t.masterKey,dataAuthenticationKey:t.dataAuthenticationKey,version:n.version}),e.t4=new Date,e.t5={uuid:e.t1,content_type:e.t2,content:e.t3,dirty:!0,dirtiedDate:e.t4},r=(0,e.t0)(e.t5),i=Object(w.f)(r),e.next=19,this.services.itemManager.emitItemFromPayload(i.payloadRepresentation(),v.a.LocalChanged);case 19:case"end":return e.stop()}}),e,this)}))),function(){return o.apply(this,arguments)})}],i=[{key:"timestamp",value:function(){return new Date("2020-01-15").getTime()}}],r&&x(n.prototype,r),i&&x(n,i),t}(g.a),R=n(89);function T(e){return(T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function j(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function H(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){j(a,r,i,o,s,"next",e)}function s(e){j(a,r,i,o,s,"throw",e)}o(void 0)}))}}function N(e,t){for(var n=0;n0&&(t=Object(b.w)(this.activeMigrations)).onDone(H(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,n.saveLastMigrationTimestamp(t.constructor.timestamp());case 2:case"end":return e.stop()}}),e)}))));case 6:case"end":return e.stop()}}),e,this)}))),function(){return g.apply(this,arguments)})},{key:"handleApplicationStage",value:(d=H(a.a.mark((function e(n){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,L(K(t.prototype),"handleApplicationStage",this).call(this,n);case 2:return e.next=4,this.handleStage(n);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return d.apply(this,arguments)})},{key:"handleApplicationEvent",value:(p=H(a.a.mark((function e(t){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==o.a.SignedIn){e.next=5;break}return e.next=3,this.handleStage(s.a.SignedIn_30);case 3:e.next=10;break;case 5:if(t!==o.a.CompletedFullSync){e.next=10;break}if(this.handledFullSyncStage){e.next=10;break}return this.handledFullSyncStage=!0,e.next=10,this.handleStage(s.a.FullSyncCompleted_13);case 10:case"end":return e.stop()}}),e,this)}))),function(e){return p.apply(this,arguments)})},{key:"runBaseMigration",value:(h=H(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=new R.a(this.services),e.next=3,t.handleStage(s.a.PreparingForLaunch_0);case 3:case"end":return e.stop()}}),e,this)}))),function(){return h.apply(this,arguments)})},{key:"getRequiredMigrations",value:(f=H(a.a.mark((function e(){var t,n,i,o,s,c,u,l,f;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getLastMigrationTimestamp();case 2:for(t=e.sent,n=[],i=Object.keys(r).map((function(e){return r[e]})).sort((function(e,t){var n=e.timestamp(),r=t.timestamp();return nr?1:0})),o=!0,s=!1,c=void 0,e.prev=8,u=i[Symbol.iterator]();!(o=(l=u.next()).done);o=!0)(f=l.value).timestamp()>t&&n.push(new f(this.services,this.challengeResponder));e.next=16;break;case 12:e.prev=12,e.t0=e.catch(8),s=!0,c=e.t0;case 16:e.prev=16,e.prev=17,o||null==u.return||u.return();case 19:if(e.prev=19,!s){e.next=22;break}throw c;case 22:return e.finish(19);case 23:return e.finish(16);case 24:return e.abrupt("return",n);case 25:case"end":return e.stop()}}),e,this,[[8,12,16,24],[17,,19,23]])}))),function(){return f.apply(this,arguments)})},{key:"getTimeStampKey",value:function(){return Object(A.c)(this.services.namespace,A.a.LastMigrationTimestamp)}},{key:"getLastMigrationTimestamp",value:(l=H(a.a.mark((function e(){var t;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.services.deviceInterface.getRawStorageValue(this.getTimeStampKey());case 2:if(t=e.sent,!Object(b.p)(t)){e.next=5;break}throw"Timestamp should not be null. Be sure to run base migration first.";case 5:return e.abrupt("return",JSON.parse(t));case 6:case"end":return e.stop()}}),e,this)}))),function(){return l.apply(this,arguments)})},{key:"saveLastMigrationTimestamp",value:(u=H(a.a.mark((function e(t){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.services.deviceInterface.setRawStorageValue(this.getTimeStampKey(),JSON.stringify(t));case 2:case"end":return e.stop()}}),e,this)}))),function(e){return u.apply(this,arguments)})},{key:"handleStage",value:(c=H(a.a.mark((function e(t){var n,r,i,o,s,c;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=!0,r=!1,i=void 0,e.prev=3,o=this.activeMigrations[Symbol.iterator]();case 5:if(n=(s=o.next()).done){e.next=12;break}return c=s.value,e.next=9,c.handleStage(t);case 9:n=!0,e.next=5;break;case 12:e.next=18;break;case 14:e.prev=14,e.t0=e.catch(3),r=!0,i=e.t0;case 18:e.prev=18,e.prev=19,n||null==o.return||o.return();case 21:if(e.prev=21,!r){e.next=24;break}throw i;case 24:return e.finish(21);case 25:return e.finish(18);case 26:case"end":return e.stop()}}),e,this,[[3,14,18,26],[19,,21,25]])}))),function(e){return c.apply(this,arguments)})}])&&N(n.prototype,i),t}(n(16).a)},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e){return(i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return c}));var c=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),n=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?a(e):t}(this,i(t).call(this,e)),s(a(n),"notes",[]),s(a(n),"data",{}),s(a(n),"url",void 0),s(a(n),"name",void 0),s(a(n),"isDefault",void 0),s(a(n),"systemEditor",void 0),n.url=e.safeContent.url,n.name=e.safeContent.name,n.data=e.safeContent.data||{},n.isDefault=e.safeContent.default,n.systemEditor=e.safeContent.systemEditor,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&o(e,t)}(t,e),t}(n(6).d)},function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var r=n(47),i=n(27);function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e){return(o=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function s(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var u=function(e){function t(e){var n,r,c,u;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),n=function(e,t){return!t||"object"!==a(t)&&"function"!=typeof t?s(e):t}(this,o(t).call(this,e)),u=void 0,(c="predicate")in(r=s(n))?Object.defineProperty(r,c,{value:u,enumerable:!0,configurable:!0,writable:!0}):r[c]=u,e.safeContent.predicate&&(n.predicate=i.a.FromJson(e.safeContent.predicate)),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(t,e),t}(r.a)},function(e,t,n){"use strict";n.d(t,"a",(function(){return b}));var r=n(0),i=n.n(r),a=n(2),o=n(32),s=n(49),c=n(3),u=n(23),l=n(1);function f(e){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function A(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function h(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){A(a,r,i,o,s,"next",e)}function s(e){A(a,r,i,o,s,"throw",e)}o(void 0)}))}}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;nthis.itemRevisionThreshold&&t.optimize()}}])&&i(t.prototype,n),o&&i(t,o),e}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var r=n(1),i=n(2),a=n(17);function o(e,t){for(var n=0;n-1&&e%1==0&&e<=9007199254740991}},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t,n){var r=n(108),i=n(63);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&nl))return!1;var A=c.get(e);if(A&&c.get(t))return A==t;var h=-1,p=!0,d=2&n?new r:void 0;for(c.set(e,t),c.set(t,e);++h1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),t=Object(t);++r=200){var d=t?null:s(e);if(d)return c(d);A=!1,l=o,p=new r}else p=t?[]:h;e:for(;++u=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(254),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(69))},function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var r=n(0),i=n.n(r),a=n(1);function o(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function s(e,t){for(var n=0;n0}))}},{key:"loadExtensionInContextOfItem",value:(g=S(i.a.mark((function e(t,n){var r,a=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r={content_type:n.content_type,item_uuid:n.uuid},e.abrupt("return",this.httpService.getAbsolute(t.url,r).then((function(e){var n=e.description||t.description,r=e.supported_types||t.supported_types,i=e.actions?e.actions.map((function(e){return new B.a(e)})):[];return a.itemManager.changeActionsExtension(t.uuid,(function(e){e.description=n,e.supported_types=r,e.actions=i})),t})).catch((function(e){return console.error("Error loading extension",e),null})));case 2:case"end":return e.stop()}}),e,this)}))),function(e,t){return g.apply(this,arguments)})},{key:"runAction",value:(d=S(i.a.mark((function e(t,n,r){var a;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t.running=!0,e.t0=t.verb,e.next="get"===e.t0?4:"render"===e.t0?8:"show"===e.t0?12:"post"===e.t0?16:20;break;case 4:return e.next=6,this.handleGetAction(t,r);case 6:return a=e.sent,e.abrupt("break",21);case 8:return e.next=10,this.handleRenderAction(t,r);case 10:return a=e.sent,e.abrupt("break",21);case 12:return e.next=14,this.handleShowAction(t);case 14:return a=e.sent,e.abrupt("break",21);case 16:return e.next=18,this.handlePostAction(t,n);case 18:return a=e.sent,e.abrupt("break",21);case 20:return e.abrupt("break",21);case 21:return t.lastExecuted=new Date,t.running=!1,e.abrupt("return",a);case 24:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return d.apply(this,arguments)})},{key:"handleGetAction",value:(f=S(i.a.mark((function e(t,n){var r=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise((function(e){r.alertService.confirm("Are you sure you want to replace the current note contents with this action's results?",void 0,void 0,void 0,(function(){r.runConfirmedGetAction(t,n).then((function(t){e(t)}))}))})));case 1:case"end":return e.stop()}}),e)}))),function(e,t){return f.apply(this,arguments)})},{key:"runConfirmedGetAction",value:(l=S(i.a.mark((function e(t,n){var r,a,o=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.httpService.getAbsolute(t.url).catch((function(e){var n=e&&e.error||{message:"An issue occurred while processing this action. Please try again."};return o.alertService.alert(n.message),t.error=!0,{error:n}}));case 2:if(!(r=e.sent).error){e.next=5;break}return e.abrupt("return",{response:r});case 5:return t.error=!1,e.next=8,this.payloadByDecryptingResponse(r,n);case 8:return a=e.sent,e.next=11,this.modelManager.emitPayload(Object(h.b)(a,{dirty:!0,dirtiedDate:new Date}),p.a.RemoteActionRetrieved);case 11:return this.syncService.sync(),e.abrupt("return",{response:r,item:r.item});case 13:case"end":return e.stop()}}),e,this)}))),function(e,t){return l.apply(this,arguments)})},{key:"handleRenderAction",value:(u=S(i.a.mark((function e(t,n){var r,a=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.httpService.getAbsolute(t.url).then(function(){var e=S(i.a.mark((function e(r){var o,s;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.error=!1,e.next=3,a.payloadByDecryptingResponse(r,n);case 3:if(!(o=e.sent)){e.next=7;break}return s=a.itemManager.createItem(o.content_type,o.contentObject),e.abrupt("return",{response:r,item:s});case 7:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()).catch((function(e){var n=e&&e.error||{message:"An issue occurred while processing this action. Please try again."};return a.alertService.alert(n.message),t.error=!0,{error:n}}));case 2:return r=e.sent,e.abrupt("return",{response:r});case 4:case"end":return e.stop()}}),e,this)}))),function(e,t){return u.apply(this,arguments)})},{key:"payloadByDecryptingResponse",value:(c=S(i.a.mark((function e(t,n,r){var a,o,s,c,u,l,f,A,p,d,g,y;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=Object(h.e)(t.item),e.next=3,this.protocolService.payloadByDecryptingPayload(a,r);case 3:if((o=e.sent).errorDecrypting){e.next=6;break}return e.abrupt("return",o);case 6:if(t.auth_params){e.next=9;break}return this.alertService.alert("We were unable to decrypt this revision using your current keys, \n and this revision is missing metadata that would allow us to try different \n keys to decrypt it. This can likely be fixed with some manual intervention. \n Please email hello@standardnotes.org for assistance."),e.abrupt("return",void 0);case 9:s=[],c=!0,u=!1,l=void 0,e.prev=13,f=this.previousPasswords[Symbol.iterator]();case 15:if(c=(A=f.next()).done){e.next=33;break}if(p=A.value,!s.includes(p)){e.next=19;break}return e.abrupt("continue",30);case 19:return s.push(p),e.next=22,this.protocolService.computeRootKey(p,t.auth_params);case 22:if(d=e.sent){e.next=25;break}return e.abrupt("continue",30);case 25:return e.next=27,this.payloadByDecryptingResponse(t,n,d);case 27:if(!(g=e.sent)){e.next=30;break}return e.abrupt("return",g);case 30:c=!0,e.next=15;break;case 33:e.next=39;break;case 35:e.prev=35,e.t0=e.catch(13),u=!0,l=e.t0;case 39:e.prev=39,e.prev=40,c||null==f.return||f.return();case 42:if(e.prev=42,!u){e.next=45;break}throw l;case 45:return e.finish(42);case 46:return e.finish(39);case 47:return e.next=49,n();case 49:return y=e.sent,this.previousPasswords.push(y),e.abrupt("return",this.payloadByDecryptingResponse(t,n,r));case 52:case"end":return e.stop()}}),e,this,[[13,35,39,47],[40,,42,46]])}))),function(e,t,n){return c.apply(this,arguments)})},{key:"handlePostAction",value:(s=S(i.a.mark((function e(t,n){var r,a,o,s=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r="decrypted"===t.access_type,e.next=3,this.outgoingPayloadForItem(n,r);case 3:return a=e.sent,o={items:[a]},e.abrupt("return",this.httpService.postAbsolute(t.url,o).then((function(e){return t.error=!1,{response:e}})).catch((function(e){return t.error=!0,console.error("Action error response:",e),s.alertService.alert("An issue occurred while processing this action. Please try again."),{response:e}})));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t){return s.apply(this,arguments)})},{key:"handleShowAction",value:(o=S(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.deviceInterface.openUrl(t.url),e.abrupt("return",{response:void 0});case 2:case"end":return e.stop()}}),e,this)}))),function(e){return o.apply(this,arguments)})},{key:"outgoingPayloadForItem",value:(a=S(i.a.mark((function e(t){var n,r,a,o=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=o.length>1&&void 0!==o[1]&&o[1],r=n?E.a.FileDecrypted:E.a.FileEncrypted,e.next=4,this.protocolService.payloadByEncryptingPayload(t.payloadRepresentation(),r);case 4:return a=e.sent,e.abrupt("return",a.ejected());case 6:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})}])&&Q(n.prototype,r),t}(n(16).a),R=n(85),T=n(58),j=n(83),H=n(57),N=(n(10),n(84)),U=n(40),L=n(64);function K(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function G(e){for(var t=1;t0&&void 0!==l[0]&&l[0],this.launched=!1,e.next=4,this.challengeService.getLaunchChallenge();case 4:if(!(n=e.sent)){e.next=11;break}return e.next=8,this.challengeService.promptForChallengeResponse(n);case 8:return r=e.sent,e.next=11,this.handleLaunchChallengeResponse(r);case 11:if(!this.storageService.isStorageWrapped()){e.next=14;break}return e.next=14,this.storageService.decryptStorage();case 14:return e.next=16,this.handleStage(o.a.StorageDecrypted_09);case 16:return e.next=18,this.apiService.loadHost();case 18:return e.next=20,this.sessionManager.initializeFromDisk();case 20:return this.historyManager.initializeFromDisk(),this.launched=!0,e.next=24,this.notifyEvent(s.a.Launched);case 24:return e.next=26,this.handleStage(o.a.Launched_10);case 26:return e.next=28,this.syncService.getDatabasePayloads();case 28:return a=e.sent,e.next=31,this.handleStage(o.a.LoadingDatabase_11);case 31:if(!this.createdNewDatabase){e.next=34;break}return e.next=34,this.syncService.onNewDatabaseCreated();case 34:if(c=this.syncService.loadDatabasePayloads(a).then(Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!u.dealloced){e.next=2;break}throw"Application has been destroyed.";case 2:return e.next=4,u.handleStage(o.a.LoadedDatabase_12);case 4:return u.beginAutoSyncTimer(),e.abrupt("return",u.syncService.sync({mode:U.b.DownloadFirst}));case 6:case"end":return e.stop()}}),e)})))),!t){e.next=38;break}return e.next=38,c;case 38:case"end":return e.stop()}}),e,this)}))),function(){return De.apply(this,arguments)})},{key:"handleLaunchChallengeResponse",value:(xe=Y(i.a.mark((function e(t){var n,r;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.challenge.types.includes(l.d.LocalPasscode)){e.next=9;break}if(n=t.artifacts.wrappingKey){e.next=7;break}return r=t.getValueForType(l.d.LocalPasscode),e.next=6,this.protocolService.computeWrappingKey(r.value);case 6:n=e.sent;case 7:return e.next=9,this.protocolService.unwrapRootKey(n);case 9:case"end":return e.stop()}}),e,this)}))),function(e){return xe.apply(this,arguments)})},{key:"beginAutoSyncTimer",value:function(){var e=this;this.autoSyncInterval=this.deviceInterface.interval((function(){e.syncService.log("Syncing from autosync"),e.sync()}),3e4)}},{key:"getMigrationChallengeResponder",value:function(){var e=this;return function(){var t=Y(i.a.mark((function t(n,r,a){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",e.challengeService.promptForChallengeResponse(n,r,a));case 1:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}()}},{key:"handleStage",value:(Qe=Y(i.a.mark((function e(t){var n,r,a,o,s,c;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=!0,r=!1,a=void 0,e.prev=3,o=this.services[Symbol.iterator]();case 5:if(n=(s=o.next()).done){e.next=12;break}return c=s.value,e.next=9,c.handleApplicationStage(t);case 9:n=!0,e.next=5;break;case 12:e.next=18;break;case 14:e.prev=14,e.t0=e.catch(3),r=!0,a=e.t0;case 18:e.prev=18,e.prev=19,n||null==o.return||o.return();case 21:if(e.prev=21,!r){e.next=24;break}throw a;case 24:return e.finish(21);case 25:return e.finish(18);case 26:case"end":return e.stop()}}),e,this,[[3,14,18,26],[19,,21,25]])}))),function(e){return Qe.apply(this,arguments)})},{key:"addEventObserver",value:function(e,t){var n=this,r={callback:e,singleEvent:t};return this.eventHandlers.push(r),function(){Object(f.B)(n.eventHandlers,r)}}},{key:"addSingleEventObserver",value:function(e,t){var n=function(){var n=Y(i.a.mark((function n(r){return i.a.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r===e&&t(e);case 1:case"end":return n.stop()}}),n)})));return function(e){return n.apply(this,arguments)}}();return this.addEventObserver(n,e)}},{key:"notifyEvent",value:(Se=Y(i.a.mark((function e(t,n){var r,a,o,s,c,u;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=!0,a=!1,o=void 0,e.prev=3,s=this.eventHandlers.slice()[Symbol.iterator]();case 5:if(r=(c=s.next()).done){e.next=18;break}if(!(u=c.value).singleEvent||u.singleEvent!==t){e.next=12;break}return e.next=10,u.callback(t,n||{});case 10:e.next=15;break;case 12:if(u.singleEvent){e.next=15;break}return e.next=15,u.callback(t,n||{});case 15:r=!0,e.next=5;break;case 18:e.next=24;break;case 20:e.prev=20,e.t0=e.catch(3),a=!0,o=e.t0;case 24:e.prev=24,e.prev=25,r||null==s.return||s.return();case 27:if(e.prev=27,!a){e.next=30;break}throw o;case 30:return e.finish(27);case 31:return e.finish(24);case 32:this.migrationService.handleApplicationEvent(t);case 33:case"end":return e.stop()}}),e,this,[[3,20,24,32],[25,,27,31]])}))),function(e,t){return Se.apply(this,arguments)})},{key:"isDatabaseLoaded",value:function(){return this.syncService.isDatabaseLoaded()}},{key:"savePayload",value:(_e=Y(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=Object(h.b)(t,{dirty:!0,dirtiedDate:new Date}),e.next=3,this.modelManager.emitPayload(n,p.a.LocalChanged);case 3:return e.next=5,this.syncService.sync();case 5:case"end":return e.stop()}}),e,this)}))),function(e){return _e.apply(this,arguments)})},{key:"findItem",value:function(e){return this.itemManager.findItem(e)}},{key:"allItems",value:function(){return this.itemManager.items}},{key:"findItems",value:function(e){return this.itemManager.itemsMatchingPredicate(e)}},{key:"getAll",value:function(e){return this.itemManager.findItems(e)}},{key:"mergeItem",value:(ke=Y(i.a.mark((function e(t,n){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.itemManager.emitItemFromPayload(t.payloadRepresentation(),n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t){return ke.apply(this,arguments)})},{key:"createManagedItem",value:(Ee=Y(i.a.mark((function e(t,n){var r,a,o,s=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=s.length>2&&void 0!==s[2]&&s[2],a=s.length>3?s[3]:void 0,e.next=4,this.itemManager.createItem(t,n,r,a);case 4:return o=e.sent,e.abrupt("return",o);case 6:case"end":return e.stop()}}),e,this)}))),function(e,t){return Ee.apply(this,arguments)})},{key:"createTemplateItem",value:(Be=Y(i.a.mark((function e(t,n){var r;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.itemManager.createTemplateItem(t,n);case 2:return r=e.sent,e.abrupt("return",r);case 4:case"end":return e.stop()}}),e,this)}))),function(e,t){return Be.apply(this,arguments)})},{key:"createItemFromPayload",value:function(e){return Object(d.a)(e)}},{key:"createPayloadFromObject",value:function(e){return Object(h.e)(e)}},{key:"getLastSyncDate",value:function(){return this.syncService.getLastSyncDate()}},{key:"getSyncStatus",value:function(){return this.syncService.getStatus()}},{key:"setItemNeedsSync",value:(Ce=Y(i.a.mark((function e(t){var n,r=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=r.length>1&&void 0!==r[1]&&r[1],e.abrupt("return",this.itemManager.setItemDirty(t.uuid,n));case 2:case"end":return e.stop()}}),e,this)}))),function(e){return Ce.apply(this,arguments)})},{key:"setItemsNeedsSync",value:(we=Y(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.itemManager.setItemsDirty(Object(a.b)(t)));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return we.apply(this,arguments)})},{key:"deleteItem",value:(Ie=Y(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.itemManager.setItemToBeDeleted(t.uuid);case 2:return e.abrupt("return",this.sync());case 3:case"end":return e.stop()}}),e,this)}))),function(e){return Ie.apply(this,arguments)})},{key:"deleteItemLocally",value:(me=Y(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.itemManager.removeItemLocally(t);case 1:case"end":return e.stop()}}),e,this)}))),function(e){return me.apply(this,arguments)})},{key:"emptyTrash",value:(be=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.itemManager.emptyTrash();case 2:return e.abrupt("return",this.sync());case 3:case"end":return e.stop()}}),e,this)}))),function(){return be.apply(this,arguments)})},{key:"getTrashedItems",value:function(){return this.itemManager.trashedItems}},{key:"setDisplayOptions",value:function(e,t,n,r){this.itemManager.setDisplayOptions(e,t,n,r)}},{key:"getDisplayableItems",value:function(e){return this.itemManager.getDisplayableItems(e)}},{key:"insertItem",value:(ve=Y(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.itemManager.insertItem(t);case 2:return n=e.sent,e.next=5,this.itemManager.changeItems([n.uuid]);case 5:return e.abrupt("return",this.findItem(t.uuid));case 6:case"end":return e.stop()}}),e,this)}))),function(e){return ve.apply(this,arguments)})},{key:"saveItem",value:(ye=Y(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=this.itemManager.findItem(t)){e.next=3;break}throw Error("Attempting to save non-inserted item");case 3:if(n.dirty){e.next=6;break}return e.next=6,this.itemManager.changeItem(t);case 6:return e.next=8,this.syncService.sync();case 8:case"end":return e.stop()}}),e,this)}))),function(e){return ye.apply(this,arguments)})},{key:"changeAndSaveItem",value:(ge=Y(i.a.mark((function e(t,n){var r,a,o,s=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=s.length>2&&void 0!==s[2]&&s[2],a=s.length>3?s[3]:void 0,o=s.length>4?s[4]:void 0,Object(f.s)(t)){e.next=5;break}throw Error("Must use uuid to change item");case 5:return e.next=7,this.itemManager.changeItems([t],n,r?u.c.UserInteraction:void 0,a);case 7:return e.next=9,this.syncService.sync(o);case 9:return e.abrupt("return",this.findItem(t));case 10:case"end":return e.stop()}}),e,this)}))),function(e,t){return ge.apply(this,arguments)})},{key:"changeAndSaveItems",value:(de=Y(i.a.mark((function e(t,n){var r,a,o,s=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=s.length>2&&void 0!==s[2]&&s[2],a=s.length>3?s[3]:void 0,o=s.length>4?s[4]:void 0,e.next=5,this.itemManager.changeItems(t,n,r?u.c.UserInteraction:void 0,a);case 5:return e.next=7,this.syncService.sync(o);case 7:case"end":return e.stop()}}),e,this)}))),function(e,t){return de.apply(this,arguments)})},{key:"changeItem",value:(pe=Y(i.a.mark((function e(t,n){var r,a=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=a.length>2&&void 0!==a[2]&&a[2],Object(f.s)(t)){e.next=3;break}throw Error("Must use uuid to change item");case 3:return e.next=5,this.itemManager.changeItems([t],n,r?u.c.UserInteraction:void 0);case 5:return e.abrupt("return",this.findItem(t));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t){return pe.apply(this,arguments)})},{key:"changeItems",value:(he=Y(i.a.mark((function e(t,n){var r,a=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=a.length>2&&void 0!==a[2]&&a[2],e.abrupt("return",this.itemManager.changeItems(t,n,r?u.c.UserInteraction:void 0));case 2:case"end":return e.stop()}}),e,this)}))),function(e,t){return he.apply(this,arguments)})},{key:"getItems",value:function(e){return this.itemManager.getItems(e)}},{key:"notesMatchingSmartTag",value:function(e){return this.itemManager.notesMatchingSmartTag(e)}},{key:"referencesForItem",value:function(e,t){var n=this.itemManager.referencesForItem(e.uuid);return t&&(n=n.filter((function(e){return(null==e?void 0:e.content_type)===t}))),n}},{key:"referencingForItem",value:function(e,t){var n=this.itemManager.itemsReferencingItem(e.uuid);return t&&(n=n.filter((function(e){return(null==e?void 0:e.content_type)===t}))),n}},{key:"findTagByTitle",value:function(e){return this.itemManager.findTagByTitle(e)}},{key:"findOrCreateTag",value:(Ae=Y(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.itemManager.findOrCreateTagByTitle(t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return Ae.apply(this,arguments)})},{key:"getSmartTags",value:function(){return this.itemManager.getSmartTags()}},{key:"getNoteCount",value:function(){return this.itemManager.noteCount}},{key:"streamItems",value:function(e,t){var n=this,r=this.itemManager.addObserver(e,(function(e,n,r,i){var a=e.concat(n).concat(r);t(a,i)})),i=this.itemManager.getItems(e);return i.length>0&&t(i),this.streamRemovers.push(r),function(){r(),Object(f.B)(n.streamRemovers,r)}}},{key:"setHost",value:(fe=Y(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiService.setHost(t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return fe.apply(this,arguments)})},{key:"getHost",value:(le=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.apiService.getHost());case 1:case"end":return e.stop()}}),e,this)}))),function(){return le.apply(this,arguments)})},{key:"getUser",value:function(){if(!this.launched)throw"Attempting to access user before application unlocked";return this.sessionManager.getUser()}},{key:"getUserVersion",value:(ue=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.protocolService.getUserVersion());case 1:case"end":return e.stop()}}),e,this)}))),function(){return ue.apply(this,arguments)})},{key:"protocolUpgradeAvailable",value:(ce=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.protocolService.upgradeAvailable());case 1:case"end":return e.stop()}}),e,this)}))),function(){return ce.apply(this,arguments)})},{key:"isEncryptionAvailable",value:(se=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",!Object(f.p)(this.getUser())||this.hasPasscode());case 1:case"end":return e.stop()}}),e,this)}))),function(){return se.apply(this,arguments)})},{key:"upgradeProtocolVersion",value:(oe=Y(i.a.mark((function e(){var t,n,r,a,o,s,c,u,f,A,h;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.hasPasscode(),n=!this.noAccount(),r=[],t&&r.push(l.d.LocalPasscode),n&&r.push(l.d.AccountPassword),a=new l.a(r,l.b.ProtocolUpgrade),e.next=8,this.challengeService.promptForChallengeResponse(a);case 8:if(o=e.sent){e.next=11;break}return e.abrupt("return");case 11:if(s=[],!t){e.next=17;break}return u=o.getValueForType(l.d.LocalPasscode),c=u.value,e.next=17,this.changePasscode(c);case 17:if(!n){e.next=24;break}return f=o.getValueForType(l.d.AccountPassword),A=f.value,e.next=22,this.changePassword(A,A,c);case 22:(null==(h=e.sent)?void 0:h.error)&&s.push(h.error);case 24:return e.abrupt("return",s);case 25:case"end":return e.stop()}}),e,this)}))),function(){return oe.apply(this,arguments)})},{key:"noAccount",value:function(){var e=this.getUser();return Object(f.p)(e)}},{key:"importData",value:(ae=Y(i.a.mark((function e(t,n){var r,a,o,s,c,u,l=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=l.length>2&&void 0!==l[2]&&l[2],e.next=3,this.protocolService.payloadsByDecryptingBackupFile(t,n);case 3:return a=e.sent,o=a.filter((function(e){return!e.errorDecrypting})).map((function(e){return e.content_type===A.a.Component&&e.safeContent.active?Object(h.b)(e,{content:G({},e.safeContent,{active:!1})}):e})),e.next=7,this.modelManager.importPayloads(o);case 7:if(s=e.sent,c=this.sync(),!r){e.next=12;break}return e.next=12,c;case 12:return u=this.getAll(s),e.abrupt("return",{affectedItems:u,errorCount:a.length-o.length});case 14:case"end":return e.stop()}}),e,this)}))),function(e,t){return ae.apply(this,arguments)})},{key:"createBackupFile",value:(ie=Y(i.a.mark((function e(t,n){var r,a=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=a.length>2&&void 0!==a[2]&&a[2],e.abrupt("return",this.protocolService.createBackupFile(t,n,r));case 2:case"end":return e.stop()}}),e,this)}))),function(e,t){return ie.apply(this,arguments)})},{key:"isEphemeralSession",value:function(){return this.storageService.isEphemeralSession()}},{key:"lockSyncing",value:function(){this.syncService.lockSyncing()}},{key:"unlockSyncing",value:function(){this.syncService.unlockSyncing()}},{key:"sync",value:(re=Y(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.syncService.sync(t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return re.apply(this,arguments)})},{key:"isOutOfSync",value:(ne=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.syncService.isOutOfSync());case 1:case"end":return e.stop()}}),e,this)}))),function(){return ne.apply(this,arguments)})},{key:"resolveOutOfSync",value:(te=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.syncService.resolveOutOfSync());case 1:case"end":return e.stop()}}),e,this)}))),function(){return te.apply(this,arguments)})},{key:"setValue",value:(ee=Y(i.a.mark((function e(t,n,r){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.storageService.setValue(t,n,r));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return ee.apply(this,arguments)})},{key:"getValue",value:(Z=Y(i.a.mark((function e(t,n){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.storageService.getValue(t,n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t){return Z.apply(this,arguments)})},{key:"removeValue",value:(X=Y(i.a.mark((function e(t,n){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.storageService.removeValue(t,n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t){return X.apply(this,arguments)})},{key:"clearDatabase",value:(W=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.storageService.clearAllPayloads());case 1:case"end":return e.stop()}}),e,this)}))),function(){return W.apply(this,arguments)})},{key:"rewriteItemsKeys",value:(q=Y(i.a.mark((function e(){var t,n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.itemManager.itemsKeys(),n=t.map((function(e){return e.payloadRepresentation()})),e.next=4,this.storageService.deletePayloads(n);case 4:return e.next=6,this.syncService.persistPayloads(n);case 6:case"end":return e.stop()}}),e,this)}))),function(){return q.apply(this,arguments)})},{key:"prepareForDeinit",value:(z=Y(i.a.mark((function e(){var t,n,r=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=r.length>0&&void 0!==r[0]?r[0]:0,n=Promise.all(this.services.map((function(e){return e.blockDeinit()}))),0!==t){e.next=7;break}return e.next=5,n;case 5:e.next=9;break;case 7:return e.next=9,Promise.race([n,Object(f.E)(t)]);case 9:case"end":return e.stop()}}),e,this)}))),function(){return z.apply(this,arguments)})},{key:"deinit",value:function(){clearInterval(this.autoSyncInterval);var e=!0,t=!1,n=void 0;try{for(var r,i=this.serviceObservers[Symbol.iterator]();!(e=(r=i.next()).done);e=!0)(0,r.value)()}catch(e){t=!0,n=e}finally{try{e||null==i.return||i.return()}finally{if(t)throw n}}var a=!0,o=!1,s=void 0;try{for(var c,u=this.managedSubscribers[Symbol.iterator]();!(a=(c=u.next()).done);a=!0)(0,c.value)()}catch(e){o=!0,s=e}finally{try{a||null==u.return||u.return()}finally{if(o)throw s}}var l=!0,f=!1,A=void 0;try{for(var h,p=this.services[Symbol.iterator]();!(l=(h=p.next()).done);l=!0)h.value.deinit()}catch(e){f=!0,A=e}finally{try{l||null==p.return||p.return()}finally{if(f)throw A}}this.deviceInterface.deinit(),this.deviceInterface=void 0,this.crypto=void 0,this.createdNewDatabase=!1,this.services.length=0,this.serviceObservers.length=0,this.managedSubscribers.length=0,this.streamRemovers.length=0,this.clearServices(),this.dealloced=!0,this.started=!1}},{key:"getWrappingKeyIfNecessary",value:($=Y(i.a.mark((function e(t){var n,r,a,o;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.hasPasscode()){e.next=2;break}return e.abrupt("return",{});case 2:if(t){e.next=11;break}return n=new l.a([l.d.LocalPasscode],l.b.ResaveRootKey),e.next=6,this.challengeService.promptForChallengeResponse(n);case 6:if(r=e.sent){e.next=9;break}return e.abrupt("return",{canceled:!0});case 9:a=r.getValueForType(l.d.LocalPasscode),t=a.value;case 11:return e.next=13,this.protocolService.computeWrappingKey(t);case 13:return o=e.sent,e.abrupt("return",{wrappingKey:o});case 15:case"end":return e.stop()}}),e,this)}))),function(e){return $.apply(this,arguments)})},{key:"register",value:(K=Y(i.a.mark((function e(t,n){var r,a,o,c,u,l=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=l.length>2&&void 0!==l[2]&&l[2],a=!(l.length>3&&void 0!==l[3])||l[3],e.next=4,this.getWrappingKeyIfNecessary();case 4:if(o=e.sent,c=o.wrappingKey,!o.canceled){e.next=9;break}return e.abrupt("return");case 9:return this.lockSyncing(),e.next=12,this.sessionManager.register(t,n);case 12:if((u=e.sent).response.error){e.next=35;break}return e.next=16,this.protocolService.setNewRootKey(u.rootKey,u.keyParams,c);case 16:return this.syncService.resetSyncState(),e.next=19,this.storageService.setPersistencePolicy(r?g.c.Ephemeral:g.c.Default);case 19:if(!a){e.next=24;break}return e.next=22,this.syncService.markAllItemsAsNeedingSync(!0);case 22:e.next=27;break;case 24:return this.itemManager.removeAllItemsFromMemory(),e.next=27,this.clearDatabase();case 27:return e.next=29,this.notifyEvent(s.a.SignedIn);case 29:return this.unlockSyncing(),e.next=32,this.syncService.sync({mode:U.b.DownloadFirst,queueStrategy:U.c.ForceSpawnNew});case 32:this.protocolService.decryptErroredItems(),e.next=36;break;case 35:this.unlockSyncing();case 36:return e.abrupt("return",u.response);case 37:case"end":return e.stop()}}),e,this)}))),function(e,t){return K.apply(this,arguments)})},{key:"signIn",value:(F=Y(i.a.mark((function e(t,n){var r,a,o,c,u,l,f,A,h,p,d=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=d.length>2&&void 0!==d[2]&&d[2],a=d.length>3&&void 0!==d[3]&&d[3],o=d.length>4?d[4]:void 0,c=d.length>5?d[5]:void 0,u=!(d.length>6&&void 0!==d[6])||d[6],l=d.length>7&&void 0!==d[7]&&d[7],e.next=8,this.getWrappingKeyIfNecessary();case 8:if(f=e.sent,A=f.wrappingKey,!f.canceled){e.next=13;break}return e.abrupt("return");case 13:return this.lockSyncing(),e.next=16,this.sessionManager.signIn(t,n,r,o,c);case 16:if((h=e.sent).response.error){e.next=45;break}return e.next=20,this.protocolService.setNewRootKey(h.rootKey,h.keyParams,A);case 20:return this.syncService.resetSyncState(),e.next=23,this.storageService.setPersistencePolicy(a?g.c.Ephemeral:g.c.Default);case 23:if(!u){e.next=28;break}return e.next=26,this.syncService.markAllItemsAsNeedingSync(!0);case 26:e.next=31;break;case 28:return this.itemManager.removeAllItemsFromMemory(),e.next=31,this.clearDatabase();case 31:return e.next=33,this.notifyEvent(s.a.SignedIn);case 33:if(this.unlockSyncing(),p=this.syncService.sync({mode:U.b.DownloadFirst,checkIntegrity:!0,queueStrategy:U.c.ForceSpawnNew,awaitAll:l}),!l){e.next=42;break}return e.next=38,p;case 38:return e.next=40,this.protocolService.decryptErroredItems();case 40:e.next=43;break;case 42:this.protocolService.decryptErroredItems();case 43:e.next=46;break;case 45:this.unlockSyncing();case 46:return e.abrupt("return",h.response);case 47:case"end":return e.stop()}}),e,this)}))),function(e,t){return F.apply(this,arguments)})},{key:"changePassword",value:(M=Y(i.a.mark((function e(t,n,r){var a,o,s,c;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getWrappingKeyIfNecessary(r);case 2:if(a=e.sent,o=a.wrappingKey,!a.canceled){e.next=7;break}return e.abrupt("return");case 7:return e.next=9,this.protocolService.getRootKeyParams();case 9:return s=e.sent,this.lockSyncing(),e.next=13,this.sessionManager.changePassword(t,s,n);case 13:if((c=e.sent).response.error){e.next=24;break}return e.next=17,this.protocolService.setNewRootKey(c.rootKey,c.keyParams,o);case 17:return e.next=19,this.protocolService.createNewDefaultItemsKey();case 19:return this.unlockSyncing(),e.next=22,this.syncService.sync();case 22:e.next=25;break;case 24:this.unlockSyncing();case 25:return e.abrupt("return",c.response);case 26:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return M.apply(this,arguments)})},{key:"signOut",value:(P=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.sessionManager.signOut();case 2:return e.next=4,this.protocolService.clearLocalKeyState();case 4:return e.next=6,this.storageService.clearAllData();case 6:return e.next=8,this.notifyEvent(s.a.SignedOut);case 8:return e.next=10,this.prepareForDeinit();case 10:this.deinit();case 11:case"end":return e.stop()}}),e,this)}))),function(){return P.apply(this,arguments)})},{key:"validateAccountPassword",value:(D=Y(i.a.mark((function e(t){var n,r;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.protocolService.validateAccountPassword(t);case 2:return n=e.sent,r=n.valid,e.abrupt("return",r);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return D.apply(this,arguments)})},{key:"isStarted",value:function(){return this.started}},{key:"isLaunched",value:function(){return this.launched}},{key:"hasPasscode",value:function(){return this.protocolService.hasPasscode()}},{key:"isLocked",value:(x=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.started){e.next=2;break}return e.abrupt("return",!0);case 2:return e.abrupt("return",this.challengeService.isPasscodeLocked());case 3:case"end":return e.stop()}}),e,this)}))),function(){return x.apply(this,arguments)})},{key:"lock",value:(Q=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=3,this.prepareForDeinit(500);case 3:return e.abrupt("return",this.deinit());case 4:case"end":return e.stop()}}),e,this)}))),function(){return Q.apply(this,arguments)})},{key:"setPasscode",value:(S=Y(i.a.mark((function e(t){var n,r,a,o;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.generateUuid();case 2:return n=e.sent,e.next=5,this.protocolService.createRootKey(n,t);case 5:return r=e.sent,a=r.key,o=r.keyParams,e.next=10,this.protocolService.setNewRootKeyWrapper(a,o);case 10:return e.next=12,this.rewriteItemsKeys();case 12:return e.next=14,this.syncService.sync();case 14:case"end":return e.stop()}}),e,this)}))),function(e){return S.apply(this,arguments)})},{key:"removePasscode",value:(_=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.protocolService.removeRootKeyWrapper();case 2:return e.next=4,this.rewriteItemsKeys();case 4:case"end":return e.stop()}}),e,this)}))),function(){return _.apply(this,arguments)})},{key:"changePasscode",value:(k=Y(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.removePasscode();case 2:return e.abrupt("return",this.setPasscode(t));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return k.apply(this,arguments)})},{key:"setStorageEncryptionPolicy",value:(E=Y(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.storageService.setEncryptionPolicy(t);case 2:return e.abrupt("return",this.protocolService.repersistAllItems());case 3:case"end":return e.stop()}}),e,this)}))),function(e){return E.apply(this,arguments)})},{key:"generateUuid",value:(B=Y(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",c.a.GenerateUuid());case 1:case"end":return e.stop()}}),e)}))),function(){return B.apply(this,arguments)})},{key:"changeDeviceInterface",value:(r=Y(i.a.mark((function e(t){var n,r,a,o,s,c;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(this.deviceInterface=t,n=!0,r=!1,a=void 0,e.prev=4,o=this.services[Symbol.iterator]();!(n=(s=o.next()).done);n=!0)(c=s.value).deviceInterface&&(c.deviceInterface=t);e.next=12;break;case 8:e.prev=8,e.t0=e.catch(4),r=!0,a=e.t0;case 12:e.prev=12,e.prev=13,n||null==o.return||o.return();case 15:if(e.prev=15,!r){e.next=18;break}throw a;case 18:return e.finish(15);case 19:return e.finish(12);case 20:case"end":return e.stop()}}),e,this,[[4,8,12,20],[13,,15,19]])}))),function(e){return r.apply(this,arguments)})},{key:"constructServices",value:function(){this.createModelManager(),this.createItemManager(),this.createStorageManager(),this.createProtocolService();var e={payloadByEncryptingPayload:this.protocolService.payloadByEncryptingPayload.bind(this.protocolService),payloadByDecryptingPayload:this.protocolService.payloadByDecryptingPayload.bind(this.protocolService)};this.storageService.encryptionDelegate=e,this.createMigrationService(),this.createAlertManager(),this.createHttpManager(),this.createApiService(),this.createSessionManager(),this.createSyncManager(),this.createChallengeService(),this.createSingletonManager(),this.createComponentManager(),this.createPrivilegesService(),this.createHistoryManager(),this.createActionsManager()}},{key:"clearServices",value:function(){this.migrationService=void 0,this.alertService=void 0,this.httpService=void 0,this.modelManager=void 0,this.protocolService=void 0,this.storageService=void 0,this.apiService=void 0,this.sessionManager=void 0,this.syncService=void 0,this.challengeService=void 0,this.singletonManager=void 0,this.componentManager=void 0,this.privilegesService=void 0,this.actionsManager=void 0,this.historyManager=void 0,this.itemManager=void 0,this.services=[]}},{key:"createMigrationService",value:function(){this.migrationService=new R.a({protocolService:this.protocolService,deviceInterface:this.deviceInterface,storageService:this.storageService,itemManager:this.itemManager,environment:this.environment,namespace:this.namespace},this.getMigrationChallengeResponder()),this.services.push(this.migrationService)}},{key:"createAlertManager",value:function(){this.shouldSkipClass(y.a)||(this.alertService=new(this.getClass(y.a))(this.deviceInterface),this.services.push(this.alertService))}},{key:"createApiService",value:function(){this.apiService=new b.a(this.httpService,this.storageService),this.services.push(this.apiService)}},{key:"createItemManager",value:function(){this.itemManager=new N.a(this.modelManager),this.services.push(this.itemManager)}},{key:"createComponentManager",value:function(){this.shouldSkipClass(m.a)||(this.componentManager=new m.a(this.itemManager,this.syncService,this.alertService,this.environment,this.platform,this.deviceInterface.timeout),this.services.push(this.componentManager))}},{key:"createHttpManager",value:function(){this.httpService=new I.b,this.services.push(this.httpService)}},{key:"createModelManager",value:function(){this.modelManager=new w.a,this.services.push(this.modelManager)}},{key:"createSingletonManager",value:function(){this.singletonManager=new C.a(this.itemManager,this.syncService),this.services.push(this.singletonManager)}},{key:"createStorageManager",value:function(){this.storageService=new g.a(this.deviceInterface,this.namespace),this.services.push(this.storageService)}},{key:"createProtocolService",value:function(){var e=this;this.protocolService=new T.b(this.itemManager,this.modelManager,this.deviceInterface,this.storageService,this.crypto),this.protocolService.onKeyStatusChange(Y(i.a.mark((function t(){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.notifyEvent(s.a.KeyStatusChanged);case 2:case"end":return t.stop()}}),t)})))),this.services.push(this.protocolService)}},{key:"createSessionManager",value:function(){this.sessionManager=new v.a(this.storageService,this.apiService,this.alertService,this.protocolService),this.services.push(this.sessionManager)}},{key:"createSyncManager",value:function(){var e=this;this.syncService=new U.a(this.itemManager,this.sessionManager,this.protocolService,this.storageService,this.modelManager,this.apiService,this.deviceInterface.interval);var t=function(){var t=Y(i.a.mark((function t(n){var r;return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(r=Object(s.c)(n))){t.next=4;break}return t.next=4,e.notifyEvent(r);case 4:return t.next=6,e.protocolService.onSyncEvent(n);case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),n=this.syncService.addEventObserver(t);this.serviceObservers.push(n),this.services.push(this.syncService)}},{key:"createChallengeService",value:function(){this.challengeService=new L.b(this.storageService,this.protocolService),this.services.push(this.challengeService)}},{key:"createPrivilegesService",value:function(){this.privilegesService=new H.b(this.itemManager,this.syncService,this.singletonManager,this.protocolService,this.storageService,this.sessionManager),this.services.push(this.privilegesService)}},{key:"createHistoryManager",value:function(){this.historyManager=new j.a(this.itemManager,this.storageService,[A.a.Note],this.deviceInterface.timeout),this.services.push(this.historyManager)}},{key:"createActionsManager",value:function(){this.actionsManager=new O(this.itemManager,this.alertService,this.deviceInterface,this.httpService,this.modelManager,this.protocolService,this.syncService),this.services.push(this.actionsManager)}},{key:"shouldSkipClass",value:function(e){return this.skipClasses&&this.skipClasses.includes(e)}},{key:"getClass",value:function(e){var t=this.swapClasses&&this.swapClasses.find((function(t){return t.swap===e}));return t?t.with:e}}])&&J(t.prototype,n),e}()},function(e,t,n){var r=n(125),i=n(131)((function(e,t,n,i){r(e,t,n,i)}));e.exports=i},function(e,t,n){var r=n(132);e.exports=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?r(e,void 0,t):[]}},function(e,t,n){"use strict";n.r(t);var r=n(138);n.d(t,"SNApplication",(function(){return r.a}));var i=n(58);n.d(t,"SNProtocolService",(function(){return i.b})),n.d(t,"KeyMode",(function(){return i.a}));var a=n(46);n.d(t,"SNProtocolOperator001",(function(){return a.a}));var o=n(45);n.d(t,"SNProtocolOperator002",(function(){return o.a}));var s=n(44);n.d(t,"SNProtocolOperator003",(function(){return s.a}));var c=n(59);n.d(t,"SNProtocolOperator004",(function(){return c.a}));var u=n(134);n.d(t,"DeviceInterface",(function(){return u.a}));var l=n(17);n.d(t,"SNItem",(function(){return l.l})),n.d(t,"ItemMutator",(function(){return l.g})),n.d(t,"AppDataField",(function(){return l.b})),n.d(t,"SNItemsKey",(function(){return l.m})),n.d(t,"SNPredicate",(function(){return l.o})),n.d(t,"SNNote",(function(){return l.n})),n.d(t,"NoteMutator",(function(){return l.h})),n.d(t,"SNTag",(function(){return l.q})),n.d(t,"SNSmartTag",(function(){return l.p})),n.d(t,"SNActionsExtension",(function(){return l.i})),n.d(t,"Action",(function(){return l.a})),n.d(t,"SNTheme",(function(){return l.r})),n.d(t,"SNComponent",(function(){return l.j})),n.d(t,"ComponentAction",(function(){return l.c})),n.d(t,"ComponentMutator",(function(){return l.d})),n.d(t,"SNEditor",(function(){return l.k})),n.d(t,"SNUserPrefs",(function(){return l.s})),n.d(t,"UserPrefsMutator",(function(){return l.t})),n.d(t,"WebPrefKey",(function(){return l.u}));var f=n(6);n.d(t,"MutationType",(function(){return f.c}));var A=n(7);n.d(t,"ComponentArea",(function(){return A.b}));var h=n(135);n.d(t,"LiveItem",(function(){return h.a}));var p=n(80);n.d(t,"SNComponentManager",(function(){return p.a}));var d=n(90);n.d(t,"HistorySession",(function(){return d.a}));var g=n(67);n.d(t,"ItemHistory",(function(){return g.a}));var y=n(91);n.d(t,"ItemHistoryEntry",(function(){return y.a}));var v=n(21);n.d(t,"SNPrivileges",(function(){return v.d})),n.d(t,"ProtectedAction",(function(){return v.c})),n.d(t,"PrivilegeCredential",(function(){return v.a}));var b=n(136);for(var m in b)["SNApplication","SNProtocolService","KeyMode","SNProtocolOperator001","SNProtocolOperator002","SNProtocolOperator003","SNProtocolOperator004","DeviceInterface","SNItem","ItemMutator","AppDataField","SNItemsKey","SNPredicate","SNNote","NoteMutator","SNTag","SNSmartTag","SNActionsExtension","Action","SNTheme","SNComponent","ComponentAction","ComponentMutator","SNEditor","SNUserPrefs","UserPrefsMutator","WebPrefKey","MutationType","ComponentArea","LiveItem","SNComponentManager","HistorySession","ItemHistory","ItemHistoryEntry","SNPrivileges","ProtectedAction","PrivilegeCredential","PayloadManager","ItemManager","SNHttpService","ChallengeService","ChallengeOrchestrator","PureService","ApplicationService","SNStorageService","StoragePersistencePolicies","StorageEncryptionPolicies","StorageValueModes","ValueModesKeys","Challenge","ChallengeReason","ChallengeResponse","ChallengeType","challengeTypeToString","ChallengeValue","SNSyncService","SyncSources","SyncModes","SyncQueueStrategy","SortPayloadsByRecentAndContentPriority","SNSessionManager","SNMigrationService","SNAlertService","SNHistoryManager","SNPrivilegesService","SNSingletonManager","SNApiService","Copy","findInArray","isNullOrUndefined","deepMerge","extendArray","removeFromIndex","subtractFromArray","arrayByDifference","uniqCombineObjArrays","greaterOfTwoDates","getGlobalScope","removeFromArray","addIfUnique","dictToArray","truncateHexString","jsonParseEmbeddedKeys","topLevelCompare","Uuid","EncryptionIntent","isLocalStorageIntent","isFileIntent","isDecryptedIntent","intentRequiresEncryption","ContentType","CreateItemFromPayload","Uuids","FillItemContent","ApplicationEvent","Environment","Platform","isEnvironmentWebOrDesktop","isEnvironmentMobile","platformFromString","SyncEvent","MutableCollection","ImmutablePayloadCollection","ItemCollection","CollectionSort","CreateMaxPayloadFromAnyObject","CreateSourcedPayloadFromObject","CreateIntentPayloadFromObject","CreateEncryptionParameters","PayloadByMerging","CopyPayload","PayloadSource","isPayloadSourceRetrieved","ProtocolVersion","PayloadFormat","PurePayload","PayloadField","StorageKey","BaseMigration","PrivilegeSessionLength","default"].indexOf(m)<0&&function(e){n.d(t,e,(function(){return b[e]}))}(m);var I=n(81);n.d(t,"PayloadManager",(function(){return I.a}));var w=n(84);n.d(t,"ItemManager",(function(){return w.a}));var C=n(52);n.d(t,"SNHttpService",(function(){return C.b}));var B=n(64);n.d(t,"ChallengeService",(function(){return B.b})),n.d(t,"ChallengeOrchestrator",(function(){return B.a}));var E=n(16);n.d(t,"PureService",(function(){return E.a}));var k=n(137);n.d(t,"ApplicationService",(function(){return k.a}));var _=n(14);n.d(t,"SNStorageService",(function(){return _.a})),n.d(t,"StoragePersistencePolicies",(function(){return _.c})),n.d(t,"StorageEncryptionPolicies",(function(){return _.b})),n.d(t,"StorageValueModes",(function(){return _.d})),n.d(t,"ValueModesKeys",(function(){return _.e}));var S=n(15);n.d(t,"Challenge",(function(){return S.a})),n.d(t,"ChallengeReason",(function(){return S.b})),n.d(t,"ChallengeResponse",(function(){return S.c})),n.d(t,"ChallengeType",(function(){return S.d})),n.d(t,"challengeTypeToString",(function(){return S.f})),n.d(t,"ChallengeValue",(function(){return S.e}));var Q=n(40);n.d(t,"SNSyncService",(function(){return Q.a})),n.d(t,"SyncSources",(function(){return Q.d})),n.d(t,"SyncModes",(function(){return Q.b})),n.d(t,"SyncQueueStrategy",(function(){return Q.c}));var x=n(92);n.d(t,"SortPayloadsByRecentAndContentPriority",(function(){return x.a}));var D=n(78);n.d(t,"SNSessionManager",(function(){return D.a}));var P=n(85);n.d(t,"SNMigrationService",(function(){return P.a}));var M=n(77);n.d(t,"SNAlertService",(function(){return M.a}));var F=n(83);n.d(t,"SNHistoryManager",(function(){return F.a}));var O=n(57);n.d(t,"SNPrivilegesService",(function(){return O.b}));var R=n(82);n.d(t,"SNSingletonManager",(function(){return R.a}));var T=n(79);n.d(t,"SNApiService",(function(){return T.a}));var j=n(1);n.d(t,"Copy",(function(){return j.a})),n.d(t,"findInArray",(function(){return j.l})),n.d(t,"isNullOrUndefined",(function(){return j.p})),n.d(t,"deepMerge",(function(){return j.h})),n.d(t,"extendArray",(function(){return j.j})),n.d(t,"removeFromIndex",(function(){return j.C})),n.d(t,"subtractFromArray",(function(){return j.G})),n.d(t,"arrayByDifference",(function(){return j.c})),n.d(t,"uniqCombineObjArrays",(function(){return j.J})),n.d(t,"greaterOfTwoDates",(function(){return j.n})),n.d(t,"getGlobalScope",(function(){return j.m})),n.d(t,"removeFromArray",(function(){return j.B})),n.d(t,"addIfUnique",(function(){return j.b})),n.d(t,"dictToArray",(function(){return j.i})),n.d(t,"truncateHexString",(function(){return j.I})),n.d(t,"jsonParseEmbeddedKeys",(function(){return j.v})),n.d(t,"topLevelCompare",(function(){return j.H}));var H=n(20);n.d(t,"Uuid",(function(){return H.a}));var N=n(11);n.d(t,"EncryptionIntent",(function(){return N.a})),n.d(t,"isLocalStorageIntent",(function(){return N.e})),n.d(t,"isFileIntent",(function(){return N.d})),n.d(t,"isDecryptedIntent",(function(){return N.c})),n.d(t,"intentRequiresEncryption",(function(){return N.b}));var U=n(4);n.d(t,"ContentType",(function(){return U.a}));var L=n(19);n.d(t,"CreateItemFromPayload",(function(){return L.a}));var K=n(13);n.d(t,"Uuids",(function(){return K.b})),n.d(t,"FillItemContent",(function(){return K.a}));var G=n(24);n.d(t,"ApplicationEvent",(function(){return G.a}));var $=n(28);n.d(t,"Environment",(function(){return $.a})),n.d(t,"Platform",(function(){return $.b})),n.d(t,"isEnvironmentWebOrDesktop",(function(){return $.e})),n.d(t,"isEnvironmentMobile",(function(){return $.d})),n.d(t,"platformFromString",(function(){return $.f}));var Y=n(10);n.d(t,"SyncEvent",(function(){return Y.a}));var J=n(41);n.d(t,"MutableCollection",(function(){return J.a}));var V=n(23);n.d(t,"ImmutablePayloadCollection",(function(){return V.a}));var z=n(37);n.d(t,"ItemCollection",(function(){return z.b})),n.d(t,"CollectionSort",(function(){return z.a}));var q=n(2);n.d(t,"CreateMaxPayloadFromAnyObject",(function(){return q.e})),n.d(t,"CreateSourcedPayloadFromObject",(function(){return q.f})),n.d(t,"CreateIntentPayloadFromObject",(function(){return q.d})),n.d(t,"CreateEncryptionParameters",(function(){return q.c})),n.d(t,"PayloadByMerging",(function(){return q.g})),n.d(t,"CopyPayload",(function(){return q.b}));var W=n(3);n.d(t,"PayloadSource",(function(){return W.a})),n.d(t,"isPayloadSourceRetrieved",(function(){return W.b}));var X=n(9);n.d(t,"ProtocolVersion",(function(){return X.a}));var Z=n(12);n.d(t,"PayloadFormat",(function(){return Z.a}));var ee=n(66);n.d(t,"PurePayload",(function(){return ee.a}));var te=n(5);n.d(t,"PayloadField",(function(){return te.a}));var ne=n(8);n.d(t,"StorageKey",(function(){return ne.b}));var re=n(89);n.d(t,"BaseMigration",(function(){return re.a})),n.d(t,"PrivilegeSessionLength",(function(){return O.a}))},function(e,t,n){(function(e){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var n=function(e){"use strict";var n=Object.prototype,r=n.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function c(e,t,n,r){var i=t&&t.prototype instanceof f?t:f,a=Object.create(i.prototype),o=new C(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(i,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw a;return{value:void 0,done:!0}}for(n.method=i,n.arg=a;;){var o=n.delegate;if(o){var s=m(o,n);if(s){if(s===l)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=u(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,o),a}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function A(){}function h(){}var p={};p[a]=function(){return this};var d=Object.getPrototypeOf,g=d&&d(d(B([])));g&&g!==n&&r.call(g,a)&&(p=g);var y=h.prototype=f.prototype=Object.create(p);function v(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function b(e,n){var i;this._invoke=function(a,o){function s(){return new n((function(i,s){!function i(a,o,s,c){var l=u(e[a],e,o);if("throw"!==l.type){var f=l.arg,A=f.value;return A&&"object"===t(A)&&r.call(A,"__await")?n.resolve(A.__await).then((function(e){i("next",e,s,c)}),(function(e){i("throw",e,s,c)})):n.resolve(A).then((function(e){f.value=e,s(f)}),(function(e){return i("throw",e,s,c)}))}c(l.arg)}(a,o,i,s)}))}return i=i?i.then(s,s):s()}}function m(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,m(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=u(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var i=r.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function w(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function B(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,i=function t(){for(;++n=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(s&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;w(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:B(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}("object"===t(e)?e.exports:{});try{regeneratorRuntime=n}catch(e){Function("r","regeneratorRuntime = r")(n)}}).call(this,n(68)(e))},function(e,t,n){var r=n(144),i=n(198),a=n(123);e.exports=function(e){var t=i(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},function(e,t,n){var r=n(96),i=n(114);e.exports=function(e,t,n,a){var o=n.length,s=o,c=!a;if(null==e)return!s;for(e=Object(e);o--;){var u=n[o];if(c&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++o-1}},function(e,t,n){var r=n(71);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},function(e,t,n){var r=n(70);e.exports=function(){this.__data__=new r,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var r=n(70),i=n(97),a=n(99);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var r=n(98),i=n(158),a=n(39),o=n(113),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,f=u.hasOwnProperty,A=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||i(e))&&(r(e)?A:s).test(o(e))}},function(e,t,n){var r=n(72),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var i=o.call(e);return r&&(t?e[s]=n:delete e[s]),i}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var r,i=n(159),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},function(e,t,n){var r=n(36)["__core-js_shared__"];e.exports=r},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var r=n(162),i=n(70),a=n(97);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},function(e,t,n){var r=n(163),i=n(164),a=n(165),o=n(166),s=n(167);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++ti?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(i);++r-1?s[c?t[u]:u]:void 0}}},function(e,t,n){var r=n(124),i=n(95),a=n(220),o=Math.max;e.exports=function(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var c=null==n?0:a(n);return c<0&&(c=o(s+c,0)),r(e,i(t,3),c)}},function(e,t,n){var r=n(221);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},function(e,t,n){var r=n(222);e.exports=function(e){return e?(e=r(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},function(e,t,n){var r=n(39),i=n(76),a=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(a,"");var n=s.test(e);return n||c.test(e)?u(e.slice(2),n?2:8):o.test(e)?NaN:+e}},function(e,t,n){var r=n(224)();e.exports=r},function(e,t){e.exports=function(e){return function(t,n,r){for(var i=-1,a=Object(t),o=r(t),s=o.length;s--;){var c=o[e?s:++i];if(!1===n(a[c],c,a))break}return t}}},function(e,t,n){var r=n(126),i=n(226),a=n(227),o=n(229),s=n(230),c=n(102),u=n(34),l=n(232),f=n(103),A=n(98),h=n(39),p=n(233),d=n(104),g=n(129),y=n(234);e.exports=function(e,t,n,v,b,m,I){var w=g(e,n),C=g(t,n),B=I.get(C);if(B)r(e,n,B);else{var E=m?m(w,C,n+"",e,t,I):void 0,k=void 0===E;if(k){var _=u(C),S=!_&&f(C),Q=!_&&!S&&d(C);E=C,_||S||Q?u(w)?E=w:l(w)?E=o(w):S?(k=!1,E=i(C,!0)):Q?(k=!1,E=a(C,!0)):E=[]:p(C)||c(C)?(E=w,c(w)?E=y(w):h(w)&&!A(w)||(E=s(C))):k=!1}k&&(I.set(C,E),b(E,C,v,m,I),I.delete(C)),r(e,n,E)}}},function(e,t,n){(function(e){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=n(36),a="object"==r(t)&&t&&!t.nodeType&&t,o=a&&"object"==r(e)&&e&&!e.nodeType&&e,s=o&&o.exports===a?i.Buffer:void 0,c=s?s.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=c?c(n):new e.constructor(n);return e.copy(r),r}}).call(this,n(68)(e))},function(e,t,n){var r=n(228);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},function(e,t,n){var r=n(118);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},function(e,t){e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=n(61),a=n(62),o=n(75),s=n(39);e.exports=function(e,t,n){if(!s(n))return!1;var c=r(t);return!!("number"==c?a(n)&&o(t,n.length):"string"==c&&t in n)&&i(n[t],e)}},function(e,t,n){var r=n(248);e.exports=function(e,t){return!(null==e||!e.length)&&r(e,t,0)>-1}},function(e,t,n){var r=n(124),i=n(249),a=n(250);e.exports=function(e,t,n){return t==t?a(e,t,n):r(e,i,n)}},function(e,t){e.exports=function(e){return e!=e}},function(e,t){e.exports=function(e,t,n){for(var r=n-1,i=e.length;++r1)for(var n=1;n3&&void 0!==arguments[3]&&arguments[3];return function(){var o=i,s=r,c=a&&!n;clearTimeout(n),n=setTimeout((function(){n=null,a||e.apply(o,s)}),t),c&&e.apply(o,s)}}function c(){return window.isElectron}n.d(t,"e",(function(){return r})),n.d(t,"c",(function(){return i})),n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return s})),n.d(t,"d",(function(){return c})),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e,t){if(null==this)throw new TypeError('"this" is null or not defined');var n=Object(this),r=n.length>>>0;if(0===r)return!1;var i,a,o=0|t,s=Math.max(o>=0?o:r-Math.abs(o),0);for(;s0)throw"Already init-ed props.";this.props=Object.freeze(Object.assign({},this.props,e))}},{key:"addAppStateObserver",value:function(){var e=this;this.unsubState=this.application.getAppState().addObserver(function(){var t=o()(i.a.mark((function t(n,r){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.onAppStateEvent(n,r);case 1:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}())}},{key:"onAppStateEvent",value:function(e,t){}},{key:"addAppEventObserver",value:function(){var e=this;this.application.isStarted()&&this.onAppStart(),this.application.isLaunched()&&this.onAppLaunch(),this.unsubApp=this.application.addEventObserver(function(){var t=o()(i.a.mark((function t(n){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.onAppEvent(n),n!==h.ApplicationEvent.Started){t.next=6;break}return t.next=4,e.onAppStart();case 4:t.next=12;break;case 6:if(n!==h.ApplicationEvent.Launched){t.next=11;break}return t.next=9,e.onAppLaunch();case 9:t.next=12;break;case 11:n===h.ApplicationEvent.CompletedIncrementalSync?e.onAppIncrementalSync():n===h.ApplicationEvent.CompletedFullSync?e.onAppFullSync():n===h.ApplicationEvent.KeyStatusChanged&&e.onAppKeyChange();case 12:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())}},{key:"onAppEvent",value:function(e){}},{key:"onAppStart",value:(a=o()(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.resetState();case 2:case"end":return e.stop()}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"onAppLaunch",value:(r=o()(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}}),e)}))),function(){return r.apply(this,arguments)})},{key:"onAppKeyChange",value:(n=o()(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}}),e)}))),function(){return n.apply(this,arguments)})},{key:"onAppIncrementalSync",value:function(){}},{key:"onAppFullSync",value:function(){}},{key:"appState",get:function(){return this.application.getAppState()}}]),t}()}).call(this,n(21).setImmediate)},function(e,t,n){"use strict";var r=Object.prototype.hasOwnProperty;function i(e,t){return Array.isArray(e)?function(e,t){for(var n,r="",a="",o=Array.isArray(t),s=0;s]/;function c(e){var t=""+e,n=s.exec(t);if(!n)return e;var r,i,a,o="";for(r=n.index,i=0;r ":" ")+n+"| "+e})).join("\n");throw t.path=r,t.message=(r||"Pug")+":"+i+"\n"+o+"\n\n"+t.message,t}},function(e,t,n){var r=n(41),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();e.exports=a},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){var r=n(113),i=n(118);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t,n){var r=n(22),i=n(114),a=n(115),o=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):a(e)}},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function a(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new a(i.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new a(i.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(100),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(31))},function(e,t,n){var r=n(16).Symbol;e.exports=r},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var r=n(134),i=n(135),a=n(136),o=n(137),s=n(138);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t2&&void 0!==c[2]?c[2]:"OK",a=c.length>3?c[3]:void 0,e.abrupt("return",new Promise((function(e){var c,u=[{text:r,style:"neutral",action:(c=o()(i.a.mark((function t(){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:a&&s.deviceInterface.timeout(a),e(!0);case 2:case"end":return t.stop()}}),t)}))),function(){return c.apply(this,arguments)})}];new v.SKAlert({title:n,text:t,buttons:u}).present()})));case 3:case"end":return e.stop()}}),e)}))),function(e,t){return r.apply(this,arguments)})},{key:"confirm",value:(n=o()(i.a.mark((function e(t,n){var r,a,s,c,u,l=this,f=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=f.length>2&&void 0!==f[2]?f[2]:"Confirm",a=f.length>3&&void 0!==f[3]?f[3]:"Cancel",s=f.length>4?f[4]:void 0,c=f.length>5?f[5]:void 0,u=f.length>6&&void 0!==f[6]&&f[6],e.abrupt("return",new Promise((function(e,f){var A,h,p=[{text:a,style:"neutral",action:(h=o()(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:c&&l.deviceInterface.timeout(c),f(!1);case 2:case"end":return e.stop()}}),e)}))),function(){return h.apply(this,arguments)})},{text:r,style:u?"danger":"info",action:(A=o()(i.a.mark((function t(){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:s&&l.deviceInterface.timeout(s),e(!0);case 2:case"end":return t.stop()}}),t)}))),function(){return A.apply(this,arguments)})}];new v.SKAlert({title:n,text:t,buttons:p}).present()})));case 6:case"end":return e.stop()}}),e)}))),function(e,t){return n.apply(this,arguments)})}]),t}(y.SNAlertService)},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t){e.exports=function(e){return e}},function(e,t,n){var r=n(18)(n(16),"Map");e.exports=r},function(e,t,n){var r=n(144),i=n(151),a=n(153),o=n(154),s=n(155);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){var r=n(17),i=n(28),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||(o.test(e)||!a.test(e)||null!=t&&e in Object(t))}},function(e,t,n){var r;window,r=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";function r(e,t){for(var n=0;n\n
").concat(e.text,"
\n \n ")}(e,t)})).join("");return"\n
\n ".concat(e,"\n
\n ")}},{key:"templateString",value:function(){var e=this.buttonsString(),t=this.title?"
".concat(this.title,"
"):"",n=this.text?"

".concat(this.text,"

"):"";return'\n
\n
\n
\n
\n
\n
\n
\n '.concat(t,'\n\n
\n ').concat(n,"\n
\n\n
\n ").concat(e,"\n
\n
\n
\n
\n
\n
\n
\n ")}},{key:"dismiss",value:function(){this.onElement.removeChild(this.element),document.removeEventListener("keyup",this.keyupListener)}},{key:"primaryButton",value:function(){var e=this.buttons.find((function(e){return!0===e.primary}));return e||(e=this.buttons[this.buttons.length-1]),e}},{key:"present",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.onElement;n||(n=document.body),this.onElement=n,this.element=document.createElement("div"),this.element.className="sn-component",this.element.innerHTML=this.templateString().trim(),document.addEventListener("keyup",this.keyupListener),this.buttons.forEach((function(t,n){e.element.querySelector("#button-".concat(n)).onclick=function(){t.action&&t.action(),e.dismiss()}})),n.appendChild(this.element)}}])&&r(t.prototype,n),i&&r(t,i),e}();n.d(t,"SKAlert",(function(){return i}))}])},e.exports=r()},function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return d}));var r=n(0),i=n.n(r),a=n(3),o=n.n(a),s=n(6),c=n.n(s),u=n(7),l=n.n(u),f=n(1),A=n.n(f),h=n(11),p=n(12),d=function(){function t(n){var r=this;c()(this,t),A()(this,"application",void 0),A()(this,"unsubState",void 0),A()(this,"pollFocusInterval",void 0),A()(this,"lastFocusState",void 0),A()(this,"lockAfterDate",void 0),A()(this,"lockTimeout",void 0),this.application=n,e((function(){r.observeVisibility()}))}var n,r,a,s;return l()(t,[{key:"observeVisibility",value:function(){var e=this;this.unsubState=this.application.getAppState().addObserver(function(){var t=o()(i.a.mark((function t(n){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n===p.b.WindowDidBlur?e.documentVisibilityChanged(!1):n===p.b.WindowDidFocus&&e.documentVisibilityChanged(!0);case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()),Object(h.d)()||this.beginWebFocusPolling()}},{key:"deinit",value:function(){this.unsubState(),this.pollFocusInterval&&clearInterval(this.pollFocusInterval)}},{key:"setAutoLockInterval",value:(s=o()(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.application.setValue("AutoLockIntervalKey",t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return s.apply(this,arguments)})},{key:"getAutoLockInterval",value:(a=o()(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.application.getValue("AutoLockIntervalKey");case 2:if(!(t=e.sent)){e.next=7;break}return e.abrupt("return",t);case 7:return e.abrupt("return",0);case 8:case"end":return e.stop()}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"beginWebFocusPolling",value:function(){var e=this;this.pollFocusInterval=setInterval((function(){var t=document.hasFocus();t&&"hidden"===e.lastFocusState?e.documentVisibilityChanged(!0):t||"visible"!==e.lastFocusState||e.documentVisibilityChanged(!1),e.lastFocusState=t?"visible":"hidden"}),1e3)}},{key:"getAutoLockIntervalOptions",value:function(){return[{value:0,label:"Off"},{value:1,label:"Immediately"},{value:6e4,label:"1m"},{value:3e5,label:"5m"},{value:36e5,label:"1h"}]}},{key:"documentVisibilityChanged",value:(r=o()(i.a.mark((function e(t){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t){e.next=8;break}return e.next=3,this.application.isLocked();case 3:!e.sent&&this.lockAfterDate&&new Date>this.lockAfterDate&&this.application.lock(),this.cancelAutoLockTimer(),e.next=9;break;case 8:this.beginAutoLockTimer();case 9:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"beginAutoLockTimer",value:(n=o()(i.a.mark((function e(){var t,n,r=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getAutoLockInterval();case 2:if(0!==(t=e.sent)){e.next=5;break}return e.abrupt("return");case 5:n=function(e){var t=new Date;return t.setSeconds(t.getSeconds()+e),t},this.lockAfterDate=n(t/1e3),this.lockTimeout=setTimeout((function(){r.cancelAutoLockTimer(),r.application.lock(),r.lockAfterDate=void 0}),t);case 8:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"cancelAutoLockTimer",value:function(){clearTimeout(this.lockTimeout),this.lockAfterDate=void 0}}]),t}()}).call(this,n(21).setImmediate)},function(e,t,n){var r=n(19),i=n(23);e.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(this,n(31))},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++nl))return!1;var A=c.get(e);if(A&&c.get(t))return A==t;var h=-1,p=!0,d=2&n?new r:void 0;for(c.set(e,t),c.set(t,e);++h-1&&e%1==0&&e")(t);_.a.element(document.body).append(n)}},{key:"promptForChallenge",value:function(e,t){var n=this.scope.$new(!0);n.challenge=e,n.orchestrator=t,n.application=this;var r=this.$compile("")(n);_.a.element(document.body).append(r)}},{key:"performProtocolUpgrade",value:(a=o()(i.a.mark((function e(){var t;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.upgradeProtocolVersion();case 2:(t=e.sent)&&0!==t.length?this.alertService.alert("Unable to upgrade encryption version. Please try again."):this.alertService.alert("Success! Your encryption version has been upgraded. You'll be asked to enter your credentials again on other devices you're signed into.");case 4:case"end":return e.stop()}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"presentPrivilegesModal",value:(r=o()(i.a.mark((function e(t,n,r){var a,s,c,u,l=this;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.authenticationInProgress()){e.next=3;break}return r&&r(),e.abrupt("return");case 3:a=function(){var e=o()(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.t0=n,!e.t0){e.next=4;break}return e.next=4,n();case 4:l.currentAuthenticationElement=void 0;case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),s=function(){var e=o()(i.a.mark((function e(){return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.t0=r,!e.t0){e.next=4;break}return e.next=4,r();case 4:l.currentAuthenticationElement=void 0;case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),(c=this.scope.$new(!0)).action=t,c.onSuccess=a,c.onCancel=s,c.application=this,u=this.$compile("\n \n ")(c),_.a.element(document.body).append(u),this.currentAuthenticationElement=u;case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return r.apply(this,arguments)})},{key:"presentPrivilegesManagementModal",value:function(){var e=this.scope.$new(!0);e.application=this;var t=this.$compile("")(e);_.a.element(document.body).append(t)}},{key:"authenticationInProgress",value:function(){return null!=this.currentAuthenticationElement}},{key:"presentPasswordModal",value:function(e){var t=this.scope.$new(!0);t.type="password",t.title="Decryption Assistance",t.message="Unable to decrypt this item with your current keys.\n Please enter your account password at the time of this revision.",t.callback=e;var n=this.$compile("")(t);_.a.element(document.body).append(n)}},{key:"presentRevisionPreviewModal",value:function(e,t){var n=this.scope.$new(!0);n.uuid=e,n.content=t,n.application=this;var r=this.$compile("")(n);_.a.element(document.body).append(r)}}]),n}(E.SNApplication)}).call(this,n(21).setImmediate)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var r=n(0),i=n.n(r),a=n(3),o=n.n(a),s=n(6),c=n.n(s),u=n(7),l=n.n(u),f=n(1),A=n.n(f),h=n(2),p=[h.ComponentArea.Editor,h.ComponentArea.NoteTags,h.ComponentArea.TagsList],d=function(){function e(t){c()(this,e),A()(this,"application",void 0),A()(this,"changeObservers",[]),A()(this,"activeComponents",[]),this.application=t}var t,n,r;return l()(e,[{key:"deinit",value:function(){this.application=void 0}},{key:"activateComponent",value:(r=o()(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.activeComponents.includes(t.uuid)){e.next=2;break}return e.abrupt("return");case 2:if(!p.includes(t.area)){e.next=7;break}if(!(n=this.activeComponentForArea(t.area))){e.next=7;break}return e.next=7,this.deactivateComponent(n,!1);case 7:return Object(h.addIfUnique)(this.activeComponents,t.uuid),e.next=10,this.componentManager.activateComponent(t.uuid);case 10:this.notifyObservers();case 11:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"deactivateComponent",value:(n=o()(i.a.mark((function e(t){var n,r=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=!(r.length>1&&void 0!==r[1])||r[1],this.activeComponents.includes(t.uuid)){e.next=3;break}return e.abrupt("return");case 3:if(Object(h.removeFromArray)(this.activeComponents,t.uuid),!this.componentManager){e.next=8;break}return e.next=7,this.componentManager.deactivateComponent(t.uuid);case 7:n&&this.notifyObservers();case 8:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"deactivateComponentForArea",value:(t=o()(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(n=this.activeComponentForArea(t))){e.next=3;break}return e.abrupt("return",this.deactivateComponent(n));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"activeComponentForArea",value:function(e){return this.activeComponentsForArea(e)[0]}},{key:"activeComponentsForArea",value:function(e){return this.allActiveComponents().filter((function(t){return t.area===e}))}},{key:"allComponentsForArea",value:function(e){return this.componentManager.componentsForArea(e)}},{key:"allActiveComponents",value:function(){return this.application.getAll(this.activeComponents)}},{key:"addChangeObserver",value:function(e){var t=this;return this.changeObservers.push(e),e(),function(){Object(h.removeFromArray)(t.changeObservers,e)}}},{key:"notifyObservers",value:function(){var e=!0,t=!1,n=void 0;try{for(var r,i=this.changeObservers[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){(0,r.value)()}}catch(e){t=!0,n=e}finally{try{e||null==i.return||i.return()}finally{if(t)throw n}}}},{key:"componentManager",get:function(){var e;return null===(e=this.application)||void 0===e?void 0:e.componentManager}}]),e}()},function(module,exports,__webpack_require__){var e;window,e=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=167)}([function(e,t,n){e.exports=n(85)},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){var r=n(3),i=r.Buffer;function a(e,t){for(var n in e)t[n]=e[n]}function o(e,t,n){return i(e,t,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=r:(a(r,t),t.Buffer=o),a(i,o),o.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,n)},o.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=i(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},function(e,t,n){"use strict";(function(e){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var r=n(87),i=n(88),a=n(43);function o(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(o()=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|e}function p(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return N(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return U(e).length;default:if(r)return N(e).length;t=(""+t).toLowerCase(),r=!0}}function d(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return Q(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return _(this,t,n);case"latin1":case"binary":return S(this,t,n);case"base64":return E(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function y(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:v(e,t,n,r,i);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):v(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function v(e,t,n,r,i){var a,o=1,s=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;o=2,s/=2,c/=2,n/=2}function u(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var l=-1;for(a=n;as&&(n=s-c),a=n;a>=0;a--){for(var f=!0,A=0;Ai&&(r=i):r=i;var a=t.length;if(a%2!=0)throw new TypeError("Invalid hex string");r>a/2&&(r=a/2);for(var o=0;o>8,i=n%256,a.push(i),a.push(r);return a}(t,e.length-n),e,n,r)}function E(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(a=e[i+1]))&&(c=(31&u)<<6|63&a)>127&&(l=c);break;case 3:a=e[i+1],o=e[i+2],128==(192&a)&&128==(192&o)&&(c=(15&u)<<12|(63&a)<<6|63&o)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:a=e[i+1],o=e[i+2],s=e[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(c=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),i+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);for(var n="",r=0;rr)&&(n=r);for(var i="",a=t;an)throw new RangeError("Trying to access beyond buffer length")}function P(e,t,n,r,i,a){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function M(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-n,2);i>>8*(r?i:1-i)}function F(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-n,4);i>>8*(r?i:3-i)&255}function O(e,t,n,r,i,a){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function R(e,t,n,r,a){return a||O(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function T(e,t,n,r,a){return a||O(e,0,n,8),i.write(e,t,n,r,52,8),n+8}t.Buffer=c,t.SlowBuffer=function(e){return+e!=e&&(e=0),c.alloc(+e)},t.INSPECT_MAX_BYTES=50,c.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=o(),c.poolSize=8192,c._augment=function(e){return e.__proto__=c.prototype,e},c.from=function(e,t,n){return u(null,e,t,n)},c.TYPED_ARRAY_SUPPORT&&(c.prototype.__proto__=Uint8Array.prototype,c.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&c[Symbol.species]===c&&Object.defineProperty(c,Symbol.species,{value:null,configurable:!0})),c.alloc=function(e,t,n){return function(e,t,n,r){return l(t),t<=0?s(e,t):void 0!==n?"string"==typeof r?s(e,t).fill(n,r):s(e,t).fill(n):s(e,t)}(null,e,t,n)},c.allocUnsafe=function(e){return f(null,e)},c.allocUnsafeSlow=function(e){return f(null,e)},c.isBuffer=function(e){return!(null==e||!e._isBuffer)},c.compare=function(e,t){if(!c.isBuffer(e)||!c.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,i=0,a=Math.min(n,r);i0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},c.prototype.compare=function(e,t,n,r,i){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;for(var a=(i>>>=0)-(r>>>=0),o=(n>>>=0)-(t>>>=0),s=Math.min(a,o),u=this.slice(r,i),l=e.slice(t,n),f=0;fi)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var a=!1;;)switch(r){case"hex":return b(this,e,t,n);case"utf8":case"utf-8":return m(this,e,t,n);case"ascii":return I(this,e,t,n);case"latin1":case"binary":return w(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,e,t,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(i*=256);)r+=this[e+--t]*i;return r},c.prototype.readUInt8=function(e,t){return t||D(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||D(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||D(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||D(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||D(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||D(e,t,this.length);for(var r=this[e],i=1,a=0;++a=(i*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||D(e,t,this.length);for(var r=t,i=1,a=this[e+--r];r>0&&(i*=256);)a+=this[e+--r]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},c.prototype.readInt8=function(e,t){return t||D(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||D(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||D(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||D(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||D(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||D(e,4,this.length),i.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||D(e,4,this.length),i.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||D(e,8,this.length),i.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||D(e,8,this.length),i.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){e=+e,t|=0,n|=0,r||P(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,a=0;for(this[t]=255&e;++a=0&&(a*=256);)this[t+i]=e/a&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):M(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):M(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):F(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);P(this,e,t,n,i-1,-i)}var a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);P(this,e,t,n,i-1,-i)}var a=n-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):M(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):M(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):F(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||P(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return R(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return R(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return T(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return T(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--i)e[i+t]=this[i+n];else if(a<1e3||!c.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(a=t;a55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&a.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function U(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(j,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function L(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}}).call(this,n(8))},function(e,t,n){(function(e){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(e,r){"use strict";function i(e,t){if(!e)throw new Error(t||"Assertion failed")}function a(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}function o(e,t,n){if(o.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(n=t,t=10),this._init(e||0,t||10,n||"be"))}var s;"object"===t(e)?e.exports=o:r.BN=o,o.BN=o,o.wordSize=26;try{s=n(123).Buffer}catch(e){}function c(e,t,n){for(var r=0,i=Math.min(e.length,n),a=t;a=49&&o<=54?o-49+10:o>=17&&o<=22?o-17+10:15&o}return r}function u(e,t,n,r){for(var i=0,a=Math.min(e.length,n),o=t;o=49?s-49+10:s>=17?s-17+10:s}return i}o.isBN=function(e){return e instanceof o||null!==e&&"object"===t(e)&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function(e,t){return e.cmp(t)>0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,n,r){if("number"==typeof e)return this._initNumber(e,n,r);if("object"===t(e))return this._initArray(e,n,r);"hex"===n&&(n=16),i(n===(0|n)&&n>=2&&n<=36);var a=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&a++,16===n?this._parseHex(e,a):this._parseBase(e,n,a),"-"===e[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),n,r)},o.prototype._initNumber=function(e,t,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),t,n)},o.prototype._initArray=function(e,t,n){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var r=0;r=0;r-=3)o=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[a]|=o<>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);else if("le"===n)for(r=0,a=0;r>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);return this.strip()},o.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var n=0;n=t;n-=6)i=c(e,n,n+6),this.words[r]|=i<>>26-a&4194303,(a+=24)>=26&&(a-=26,r++);n+6!==t&&(i=c(e,t,n+6),this.words[r]|=i<>>26-a&4194303),this.strip()},o.prototype._parseBase=function(e,t,n){this.words=[0],this.length=1;for(var r=0,i=1;i<=67108863;i*=t)r++;r--,i=i/t|0;for(var a=e.length-n,o=a%r,s=Math.min(a,a-o)+n,c=0,l=n;l1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],A=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function h(e,t,n){n.negative=t.negative^e.negative;var r=e.length+t.length|0;n.length=r,r=r-1|0;var i=0|e.words[0],a=0|t.words[0],o=i*a,s=67108863&o,c=o/67108864|0;n.words[0]=s;for(var u=1;u>>26,f=67108863&c,A=Math.min(u,t.length-1),h=Math.max(0,u-e.length+1);h<=A;h++){var p=u-h|0;l+=(o=(i=0|e.words[p])*(a=0|t.words[h])+f)/67108864|0,f=67108863&o}n.words[u]=0|f,c=0|l}return 0!==c?n.words[u]=0|c:n.length--,n.strip()}o.prototype.toString=function(e,t){var n;if(t=0|t||1,16===(e=e||10)||"hex"===e){n="";for(var r=0,a=0,o=0;o>>24-r&16777215)||o!==this.length-1?l[6-c.length]+c+n:c+n,(r+=2)>=26&&(r-=26,o--)}for(0!==a&&(n=a.toString(16)+n);n.length%t!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var u=f[e],h=A[e];n="";var p=this.clone();for(p.negative=0;!p.isZero();){var d=p.modn(h).toString(e);n=(p=p.idivn(h)).isZero()?d+n:l[u-d.length]+d+n}for(this.isZero()&&(n="0"+n);n.length%t!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(e,t){return i(void 0!==s),this.toArrayLike(s,e,t)},o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},o.prototype.toArrayLike=function(e,t,n){var r=this.byteLength(),a=n||Math.max(1,r);i(r<=a,"byte array longer than desired length"),i(a>0,"Requested array length <= 0"),this.strip();var o,s,c="le"===t,u=new e(a),l=this.clone();if(c){for(s=0;!l.isZero();s++)o=l.andln(255),l.iushrn(8),u[s]=o;for(;s=4096&&(n+=13,t>>>=13),t>=64&&(n+=7,t>>>=7),t>=8&&(n+=4,t>>>=4),t>=2&&(n+=2,t>>>=2),n+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,n=0;return 0==(8191&t)&&(n+=13,t>>>=13),0==(127&t)&&(n+=7,t>>>=7),0==(15&t)&&(n+=4,t>>>=4),0==(3&t)&&(n+=2,t>>>=2),0==(1&t)&&n++,n},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var n=0;ne.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,n;this.length>e.length?(t=this,n=e):(t=e,n=this);for(var r=0;re.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),n=e%26;this._expand(t),n>0&&t--;for(var r=0;r0&&(this.words[r]=~this.words[r]&67108863>>26-n),this.strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var n=e/26|0,r=e%26;return this._expand(n+1),this.words[n]=t?this.words[n]|1<e.length?(n=this,r=e):(n=e,r=this);for(var i=0,a=0;a>>26;for(;0!==i&&a>>26;if(this.length=n.length,0!==i)this.words[this.length]=i,this.length++;else if(n!==this)for(;ae.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var n,r,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(n=this,r=e):(n=e,r=this);for(var a=0,o=0;o>26,this.words[o]=67108863&t;for(;0!==a&&o>26,this.words[o]=67108863&t;if(0===a&&o>>13,h=0|o[1],p=8191&h,d=h>>>13,g=0|o[2],y=8191&g,v=g>>>13,b=0|o[3],m=8191&b,I=b>>>13,w=0|o[4],C=8191&w,B=w>>>13,E=0|o[5],k=8191&E,_=E>>>13,S=0|o[6],Q=8191&S,x=S>>>13,D=0|o[7],P=8191&D,M=D>>>13,F=0|o[8],O=8191&F,R=F>>>13,T=0|o[9],j=8191&T,H=T>>>13,N=0|s[0],U=8191&N,L=N>>>13,K=0|s[1],G=8191&K,$=K>>>13,Y=0|s[2],J=8191&Y,V=Y>>>13,z=0|s[3],q=8191&z,W=z>>>13,X=0|s[4],Z=8191&X,ee=X>>>13,te=0|s[5],ne=8191&te,re=te>>>13,ie=0|s[6],ae=8191&ie,oe=ie>>>13,se=0|s[7],ce=8191&se,ue=se>>>13,le=0|s[8],fe=8191&le,Ae=le>>>13,he=0|s[9],pe=8191&he,de=he>>>13;n.negative=e.negative^t.negative,n.length=19;var ge=(u+(r=Math.imul(f,U))|0)+((8191&(i=(i=Math.imul(f,L))+Math.imul(A,U)|0))<<13)|0;u=((a=Math.imul(A,L))+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,r=Math.imul(p,U),i=(i=Math.imul(p,L))+Math.imul(d,U)|0,a=Math.imul(d,L);var ye=(u+(r=r+Math.imul(f,G)|0)|0)+((8191&(i=(i=i+Math.imul(f,$)|0)+Math.imul(A,G)|0))<<13)|0;u=((a=a+Math.imul(A,$)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,r=Math.imul(y,U),i=(i=Math.imul(y,L))+Math.imul(v,U)|0,a=Math.imul(v,L),r=r+Math.imul(p,G)|0,i=(i=i+Math.imul(p,$)|0)+Math.imul(d,G)|0,a=a+Math.imul(d,$)|0;var ve=(u+(r=r+Math.imul(f,J)|0)|0)+((8191&(i=(i=i+Math.imul(f,V)|0)+Math.imul(A,J)|0))<<13)|0;u=((a=a+Math.imul(A,V)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,r=Math.imul(m,U),i=(i=Math.imul(m,L))+Math.imul(I,U)|0,a=Math.imul(I,L),r=r+Math.imul(y,G)|0,i=(i=i+Math.imul(y,$)|0)+Math.imul(v,G)|0,a=a+Math.imul(v,$)|0,r=r+Math.imul(p,J)|0,i=(i=i+Math.imul(p,V)|0)+Math.imul(d,J)|0,a=a+Math.imul(d,V)|0;var be=(u+(r=r+Math.imul(f,q)|0)|0)+((8191&(i=(i=i+Math.imul(f,W)|0)+Math.imul(A,q)|0))<<13)|0;u=((a=a+Math.imul(A,W)|0)+(i>>>13)|0)+(be>>>26)|0,be&=67108863,r=Math.imul(C,U),i=(i=Math.imul(C,L))+Math.imul(B,U)|0,a=Math.imul(B,L),r=r+Math.imul(m,G)|0,i=(i=i+Math.imul(m,$)|0)+Math.imul(I,G)|0,a=a+Math.imul(I,$)|0,r=r+Math.imul(y,J)|0,i=(i=i+Math.imul(y,V)|0)+Math.imul(v,J)|0,a=a+Math.imul(v,V)|0,r=r+Math.imul(p,q)|0,i=(i=i+Math.imul(p,W)|0)+Math.imul(d,q)|0,a=a+Math.imul(d,W)|0;var me=(u+(r=r+Math.imul(f,Z)|0)|0)+((8191&(i=(i=i+Math.imul(f,ee)|0)+Math.imul(A,Z)|0))<<13)|0;u=((a=a+Math.imul(A,ee)|0)+(i>>>13)|0)+(me>>>26)|0,me&=67108863,r=Math.imul(k,U),i=(i=Math.imul(k,L))+Math.imul(_,U)|0,a=Math.imul(_,L),r=r+Math.imul(C,G)|0,i=(i=i+Math.imul(C,$)|0)+Math.imul(B,G)|0,a=a+Math.imul(B,$)|0,r=r+Math.imul(m,J)|0,i=(i=i+Math.imul(m,V)|0)+Math.imul(I,J)|0,a=a+Math.imul(I,V)|0,r=r+Math.imul(y,q)|0,i=(i=i+Math.imul(y,W)|0)+Math.imul(v,q)|0,a=a+Math.imul(v,W)|0,r=r+Math.imul(p,Z)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(d,Z)|0,a=a+Math.imul(d,ee)|0;var Ie=(u+(r=r+Math.imul(f,ne)|0)|0)+((8191&(i=(i=i+Math.imul(f,re)|0)+Math.imul(A,ne)|0))<<13)|0;u=((a=a+Math.imul(A,re)|0)+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,r=Math.imul(Q,U),i=(i=Math.imul(Q,L))+Math.imul(x,U)|0,a=Math.imul(x,L),r=r+Math.imul(k,G)|0,i=(i=i+Math.imul(k,$)|0)+Math.imul(_,G)|0,a=a+Math.imul(_,$)|0,r=r+Math.imul(C,J)|0,i=(i=i+Math.imul(C,V)|0)+Math.imul(B,J)|0,a=a+Math.imul(B,V)|0,r=r+Math.imul(m,q)|0,i=(i=i+Math.imul(m,W)|0)+Math.imul(I,q)|0,a=a+Math.imul(I,W)|0,r=r+Math.imul(y,Z)|0,i=(i=i+Math.imul(y,ee)|0)+Math.imul(v,Z)|0,a=a+Math.imul(v,ee)|0,r=r+Math.imul(p,ne)|0,i=(i=i+Math.imul(p,re)|0)+Math.imul(d,ne)|0,a=a+Math.imul(d,re)|0;var we=(u+(r=r+Math.imul(f,ae)|0)|0)+((8191&(i=(i=i+Math.imul(f,oe)|0)+Math.imul(A,ae)|0))<<13)|0;u=((a=a+Math.imul(A,oe)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,r=Math.imul(P,U),i=(i=Math.imul(P,L))+Math.imul(M,U)|0,a=Math.imul(M,L),r=r+Math.imul(Q,G)|0,i=(i=i+Math.imul(Q,$)|0)+Math.imul(x,G)|0,a=a+Math.imul(x,$)|0,r=r+Math.imul(k,J)|0,i=(i=i+Math.imul(k,V)|0)+Math.imul(_,J)|0,a=a+Math.imul(_,V)|0,r=r+Math.imul(C,q)|0,i=(i=i+Math.imul(C,W)|0)+Math.imul(B,q)|0,a=a+Math.imul(B,W)|0,r=r+Math.imul(m,Z)|0,i=(i=i+Math.imul(m,ee)|0)+Math.imul(I,Z)|0,a=a+Math.imul(I,ee)|0,r=r+Math.imul(y,ne)|0,i=(i=i+Math.imul(y,re)|0)+Math.imul(v,ne)|0,a=a+Math.imul(v,re)|0,r=r+Math.imul(p,ae)|0,i=(i=i+Math.imul(p,oe)|0)+Math.imul(d,ae)|0,a=a+Math.imul(d,oe)|0;var Ce=(u+(r=r+Math.imul(f,ce)|0)|0)+((8191&(i=(i=i+Math.imul(f,ue)|0)+Math.imul(A,ce)|0))<<13)|0;u=((a=a+Math.imul(A,ue)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,r=Math.imul(O,U),i=(i=Math.imul(O,L))+Math.imul(R,U)|0,a=Math.imul(R,L),r=r+Math.imul(P,G)|0,i=(i=i+Math.imul(P,$)|0)+Math.imul(M,G)|0,a=a+Math.imul(M,$)|0,r=r+Math.imul(Q,J)|0,i=(i=i+Math.imul(Q,V)|0)+Math.imul(x,J)|0,a=a+Math.imul(x,V)|0,r=r+Math.imul(k,q)|0,i=(i=i+Math.imul(k,W)|0)+Math.imul(_,q)|0,a=a+Math.imul(_,W)|0,r=r+Math.imul(C,Z)|0,i=(i=i+Math.imul(C,ee)|0)+Math.imul(B,Z)|0,a=a+Math.imul(B,ee)|0,r=r+Math.imul(m,ne)|0,i=(i=i+Math.imul(m,re)|0)+Math.imul(I,ne)|0,a=a+Math.imul(I,re)|0,r=r+Math.imul(y,ae)|0,i=(i=i+Math.imul(y,oe)|0)+Math.imul(v,ae)|0,a=a+Math.imul(v,oe)|0,r=r+Math.imul(p,ce)|0,i=(i=i+Math.imul(p,ue)|0)+Math.imul(d,ce)|0,a=a+Math.imul(d,ue)|0;var Be=(u+(r=r+Math.imul(f,fe)|0)|0)+((8191&(i=(i=i+Math.imul(f,Ae)|0)+Math.imul(A,fe)|0))<<13)|0;u=((a=a+Math.imul(A,Ae)|0)+(i>>>13)|0)+(Be>>>26)|0,Be&=67108863,r=Math.imul(j,U),i=(i=Math.imul(j,L))+Math.imul(H,U)|0,a=Math.imul(H,L),r=r+Math.imul(O,G)|0,i=(i=i+Math.imul(O,$)|0)+Math.imul(R,G)|0,a=a+Math.imul(R,$)|0,r=r+Math.imul(P,J)|0,i=(i=i+Math.imul(P,V)|0)+Math.imul(M,J)|0,a=a+Math.imul(M,V)|0,r=r+Math.imul(Q,q)|0,i=(i=i+Math.imul(Q,W)|0)+Math.imul(x,q)|0,a=a+Math.imul(x,W)|0,r=r+Math.imul(k,Z)|0,i=(i=i+Math.imul(k,ee)|0)+Math.imul(_,Z)|0,a=a+Math.imul(_,ee)|0,r=r+Math.imul(C,ne)|0,i=(i=i+Math.imul(C,re)|0)+Math.imul(B,ne)|0,a=a+Math.imul(B,re)|0,r=r+Math.imul(m,ae)|0,i=(i=i+Math.imul(m,oe)|0)+Math.imul(I,ae)|0,a=a+Math.imul(I,oe)|0,r=r+Math.imul(y,ce)|0,i=(i=i+Math.imul(y,ue)|0)+Math.imul(v,ce)|0,a=a+Math.imul(v,ue)|0,r=r+Math.imul(p,fe)|0,i=(i=i+Math.imul(p,Ae)|0)+Math.imul(d,fe)|0,a=a+Math.imul(d,Ae)|0;var Ee=(u+(r=r+Math.imul(f,pe)|0)|0)+((8191&(i=(i=i+Math.imul(f,de)|0)+Math.imul(A,pe)|0))<<13)|0;u=((a=a+Math.imul(A,de)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,r=Math.imul(j,G),i=(i=Math.imul(j,$))+Math.imul(H,G)|0,a=Math.imul(H,$),r=r+Math.imul(O,J)|0,i=(i=i+Math.imul(O,V)|0)+Math.imul(R,J)|0,a=a+Math.imul(R,V)|0,r=r+Math.imul(P,q)|0,i=(i=i+Math.imul(P,W)|0)+Math.imul(M,q)|0,a=a+Math.imul(M,W)|0,r=r+Math.imul(Q,Z)|0,i=(i=i+Math.imul(Q,ee)|0)+Math.imul(x,Z)|0,a=a+Math.imul(x,ee)|0,r=r+Math.imul(k,ne)|0,i=(i=i+Math.imul(k,re)|0)+Math.imul(_,ne)|0,a=a+Math.imul(_,re)|0,r=r+Math.imul(C,ae)|0,i=(i=i+Math.imul(C,oe)|0)+Math.imul(B,ae)|0,a=a+Math.imul(B,oe)|0,r=r+Math.imul(m,ce)|0,i=(i=i+Math.imul(m,ue)|0)+Math.imul(I,ce)|0,a=a+Math.imul(I,ue)|0,r=r+Math.imul(y,fe)|0,i=(i=i+Math.imul(y,Ae)|0)+Math.imul(v,fe)|0,a=a+Math.imul(v,Ae)|0;var ke=(u+(r=r+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,de)|0)+Math.imul(d,pe)|0))<<13)|0;u=((a=a+Math.imul(d,de)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,r=Math.imul(j,J),i=(i=Math.imul(j,V))+Math.imul(H,J)|0,a=Math.imul(H,V),r=r+Math.imul(O,q)|0,i=(i=i+Math.imul(O,W)|0)+Math.imul(R,q)|0,a=a+Math.imul(R,W)|0,r=r+Math.imul(P,Z)|0,i=(i=i+Math.imul(P,ee)|0)+Math.imul(M,Z)|0,a=a+Math.imul(M,ee)|0,r=r+Math.imul(Q,ne)|0,i=(i=i+Math.imul(Q,re)|0)+Math.imul(x,ne)|0,a=a+Math.imul(x,re)|0,r=r+Math.imul(k,ae)|0,i=(i=i+Math.imul(k,oe)|0)+Math.imul(_,ae)|0,a=a+Math.imul(_,oe)|0,r=r+Math.imul(C,ce)|0,i=(i=i+Math.imul(C,ue)|0)+Math.imul(B,ce)|0,a=a+Math.imul(B,ue)|0,r=r+Math.imul(m,fe)|0,i=(i=i+Math.imul(m,Ae)|0)+Math.imul(I,fe)|0,a=a+Math.imul(I,Ae)|0;var _e=(u+(r=r+Math.imul(y,pe)|0)|0)+((8191&(i=(i=i+Math.imul(y,de)|0)+Math.imul(v,pe)|0))<<13)|0;u=((a=a+Math.imul(v,de)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,r=Math.imul(j,q),i=(i=Math.imul(j,W))+Math.imul(H,q)|0,a=Math.imul(H,W),r=r+Math.imul(O,Z)|0,i=(i=i+Math.imul(O,ee)|0)+Math.imul(R,Z)|0,a=a+Math.imul(R,ee)|0,r=r+Math.imul(P,ne)|0,i=(i=i+Math.imul(P,re)|0)+Math.imul(M,ne)|0,a=a+Math.imul(M,re)|0,r=r+Math.imul(Q,ae)|0,i=(i=i+Math.imul(Q,oe)|0)+Math.imul(x,ae)|0,a=a+Math.imul(x,oe)|0,r=r+Math.imul(k,ce)|0,i=(i=i+Math.imul(k,ue)|0)+Math.imul(_,ce)|0,a=a+Math.imul(_,ue)|0,r=r+Math.imul(C,fe)|0,i=(i=i+Math.imul(C,Ae)|0)+Math.imul(B,fe)|0,a=a+Math.imul(B,Ae)|0;var Se=(u+(r=r+Math.imul(m,pe)|0)|0)+((8191&(i=(i=i+Math.imul(m,de)|0)+Math.imul(I,pe)|0))<<13)|0;u=((a=a+Math.imul(I,de)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,r=Math.imul(j,Z),i=(i=Math.imul(j,ee))+Math.imul(H,Z)|0,a=Math.imul(H,ee),r=r+Math.imul(O,ne)|0,i=(i=i+Math.imul(O,re)|0)+Math.imul(R,ne)|0,a=a+Math.imul(R,re)|0,r=r+Math.imul(P,ae)|0,i=(i=i+Math.imul(P,oe)|0)+Math.imul(M,ae)|0,a=a+Math.imul(M,oe)|0,r=r+Math.imul(Q,ce)|0,i=(i=i+Math.imul(Q,ue)|0)+Math.imul(x,ce)|0,a=a+Math.imul(x,ue)|0,r=r+Math.imul(k,fe)|0,i=(i=i+Math.imul(k,Ae)|0)+Math.imul(_,fe)|0,a=a+Math.imul(_,Ae)|0;var Qe=(u+(r=r+Math.imul(C,pe)|0)|0)+((8191&(i=(i=i+Math.imul(C,de)|0)+Math.imul(B,pe)|0))<<13)|0;u=((a=a+Math.imul(B,de)|0)+(i>>>13)|0)+(Qe>>>26)|0,Qe&=67108863,r=Math.imul(j,ne),i=(i=Math.imul(j,re))+Math.imul(H,ne)|0,a=Math.imul(H,re),r=r+Math.imul(O,ae)|0,i=(i=i+Math.imul(O,oe)|0)+Math.imul(R,ae)|0,a=a+Math.imul(R,oe)|0,r=r+Math.imul(P,ce)|0,i=(i=i+Math.imul(P,ue)|0)+Math.imul(M,ce)|0,a=a+Math.imul(M,ue)|0,r=r+Math.imul(Q,fe)|0,i=(i=i+Math.imul(Q,Ae)|0)+Math.imul(x,fe)|0,a=a+Math.imul(x,Ae)|0;var xe=(u+(r=r+Math.imul(k,pe)|0)|0)+((8191&(i=(i=i+Math.imul(k,de)|0)+Math.imul(_,pe)|0))<<13)|0;u=((a=a+Math.imul(_,de)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,r=Math.imul(j,ae),i=(i=Math.imul(j,oe))+Math.imul(H,ae)|0,a=Math.imul(H,oe),r=r+Math.imul(O,ce)|0,i=(i=i+Math.imul(O,ue)|0)+Math.imul(R,ce)|0,a=a+Math.imul(R,ue)|0,r=r+Math.imul(P,fe)|0,i=(i=i+Math.imul(P,Ae)|0)+Math.imul(M,fe)|0,a=a+Math.imul(M,Ae)|0;var De=(u+(r=r+Math.imul(Q,pe)|0)|0)+((8191&(i=(i=i+Math.imul(Q,de)|0)+Math.imul(x,pe)|0))<<13)|0;u=((a=a+Math.imul(x,de)|0)+(i>>>13)|0)+(De>>>26)|0,De&=67108863,r=Math.imul(j,ce),i=(i=Math.imul(j,ue))+Math.imul(H,ce)|0,a=Math.imul(H,ue),r=r+Math.imul(O,fe)|0,i=(i=i+Math.imul(O,Ae)|0)+Math.imul(R,fe)|0,a=a+Math.imul(R,Ae)|0;var Pe=(u+(r=r+Math.imul(P,pe)|0)|0)+((8191&(i=(i=i+Math.imul(P,de)|0)+Math.imul(M,pe)|0))<<13)|0;u=((a=a+Math.imul(M,de)|0)+(i>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,r=Math.imul(j,fe),i=(i=Math.imul(j,Ae))+Math.imul(H,fe)|0,a=Math.imul(H,Ae);var Me=(u+(r=r+Math.imul(O,pe)|0)|0)+((8191&(i=(i=i+Math.imul(O,de)|0)+Math.imul(R,pe)|0))<<13)|0;u=((a=a+Math.imul(R,de)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863;var Fe=(u+(r=Math.imul(j,pe))|0)+((8191&(i=(i=Math.imul(j,de))+Math.imul(H,pe)|0))<<13)|0;return u=((a=Math.imul(H,de))+(i>>>13)|0)+(Fe>>>26)|0,Fe&=67108863,c[0]=ge,c[1]=ye,c[2]=ve,c[3]=be,c[4]=me,c[5]=Ie,c[6]=we,c[7]=Ce,c[8]=Be,c[9]=Ee,c[10]=ke,c[11]=_e,c[12]=Se,c[13]=Qe,c[14]=xe,c[15]=De,c[16]=Pe,c[17]=Me,c[18]=Fe,0!==u&&(c[19]=u,n.length++),n};function d(e,t,n){return(new g).mulp(e,t,n)}function g(e,t){this.x=e,this.y=t}Math.imul||(p=h),o.prototype.mulTo=function(e,t){var n=this.length+e.length;return 10===this.length&&10===e.length?p(this,e,t):n<63?h(this,e,t):n<1024?function(e,t,n){n.negative=t.negative^e.negative,n.length=e.length+t.length;for(var r=0,i=0,a=0;a>>26)|0)>>>26,o&=67108863}n.words[a]=s,r=o,o=i}return 0!==r?n.words[a]=r:n.length--,n.strip()}(this,e,t):d(this,e,t)},g.prototype.makeRBT=function(e){for(var t=new Array(e),n=o.prototype._countBits(e)-1,r=0;r>=1;return r},g.prototype.permute=function(e,t,n,r,i,a){for(var o=0;o>>=1)i++;return 1<>>=13,n[2*o+1]=8191&a,a>>>=13;for(o=2*t;o>=26,t+=r/67108864|0,t+=a>>>26,this.words[n]=67108863&a}return 0!==t&&(this.words[n]=t,this.length++),this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),n=0;n>>i}return t}(e);if(0===t.length)return new o(1);for(var n=this,r=0;r=0);var t,n=e%26,r=(e-n)/26,a=67108863>>>26-n<<26-n;if(0!==n){var o=0;for(t=0;t>>26-n}o&&(this.words[t]=o,this.length++)}if(0!==r){for(t=this.length-1;t>=0;t--)this.words[t+r]=this.words[t];for(t=0;t=0),r=t?(t-t%26)/26:0;var a=e%26,o=Math.min((e-a)/26,this.length),s=67108863^67108863>>>a<o)for(this.length-=o,u=0;u=0&&(0!==l||u>=r);u--){var f=0|this.words[u];this.words[u]=l<<26-a|f>>>a,l=f&s}return c&&0!==l&&(c.words[c.length++]=l),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(e,t,n){return i(0===this.negative),this.iushrn(e,t,n)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,r=1<=0);var t=e%26,n=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var r=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(c/67108864|0),this.words[r+n]=67108863&a}for(;r>26,this.words[r+n]=67108863&a;if(0===s)return this.strip();for(i(-1===s),s=0,r=0;r>26,this.words[r]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(e,t){var n=(this.length,e.length),r=this.clone(),i=e,a=0|i.words[i.length-1];0!=(n=26-this._countBits(a))&&(i=i.ushln(n),r.iushln(n),a=0|i.words[i.length-1]);var s,c=r.length-i.length;if("mod"!==t){(s=new o(null)).length=c+1,s.words=new Array(s.length);for(var u=0;u=0;f--){var A=67108864*(0|r.words[i.length+f])+(0|r.words[i.length+f-1]);for(A=Math.min(A/a|0,67108863),r._ishlnsubmul(i,A,f);0!==r.negative;)A--,r.negative=0,r._ishlnsubmul(i,1,f),r.isZero()||(r.negative^=1);s&&(s.words[f]=A)}return s&&s.strip(),r.strip(),"div"!==t&&0!==n&&r.iushrn(n),{div:s||null,mod:r}},o.prototype.divmod=function(e,t,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),"mod"!==t&&(r=s.div.neg()),"div"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:r,mod:a}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),"mod"!==t&&(r=s.div.neg()),{div:r,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),"div"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:s.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,t);var r,a,s},o.prototype.div=function(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var n=0!==t.div.negative?t.mod.isub(e):t.mod,r=e.ushrn(1),i=e.andln(1),a=n.cmp(r);return a<0||1===i&&0===a?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,n=0,r=this.length-1;r>=0;r--)n=(t*n+(0|this.words[r]))%e;return n},o.prototype.idivn=function(e){i(e<=67108863);for(var t=0,n=this.length-1;n>=0;n--){var r=(0|this.words[n])+67108864*t;this.words[n]=r/e|0,t=r%e}return this.strip()},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r=new o(1),a=new o(0),s=new o(0),c=new o(1),u=0;t.isEven()&&n.isEven();)t.iushrn(1),n.iushrn(1),++u;for(var l=n.clone(),f=t.clone();!t.isZero();){for(var A=0,h=1;0==(t.words[0]&h)&&A<26;++A,h<<=1);if(A>0)for(t.iushrn(A);A-- >0;)(r.isOdd()||a.isOdd())&&(r.iadd(l),a.isub(f)),r.iushrn(1),a.iushrn(1);for(var p=0,d=1;0==(n.words[0]&d)&&p<26;++p,d<<=1);if(p>0)for(n.iushrn(p);p-- >0;)(s.isOdd()||c.isOdd())&&(s.iadd(l),c.isub(f)),s.iushrn(1),c.iushrn(1);t.cmp(n)>=0?(t.isub(n),r.isub(s),a.isub(c)):(n.isub(t),s.isub(r),c.isub(a))}return{a:s,b:c,gcd:n.iushln(u)}},o.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r,a=new o(1),s=new o(0),c=n.clone();t.cmpn(1)>0&&n.cmpn(1)>0;){for(var u=0,l=1;0==(t.words[0]&l)&&u<26;++u,l<<=1);if(u>0)for(t.iushrn(u);u-- >0;)a.isOdd()&&a.iadd(c),a.iushrn(1);for(var f=0,A=1;0==(n.words[0]&A)&&f<26;++f,A<<=1);if(f>0)for(n.iushrn(f);f-- >0;)s.isOdd()&&s.iadd(c),s.iushrn(1);t.cmp(n)>=0?(t.isub(n),a.isub(s)):(n.isub(t),s.isub(a))}return(r=0===t.cmpn(1)?a:s).cmpn(0)<0&&r.iadd(e),r},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),n=e.clone();t.negative=0,n.negative=0;for(var r=0;t.isEven()&&n.isEven();r++)t.iushrn(1),n.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;n.isEven();)n.iushrn(1);var i=t.cmp(n);if(i<0){var a=t;t=n,n=a}else if(0===i||0===n.cmpn(1))break;t.isub(n)}return n.iushln(r)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return 0==(1&this.words[0])},o.prototype.isOdd=function(){return 1==(1&this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,n=(e-t)/26,r=1<>>26,s&=67108863,this.words[o]=s}return 0!==a&&(this.words[o]=a,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)t=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var r=0|this.words[0];t=r===e?0:re.length)return 1;if(this.length=0;n--){var r=0|this.words[n],i=0|e.words[n];if(r!==i){ri&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new C(e)},o.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function v(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function b(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function m(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function I(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function w(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function C(e){if("string"==typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function B(e){C.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function(e){var t,n=e;do{this.split(n,this.tmp),t=(n=(n=this.imulK(n)).iadd(this.tmp)).bitLength()}while(t>this.n);var r=t0?n.isub(this.p):n.strip(),n},v.prototype.split=function(e,t){e.iushrn(this.n,0,t)},v.prototype.imulK=function(e){return e.imul(this.k)},a(b,v),b.prototype.split=function(e,t){for(var n=Math.min(e.length,9),r=0;r>>22,i=a}i>>>=22,e.words[r-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},b.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,n=0;n>>=26,e.words[n]=i,t=r}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function(e){if(y[e])return y[e];var t;if("k256"===e)t=new b;else if("p224"===e)t=new m;else if("p192"===e)t=new I;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new w}return y[e]=t,t},C.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},C.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},C.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},C.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},C.prototype.add=function(e,t){this._verify2(e,t);var n=e.add(t);return n.cmp(this.m)>=0&&n.isub(this.m),n._forceRed(this)},C.prototype.iadd=function(e,t){this._verify2(e,t);var n=e.iadd(t);return n.cmp(this.m)>=0&&n.isub(this.m),n},C.prototype.sub=function(e,t){this._verify2(e,t);var n=e.sub(t);return n.cmpn(0)<0&&n.iadd(this.m),n._forceRed(this)},C.prototype.isub=function(e,t){this._verify2(e,t);var n=e.isub(t);return n.cmpn(0)<0&&n.iadd(this.m),n},C.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},C.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},C.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},C.prototype.isqr=function(e){return this.imul(e,e.clone())},C.prototype.sqr=function(e){return this.mul(e,e)},C.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}for(var r=this.m.subn(1),a=0;!r.isZero()&&0===r.andln(1);)a++,r.iushrn(1);i(!r.isZero());var s=new o(1).toRed(this),c=s.redNeg(),u=this.m.subn(1).iushrn(1),l=this.m.bitLength();for(l=new o(2*l*l).toRed(this);0!==this.pow(l,u).cmp(c);)l.redIAdd(c);for(var f=this.pow(l,r),A=this.pow(e,r.addn(1).iushrn(1)),h=this.pow(e,r),p=a;0!==h.cmp(s);){for(var d=h,g=0;0!==d.cmp(s);g++)d=d.redSqr();i(g=0;r--){for(var u=t.words[r],l=c-1;l>=0;l--){var f=u>>l&1;i!==n[0]&&(i=this.sqr(i)),0!==f||0!==a?(a<<=1,a|=f,(4==++s||0===r&&0===l)&&(i=this.mul(i,n[a]),s=0,a=0)):s=0}c=26}return i},C.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},C.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new B(e)},a(B,C),B.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},B.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},B.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var n=e.imul(t),r=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=n.isub(r).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},B.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var n=e.mul(t),r=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=n.isub(r).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},B.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,this)}).call(this,n(42)(e))},function(e,t,n){var r,i,a,o,s;function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}s="object"==c((o=this).sodium)&&"function"==typeof o.sodium.onload?o.sodium.onload:null,i=[t,n(86)],void 0!==(a="function"==typeof(r=function(e,t){"use strict";var n,r=t.ready.then((function(){function r(){if(0!==n._sodium_init())throw new Error("libsodium was not correctly initialized.");for(var t=["crypto_aead_chacha20poly1305_decrypt","crypto_aead_chacha20poly1305_decrypt_detached","crypto_aead_chacha20poly1305_encrypt","crypto_aead_chacha20poly1305_encrypt_detached","crypto_aead_chacha20poly1305_ietf_decrypt","crypto_aead_chacha20poly1305_ietf_decrypt_detached","crypto_aead_chacha20poly1305_ietf_encrypt","crypto_aead_chacha20poly1305_ietf_encrypt_detached","crypto_aead_chacha20poly1305_ietf_keygen","crypto_aead_chacha20poly1305_keygen","crypto_aead_xchacha20poly1305_ietf_decrypt","crypto_aead_xchacha20poly1305_ietf_decrypt_detached","crypto_aead_xchacha20poly1305_ietf_encrypt","crypto_aead_xchacha20poly1305_ietf_encrypt_detached","crypto_aead_xchacha20poly1305_ietf_keygen","crypto_auth","crypto_auth_hmacsha256","crypto_auth_hmacsha256_keygen","crypto_auth_hmacsha256_verify","crypto_auth_hmacsha512","crypto_auth_hmacsha512_keygen","crypto_auth_hmacsha512_verify","crypto_auth_keygen","crypto_auth_verify","crypto_box_beforenm","crypto_box_curve25519xchacha20poly1305_keypair","crypto_box_curve25519xchacha20poly1305_seal","crypto_box_curve25519xchacha20poly1305_seal_open","crypto_box_detached","crypto_box_easy","crypto_box_easy_afternm","crypto_box_keypair","crypto_box_open_detached","crypto_box_open_easy","crypto_box_open_easy_afternm","crypto_box_seal","crypto_box_seal_open","crypto_box_seed_keypair","crypto_core_ristretto255_add","crypto_core_ristretto255_from_hash","crypto_core_ristretto255_is_valid_point","crypto_core_ristretto255_random","crypto_core_ristretto255_scalar_add","crypto_core_ristretto255_scalar_complement","crypto_core_ristretto255_scalar_invert","crypto_core_ristretto255_scalar_mul","crypto_core_ristretto255_scalar_negate","crypto_core_ristretto255_scalar_random","crypto_core_ristretto255_scalar_reduce","crypto_core_ristretto255_scalar_sub","crypto_core_ristretto255_sub","crypto_generichash","crypto_generichash_blake2b_salt_personal","crypto_generichash_final","crypto_generichash_init","crypto_generichash_keygen","crypto_generichash_update","crypto_hash","crypto_hash_sha256","crypto_hash_sha512","crypto_kdf_derive_from_key","crypto_kdf_keygen","crypto_kx_client_session_keys","crypto_kx_keypair","crypto_kx_seed_keypair","crypto_kx_server_session_keys","crypto_onetimeauth","crypto_onetimeauth_final","crypto_onetimeauth_init","crypto_onetimeauth_keygen","crypto_onetimeauth_update","crypto_onetimeauth_verify","crypto_pwhash","crypto_pwhash_scryptsalsa208sha256","crypto_pwhash_scryptsalsa208sha256_ll","crypto_pwhash_scryptsalsa208sha256_str","crypto_pwhash_scryptsalsa208sha256_str_verify","crypto_pwhash_str","crypto_pwhash_str_verify","crypto_scalarmult","crypto_scalarmult_base","crypto_scalarmult_ristretto255","crypto_scalarmult_ristretto255_base","crypto_secretbox_detached","crypto_secretbox_easy","crypto_secretbox_keygen","crypto_secretbox_open_detached","crypto_secretbox_open_easy","crypto_secretstream_xchacha20poly1305_init_pull","crypto_secretstream_xchacha20poly1305_init_push","crypto_secretstream_xchacha20poly1305_keygen","crypto_secretstream_xchacha20poly1305_pull","crypto_secretstream_xchacha20poly1305_push","crypto_secretstream_xchacha20poly1305_rekey","crypto_shorthash","crypto_shorthash_keygen","crypto_shorthash_siphashx24","crypto_sign","crypto_sign_detached","crypto_sign_ed25519_pk_to_curve25519","crypto_sign_ed25519_sk_to_curve25519","crypto_sign_ed25519_sk_to_pk","crypto_sign_ed25519_sk_to_seed","crypto_sign_final_create","crypto_sign_final_verify","crypto_sign_init","crypto_sign_keypair","crypto_sign_open","crypto_sign_seed_keypair","crypto_sign_update","crypto_sign_verify_detached","crypto_stream_chacha20","crypto_stream_chacha20_ietf_xor","crypto_stream_chacha20_ietf_xor_ic","crypto_stream_chacha20_keygen","crypto_stream_chacha20_xor","crypto_stream_chacha20_xor_ic","crypto_stream_keygen","crypto_stream_xchacha20_keygen","crypto_stream_xchacha20_xor","crypto_stream_xchacha20_xor_ic","randombytes_buf","randombytes_buf_deterministic","randombytes_close","randombytes_random","randombytes_set_implementation","randombytes_stir","randombytes_uniform","sodium_version_string"],r=[w,C,B,E,k,_,S,Q,x,D,P,M,F,O,R,T,j,H,N,U,L,K,G,$,Y,J,V,z,q,W,X,Z,ee,te,ne,re,ie,ae,oe,se,ce,ue,le,fe,Ae,he,pe,de,ge,ye,ve,be,me,Ie,we,Ce,Be,Ee,ke,_e,Se,Qe,xe,De,Pe,Me,Fe,Oe,Re,Te,je,He,Ne,Ue,Le,Ke,Ge,$e,Ye,Je,Ve,ze,qe,We,Xe,Ze,et,tt,nt,rt,it,at,ot,st,ct,ut,lt,ft,At,ht,pt,dt,gt,yt,vt,bt,mt,It,wt,Ct,Bt,Et,kt,_t,St,Qt,xt,Dt,Pt,Mt,Ft,Ot,Rt,Tt,jt,Ht,Nt,Ut,Lt],i=0;i=240?(u=4,s=!0):l>=224?(u=3,s=!0):l>=192?(u=2,s=!0):l<128&&(u=1,s=!0)}while(!s);for(var f=u-(o.length-c),A=0;A>8&-39)<<8|87+(t=e[a]>>>4)+(t-10>>8&-39),i+=String.fromCharCode(255&r)+String.fromCharCode(r>>>8);return i}var s={ORIGINAL:1,ORIGINAL_NO_PADDING:3,URLSAFE:5,URLSAFE_NO_PADDING:7};function u(e){if(null==e)return s.URLSAFE_NO_PADDING;if(e!==s.ORIGINAL&&e!==s.ORIGINAL_NO_PADDING&&e!==s.URLSAFE&&e!=s.URLSAFE_NO_PADDING)throw new Error("unsupported base64 variant");return e}function l(e,t){t=u(t),e=I(i,e,"input");var r,i=[],o=0|Math.floor(e.length/3),s=e.length-3*o,c=4*o+(0!==s?0==(2&t)?4:2+(s>>>1):0),l=new p(c+1),f=d(e);return i.push(f),i.push(l.address),0===n._sodium_bin2base64(l.address,l.length,f,e.length,t)&&v(i,"conversion failed"),l.length=c,r=a(l.to_Uint8Array()),y(i),r}function f(e,t){var n=t||"uint8array";if(!A(n))throw new Error(n+" output format is not available");if(e instanceof p){if("uint8array"===n)return e.to_Uint8Array();if("text"===n)return a(e.to_Uint8Array());if("hex"===n)return o(e.to_Uint8Array());if("base64"===n)return l(e.to_Uint8Array(),s.URLSAFE_NO_PADDING);throw new Error('What is output format "'+n+'"?')}if("object"==c(e)){for(var r=Object.keys(e),i={},u=0;u>>24>>>8,c,u);var v=f(A,o);return y(s),v}function Qe(e){var t=[];h(e);var r=new p(0|n._crypto_kdf_keybytes()),i=r.address;t.push(i),n._crypto_kdf_keygen(i);var a=f(r,e);return y(t),a}function xe(e,t,r,i){var a=[];h(i),e=I(a,e,"clientPublicKey");var o,s=0|n._crypto_kx_publickeybytes();e.length!==s&&b(a,"invalid clientPublicKey length"),o=d(e),a.push(o),t=I(a,t,"clientSecretKey");var c,u=0|n._crypto_kx_secretkeybytes();t.length!==u&&b(a,"invalid clientSecretKey length"),c=d(t),a.push(c),r=I(a,r,"serverPublicKey");var l,A=0|n._crypto_kx_publickeybytes();r.length!==A&&b(a,"invalid serverPublicKey length"),l=d(r),a.push(l);var g=new p(0|n._crypto_kx_sessionkeybytes()),m=g.address;a.push(m);var w=new p(0|n._crypto_kx_sessionkeybytes()),C=w.address;if(a.push(C),0==(0|n._crypto_kx_client_session_keys(m,C,o,c,l))){var B=f({sharedRx:g,sharedTx:w},i);return y(a),B}v(a,"invalid usage")}function De(e){var t=[];h(e);var r=new p(0|n._crypto_kx_publickeybytes()),i=r.address;t.push(i);var a=new p(0|n._crypto_kx_secretkeybytes()),o=a.address;if(t.push(o),0==(0|n._crypto_kx_keypair(i,o))){var s={publicKey:f(r,e),privateKey:f(a,e),keyType:"x25519"};return y(t),s}v(t,"internal error")}function Pe(e,t){var r=[];h(t),e=I(r,e,"seed");var i,a=0|n._crypto_kx_seedbytes();e.length!==a&&b(r,"invalid seed length"),i=d(e),r.push(i);var o=new p(0|n._crypto_kx_publickeybytes()),s=o.address;r.push(s);var c=new p(0|n._crypto_kx_secretkeybytes()),u=c.address;if(r.push(u),0==(0|n._crypto_kx_seed_keypair(s,u,i))){var l={publicKey:f(o,t),privateKey:f(c,t),keyType:"x25519"};return y(r),l}v(r,"internal error")}function Me(e,t,r,i){var a=[];h(i),e=I(a,e,"serverPublicKey");var o,s=0|n._crypto_kx_publickeybytes();e.length!==s&&b(a,"invalid serverPublicKey length"),o=d(e),a.push(o),t=I(a,t,"serverSecretKey");var c,u=0|n._crypto_kx_secretkeybytes();t.length!==u&&b(a,"invalid serverSecretKey length"),c=d(t),a.push(c),r=I(a,r,"clientPublicKey");var l,A=0|n._crypto_kx_publickeybytes();r.length!==A&&b(a,"invalid clientPublicKey length"),l=d(r),a.push(l);var g=new p(0|n._crypto_kx_sessionkeybytes()),m=g.address;a.push(m);var w=new p(0|n._crypto_kx_sessionkeybytes()),C=w.address;if(a.push(C),0==(0|n._crypto_kx_server_session_keys(m,C,o,c,l))){var B=f({sharedRx:g,sharedTx:w},i);return y(a),B}v(a,"invalid usage")}function Fe(e,t,r){var i=[];h(r);var a=d(e=I(i,e,"message")),o=e.length;i.push(a),t=I(i,t,"key");var s,c=0|n._crypto_onetimeauth_keybytes();t.length!==c&&b(i,"invalid key length"),s=d(t),i.push(s);var u=new p(0|n._crypto_onetimeauth_bytes()),l=u.address;if(i.push(l),0==(0|n._crypto_onetimeauth(l,a,o,0,s))){var A=f(u,r);return y(i),A}v(i,"invalid usage")}function Oe(e,t){var r=[];h(t),m(r,e,"state_address");var i=new p(0|n._crypto_onetimeauth_bytes()),a=i.address;if(r.push(a),0==(0|n._crypto_onetimeauth_final(e,a))){var o=(n._free(e),f(i,t));return y(r),o}v(r,"invalid usage")}function Re(e,t){var r=[];h(t);var i=null;null!=e&&(i=d(e=I(r,e,"key")),e.length,r.push(i));var a=new p(144).address;if(0==(0|n._crypto_onetimeauth_init(a,i))){var o=a;return y(r),o}v(r,"invalid usage")}function Te(e){var t=[];h(e);var r=new p(0|n._crypto_onetimeauth_keybytes()),i=r.address;t.push(i),n._crypto_onetimeauth_keygen(i);var a=f(r,e);return y(t),a}function je(e,t,r){var i=[];h(r),m(i,e,"state_address");var a=d(t=I(i,t,"message_chunk")),o=t.length;i.push(a),0!=(0|n._crypto_onetimeauth_update(e,a,o))&&v(i,"invalid usage"),y(i)}function He(e,t,r){var i=[];e=I(i,e,"hash");var a,o=0|n._crypto_onetimeauth_bytes();e.length!==o&&b(i,"invalid hash length"),a=d(e),i.push(a);var s=d(t=I(i,t,"message")),c=t.length;i.push(s),r=I(i,r,"key");var u,l=0|n._crypto_onetimeauth_keybytes();r.length!==l&&b(i,"invalid key length"),u=d(r),i.push(u);var f=0==(0|n._crypto_onetimeauth_verify(a,s,c,0,u));return y(i),f}function Ne(e,t,r,i,a,o,s){var c=[];h(s),m(c,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(c,"keyLength must be an unsigned integer");var u=d(t=I(c,t,"password")),l=t.length;c.push(u),r=I(c,r,"salt");var A,g=0|n._crypto_pwhash_saltbytes();r.length!==g&&b(c,"invalid salt length"),A=d(r),c.push(A),m(c,i,"opsLimit"),("number"!=typeof i||(0|i)!==i||i<0)&&b(c,"opsLimit must be an unsigned integer"),m(c,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(c,"memLimit must be an unsigned integer"),m(c,o,"algorithm"),("number"!=typeof o||(0|o)!==o||o<0)&&b(c,"algorithm must be an unsigned integer");var w=new p(0|e),C=w.address;if(c.push(C),0==(0|n._crypto_pwhash(C,e,0,u,l,0,A,i,0,a,o))){var B=f(w,s);return y(c),B}v(c,"invalid usage")}function Ue(e,t,r,i,a,o){var s=[];h(o),m(s,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(s,"keyLength must be an unsigned integer");var c=d(t=I(s,t,"password")),u=t.length;s.push(c),r=I(s,r,"salt");var l,A=0|n._crypto_pwhash_scryptsalsa208sha256_saltbytes();r.length!==A&&b(s,"invalid salt length"),l=d(r),s.push(l),m(s,i,"opsLimit"),("number"!=typeof i||(0|i)!==i||i<0)&&b(s,"opsLimit must be an unsigned integer"),m(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var g=new p(0|e),w=g.address;if(s.push(w),0==(0|n._crypto_pwhash_scryptsalsa208sha256(w,e,0,c,u,0,l,i,0,a))){var C=f(g,o);return y(s),C}v(s,"invalid usage")}function Le(e,t,r,i,a,o,s){var c=[];h(s);var u=d(e=I(c,e,"password")),l=e.length;c.push(u);var A=d(t=I(c,t,"salt")),g=t.length;c.push(A),m(c,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(c,"opsLimit must be an unsigned integer"),m(c,i,"r"),("number"!=typeof i||(0|i)!==i||i<0)&&b(c,"r must be an unsigned integer"),m(c,a,"p"),("number"!=typeof a||(0|a)!==a||a<0)&&b(c,"p must be an unsigned integer"),m(c,o,"keyLength"),("number"!=typeof o||(0|o)!==o||o<0)&&b(c,"keyLength must be an unsigned integer");var w=new p(0|o),C=w.address;if(c.push(C),0==(0|n._crypto_pwhash_scryptsalsa208sha256_ll(u,l,A,g,r,0,i,a,C,o))){var B=f(w,s);return y(c),B}v(c,"invalid usage")}function Ke(e,t,r,i){var a=[];h(i);var o=d(e=I(a,e,"password")),s=e.length;a.push(o),m(a,t,"opsLimit"),("number"!=typeof t||(0|t)!==t||t<0)&&b(a,"opsLimit must be an unsigned integer"),m(a,r,"memLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(a,"memLimit must be an unsigned integer");var c=new p(0|n._crypto_pwhash_scryptsalsa208sha256_strbytes()).address;if(a.push(c),0==(0|n._crypto_pwhash_scryptsalsa208sha256_str(c,o,s,0,t,0,r))){var u=n.UTF8ToString(c);return y(a),u}v(a,"invalid usage")}function Ge(e,t,r){var a=[];h(r),"string"!=typeof e&&b(a,"hashed_password must be a string");var o=d(e=i(e+"\0"));e.length,a.push(o);var s=d(t=I(a,t,"password")),c=t.length;a.push(s);var u=0==(0|n._crypto_pwhash_scryptsalsa208sha256_str_verify(o,s,c,0));return y(a),u}function $e(e,t,r,i){var a=[];h(i);var o=d(e=I(a,e,"password")),s=e.length;a.push(o),m(a,t,"opsLimit"),("number"!=typeof t||(0|t)!==t||t<0)&&b(a,"opsLimit must be an unsigned integer"),m(a,r,"memLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(a,"memLimit must be an unsigned integer");var c=new p(0|n._crypto_pwhash_strbytes()).address;if(a.push(c),0==(0|n._crypto_pwhash_str(c,o,s,0,t,0,r))){var u=n.UTF8ToString(c);return y(a),u}v(a,"invalid usage")}function Ye(e,t,r){var a=[];h(r),"string"!=typeof e&&b(a,"hashed_password must be a string");var o=d(e=i(e+"\0"));e.length,a.push(o);var s=d(t=I(a,t,"password")),c=t.length;a.push(s);var u=0==(0|n._crypto_pwhash_str_verify(o,s,c,0));return y(a),u}function Je(e,t,r){var i=[];h(r),e=I(i,e,"privateKey");var a,o=0|n._crypto_scalarmult_scalarbytes();e.length!==o&&b(i,"invalid privateKey length"),a=d(e),i.push(a),t=I(i,t,"publicKey");var s,c=0|n._crypto_scalarmult_scalarbytes();t.length!==c&&b(i,"invalid publicKey length"),s=d(t),i.push(s);var u=new p(0|n._crypto_scalarmult_bytes()),l=u.address;if(i.push(l),0==(0|n._crypto_scalarmult(l,a,s))){var A=f(u,r);return y(i),A}v(i,"weak public key")}function Ve(e,t){var r=[];h(t),e=I(r,e,"privateKey");var i,a=0|n._crypto_scalarmult_scalarbytes();e.length!==a&&b(r,"invalid privateKey length"),i=d(e),r.push(i);var o=new p(0|n._crypto_scalarmult_scalarbytes()),s=o.address;if(r.push(s),0==(0|n._crypto_scalarmult_base(s,i))){var c=f(o,t);return y(r),c}v(r,"insecure scalar")}function ze(e,t,r){var i=[];h(r),e=I(i,e,"scalar");var a,o=0|n._crypto_scalarmult_ristretto255_scalarbytes();e.length!==o&&b(i,"invalid scalar length"),a=d(e),i.push(a),t=I(i,t,"privateKey");var s,c=0|n._crypto_scalarmult_ristretto255_bytes();t.length!==c&&b(i,"invalid privateKey length"),s=d(t),i.push(s);var u=new p(0|n._crypto_scalarmult_ristretto255_bytes()),l=u.address;if(i.push(l),0==(0|n._crypto_scalarmult_ristretto255(l,a,s))){var A=f(u,r);return y(i),A}v(i,"input is zero element")}function qe(e,t){var r=[];h(t);var i=d(e=I(r,e,"scalar"));e.length,r.push(i);var a=new p(0|n._crypto_core_ristretto255_bytes()),o=a.address;if(r.push(o),0==(0|n._crypto_scalarmult_ristretto255_base(o,i))){var s=f(a,t);return y(r),s}v(r,"scalar is 0")}function We(e,t,r,i){var a=[];h(i);var o=d(e=I(a,e,"message")),s=e.length;a.push(o),t=I(a,t,"nonce");var c,u=0|n._crypto_secretbox_noncebytes();t.length!==u&&b(a,"invalid nonce length"),c=d(t),a.push(c),r=I(a,r,"key");var l,A=0|n._crypto_secretbox_keybytes();r.length!==A&&b(a,"invalid key length"),l=d(r),a.push(l);var g=new p(0|s),m=g.address;a.push(m);var w=new p(0|n._crypto_secretbox_macbytes()),C=w.address;if(a.push(C),0==(0|n._crypto_secretbox_detached(m,C,o,s,0,c,l))){var B=f({mac:w,cipher:g},i);return y(a),B}v(a,"invalid usage")}function Xe(e,t,r,i){var a=[];h(i);var o=d(e=I(a,e,"message")),s=e.length;a.push(o),t=I(a,t,"nonce");var c,u=0|n._crypto_secretbox_noncebytes();t.length!==u&&b(a,"invalid nonce length"),c=d(t),a.push(c),r=I(a,r,"key");var l,A=0|n._crypto_secretbox_keybytes();r.length!==A&&b(a,"invalid key length"),l=d(r),a.push(l);var g=new p(s+n._crypto_secretbox_macbytes()|0),m=g.address;if(a.push(m),0==(0|n._crypto_secretbox_easy(m,o,s,0,c,l))){var w=f(g,i);return y(a),w}v(a,"invalid usage")}function Ze(e){var t=[];h(e);var r=new p(0|n._crypto_secretbox_keybytes()),i=r.address;t.push(i),n._crypto_secretbox_keygen(i);var a=f(r,e);return y(t),a}function et(e,t,r,i,a){var o=[];h(a);var s=d(e=I(o,e,"ciphertext")),c=e.length;o.push(s),t=I(o,t,"mac");var u,l=0|n._crypto_secretbox_macbytes();t.length!==l&&b(o,"invalid mac length"),u=d(t),o.push(u),r=I(o,r,"nonce");var A,g=0|n._crypto_secretbox_noncebytes();r.length!==g&&b(o,"invalid nonce length"),A=d(r),o.push(A),i=I(o,i,"key");var m,w=0|n._crypto_secretbox_keybytes();i.length!==w&&b(o,"invalid key length"),m=d(i),o.push(m);var C=new p(0|c),B=C.address;if(o.push(B),0==(0|n._crypto_secretbox_open_detached(B,s,u,c,0,A,m))){var E=f(C,a);return y(o),E}v(o,"wrong secret key for the given ciphertext")}function tt(e,t,r,i){var a=[];h(i),e=I(a,e,"ciphertext");var o,s=n._crypto_secretbox_macbytes(),c=e.length;c>>0;return y([]),t}function Ht(e,t){var r=[];h(t);for(var i=n._malloc(24),a=0;a<6;a++)n.setValue(i+4*a,n.Runtime.addFunction(e[["implementation_name","random","stir","uniform","buf","close"][a]]),"i32");0!=(0|n._randombytes_set_implementation(i))&&v(r,"unsupported implementation"),y(r)}function Nt(e){h(e),n._randombytes_stir()}function Ut(e,t){var r=[];h(t),m(r,e,"upper_bound"),("number"!=typeof e||(0|e)!==e||e<0)&&b(r,"upper_bound must be an unsigned integer");var i=n._randombytes_uniform(e)>>>0;return y(r),i}function Lt(){var e=n._sodium_version_string(),t=n.UTF8ToString(e);return y([]),t}return p.prototype.to_Uint8Array=function(){var e=new Uint8Array(this.length);return e.set(n.HEAPU8.subarray(this.address,this.address+this.length)),e},e.add=function(e,t){if(!(e instanceof Uint8Array&&t instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can added");var n=e.length,r=0,i=0;if(t.length!=e.length)throw new TypeError("Arguments must have the same length");for(i=0;i>=8,r+=e[i]+t[i],e[i]=255&r},e.base64_variants=s,e.compare=function(e,t){if(!(e instanceof Uint8Array&&t instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be compared");if(e.length!==t.length)throw new TypeError("Only instances of identical length can be compared");for(var n=0,r=1,i=e.length;i-- >0;)n|=t[i]-e[i]>>8&r,r&=(t[i]^e[i])-1>>8;return n+n+r-1},e.from_base64=function(e,t){t=u(t);var r,i=[],a=new p(3*(e=I(i,e,"input")).length/4),o=d(e),s=g(4),c=g(4);return i.push(o),i.push(a.address),i.push(a.result_bin_len_p),i.push(a.b64_end_p),0!==n._sodium_base642bin(a.address,a.length,o,e.length,0,s,c,t)&&v(i,"invalid input"),n.getValue(c,"i32")-o!==e.length&&v(i,"incomplete input"),a.length=n.getValue(s,"i32"),r=a.to_Uint8Array(),y(i),r},e.from_hex=function(e){var t,r=[],i=new p((e=I(r,e,"input")).length/2),a=d(e),o=g(4);return r.push(a),r.push(i.address),r.push(i.hex_end_p),0!==n._sodium_hex2bin(i.address,i.length,a,e.length,0,0,o)&&v(r,"invalid input"),n.getValue(o,"i32")-a!==e.length&&v(r,"incomplete input"),t=i.to_Uint8Array(),y(r),t},e.from_string=i,e.increment=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be incremented");for(var t=256,n=0,r=e.length;n>=8,t+=e[n],e[n]=255&t},e.is_zero=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be checked");for(var t=0,n=0,r=e.length;n 0");var r,i=[],a=g(4),o=1,s=0,c=0|e.length,u=new p(c+t);i.push(a),i.push(u.address);for(var l=u.address,f=u.address+c+t;l>>48|c>>>32|c>>>16|c))-1>>16);return 0!==n._sodium_pad(a,u.address,e.length,t,u.length)&&v(i,"internal error"),u.length=n.getValue(a,"i32"),r=u.to_Uint8Array(),y(i),r},e.unpad=function(e,t){if(!(e instanceof Uint8Array))throw new TypeError("buffer must be a Uint8Array");if((t|=0)<=0)throw new Error("block size must be > 0");var r=[],i=d(e),a=g(4);return r.push(i),r.push(a),0!==n._sodium_unpad(a,i,e.length,t)&&v(r,"unsupported/invalid padding"),e=(e=new Uint8Array(e)).subarray(0,n.getValue(a,"i32")),y(r),e},e.ready=r,e.symbols=function(){return Object.keys(e).sort()},e.to_base64=l,e.to_hex=o,e.to_string=a,e})?r.apply(t,i):r)&&(e.exports=a),s&&o.sodium.ready.then((function(){s(o.sodium)}))},function(e,t){function n(e,t){if(!e)throw new Error(t||"Assertion failed")}e.exports=n,n.equal=function(e,t,n){if(e!=t)throw new Error(n||"Assertion failed: "+e+" != "+t)}},function(e,t,n){"use strict";var r=t,i=n(4),a=n(6),o=n(70);r.assert=a,r.toArray=o.toArray,r.zero2=o.zero2,r.toHex=o.toHex,r.encode=o.encode,r.getNAF=function(e,t,n){var r=new Array(Math.max(e.bitLength(),n)+1);r.fill(0);for(var i=1<(i>>1)-1?(i>>1)-c:c,a.isubn(s)):s=0,r[o]=s,a.iushrn(1)}return r},r.getJSF=function(e,t){var n=[[],[]];e=e.clone(),t=t.clone();for(var r=0,i=0;e.cmpn(-r)>0||t.cmpn(-i)>0;){var a,o,s,c=e.andln(3)+r&3,u=t.andln(3)+i&3;3===c&&(c=-1),3===u&&(u=-1),a=0==(1&c)?0:3!=(s=e.andln(7)+r&7)&&5!==s||2!==u?c:-c,n[0].push(a),o=0==(1&u)?0:3!=(s=t.andln(7)+i&7)&&5!==s||2!==c?u:-u,n[1].push(o),2*r===a+1&&(r=1-r),2*i===o+1&&(i=1-i),e.iushrn(1),t.iushrn(1)}return n},r.cachedProperty=function(e,t,n){var r="_"+t;e.prototype[t]=function(){return void 0!==this[r]?this[r]:this[r]=n.call(this)}},r.parseBytes=function(e){return"string"==typeof e?r.toArray(e,"hex"):e},r.intFromLE=function(e){return new i(e,"hex","le")}},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},function(e,t){var n,r,i=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(e){n=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(e){r=o}}();var c,u=[],l=!1,f=-1;function A(){l&&c&&(l=!1,c.length?u=c.concat(u):f=-1,u.length&&h())}function h(){if(!l){var e=s(A);l=!0;for(var t=u.length;t;){for(c=u,u=[];++f1)for(var n=1;n=e.length)&&56320==(64512&e.charCodeAt(t+1))}function o(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function s(e){return 1===e.length?"0"+e:e}function c(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}t.inherits=i,t.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var n=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),i=0;i>6|192,n[r++]=63&o|128):a(e,i)?(o=65536+((1023&o)<<10)+(1023&e.charCodeAt(++i)),n[r++]=o>>18|240,n[r++]=o>>12&63|128,n[r++]=o>>6&63|128,n[r++]=63&o|128):(n[r++]=o>>12|224,n[r++]=o>>6&63|128,n[r++]=63&o|128)}else for(i=0;i>>0}return o},t.split32=function(e,t){for(var n=new Array(4*e.length),r=0,i=0;r>>24,n[i+1]=a>>>16&255,n[i+2]=a>>>8&255,n[i+3]=255&a):(n[i+3]=a>>>24,n[i+2]=a>>>16&255,n[i+1]=a>>>8&255,n[i]=255&a)}return n},t.rotr32=function(e,t){return e>>>t|e<<32-t},t.rotl32=function(e,t){return e<>>32-t},t.sum32=function(e,t){return e+t>>>0},t.sum32_3=function(e,t,n){return e+t+n>>>0},t.sum32_4=function(e,t,n,r){return e+t+n+r>>>0},t.sum32_5=function(e,t,n,r,i){return e+t+n+r+i>>>0},t.sum64=function(e,t,n,r){var i=e[t],a=r+e[t+1]>>>0,o=(a>>0,e[t+1]=a},t.sum64_hi=function(e,t,n,r){return(t+r>>>0>>0},t.sum64_lo=function(e,t,n,r){return t+r>>>0},t.sum64_4_hi=function(e,t,n,r,i,a,o,s){var c=0,u=t;return c+=(u=u+r>>>0)>>0)>>0)>>0},t.sum64_4_lo=function(e,t,n,r,i,a,o,s){return t+r+a+s>>>0},t.sum64_5_hi=function(e,t,n,r,i,a,o,s,c,u){var l=0,f=t;return l+=(f=f+r>>>0)>>0)>>0)>>0)>>0},t.sum64_5_lo=function(e,t,n,r,i,a,o,s,c,u){return t+r+a+s+u>>>0},t.rotr64_hi=function(e,t,n){return(t<<32-n|e>>>n)>>>0},t.rotr64_lo=function(e,t,n){return(e<<32-n|t>>>n)>>>0},t.shr64_hi=function(e,t,n){return e>>>n},t.shr64_lo=function(e,t,n){return(e<<32-n|t>>>n)>>>0}},function(e,t,n){var r=n(2).Buffer,i=n(27).Transform,a=n(31).StringDecoder;function o(e){i.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}n(1)(o,i),o.prototype.update=function(e,t,n){"string"==typeof e&&(e=r.from(e,t));var i=this._update(e);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},o.prototype.setAutoPadding=function(){},o.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},o.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},o.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},o.prototype._transform=function(e,t,n){var r;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){r=e}finally{n(r)}},o.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},o.prototype._finalOrDigest=function(e){var t=this.__final()||r.alloc(0);return e&&(t=this._toString(t,e,!0)),t},o.prototype._toString=function(e,t,n){if(this._decoder||(this._decoder=new a(t),this._encoding=t),this._encoding!==t)throw new Error("can't switch encodings");var r=this._decoder.write(e);return n&&(r+=this._decoder.end()),r},e.exports=o},function(e,t,n){"use strict";var r=n(21),i=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=f;var a=Object.create(n(16));a.inherits=n(1);var o=n(48),s=n(30);a.inherits(f,o);for(var c=i(s.prototype),u=0;u4294967295)throw new RangeError("requested too many random bytes");var n=i.allocUnsafe(e);if(e>0)if(e>65536)for(var o=0;o=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var r=(4294967295&n)>>>0,i=(n-r)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(r,this._blockSize-4)}this._update(this._block);var a=this._hash();return e?a.toString(e):a},i.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=i},function(e,t,n){"use strict";var r=n(1),i=n(26),a=n(32),o=n(33),s=n(11);function c(e){s.call(this,"digest"),this._hash=e}r(c,s),c.prototype._update=function(e){this._hash.update(e)},c.prototype._final=function(){return this._hash.digest()},e.exports=function(e){return"md5"===(e=e.toLowerCase())?new i:"rmd160"===e||"ripemd160"===e?new a:new c(o(e))}},function(e,t,n){(function(e){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e){return Object.prototype.toString.call(e)}t.isArray=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===r(e)},t.isBoolean=function(e){return"boolean"==typeof e},t.isNull=function(e){return null===e},t.isNullOrUndefined=function(e){return null==e},t.isNumber=function(e){return"number"==typeof e},t.isString=function(e){return"string"==typeof e},t.isSymbol=function(e){return"symbol"===n(e)},t.isUndefined=function(e){return void 0===e},t.isRegExp=function(e){return"[object RegExp]"===r(e)},t.isObject=function(e){return"object"===n(e)&&null!==e},t.isDate=function(e){return"[object Date]"===r(e)},t.isError=function(e){return"[object Error]"===r(e)||e instanceof Error},t.isFunction=function(e){return"function"==typeof e},t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"===n(e)||void 0===e},t.isBuffer=e.isBuffer}).call(this,n(3).Buffer)},function(e,t,n){(function(t){e.exports=function(e,n){for(var r=Math.min(e.length,n.length),i=new t(r),a=0;a=this._delta8){var n=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-n,e.length),0===this.pending.length&&(this.pending=null),e=r.join32(e,0,e.length-n,this.endian);for(var i=0;i>>24&255,r[i++]=e>>>16&255,r[i++]=e>>>8&255,r[i++]=255&e}else for(r[i++]=255&e,r[i++]=e>>>8&255,r[i++]=e>>>16&255,r[i++]=e>>>24&255,r[i++]=0,r[i++]=0,r[i++]=0,r[i++]=0,a=8;a>>24]^l[p>>>16&255]^f[d>>>8&255]^A[255&g]^t[y++],o=u[p>>>24]^l[d>>>16&255]^f[g>>>8&255]^A[255&h]^t[y++],s=u[d>>>24]^l[g>>>16&255]^f[h>>>8&255]^A[255&p]^t[y++],c=u[g>>>24]^l[h>>>16&255]^f[p>>>8&255]^A[255&d]^t[y++],h=a,p=o,d=s,g=c;return a=(r[h>>>24]<<24|r[p>>>16&255]<<16|r[d>>>8&255]<<8|r[255&g])^t[y++],o=(r[p>>>24]<<24|r[d>>>16&255]<<16|r[g>>>8&255]<<8|r[255&h])^t[y++],s=(r[d>>>24]<<24|r[g>>>16&255]<<16|r[h>>>8&255]<<8|r[255&p])^t[y++],c=(r[g>>>24]<<24|r[h>>>16&255]<<16|r[p>>>8&255]<<8|r[255&d])^t[y++],[a>>>=0,o>>>=0,s>>>=0,c>>>=0]}var s=[0,1,2,4,8,16,32,64,128,27,54],c=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var n=[],r=[],i=[[],[],[],[]],a=[[],[],[],[]],o=0,s=0,c=0;c<256;++c){var u=s^s<<1^s<<2^s<<3^s<<4;u=u>>>8^255&u^99,n[o]=u,r[u]=o;var l=e[o],f=e[l],A=e[f],h=257*e[u]^16843008*u;i[0][o]=h<<24|h>>>8,i[1][o]=h<<16|h>>>16,i[2][o]=h<<8|h>>>24,i[3][o]=h,h=16843009*A^65537*f^257*l^16843008*o,a[0][u]=h<<24|h>>>8,a[1][u]=h<<16|h>>>16,a[2][u]=h<<8|h>>>24,a[3][u]=h,0===o?o=s=1:(o=l^e[e[e[A^l]]],s^=e[e[s]])}return{SBOX:n,INV_SBOX:r,SUB_MIX:i,INV_SUB_MIX:a}}();function u(e){this._key=i(e),this._reset()}u.blockSize=16,u.keySize=32,u.prototype.blockSize=u.blockSize,u.prototype.keySize=u.keySize,u.prototype._reset=function(){for(var e=this._key,t=e.length,n=t+6,r=4*(n+1),i=[],a=0;a>>24,o=c.SBOX[o>>>24]<<24|c.SBOX[o>>>16&255]<<16|c.SBOX[o>>>8&255]<<8|c.SBOX[255&o],o^=s[a/t|0]<<24):t>6&&a%t==4&&(o=c.SBOX[o>>>24]<<24|c.SBOX[o>>>16&255]<<16|c.SBOX[o>>>8&255]<<8|c.SBOX[255&o]),i[a]=i[a-t]^o}for(var u=[],l=0;l>>24]]^c.INV_SUB_MIX[1][c.SBOX[A>>>16&255]]^c.INV_SUB_MIX[2][c.SBOX[A>>>8&255]]^c.INV_SUB_MIX[3][c.SBOX[255&A]]}this._nRounds=n,this._keySchedule=i,this._invKeySchedule=u},u.prototype.encryptBlockRaw=function(e){return o(e=i(e),this._keySchedule,c.SUB_MIX,c.SBOX,this._nRounds)},u.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),n=r.allocUnsafe(16);return n.writeUInt32BE(t[0],0),n.writeUInt32BE(t[1],4),n.writeUInt32BE(t[2],8),n.writeUInt32BE(t[3],12),n},u.prototype.decryptBlock=function(e){var t=(e=i(e))[1];e[1]=e[3],e[3]=t;var n=o(e,this._invKeySchedule,c.INV_SUB_MIX,c.INV_SBOX,this._nRounds),a=r.allocUnsafe(16);return a.writeUInt32BE(n[0],0),a.writeUInt32BE(n[3],4),a.writeUInt32BE(n[2],8),a.writeUInt32BE(n[1],12),a},u.prototype.scrub=function(){a(this._keySchedule),a(this._invKeySchedule),a(this._key)},e.exports.AES=u},function(e,t,n){var r=n(2).Buffer,i=n(26);e.exports=function(e,t,n,a){if(r.isBuffer(e)||(e=r.from(e,"binary")),t&&(r.isBuffer(t)||(t=r.from(t,"binary")),8!==t.length))throw new RangeError("salt should be Buffer with 8 byte length");for(var o=n/8,s=r.alloc(o),c=r.alloc(a||0),u=r.alloc(0);o>0||a>0;){var l=new i;l.update(u),l.update(e),t&&l.update(t),u=l.digest();var f=0;if(o>0){var A=s.length-o;f=Math.min(o,u.length),u.copy(s,A,0,f),o-=f}if(f0){var h=c.length-a,p=Math.min(a,u.length-f);u.copy(c,h,f,f+p),a-=p}}return u.fill(0),{key:s,iv:c}}},function(e,t,n){"use strict";var r=n(4),i=n(7),a=i.getNAF,o=i.getJSF,s=i.assert;function c(e,t){this.type=e,this.p=new r(t.p,16),this.red=t.prime?r.red(t.prime):r.mont(this.p),this.zero=new r(0).toRed(this.red),this.one=new r(1).toRed(this.red),this.two=new r(2).toRed(this.red),this.n=t.n&&new r(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var n=this.n&&this.p.div(this.n);!n||n.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function u(e,t){this.curve=e,this.type=t,this.precomputed=null}e.exports=c,c.prototype.point=function(){throw new Error("Not implemented")},c.prototype.validate=function(){throw new Error("Not implemented")},c.prototype._fixedNafMul=function(e,t){s(e.precomputed);var n=e._getDoubles(),r=a(t,1,this._bitLength),i=(1<=c;t--)u=(u<<1)+r[t];o.push(u)}for(var l=this.jpoint(null,null,null),f=this.jpoint(null,null,null),A=i;A>0;A--){for(c=0;c=0;u--){for(t=0;u>=0&&0===o[u];u--)t++;if(u>=0&&t++,c=c.dblp(t),u<0)break;var l=o[u];s(0!==l),c="affine"===e.type?l>0?c.mixedAdd(i[l-1>>1]):c.mixedAdd(i[-l-1>>1].neg()):l>0?c.add(i[l-1>>1]):c.add(i[-l-1>>1].neg())}return"affine"===e.type?c.toP():c},c.prototype._wnafMulAdd=function(e,t,n,r,i){for(var s=this._wnafT1,c=this._wnafT2,u=this._wnafT3,l=0,f=0;f=1;f-=2){var h=f-1,p=f;if(1===s[h]&&1===s[p]){var d=[t[h],null,null,t[p]];0===t[h].y.cmp(t[p].y)?(d[1]=t[h].add(t[p]),d[2]=t[h].toJ().mixedAdd(t[p].neg())):0===t[h].y.cmp(t[p].y.redNeg())?(d[1]=t[h].toJ().mixedAdd(t[p]),d[2]=t[h].add(t[p].neg())):(d[1]=t[h].toJ().mixedAdd(t[p]),d[2]=t[h].toJ().mixedAdd(t[p].neg()));var g=[-3,-1,-5,-7,0,7,5,1,3],y=o(n[h],n[p]);l=Math.max(y[0].length,l),u[h]=new Array(l),u[p]=new Array(l);for(var v=0;v=0;f--){for(var C=0;f>=0;){var B=!0;for(v=0;v=0&&C++,I=I.dblp(C),f<0)break;for(v=0;v0?E=c[v][k-1>>1]:k<0&&(E=c[v][-k-1>>1].neg()),I="affine"===E.type?I.mixedAdd(E):I.add(E))}}for(f=0;f=Math.ceil((e.bitLength()+1)/t.step)},u.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var n=[this],r=this,i=0;i>>32-t}function u(e,t,n,r,i,a,o){return c(e+(t&n|~t&r)+i+a|0,o)+t|0}function l(e,t,n,r,i,a,o){return c(e+(t&r|n&~r)+i+a|0,o)+t|0}function f(e,t,n,r,i,a,o){return c(e+(t^n^r)+i+a|0,o)+t|0}function A(e,t,n,r,i,a,o){return c(e+(n^(t|~r))+i+a|0,o)+t|0}r(s,i),s.prototype._update=function(){for(var e=o,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var n=this._a,r=this._b,i=this._c,a=this._d;n=u(n,r,i,a,e[0],3614090360,7),a=u(a,n,r,i,e[1],3905402710,12),i=u(i,a,n,r,e[2],606105819,17),r=u(r,i,a,n,e[3],3250441966,22),n=u(n,r,i,a,e[4],4118548399,7),a=u(a,n,r,i,e[5],1200080426,12),i=u(i,a,n,r,e[6],2821735955,17),r=u(r,i,a,n,e[7],4249261313,22),n=u(n,r,i,a,e[8],1770035416,7),a=u(a,n,r,i,e[9],2336552879,12),i=u(i,a,n,r,e[10],4294925233,17),r=u(r,i,a,n,e[11],2304563134,22),n=u(n,r,i,a,e[12],1804603682,7),a=u(a,n,r,i,e[13],4254626195,12),i=u(i,a,n,r,e[14],2792965006,17),n=l(n,r=u(r,i,a,n,e[15],1236535329,22),i,a,e[1],4129170786,5),a=l(a,n,r,i,e[6],3225465664,9),i=l(i,a,n,r,e[11],643717713,14),r=l(r,i,a,n,e[0],3921069994,20),n=l(n,r,i,a,e[5],3593408605,5),a=l(a,n,r,i,e[10],38016083,9),i=l(i,a,n,r,e[15],3634488961,14),r=l(r,i,a,n,e[4],3889429448,20),n=l(n,r,i,a,e[9],568446438,5),a=l(a,n,r,i,e[14],3275163606,9),i=l(i,a,n,r,e[3],4107603335,14),r=l(r,i,a,n,e[8],1163531501,20),n=l(n,r,i,a,e[13],2850285829,5),a=l(a,n,r,i,e[2],4243563512,9),i=l(i,a,n,r,e[7],1735328473,14),n=f(n,r=l(r,i,a,n,e[12],2368359562,20),i,a,e[5],4294588738,4),a=f(a,n,r,i,e[8],2272392833,11),i=f(i,a,n,r,e[11],1839030562,16),r=f(r,i,a,n,e[14],4259657740,23),n=f(n,r,i,a,e[1],2763975236,4),a=f(a,n,r,i,e[4],1272893353,11),i=f(i,a,n,r,e[7],4139469664,16),r=f(r,i,a,n,e[10],3200236656,23),n=f(n,r,i,a,e[13],681279174,4),a=f(a,n,r,i,e[0],3936430074,11),i=f(i,a,n,r,e[3],3572445317,16),r=f(r,i,a,n,e[6],76029189,23),n=f(n,r,i,a,e[9],3654602809,4),a=f(a,n,r,i,e[12],3873151461,11),i=f(i,a,n,r,e[15],530742520,16),n=A(n,r=f(r,i,a,n,e[2],3299628645,23),i,a,e[0],4096336452,6),a=A(a,n,r,i,e[7],1126891415,10),i=A(i,a,n,r,e[14],2878612391,15),r=A(r,i,a,n,e[5],4237533241,21),n=A(n,r,i,a,e[12],1700485571,6),a=A(a,n,r,i,e[3],2399980690,10),i=A(i,a,n,r,e[10],4293915773,15),r=A(r,i,a,n,e[1],2240044497,21),n=A(n,r,i,a,e[8],1873313359,6),a=A(a,n,r,i,e[15],4264355552,10),i=A(i,a,n,r,e[6],2734768916,15),r=A(r,i,a,n,e[13],1309151649,21),n=A(n,r,i,a,e[4],4149444226,6),a=A(a,n,r,i,e[11],3174756917,10),i=A(i,a,n,r,e[2],718787259,15),r=A(r,i,a,n,e[9],3951481745,21),this._a=this._a+n|0,this._b=this._b+r|0,this._c=this._c+i|0,this._d=this._d+a|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=a.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},e.exports=s},function(e,t,n){e.exports=i;var r=n(28).EventEmitter;function i(){r.call(this)}n(1)(i,r),i.Readable=n(29),i.Writable=n(96),i.Duplex=n(97),i.Transform=n(98),i.PassThrough=n(99),i.Stream=i,i.prototype.pipe=function(e,t){var n=this;function i(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function a(){n.readable&&n.resume&&n.resume()}n.on("data",i),e.on("drain",a),e._isStdio||t&&!1===t.end||(n.on("end",s),n.on("close",c));var o=!1;function s(){o||(o=!0,e.end())}function c(){o||(o=!0,"function"==typeof e.destroy&&e.destroy())}function u(e){if(l(),0===r.listenerCount(this,"error"))throw e}function l(){n.removeListener("data",i),e.removeListener("drain",a),n.removeListener("end",s),n.removeListener("close",c),n.removeListener("error",u),e.removeListener("error",u),n.removeListener("end",l),n.removeListener("close",l),e.removeListener("close",l)}return n.on("error",u),e.on("error",u),n.on("end",l),n.on("close",l),e.on("close",l),e.emit("pipe",n),e}},function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i,a="object"===("undefined"==typeof Reflect?"undefined":r(Reflect))?Reflect:null,o=a&&"function"==typeof a.apply?a.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};i=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function c(){c.init.call(this)}e.exports=c,c.EventEmitter=c,c.prototype._events=void 0,c.prototype._eventsCount=0,c.prototype._maxListeners=void 0;var u=10;function l(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+r(e))}function f(e){return void 0===e._maxListeners?c.defaultMaxListeners:e._maxListeners}function A(e,t,n,r){var i,a,o,s;if(l(n),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),a=e._events),o=a[t]),void 0===o)o=a[t]=n,++e._eventsCount;else if("function"==typeof o?o=a[t]=r?[n,o]:[o,n]:r?o.unshift(n):o.push(n),(i=f(e))>0&&o.length>i&&!o.warned){o.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=o.length,s=c,console&&console.warn&&console.warn(s)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=h.bind(r);return i.listener=n,r.wrapFn=i,i}function d(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var c=i[e];if(void 0===c)return!1;if("function"==typeof c)o(c,this,t);else{var u=c.length,l=y(c,u);for(n=0;n=0;a--)if(n[a]===t||n[a].listener===t){o=n[a].listener,i=a;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},c.prototype.listeners=function(e){return d(this,e,!0)},c.prototype.rawListeners=function(e){return d(this,e,!1)},c.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):g.call(e,t)},c.prototype.listenerCount=g,c.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},function(e,t,n){(t=e.exports=n(48)).Stream=t,t.Readable=t,t.Writable=n(30),t.Duplex=n(12),t.Transform=n(51),t.PassThrough=n(95)},function(e,t,n){"use strict";(function(t,r,i){var a=n(21);function o(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;for(e.entry=null;r;){var i=r.callback;t.pendingcb--,i(void 0),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=v;var s,c=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:a.nextTick;v.WritableState=y;var u=Object.create(n(16));u.inherits=n(1);var l,f={deprecate:n(94)},A=n(49),h=n(2).Buffer,p=i.Uint8Array||function(){},d=n(50);function g(){}function y(e,t){s=s||n(12),e=e||{};var r=t instanceof s;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,i=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,i){--t.pendingcb,n?(a.nextTick(i,r),a.nextTick(B,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(i(r),e._writableState.errorEmitted=!0,e.emit("error",r),B(e,t))}(e,n,r,t,i);else{var o=w(n);o||n.corked||n.bufferProcessing||!n.bufferedRequest||I(e,n),r?c(m,e,n,o,i):m(e,n,o,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function v(e){if(s=s||n(12),!(l.call(v,this)||this instanceof s))return new v(e);this._writableState=new y(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),A.call(this)}function b(e,t,n,r,i,a,o){t.writelen=r,t.writecb=o,t.writing=!0,t.sync=!0,n?e._writev(i,t.onwrite):e._write(i,a,t.onwrite),t.sync=!1}function m(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),B(e,t)}function I(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,i=new Array(r),a=t.corkedRequestsFree;a.entry=n;for(var s=0,c=!0;n;)i[s]=n,n.isBuf||(c=!1),n=n.next,s+=1;i.allBuffers=c,b(e,t,!0,t.length,i,"",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(b(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function w(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),B(e,t)}))}function B(e,t){var n=w(t);return n&&(function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,a.nextTick(C,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}u.inherits(v,A),y.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(y.prototype,"buffer",{get:f.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(l=Function.prototype[Symbol.hasInstance],Object.defineProperty(v,Symbol.hasInstance,{value:function(e){return!!l.call(this,e)||this===v&&e&&e._writableState instanceof y}})):l=function(e){return e instanceof this},v.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},v.prototype.write=function(e,t,n){var r,i=this._writableState,o=!1,s=!i.objectMode&&(r=e,h.isBuffer(r)||r instanceof p);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),"function"==typeof t&&(n=t,t=null),s?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof n&&(n=g),i.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),a.nextTick(t,n)}(this,n):(s||function(e,t,n,r){var i=!0,o=!1;return null===n?o=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(e.emit("error",o),a.nextTick(r,o),i=!1),i}(this,i,e,n))&&(i.pendingcb++,o=function(e,t,n,r,i,a){if(!n){var o=function(e,t,n){return e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=h.from(t,n)),t}(t,r,i);r!==o&&(n=!0,i="buffer",r=o)}var s=t.objectMode?1:r.length;t.length+=s;var c=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(v.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),v.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},v.prototype._writev=null,v.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,B(e,t),n&&(t.finished?a.nextTick(n):e.once("finish",n)),t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(v.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),v.prototype.destroy=d.destroy,v.prototype._undestroy=d.undestroy,v.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(9),n(92).setImmediate,n(8))},function(e,t,n){"use strict";var r=n(2).Buffer,i=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function a(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===i||!i(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=u,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=l,this.end=f,t=3;break;default:return this.write=A,void(this.end=h)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function o(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function A(e){return e.toString(this.encoding)}function h(e){return e&&e.length?this.write(e):""}t.StringDecoder=a,a.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n=0?(i>0&&(e.lastNeed=i-1),i):--r=0?(i>0&&(e.lastNeed=i-2),i):--r=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},a.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";var r=n(3).Buffer,i=n(1),a=n(47),o=new Array(16),s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],c=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],u=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],l=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],f=[0,1518500249,1859775393,2400959708,2840853838],A=[1352829926,1548603684,1836072691,2053994217,0];function h(){a.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<>>32-t}function d(e,t,n,r,i,a,o,s){return p(e+(t^n^r)+a+o|0,s)+i|0}function g(e,t,n,r,i,a,o,s){return p(e+(t&n|~t&r)+a+o|0,s)+i|0}function y(e,t,n,r,i,a,o,s){return p(e+((t|~n)^r)+a+o|0,s)+i|0}function v(e,t,n,r,i,a,o,s){return p(e+(t&r|n&~r)+a+o|0,s)+i|0}function b(e,t,n,r,i,a,o,s){return p(e+(t^(n|~r))+a+o|0,s)+i|0}i(h,a),h.prototype._update=function(){for(var e=o,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var n=0|this._a,r=0|this._b,i=0|this._c,a=0|this._d,h=0|this._e,m=0|this._a,I=0|this._b,w=0|this._c,C=0|this._d,B=0|this._e,E=0;E<80;E+=1){var k,_;E<16?(k=d(n,r,i,a,h,e[s[E]],f[0],u[E]),_=b(m,I,w,C,B,e[c[E]],A[0],l[E])):E<32?(k=g(n,r,i,a,h,e[s[E]],f[1],u[E]),_=v(m,I,w,C,B,e[c[E]],A[1],l[E])):E<48?(k=y(n,r,i,a,h,e[s[E]],f[2],u[E]),_=y(m,I,w,C,B,e[c[E]],A[2],l[E])):E<64?(k=v(n,r,i,a,h,e[s[E]],f[3],u[E]),_=g(m,I,w,C,B,e[c[E]],A[3],l[E])):(k=b(n,r,i,a,h,e[s[E]],f[4],u[E]),_=d(m,I,w,C,B,e[c[E]],A[4],l[E])),n=h,h=a,a=p(i,10),i=r,r=k,m=B,B=C,C=p(w,10),w=I,I=_}var S=this._b+i+C|0;this._b=this._c+a+B|0,this._c=this._d+h+m|0,this._d=this._e+n+I|0,this._e=this._a+r+w|0,this._a=S},h.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=r.alloc?r.alloc(20):new r(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},e.exports=h},function(e,t,n){(t=e.exports=function(e){e=e.toLowerCase();var n=t[e];if(!n)throw new Error(e+" is not supported (we accept pull requests)");return new n}).sha=n(100),t.sha1=n(101),t.sha224=n(102),t.sha256=n(52),t.sha384=n(103),t.sha512=n(53)},function(e,t,n){"use strict";var r=n(6);function i(e){this.options=e,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0}e.exports=i,i.prototype._init=function(){},i.prototype.update=function(e){return 0===e.length?[]:"decrypt"===this.type?this._updateDecrypt(e):this._updateEncrypt(e)},i.prototype._buffer=function(e,t){for(var n=Math.min(this.buffer.length-this.bufferOff,e.length-t),r=0;r0;r--)t+=this._buffer(e,t),n+=this._flushBuffer(i,n);return t+=this._buffer(e,t),i},i.prototype.final=function(e){var t,n;return e&&(t=this.update(e)),n="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(n):n},i.prototype._pad=function(e,t){if(0===t)return!1;for(;t=0||!n.umod(e.prime1)||!n.umod(e.prime2);)n=new r(i(t));return n}e.exports=a,a.getr=o}).call(this,n(3).Buffer)},function(e,t,n){"use strict";var r=t;r.version=n(129).version,r.utils=n(7),r.rand=n(37),r.curve=n(71),r.curves=n(40),r.ec=n(140),r.eddsa=n(144)},function(e,t,n){"use strict";var r,i=t,a=n(41),o=n(71),s=n(7).assert;function c(e){"short"===e.type?this.curve=new o.short(e):"edwards"===e.type?this.curve=new o.edwards(e):this.curve=new o.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,s(this.g.validate(),"Invalid curve"),s(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function u(e,t){Object.defineProperty(i,e,{configurable:!0,enumerable:!0,get:function(){var n=new c(t);return Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:n}),n}})}i.PresetCurve=c,u("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:a.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),u("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:a.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),u("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:a.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),u("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:a.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),u("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:a.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),u("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["9"]}),u("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{r=n(139)}catch(e){r=void 0}u("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:a.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",r]})},function(e,t,n){var r=t;r.utils=n(10),r.common=n(18),r.sha=n(133),r.ripemd=n(137),r.hmac=n(138),r.sha1=r.sha.sha1,r.sha256=r.sha.sha256,r.sha224=r.sha.sha224,r.sha384=r.sha.sha384,r.sha512=r.sha.sha512,r.ripemd160=r.ripemd.ripemd160},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t){},function(e,t,n){(function(e){function n(e,t){for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r=-1&&!i;a--){var o=a>=0?arguments[a]:e.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(t=o+"/"+t,i="/"===o.charAt(0))}return(i?"/":"")+(t=n(r(t.split("/"),(function(e){return!!e})),!i).join("/"))||"."},t.normalize=function(e){var a=t.isAbsolute(e),o="/"===i(e,-1);return(e=n(r(e.split("/"),(function(e){return!!e})),!a).join("/"))||a||(e="."),e&&o&&(e+="/"),(a?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(r(e,(function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function r(e){for(var t=0;t=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var i=r(e.split("/")),a=r(n.split("/")),o=Math.min(i.length,a.length),s=o,c=0;c=1;--a)if(47===(t=e.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":e.slice(0,r)},t.basename=function(e,t){var n=function(e){"string"!=typeof e&&(e+="");var t,n=0,r=-1,i=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!i){n=t+1;break}}else-1===r&&(i=!1,r=t+1);return-1===r?"":e.slice(n,r)}(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!=typeof e&&(e+="");for(var t=-1,n=0,r=-1,i=!0,a=0,o=e.length-1;o>=0;--o){var s=e.charCodeAt(o);if(47!==s)-1===r&&(i=!1,r=o+1),46===s?-1===t?t=o:1!==a&&(a=1):-1!==t&&(a=-1);else if(!i){n=o+1;break}}return-1===t||-1===r||0===a||1===a&&t===r-1&&t===n+1?"":e.slice(t,r)};var i="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,n(9))},function(e,t,n){"use strict";t.randomBytes=t.rng=t.pseudoRandomBytes=t.prng=n(13),t.createHash=t.Hash=n(15),t.createHmac=t.Hmac=n(54);var r=n(105),i=Object.keys(r),a=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(i);t.getHashes=function(){return a};var o=n(57);t.pbkdf2=o.pbkdf2,t.pbkdf2Sync=o.pbkdf2Sync;var s=n(107);t.Cipher=s.Cipher,t.createCipher=s.createCipher,t.Cipheriv=s.Cipheriv,t.createCipheriv=s.createCipheriv,t.Decipher=s.Decipher,t.createDecipher=s.createDecipher,t.Decipheriv=s.Decipheriv,t.createDecipheriv=s.createDecipheriv,t.getCiphers=s.getCiphers,t.listCiphers=s.listCiphers;var c=n(122);t.DiffieHellmanGroup=c.DiffieHellmanGroup,t.createDiffieHellmanGroup=c.createDiffieHellmanGroup,t.getDiffieHellman=c.getDiffieHellman,t.createDiffieHellman=c.createDiffieHellman,t.DiffieHellman=c.DiffieHellman;var u=n(127);t.createSign=u.createSign,t.Sign=u.Sign,t.createVerify=u.createVerify,t.Verify=u.Verify,t.createECDH=n(161);var l=n(162);t.publicEncrypt=l.publicEncrypt,t.privateEncrypt=l.privateEncrypt,t.publicDecrypt=l.publicDecrypt,t.privateDecrypt=l.privateDecrypt;var f=n(165);t.randomFill=f.randomFill,t.randomFillSync=f.randomFillSync,t.createCredentials=function(){throw new Error(["sorry, createCredentials is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))},t.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},function(e,t,n){"use strict";var r=n(2).Buffer,i=n(27).Transform;function a(e){i.call(this),this._block=r.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}n(1)(a,i),a.prototype._transform=function(e,t,n){var r=null;try{this.update(e,t)}catch(e){r=e}n(r)},a.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},a.prototype.update=function(e,t){if(function(e,t){if(!r.isBuffer(e)&&"string"!=typeof e)throw new TypeError("Data must be a string or a buffer")}(e),this._finalized)throw new Error("Digest already called");r.isBuffer(e)||(e=r.from(e,t));for(var n=this._block,i=0;this._blockOffset+e.length-i>=this._blockSize;){for(var a=this._blockOffset;a0;++o)this._length[o]+=s,(s=this._length[o]/4294967296|0)>0&&(this._length[o]-=4294967296*s);return this},a.prototype._update=function(){throw new Error("_update is not implemented")},a.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var n=0;n<4;++n)this._length[n]=0;return t},a.prototype._digest=function(){throw new Error("_digest is not implemented")},e.exports=a},function(e,t,n){"use strict";(function(t,r){var i=n(21);e.exports=b;var a,o=n(43);b.ReadableState=v,n(28).EventEmitter;var s=function(e,t){return e.listeners(t).length},c=n(49),u=n(2).Buffer,l=t.Uint8Array||function(){},f=Object.create(n(16));f.inherits=n(1);var A=n(89),h=void 0;h=A&&A.debuglog?A.debuglog("stream"):function(){};var p,d=n(90),g=n(50);f.inherits(b,c);var y=["error","close","destroy","pause","resume"];function v(e,t){e=e||{};var r=t instanceof(a=a||n(12));this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,o=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(o||0===o)?o:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=n(31).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function b(e){if(a=a||n(12),!(this instanceof b))return new b(e);this._readableState=new v(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),c.call(this)}function m(e,t,n,r,i){var a,o=e._readableState;return null===t?(o.reading=!1,function(e,t){if(!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,C(e)}}(e,o)):(i||(a=function(e,t){var n,r;return r=t,u.isBuffer(r)||r instanceof l||"string"==typeof t||void 0===t||e.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}(o,t)),a?e.emit("error",a):o.objectMode||t&&t.length>0?("string"==typeof t||o.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?o.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):I(e,o,t,!0):o.ended?e.emit("error",new Error("stream.push() after EOF")):(o.reading=!1,o.decoder&&!n?(t=o.decoder.write(t),o.objectMode||0!==t.length?I(e,o,t,!1):E(e,o)):I(e,o,t,!1))):r||(o.reading=!1)),function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(h("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(B,e):B(e))}function B(e){h("emit readable"),e.emit("readable"),Q(e)}function E(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(k,e,t))}function k(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;return ea.length?a.length:e;if(o===a.length?i+=a:i+=a.slice(0,e),0==(e-=o)){o===a.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(o));break}++r}return t.length-=r,i}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,i=1;for(r.data.copy(n),e-=r.data.length;r=r.next;){var a=r.data,o=e>a.length?a.length:e;if(a.copy(n,n.length-e,0,o),0==(e-=o)){o===a.length?(++i,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=a.slice(o));break}++i}return t.length-=i,n}(e,t),r}(e,t.buffer,t.decoder),n);var n}function D(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(P,t,e))}function P(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function M(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return h("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?D(this):C(this),null;if(0===(e=w(e,t))&&t.ended)return 0===t.length&&D(this),null;var r,i=t.needReadable;return h("need readable",i),(0===t.length||t.length-e0?x(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&D(this)),null!==r&&this.emit("data",r),r},b.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},b.prototype.pipe=function(e,t){var n=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e)}a.pipesCount+=1,h("pipe count=%d opts=%j",a.pipesCount,t);var c=t&&!1===t.end||e===r.stdout||e===r.stderr?v:u;function u(){h("onend"),e.end()}a.endEmitted?i.nextTick(c):n.once("end",c),e.on("unpipe",(function t(r,i){h("onunpipe"),r===n&&i&&!1===i.hasUnpiped&&(i.hasUnpiped=!0,h("cleanup"),e.removeListener("close",g),e.removeListener("finish",y),e.removeListener("drain",l),e.removeListener("error",d),e.removeListener("unpipe",t),n.removeListener("end",u),n.removeListener("end",v),n.removeListener("data",p),f=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||l())}));var l=function(e){return function(){var t=e._readableState;h("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,Q(e))}}(n);e.on("drain",l);var f=!1,A=!1;function p(t){h("ondata"),A=!1,!1!==e.write(t)||A||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==M(a.pipes,e))&&!f&&(h("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,A=!0),n.pause())}function d(t){h("onerror",t),v(),e.removeListener("error",d),0===s(e,"error")&&e.emit("error",t)}function g(){e.removeListener("finish",y),v()}function y(){h("onfinish"),e.removeListener("close",g),v()}function v(){h("unpipe"),n.unpipe(e)}return n.on("data",p),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?o(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",d),e.once("close",g),e.once("finish",y),e.emit("pipe",n),a.flowing||(h("pipe resume"),n.resume()),e},b.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function A(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function h(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}r(c,i),c.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},c.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,i=0|this._b,a=0|this._c,s=0|this._d,c=0|this._e,p=0|this._f,d=0|this._g,g=0|this._h,y=0;y<16;++y)n[y]=e.readInt32BE(4*y);for(;y<64;++y)n[y]=0|(((t=n[y-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+n[y-7]+h(n[y-15])+n[y-16];for(var v=0;v<64;++v){var b=g+A(c)+u(c,p,d)+o[v]+n[v]|0,m=f(r)+l(r,i,a)|0;g=d,d=p,p=c,c=s+b|0,s=a,a=i,i=r,r=b+m|0}this._a=r+this._a|0,this._b=i+this._b|0,this._c=a+this._c|0,this._d=s+this._d|0,this._e=c+this._e|0,this._f=p+this._f|0,this._g=d+this._g|0,this._h=g+this._h|0},c.prototype._hash=function(){var e=a.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=c},function(e,t,n){var r=n(1),i=n(14),a=n(2).Buffer,o=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function c(){this.init(),this._w=s,i.call(this,128,112)}function u(e,t,n){return n^e&(t^n)}function l(e,t,n){return e&t|n&(e|t)}function f(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function A(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function h(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function d(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function g(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function y(e,t){return e>>>0>>0?1:0}r(c,i),c.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},c.prototype._update=function(e){for(var t=this._w,n=0|this._ah,r=0|this._bh,i=0|this._ch,a=0|this._dh,s=0|this._eh,c=0|this._fh,v=0|this._gh,b=0|this._hh,m=0|this._al,I=0|this._bl,w=0|this._cl,C=0|this._dl,B=0|this._el,E=0|this._fl,k=0|this._gl,_=0|this._hl,S=0;S<32;S+=2)t[S]=e.readInt32BE(4*S),t[S+1]=e.readInt32BE(4*S+4);for(;S<160;S+=2){var Q=t[S-30],x=t[S-30+1],D=h(Q,x),P=p(x,Q),M=d(Q=t[S-4],x=t[S-4+1]),F=g(x,Q),O=t[S-14],R=t[S-14+1],T=t[S-32],j=t[S-32+1],H=P+R|0,N=D+O+y(H,P)|0;N=(N=N+M+y(H=H+F|0,F)|0)+T+y(H=H+j|0,j)|0,t[S]=N,t[S+1]=H}for(var U=0;U<160;U+=2){N=t[U],H=t[U+1];var L=l(n,r,i),K=l(m,I,w),G=f(n,m),$=f(m,n),Y=A(s,B),J=A(B,s),V=o[U],z=o[U+1],q=u(s,c,v),W=u(B,E,k),X=_+J|0,Z=b+Y+y(X,_)|0;Z=(Z=(Z=Z+q+y(X=X+W|0,W)|0)+V+y(X=X+z|0,z)|0)+N+y(X=X+H|0,H)|0;var ee=$+K|0,te=G+L+y(ee,$)|0;b=v,_=k,v=c,k=E,c=s,E=B,s=a+Z+y(B=C+X|0,C)|0,a=i,C=w,i=r,w=I,r=n,I=m,n=Z+te+y(m=X+ee|0,X)|0}this._al=this._al+m|0,this._bl=this._bl+I|0,this._cl=this._cl+w|0,this._dl=this._dl+C|0,this._el=this._el+B|0,this._fl=this._fl+E|0,this._gl=this._gl+k|0,this._hl=this._hl+_|0,this._ah=this._ah+n+y(this._al,m)|0,this._bh=this._bh+r+y(this._bl,I)|0,this._ch=this._ch+i+y(this._cl,w)|0,this._dh=this._dh+a+y(this._dl,C)|0,this._eh=this._eh+s+y(this._el,B)|0,this._fh=this._fh+c+y(this._fl,E)|0,this._gh=this._gh+v+y(this._gl,k)|0,this._hh=this._hh+b+y(this._hl,_)|0},c.prototype._hash=function(){var e=a.allocUnsafe(64);function t(t,n,r){e.writeInt32BE(t,r),e.writeInt32BE(n,r+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=c},function(e,t,n){"use strict";var r=n(1),i=n(104),a=n(11),o=n(2).Buffer,s=n(55),c=n(32),u=n(33),l=o.alloc(128);function f(e,t){a.call(this,"digest"),"string"==typeof t&&(t=o.from(t));var n="sha512"===e||"sha384"===e?128:64;this._alg=e,this._key=t,t.length>n?t=("rmd160"===e?new c:u(e)).update(t).digest():t.lengthn||a!=a)throw new TypeError("Bad key length")}}).call(this,n(3).Buffer)},function(e,t,n){(function(t){var n;n=t.browser||parseInt(t.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary",e.exports=n}).call(this,n(9))},function(e,t,n){var r=n(55),i=n(32),a=n(33),o=n(58),s=n(59),c=n(2).Buffer,u=c.alloc(128),l={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function f(e,t,n){var o=function(e){return"rmd160"===e||"ripemd160"===e?function(e){return(new i).update(e).digest()}:"md5"===e?r:function(t){return a(e).update(t).digest()}}(e),s="sha512"===e||"sha384"===e?128:64;t.length>s?t=o(t):t.length>>0},t.writeUInt32BE=function(e,t,n){e[0+n]=t>>>24,e[1+n]=t>>>16&255,e[2+n]=t>>>8&255,e[3+n]=255&t},t.ip=function(e,t,n,r){for(var i=0,a=0,o=6;o>=0;o-=2){for(var s=0;s<=24;s+=8)i<<=1,i|=t>>>s+o&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>>s+o&1}for(o=6;o>=0;o-=2){for(s=1;s<=25;s+=8)a<<=1,a|=t>>>s+o&1;for(s=1;s<=25;s+=8)a<<=1,a|=e>>>s+o&1}n[r+0]=i>>>0,n[r+1]=a>>>0},t.rip=function(e,t,n,r){for(var i=0,a=0,o=0;o<4;o++)for(var s=24;s>=0;s-=8)i<<=1,i|=t>>>s+o&1,i<<=1,i|=e>>>s+o&1;for(o=4;o<8;o++)for(s=24;s>=0;s-=8)a<<=1,a|=t>>>s+o&1,a<<=1,a|=e>>>s+o&1;n[r+0]=i>>>0,n[r+1]=a>>>0},t.pc1=function(e,t,n,r){for(var i=0,a=0,o=7;o>=5;o--){for(var s=0;s<=24;s+=8)i<<=1,i|=t>>s+o&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+o&1}for(s=0;s<=24;s+=8)i<<=1,i|=t>>s+o&1;for(o=1;o<=3;o++){for(s=0;s<=24;s+=8)a<<=1,a|=t>>s+o&1;for(s=0;s<=24;s+=8)a<<=1,a|=e>>s+o&1}for(s=0;s<=24;s+=8)a<<=1,a|=e>>s+o&1;n[r+0]=i>>>0,n[r+1]=a>>>0},t.r28shl=function(e,t){return e<>>28-t};var r=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];t.pc2=function(e,t,n,i){for(var a=0,o=0,s=r.length>>>1,c=0;c>>r[c]&1;for(c=s;c>>r[c]&1;n[i+0]=a>>>0,n[i+1]=o>>>0},t.expand=function(e,t,n){var r=0,i=0;r=(1&e)<<5|e>>>27;for(var a=23;a>=15;a-=4)r<<=6,r|=e>>>a&63;for(a=11;a>=3;a-=4)i|=e>>>a&63,i<<=6;i|=(31&e)<<1|e>>>31,t[n+0]=r>>>0,t[n+1]=i>>>0};var i=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];t.substitute=function(e,t){for(var n=0,r=0;r<4;r++)n<<=4,n|=i[64*r+(e>>>18-6*r&63)];for(r=0;r<4;r++)n<<=4,n|=i[256+64*r+(t>>>18-6*r&63)];return n>>>0};var a=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];t.permute=function(e){for(var t=0,n=0;n>>a[n]&1;return t>>>0},t.padSplit=function(e,t,n){for(var r=e.toString(2);r.length>>1];n=a.r28shl(n,s),i=a.r28shl(i,s),a.pc2(n,i,e.keys,o)}},c.prototype._update=function(e,t,n,r){var i=this._desState,o=a.readUInt32BE(e,t),s=a.readUInt32BE(e,t+4);a.ip(o,s,i.tmp,0),o=i.tmp[0],s=i.tmp[1],"encrypt"===this.type?this._encrypt(i,o,s,i.tmp,0):this._decrypt(i,o,s,i.tmp,0),o=i.tmp[0],s=i.tmp[1],a.writeUInt32BE(n,o,r),a.writeUInt32BE(n,s,r+4)},c.prototype._pad=function(e,t){for(var n=e.length-t,r=t;r>>0,o=A}a.rip(s,o,r,i)},c.prototype._decrypt=function(e,t,n,r,i){for(var o=n,s=t,c=e.keys.length-2;c>=0;c-=2){var u=e.keys[c],l=e.keys[c+1];a.expand(o,e.tmp,0),u^=e.tmp[0],l^=e.tmp[1];var f=a.substitute(u,l),A=o;o=(s^a.permute(f))>>>0,s=A}a.rip(o,s,r,i)}},function(e,t,n){var r=n(17),i=n(2).Buffer,a=n(64);function o(e){var t=e._cipher.encryptBlockRaw(e._prev);return a(e._prev),t}t.encrypt=function(e,t){var n=Math.ceil(t.length/16),a=e._cache.length;e._cache=i.concat([e._cache,i.allocUnsafe(16*n)]);for(var s=0;se;)n.ishrn(1);if(n.isEven()&&n.iadd(s),n.testn(1)||n.iadd(c),t.cmp(c)){if(!t.cmp(u))for(;n.mod(l).cmp(f);)n.iadd(h)}else for(;n.mod(a).cmp(A);)n.iadd(h);if(d(p=n.shrn(1))&&d(n)&&g(p)&&g(n)&&o.test(p)&&o.test(n))return n}}},function(e,t,n){var r=n(4),i=n(37);function a(e){this.rand=e||new i.Rand}e.exports=a,a.create=function(e){return new a(e)},a.prototype._randbelow=function(e){var t=e.bitLength(),n=Math.ceil(t/8);do{var i=new r(this.rand.generate(n))}while(i.cmp(e)>=0);return i},a.prototype._randrange=function(e,t){var n=t.sub(e);return e.add(this._randbelow(n))},a.prototype.test=function(e,t,n){var i=e.bitLength(),a=r.mont(e),o=new r(1).toRed(a);t||(t=Math.max(1,i/48|0));for(var s=e.subn(1),c=0;!s.testn(c);c++);for(var u=e.shrn(c),l=s.toRed(a);t>0;t--){var f=this._randrange(new r(2),s);n&&n(f);var A=f.toRed(a).redPow(u);if(0!==A.cmp(o)&&0!==A.cmp(l)){for(var h=1;h0;t--){var l=this._randrange(new r(2),o),f=e.gcd(l);if(0!==f.cmpn(1))return f;var A=l.toRed(i).redPow(c);if(0!==A.cmp(a)&&0!==A.cmp(u)){for(var h=1;h>8,o=255&i;a?n.push(a,o):n.push(o)}return n},r.zero2=i,r.toHex=a,r.encode=function(e,t){return"hex"===t?a(e):e}},function(e,t,n){"use strict";var r=t;r.base=n(24),r.short=n(130),r.mont=n(131),r.edwards=n(132)},function(e,t,n){"use strict";var r=n(10).rotr32;function i(e,t,n){return e&t^~e&n}function a(e,t,n){return e&t^e&n^t&n}function o(e,t,n){return e^t^n}t.ft_1=function(e,t,n,r){return 0===e?i(t,n,r):1===e||3===e?o(t,n,r):2===e?a(t,n,r):void 0},t.ch32=i,t.maj32=a,t.p32=o,t.s0_256=function(e){return r(e,2)^r(e,13)^r(e,22)},t.s1_256=function(e){return r(e,6)^r(e,11)^r(e,25)},t.g0_256=function(e){return r(e,7)^r(e,18)^e>>>3},t.g1_256=function(e){return r(e,17)^r(e,19)^e>>>10}},function(e,t,n){"use strict";var r=n(10),i=n(18),a=n(72),o=n(6),s=r.sum32,c=r.sum32_4,u=r.sum32_5,l=a.ch32,f=a.maj32,A=a.s0_256,h=a.s1_256,p=a.g0_256,d=a.g1_256,g=i.BlockHash,y=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function v(){if(!(this instanceof v))return new v;g.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=y,this.W=new Array(64)}r.inherits(v,g),e.exports=v,v.blockSize=512,v.outSize=256,v.hmacStrength=192,v.padLength=64,v.prototype._update=function(e,t){for(var n=this.W,r=0;r<16;r++)n[r]=e[t+r];for(;r>6],i=0==(32&n);if(31==(31&n)){var a=n;for(n=0;128==(128&a);){if(a=e.readUInt8(t),e.isError(a))return a;n<<=7,n|=127&a}}else n&=31;return{cls:r,primitive:i,tag:n,tagStr:s.tag[n]}}function f(e,t,n){var r=e.readUInt8(n);if(e.isError(r))return r;if(!t&&128===r)return null;if(0==(128&r))return r;var i=127&r;if(i>4)return e.error("length octect is too long");r=0;for(var a=0;a=31?r.error("Multi-octet tag encoding unsupported"):(t||(i|=32),i|s.tagClassByName[n||"universal"]<<6)}(e,t,n,this.reporter);if(r.length<128)return(a=new i(2))[0]=o,a[1]=r.length,this._createEncoderBuffer([a,r]);for(var c=1,u=r.length;u>=256;u>>=8)c++;(a=new i(2+c))[0]=o,a[1]=128|c,u=1+c;for(var l=r.length;l>0;u--,l>>=8)a[u]=255&l;return this._createEncoderBuffer([a,r])},u.prototype._encodeStr=function(e,t){if("bitstr"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===t){for(var n=new i(2*e.length),r=0;r=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}var a=0;for(r=0;r=128;o>>=7)a++}var s=new i(a),c=s.length-1;for(r=e.length-1;r>=0;r--)for(o=e[r],s[c--]=127&o;(o>>=7)>0;)s[c--]=128|127&o;return this._createEncoderBuffer(s)},u.prototype._encodeTime=function(e,t){var n,r=new Date(e);return"gentime"===t?n=[l(r.getFullYear()),l(r.getUTCMonth()+1),l(r.getUTCDate()),l(r.getUTCHours()),l(r.getUTCMinutes()),l(r.getUTCSeconds()),"Z"].join(""):"utctime"===t?n=[l(r.getFullYear()%100),l(r.getUTCMonth()+1),l(r.getUTCDate()),l(r.getUTCHours()),l(r.getUTCMinutes()),l(r.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+t+" time is not supported yet"),this._encodeStr(n,"octstr")},u.prototype._encodeNull=function(){return this._createEncoderBuffer("")},u.prototype._encodeInt=function(e,t){if("string"==typeof e){if(!t)return this.reporter.error("String int or enum given, but no values map");if(!t.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=t[e]}if("number"!=typeof e&&!i.isBuffer(e)){var n=e.toArray();!e.sign&&128&n[0]&&n.unshift(0),e=new i(n)}if(i.isBuffer(e)){var r=e.length;0===e.length&&r++;var a=new i(r);return e.copy(a),0===e.length&&(a[0]=0),this._createEncoderBuffer(a)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);r=1;for(var o=e;o>=256;o>>=8)r++;for(o=(a=new Array(r)).length-1;o>=0;o--)a[o]=255&e,e>>=8;return 128&a[0]&&a.unshift(0),this._createEncoderBuffer(new i(a))},u.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},u.prototype._use=function(e,t){return"function"==typeof e&&(e=e(t)),e._getEncoder("der").tree},u.prototype._skipDefault=function(e,t,n){var r,i=this._baseState;if(null===i.default)return!1;var a=e.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,t,n).join()),a.length!==i.defaultBuffer.length)return!1;for(r=0;r=0;--i){var a=this.tryEntries[i],o=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(s&&c){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),w(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;w(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:B(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}("object"===t(e)?e.exports:{});try{regeneratorRuntime=n}catch(e){Function("r","regeneratorRuntime = r")(n)}}).call(this,n(42)(e))},function(e,t,n){(function(r,i,a,o){var s,c;function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}void 0===(c="function"==typeof(s=function(t){"use strict";var s;void 0===(s=t)&&(s={});var c=s;"object"!=u(c.sodium)&&("object"==(void 0===r?"undefined":u(r))?c=r:"object"==("undefined"==typeof window?"undefined":u(window))&&(c=window)),"object"==u(c.sodium)&&"number"==typeof c.sodium.totalMemory&&(s.TOTAL_MEMORY=c.sodium.totalMemory);var l=s;return s.ready=new Promise((function(t,r){(c=l).onAbort=r,c.print=function(e){},c.printErr=function(e){},c.onRuntimeInitialized=function(){try{c._crypto_secretbox_keybytes(),t()}catch(e){r(e)}},c.useBackupModule=function(){var t,r=void 0!==(r={})?r:{},s={};for(t in r)r.hasOwnProperty(t)&&(s[t]=r[t]);var c,f,A,h,p=[],d=!1;c="object"==("undefined"==typeof window?"undefined":u(window)),f="function"==typeof importScripts,A="object"==(void 0===i?"undefined":u(i))&&"object"==u(i.versions)&&"string"==typeof i.versions.node,d=A&&!c&&!f,h=!c&&!d&&!f;var g,y,v,b,m,I="";d?(I=a+"/",g=function(e,t){var r;return(r=he(e))||(b||(b=n(44)),m||(m=n(45)),e=m.normalize(e),r=b.readFileSync(e)),t?r:r.toString()},v=function(e){var t=g(e,!0);return t.buffer||(t=new Uint8Array(t)),k(t.buffer),t},i.argv.length>1&&i.argv[1].replace(/\\/g,"/"),p=i.argv.slice(2),e.exports=r,i.on("unhandledRejection",W),r.inspect=function(){return"[Emscripten Module object]"}):h?("undefined"!=typeof read&&(g=function(e){var t=he(e);return t?fe(t):read(e)}),v=function(e){var t;return(t=he(e))?t:"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(k("object"==u(t=read(e,"binary"))),t)},"undefined"!=typeof scriptArgs?p=scriptArgs:void 0!==arguments&&(p=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(c||f)&&(f?I=self.location.href:document.currentScript&&(I=document.currentScript.src),I=0!==I.indexOf("blob:")?I.substr(0,I.lastIndexOf("/")+1):"",g=function(e){try{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText}catch(t){var n=he(e);if(n)return fe(n);throw t}},f&&(v=function(e){try{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}catch(t){var n=he(e);if(n)return n;throw t}}),y=function(e,t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=function(){if(200==r.status||0==r.status&&r.response)t(r.response);else{var i=he(e);i?t(i.buffer):n()}},r.onerror=n,r.send(null)});var w=r.print||void 0,C=r.printErr||void 0;for(t in s)s.hasOwnProperty(t)&&(r[t]=s[t]);s=null,r.arguments&&(p=r.arguments),r.thisProgram&&r.thisProgram,r.quit&&r.quit,new Array(8);var B=0;r.wasmBinary&&r.wasmBinary,r.noExitRuntime&&r.noExitRuntime;var E=!1;function k(e,t){e||W("Assertion failed: "+t)}var _,S,Q,x,D,P,M,F="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function O(e,t){return e?function(e,t,n){for(var r=t+n,i=t;e[i]&&!(i>=r);)++i;if(i-t>16&&e.subarray&&F)return F.decode(e.subarray(t,i));for(var a="";t>10,56320|1023&u)}}else a+=String.fromCharCode((31&o)<<6|s)}else a+=String.fromCharCode(o)}return a}(Q,e,t):""}function R(e,t){return e%t>0&&(e+=t-e%t),e}function T(e){_=e,r.HEAP8=S=new Int8Array(e),r.HEAP16=x=new Int16Array(e),r.HEAP32=D=new Int32Array(e),r.HEAPU8=Q=new Uint8Array(e),r.HEAPU16=new Uint16Array(e),r.HEAPU32=new Uint32Array(e),r.HEAPF32=P=new Float32Array(e),r.HEAPF64=M=new Float64Array(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var j=r.TOTAL_MEMORY||16777216;function H(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var n=t.func;"number"==typeof n?void 0===t.arg?r.dynCall_v(n):r.dynCall_vi(n,t.arg):n(void 0===t.arg?null:t.arg)}else t()}}j=(_=r.buffer?r.buffer:new ArrayBuffer(j)).byteLength,T(_),D[8808]=5278304;var N=[],U=[],L=[],K=[],G=Math.abs,$=Math.ceil,Y=Math.floor,J=Math.min,V=0,z=null,q=null;function W(e){throw r.onAbort&&r.onAbort(e),w(e+=""),C(e),E=!0,"abort("+e+"). Build with -s ASSERTIONS=1 for more info."}r.preloadedImages={},r.preloadedAudios={};var X,Z,ee=null,te="data:application/octet-stream;base64,";function ne(e){return String.prototype.startsWith?e.startsWith(te):0===e.indexOf(te)}var re=[function(){return r.getRandomValue()},function(){if(void 0===r.getRandomValue)try{var e="object"==("undefined"==typeof window?"undefined":u(window))?window:self,t=void 0!==e.crypto?e.crypto:e.msCrypto,i=function(){var e=new Uint32Array(1);return t.getRandomValues(e),e[0]>>>0};i(),r.getRandomValue=i}catch(e){try{var a=n(46),o=function(){var e=a.randomBytes(4);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0};o(),r.getRandomValue=o}catch(e){throw"No secure random number generator found"}}}];function ie(e){return e}function ae(e){return e.replace(/\b__Z[\w\d_]+/g,(function(e){return e==e?e:e+" ["+e+"]"}))}function oe(){var e=new Error;if(!e.stack){try{throw new Error(0)}catch(t){e=t}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}function se(){return S.length}function ce(e){try{var t=new ArrayBuffer(e);if(t.byteLength!=e)return;return new Int8Array(t).set(S),ye(t),T(t),1}catch(e){}}function ue(e){return r.___errno_location&&(D[r.___errno_location()>>2]=e),e}ee="data:application/octet-stream;base64,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v2xF/xZF9QEXy7IAqmOqAEH4bwAlbJn/QCVFAABYPv5ZlJD/v0TgAfEnNQApy+3/kX7C/90q/f8ZY5cAYf3fAUpzMf8Gr0j/O7DLAHy3+QHk5GMAgQzP/qjAw//MsBD+mOqrAE0lVf8heIf/jsLjAR/WOgDVu33/6C48/750Kv6XshP/Mz7t/szswQDC6DwArCKd/70QuP5nA1//jekk/ikZC/8Vw6YAdvUtAEPVlf+fDBL/u6TjAaAZBQAMTsMBK8XhADCOKf7Emzz/38cSAZGInAD8dan+keLuAO8XawBttbz/5nAx/kmq7f/nt+P/UNwUAMJrfwF/zWUALjTFAdKrJP9YA1r/OJeNAGC7//8qTsgA/kZGAfR9qADMRIoBfNdGAGZCyP4RNOQAddyP/sv4ewA4Eq7/upek/zPo0AGg5Cv/+R0ZAUS+PwANAAAAAP8AAAAA9QAAAAAAAPsAAAAAAAD9AAAAAPMAAAAABwAAAAAAAwAAAADzAAAAAAUAAAAAAAAAAAsAAAAAAAsAAAAA8wAAAAAAAP0AAAAAAP8AAAAAAwAAAAD1AAAAAAAAAA8AAAAAAP8AAAAA/wAAAAAHAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbolY/CsiewRcP0ifLvmPDV36wF08YzObE4AohtU/wFxxdqcD1N2E+6PAt2DRBnDyogU/osOczGTsf9d5KsA3rs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////3/t0/VcGmMSWNac96Le+d4UAAAAAAAAAAAAAAAAAAAAEAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuABfnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8RV+z///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f1NpZ0VkMjU1MTkgbm8gRWQyNTUxOSBjb2xsaXNpb25zAQAAAAAAAAAAAAAAAAAAAFMtPmJ1ZmxlbiA8PSBCTEFLRTJCX0JMT0NLQllURVMAY3J5cHRvX2dlbmVyaWNoYXNoL2JsYWtlMmIvcmVmL2JsYWtlMmItcmVmLmMAYmxha2UyYl9maW5hbABvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAJGFyZ29uMmlkACRhcmdvbjJpACR2PQAkbT0ALHQ9ACxwPQAkYXJnb24yaWQkdj0AJGFyZ29uMmkkdj0AJGFyZ29uMmlkJAAkYXJnb24yaSQAInsgcmV0dXJuIE1vZHVsZS5nZXRSYW5kb21WYWx1ZSgpOyB9IgB7IGlmIChNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPT09IHVuZGVmaW5lZCkgeyB0cnkgeyB2YXIgd2luZG93XyA9ICdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogc2VsZjsgdmFyIGNyeXB0b18gPSB0eXBlb2Ygd2luZG93Xy5jcnlwdG8gIT09ICd1bmRlZmluZWQnID8gd2luZG93Xy5jcnlwdG8gOiB3aW5kb3dfLm1zQ3J5cHRvOyB2YXIgcmFuZG9tVmFsdWVzU3RhbmRhcmQgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IG5ldyBVaW50MzJBcnJheSgxKTsgY3J5cHRvXy5nZXRSYW5kb21WYWx1ZXMoYnVmKTsgcmV0dXJuIGJ1ZlswXSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVzU3RhbmRhcmQoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVzU3RhbmRhcmQ7IH0gY2F0Y2ggKGUpIHsgdHJ5IHsgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB2YXIgcmFuZG9tVmFsdWVOb2RlSlMgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IGNyeXB0b1sncmFuZG9tQnl0ZXMnXSg0KTsgcmV0dXJuIChidWZbMF0gPDwgMjQgfCBidWZbMV0gPDwgMTYgfCBidWZbMl0gPDwgOCB8IGJ1ZlszXSkgPj4+IDA7IH07IHJhbmRvbVZhbHVlTm9kZUpTKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlTm9kZUpTOyB9IGNhdGNoIChlKSB7IHRocm93ICdObyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm91bmQnOyB9IH0gfSB9AExpYnNvZGl1bURSR2J1Zl9sZW4gPD0gU0laRV9NQVgAcmFuZG9tYnl0ZXMvcmFuZG9tYnl0ZXMuYwByYW5kb21ieXRlcwBiNjRfcG9zIDw9IGI2NF9sZW4Ac29kaXVtL2NvZGVjcy5jAHNvZGl1bV9iaW4yYmFzZTY0ADEuMC4xOA==";var le=!1;function fe(e){for(var t=[],n=0;n255&&(le&&k(!1,"Character code "+r+" ("+String.fromCharCode(r)+") at offset "+n+" not in 0x00-0xFF."),r&=255),t.push(String.fromCharCode(r))}return t.join("")}var Ae="function"==typeof atob?atob:function(e){var t,n,r,i,a,o,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",u=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{t=s.indexOf(e.charAt(u++))<<2|(i=s.indexOf(e.charAt(u++)))>>4,n=(15&i)<<4|(a=s.indexOf(e.charAt(u++)))>>2,r=(3&a)<<6|(o=s.indexOf(e.charAt(u++))),c+=String.fromCharCode(t),64!==a&&(c+=String.fromCharCode(n)),64!==o&&(c+=String.fromCharCode(r))}while(u>2]=d,i[h+4>>2]=p,A=A+1|0}while(16!=(0|A));A=e,h=(t=o)+64|0;do{r[t>>0]=0|r[A>>0],t=t+1|0,A=A+1|0}while((0|t)<(0|h));for(i[o+88>>2]=1595750129,i[o+88+4>>2]=-1521486534,G=-1377402159^(a[e+64>>0]|a[e+64+1>>0]<<8|a[e+64+2>>0]<<16|a[e+64+3>>0]<<24),K=1359893119^(a[e+64+4>>0]|a[e+64+4+1>>0]<<8|a[e+64+4+2>>0]<<16|a[e+64+4+3>>0]<<24),P=725511199^(a[e+72>>0]|a[e+72+1>>0]<<8|a[e+72+2>>0]<<16|a[e+72+3>>0]<<24),M=-1694144372^(a[e+72+4>>0]|a[e+72+4+1>>0]<<8|a[e+72+4+2>>0]<<16|a[e+72+4+3>>0]<<24),C=-79577749^(a[e+80>>0]|a[e+80+1>>0]<<8|a[e+80+2>>0]<<16|a[e+80+3>>0]<<24),B=528734635^(a[e+80+4>>0]|a[e+80+4+1>>0]<<8|a[e+80+4+2>>0]<<16|a[e+80+4+3>>0]<<24),ee=327033209^(a[e+88>>0]|a[e+88+1>>0]<<8|a[e+88+2>>0]<<16|a[e+88+3>>0]<<24),Z=1541459225^(a[e+88+4>>0]|a[e+88+4+1>>0]<<8|a[e+88+4+2>>0]<<16|a[e+88+4+3>>0]<<24),b=0|i[o+32>>2],m=0|i[o+32+4>>2],m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ye=0|Qn(0|($=0|i[o+128>>2]),0|(Y=0|i[o+128+4>>2]),0|b,0|m)),0|(ge=0|u()),0|i[o>>2],0|i[o+4>>2]))^G,(ye=0|u())^K,32)),0|(G=0|u()),-205731576,1779033703))^b,(d=0|u())^m,24),b=0|u(),te=0|i[o+128+8>>2],ne=0|i[o+128+8+4>>2],G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|m,0|b,0|ge,0|ye)),0|u(),0|te,0|ne))^K,(ge=0|u())^G,16),K=0|u(),i[o+96>>2]=G,i[o+96+4>>2]=K,d=0|Qn(0|G,0|K,0|t,0|d),t=0|u(),i[o+64>>2]=d,i[o+64+4>>2]=t,b=0|Yt(d^m,t^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,q=0|i[o+40>>2],W=0|i[o+40+4>>2],W=0|Yt((v=0|Qn(0|(M=0|Yt((Ae=0|Qn(0|(fe=0|Qn(0|(h=0|i[o+128+16>>2]),0|(A=0|i[o+128+16+4>>2]),0|q,0|W)),0|(Ae=0|u()),0|i[o+8>>2],0|i[o+8+4>>2]))^P,(fe=0|u())^M,32)),0|(P=0|u()),-2067093701,-1150833019))^q,(I=0|u())^W,24),q=0|u(),w=0|i[o+128+24>>2],E=0|i[o+128+24+4>>2],P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|W,0|q,0|Ae,0|fe)),0|u(),0|w,0|E))^M,(Ae=0|u())^P,16),M=0|u(),i[o+104>>2]=P,i[o+104+4>>2]=M,I=0|Qn(0|P,0|M,0|v,0|I),v=0|u(),i[o+72>>2]=I,i[o+72+4>>2]=v,q=0|Yt(I^W,v^q,63),W=0|u(),N=0|i[o+48>>2],U=0|i[o+48+4>>2],U=0|Yt((z=0|Qn(0|(B=0|Yt((ue=0|Qn(0|(ce=0|Qn(0|(f=0|i[o+128+32>>2]),0|(he=0|i[o+128+32+4>>2]),0|N,0|U)),0|(ue=0|u()),0|i[o+16>>2],0|i[o+16+4>>2]))^C,(ce=0|u())^B,32)),0|(C=0|u()),-23791573,1013904242))^N,(X=0|u())^U,24),N=0|u(),s=0|i[o+128+40>>2],S=0|i[o+128+40+4>>2],N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|U,0|N,0|ue,0|ce)),0|u(),0|s,0|S))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),x=0|i[o+56>>2],Q=0|i[o+56+4>>2],Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ae=0|Qn(0|(_=0|i[o+128+48>>2]),0|(k=0|i[o+128+48+4>>2]),0|x,0|Q)),0|(oe=0|u()),0|i[o+24>>2],0|i[o+24+4>>2]))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),1595750129,-1521486534))^x,(L=0|u())^Q,24),x=0|u(),D=0|i[o+128+56>>2],F=0|i[o+128+56+4>>2],x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|Q,0|x,0|oe,0|ae)),0|u(),0|D,0|F))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),J=0|i[o+128+64>>2],V=0|i[o+128+64+4>>2],W=0|Yt((z=0|Qn(0|(Z=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|q,0|W,0|ye,0|ge)),0|u(),0|J,0|V))^ee,(ye=0|u())^Z,32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),l=0|i[o+128+72>>2],le=0|i[o+128+72+4>>2],ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|W,0|q,0|ge,0|ye)),0|u(),0|l,0|le))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,X=0|Qn(0|ee,0|Z,0|z,0|X),z=0|u(),i[o+80>>2]=X,i[o+80+4>>2]=z,q=0|Yt(X^W,z^q,63),W=0|u(),re=0|i[o+128+80>>2],ie=0|i[o+128+80+4>>2],U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|N,0|U,0|fe,0|Ae)),0|u(),0|re,0|ie))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),O=0|i[o+128+88>>2],R=0|i[o+128+88+4>>2],N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|U,0|N,0|Ae,0|fe)),0|u(),0|O,0|R))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),p=0|i[o+128+96>>2],g=0|i[o+128+96+4>>2],Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|x,0|Q,0|ce,0|ue)),0|u(),0|p,0|g))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),c=0|i[o+128+104>>2],se=0|i[o+128+104+4>>2],x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|Q,0|x,0|ue,0|ce)),0|u(),0|c,0|se))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),pe=0|i[o+128+112>>2],de=0|i[o+128+112+4>>2],m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(oe=0|Qn(0|ae,0|oe,0|b,0|m)),0|u(),0|pe,0|de))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),T=0|i[o+128+120>>2],j=0|i[o+128+120+4>>2],b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|m,0|b,0|oe,0|ae)),0|u(),0|T,0|j))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|pe,0|de,0|ye,0|ge)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|re,0|ie)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|f,0|he)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|J,0|V)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|l,0|le)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|T,0|j,0|ue,0|ce)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|c,0|se)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|_,0|k)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|te,0|ne)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|p,0|g)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|$,0|Y)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|h,0|A)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|O,0|R)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|D,0|F)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|s,0|S)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|w,0|E)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|O,0|R)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|J,0|V)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|p,0|g)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|$,0|Y)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|s,0|S)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|h,0|A)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|T,0|j)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|c,0|se)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|re,0|ie)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|pe,0|de)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|w,0|E)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|_,0|k)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|D,0|F)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|te,0|ne)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|l,0|le)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|f,0|he)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|D,0|F)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|l,0|le)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|w,0|E)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|te,0|ne)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|c,0|se)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|p,0|g)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|O,0|R)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|pe,0|de)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|h,0|A)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|_,0|k)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|s,0|S)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|re,0|ie)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|f,0|he)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|$,0|Y)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|T,0|j)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|J,0|V)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|l,0|le)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|$,0|Y)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|s,0|S)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|D,0|F)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|h,0|A)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|f,0|he)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|re,0|ie)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|T,0|j)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|pe,0|de)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|te,0|ne)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|O,0|R)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|p,0|g)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|_,0|k)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|J,0|V)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|w,0|E)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|c,0|se)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|h,0|A)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|p,0|g)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|_,0|k)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|re,0|ie)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|$,0|Y)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|O,0|R)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|J,0|V)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|w,0|E)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|f,0|he)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|c,0|se)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|D,0|F)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|s,0|S)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|T,0|j)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|pe,0|de)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|te,0|ne)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|l,0|le)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|p,0|g)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|s,0|S)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|te,0|ne)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|T,0|j)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|pe,0|de)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|c,0|se)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|f,0|he)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|re,0|ie)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|$,0|Y)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|D,0|F)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|_,0|k)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|w,0|E)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|l,0|le)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|h,0|A)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|J,0|V)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|O,0|R)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|c,0|se)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|O,0|R)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|D,0|F)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|pe,0|de)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|p,0|g)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|te,0|ne)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|w,0|E)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|l,0|le)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|s,0|S)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|$,0|Y)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|T,0|j)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|f,0|he)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|J,0|V)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|_,0|k)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|h,0|A)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|re,0|ie)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|_,0|k)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|T,0|j)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|pe,0|de)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|l,0|le)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|O,0|R)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|w,0|E)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|$,0|Y)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|J,0|V)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|p,0|g)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|h,0|A)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|c,0|se)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|D,0|F)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|te,0|ne)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|f,0|he)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|re,0|ie)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|s,0|S)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|re,0|ie)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|h,0|A)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|J,0|V)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|f,0|he)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|D,0|F)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|_,0|k)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|te,0|ne)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|s,0|S)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|T,0|j)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|O,0|R)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|l,0|le)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|pe,0|de)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|w,0|E)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|p,0|g)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|c,0|se)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|$,0|Y)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|$,0|Y)),0|u(),0|b,0|m))^G,(ye=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|te,0|ne)),0|u(),0|m,0|b))^K,(ge=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(ve=0|Qn(0|q,0|W,0|h,0|A)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|w,0|E)),0|u(),0|W,0|q))^M,(Ae=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(ve=0|Qn(0|N,0|U,0|f,0|he)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|s,0|S)),0|u(),0|U,0|N))^B,(ue=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|x,0|Q,0|_,0|k)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|D,0|F)),0|u(),0|Q,0|x))^Z,(oe=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ge=0|Qn(0|(ge=0|Qn(0|ye,0|ge,0|J,0|V)),0|u(),0|q,0|W)),Z^(ye=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),ee=0|Yt((ye=0|Qn(0|(ye=0|Qn(0|ge,0|ye,0|l,0|le)),0|u(),0|W,0|q))^Z,(ge=0|u())^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,q=0|Yt((X=0|Qn(0|ee,0|Z,0|z,0|X))^W,(z=0|u())^q,63),W=0|u(),U=0|Yt((H=0|Qn(0|(K=0|Yt((Ae=0|Qn(0|(Ae=0|Qn(0|fe,0|Ae,0|re,0|ie)),0|u(),0|N,0|U))^G,(fe=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),N=0|Yt((L=0|Qn(0|(G=0|Yt((fe=0|Qn(0|(fe=0|Qn(0|Ae,0|fe,0|O,0|R)),0|u(),0|U,0|N))^K,(Ae=0|u())^G,16)),0|(K=0|u()),0|H,0|L))^U,(H=0|u())^N,63),U=0|u(),Q=0|Yt((t=0|Qn(0|(M=0|Yt((ue=0|Qn(0|(ue=0|Qn(0|ce,0|ue,0|p,0|g)),0|u(),0|x,0|Q))^P,(ce=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),x=0|Yt((d=0|Qn(0|(P=0|Yt((ce=0|Qn(0|(ce=0|Qn(0|ue,0|ce,0|c,0|se)),0|u(),0|Q,0|x))^M,(ue=0|u())^P,16)),0|(M=0|u()),0|t,0|d))^Q,(t=0|u())^x,63),Q=0|u(),m=0|Yt((v=0|Qn(0|(B=0|Yt((oe=0|Qn(0|(ve=0|Qn(0|b,0|m,0|pe,0|de)),0|u(),0|ae,0|oe))^C,(ae=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),b=0|Yt((I=0|Qn(0|(C=0|Yt((ae=0|Qn(0|(ae=0|Qn(0|oe,0|ae,0|T,0|j)),0|u(),0|m,0|b))^B,(oe=0|u())^C,16)),0|(B=0|u()),0|v,0|I))^m,(v=0|u())^b,63),m=0|u(),m=0|Yt((t=0|Qn(0|(K=0|Yt((de=0|Qn(0|(de=0|Qn(0|ye,0|ge,0|pe,0|de)),0|u(),0|b,0|m))^G,(pe=0|u())^K,32)),0|(G=0|u()),0|d,0|t))^b,(d=0|u())^m,24),b=0|u(),b=0|Yt((d=0|Qn(0|(G=0|Yt((ie=0|Qn(0|(ie=0|Qn(0|de,0|pe,0|re,0|ie)),0|u(),0|m,0|b))^K,(re=0|u())^G,16)),0|(K=0|u()),0|t,0|d))^m,(t=0|u())^b,63),m=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=m,W=0|Yt((v=0|Qn(0|(M=0|Yt(P^(Ae=0|Qn(0|(he=0|Qn(0|q,0|W,0|f,0|he)),0|u(),0|fe,0|Ae)),M^(fe=0|u()),32)),0|(P=0|u()),0|I,0|v))^q,(I=0|u())^W,24),q=0|u(),q=0|Yt((I=0|Qn(0|(P=0|Yt((V=0|Qn(0|(V=0|Qn(0|Ae,0|fe,0|J,0|V)),0|u(),0|W,0|q))^M,(J=0|u())^P,16)),0|(M=0|u()),0|v,0|I))^W,(v=0|u())^q,63),W=0|u(),U=0|Yt((z=0|Qn(0|(B=0|Yt(C^(ue=0|Qn(0|(le=0|Qn(0|N,0|U,0|l,0|le)),0|u(),0|ce,0|ue)),B^(ce=0|u()),32)),0|(C=0|u()),0|X,0|z))^N,(X=0|u())^U,24),N=0|u(),N=0|Yt((X=0|Qn(0|(C=0|Yt((j=0|Qn(0|(j=0|Qn(0|ue,0|ce,0|T,0|j)),0|u(),0|U,0|N))^B,(T=0|u())^C,16)),0|(B=0|u()),0|z,0|X))^U,(z=0|u())^N,63),U=0|u(),Q=0|Yt((H=0|Qn(0|(Z=0|Yt((oe=0|Qn(0|(se=0|Qn(0|x,0|Q,0|c,0|se)),0|u(),0|ae,0|oe))^ee,(ae=0|u())^Z,32)),0|(ee=0|u()),0|L,0|H))^x,(L=0|u())^Q,24),x=0|u(),x=0|Yt((L=0|Qn(0|(ee=0|Yt((k=0|Qn(0|(k=0|Qn(0|oe,0|ae,0|_,0|k)),0|u(),0|Q,0|x))^Z,(_=0|u())^ee,16)),0|(Z=0|u()),0|H,0|L))^Q,(H=0|u())^x,63),Q=0|u(),W=0|Yt((z=0|Qn(0|(Z=0|Yt(ee^(ne=0|Qn(0|(ne=0|Qn(0|ie,0|re,0|te,0|ne)),0|u(),0|q,0|W)),Z^(te=0|u()),32)),0|(ee=0|u()),0|X,0|z))^q,(X=0|u())^W,24),q=0|u(),g=0|Qn(0|(g=0|Qn(0|ne,0|te,0|p,0|g)),0|u(),0|W,0|q),p=0|u(),i[o>>2]=g,i[o+4>>2]=p,ee=0|Yt(g^Z,p^ee,16),Z=0|u(),i[o+120>>2]=ee,i[o+120+4>>2]=Z,X=0|Qn(0|ee,0|Z,0|z,0|X),z=0|u(),i[o+80>>2]=X,i[o+80+4>>2]=z,q=0|Yt(X^W,z^q,63),z=0|u(),i[o+40>>2]=q,i[o+40+4>>2]=z,U=0|Yt((H=0|Qn(0|(K=0|Yt((Y=0|Qn(0|(Y=0|Qn(0|V,0|J,0|$,0|Y)),0|u(),0|N,0|U))^G,($=0|u())^K,32)),0|(G=0|u()),0|L,0|H))^N,(L=0|u())^U,24),N=0|u(),A=0|Qn(0|(A=0|Qn(0|Y,0|$,0|h,0|A)),0|u(),0|U,0|N),h=0|u(),i[o+8>>2]=A,i[o+8+4>>2]=h,G=0|Yt(A^K,h^G,16),K=0|u(),i[o+96>>2]=G,i[o+96+4>>2]=K,L=0|Qn(0|G,0|K,0|H,0|L),H=0|u(),i[o+88>>2]=L,i[o+88+4>>2]=H,N=0|Yt(L^U,H^N,63),H=0|u(),i[o+48>>2]=N,i[o+48+4>>2]=H,Q=0|Yt((t=0|Qn(0|(M=0|Yt((R=0|Qn(0|(R=0|Qn(0|j,0|T,0|O,0|R)),0|u(),0|x,0|Q))^P,(O=0|u())^M,32)),0|(P=0|u()),0|d,0|t))^x,(d=0|u())^Q,24),x=0|u(),F=0|Qn(0|(F=0|Qn(0|R,0|O,0|D,0|F)),0|u(),0|Q,0|x),D=0|u(),i[o+16>>2]=F,i[o+16+4>>2]=D,P=0|Yt(F^M,D^P,16),D=0|u(),i[o+104>>2]=P,i[o+104+4>>2]=D,d=0|Qn(0|P,0|D,0|t,0|d),t=0|u(),i[o+64>>2]=d,i[o+64+4>>2]=t,x=0|Yt(d^Q,t^x,63),Q=0|u(),i[o+56>>2]=x,i[o+56+4>>2]=Q,m=0|Yt((v=0|Qn(0|(B=0|Yt((_=0|Qn(0|(S=0|Qn(0|b,0|m,0|s,0|S)),0|u(),0|k,0|_))^C,(k=0|u())^B,32)),0|(C=0|u()),0|I,0|v))^b,(I=0|u())^m,24),b=0|u(),E=0|Qn(0|(E=0|Qn(0|_,0|k,0|w,0|E)),0|u(),0|m,0|b),w=0|u(),i[o+24>>2]=E,i[o+24+4>>2]=w,C=0|Yt(E^B,w^C,16),w=0|u(),i[o+112>>2]=C,i[o+112+4>>2]=w,I=0|Qn(0|C,0|w,0|v,0|I),v=0|u(),i[o+72>>2]=I,i[o+72+4>>2]=v,b=0|Yt(I^m,v^b,63),v=0|u(),i[o+32>>2]=b,i[o+32+4>>2]=v,d=g^(a[e>>0]|a[e+1>>0]<<8|a[e+2>>0]<<16|a[e+3>>0]<<24)^d,t=p^(a[e+4>>0]|a[e+4+1>>0]<<8|a[e+4+2>>0]<<16|a[e+4+3>>0]<<24)^t,r[e>>0]=d,r[e+1>>0]=d>>8,r[e+2>>0]=d>>16,r[e+3>>0]=d>>24,r[e+4>>0]=t,r[e+4+1>>0]=t>>8,r[e+4+2>>0]=t>>16,r[e+4+3>>0]=t>>24,t=1;ye=o+(t+8<<3)|0,ge=A^(a[(ve=e+(t<<3)|0)>>0]|a[ve+1>>0]<<8|a[ve+2>>0]<<16|a[ve+3>>0]<<24)^i[ye>>2],ye=h^(a[ve+4>>0]|a[ve+4+1>>0]<<8|a[ve+4+2>>0]<<16|a[ve+4+3>>0]<<24)^i[ye+4>>2],r[ve>>0]=ge,r[ve+1>>0]=ge>>8,r[ve+2>>0]=ge>>16,r[ve+3>>0]=ge>>24,r[ve+4>>0]=ye,r[ve+4+1>>0]=ye>>8,r[ve+4+2>>0]=ye>>16,r[ve+4+3>>0]=ye>>24,8!=(0|(t=t+1|0));)A=0|i[o+(t<<3)>>2],h=0|i[o+(t<<3)+4>>2];y=n}function b(e,t,n,i){e|=0,n|=0,i|=0;var a,o,s,c,l,f,A,h,p,d,g,y,v,b,m,I,w,C,B,E,k,_=0,S=0,Q=0,x=0,D=0,P=0,M=0,F=0,O=0,R=0,T=0,j=0,H=0,N=0,U=0,L=0,K=0,G=0,$=0,Y=0,J=0,V=0,z=0,q=0,W=0,X=0,Z=0,ee=0,te=0,ne=0,re=0,ie=0,ae=0,oe=0,se=0,ce=0,ue=0,le=0,fe=0,Ae=0,he=0,pe=0,de=0,ge=0,ye=0,ve=0,be=0,me=0,Ie=0,we=0,Ce=0,Be=0,Ee=0,ke=0,_e=0,Se=0,Qe=0,xe=0,De=0,Pe=0,Me=0,Fe=0,Oe=0,Re=0,Te=0,je=0,He=0,Ne=0,Ue=0,Le=0,Ke=0,Ge=0,$e=0,Ye=0,Je=0,Ve=0,ze=0,qe=0,We=0,Xe=0,Ze=0,et=0,tt=0,nt=0,rt=0,it=0,at=0,ot=0,st=0,ct=0,ut=0,lt=0,ft=0,At=0,ht=0,pt=0,dt=0,gt=0,yt=0,vt=0,mt=0,It=0,wt=0,Ct=0,Bt=0,Et=0,kt=0,_t=0,St=0,Qt=0,xt=0,Dt=0,Pt=0,Mt=0,Ft=0,Ot=0,Rt=0,Tt=0,jt=0,Ht=0,Nt=0,Ut=0,Lt=0,Kt=0,Gt=0,$t=0,Yt=0,Jt=0,Vt=0,zt=0,qt=0,Xt=0,en=0,nn=0,rn=0,an=0,on=0,sn=0,un=0,ln=0,fn=0,hn=0,pn=0,dn=0,gn=0,yn=0,vn=0,bn=0,mn=0,In=0,wn=0,Cn=0,Bn=0;ge=0|Wt(0|r[(t|=0)>>0],0|r[t+1>>0],0|r[t+2>>0]),u(),Mt=0|An(0|(Mt=0|bt(t+2|0)),0|u(),5),u(),Bt=0|An(0|(Bt=0|Wt(0|r[t+5>>0],0|r[t+6>>0],0|r[t+7>>0])),0|u(),2),u(),Pt=0|An(0|(Pt=0|bt(t+7|0)),0|u(),7),u(),yt=0|An(0|(yt=0|bt(t+10|0)),0|u(),4),u(),ie=0|An(0|(ie=0|Wt(0|r[t+13>>0],0|r[t+14>>0],0|r[t+15>>0])),0|u(),1),u(),Ie=0|An(0|(Ie=0|bt(t+15|0)),0|u(),6),u(),_=0|An(0|(_=0|Wt(0|r[t+18>>0],0|r[t+19>>0],0|r[t+20>>0])),0|u(),3),u(),ae=0|Wt(0|r[t+21>>0],0|r[t+22>>0],0|r[t+23>>0]),u(),J=0|An(0|(J=0|bt(t+23|0)),0|u(),5),u(),Be=0|An(0|(Be=0|Wt(0|r[t+26>>0],0|r[t+27>>0],0|r[t+28>>0])),0|u(),2),u(),Se=0|An(0|(Se=0|bt(t+28|0)),0|u(),7),Qe=0|u(),Gt=0|Wt(0|r[n>>0],0|r[n+1>>0],0|r[n+2>>0]),u(),mt=0|An(0|(mt=0|bt(n+2|0)),0|u(),5),u(),nt=0|An(0|(nt=0|Wt(0|r[n+5>>0],0|r[n+6>>0],0|r[n+7>>0])),0|u(),2),u(),S=0|An(0|(S=0|bt(n+7|0)),0|u(),7),u(),Q=0|An(0|(Q=0|bt(n+10|0)),0|u(),4),u(),L=0|An(0|(L=0|Wt(0|r[n+13>>0],0|r[n+14>>0],0|r[n+15>>0])),0|u(),1),u(),ze=0|An(0|(ze=0|bt(n+15|0)),0|u(),6),u(),ve=0|An(0|(ve=0|Wt(0|r[n+18>>0],0|r[n+19>>0],0|r[n+20>>0])),0|u(),3),u(),je=0|Wt(0|r[n+21>>0],0|r[n+22>>0],0|r[n+23>>0]),u(),te=0|An(0|(te=0|bt(n+23|0)),0|u(),5),u(),Ht=0|An(0|(Ht=0|Wt(0|r[n+26>>0],0|r[n+27>>0],0|r[n+28>>0])),0|u(),2),u(),he=0|An(0|(he=0|bt(n+28|0)),0|u(),7),Ae=0|u(),Ue=0|Wt(0|r[i>>0],0|r[i+1>>0],0|r[i+2>>0]),u(),re=0|An(0|(re=0|bt(i+2|0)),0|u(),5),u(),Ke=0|An(0|(Ke=0|Wt(0|r[i+5>>0],0|r[i+6>>0],0|r[i+7>>0])),0|u(),2),u(),Oe=0|An(0|(Oe=0|bt(i+7|0)),0|u(),7),u(),Te=0|An(0|(Te=0|bt(i+10|0)),0|u(),4),u(),qe=0|An(0|(qe=0|Wt(0|r[i+13>>0],0|r[i+14>>0],0|r[i+15>>0])),0|u(),1),u(),_t=0|An(0|(_t=0|bt(i+15|0)),0|u(),6),u(),M=0|An(0|(M=0|Wt(0|r[i+18>>0],0|r[i+19>>0],0|r[i+20>>0])),0|u(),3),u(),lt=0|Wt(0|r[i+21>>0],0|r[i+22>>0],0|r[i+23>>0]),u(),Ye=0|An(0|(Ye=0|bt(i+23|0)),0|u(),5),u(),pe=0|An(0|(pe=0|Wt(0|r[i+26>>0],0|r[i+27>>0],0|r[i+28>>0])),0|u(),2),u(),wt=0|An(0|(wt=0|bt(i+28|0)),0|u(),7),St=0|u(),Ne=0|Qn(2097151&Ue|0,0,0|(Ne=0|Zt(2097151&Gt|0,0,2097151&ge|0,0)),0|u()),Ue=0|u(),I=0|Zt(2097151&mt|0,0,2097151&ge|0,0),m=0|u(),b=0|Zt(2097151&Gt|0,0,2097151&Mt|0,0),Ze=0|u(),X=0|Zt(2097151&nt|0,0,2097151&ge|0,0),Le=0|u(),Ke=0|Qn(0|(Le=0|Qn(0|(Fe=0|Qn(0|(W=0|Zt(2097151&mt|0,0,2097151&Mt|0,0)),0|u(),0|(Fe=0|Zt(2097151&Gt|0,0,2097151&Bt|0,0)),0|u())),0|u(),0|X,0|Le)),0|u(),2097151&Ke|0,0),Le=0|u(),X=0|Zt(2097151&S|0,0,2097151&ge|0,0),Fe=0|u(),k=0|Zt(2097151&nt|0,0,2097151&Mt|0,0),W=0|u(),v=0|Zt(2097151&mt|0,0,2097151&Bt|0,0),y=0|u(),g=0|Zt(2097151&Gt|0,0,2097151&Pt|0,0),Bn=0|u(),fe=0|Zt(2097151&Q|0,0,2097151&ge|0,0),Re=0|u(),bn=0|Zt(2097151&S|0,0,2097151&Mt|0,0),We=0|u(),In=0|Zt(2097151&nt|0,0,2097151&Bt|0,0),T=0|u(),Te=0|Qn(0|(Re=0|Qn(0|(We=0|Qn(0|(T=0|Qn(0|(mn=0|Qn(0|(wn=0|Zt(2097151&mt|0,0,2097151&Pt|0,0)),0|u(),0|(mn=0|Zt(2097151&Gt|0,0,2097151&yt|0,0)),0|u())),0|u(),0|In,0|T)),0|u(),0|bn,0|We)),0|u(),0|fe,0|Re)),0|u(),2097151&Te|0,0),Re=0|u(),fe=0|Zt(2097151&L|0,0,2097151&ge|0,0),We=0|u(),bn=0|Zt(2097151&Q|0,0,2097151&Mt|0,0),T=0|u(),In=0|Zt(2097151&S|0,0,2097151&Bt|0,0),mn=0|u(),E=0|Zt(2097151&nt|0,0,2097151&Pt|0,0),wn=0|u(),d=0|Zt(2097151&mt|0,0,2097151&yt|0,0),p=0|u(),h=0|Zt(2097151&Gt|0,0,2097151&ie|0,0),Cn=0|u(),t=0|Zt(2097151&ze|0,0,2097151&ge|0,0),It=0|u(),un=0|Zt(2097151&L|0,0,2097151&Mt|0,0),x=0|u(),fn=0|Zt(2097151&Q|0,0,2097151&Bt|0,0),P=0|u(),pn=0|Zt(2097151&S|0,0,2097151&Pt|0,0),ln=0|u(),gn=0|Zt(2097151&nt|0,0,2097151&yt|0,0),hn=0|u(),_t=0|Qn(0|(It=0|Qn(0|(x=0|Qn(0|(P=0|Qn(0|(ln=0|Qn(0|(hn=0|Qn(0|(dn=0|Qn(0|(yn=0|Zt(2097151&mt|0,0,2097151&ie|0,0)),0|u(),0|(dn=0|Zt(2097151&Gt|0,0,2097151&Ie|0,0)),0|u())),0|u(),0|gn,0|hn)),0|u(),0|pn,0|ln)),0|u(),0|fn,0|P)),0|u(),0|un,0|x)),0|u(),0|t,0|It)),0|u(),2097151&_t|0,0),It=0|u(),t=0|Zt(2097151&ve|0,0,2097151&ge|0,0),x=0|u(),un=0|Zt(2097151&ze|0,0,2097151&Mt|0,0),P=0|u(),fn=0|Zt(2097151&L|0,0,2097151&Bt|0,0),ln=0|u(),pn=0|Zt(2097151&Q|0,0,2097151&Pt|0,0),hn=0|u(),gn=0|Zt(2097151&S|0,0,2097151&yt|0,0),dn=0|u(),B=0|Zt(2097151&nt|0,0,2097151&ie|0,0),yn=0|u(),A=0|Zt(2097151&mt|0,0,2097151&Ie|0,0),f=0|u(),l=0|Zt(2097151&Gt|0,0,2097151&_|0,0),vn=0|u(),Jt=0|Zt(2097151&je|0,0,2097151&ge|0,0),D=0|u(),Y=0|Zt(2097151&ve|0,0,2097151&Mt|0,0),ft=0|u(),$t=0|Zt(2097151&ze|0,0,2097151&Bt|0,0),Yt=0|u(),zt=0|Zt(2097151&L|0,0,2097151&Pt|0,0),$=0|u(),Xt=0|Zt(2097151&Q|0,0,2097151&yt|0,0),Vt=0|u(),nn=0|Zt(2097151&S|0,0,2097151&ie|0,0),qt=0|u(),an=0|Zt(2097151&nt|0,0,2097151&Ie|0,0),en=0|u(),lt=0|Qn(0|(ft=0|Qn(0|(D=0|Qn(0|(Yt=0|Qn(0|($=0|Qn(0|(Vt=0|Qn(0|(qt=0|Qn(0|(en=0|Qn(0|(rn=0|Qn(0|(on=0|Zt(2097151&mt|0,0,2097151&_|0,0)),0|u(),0|(rn=0|Zt(2097151&Gt|0,0,2097151&ae|0,0)),0|u())),0|u(),0|an,0|en)),0|u(),0|nn,0|qt)),0|u(),0|Xt,0|Vt)),0|u(),0|zt,0|$)),0|u(),0|$t,0|Yt)),0|u(),0|Jt,0|D)),0|u(),0|Y,0|ft)),0|u(),2097151<|0,0),ft=0|u(),Y=0|Zt(2097151&te|0,0,2097151&ge|0,0),D=0|u(),Jt=0|Zt(2097151&je|0,0,2097151&Mt|0,0),Yt=0|u(),$t=0|Zt(2097151&ve|0,0,2097151&Bt|0,0),$=0|u(),zt=0|Zt(2097151&ze|0,0,2097151&Pt|0,0),Vt=0|u(),Xt=0|Zt(2097151&L|0,0,2097151&yt|0,0),qt=0|u(),nn=0|Zt(2097151&Q|0,0,2097151&ie|0,0),en=0|u(),an=0|Zt(2097151&S|0,0,2097151&Ie|0,0),rn=0|u(),C=0|Zt(2097151&nt|0,0,2097151&_|0,0),on=0|u(),c=0|Zt(2097151&mt|0,0,2097151&ae|0,0),s=0|u(),o=0|Zt(2097151&Gt|0,0,2097151&J|0,0),sn=0|u(),ye=0|Zt(2097151&Ht|0,0,2097151&ge|0,0),de=0|u(),q=0|Zt(2097151&te|0,0,2097151&Mt|0,0),z=0|u(),st=0|Zt(2097151&je|0,0,2097151&Bt|0,0),ot=0|u(),Rt=0|Zt(2097151&ve|0,0,2097151&Pt|0,0),Ot=0|u(),oe=0|Zt(2097151&ze|0,0,2097151&yt|0,0),O=0|u(),kt=0|Zt(2097151&L|0,0,2097151&ie|0,0),Et=0|u(),tt=0|Zt(2097151&Q|0,0,2097151&Ie|0,0),et=0|u(),ht=0|Zt(2097151&S|0,0,2097151&_|0,0),At=0|u(),V=0|Zt(2097151&nt|0,0,2097151&ae|0,0),i=0|u(),pe=0|Qn(0|(de=0|Qn(0|(z=0|Qn(0|(Ot=0|Qn(0|(ot=0|Qn(0|(O=0|Qn(0|(Et=0|Qn(0|(et=0|Qn(0|(At=0|Qn(0|(i=0|Qn(0|(Lt=0|Qn(0|Zt(2097151&mt|0,0,2097151&J|0,0),0|(Ut=0|u()),0|(Lt=0|Zt(2097151&Gt|0,0,2097151&Be|0,0)),0|u())),0|u(),0|V,0|i)),0|u(),0|ht,0|At)),0|u(),0|tt,0|et)),0|u(),0|kt,0|Et)),0|u(),0|oe,0|O)),0|u(),0|st,0|ot)),0|u(),0|Rt,0|Ot)),0|u(),0|q,0|z)),0|u(),0|ye,0|de)),0|u(),2097151&pe|0,0),de=0|u(),ge=0|Zt(0|he,0|Ae,2097151&ge|0,0),ye=0|u(),z=0|Zt(2097151&Ht|0,0,2097151&Mt|0,0),q=0|u(),Ot=0|Zt(2097151&te|0,0,2097151&Bt|0,0),Rt=0|u(),ot=0|Zt(2097151&je|0,0,2097151&Pt|0,0),st=0|u(),O=0|Zt(2097151&ve|0,0,2097151&yt|0,0),oe=0|u(),Et=0|Zt(2097151&ze|0,0,2097151&ie|0,0),kt=0|u(),et=0|Zt(2097151&L|0,0,2097151&Ie|0,0),tt=0|u(),At=0|Zt(2097151&Q|0,0,2097151&_|0,0),ht=0|u(),i=0|Zt(2097151&S|0,0,2097151&ae|0,0),V=0|u(),Lt=0|Zt(2097151&nt|0,0,2097151&J|0,0),Ut=0|u(),w=0|Zt(2097151&mt|0,0,2097151&Be|0,0),a=0|u(),Gt=0|Zt(2097151&Gt|0,0,0|Se,0|Qe),Kt=0|u(),Mt=0|Zt(0|he,0|Ae,2097151&Mt|0,0),Ft=0|u(),be=0|Zt(2097151&Ht|0,0,2097151&Bt|0,0),Ct=0|u(),Tt=0|Zt(2097151&te|0,0,2097151&Pt|0,0),H=0|u(),Ce=0|Zt(2097151&je|0,0,2097151&yt|0,0),le=0|u(),ue=0|Zt(2097151&ve|0,0,2097151&ie|0,0),jt=0|u(),Pe=0|Zt(2097151&ze|0,0,2097151&Ie|0,0),U=0|u(),Ee=0|Zt(2097151&L|0,0,2097151&_|0,0),Me=0|u(),dt=0|Zt(2097151&Q|0,0,2097151&ae|0,0),xe=0|u(),vt=0|Zt(2097151&S|0,0,2097151&J|0,0),pt=0|u(),Ft=0|Qn(0|(Ct=0|Qn(0|(H=0|Qn(0|(jt=0|Qn(0|(le=0|Qn(0|(U=0|Qn(0|(Me=0|Qn(0|(xe=0|Qn(0|(pt=0|Qn(0|(mt=0|Qn(0|(Dt=0|Zt(2097151&nt|0,0,2097151&Be|0,0)),0|(rt=0|u()),0|(mt=0|Zt(2097151&mt|0,0,0|Se,0|Qe)),0|u())),0|u(),0|vt,0|pt)),0|u(),0|dt,0|xe)),0|u(),0|Ee,0|Me)),0|u(),0|Pe,0|U)),0|u(),0|Ce,0|le)),0|u(),0|ue,0|jt)),0|u(),0|Tt,0|H)),0|u(),0|be,0|Ct)),0|u(),0|Mt,0|Ft),Mt=0|u(),Bt=0|Zt(0|he,0|Ae,2097151&Bt|0,0),Ct=0|u(),be=0|Zt(2097151&Ht|0,0,2097151&Pt|0,0),H=0|u(),Tt=0|Zt(2097151&te|0,0,2097151&yt|0,0),jt=0|u(),ue=0|Zt(2097151&je|0,0,2097151&ie|0,0),le=0|u(),Ce=0|Zt(2097151&ve|0,0,2097151&Ie|0,0),U=0|u(),Pe=0|Zt(2097151&ze|0,0,2097151&_|0,0),Me=0|u(),Ee=0|Zt(2097151&L|0,0,2097151&ae|0,0),xe=0|u(),dt=0|Zt(2097151&Q|0,0,2097151&J|0,0),pt=0|u(),vt=0|Zt(2097151&S|0,0,2097151&Be|0,0),mt=0|u(),nt=0|Zt(2097151&nt|0,0,0|Se,0|Qe),rt=0|u(),Pt=0|Zt(0|he,0|Ae,2097151&Pt|0,0),Dt=0|u(),Qt=0|Zt(2097151&Ht|0,0,2097151&yt|0,0),gt=0|u(),K=0|Zt(2097151&te|0,0,2097151&ie|0,0),xt=0|u(),Je=0|Zt(2097151&je|0,0,2097151&Ie|0,0),Z=0|u(),R=0|Zt(2097151&ve|0,0,2097151&_|0,0),n=0|u(),F=0|Zt(2097151&ze|0,0,2097151&ae|0,0),Xe=0|u(),we=0|Zt(2097151&L|0,0,2097151&J|0,0),me=0|u(),Dt=0|Qn(0|(gt=0|Qn(0|(xt=0|Qn(0|(n=0|Qn(0|(Z=0|Qn(0|(Xe=0|Qn(0|(me=0|Qn(0|(S=0|Qn(0|(Nt=0|Zt(2097151&Q|0,0,2097151&Be|0,0)),0|(N=0|u()),0|(S=0|Zt(2097151&S|0,0,0|Se,0|Qe)),0|u())),0|u(),0|we,0|me)),0|u(),0|F,0|Xe)),0|u(),0|Je,0|Z)),0|u(),0|R,0|n)),0|u(),0|K,0|xt)),0|u(),0|Qt,0|gt)),0|u(),0|Pt,0|Dt),Pt=0|u(),yt=0|Zt(0|he,0|Ae,2097151&yt|0,0),gt=0|u(),Qt=0|Zt(2097151&Ht|0,0,2097151&ie|0,0),xt=0|u(),K=0|Zt(2097151&te|0,0,2097151&Ie|0,0),n=0|u(),R=0|Zt(2097151&je|0,0,2097151&_|0,0),Z=0|u(),Je=0|Zt(2097151&ve|0,0,2097151&ae|0,0),Xe=0|u(),F=0|Zt(2097151&ze|0,0,2097151&J|0,0),me=0|u(),we=0|Zt(2097151&L|0,0,2097151&Be|0,0),S=0|u(),Q=0|Zt(2097151&Q|0,0,0|Se,0|Qe),N=0|u(),ie=0|Zt(0|he,0|Ae,2097151&ie|0,0),Nt=0|u(),at=0|Zt(2097151&Ht|0,0,2097151&Ie|0,0),ne=0|u(),_e=0|Zt(2097151&te|0,0,2097151&_|0,0),it=0|u(),G=0|Zt(2097151&je|0,0,2097151&ae|0,0),se=0|u(),ce=0|Zt(2097151&ve|0,0,2097151&J|0,0),ke=0|u(),Nt=0|Qn(0|(ne=0|Qn(0|(it=0|Qn(0|(ke=0|Qn(0|(se=0|Qn(0|(L=0|Qn(0|(j=0|Zt(2097151&ze|0,0,2097151&Be|0,0)),0|(Ve=0|u()),0|(L=0|Zt(2097151&L|0,0,0|Se,0|Qe)),0|u())),0|u(),0|G,0|se)),0|u(),0|ce,0|ke)),0|u(),0|_e,0|it)),0|u(),0|at,0|ne)),0|u(),0|ie,0|Nt),ie=0|u(),Ie=0|Zt(0|he,0|Ae,2097151&Ie|0,0),ne=0|u(),at=0|Zt(2097151&Ht|0,0,2097151&_|0,0),it=0|u(),_e=0|Zt(2097151&te|0,0,2097151&ae|0,0),ke=0|u(),ce=0|Zt(2097151&je|0,0,2097151&J|0,0),se=0|u(),G=0|Zt(2097151&ve|0,0,2097151&Be|0,0),L=0|u(),ze=0|Zt(2097151&ze|0,0,0|Se,0|Qe),Ve=0|u(),_=0|Zt(0|he,0|Ae,2097151&_|0,0),j=0|u(),Ge=0|Zt(2097151&Ht|0,0,2097151&ae|0,0),ee=0|u(),ut=0|Zt(2097151&te|0,0,2097151&J|0,0),$e=0|u(),He=0|Zt(2097151&je|0,0,2097151&Be|0,0),ct=0|u(),j=0|Qn(0|(ee=0|Qn(0|($e=0|Qn(0|(ct=0|Qn(0|(ve=0|Zt(2097151&ve|0,0,0|Se,0|Qe)),0|u(),0|He,0|ct)),0|u(),0|ut,0|$e)),0|u(),0|Ge,0|ee)),0|u(),0|_,0|j),_=0|u(),ae=0|Zt(0|he,0|Ae,2097151&ae|0,0),ee=0|u(),Ge=0|Zt(2097151&Ht|0,0,2097151&J|0,0),$e=0|u(),ut=0|Zt(2097151&te|0,0,2097151&Be|0,0),ct=0|u(),je=0|Zt(2097151&je|0,0,0|Se,0|Qe),He=0|u(),J=0|Zt(0|he,0|Ae,2097151&J|0,0),ve=0|u(),ve=0|Qn(0|(te=0|Qn(0|Zt(2097151&Ht|0,0,2097151&Be|0,0),0|(De=0|u()),0|(te=0|Zt(2097151&te|0,0,0|Se,0|Qe)),0|u())),0|u(),0|J,0|ve),J=0|u(),Ht=0|Qn(0|(Be=0|Zt(0|he,0|Ae,2097151&Be|0,0)),0|(te=0|u()),0|(Ht=0|Zt(2097151&Ht|0,0,0|Se,0|Qe)),0|u()),te=0|u(),Qe=0|Zt(0|he,0|Ae,0|Se,0|Qe),Se=0|u(),Be=0|An(0|(Ae=0|Qn(0|Ne,0|Ue,1048576,0)),0|(he=0|u()),21),De=0|u(),De=0|Qn(0|(re=0|Qn(0|(Ze=0|Qn(0|I,0|m,0|b,0|Ze)),0|u(),2097151&re|0,0)),0|u(),0|Be,0|De),Be=0|u(),he=0|Sn(0|Ne,0|Ue,-2097152&Ae|0,4095&he|0),Ae=0|u(),re=0|An(0|(Ue=0|Qn(0|Ke,0|Le,1048576,0)),0|(Ne=0|u()),21),Ze=0|u(),Ze=0|Qn(0|(Oe=0|Qn(0|(Fe=0|Qn(0|(W=0|Qn(0|(Bn=0|Qn(0|v,0|y,0|g,0|Bn)),0|u(),0|k,0|W)),0|u(),0|X,0|Fe)),0|u(),2097151&Oe|0,0)),0|u(),0|re,0|Ze),re=0|u(),X=0|tn(0|(Oe=0|Qn(0|Te,0|Re,1048576,0)),0|(Fe=0|u()),21),W=0|u(),W=0|Qn(0|(qe=0|Qn(0|(We=0|Qn(0|(T=0|Qn(0|(mn=0|Qn(0|(wn=0|Qn(0|(Cn=0|Qn(0|d,0|p,0|h,0|Cn)),0|u(),0|E,0|wn)),0|u(),0|In,0|mn)),0|u(),0|bn,0|T)),0|u(),0|fe,0|We)),0|u(),2097151&qe|0,0)),0|u(),0|X,0|W),X=0|u(),fe=0|tn(0|(qe=0|Qn(0|_t,0|It,1048576,0)),0|(We=0|u()),21),T=0|u(),T=0|Qn(0|(M=0|Qn(0|(x=0|Qn(0|(P=0|Qn(0|(ln=0|Qn(0|(hn=0|Qn(0|(dn=0|Qn(0|(yn=0|Qn(0|(vn=0|Qn(0|A,0|f,0|l,0|vn)),0|u(),0|B,0|yn)),0|u(),0|gn,0|dn)),0|u(),0|pn,0|hn)),0|u(),0|fn,0|ln)),0|u(),0|un,0|P)),0|u(),0|t,0|x)),0|u(),2097151&M|0,0)),0|u(),0|fe,0|T),fe=0|u(),t=0|tn(0|(M=0|Qn(0|lt,0|ft,1048576,0)),0|(x=0|u()),21),P=0|u(),P=0|Qn(0|(Ye=0|Qn(0|(D=0|Qn(0|($=0|Qn(0|(Yt=0|Qn(0|(Vt=0|Qn(0|(qt=0|Qn(0|(en=0|Qn(0|(rn=0|Qn(0|(on=0|Qn(0|(sn=0|Qn(0|c,0|s,0|o,0|sn)),0|u(),0|C,0|on)),0|u(),0|an,0|rn)),0|u(),0|nn,0|en)),0|u(),0|Xt,0|qt)),0|u(),0|zt,0|Vt)),0|u(),0|Jt,0|Yt)),0|u(),0|$t,0|$)),0|u(),0|Y,0|D)),0|u(),2097151&Ye|0,0)),0|u(),0|t,0|P),t=0|u(),Y=0|tn(0|(Ye=0|Qn(0|pe,0|de,1048576,0)),0|(D=0|u()),21),$=0|u(),$=0|Qn(0|(St=0|Qn(0|(q=0|Qn(0|(ye=0|Qn(0|(Rt=0|Qn(0|(oe=0|Qn(0|(st=0|Qn(0|(kt=0|Qn(0|(tt=0|Qn(0|(ht=0|Qn(0|(V=0|Qn(0|(Ut=0|Qn(0|(Kt=0|Qn(0|w,0|a,0|Gt,0|Kt)),0|u(),0|Lt,0|Ut)),0|u(),0|i,0|V)),0|u(),0|At,0|ht)),0|u(),0|et,0|tt)),0|u(),0|Et,0|kt)),0|u(),0|ot,0|st)),0|u(),0|O,0|oe)),0|u(),0|Ot,0|Rt)),0|u(),0|ge,0|ye)),0|u(),0|z,0|q)),0|u(),0|wt,0|St)),0|u(),0|Y,0|$),Y=0|u(),q=0|tn(0|(St=0|Qn(0|Ft,0|Mt,1048576,0)),0|(wt=0|u()),21),z=0|u(),z=0|Qn(0|(Ct=0|Qn(0|(H=0|Qn(0|(jt=0|Qn(0|(U=0|Qn(0|(le=0|Qn(0|(Me=0|Qn(0|(xe=0|Qn(0|(pt=0|Qn(0|(rt=0|Qn(0|vt,0|mt,0|nt,0|rt)),0|u(),0|dt,0|pt)),0|u(),0|Ee,0|xe)),0|u(),0|Pe,0|Me)),0|u(),0|ue,0|le)),0|u(),0|Ce,0|U)),0|u(),0|Tt,0|jt)),0|u(),0|be,0|H)),0|u(),0|Bt,0|Ct)),0|u(),0|q,0|z),q=0|u(),H=0|tn(0|(Ct=0|Qn(0|Dt,0|Pt,1048576,0)),0|(Bt=0|u()),21),be=0|u(),be=0|Qn(0|(gt=0|Qn(0|(xt=0|Qn(0|(n=0|Qn(0|(Xe=0|Qn(0|(Z=0|Qn(0|(me=0|Qn(0|(N=0|Qn(0|we,0|S,0|Q,0|N)),0|u(),0|F,0|me)),0|u(),0|R,0|Z)),0|u(),0|Je,0|Xe)),0|u(),0|K,0|n)),0|u(),0|Qt,0|xt)),0|u(),0|yt,0|gt)),0|u(),0|H,0|be),H=0|u(),xt=0|tn(0|(gt=0|Qn(0|Nt,0|ie,1048576,0)),0|(yt=0|u()),21),Qt=0|u(),Qt=0|Qn(0|(ne=0|Qn(0|(it=0|Qn(0|(ke=0|Qn(0|(L=0|Qn(0|(Ve=0|Qn(0|ce,0|se,0|ze,0|Ve)),0|u(),0|G,0|L)),0|u(),0|_e,0|ke)),0|u(),0|at,0|it)),0|u(),0|Ie,0|ne)),0|u(),0|xt,0|Qt),xt=0|u(),it=0|tn(0|(ne=0|Qn(0|j,0|_,1048576,0)),0|(Ie=0|u()),21),at=0|u(),at=0|Qn(0|(ee=0|Qn(0|($e=0|Qn(0|(He=0|Qn(0|ut,0|ct,0|je,0|He)),0|u(),0|Ge,0|$e)),0|u(),0|ae,0|ee)),0|u(),0|it,0|at),it=0|u(),Ie=0|Sn(0|j,0|_,-2097152&ne|0,0|Ie),ne=0|u(),ee=0|Qn(0|Ht,0|te,0|(ee=0|tn(0|(_=0|Qn(0|ve,0|J,1048576,0)),0|(j=0|u()),21)),0|u()),te=0|u(),j=0|Sn(0|ve,0|J,-2097152&_|0,0|j),_=0|u(),Ht=0|tn(0|(J=0|Qn(0|Qe,0|Se,1048576,0)),0|(ve=0|u()),21),ae=0|u(),ve=0|Sn(0|Qe,0|Se,-2097152&J|0,0|ve),J=0|u(),$e=0|An(0|(Se=0|Qn(0|De,0|Be,1048576,0)),0|(Qe=0|u()),21),Ge=0|u(),Qe=0|Sn(0|De,0|Be,-2097152&Se|0,0|Qe),Se=0|u(),He=0|tn(0|(Be=0|Qn(0|Ze,0|re,1048576,0)),0|(De=0|u()),21),je=0|u(),De=0|Sn(0|Ze,0|re,-2097152&Be|0,0|De),Be=0|u(),ct=0|tn(0|(re=0|Qn(0|W,0|X,1048576,0)),0|(Ze=0|u()),21),ut=0|u(),Ze=0|Sn(0|W,0|X,-2097152&re|0,0|Ze),re=0|u(),ke=0|tn(0|(X=0|Qn(0|T,0|fe,1048576,0)),0|(W=0|u()),21),_e=0|u(),Ve=0|tn(0|(L=0|Qn(0|P,0|t,1048576,0)),0|(G=0|u()),21),ze=0|u(),n=0|tn(0|(se=0|Qn(0|$,0|Y,1048576,0)),0|(ce=0|u()),21),K=0|u(),Z=0|tn(0|(Xe=0|Qn(0|z,0|q,1048576,0)),0|(Je=0|u()),21),R=0|u(),N=0|tn(0|(me=0|Qn(0|be,0|H,1048576,0)),0|(F=0|u()),21),Q=0|u(),ne=0|Qn(0|(jt=0|tn(0|(S=0|Qn(0|Qt,0|xt,1048576,0)),0|(we=0|u()),21)),0|u(),0|Ie,0|ne),Ie=0|u(),we=0|Sn(0|Qt,0|xt,-2097152&S|0,0|we),S=0|u(),_=0|Qn(0|(jt=0|tn(0|(xt=0|Qn(0|at,0|it,1048576,0)),0|(Qt=0|u()),21)),0|u(),0|j,0|_),j=0|u(),Qt=0|Sn(0|at,0|it,-2097152&xt|0,0|Qt),xt=0|u(),J=0|Qn(0|(jt=0|tn(0|(it=0|Qn(0|ee,0|te,1048576,0)),0|(at=0|u()),21)),0|u(),0|ve,0|J),ve=0|u(),at=0|Sn(0|ee,0|te,-2097152&it|0,0|at),it=0|u(),te=0|Zt(0|Ht,0|ae,666643,0),ee=0|u(),jt=0|Zt(0|Ht,0|ae,470296,0),Tt=0|u(),U=0|Zt(0|Ht,0|ae,654183,0),Ce=0|u(),le=0|Zt(0|Ht,0|ae,-997805,-1),ue=0|u(),Me=0|Zt(0|Ht,0|ae,136657,0),Pe=0|u(),Q=0|Qn(0|(yt=0|Sn(0|(ae=0|Qn(0|Nt,0|ie,0|(ae=0|Zt(0|Ht,0|ae,-683901,-1)),0|u())),0|u(),-2097152>|0,0|yt)),0|u(),0|N,0|Q),N=0|u(),yt=0|Zt(0|J,0|ve,666643,0),gt=0|u(),ae=0|Zt(0|J,0|ve,470296,0),ie=0|u(),Nt=0|Zt(0|J,0|ve,654183,0),Ht=0|u(),xe=0|Zt(0|J,0|ve,-997805,-1),Ee=0|u(),pt=0|Zt(0|J,0|ve,136657,0),dt=0|u(),ve=0|Zt(0|J,0|ve,-683901,-1),J=0|u(),rt=0|Zt(0|at,0|it,666643,0),nt=0|u(),mt=0|Zt(0|at,0|it,470296,0),vt=0|u(),ye=0|Zt(0|at,0|it,654183,0),ge=0|u(),Rt=0|Zt(0|at,0|it,-997805,-1),Ot=0|u(),oe=0|Zt(0|at,0|it,136657,0),O=0|u(),it=0|Zt(0|at,0|it,-683901,-1),at=0|u(),R=0|Qn(0|(Bt=0|Sn(0|(at=0|Qn(0|(dt=0|Qn(0|(ue=0|Qn(0|Dt,0|Pt,0|le,0|ue)),0|u(),0|pt,0|dt)),0|u(),0|it,0|at)),0|u(),-2097152&Ct|0,0|Bt)),0|u(),0|Z,0|R),Z=0|u(),Bt=0|Zt(0|_,0|j,666643,0),Ct=0|u(),at=0|Zt(0|_,0|j,470296,0),it=0|u(),dt=0|Zt(0|_,0|j,654183,0),pt=0|u(),ue=0|Zt(0|_,0|j,-997805,-1),le=0|u(),Pt=0|Zt(0|_,0|j,136657,0),Dt=0|u(),j=0|Zt(0|_,0|j,-683901,-1),_=0|u(),st=0|Zt(0|Qt,0|xt,666643,0),ot=0|u(),kt=0|Zt(0|Qt,0|xt,470296,0),Et=0|u(),tt=0|Zt(0|Qt,0|xt,654183,0),et=0|u(),ht=0|Zt(0|Qt,0|xt,-997805,-1),At=0|u(),V=0|Zt(0|Qt,0|xt,136657,0),i=0|u(),xt=0|Zt(0|Qt,0|xt,-683901,-1),Qt=0|u(),K=0|Qn(0|(wt=0|Sn(0|(Qt=0|Qn(0|(Dt=0|Qn(0|(Mt=0|Qn(0|(Ot=0|Qn(0|(Tt=0|Qn(0|Nt,0|Ht,0|jt,0|Tt)),0|u(),0|Rt,0|Ot)),0|u(),0|Ft,0|Mt)),0|u(),0|Pt,0|Dt)),0|u(),0|xt,0|Qt)),0|u(),-2097152&St|0,0|wt)),0|u(),0|n,0|K),n=0|u(),We=0|Sn(0|(ut=0|Qn(0|(wt=0|Qn(0|_t,0|It,0|(wt=0|Zt(0|ne,0|Ie,666643,0)),0|u())),0|u(),0|ct,0|ut)),0|u(),-2097152&qe|0,0|We),qe=0|u(),ut=0|Zt(0|ne,0|Ie,470296,0),ct=0|u(),wt=0|Zt(0|ne,0|Ie,654183,0),It=0|u(),_e=0|Qn(0|(x=0|Sn(0|(ft=0|Qn(0|(It=0|Qn(0|(Ct=0|Qn(0|kt,0|Et,0|Bt,0|Ct)),0|u(),0|wt,0|It)),0|u(),0|lt,0|ft)),0|u(),-2097152&M|0,0|x)),0|u(),0|ke,0|_e),ke=0|u(),x=0|Zt(0|ne,0|Ie,-997805,-1),M=0|u(),ft=0|Zt(0|ne,0|Ie,136657,0),lt=0|u(),D=0|Sn(0|(ze=0|Qn(0|(de=0|Qn(0|(lt=0|Qn(0|(At=0|Qn(0|(pt=0|Qn(0|(gt=0|Qn(0|mt,0|vt,0|yt,0|gt)),0|u(),0|dt,0|pt)),0|u(),0|ht,0|At)),0|u(),0|ft,0|lt)),0|u(),0|pe,0|de)),0|u(),0|Ve,0|ze)),0|u(),-2097152&Ye|0,0|D),Ye=0|u(),Ie=0|Zt(0|ne,0|Ie,-683901,-1),ne=0|u(),de=0|tn(0|(ze=0|Qn(0|We,0|qe,1048576,0)),0|(Ve=0|u()),21),pe=0|u(),pe=0|Qn(0|(W=0|Sn(0|(fe=0|Qn(0|(ot=0|Qn(0|ut,0|ct,0|st,0|ot)),0|u(),0|T,0|fe)),0|u(),-2097152&X|0,0|W)),0|u(),0|de,0|pe),de=0|u(),fe=0|tn(0|(W=0|Qn(0|_e,0|ke,1048576,0)),0|(X=0|u()),21),T=0|u(),T=0|Qn(0|(G=0|Sn(0|(t=0|Qn(0|(M=0|Qn(0|(et=0|Qn(0|(nt=0|Qn(0|at,0|it,0|rt,0|nt)),0|u(),0|tt,0|et)),0|u(),0|x,0|M)),0|u(),0|P,0|t)),0|u(),-2097152&L|0,0|G)),0|u(),0|fe,0|T),fe=0|u(),t=0|tn(0|(G=0|Qn(0|D,0|Ye,1048576,0)),0|(L=0|u()),21),P=0|u(),P=0|Qn(0|(ce=0|Sn(0|(Y=0|Qn(0|(ne=0|Qn(0|(i=0|Qn(0|(le=0|Qn(0|(ge=0|Qn(0|(ee=0|Qn(0|ae,0|ie,0|te,0|ee)),0|u(),0|ye,0|ge)),0|u(),0|ue,0|le)),0|u(),0|V,0|i)),0|u(),0|Ie,0|ne)),0|u(),0|$,0|Y)),0|u(),-2097152&se|0,0|ce)),0|u(),0|t,0|P),t=0|u(),Y=0|tn(0|(ce=0|Qn(0|K,0|n,1048576,0)),0|(se=0|u()),21),$=0|u(),$=0|Qn(0|(Je=0|Sn(0|(q=0|Qn(0|(_=0|Qn(0|(O=0|Qn(0|(Ce=0|Qn(0|xe,0|Ee,0|U,0|Ce)),0|u(),0|oe,0|O)),0|u(),0|j,0|_)),0|u(),0|z,0|q)),0|u(),-2097152&Xe|0,0|Je)),0|u(),0|Y,0|$),Y=0|u(),se=0|Sn(0|K,0|n,-2097152&ce|0,0|se),ce=0|u(),Je=0|tn(0|(n=0|Qn(0|R,0|Z,1048576,0)),0|(K=0|u()),21),Xe=0|u(),Xe=0|Qn(0|(F=0|Sn(0|(H=0|Qn(0|(Pe=0|Qn(0|ve,0|J,0|Me,0|Pe)),0|u(),0|be,0|H)),0|u(),-2097152&me|0,0|F)),0|u(),0|Je,0|Xe),Je=0|u(),K=0|Sn(0|R,0|Z,-2097152&n|0,0|K),n=0|u(),S=0|Qn(0|(F=0|tn(0|(Z=0|Qn(0|Q,0|N,1048576,0)),0|(R=0|u()),21)),0|u(),0|we,0|S),we=0|u(),R=0|Sn(0|Q,0|N,-2097152&Z|0,0|R),Z=0|u(),F=0|tn(0|(N=0|Qn(0|pe,0|de,1048576,0)),0|(Q=0|u()),21),me=0|u(),Pe=0|tn(0|(H=0|Qn(0|T,0|fe,1048576,0)),0|(be=0|u()),21),Me=0|u(),ce=0|Qn(0|(q=0|tn(0|(J=0|Qn(0|P,0|t,1048576,0)),0|(ve=0|u()),21)),0|u(),0|se,0|ce),se=0|u(),ve=0|Sn(0|P,0|t,-2097152&J|0,0|ve),J=0|u(),n=0|Qn(0|(q=0|tn(0|(t=0|Qn(0|$,0|Y,1048576,0)),0|(P=0|u()),21)),0|u(),0|K,0|n),K=0|u(),P=0|Sn(0|$,0|Y,-2097152&t|0,0|P),t=0|u(),Z=0|Qn(0|(q=0|tn(0|(Y=0|Qn(0|Xe,0|Je,1048576,0)),0|($=0|u()),21)),0|u(),0|R,0|Z),R=0|u(),$=0|Sn(0|Xe,0|Je,-2097152&Y|0,0|$),Y=0|u(),Je=0|Qn(0|Ze,0|re,0|(Je=0|Zt(0|S,0|we,666643,0)),0|u()),re=0|u(),Ze=0|Zt(0|S,0|we,470296,0),Xe=0|u(),q=0|Zt(0|S,0|we,654183,0),z=0|u(),_=0|Zt(0|S,0|we,-997805,-1),j=0|u(),O=0|Zt(0|S,0|we,136657,0),oe=0|u(),L=0|Sn(0|(Me=0|Qn(0|(we=0|Qn(0|D,0|Ye,0|(we=0|Zt(0|S,0|we,-683901,-1)),0|u())),0|u(),0|Pe,0|Me)),0|u(),-2097152&G|0,0|L),G=0|u(),Me=0|Zt(0|Z,0|R,666643,0),Pe=0|u(),we=0|Qn(0|Je,0|re,0|(we=0|Zt(0|Z,0|R,470296,0)),0|u()),re=0|u(),Je=0|Zt(0|Z,0|R,654183,0),Ye=0|u(),D=0|Zt(0|Z,0|R,-997805,-1),S=0|u(),Ce=0|Zt(0|Z,0|R,136657,0),U=0|u(),R=0|Zt(0|Z,0|R,-683901,-1),Z=0|u(),Ee=0|Qn(0|De,0|Be,0|(Ee=0|Zt(0|$,0|Y,666643,0)),0|u()),Be=0|u(),De=0|Zt(0|$,0|Y,470296,0),xe=0|u(),ne=0|Qn(0|we,0|re,0|(ne=0|Zt(0|$,0|Y,654183,0)),0|u()),re=0|u(),we=0|Zt(0|$,0|Y,-997805,-1),Ie=0|u(),i=0|Zt(0|$,0|Y,136657,0),V=0|u(),Y=0|Zt(0|$,0|Y,-683901,-1),$=0|u(),$=0|Qn(0|(U=0|Qn(0|(X=0|Sn(0|(me=0|Qn(0|(j=0|Qn(0|_e,0|ke,0|_,0|j)),0|u(),0|F,0|me)),0|u(),-2097152&W|0,0|X)),0|u(),0|Ce,0|U)),0|u(),0|Y,0|$),Y=0|u(),U=0|Zt(0|n,0|K,666643,0),Ce=0|u(),X=0|Zt(0|n,0|K,470296,0),W=0|u(),me=0|Zt(0|n,0|K,654183,0),F=0|u(),j=0|Zt(0|n,0|K,-997805,-1),_=0|u(),ke=0|Zt(0|n,0|K,136657,0),_e=0|u(),K=0|Zt(0|n,0|K,-683901,-1),n=0|u(),le=0|Zt(0|P,0|t,666643,0),ue=0|u(),ge=0|Zt(0|P,0|t,470296,0),ye=0|u(),ee=0|Zt(0|P,0|t,654183,0),te=0|u(),ie=0|Zt(0|P,0|t,-997805,-1),ae=0|u(),M=0|Zt(0|P,0|t,136657,0),x=0|u(),t=0|Zt(0|P,0|t,-683901,-1),P=0|u(),P=0|Qn(0|(_e=0|Qn(0|(Ie=0|Qn(0|(Ye=0|Qn(0|(Ve=0|Sn(0|(qe=0|Qn(0|Ze,0|Xe,0|We,0|qe)),0|u(),-2097152&ze|0,0|Ve)),0|u(),0|Je,0|Ye)),0|u(),0|we,0|Ie)),0|u(),0|ke,0|_e)),0|u(),0|t,0|P),t=0|u(),Ae=0|Qn(0|(_e=0|Zt(0|ce,0|se,666643,0)),0|u(),0|he,0|Ae),he=0|u(),_e=0|Zt(0|ce,0|se,470296,0),ke=0|u(),Ie=0|Zt(0|ce,0|se,654183,0),we=0|u(),ye=0|Qn(0|(Ce=0|Qn(0|(we=0|Qn(0|(Ne=0|Sn(0|(Le=0|Qn(0|$e,0|Ge,0|Ke,0|Le)),0|u(),-2097152&Ue|0,0|Ne)),0|u(),0|Ie,0|we)),0|u(),0|U,0|Ce)),0|u(),0|ge,0|ye),ge=0|u(),Ce=0|Zt(0|ce,0|se,-997805,-1),U=0|u(),we=0|Zt(0|ce,0|se,136657,0),Ie=0|u(),ae=0|Qn(0|(F=0|Qn(0|(Ie=0|Qn(0|(xe=0|Qn(0|(Pe=0|Qn(0|(Fe=0|Sn(0|(Re=0|Qn(0|He,0|je,0|Te,0|Re)),0|u(),-2097152&Oe|0,0|Fe)),0|u(),0|Me,0|Pe)),0|u(),0|De,0|xe)),0|u(),0|we,0|Ie)),0|u(),0|me,0|F)),0|u(),0|ie,0|ae),ie=0|u(),se=0|Zt(0|ce,0|se,-683901,-1),ce=0|u(),Ie=0|tn(0|(F=0|Qn(0|Ae,0|he,1048576,0)),0|(me=0|u()),21),we=0|u(),we=0|Qn(0|(ue=0|Qn(0|(ke=0|Qn(0|Qe,0|Se,0|_e,0|ke)),0|u(),0|le,0|ue)),0|u(),0|Ie,0|we),Ie=0|u(),me=0|Sn(0|Ae,0|he,-2097152&F|0,0|me),F=0|u(),ue=0|tn(0|(he=0|Qn(0|ye,0|ge,1048576,0)),0|(Ae=0|u()),21),le=0|u(),le=0|Qn(0|(te=0|Qn(0|(W=0|Qn(0|(U=0|Qn(0|Ee,0|Be,0|Ce,0|U)),0|u(),0|X,0|W)),0|u(),0|ee,0|te)),0|u(),0|ue,0|le),ue=0|u(),W=0|tn(0|(te=0|Qn(0|ae,0|ie,1048576,0)),0|(ee=0|u()),21),X=0|u(),X=0|Qn(0|(x=0|Qn(0|(_=0|Qn(0|(ce=0|Qn(0|ne,0|re,0|se,0|ce)),0|u(),0|j,0|_)),0|u(),0|M,0|x)),0|u(),0|W,0|X),W=0|u(),_=0|tn(0|(x=0|Qn(0|P,0|t,1048576,0)),0|(M=0|u()),21),j=0|u(),j=0|Qn(0|(n=0|Qn(0|(V=0|Qn(0|(S=0|Qn(0|(Q=0|Sn(0|(z=0|Qn(0|pe,0|de,0|q,0|z)),0|u(),-2097152&N|0,0|Q)),0|u(),0|D,0|S)),0|u(),0|i,0|V)),0|u(),0|K,0|n)),0|u(),0|_,0|j),_=0|u(),M=0|Sn(0|P,0|t,-2097152&x|0,0|M),x=0|u(),n=0|tn(0|(t=0|Qn(0|$,0|Y,1048576,0)),0|(P=0|u()),21),K=0|u(),K=0|Qn(0|(be=0|Sn(0|(fe=0|Qn(0|(oe=0|Qn(0|R,0|Z,0|O,0|oe)),0|u(),0|T,0|fe)),0|u(),-2097152&H|0,0|be)),0|u(),0|n,0|K),n=0|u(),P=0|Sn(0|$,0|Y,-2097152&t|0,0|P),t=0|u(),be=0|Qn(0|ve,0|J,0|(be=0|tn(0|(Y=0|Qn(0|L,0|G,1048576,0)),0|($=0|u()),21)),0|u()),J=0|u(),fe=0|tn(0|(ve=0|Qn(0|we,0|Ie,1048576,0)),0|(H=0|u()),21),T=0|u(),Z=0|tn(0|(oe=0|Qn(0|le,0|ue,1048576,0)),0|(O=0|u()),21),R=0|u(),S=0|Qn(0|M,0|x,0|(S=0|tn(0|(V=0|Qn(0|X,0|W,1048576,0)),0|(i=0|u()),21)),0|u()),x=0|u(),Q=0|Qn(0|P,0|t,0|(Q=0|tn(0|(M=0|Qn(0|j,0|_,1048576,0)),0|(D=0|u()),21)),0|u()),t=0|u(),D=0|Sn(0|j,0|_,-2097152&M|0,0|D),M=0|u(),P=0|tn(0|(_=0|Qn(0|K,0|n,1048576,0)),0|(j=0|u()),21),N=0|u(),j=0|Sn(0|K,0|n,-2097152&_|0,0|j),_=0|u(),z=0|tn(0|(n=0|Qn(0|be,0|J,1048576,0)),0|(K=0|u()),21),q=0|u(),K=0|Sn(0|be,0|J,-2097152&n|0,0|K),n=0|u(),J=0|Qn(0|me,0|F,0|(J=0|Zt(0|z,0|q,666643,0)),0|u()),F=0|u(),me=0|Zt(0|z,0|q,470296,0),be=0|u(),de=0|Zt(0|z,0|q,654183,0),pe=0|u(),ce=0|Zt(0|z,0|q,-997805,-1),se=0|u(),re=0|Zt(0|z,0|q,136657,0),ne=0|u(),q=0|Zt(0|z,0|q,-683901,-1),z=0|u(),F=0|tn(0|J,0|F,21),U=0|u(),F=0|tn(0|(U=0|Qn(0|(H=0|Sn(0|(be=0|Qn(0|we,0|Ie,0|me,0|be)),0|u(),-2097152&ve|0,0|H)),0|u(),0|F,0|U)),0|u(),21),H=0|u(),F=0|tn(0|(H=0|Qn(0|(T=0|Qn(0|(Ae=0|Sn(0|(pe=0|Qn(0|ye,0|ge,0|de,0|pe)),0|u(),-2097152&he|0,0|Ae)),0|u(),0|fe,0|T)),0|u(),0|F,0|H)),0|u(),21),T=0|u(),F=0|tn(0|(T=0|Qn(0|(O=0|Sn(0|(se=0|Qn(0|le,0|ue,0|ce,0|se)),0|u(),-2097152&oe|0,0|O)),0|u(),0|F,0|T)),0|u(),21),O=0|u(),F=0|tn(0|(O=0|Qn(0|(R=0|Qn(0|(ee=0|Sn(0|(ne=0|Qn(0|ae,0|ie,0|re,0|ne)),0|u(),-2097152&te|0,0|ee)),0|u(),0|Z,0|R)),0|u(),0|F,0|O)),0|u(),21),R=0|u(),j=0|tn(0|(_=0|Qn(0|(t=0|tn(0|(D=0|Qn(0|Q,0|t,0|(D=0|tn(0|(M=0|Qn(0|(x=0|tn(0|(F=0|Qn(0|S,0|x,0|(F=0|tn(0|(R=0|Qn(0|(i=0|Sn(0|(z=0|Qn(0|X,0|W,0|q,0|z)),0|u(),-2097152&V|0,0|i)),0|u(),0|F,0|R)),0|u(),21)),0|u())),0|u(),21)),0|u(),0|D,0|M)),0|u(),21)),0|u())),0|u(),21)),0|u(),0|j,0|_)),0|u(),21),t=0|u(),J=0|Qn(0|($=0|Zt(0|(K=0|tn(0|(n=0|Qn(0|(j=0|tn(0|(t=0|Qn(0|($=0|Sn(0|(G=0|Qn(0|P,0|N,0|L,0|G)),0|u(),-2097152&Y|0,0|$)),0|u(),0|j,0|t)),0|u(),21)),0|u(),0|K,0|n)),0|u(),21)),0|(j=0|u()),666643,0)),0|u(),2097151&J|0,0),$=0|u(),U=0|Qn(0|(Y=0|Zt(0|K,0|j,470296,0)),0|u(),2097151&U|0,0),Y=0|u(),H=0|Qn(0|(G=0|Zt(0|K,0|j,654183,0)),0|u(),2097151&H|0,0),G=0|u(),T=0|Qn(0|(L=0|Zt(0|K,0|j,-997805,-1)),0|u(),2097151&T|0,0),L=0|u(),O=0|Qn(0|(N=0|Zt(0|K,0|j,136657,0)),0|u(),2097151&O|0,0),N=0|u(),n=0|Qn(0|(i=0|tn(0|(t=0|Qn(0|(S=0|tn(0|(_=0|Qn(0|(x=0|tn(0|(D=0|Qn(0|(Q=0|tn(0|(M=0|Qn(0|(P=0|tn(0|(F=0|Qn(0|(R=0|tn(0|(O=0|Qn(0|(R=0|Qn(0|(j=0|Zt(0|K,0|j,-683901,-1)),0|u(),2097151&R|0,0)),0|(j=0|u()),0|(O=0|tn(0|(T=0|Qn(0|O,0|N,0|(T=0|tn(0|(H=0|Qn(0|T,0|L,0|(H=0|tn(0|(U=0|Qn(0|H,0|G,0|(U=0|tn(0|(K=0|Qn(0|U,0|Y,0|(K=0|tn(0|J,0|$,21)),0|u())),0|(Y=0|u()),21)),0|u())),0|(G=0|u()),21)),0|u())),0|(L=0|u()),21)),0|u())),0|(N=0|u()),21)),0|u())),0|(j=0|u()),21)),0|u(),2097151&F|0,0)),0|(R=0|u()),21)),0|u(),2097151&M|0,0)),0|(P=0|u()),21)),0|u(),2097151&D|0,0)),0|(Q=0|u()),21)),0|u(),2097151&_|0,0)),0|(x=0|u()),21)),0|u(),2097151&t|0,0)),0|(S=0|u()),21)),0|u(),2097151&n|0,0),i=0|u(),r[e>>0]=J,V=0|An(0|J,0|$,8),u(),r[e+1>>0]=V,$=0|An(0|J,0|$,16),u(),J=0|cn(2097151&K|0,0,5),u(),r[e+2>>0]=J|31&$,$=0|An(0|K,0|Y,3),u(),r[e+3>>0]=$,Y=0|An(0|K,0|Y,11),u(),r[e+4>>0]=Y,K=0|An(2097151&K|0,0,19),Y=0|u(),$=0|cn(2097151&U|0,0,2),u(),r[e+5>>0]=$|K,G=0|An(0|U,0|G,6),u(),r[e+6>>0]=G,U=0|An(2097151&U|0,0,14),G=0|u(),K=0|cn(2097151&H|0,0,7),u(),r[e+7>>0]=K|U,U=0|An(0|H,0|L,1),u(),r[e+8>>0]=U,L=0|An(0|H,0|L,9),u(),r[e+9>>0]=L,H=0|An(2097151&H|0,0,17),L=0|u(),U=0|cn(2097151&T|0,0,4),u(),r[e+10>>0]=U|H,H=0|An(0|T,0|N,4),u(),r[e+11>>0]=H,N=0|An(0|T,0|N,12),u(),r[e+12>>0]=N,T=0|An(2097151&T|0,0,20),N=0|u(),H=0|cn(2097151&O|0,0,1),u(),r[e+13>>0]=H|T,j=0|An(0|O,0|j,7),u(),r[e+14>>0]=j,O=0|An(2097151&O|0,0,15),j=0|u(),T=0|cn(2097151&F|0,0,6),u(),r[e+15>>0]=T|O,O=0|An(0|F,0|R,2),u(),r[e+16>>0]=O,R=0|An(0|F,0|R,10),u(),r[e+17>>0]=R,F=0|An(2097151&F|0,0,18),R=0|u(),O=0|cn(0|M,0|P,3),u(),r[e+18>>0]=O|F,F=0|An(0|M,0|P,5),u(),r[e+19>>0]=F,P=0|An(0|M,0|P,13),u(),r[e+20>>0]=P,r[e+21>>0]=D,P=0|An(0|D,0|Q,8),u(),r[e+22>>0]=P,Q=0|An(0|D,0|Q,16),u(),D=0|cn(2097151&_|0,0,5),u(),r[e+23>>0]=D|31&Q,Q=0|An(0|_,0|x,3),u(),r[e+24>>0]=Q,x=0|An(0|_,0|x,11),u(),r[e+25>>0]=x,_=0|An(2097151&_|0,0,19),x=0|u(),Q=0|cn(2097151&t|0,0,2),u(),r[e+26>>0]=Q|_,S=0|An(0|t,0|S,6),u(),r[e+27>>0]=S,t=0|An(2097151&t|0,0,14),S=0|u(),_=0|cn(0|n,0|i,7),u(),r[e+28>>0]=_|t,t=0|An(0|n,0|i,1),u(),r[e+29>>0]=t,t=0|An(0|n,0|i,9),u(),r[e+30>>0]=t,i=0|tn(0|n,0|i,17),u(),r[e+31>>0]=i}function m(e,t,n,r){e|=0,r|=0;var a=0,o=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0,_=0,S=0,Q=0,x=0,D=0,P=0,M=0,F=0,O=0,R=0,T=0,j=0,H=0,N=0,U=0,L=0,K=0,G=0;!function(e,t){e|=0,t|=0;var n=0,r=0,a=0,o=0;n=0;do{o=0|Le(t+(n<<3)|0),a=0|u(),i[(r=e+(n<<3)|0)>>2]=o,i[r+4>>2]=a,n=n+1|0}while(16!=(0|n))}(n|=0,t|=0),a=e,o=(t=r)+64|0;do{i[t>>2]=i[a>>2],t=t+4|0,a=a+4|0}while((0|t)<(0|o));t=0|i[n>>2],a=0|i[n+4>>2],m=0;do{if(y=0|Yt(B=0|i[r+32>>2],c=0|i[r+32+4>>2],14),h=0|u(),S=0|Yt(B,c,18),h=(0|u())^h,U=0|Yt(B,c,41),h^=0|u(),O=0|i[r+40>>2],s=0|i[r+40+4>>2],b=0|i[r+48>>2],o=0|i[r+48+4>>2],l=0|i[(T=32416+(m<<3)|0)>>2],T=0|i[T+4>>2],p=0|i[r+56>>2],C=0|i[r+56+4>>2],T=0|Qn(0|(C=0|Qn(0|(T=0|Qn(0|(T=0|Qn(0|(h=0|Qn(0|t,0|a,S^y^U|0,0|h)),0|u(),0|l,0|T)),0|u(),(b^O)&B^b|0,(o^s)&c^o|0)),0|u(),0|p,0|C)),0|(p=0|u()),0|i[r+24>>2],0|i[r+24+4>>2]),l=0|u(),i[r+24>>2]=T,i[r+24+4>>2]=l,y=0|Yt(h=0|i[r>>2],U=0|i[r+4>>2],28),t=0|u(),S=0|Yt(h,U,34),t=(0|u())^t,M=0|Yt(h,U,39),t^=0|u(),A=0|i[r+8>>2],N=0|i[r+8+4>>2],f=0|i[r+16>>2],H=0|i[r+16+4>>2],p=0|Qn(0|(p=0|Qn(S^y^M|0,0|t,0|C,0|p)),0|u(),(f|A)&h|f&A|0,(H|N)&U|H&N|0),C=0|u(),i[r+56>>2]=p,i[r+56+4>>2]=C,t=0|Yt(T,l,14),M=0|u(),y=0|Yt(T,l,18),M=(0|u())^M,S=0|Yt(T,l,41),M^=0|u(),d=0|i[n+((g=1|m)<<3)>>2],a=0|i[n+(g<<3)+4>>2],v=0|i[32416+(g<<3)>>2],Q=0|i[32416+(g<<3)+4>>2],H=0|Qn(0|(Q=0|Qn(0|(a=0|Qn(0|(M=0|Qn(0|(o=0|Qn(T&(O^B)^O|0,l&(s^c)^s|0,0|b,0|o)),0|u(),y^t^S|0,0|M)),0|u(),0|d,0|a)),0|u(),0|v,0|Q)),0|(v=0|u()),0|f,0|H),f=0|u(),i[r+16>>2]=H,i[r+16+4>>2]=f,a=0|Yt(p,C,28),d=0|u(),M=0|Yt(p,C,34),d=(0|u())^d,S=0|Yt(p,C,39),d^=0|u(),d=0|Qn(0|(v=0|Qn(0|Q,0|v,p&(A|h)|A&h|0,C&(N|U)|N&U|0)),0|u(),M^a^S|0,0|d),S=0|u(),i[r+48>>2]=d,i[r+48+4>>2]=S,a=0|Yt(H,f,14),M=0|u(),v=0|Yt(H,f,18),M=(0|u())^M,Q=0|Yt(H,f,41),M^=0|u(),y=0|i[n+((t=2|m)<<3)>>2],o=0|i[n+(t<<3)+4>>2],b=0|i[32416+(t<<3)>>2],x=0|i[32416+(t<<3)+4>>2],N=0|Qn(0|(x=0|Qn(0|(o=0|Qn(0|(M=0|Qn(0|(s=0|Qn(H&(T^B)^B|0,f&(l^c)^c|0,0|O,0|s)),0|u(),v^a^Q|0,0|M)),0|u(),0|y,0|o)),0|u(),0|b,0|x)),0|(b=0|u()),0|A,0|N),A=0|u(),i[r+8>>2]=N,i[r+8+4>>2]=A,o=0|Yt(d,S,28),y=0|u(),M=0|Yt(d,S,34),y=(0|u())^y,Q=0|Yt(d,S,39),y^=0|u(),y=0|Qn(0|(b=0|Qn(0|x,0|b,d&(p|h)|p&h|0,S&(C|U)|C&U|0)),0|u(),M^o^Q|0,0|y),Q=0|u(),i[r+40>>2]=y,i[r+40+4>>2]=Q,o=0|Yt(N,A,14),M=0|u(),b=0|Yt(N,A,18),M=(0|u())^M,x=0|Yt(N,A,41),M^=0|u(),v=0|i[n+((a=3|m)<<3)>>2],s=0|i[n+(a<<3)+4>>2],O=0|i[32416+(a<<3)>>2],I=0|i[32416+(a<<3)+4>>2],U=0|Qn(0|(I=0|Qn(0|(s=0|Qn(0|(M=0|Qn(0|(c=0|Qn(N&(H^T)^T|0,A&(f^l)^l|0,0|B,0|c)),0|u(),b^o^x|0,0|M)),0|u(),0|v,0|s)),0|u(),0|O,0|I)),0|(O=0|u()),0|h,0|U),h=0|u(),i[r>>2]=U,i[r+4>>2]=h,s=0|Yt(y,Q,28),v=0|u(),M=0|Yt(y,Q,34),v=(0|u())^v,x=0|Yt(y,Q,39),v^=0|u(),v=0|Qn(0|(O=0|Qn(0|I,0|O,y&(d|p)|d&p|0,Q&(S|C)|S&C|0)),0|u(),M^s^x|0,0|v),x=0|u(),i[r+32>>2]=v,i[r+32+4>>2]=x,s=0|Yt(U,h,14),M=0|u(),O=0|Yt(U,h,18),M=(0|u())^M,I=0|Yt(U,h,41),M^=0|u(),b=0|i[n+((o=4|m)<<3)>>2],c=0|i[n+(o<<3)+4>>2],B=0|i[32416+(o<<3)>>2],R=0|i[32416+(o<<3)+4>>2],C=0|Qn(0|(R=0|Qn(0|(c=0|Qn(0|(M=0|Qn(0|(l=0|Qn(U&(N^H)^H|0,h&(A^f)^f|0,0|T,0|l)),0|u(),O^s^I|0,0|M)),0|u(),0|b,0|c)),0|u(),0|B,0|R)),0|(B=0|u()),0|p,0|C),p=0|u(),i[r+56>>2]=C,i[r+56+4>>2]=p,c=0|Yt(v,x,28),b=0|u(),M=0|Yt(v,x,34),b=(0|u())^b,I=0|Yt(v,x,39),b^=0|u(),b=0|Qn(0|(B=0|Qn(0|R,0|B,v&(y|d)|y&d|0,x&(Q|S)|Q&S|0)),0|u(),M^c^I|0,0|b),I=0|u(),i[r+24>>2]=b,i[r+24+4>>2]=I,c=0|Yt(C,p,14),M=0|u(),B=0|Yt(C,p,18),M=(0|u())^M,R=0|Yt(C,p,41),M^=0|u(),O=0|i[n+((s=5|m)<<3)>>2],l=0|i[n+(s<<3)+4>>2],T=0|i[32416+(s<<3)>>2],D=0|i[32416+(s<<3)+4>>2],S=0|Qn(0|(D=0|Qn(0|(l=0|Qn(0|(M=0|Qn(0|(f=0|Qn(C&(U^N)^N|0,p&(h^A)^A|0,0|H,0|f)),0|u(),B^c^R|0,0|M)),0|u(),0|O,0|l)),0|u(),0|T,0|D)),0|(T=0|u()),0|d,0|S),d=0|u(),i[r+48>>2]=S,i[r+48+4>>2]=d,l=0|Yt(b,I,28),O=0|u(),M=0|Yt(b,I,34),O=(0|u())^O,R=0|Yt(b,I,39),O^=0|u(),O=0|Qn(0|(T=0|Qn(0|D,0|T,b&(v|y)|v&y|0,I&(x|Q)|x&Q|0)),0|u(),M^l^R|0,0|O),R=0|u(),i[r+16>>2]=O,i[r+16+4>>2]=R,l=0|Yt(S,d,14),M=0|u(),T=0|Yt(S,d,18),M=(0|u())^M,D=0|Yt(S,d,41),M^=0|u(),B=0|i[n+((c=6|m)<<3)>>2],f=0|i[n+(c<<3)+4>>2],H=0|i[32416+(c<<3)>>2],j=0|i[32416+(c<<3)+4>>2],Q=0|Qn(0|(j=0|Qn(0|(f=0|Qn(0|(M=0|Qn(0|(A=0|Qn(S&(C^U)^U|0,d&(p^h)^h|0,0|N,0|A)),0|u(),T^l^D|0,0|M)),0|u(),0|B,0|f)),0|u(),0|H,0|j)),0|(H=0|u()),0|y,0|Q),y=0|u(),i[r+40>>2]=Q,i[r+40+4>>2]=y,f=0|Yt(O,R,28),B=0|u(),M=0|Yt(O,R,34),B=(0|u())^B,D=0|Yt(O,R,39),B^=0|u(),B=0|Qn(0|(H=0|Qn(0|j,0|H,O&(b|v)|b&v|0,R&(I|x)|I&x|0)),0|u(),M^f^D|0,0|B),D=0|u(),i[r+8>>2]=B,i[r+8+4>>2]=D,f=0|Yt(Q,y,14),M=0|u(),H=0|Yt(Q,y,18),M=(0|u())^M,j=0|Yt(Q,y,41),M^=0|u(),T=0|i[n+((l=7|m)<<3)>>2],A=0|i[n+(l<<3)+4>>2],N=0|i[32416+(l<<3)>>2],L=0|i[32416+(l<<3)+4>>2],x=0|Qn(0|(L=0|Qn(0|(A=0|Qn(0|(M=0|Qn(0|(h=0|Qn(Q&(S^C)^C|0,y&(d^p)^p|0,0|U,0|h)),0|u(),H^f^j|0,0|M)),0|u(),0|T,0|A)),0|u(),0|N,0|L)),0|(N=0|u()),0|v,0|x),v=0|u(),i[r+32>>2]=x,i[r+32+4>>2]=v,A=0|Yt(B,D,28),T=0|u(),M=0|Yt(B,D,34),T=(0|u())^T,j=0|Yt(B,D,39),T^=0|u(),T=0|Qn(0|(N=0|Qn(0|L,0|N,B&(O|b)|O&b|0,D&(R|I)|R&I|0)),0|u(),M^A^j|0,0|T),j=0|u(),i[r>>2]=T,i[r+4>>2]=j,A=0|Yt(x,v,14),M=0|u(),N=0|Yt(x,v,18),M=(0|u())^M,L=0|Yt(x,v,41),M^=0|u(),H=0|i[n+((f=8|m)<<3)>>2],h=0|i[n+(f<<3)+4>>2],U=0|i[32416+(f<<3)>>2],K=0|i[32416+(f<<3)+4>>2],I=0|Qn(0|(K=0|Qn(0|(h=0|Qn(0|(M=0|Qn(0|(p=0|Qn(x&(Q^S)^S|0,v&(y^d)^d|0,0|C,0|p)),0|u(),N^A^L|0,0|M)),0|u(),0|H,0|h)),0|u(),0|U,0|K)),0|(U=0|u()),0|b,0|I),b=0|u(),i[r+24>>2]=I,i[r+24+4>>2]=b,h=0|Yt(T,j,28),H=0|u(),M=0|Yt(T,j,34),H=(0|u())^H,L=0|Yt(T,j,39),H^=0|u(),H=0|Qn(0|(U=0|Qn(0|K,0|U,T&(B|O)|B&O|0,j&(D|R)|D&R|0)),0|u(),M^h^L|0,0|H),L=0|u(),i[r+56>>2]=H,i[r+56+4>>2]=L,h=0|Yt(I,b,14),M=0|u(),U=0|Yt(I,b,18),M=(0|u())^M,K=0|Yt(I,b,41),M^=0|u(),N=0|i[n+((A=9|m)<<3)>>2],p=0|i[n+(A<<3)+4>>2],C=0|i[32416+(A<<3)>>2],G=0|i[32416+(A<<3)+4>>2],R=0|Qn(0|(G=0|Qn(0|(p=0|Qn(0|(M=0|Qn(0|(d=0|Qn(I&(x^Q)^Q|0,b&(v^y)^y|0,0|S,0|d)),0|u(),U^h^K|0,0|M)),0|u(),0|N,0|p)),0|u(),0|C,0|G)),0|(C=0|u()),0|O,0|R),O=0|u(),i[r+16>>2]=R,i[r+16+4>>2]=O,p=0|Yt(H,L,28),N=0|u(),M=0|Yt(H,L,34),N=(0|u())^N,K=0|Yt(H,L,39),N^=0|u(),N=0|Qn(0|(C=0|Qn(0|G,0|C,H&(T|B)|T&B|0,L&(j|D)|j&D|0)),0|u(),M^p^K|0,0|N),K=0|u(),i[r+48>>2]=N,i[r+48+4>>2]=K,p=0|Yt(R,O,14),M=0|u(),C=0|Yt(R,O,18),M=(0|u())^M,G=0|Yt(R,O,41),M^=0|u(),U=0|i[n+((h=10|m)<<3)>>2],d=0|i[n+(h<<3)+4>>2],S=0|i[32416+(h<<3)>>2],w=0|i[32416+(h<<3)+4>>2],D=0|Qn(0|(w=0|Qn(0|(d=0|Qn(0|(M=0|Qn(0|(y=0|Qn(R&(I^x)^x|0,O&(b^v)^v|0,0|Q,0|y)),0|u(),C^p^G|0,0|M)),0|u(),0|U,0|d)),0|u(),0|S,0|w)),0|(S=0|u()),0|B,0|D),B=0|u(),i[r+8>>2]=D,i[r+8+4>>2]=B,d=0|Yt(N,K,28),U=0|u(),M=0|Yt(N,K,34),U=(0|u())^U,G=0|Yt(N,K,39),U^=0|u(),U=0|Qn(0|(S=0|Qn(0|w,0|S,N&(H|T)|H&T|0,K&(L|j)|L&j|0)),0|u(),M^d^G|0,0|U),G=0|u(),i[r+40>>2]=U,i[r+40+4>>2]=G,d=0|Yt(D,B,14),M=0|u(),S=0|Yt(D,B,18),M=(0|u())^M,w=0|Yt(D,B,41),M^=0|u(),C=0|i[n+((p=11|m)<<3)>>2],y=0|i[n+(p<<3)+4>>2],Q=0|i[32416+(p<<3)>>2],E=0|i[32416+(p<<3)+4>>2],j=0|Qn(0|(E=0|Qn(0|(y=0|Qn(0|(M=0|Qn(0|(v=0|Qn(D&(R^I)^I|0,B&(O^b)^b|0,0|x,0|v)),0|u(),S^d^w|0,0|M)),0|u(),0|C,0|y)),0|u(),0|Q,0|E)),0|(Q=0|u()),0|T,0|j),T=0|u(),i[r>>2]=j,i[r+4>>2]=T,y=0|Yt(U,G,28),C=0|u(),M=0|Yt(U,G,34),C=(0|u())^C,w=0|Yt(U,G,39),C^=0|u(),C=0|Qn(0|(Q=0|Qn(0|E,0|Q,U&(N|H)|N&H|0,G&(K|L)|K&L|0)),0|u(),M^y^w|0,0|C),w=0|u(),i[r+32>>2]=C,i[r+32+4>>2]=w,y=0|Yt(j,T,14),M=0|u(),Q=0|Yt(j,T,18),M=(0|u())^M,E=0|Yt(j,T,41),M^=0|u(),S=0|i[n+((d=12|m)<<3)>>2],v=0|i[n+(d<<3)+4>>2],x=0|i[32416+(d<<3)>>2],k=0|i[32416+(d<<3)+4>>2],L=0|Qn(0|(k=0|Qn(0|(v=0|Qn(0|(M=0|Qn(0|(b=0|Qn(j&(D^R)^R|0,T&(B^O)^O|0,0|I,0|b)),0|u(),Q^y^E|0,0|M)),0|u(),0|S,0|v)),0|u(),0|x,0|k)),0|(x=0|u()),0|H,0|L),H=0|u(),i[r+56>>2]=L,i[r+56+4>>2]=H,v=0|Yt(C,w,28),S=0|u(),M=0|Yt(C,w,34),S=(0|u())^S,E=0|Yt(C,w,39),S^=0|u(),S=0|Qn(0|(x=0|Qn(0|k,0|x,C&(U|N)|U&N|0,w&(G|K)|G&K|0)),0|u(),M^v^E|0,0|S),E=0|u(),i[r+24>>2]=S,i[r+24+4>>2]=E,v=0|Yt(L,H,14),M=0|u(),x=0|Yt(L,H,18),M=(0|u())^M,k=0|Yt(L,H,41),M^=0|u(),Q=0|i[n+((y=13|m)<<3)>>2],b=0|i[n+(y<<3)+4>>2],I=0|i[32416+(y<<3)>>2],_=0|i[32416+(y<<3)+4>>2],K=0|Qn(0|(_=0|Qn(0|(b=0|Qn(0|(M=0|Qn(0|(O=0|Qn(L&(j^D)^D|0,H&(T^B)^B|0,0|R,0|O)),0|u(),x^v^k|0,0|M)),0|u(),0|Q,0|b)),0|u(),0|I,0|_)),0|(I=0|u()),0|N,0|K),N=0|u(),i[r+48>>2]=K,i[r+48+4>>2]=N,b=0|Yt(S,E,28),Q=0|u(),M=0|Yt(S,E,34),Q=(0|u())^Q,k=0|Yt(S,E,39),Q^=0|u(),Q=0|Qn(0|(I=0|Qn(0|_,0|I,S&(C|U)|C&U|0,E&(w|G)|w&G|0)),0|u(),M^b^k|0,0|Q),k=0|u(),i[r+16>>2]=Q,i[r+16+4>>2]=k,b=0|Yt(K,N,14),M=0|u(),I=0|Yt(K,N,18),M=(0|u())^M,_=0|Yt(K,N,41),M^=0|u(),x=0|i[n+((v=14|m)<<3)>>2],O=0|i[n+(v<<3)+4>>2],R=0|i[32416+(v<<3)>>2],F=0|i[32416+(v<<3)+4>>2],G=0|Qn(0|(F=0|Qn(0|(O=0|Qn(0|(M=0|Qn(0|(B=0|Qn(K&(L^j)^j|0,N&(H^T)^T|0,0|D,0|B)),0|u(),I^b^_|0,0|M)),0|u(),0|x,0|O)),0|u(),0|R,0|F)),0|(R=0|u()),0|U,0|G),U=0|u(),i[r+40>>2]=G,i[r+40+4>>2]=U,O=0|Yt(Q,k,28),x=0|u(),M=0|Yt(Q,k,34),x=(0|u())^x,_=0|Yt(Q,k,39),x^=0|u(),x=0|Qn(0|(R=0|Qn(0|F,0|R,Q&(S|C)|S&C|0,k&(E|w)|E&w|0)),0|u(),M^O^_|0,0|x),_=0|u(),i[r+8>>2]=x,i[r+8+4>>2]=_,O=0|Yt(G,U,14),M=0|u(),R=0|Yt(G,U,18),M=(0|u())^M,F=0|Yt(G,U,41),M^=0|u(),I=0|i[n+((b=15|m)<<3)>>2],B=0|i[n+(b<<3)+4>>2],D=0|i[32416+(b<<3)>>2],P=0|i[32416+(b<<3)+4>>2],w=0|Qn(0|(P=0|Qn(0|(B=0|Qn(0|(M=0|Qn(0|(T=0|Qn(G&(K^L)^L|0,U&(N^H)^H|0,0|j,0|T)),0|u(),R^O^F|0,0|M)),0|u(),0|I,0|B)),0|u(),0|D,0|P)),0|(D=0|u()),0|C,0|w),C=0|u(),i[r+32>>2]=w,i[r+32+4>>2]=C,C=0|Yt(x,_,28),w=0|u(),B=0|Yt(x,_,34),w=(0|u())^w,I=0|Yt(x,_,39),w^=0|u(),w=0|Qn(0|(E=0|Qn(0|P,0|D,x&(Q|S)|Q&S|0,_&(k|E)|k&E|0)),0|u(),B^C^I|0,0|w),I=0|u(),i[r>>2]=w,i[r+4>>2]=I,64==(0|m))break;Q=0|Yt(K=0|i[n+(v<<3)>>2],G=0|i[n+(v<<3)+4>>2],19),H=0|u(),B=0|Yt(K,G,61),E=0|u(),E=0|Qn((j=0|An(0|K,0|G,6))^Q^B|0,0|(E=(0|u())^H^E),0|(H=0|i[n+(A<<3)>>2]),0|(x=0|i[n+(A<<3)+4>>2])),B=0|u(),O=0|Yt(Q=0|i[n+(g<<3)>>2],j=0|i[n+(g<<3)+4>>2],1),w=0|u(),N=0|Yt(Q,j,8),T=0|u(),R=0|An(0|Q,0|j,7),T=(0|u())^w^T,T=0|Qn(0|(w=0|Qn(0|E,0|B,0|i[(w=n+(m<<3)|0)>>2],0|i[w+4>>2])),0|u(),R^O^N|0,0|T),N=0|u(),i[(O=n+((m=m+16|0)<<3)|0)>>2]=T,i[O+4>>2]=N,w=0|Yt(O=0|i[n+(b<<3)>>2],R=0|i[n+(b<<3)+4>>2],19),B=0|u(),E=0|Yt(O,R,61),k=0|u(),I=0|An(0|O,0|R,6),k=(0|u())^B^k,B=0|i[n+(g+9<<3)>>2],U=0|i[n+(g+9<<3)+4>>2],C=0|Yt(_=0|i[n+(g+1<<3)>>2],D=0|i[n+(g+1<<3)+4>>2],1),M=0|u(),S=0|Yt(_,D,8),P=0|u(),F=0|An(0|_,0|D,7),P=(0|u())^M^P,P=0|Qn(0|(k=0|Qn(0|(j=0|Qn(0|B,0|U,0|Q,0|j)),0|u(),I^w^E|0,0|k)),0|u(),F^C^S|0,0|P),S=0|u(),i[n+(g+16<<3)>>2]=P,i[n+(g+16<<3)+4>>2]=S,C=0|Yt(T,N,19),F=0|u(),k=0|Yt(T,N,61),g=0|u(),g=0|Qn((N=0|An(0|T,0|N,6))^C^k|0,0|(g=(0|u())^F^g),0|(F=0|i[n+(p<<3)>>2]),0|(T=0|i[n+(p<<3)+4>>2])),k=0|u(),E=0|Yt(C=0|i[n+(a<<3)>>2],N=0|i[n+(a<<3)+4>>2],1),w=0|u(),I=0|Yt(C,N,8),j=0|u(),Q=0|An(0|C,0|N,7),j=(0|u())^w^j,j=0|Qn(0|(D=0|Qn(0|g,0|k,0|_,0|D)),0|u(),Q^E^I|0,0|j),I=0|u(),i[n+(t+16<<3)>>2]=j,i[n+(t+16<<3)+4>>2]=I,E=0|Yt(P,S,19),Q=0|u(),D=0|Yt(P,S,61),_=0|u(),S=0|An(0|P,0|S,6),_=(0|u())^Q^_,Q=0|i[n+(a+9<<3)>>2],P=0|i[n+(a+9<<3)+4>>2],g=0|Yt(k=0|i[n+(a+1<<3)>>2],t=0|i[n+(a+1<<3)+4>>2],1),w=0|u(),U=0|Yt(k,t,8),B=0|u(),M=0|An(0|k,0|t,7),B=(0|u())^w^B,B=0|Qn(0|(_=0|Qn(0|(N=0|Qn(0|Q,0|P,0|C,0|N)),0|u(),S^E^D|0,0|_)),0|u(),M^g^U|0,0|B),U=0|u(),i[n+(a+16<<3)>>2]=B,i[n+(a+16<<3)+4>>2]=U,g=0|Yt(j,I,19),M=0|u(),_=0|Yt(j,I,61),D=0|u(),D=0|Qn((I=0|An(0|j,0|I,6))^g^_|0,0|(D=(0|u())^M^D),0|(M=0|i[n+(y<<3)>>2]),0|(j=0|i[n+(y<<3)+4>>2])),_=0|u(),E=0|Yt(g=0|i[n+(s<<3)>>2],I=0|i[n+(s<<3)+4>>2],1),S=0|u(),N=0|Yt(g,I,8),C=0|u(),P=0|An(0|g,0|I,7),C=(0|u())^S^C,C=0|Qn(0|(t=0|Qn(0|D,0|_,0|k,0|t)),0|u(),P^E^N|0,0|C),N=0|u(),i[n+(o+16<<3)>>2]=C,i[n+(o+16<<3)+4>>2]=N,E=0|Yt(B,U,19),P=0|u(),t=0|Yt(B,U,61),k=0|u(),U=0|An(0|B,0|U,6),k=(0|u())^P^k,P=0|i[n+(s+9<<3)>>2],B=0|i[n+(s+9<<3)+4>>2],S=0|Yt(_=0|i[n+(s+1<<3)>>2],D=0|i[n+(s+1<<3)+4>>2],1),Q=0|u(),w=0|Yt(_,D,8),L=0|u(),a=0|An(0|_,0|D,7),L=(0|u())^Q^L,L=0|Qn(0|(k=0|Qn(0|(I=0|Qn(0|P,0|B,0|g,0|I)),0|u(),U^E^t|0,0|k)),0|u(),a^S^w|0,0|L),w=0|u(),i[n+(s+16<<3)>>2]=L,i[n+(s+16<<3)+4>>2]=w,S=0|Yt(C,N,19),a=0|u(),k=0|Yt(C,N,61),t=0|u(),t=0|Qn((N=0|An(0|C,0|N,6))^S^k|0,(0|u())^a^t|0,0|O,0|R),a=0|u(),N=0|Yt(k=0|i[n+(l<<3)>>2],S=0|i[n+(l<<3)+4>>2],1),C=0|u(),E=0|Yt(k,S,8),U=0|u(),I=0|An(0|k,0|S,7),U=(0|u())^C^U,U=0|Qn(0|(D=0|Qn(0|t,0|a,0|_,0|D)),0|u(),I^N^E|0,0|U),E=0|u(),i[n+(c+16<<3)>>2]=U,i[n+(c+16<<3)+4>>2]=E,N=0|Yt(L,w,19),I=0|u(),D=0|Yt(L,w,61),_=0|u(),w=0|An(0|L,0|w,6),_=(0|u())^I^_,I=0|i[n+(l+9<<3)>>2],L=0|i[n+(l+9<<3)+4>>2],C=0|Yt(a=0|i[n+(l+1<<3)>>2],t=0|i[n+(l+1<<3)+4>>2],1),g=0|u(),B=0|Yt(a,t,8),P=0|u(),Q=0|An(0|a,0|t,7),P=(0|u())^g^P,P=0|Qn(0|(_=0|Qn(0|(S=0|Qn(0|I,0|L,0|k,0|S)),0|u(),w^N^D|0,0|_)),0|u(),Q^C^B|0,0|P),B=0|u(),i[n+(l+16<<3)>>2]=P,i[n+(l+16<<3)+4>>2]=B,C=0|Yt(U,E,19),Q=0|u(),_=0|Yt(U,E,61),D=0|u(),D=0|Qn((E=0|An(0|U,0|E,6))^C^_|0,0|(D=(0|u())^Q^D),0|i[n+(f+9<<3)>>2],0|i[n+(f+9<<3)+4>>2]),_=0|u(),C=0|Yt(H,x,1),E=0|u(),Q=0|Yt(H,x,8),U=0|u(),N=0|An(0|H,0|x,7),U=E^(0|u())^U,U=0|Qn(0|(t=0|Qn(0|D,0|_,0|a,0|t)),0|u(),C^N^Q|0,0|U),Q=0|u(),i[n+(f+16<<3)>>2]=U,i[n+(f+16<<3)+4>>2]=Q,N=0|Yt(P,B,19),C=0|u(),t=0|Yt(P,B,61),a=0|u(),B=0|An(0|P,0|B,6),a=(0|u())^C^a,C=0|i[n+(A+9<<3)>>2],P=0|i[n+(A+9<<3)+4>>2],E=0|Yt(_=0|i[n+(A+1<<3)>>2],D=0|i[n+(A+1<<3)+4>>2],1),w=0|u(),S=0|Yt(_,D,8),k=0|u(),L=0|An(0|_,0|D,7),k=(0|u())^w^k,k=0|Qn(0|(a=0|Qn(0|(x=0|Qn(0|C,0|P,0|H,0|x)),0|u(),B^N^t|0,0|a)),0|u(),L^E^S|0,0|k),S=0|u(),i[n+(A+16<<3)>>2]=k,i[n+(A+16<<3)+4>>2]=S,E=0|Yt(U,Q,19),L=0|u(),a=0|Yt(U,Q,61),t=0|u(),t=0|Qn((Q=0|An(0|U,0|Q,6))^E^a|0,0|(t=(0|u())^L^t),0|i[n+(h+9<<3)>>2],0|i[n+(h+9<<3)+4>>2]),a=0|u(),E=0|Yt(F,T,1),Q=0|u(),L=0|Yt(F,T,8),U=0|u(),N=0|An(0|F,0|T,7),U=Q^(0|u())^U,U=0|Qn(0|(D=0|Qn(0|t,0|a,0|_,0|D)),0|u(),E^N^L|0,0|U),L=0|u(),i[n+(h+16<<3)>>2]=U,i[n+(h+16<<3)+4>>2]=L,N=0|Yt(k,S,19),E=0|u(),D=0|Yt(k,S,61),_=0|u(),S=0|An(0|k,0|S,6),_=(0|u())^E^_,E=0|i[n+(p+9<<3)>>2],k=0|i[n+(p+9<<3)+4>>2],Q=0|Yt(a=0|i[n+(p+1<<3)>>2],t=0|i[n+(p+1<<3)+4>>2],1),B=0|u(),x=0|Yt(a,t,8),H=0|u(),P=0|An(0|a,0|t,7),H=(0|u())^B^H,H=0|Qn(0|(_=0|Qn(0|(T=0|Qn(0|E,0|k,0|F,0|T)),0|u(),S^N^D|0,0|_)),0|u(),P^Q^x|0,0|H),x=0|u(),i[n+(p+16<<3)>>2]=H,i[n+(p+16<<3)+4>>2]=x,Q=0|Yt(U,L,19),P=0|u(),_=0|Yt(U,L,61),D=0|u(),D=0|Qn((L=0|An(0|U,0|L,6))^Q^_|0,0|(D=(0|u())^P^D),0|i[n+(d+9<<3)>>2],0|i[n+(d+9<<3)+4>>2]),_=0|u(),Q=0|Yt(M,j,1),L=0|u(),P=0|Yt(M,j,8),U=0|u(),N=0|An(0|M,0|j,7),U=L^(0|u())^U,U=0|Qn(0|(t=0|Qn(0|D,0|_,0|a,0|t)),0|u(),Q^N^P|0,0|U),P=0|u(),i[n+(d+16<<3)>>2]=U,i[n+(d+16<<3)+4>>2]=P,N=0|Yt(H,x,19),Q=0|u(),t=0|Yt(H,x,61),a=0|u(),x=0|An(0|H,0|x,6),a=(0|u())^Q^a,Q=0|i[n+(y+9<<3)>>2],H=0|i[n+(y+9<<3)+4>>2],L=0|Yt(_=0|i[n+(y+1<<3)>>2],D=0|i[n+(y+1<<3)+4>>2],1),S=0|u(),T=0|Yt(_,D,8),F=0|u(),D=0|An(0|_,0|D,7),F=(0|u())^S^F,F=0|Qn(0|(a=0|Qn(0|(j=0|Qn(0|Q,0|H,0|M,0|j)),0|u(),x^N^t|0,0|a)),0|u(),D^L^T|0,0|F),T=0|u(),i[n+(y+16<<3)>>2]=F,i[n+(y+16<<3)+4>>2]=T,L=0|Yt(U,P,19),D=0|u(),a=0|Yt(U,P,61),t=0|u(),P=0|An(0|U,0|P,6),t=(0|u())^D^t,D=0|i[n+(v+9<<3)>>2],U=0|i[n+(v+9<<3)+4>>2],N=0|Yt(O,R,1),x=0|u(),j=0|Yt(O,R,8),M=0|u(),H=0|An(0|O,0|R,7),M=x^(0|u())^M,M=0|Qn(0|(t=0|Qn(0|(G=0|Qn(0|D,0|U,0|K,0|G)),0|u(),P^L^a|0,0|t)),0|u(),N^H^j|0,0|M),j=0|u(),i[n+(v+16<<3)>>2]=M,i[n+(v+16<<3)+4>>2]=j,j=0|Yt(F,T,19),M=0|u(),H=0|Yt(F,T,61),N=0|u(),T=0|An(0|F,0|T,6),N=(0|u())^M^N,M=0|i[n+(b+9<<3)>>2],F=0|i[n+(b+9<<3)+4>>2],L=0|Yt(t=0|i[n+(b+1<<3)>>2],a=0|i[n+(b+1<<3)+4>>2],1),P=0|u(),G=0|Yt(t,a,8),K=0|u(),U=0|An(0|t,0|a,7),K=(0|u())^P^K,K=0|Qn(0|(N=0|Qn(0|(R=0|Qn(0|M,0|F,0|O,0|R)),0|u(),T^j^H|0,0|N)),0|u(),U^L^G|0,0|K),G=0|u(),i[n+(b+16<<3)>>2]=K,i[n+(b+16<<3)+4>>2]=G}while(m>>>0<80);t=0;do{L=r+(t<<3)|0,L=0|Qn(0|i[(G=e+(t<<3)|0)>>2],0|i[G+4>>2],0|i[L>>2],0|i[L+4>>2]),K=0|u(),i[G>>2]=L,i[G+4>>2]=K,t=t+1|0}while(8!=(0|t))}function I(e){e|=0;var t,n=0,r=0,a=0,o=0,s=0,c=0,u=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,v=0,b=0,m=0,I=0,w=0,C=0;t=y,d=y=y+63&-64,y=y+16|0;do{if(e>>>0<245){if(p=e>>>0<11?16:e+11&-8,(A=0|i[8679])>>>(p>>>3)&3|0)return e=0|i[8+(r=34756+((A>>>(p>>>3)&1^1)+(p>>>3)<<1<<2)|0)>>2],(0|(n=0|i[e+8>>2]))==(0|r)?i[8679]=A&~(1<<(A>>>(p>>>3)&1^1)+(p>>>3)):(i[n+12>>2]=r,i[r+8>>2]=n),C=(A>>>(p>>>3)&1^1)+(p>>>3)<<3,i[e+4>>2]=3|C,i[e+C+4>>2]=1|i[e+C+4>>2],y=t,0|e+8;if(p>>>0>(h=0|i[8681])>>>0){if(A>>>(p>>>3)|0)return a=0|i[34756+((o=((a=(((e=A>>>(p>>>3)<<(p>>>3)&(2<<(p>>>3)|0-(2<<(p>>>3))))&0-e)-1|0)>>>(((e&0-e)-1|0)>>>12&16))>>>5&8|((e&0-e)-1|0)>>>12&16|a>>>(a>>>5&8)>>>2&4|(o=a>>>(a>>>5&8)>>>(a>>>(a>>>5&8)>>>2&4))>>>1&2|o>>>(o>>>1&2)>>>1&1)+(o>>>(o>>>1&2)>>>(o>>>(o>>>1&2)>>>1&1))|0)<<1<<2)+8>>2],(0|(e=0|i[a+8>>2]))==(34756+(o<<1<<2)|0)?(i[8679]=A&~(1<>2]=34756+(o<<1<<2),i[34756+(o<<1<<2)+8>>2]=e,e=A),i[a+4>>2]=3|p,i[a+p+4>>2]=(o<<3)-p|1,i[a+(o<<3)>>2]=(o<<3)-p,0|h&&(r=0|i[8684],e&1<<(h>>>3)?(e=34756+(h>>>3<<1<<2)+8|0,n=0|i[34756+(h>>>3<<1<<2)+8>>2]):(i[8679]=e|1<<(h>>>3),e=34756+(h>>>3<<1<<2)+8|0,n=34756+(h>>>3<<1<<2)|0),i[e>>2]=r,i[n+12>>2]=r,i[r+8>>2]=n,i[r+12>>2]=34756+(h>>>3<<1<<2)),i[8681]=(o<<3)-p,i[8684]=a+p,y=t,0|a+8;if(c=0|i[8680]){for(f=0|i[35020+(((l=((c&0-c)-1|0)>>>(((c&0-c)-1|0)>>>12&16))>>>5&8|((c&0-c)-1|0)>>>12&16|l>>>(l>>>5&8)>>>2&4|(f=l>>>(l>>>5&8)>>>(l>>>(l>>>5&8)>>>2&4))>>>1&2|f>>>(f>>>1&2)>>>1&1)+(f>>>(f>>>1&2)>>>(f>>>(f>>>1&2)>>>1&1))<<2)>>2],l=(-8&i[f+4>>2])-p|0,n=f;(e=0|i[n+16>>2])||(e=0|i[n+20>>2]);)l=(u=(n=(-8&i[e+4>>2])-p|0)>>>0>>0)?n:l,n=e,f=u?e:f;if((u=f+p|0)>>>0>f>>>0){o=0|i[f+24>>2],e=0|i[f+12>>2];do{if((0|e)==(0|f)){if(!(e=0|i[(n=f+20|0)>>2])&&!(e=0|i[(n=f+16|0)>>2])){n=0;break}for(;;)if(r=0|i[(a=e+20|0)>>2])e=r,n=a;else{if(!(r=0|i[(a=e+16|0)>>2]))break;e=r,n=a}i[n>>2]=0,n=e}else n=0|i[f+8>>2],i[n+12>>2]=e,i[e+8>>2]=n,n=e}while(0);do{if(0|o){if(e=0|i[f+28>>2],(0|f)==(0|i[35020+(e<<2)>>2])){if(i[35020+(e<<2)>>2]=n,!n){i[8680]=c&~(1<>2])==(0|f)?o+16|0:o+20|0)>>2]=n,!n)break;i[n+24>>2]=o,0|(e=0|i[f+16>>2])&&(i[n+16>>2]=e,i[e+24>>2]=n),0|(e=0|i[f+20>>2])&&(i[n+20>>2]=e,i[e+24>>2]=n)}}while(0);return l>>>0<16?(C=l+p|0,i[f+4>>2]=3|C,i[(C=f+C+4|0)>>2]=1|i[C>>2]):(i[f+4>>2]=3|p,i[u+4>>2]=1|l,i[u+l>>2]=l,0|h&&(r=0|i[8684],1<<(h>>>3)&A?(e=34756+(h>>>3<<1<<2)+8|0,n=0|i[34756+(h>>>3<<1<<2)+8>>2]):(i[8679]=1<<(h>>>3)|A,e=34756+(h>>>3<<1<<2)+8|0,n=34756+(h>>>3<<1<<2)|0),i[e>>2]=r,i[n+12>>2]=r,i[r+8>>2]=n,i[r+12>>2]=34756+(h>>>3<<1<<2)),i[8681]=l,i[8684]=u),y=t,0|f+8}}}}else if(e>>>0<=4294967231){if(p=e+11&-8,a=0|i[8680]){l=(e+11|0)>>>8?p>>>0>16777215?31:p>>>(7+(l=14-((520192+(l=(e+11|0)>>>8<<((1048320+((e+11|0)>>>8)|0)>>>16&8))|0)>>>16&4|(1048320+((e+11|0)>>>8)|0)>>>16&8|(245760+(l<<((l+520192|0)>>>16&4))|0)>>>16&2)+(l<<((l+520192|0)>>>16&4)<<((245760+(l<<((l+520192|0)>>>16&4))|0)>>>16&2)>>>15)|0)|0)&1|l<<1:0,e=0|i[35020+(l<<2)>>2];e:do{if(e)for(r=0-p|0,n=0,u=p<<(31==(0|l)?0:25-(l>>>1)|0),c=0;;){if((o=(-8&i[e+4>>2])-p|0)>>>0>>0){if(!o){r=0,n=e,b=65;break e}r=o,c=e}if(n=0==(0|(b=0|i[e+20>>2]))|(0|b)==(0|(e=0|i[e+16+(u>>>31<<2)>>2]))?n:b,!e){e=c,b=61;break}u<<=1}else r=0-p|0,n=0,e=0,b=61}while(0);if(61==(0|b)){if(0==(0|n)&0==(0|e)){if(!(((e=2<>>(h>>>12&16)>>>5&8|h>>>12&16|(e=h>>>(h>>>12&16)>>>(h>>>(h>>>12&16)>>>5&8))>>>2&4|e>>>(e>>>2&4)>>>1&2|(n=e>>>(e>>>2&4)>>>(e>>>(e>>>2&4)>>>1&2))>>>1&1)+(n>>>(n>>>1&1))<<2)>>2],e=0}n?b=65:(c=r,u=e)}if(65==(0|b))for(;;){if(r=(o=(h=(-8&i[n+4>>2])-p|0)>>>0>>0)?h:r,o=o?n:e,(e=0|i[n+16>>2])||(e=0|i[n+20>>2]),!e){c=r,u=o;break}n=e,e=o}if(0!=(0|u)&&c>>>0<((0|i[8681])-p|0)>>>0&&(f=u+p|0)>>>0>u>>>0){s=0|i[u+24>>2],e=0|i[u+12>>2];do{if((0|e)==(0|u)){if(!(e=0|i[(n=u+20|0)>>2])&&!(e=0|i[(n=u+16|0)>>2])){e=0;break}for(;;)if(r=0|i[(o=e+20|0)>>2])e=r,n=o;else{if(!(r=0|i[(o=e+16|0)>>2]))break;e=r,n=o}i[n>>2]=0}else C=0|i[u+8>>2],i[C+12>>2]=e,i[e+8>>2]=C}while(0);do{if(s){if(n=0|i[u+28>>2],(0|u)==(0|i[35020+(n<<2)>>2])){if(i[35020+(n<<2)>>2]=e,!e){i[8680]=a&~(1<>2])==(0|u)?s+16|0:s+20|0)>>2]=e,!e)break;i[e+24>>2]=s,0|(n=0|i[u+16>>2])&&(i[e+16>>2]=n,i[n+24>>2]=e),(n=0|i[u+20>>2])&&(i[e+20>>2]=n,i[n+24>>2]=e)}}while(0);e:do{if(c>>>0<16)C=c+p|0,i[u+4>>2]=3|C,i[(C=u+C+4|0)>>2]=1|i[C>>2];else{if(i[u+4>>2]=3|p,i[f+4>>2]=1|c,i[f+c>>2]=c,r=c>>>3,c>>>0<256){(e=0|i[8679])&1<>2]):(i[8679]=e|1<>2]=f,i[n+12>>2]=f,i[f+8>>2]=n,i[f+12>>2]=34756+(r<<1<<2);break}if(e=35020+((r=(e=c>>>8)?c>>>0>16777215?31:c>>>(7+(r=14-((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4|(e+1048320|0)>>>16&8|(245760+(r=e<<((e+1048320|0)>>>16&8)<<((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(r<<((r+245760|0)>>>16&2)>>>15)|0)|0)&1|r<<1:0)<<2)|0,i[f+28>>2]=r,i[f+16+4>>2]=0,i[f+16>>2]=0,!(a&(n=1<>2]=f,i[f+24>>2]=e,i[f+12>>2]=f,i[f+8>>2]=f;break}e=0|i[e>>2];t:do{if((-8&i[e+4>>2]|0)!=(0|c)){for(a=c<<(31==(0|r)?0:25-(r>>>1)|0);n=0|i[(r=e+16+(a>>>31<<2)|0)>>2];){if((-8&i[n+4>>2]|0)==(0|c)){e=n;break t}a<<=1,e=n}i[r>>2]=f,i[f+24>>2]=e,i[f+12>>2]=f,i[f+8>>2]=f;break e}}while(0);C=0|i[(w=e+8|0)>>2],i[C+12>>2]=f,i[w>>2]=f,i[f+8>>2]=C,i[f+12>>2]=e,i[f+24>>2]=0}}while(0);return y=t,0|u+8}}}else p=-1}while(0);if((r=0|i[8681])>>>0>=p>>>0)return n=r-p|0,e=0|i[8684],n>>>0>15?(C=e+p|0,i[8684]=C,i[8681]=n,i[C+4>>2]=1|n,i[e+r>>2]=n,i[e+4>>2]=3|p):(i[8681]=0,i[8684]=0,i[e+4>>2]=3|r,i[e+r+4>>2]=1|i[e+r+4>>2]),y=t,0|e+8;if((o=0|i[8682])>>>0>p>>>0)return I=o-p|0,i[8682]=I,w=(C=0|i[8685])+p|0,i[8685]=w,i[w+4>>2]=1|I,i[C+4>>2]=3|p,y=t,0|C+8;if(0|i[8797]?e=0|i[8799]:(i[8799]=4096,i[8798]=4096,i[8800]=-1,i[8801]=-1,i[8802]=0,i[8790]=0,i[8797]=-16&d^1431655768,e=4096),c=p+48|0,((f=e+(u=p+47|0)|0)&(l=0-e|0))>>>0<=p>>>0)return y=t,0;if(0|(e=0|i[8789])&&(((d=0|i[8787])+(f&l)|0)>>>0<=d>>>0||(d+(f&l)|0)>>>0>e>>>0))return y=t,0;e:do{if(4&i[8790])e=0,b=143;else{n=0|i[8685];t:do{if(n){for(r=35164;!((e=0|i[r>>2])>>>0<=n>>>0&&(e+(0|i[(v=r+4|0)>>2])|0)>>>0>n>>>0);){if(!(e=0|i[r+8>>2])){b=128;break t}r=e}if((f-o&l)>>>0<2147483647)if((0|(e=0|Qt(f-o&l)))==((0|i[r>>2])+(0|i[v>>2])|0)){if(-1!=(0|e)){c=e,s=f-o&l,b=145;break e}e=f-o&l}else a=e,r=f-o&l,b=136;else e=0}else b=128}while(0);do{if(128==(0|b))if(-1!=(0|(n=0|Qt(0)))&&(s=(0==((s=0|i[8798])-1&n|0)?0:(s+-1+n&0-s)-n|0)+(f&l)|0,g=0|i[8787],s>>>0>p>>>0&s>>>0<2147483647)){if(0|(v=0|i[8789])&&(s+g|0)>>>0<=g>>>0|(s+g|0)>>>0>v>>>0){e=0;break}if((0|(e=0|Qt(s)))==(0|n)){c=n,b=145;break e}a=e,r=s,b=136}else e=0}while(0);do{if(136==(0|b)){if(n=0-r|0,!(c>>>0>r>>>0&r>>>0<2147483647&-1!=(0|a))){if(-1==(0|a)){e=0;break}c=a,s=r,b=145;break e}if((e=u-r+(e=0|i[8799])&0-e)>>>0>=2147483647){c=a,s=r,b=145;break e}if(-1==(0|Qt(e))){Qt(n),e=0;break}c=a,s=e+r|0,b=145;break e}}while(0);i[8790]=4|i[8790],b=143}}while(0);if(143==(0|b)&&(f&l)>>>0<2147483647&&!(-1==(0|(m=0|Qt(f&l)))|1^(w=((I=0|Qt(0))-m|0)>>>0>(p+40|0)>>>0)|m>>>0>>0&-1!=(0|m)&-1!=(0|I)^1)&&(c=m,s=w?I-m|0:e,b=145),145==(0|b)){e=(0|i[8787])+s|0,i[8787]=e,e>>>0>(0|i[8788])>>>0&&(i[8788]=e),l=0|i[8685];e:do{if(l){for(o=35164;;){if((0|c)==((e=0|i[o>>2])+(n=0|i[(a=o+4|0)>>2])|0)){b=154;break}if(!(r=0|i[o+8>>2]))break;o=r}if(154==(0|b)&&0==(8&i[o+12>>2]|0)&&c>>>0>l>>>0&e>>>0<=l>>>0){i[a>>2]=n+s,C=(0|i[8682])+s|0,w=0==(l+8&7|0)?0:0-(l+8)&7,i[8685]=l+w,i[8682]=C-w,i[l+w+4>>2]=C-w|1,i[l+C+4>>2]=40,i[8686]=i[8801];break}for(c>>>0<(0|i[8683])>>>0&&(i[8683]=c),r=c+s|0,n=35164;;){if((0|i[n>>2])==(0|r)){b=162;break}if(!(e=0|i[n+8>>2]))break;n=e}if(162==(0|b)&&0==(8&i[n+12>>2]|0)){i[n>>2]=c,i[(A=n+4|0)>>2]=(0|i[A>>2])+s,f=(A=c+(0==(7&(A=c+8|0)|0)?0:0-A&7)|0)+p|0,u=(e=r+(0==(r+8&7|0)?0:0-(r+8)&7)|0)-A-p|0,i[A+4>>2]=3|p;t:do{if((0|l)==(0|e))C=(0|i[8682])+u|0,i[8682]=C,i[8685]=f,i[f+4>>2]=1|C;else{if((0|i[8684])==(0|e)){C=(0|i[8681])+u|0,i[8681]=C,i[8684]=f,i[f+4>>2]=1|C,i[f+C>>2]=C;break}if(1==(3&(c=0|i[e+4>>2])|0)){n:do{if(c>>>0<256){if(n=0|i[e+8>>2],(0|(r=0|i[e+12>>2]))==(0|n)){i[8679]=i[8679]&~(1<<(c>>>3));break}i[n+12>>2]=r,i[r+8>>2]=n;break}s=0|i[e+24>>2],n=0|i[e+12>>2];do{if((0|n)==(0|e)){if(n=0|i[e+16+4>>2])r=e+16+4|0;else{if(!(n=0|i[e+16>>2])){n=0;break}r=e+16|0}for(;;)if(a=0|i[(o=n+20|0)>>2])n=a,r=o;else{if(!(a=0|i[(o=n+16|0)>>2]))break;n=a,r=o}i[r>>2]=0}else C=0|i[e+8>>2],i[C+12>>2]=n,i[n+8>>2]=C}while(0);if(!s)break;r=0|i[e+28>>2];do{if((0|i[35020+(r<<2)>>2])==(0|e)){if(i[35020+(r<<2)>>2]=n,0|n)break;i[8680]=i[8680]&~(1<>2])==(0|e)?s+16|0:s+20|0)>>2]=n,!n)break n}while(0);if(i[n+24>>2]=s,0|(r=0|i[e+16>>2])&&(i[n+16>>2]=r,i[r+24>>2]=n),!(r=0|i[e+16+4>>2]))break;i[n+20>>2]=r,i[r+24>>2]=n}while(0);e=e+(-8&c)|0,o=(-8&c)+u|0}else o=u;if(i[(r=e+4|0)>>2]=-2&i[r>>2],i[f+4>>2]=1|o,i[f+o>>2]=o,r=o>>>3,o>>>0<256){(e=0|i[8679])&1<>2]):(i[8679]=e|1<>2]=f,i[n+12>>2]=f,i[f+8>>2]=n,i[f+12>>2]=34756+(r<<1<<2);break}e=o>>>8;do{if(e){if(o>>>0>16777215){a=31;break}a=o>>>(7+(a=14-((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4|(e+1048320|0)>>>16&8|(245760+(a=e<<((e+1048320|0)>>>16&8)<<((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(a<<((a+245760|0)>>>16&2)>>>15)|0)|0)&1|a<<1}else a=0}while(0);if(n=35020+(a<<2)|0,i[f+28>>2]=a,i[f+16+4>>2]=0,i[f+16>>2]=0,!((e=0|i[8680])&(r=1<>2]=f,i[f+24>>2]=n,i[f+12>>2]=f,i[f+8>>2]=f;break}e=0|i[n>>2];n:do{if((-8&i[e+4>>2]|0)!=(0|o)){for(a=o<<(31==(0|a)?0:25-(a>>>1)|0);n=0|i[(r=e+16+(a>>>31<<2)|0)>>2];){if((-8&i[n+4>>2]|0)==(0|o)){e=n;break n}a<<=1,e=n}i[r>>2]=f,i[f+24>>2]=e,i[f+12>>2]=f,i[f+8>>2]=f;break t}}while(0);C=0|i[(w=e+8|0)>>2],i[C+12>>2]=f,i[w>>2]=f,i[f+8>>2]=C,i[f+12>>2]=e,i[f+24>>2]=0}}while(0);return y=t,0|A+8}for(n=35164;!((e=0|i[n>>2])>>>0<=l>>>0&&(C=e+(0|i[n+4>>2])|0)>>>0>l>>>0);)n=0|i[n+8>>2];o=(o=C+-47+(0==(C+-47+8&7|0)?0:0-(C+-47+8)&7)|0)>>>0<(l+16|0)>>>0?l:o,e=s+-40|0,w=c+(I=0==(7&(I=c+8|0)|0)?0:0-I&7)|0,i[8685]=w,i[8682]=e-I,i[w+4>>2]=e-I|1,i[c+e+4>>2]=40,i[8686]=i[8801],i[o+4>>2]=27,i[o+8>>2]=i[8791],i[o+8+4>>2]=i[8792],i[o+8+8>>2]=i[8793],i[o+8+12>>2]=i[8794],i[8791]=c,i[8792]=s,i[8794]=0,i[8793]=o+8,e=o+24|0;do{w=e,i[(e=e+4|0)>>2]=7}while((w+8|0)>>>0>>0);if((0|o)!=(0|l)){if(i[o+4>>2]=-2&i[o+4>>2],i[l+4>>2]=o-l|1,i[o>>2]=o-l,(o-l|0)>>>0<256){r=34756+((o-l|0)>>>3<<1<<2)|0,(e=0|i[8679])&1<<((o-l|0)>>>3)?(e=r+8|0,n=0|i[r+8>>2]):(i[8679]=e|1<<((o-l|0)>>>3),e=r+8|0,n=r),i[e>>2]=l,i[n+12>>2]=l,i[l+8>>2]=n,i[l+12>>2]=r;break}if(n=35020+((a=(o-l|0)>>>8?(o-l|0)>>>0>16777215?31:(o-l|0)>>>(7+(a=14-((520192+(a=(o-l|0)>>>8<<((1048320+((o-l|0)>>>8)|0)>>>16&8))|0)>>>16&4|(1048320+((o-l|0)>>>8)|0)>>>16&8|(245760+(a<<((a+520192|0)>>>16&4))|0)>>>16&2)+(a<<((a+520192|0)>>>16&4)<<((245760+(a<<((a+520192|0)>>>16&4))|0)>>>16&2)>>>15)|0)|0)&1|a<<1:0)<<2)|0,i[l+28>>2]=a,i[l+20>>2]=0,i[l+16>>2]=0,!((e=0|i[8680])&(r=1<>2]=l,i[l+24>>2]=n,i[l+12>>2]=l,i[l+8>>2]=l;break}e=0|i[n>>2];t:do{if((-8&i[e+4>>2]|0)!=(o-l|0)){for(a=o-l<<(31==(0|a)?0:25-(a>>>1)|0);n=0|i[(r=e+16+(a>>>31<<2)|0)>>2];){if((-8&i[n+4>>2]|0)==(o-l|0)){e=n;break t}a<<=1,e=n}i[r>>2]=l,i[l+24>>2]=e,i[l+12>>2]=l,i[l+8>>2]=l;break e}}while(0);C=0|i[(w=e+8|0)>>2],i[C+12>>2]=l,i[w>>2]=l,i[l+8>>2]=C,i[l+12>>2]=e,i[l+24>>2]=0}}else 0==(0|(C=0|i[8683]))|c>>>0>>0&&(i[8683]=c),i[8791]=c,i[8792]=s,i[8794]=0,i[8688]=i[8797],i[8687]=-1,i[8692]=34756,i[8691]=34756,i[8694]=34764,i[8693]=34764,i[8696]=34772,i[8695]=34772,i[8698]=34780,i[8697]=34780,i[8700]=34788,i[8699]=34788,i[8702]=34796,i[8701]=34796,i[8704]=34804,i[8703]=34804,i[8706]=34812,i[8705]=34812,i[8708]=34820,i[8707]=34820,i[8710]=34828,i[8709]=34828,i[8712]=34836,i[8711]=34836,i[8714]=34844,i[8713]=34844,i[8716]=34852,i[8715]=34852,i[8718]=34860,i[8717]=34860,i[8720]=34868,i[8719]=34868,i[8722]=34876,i[8721]=34876,i[8724]=34884,i[8723]=34884,i[8726]=34892,i[8725]=34892,i[8728]=34900,i[8727]=34900,i[8730]=34908,i[8729]=34908,i[8732]=34916,i[8731]=34916,i[8734]=34924,i[8733]=34924,i[8736]=34932,i[8735]=34932,i[8738]=34940,i[8737]=34940,i[8740]=34948,i[8739]=34948,i[8742]=34956,i[8741]=34956,i[8744]=34964,i[8743]=34964,i[8746]=34972,i[8745]=34972,i[8748]=34980,i[8747]=34980,i[8750]=34988,i[8749]=34988,i[8752]=34996,i[8751]=34996,i[8754]=35004,i[8753]=35004,C=s+-40|0,w=c+(I=0==(7&(I=c+8|0)|0)?0:0-I&7)|0,i[8685]=w,i[8682]=C-I,i[w+4>>2]=C-I|1,i[c+C+4>>2]=40,i[8686]=i[8801]}while(0);if((e=0|i[8682])>>>0>p>>>0)return I=e-p|0,i[8682]=I,w=(C=0|i[8685])+p|0,i[8685]=w,i[w+4>>2]=1|I,i[C+4>>2]=3|p,y=t,0|C+8}return i[8678]=48,y=t,0}function w(e){var t,n,i,a,o=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0,_=0,S=0,Q=0,x=0,D=0,P=0,M=0,F=0,O=0,R=0,T=0,j=0,H=0,N=0,U=0,L=0,K=0,G=0,$=0,Y=0,J=0,V=0,z=0,q=0,W=0,X=0,Z=0,ee=0,te=0,ne=0,re=0,ie=0,ae=0,oe=0,se=0,ce=0,ue=0,le=0,fe=0,Ae=0,he=0,pe=0,de=0,ge=0,ye=0;$=0|Wt(0|r[(e|=0)>>0],0|r[e+1>>0],0|r[e+2>>0]),u(),V=0|An(0|(V=0|bt(e+2|0)),0|u(),5),u(),R=0|An(0|(R=0|Wt(0|r[e+5>>0],0|r[e+6>>0],0|r[e+7>>0])),0|u(),2),u(),y=0|An(0|(y=0|bt(e+7|0)),0|u(),7),u(),Y=0|An(0|(Y=0|bt(e+10|0)),0|u(),4),u(),X=0|An(0|(X=0|Wt(0|r[e+13>>0],0|r[e+14>>0],0|r[e+15>>0])),0|u(),1),u(),k=0|An(0|(k=0|bt(e+15|0)),0|u(),6),u(),ue=0|An(0|(ue=0|Wt(0|r[e+18>>0],0|r[e+19>>0],0|r[e+20>>0])),0|u(),3),u(),he=0|Wt(0|r[e+21>>0],0|r[e+22>>0],0|r[e+23>>0]),u(),oe=0|An(0|(oe=0|bt(e+23|0)),0|u(),5),u(),Ae=0|An(0|(Ae=0|Wt(0|r[e+26>>0],0|r[e+27>>0],0|r[e+28>>0])),0|u(),2),u(),ne=0|An(0|(ne=0|bt(e+28|0)),0|u(),7),u(),ge=0|An(0|(ge=0|bt(e+31|0)),0|u(),4),u(),x=0|An(0|(x=0|Wt(0|r[e+34>>0],0|r[e+35>>0],0|r[e+36>>0])),0|u(),1),u(),K=0|An(0|(K=0|bt(e+36|0)),0|u(),6),u(),w=0|An(0|(w=0|Wt(0|r[e+39>>0],0|r[e+40>>0],0|r[e+41>>0])),0|u(),3),u(),c=0|Wt(0|r[e+42>>0],0|r[e+43>>0],0|r[e+44>>0]),u(),U=0|An(0|(U=0|bt(e+44|0)),0|u(),5),u(),ie=0|An(0|(ie=0|Wt(0|r[e+47>>0],0|r[e+48>>0],0|r[e+49>>0])),0|u(),2),u(),ye=0|An(0|(ye=0|bt(e+49|0)),0|u(),7),u(),d=0|An(0|(d=0|bt(e+52|0)),0|u(),4),u(),S=0|An(0|(S=0|Wt(0|r[e+55>>0],0|r[e+56>>0],0|r[e+57>>0])),0|u(),1),u(),M=0|An(0|(M=0|bt(e+57|0)),0|u(),6),u(),h=0|Zt(0|(J=0|An(0|(J=0|bt(e+60|0)),0|u(),3)),0|(l=0|u()),666643,0),I=0|u(),fe=0|Zt(0|J,0|l,470296,0),C=0|u(),D=0|Zt(0|J,0|l,654183,0),f=0|u(),_=0|Zt(0|J,0|l,-997805,-1),p=0|u(),w=0|Qn(0|(o=0|Zt(0|J,0|l,136657,0)),0|u(),2097151&w|0,0),o=0|u(),c=0|Qn(0|(l=0|Zt(0|J,0|l,-683901,-1)),0|u(),2097151&c|0,0),l=0|u(),J=0|Zt(2097151&M|0,0,666643,0),L=0|u(),E=0|Zt(2097151&M|0,0,470296,0),te=0|u(),F=0|Zt(2097151&M|0,0,654183,0),s=0|u(),q=0|Zt(2097151&M|0,0,-997805,-1),z=0|u(),G=0|Zt(2097151&M|0,0,136657,0),m=0|u(),M=0|Qn(0|w,0|o,0|(M=0|Zt(2097151&M|0,0,-683901,-1)),0|u()),o=0|u(),w=0|Zt(2097151&S|0,0,666643,0),W=0|u(),Q=0|Zt(2097151&S|0,0,470296,0),re=0|u(),N=0|Zt(2097151&S|0,0,654183,0),A=0|u(),pe=0|Zt(2097151&S|0,0,-997805,-1),le=0|u(),ee=0|Zt(2097151&S|0,0,136657,0),O=0|u(),m=0|Qn(0|(p=0|Qn(0|(K=0|Qn(0|(S=0|Zt(2097151&S|0,0,-683901,-1)),0|u(),2097151&K|0,0)),0|u(),0|_,0|p)),0|u(),0|G,0|m),G=0|u(),p=0|Zt(2097151&d|0,0,666643,0),_=0|u(),K=0|Zt(2097151&d|0,0,470296,0),S=0|u(),v=0|Zt(2097151&d|0,0,654183,0),Z=0|u(),T=0|Zt(2097151&d|0,0,-997805,-1),j=0|u(),a=0|Zt(2097151&d|0,0,136657,0),de=0|u(),d=0|Zt(2097151&d|0,0,-683901,-1),g=0|u(),b=0|Zt(2097151&ye|0,0,666643,0),P=0|u(),se=0|Zt(2097151&ye|0,0,470296,0),ce=0|u(),n=0|Zt(2097151&ye|0,0,654183,0),ae=0|u(),i=0|Zt(2097151&ye|0,0,-997805,-1),H=0|u(),t=0|Zt(2097151&ye|0,0,136657,0),B=0|u(),s=0|Qn(0|(C=0|Qn(0|(le=0|Qn(0|(de=0|Qn(0|(ge=0|Qn(0|(ye=0|Zt(2097151&ye|0,0,-683901,-1)),0|u(),2097151&ge|0,0)),0|u(),0|a,0|de)),0|u(),0|pe,0|le)),0|u(),0|fe,0|C)),0|u(),0|F,0|s),F=0|u(),k=0|Qn(0|(C=0|Zt(2097151&ie|0,0,666643,0)),0|u(),2097151&k|0,0),C=0|u(),fe=0|Zt(2097151&ie|0,0,470296,0),le=0|u(),_=0|Qn(0|(ce=0|Qn(0|(he=0|Qn(0|(pe=0|Zt(2097151&ie|0,0,654183,0)),0|u(),2097151&he|0,0)),0|u(),0|se,0|ce)),0|u(),0|p,0|_),p=0|u(),ce=0|Zt(2097151&ie|0,0,-997805,-1),se=0|u(),L=0|Qn(0|(re=0|Qn(0|(Z=0|Qn(0|(H=0|Qn(0|(Ae=0|Qn(0|(he=0|Zt(2097151&ie|0,0,136657,0)),0|u(),2097151&Ae|0,0)),0|u(),0|i,0|H)),0|u(),0|v,0|Z)),0|u(),0|Q,0|re)),0|u(),0|J,0|L),J=0|u(),ie=0|Zt(2097151&ie|0,0,-683901,-1),re=0|u(),v=0|An(0|(Q=0|Qn(0|k,0|C,1048576,0)),0|(Z=0|u()),21),H=0|u(),H=0|Qn(0|(P=0|Qn(0|(ue=0|Qn(0|fe,0|le,2097151&ue|0,0)),0|u(),0|b,0|P)),0|u(),0|v,0|H),v=0|u(),Z=0|Sn(0|k,0|C,-2097152&Q|0,2047&Z|0),Q=0|u(),P=0|An(0|(C=0|Qn(0|_,0|p,1048576,0)),0|(k=0|u()),21),b=0|u(),b=0|Qn(0|(W=0|Qn(0|(S=0|Qn(0|(ae=0|Qn(0|(oe=0|Qn(0|ce,0|se,2097151&oe|0,0)),0|u(),0|n,0|ae)),0|u(),0|K,0|S)),0|u(),0|w,0|W)),0|u(),0|P,0|b),P=0|u(),S=0|tn(0|(W=0|Qn(0|L,0|J,1048576,0)),0|(w=0|u()),21),K=0|u(),K=0|Qn(0|(te=0|Qn(0|(I=0|Qn(0|(A=0|Qn(0|(j=0|Qn(0|(B=0|Qn(0|(ne=0|Qn(0|ie,0|re,2097151&ne|0,0)),0|u(),0|t,0|B)),0|u(),0|T,0|j)),0|u(),0|N,0|A)),0|u(),0|h,0|I)),0|u(),0|E,0|te)),0|u(),0|S,0|K),S=0|u(),I=0|tn(0|(te=0|Qn(0|s,0|F,1048576,0)),0|(E=0|u()),21),h=0|u(),h=0|Qn(0|(z=0|Qn(0|(f=0|Qn(0|(O=0|Qn(0|(x=0|Qn(0|d,0|g,2097151&x|0,0)),0|u(),0|ee,0|O)),0|u(),0|D,0|f)),0|u(),0|q,0|z)),0|u(),0|I,0|h),I=0|u(),E=0|Sn(0|s,0|F,-2097152&te|0,0|E),te=0|u(),z=0|Qn(0|M,0|o,0|(z=0|tn(0|(F=0|Qn(0|m,0|G,1048576,0)),0|(s=0|u()),21)),0|u()),o=0|u(),s=0|Sn(0|m,0|G,-2097152&F|0,0|s),F=0|u(),U=0|Qn(0|(M=0|tn(0|(G=0|Qn(0|c,0|l,1048576,0)),0|(m=0|u()),21)),0|u(),2097151&U|0,0),M=0|u(),m=0|Sn(0|c,0|l,-2097152&G|0,0|m),G=0|u(),q=0|An(0|(l=0|Qn(0|H,0|v,1048576,0)),0|(c=0|u()),21),f=0|u(),c=0|Sn(0|H,0|v,-2097152&l|0,0|c),l=0|u(),D=0|tn(0|(v=0|Qn(0|b,0|P,1048576,0)),0|(H=0|u()),21),O=0|u(),te=0|Qn(0|(g=0|tn(0|(ee=0|Qn(0|K,0|S,1048576,0)),0|(x=0|u()),21)),0|u(),0|E,0|te),E=0|u(),x=0|Sn(0|K,0|S,-2097152&ee|0,0|x),ee=0|u(),F=0|Qn(0|(g=0|tn(0|(S=0|Qn(0|h,0|I,1048576,0)),0|(K=0|u()),21)),0|u(),0|s,0|F),s=0|u(),K=0|Sn(0|h,0|I,-2097152&S|0,0|K),S=0|u(),G=0|Qn(0|(g=0|tn(0|(I=0|Qn(0|z,0|o,1048576,0)),0|(h=0|u()),21)),0|u(),0|m,0|G),m=0|u(),h=0|Sn(0|z,0|o,-2097152&I|0,0|h),I=0|u(),X=0|Qn(0|(o=0|Zt(0|U,0|M,666643,0)),0|u(),2097151&X|0,0),o=0|u(),z=0|Qn(0|Z,0|Q,0|(z=0|Zt(0|U,0|M,470296,0)),0|u()),Q=0|u(),Z=0|Qn(0|c,0|l,0|(Z=0|Zt(0|U,0|M,654183,0)),0|u()),l=0|u(),c=0|Zt(0|U,0|M,-997805,-1),g=0|u(),d=0|Zt(0|U,0|M,136657,0),A=0|u(),w=0|Sn(0|(O=0|Qn(0|(J=0|Qn(0|(M=0|Zt(0|U,0|M,-683901,-1)),0|u(),0|L,0|J)),0|u(),0|D,0|O)),0|u(),-2097152&W|0,0|w),W=0|u(),Y=0|Qn(0|(O=0|Zt(0|G,0|m,666643,0)),0|u(),2097151&Y|0,0),O=0|u(),D=0|Qn(0|X,0|o,0|(D=0|Zt(0|G,0|m,470296,0)),0|u()),o=0|u(),X=0|Qn(0|z,0|Q,0|(X=0|Zt(0|G,0|m,654183,0)),0|u()),Q=0|u(),z=0|Qn(0|Z,0|l,0|(z=0|Zt(0|G,0|m,-997805,-1)),0|u()),l=0|u(),Z=0|Zt(0|G,0|m,136657,0),J=0|u(),m=0|Zt(0|G,0|m,-683901,-1),G=0|u(),y=0|Qn(0|(L=0|Zt(0|h,0|I,666643,0)),0|u(),2097151&y|0,0),L=0|u(),M=0|Qn(0|Y,0|O,0|(M=0|Zt(0|h,0|I,470296,0)),0|u()),O=0|u(),Y=0|Qn(0|D,0|o,0|(Y=0|Zt(0|h,0|I,654183,0)),0|u()),o=0|u(),D=0|Qn(0|X,0|Q,0|(D=0|Zt(0|h,0|I,-997805,-1)),0|u()),Q=0|u(),X=0|Qn(0|z,0|l,0|(X=0|Zt(0|h,0|I,136657,0)),0|u()),l=0|u(),I=0|Zt(0|h,0|I,-683901,-1),h=0|u(),h=0|Qn(0|(J=0|Qn(0|(g=0|Qn(0|(k=0|Sn(0|(p=0|Qn(0|q,0|f,0|_,0|p)),0|u(),-2097152&C|0,0|k)),0|u(),0|c,0|g)),0|u(),0|Z,0|J)),0|u(),0|I,0|h),I=0|u(),R=0|Qn(0|(J=0|Zt(0|F,0|s,666643,0)),0|u(),2097151&R|0,0),J=0|u(),Z=0|Qn(0|y,0|L,0|(Z=0|Zt(0|F,0|s,470296,0)),0|u()),L=0|u(),y=0|Qn(0|M,0|O,0|(y=0|Zt(0|F,0|s,654183,0)),0|u()),O=0|u(),M=0|Qn(0|Y,0|o,0|(M=0|Zt(0|F,0|s,-997805,-1)),0|u()),o=0|u(),Y=0|Qn(0|D,0|Q,0|(Y=0|Zt(0|F,0|s,136657,0)),0|u()),Q=0|u(),s=0|Qn(0|X,0|l,0|(s=0|Zt(0|F,0|s,-683901,-1)),0|u()),l=0|u(),V=0|Qn(0|(X=0|Zt(0|K,0|S,666643,0)),0|u(),2097151&V|0,0),X=0|u(),F=0|Qn(0|R,0|J,0|(F=0|Zt(0|K,0|S,470296,0)),0|u()),J=0|u(),R=0|Qn(0|Z,0|L,0|(R=0|Zt(0|K,0|S,654183,0)),0|u()),L=0|u(),Z=0|Qn(0|y,0|O,0|(Z=0|Zt(0|K,0|S,-997805,-1)),0|u()),O=0|u(),y=0|Qn(0|M,0|o,0|(y=0|Zt(0|K,0|S,136657,0)),0|u()),o=0|u(),S=0|Qn(0|Y,0|Q,0|(S=0|Zt(0|K,0|S,-683901,-1)),0|u()),Q=0|u(),$=0|Qn(0|(Y=0|Zt(0|te,0|E,666643,0)),0|u(),2097151&$|0,0),Y=0|u(),K=0|Qn(0|V,0|X,0|(K=0|Zt(0|te,0|E,470296,0)),0|u()),X=0|u(),V=0|Qn(0|F,0|J,0|(V=0|Zt(0|te,0|E,654183,0)),0|u()),J=0|u(),F=0|Qn(0|R,0|L,0|(F=0|Zt(0|te,0|E,-997805,-1)),0|u()),L=0|u(),R=0|Qn(0|Z,0|O,0|(R=0|Zt(0|te,0|E,136657,0)),0|u()),O=0|u(),E=0|Qn(0|y,0|o,0|(E=0|Zt(0|te,0|E,-683901,-1)),0|u()),o=0|u(),Z=0|Qn(0|K,0|X,0|(Z=0|tn(0|(y=0|Qn(0|$,0|Y,1048576,0)),0|(te=0|u()),21)),0|u()),X=0|u(),te=0|Sn(0|$,0|Y,-2097152&y|0,0|te),y=0|u(),K=0|Qn(0|F,0|L,0|(K=0|tn(0|(Y=0|Qn(0|V,0|J,1048576,0)),0|($=0|u()),21)),0|u()),L=0|u(),D=0|Qn(0|E,0|o,0|(D=0|tn(0|(F=0|Qn(0|R,0|O,1048576,0)),0|(M=0|u()),21)),0|u()),o=0|u(),c=0|Qn(0|s,0|l,0|(c=0|tn(0|(E=0|Qn(0|S,0|Q,1048576,0)),0|(g=0|u()),21)),0|u()),l=0|u(),g=0|Sn(0|S,0|Q,-2097152&E|0,0|g),E=0|u(),s=0|tn(0|(Q=0|Qn(0|h,0|I,1048576,0)),0|(S=0|u()),21),k=0|u(),k=0|Qn(0|(G=0|Qn(0|(H=0|Sn(0|(P=0|Qn(0|d,0|A,0|b,0|P)),0|u(),-2097152&v|0,0|H)),0|u(),0|m,0|G)),0|u(),0|s,0|k),s=0|u(),S=0|Sn(0|h,0|I,-2097152&Q|0,0|S),Q=0|u(),ee=0|Qn(0|(G=0|tn(0|(I=0|Qn(0|w,0|W,1048576,0)),0|(h=0|u()),21)),0|u(),0|x,0|ee),x=0|u(),h=0|Sn(0|w,0|W,-2097152&I|0,0|h),I=0|u(),G=0|tn(0|(W=0|Qn(0|Z,0|X,1048576,0)),0|(w=0|u()),21),m=0|u(),P=0|tn(0|(H=0|Qn(0|K,0|L,1048576,0)),0|(v=0|u()),21),b=0|u(),C=0|Qn(0|g,0|E,0|(C=0|tn(0|(A=0|Qn(0|D,0|o,1048576,0)),0|(d=0|u()),21)),0|u()),E=0|u(),_=0|Qn(0|S,0|Q,0|(_=0|tn(0|(g=0|Qn(0|c,0|l,1048576,0)),0|(p=0|u()),21)),0|u()),Q=0|u(),p=0|Sn(0|c,0|l,-2097152&g|0,0|p),g=0|u(),S=0|Qn(0|h,0|I,0|(S=0|tn(0|(l=0|Qn(0|k,0|s,1048576,0)),0|(c=0|u()),21)),0|u()),I=0|u(),c=0|Sn(0|k,0|s,-2097152&l|0,0|c),l=0|u(),h=0|tn(0|(s=0|Qn(0|ee,0|x,1048576,0)),0|(k=0|u()),21),f=0|u(),k=0|Sn(0|ee,0|x,-2097152&s|0,0|k),s=0|u(),x=0|Qn(0|te,0|y,0|(x=0|Zt(0|h,0|f,666643,0)),0|u()),y=0|u(),te=0|Zt(0|h,0|f,470296,0),ee=0|u(),q=0|Zt(0|h,0|f,654183,0),z=0|u(),U=0|Zt(0|h,0|f,-997805,-1),N=0|u(),j=0|Zt(0|h,0|f,136657,0),T=0|u(),f=0|Zt(0|h,0|f,-683901,-1),h=0|u(),y=0|tn(0|x,0|y,21),B=0|u(),y=0|tn(0|(B=0|Qn(0|(w=0|Sn(0|(X=0|Qn(0|te,0|ee,0|Z,0|X)),0|u(),-2097152&W|0,0|w)),0|u(),0|y,0|B)),0|u(),21),w=0|u(),y=0|tn(0|(w=0|Qn(0|(m=0|Qn(0|($=0|Sn(0|(J=0|Qn(0|q,0|z,0|V,0|J)),0|u(),-2097152&Y|0,0|$)),0|u(),0|G,0|m)),0|u(),0|y,0|w)),0|u(),21),m=0|u(),y=0|tn(0|(m=0|Qn(0|(v=0|Sn(0|(N=0|Qn(0|K,0|L,0|U,0|N)),0|u(),-2097152&H|0,0|v)),0|u(),0|y,0|m)),0|u(),21),v=0|u(),y=0|tn(0|(v=0|Qn(0|(b=0|Qn(0|(M=0|Sn(0|(O=0|Qn(0|j,0|T,0|R,0|O)),0|u(),-2097152&F|0,0|M)),0|u(),0|P,0|b)),0|u(),0|y,0|v)),0|u(),21),b=0|u(),x=0|Qn(0|(S=0|Zt(0|(k=0|tn(0|(s=0|Qn(0|(I=0|tn(0|(c=0|Qn(0|S,0|I,0|(c=0|tn(0|(l=0|Qn(0|(Q=0|tn(0|(p=0|Qn(0|_,0|Q,0|(p=0|tn(0|(g=0|Qn(0|(E=0|tn(0|(y=0|Qn(0|C,0|E,0|(y=0|tn(0|(b=0|Qn(0|(d=0|Sn(0|(h=0|Qn(0|D,0|o,0|f,0|h)),0|u(),-2097152&A|0,0|d)),0|u(),0|y,0|b)),0|u(),21)),0|u())),0|u(),21)),0|u(),0|p,0|g)),0|u(),21)),0|u())),0|u(),21)),0|u(),0|c,0|l)),0|u(),21)),0|u())),0|u(),21)),0|u(),0|k,0|s)),0|u(),21)),0|(I=0|u()),666643,0)),0|u(),2097151&x|0,0),S=0|u(),B=0|Qn(0|(Q=0|Zt(0|k,0|I,470296,0)),0|u(),2097151&B|0,0),Q=0|u(),w=0|Qn(0|(_=0|Zt(0|k,0|I,654183,0)),0|u(),2097151&w|0,0),_=0|u(),m=0|Qn(0|(E=0|Zt(0|k,0|I,-997805,-1)),0|u(),2097151&m|0,0),E=0|u(),v=0|Qn(0|(C=0|Zt(0|k,0|I,136657,0)),0|u(),2097151&v|0,0),C=0|u(),s=0|Qn(0|(o=0|tn(0|(c=0|Qn(0|(f=0|tn(0|(l=0|Qn(0|(h=0|tn(0|(p=0|Qn(0|(A=0|tn(0|(g=0|Qn(0|(d=0|tn(0|(y=0|Qn(0|(b=0|tn(0|(v=0|Qn(0|(b=0|Qn(0|(I=0|Zt(0|k,0|I,-683901,-1)),0|u(),2097151&b|0,0)),0|(I=0|u()),0|(v=0|tn(0|(m=0|Qn(0|v,0|C,0|(m=0|tn(0|(w=0|Qn(0|m,0|E,0|(w=0|tn(0|(B=0|Qn(0|w,0|_,0|(B=0|tn(0|(k=0|Qn(0|B,0|Q,0|(k=0|tn(0|x,0|S,21)),0|u())),0|(Q=0|u()),21)),0|u())),0|(_=0|u()),21)),0|u())),0|(E=0|u()),21)),0|u())),0|(C=0|u()),21)),0|u())),0|(I=0|u()),21)),0|u(),2097151&y|0,0)),0|(b=0|u()),21)),0|u(),2097151&g|0,0)),0|(d=0|u()),21)),0|u(),2097151&p|0,0)),0|(A=0|u()),21)),0|u(),2097151&l|0,0)),0|(h=0|u()),21)),0|u(),2097151&c|0,0)),0|(f=0|u()),21)),0|u(),2097151&s|0,0),o=0|u(),r[e>>0]=x,D=0|An(0|x,0|S,8),u(),r[e+1>>0]=D,S=0|An(0|x,0|S,16),u(),x=0|cn(2097151&k|0,0,5),u(),r[e+2>>0]=x|31&S,S=0|An(0|k,0|Q,3),u(),r[e+3>>0]=S,Q=0|An(0|k,0|Q,11),u(),r[e+4>>0]=Q,k=0|An(2097151&k|0,0,19),Q=0|u(),S=0|cn(2097151&B|0,0,2),u(),r[e+5>>0]=S|k,_=0|An(0|B,0|_,6),u(),r[e+6>>0]=_,B=0|An(2097151&B|0,0,14),_=0|u(),k=0|cn(2097151&w|0,0,7),u(),r[e+7>>0]=k|B,B=0|An(0|w,0|E,1),u(),r[e+8>>0]=B,E=0|An(0|w,0|E,9),u(),r[e+9>>0]=E,w=0|An(2097151&w|0,0,17),E=0|u(),B=0|cn(2097151&m|0,0,4),u(),r[e+10>>0]=B|w,w=0|An(0|m,0|C,4),u(),r[e+11>>0]=w,C=0|An(0|m,0|C,12),u(),r[e+12>>0]=C,m=0|An(2097151&m|0,0,20),C=0|u(),w=0|cn(2097151&v|0,0,1),u(),r[e+13>>0]=w|m,I=0|An(0|v,0|I,7),u(),r[e+14>>0]=I,v=0|An(2097151&v|0,0,15),I=0|u(),m=0|cn(2097151&y|0,0,6),u(),r[e+15>>0]=m|v,v=0|An(0|y,0|b,2),u(),r[e+16>>0]=v,b=0|An(0|y,0|b,10),u(),r[e+17>>0]=b,y=0|An(2097151&y|0,0,18),b=0|u(),v=0|cn(0|g,0|d,3),u(),r[e+18>>0]=v|y,y=0|An(0|g,0|d,5),u(),r[e+19>>0]=y,d=0|An(0|g,0|d,13),u(),r[e+20>>0]=d,r[e+21>>0]=p,d=0|An(0|p,0|A,8),u(),r[e+22>>0]=d,A=0|An(0|p,0|A,16),u(),p=0|cn(2097151&l|0,0,5),u(),r[e+23>>0]=p|31&A,A=0|An(0|l,0|h,3),u(),r[e+24>>0]=A,h=0|An(0|l,0|h,11),u(),r[e+25>>0]=h,l=0|An(2097151&l|0,0,19),h=0|u(),A=0|cn(2097151&c|0,0,2),u(),r[e+26>>0]=A|l,f=0|An(0|c,0|f,6),u(),r[e+27>>0]=f,c=0|An(2097151&c|0,0,14),f=0|u(),l=0|cn(0|s,0|o,7),u(),r[e+28>>0]=l|c,c=0|An(0|s,0|o,1),u(),r[e+29>>0]=c,c=0|An(0|s,0|o,9),u(),r[e+30>>0]=c,o=0|tn(0|s,0|o,17),u(),r[e+31>>0]=o}function C(e,t,n){e|=0,n|=0;var r,a,o,s,c,l,f,A,h,p,d,g,y,v,b,m,I,w,C,B,E,k,_,S,Q,x,D,P,M,F,O,R,T,j,H,N,U,L,K,G,$,Y,J,V,z,q,W,X,Z,ee,te,ne,re,ie,ae,oe,se,ce,ue,le,fe,Ae,he,pe,de,ge,ye,ve,be,me,Ie,we,Ce,Be,Ee,ke,_e,Se,Qe,xe,De,Pe,Me,Fe,Oe,Re,Te,je,He,Ne=0,Ue=0,Le=0,Ke=0,Ge=0,$e=0,Ye=0,Je=0,Ve=0,ze=0,qe=0,We=0,Xe=0,Ze=0,et=0,tt=0,nt=0,rt=0,it=0,at=0,ot=0,st=0,ct=0,ut=0,lt=0,ft=0,At=0,ht=0,pt=0,dt=0,gt=0,yt=0,vt=0,bt=0,mt=0,It=0,wt=0,Ct=0,Bt=0,Et=0,kt=0,_t=0,St=0,Qt=0,xt=0,Dt=0,Pt=0,Mt=0,Ft=0,Ot=0,Rt=0,Tt=0,jt=0,Ht=0,Nt=0,Ut=0,Lt=0,Kt=0,Gt=0,$t=0,Yt=0,Jt=0,Vt=0,zt=0,qt=0,Wt=0,Xt=0,en=0,nn=0,rn=0,an=0,on=0,sn=0,cn=0,un=0,ln=0,fn=0,hn=0,pn=0,dn=0,gn=0,yn=0,vn=0,bn=0,mn=0,In=0,wn=0,Cn=0,Bn=0,En=0,kn=0,_n=0,xn=0,Dn=0,Pn=0,Mn=0,Fn=0,On=0,Rn=0,Tn=0,jn=0,Hn=0,Nn=0,Un=0,Ln=0,Kn=0,Gn=0,$n=0,Yn=0,Jn=0;et=0|i[(t|=0)>>2],Je=0|i[t+4>>2],$e=0|i[t+8>>2],Xe=0|i[t+12>>2],Pt=0|i[t+16>>2],We=0|i[t+20>>2],un=0|i[t+24>>2],Ne=0|i[t+28>>2],wt=0|i[t+32>>2],At=0|i[t+36>>2],ut=0|i[n>>2],Jn=0|i[n+4>>2],_n=0|i[n+8>>2],on=0|i[n+12>>2],jt=0|i[n+16>>2],Mn=0|i[n+20>>2],hn=0|i[n+24>>2],Kt=0|i[n+28>>2],Ct=0|i[n+32>>2],He=0|i[n+36>>2],Te=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),Yn=0|u(),Qe=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),Se=0|u(),ne=0|Zt(0|_n,((0|_n)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),sn=0|u(),T=0|Zt(0|on,((0|on)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),Ht=0|u(),we=0|Zt(0|jt,((0|jt)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),On=0|u(),ce=0|Zt(0|Mn,((0|Mn)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),dn=0|u(),K=0|Zt(0|hn,((0|hn)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),$t=0|u(),B=0|Zt(0|Kt,((0|Kt)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),Et=0|u(),p=0|Zt(0|Ct,((0|Ct)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),ht=0|u(),et=0|Zt(0|He,((0|He)<0)<<31>>31|0,0|et,((0|et)<0)<<31>>31|0),Ze=0|u(),xn=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|Je,((0|Je)<0)<<31>>31|0),Dn=0|u(),ae=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,Je<<1|0,((Je<<1|0)<0)<<31>>31|0),ie=0|u(),j=0|Zt(0|_n,((0|_n)<0)<<31>>31|0,0|Je,((0|Je)<0)<<31>>31|0),Nt=0|u(),Ce=0|Zt(0|on,((0|on)<0)<<31>>31|0,Je<<1|0,((Je<<1|0)<0)<<31>>31|0),Rn=0|u(),ue=0|Zt(0|jt,((0|jt)<0)<<31>>31|0,0|Je,((0|Je)<0)<<31>>31|0),gn=0|u(),G=0|Zt(0|Mn,((0|Mn)<0)<<31>>31|0,Je<<1|0,((Je<<1|0)<0)<<31>>31|0),Yt=0|u(),E=0|Zt(0|hn,((0|hn)<0)<<31>>31|0,0|Je,((0|Je)<0)<<31>>31|0),kt=0|u(),d=0|Zt(0|Kt,((0|Kt)<0)<<31>>31|0,Je<<1|0,((Je<<1|0)<0)<<31>>31|0),pt=0|u(),r=0|Zt(0|Ct,((0|Ct)<0)<<31>>31|0,0|Je,((0|Je)<0)<<31>>31|0),tt=0|u(),Je=0|Zt(19*He|0,0|(ft=((19*He|0)<0)<<31>>31),Je<<1|0,((Je<<1|0)<0)<<31>>31|0),t=0|u(),re=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),cn=0|u(),U=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),N=0|u(),Be=0|Zt(0|_n,((0|_n)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),Tn=0|u(),le=0|Zt(0|on,((0|on)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),yn=0|u(),$=0|Zt(0|jt,((0|jt)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),Jt=0|u(),k=0|Zt(0|Mn,((0|Mn)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),_t=0|u(),g=0|Zt(0|hn,((0|hn)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),dt=0|u(),a=0|Zt(0|Kt,((0|Kt)<0)<<31>>31|0,0|$e,((0|$e)<0)<<31>>31|0),nt=0|u(),xe=0|Zt(19*Ct|0,0|(Bt=((19*Ct|0)<0)<<31>>31),0|$e,((0|$e)<0)<<31>>31|0),Hn=0|u(),$e=0|Zt(19*He|0,0|ft,0|$e,((0|$e)<0)<<31>>31|0),Ye=0|u(),H=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),Ut=0|u(),_e=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,Xe<<1|0,((Xe<<1|0)<0)<<31>>31|0),ke=0|u(),fe=0|Zt(0|_n,((0|_n)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),vn=0|u(),Y=0|Zt(0|on,((0|on)<0)<<31>>31|0,Xe<<1|0,((Xe<<1|0)<0)<<31>>31|0),Vt=0|u(),_=0|Zt(0|jt,((0|jt)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),St=0|u(),y=0|Zt(0|Mn,((0|Mn)<0)<<31>>31|0,Xe<<1|0,((Xe<<1|0)<0)<<31>>31|0),gt=0|u(),o=0|Zt(0|hn,((0|hn)<0)<<31>>31|0,0|Xe,((0|Xe)<0)<<31>>31|0),rt=0|u(),De=0|Zt(19*Kt|0,0|(Gt=((19*Kt|0)<0)<<31>>31),Xe<<1|0,((Xe<<1|0)<0)<<31>>31|0),Nn=0|u(),de=0|Zt(19*Ct|0,0|Bt,0|Xe,((0|Xe)<0)<<31>>31|0),mn=0|u(),Xe=0|Zt(19*He|0,0|ft,Xe<<1|0,((Xe<<1|0)<0)<<31>>31|0),Ge=0|u(),Ee=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|Pt,((0|Pt)<0)<<31>>31|0),jn=0|u(),pe=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,0|Pt,((0|Pt)<0)<<31>>31|0),he=0|u(),J=0|Zt(0|_n,((0|_n)<0)<<31>>31|0,0|Pt,((0|Pt)<0)<<31>>31|0),zt=0|u(),S=0|Zt(0|on,((0|on)<0)<<31>>31|0,0|Pt,((0|Pt)<0)<<31>>31|0),Qt=0|u(),v=0|Zt(0|jt,((0|jt)<0)<<31>>31|0,0|Pt,((0|Pt)<0)<<31>>31|0),yt=0|u(),s=0|Zt(0|Mn,((0|Mn)<0)<<31>>31|0,0|Pt,((0|Pt)<0)<<31>>31|0),it=0|u(),Pe=0|Zt(19*hn|0,0|(pn=((19*hn|0)<0)<<31>>31),0|Pt,((0|Pt)<0)<<31>>31|0),Un=0|u(),ge=0|Zt(19*Kt|0,0|Gt,0|Pt,((0|Pt)<0)<<31>>31|0),In=0|u(),W=0|Zt(19*Ct|0,0|Bt,0|Pt,((0|Pt)<0)<<31>>31|0),Wt=0|u(),Pt=0|Zt(19*He|0,0|ft,0|Pt,((0|Pt)<0)<<31>>31|0),Le=0|u(),Ae=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|We,((0|We)<0)<<31>>31|0),bn=0|u(),q=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,We<<1|0,((We<<1|0)<0)<<31>>31|0),z=0|u(),Q=0|Zt(0|_n,((0|_n)<0)<<31>>31|0,0|We,((0|We)<0)<<31>>31|0),xt=0|u(),b=0|Zt(0|on,((0|on)<0)<<31>>31|0,We<<1|0,((We<<1|0)<0)<<31>>31|0),vt=0|u(),c=0|Zt(0|jt,((0|jt)<0)<<31>>31|0,0|We,((0|We)<0)<<31>>31|0),at=0|u(),Me=0|Zt(19*Mn|0,0|(Fn=((19*Mn|0)<0)<<31>>31),We<<1|0,((We<<1|0)<0)<<31>>31|0),Ln=0|u(),ye=0|Zt(19*hn|0,0|pn,0|We,((0|We)<0)<<31>>31|0),wn=0|u(),X=0|Zt(19*Kt|0,0|Gt,We<<1|0,((We<<1|0)<0)<<31>>31|0),Xt=0|u(),M=0|Zt(19*Ct|0,0|Bt,0|We,((0|We)<0)<<31>>31|0),Mt=0|u(),We=0|Zt(19*He|0,0|ft,We<<1|0,((We<<1|0)<0)<<31>>31|0),Ue=0|u(),V=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|un,((0|un)<0)<<31>>31|0),qt=0|u(),P=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,0|un,((0|un)<0)<<31>>31|0),D=0|u(),m=0|Zt(0|_n,((0|_n)<0)<<31>>31|0,0|un,((0|un)<0)<<31>>31|0),bt=0|u(),l=0|Zt(0|on,((0|on)<0)<<31>>31|0,0|un,((0|un)<0)<<31>>31|0),ot=0|u(),Fe=0|Zt(19*jt|0,((19*jt|0)<0)<<31>>31|0,0|un,((0|un)<0)<<31>>31|0),Kn=0|u(),ve=0|Zt(19*Mn|0,0|Fn,0|un,((0|un)<0)<<31>>31|0),Cn=0|u(),Z=0|Zt(19*hn|0,0|pn,0|un,((0|un)<0)<<31>>31|0),en=0|u(),F=0|Zt(19*Kt|0,0|Gt,0|un,((0|un)<0)<<31>>31|0),Ft=0|u(),Ve=0|Zt(19*Ct|0,0|Bt,0|un,((0|un)<0)<<31>>31|0),ze=0|u(),un=0|Zt(19*He|0,0|ft,0|un,((0|un)<0)<<31>>31|0),Ke=0|u(),x=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|Ne,((0|Ne)<0)<<31>>31|0),Dt=0|u(),C=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),w=0|u(),f=0|Zt(0|_n,((0|_n)<0)<<31>>31|0,0|Ne,((0|Ne)<0)<<31>>31|0),st=0|u(),Oe=0|Zt(19*on|0,((19*on|0)<0)<<31>>31|0,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),Gn=0|u(),be=0|Zt(19*jt|0,((19*jt|0)<0)<<31>>31|0,0|Ne,((0|Ne)<0)<<31>>31|0),Bn=0|u(),ee=0|Zt(19*Mn|0,0|Fn,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),nn=0|u(),O=0|Zt(19*hn|0,0|pn,0|Ne,((0|Ne)<0)<<31>>31|0),Ot=0|u(),lt=0|Zt(19*Kt|0,0|Gt,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),qe=0|u(),oe=0|Zt(19*Ct|0,0|Bt,0|Ne,((0|Ne)<0)<<31>>31|0),ln=0|u(),n=0|Zt(19*He|0,0|ft,Ne<<1|0,((Ne<<1|0)<0)<<31>>31|0),Ne=0|u(),I=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|wt,((0|wt)<0)<<31>>31|0),mt=0|u(),h=0|Zt(0|Jn,((0|Jn)<0)<<31>>31|0,0|wt,((0|wt)<0)<<31>>31|0),A=0|u(),Re=0|Zt(19*_n|0,((19*_n|0)<0)<<31>>31|0,0|wt,((0|wt)<0)<<31>>31|0),$n=0|u(),me=0|Zt(19*on|0,((19*on|0)<0)<<31>>31|0,0|wt,((0|wt)<0)<<31>>31|0),En=0|u(),te=0|Zt(19*jt|0,((19*jt|0)<0)<<31>>31|0,0|wt,((0|wt)<0)<<31>>31|0),rn=0|u(),R=0|Zt(19*Mn|0,0|Fn,0|wt,((0|wt)<0)<<31>>31|0),Rt=0|u(),Ie=0|Zt(19*hn|0,0|pn,0|wt,((0|wt)<0)<<31>>31|0),Pn=0|u(),se=0|Zt(19*Kt|0,0|Gt,0|wt,((0|wt)<0)<<31>>31|0),fn=0|u(),L=0|Zt(19*Ct|0,0|Bt,0|wt,((0|wt)<0)<<31>>31|0),Lt=0|u(),wt=0|Zt(19*He|0,0|ft,0|wt,((0|wt)<0)<<31>>31|0),It=0|u(),ut=0|Zt(0|ut,((0|ut)<0)<<31>>31|0,0|At,((0|At)<0)<<31>>31|0),ct=0|u(),Jn=0|Zt(19*Jn|0,((19*Jn|0)<0)<<31>>31|0,At<<1|0,((At<<1|0)<0)<<31>>31|0),je=0|u(),_n=0|Zt(19*_n|0,((19*_n|0)<0)<<31>>31|0,0|At,((0|At)<0)<<31>>31|0),kn=0|u(),on=0|Zt(19*on|0,((19*on|0)<0)<<31>>31|0,At<<1|0,((At<<1|0)<0)<<31>>31|0),an=0|u(),jt=0|Zt(19*jt|0,((19*jt|0)<0)<<31>>31|0,0|At,((0|At)<0)<<31>>31|0),Tt=0|u(),Fn=0|Zt(19*Mn|0,0|Fn,At<<1|0,((At<<1|0)<0)<<31>>31|0),Mn=0|u(),pn=0|Zt(19*hn|0,0|pn,0|At,((0|At)<0)<<31>>31|0),hn=0|u(),Gt=0|Zt(19*Kt|0,0|Gt,At<<1|0,((At<<1|0)<0)<<31>>31|0),Kt=0|u(),Bt=0|Zt(19*Ct|0,0|Bt,0|At,((0|At)<0)<<31>>31|0),Ct=0|u(),At=0|Zt(19*He|0,0|ft,At<<1|0,((At<<1|0)<0)<<31>>31|0),ft=0|u(),t=0|Qn(0|(Hn=0|Qn(0|(Nn=0|Qn(0|(Un=0|Qn(0|(Ln=0|Qn(0|(Kn=0|Qn(0|(Gn=0|Qn(0|($n=0|Qn(0|(Yn=0|Qn(0|Jn,0|je,0|Te,0|Yn)),0|u(),0|Re,0|$n)),0|u(),0|Oe,0|Gn)),0|u(),0|Fe,0|Kn)),0|u(),0|Me,0|Ln)),0|u(),0|Pe,0|Un)),0|u(),0|De,0|Nn)),0|u(),0|xe,0|Hn)),0|u(),0|Je,0|t),Je=0|u(),Dn=0|Qn(0|Qe,0|Se,0|xn,0|Dn),xn=0|u(),Ue=0|Qn(0|(ze=0|Qn(0|(qe=0|Qn(0|(Pn=0|Qn(0|(Mn=0|Qn(0|(On=0|Qn(0|(Rn=0|Qn(0|(Tn=0|Qn(0|(jn=0|Qn(0|_e,0|ke,0|Ee,0|jn)),0|u(),0|Be,0|Tn)),0|u(),0|Ce,0|Rn)),0|u(),0|we,0|On)),0|u(),0|Fn,0|Mn)),0|u(),0|Ie,0|Pn)),0|u(),0|lt,0|qe)),0|u(),0|Ve,0|ze)),0|u(),0|We,0|Ue),We=0|u(),qe=0|tn(0|(ze=0|Qn(0|t,0|Je,33554432,0)),0|(Ve=0|u()),26),lt=0|u(),lt=0|Qn(0|(Ye=0|Qn(0|(mn=0|Qn(0|(In=0|Qn(0|(wn=0|Qn(0|(Cn=0|Qn(0|(Bn=0|Qn(0|(En=0|Qn(0|(kn=0|Qn(0|Dn,0|xn,0|_n,0|kn)),0|u(),0|me,0|En)),0|u(),0|be,0|Bn)),0|u(),0|ve,0|Cn)),0|u(),0|ye,0|wn)),0|u(),0|ge,0|In)),0|u(),0|de,0|mn)),0|u(),0|$e,0|Ye)),0|u(),0|qe,0|lt),qe=0|u(),Ve=0|Sn(0|t,0|Je,-67108864&ze|0,0|Ve),ze=0|u(),Ye=0|tn(0|(Je=0|Qn(0|Ue,0|We,33554432,0)),0|(t=0|u()),26),$e=0|u(),$e=0|Qn(0|(Ke=0|Qn(0|(ln=0|Qn(0|(fn=0|Qn(0|(hn=0|Qn(0|(dn=0|Qn(0|(gn=0|Qn(0|(yn=0|Qn(0|(vn=0|Qn(0|(bn=0|Qn(0|pe,0|he,0|Ae,0|bn)),0|u(),0|fe,0|vn)),0|u(),0|le,0|yn)),0|u(),0|ue,0|gn)),0|u(),0|ce,0|dn)),0|u(),0|pn,0|hn)),0|u(),0|se,0|fn)),0|u(),0|oe,0|ln)),0|u(),0|un,0|Ke)),0|u(),0|Ye,0|$e),Ye=0|u(),t=0|Sn(0|Ue,0|We,-67108864&Je|0,0|t),Je=0|u(),Ue=0|tn(0|(We=0|Qn(0|lt,0|qe,16777216,0)),0|u(),25),Ke=0|u(),Ke=0|Qn(0|(Ge=0|Qn(0|(Wt=0|Qn(0|(Xt=0|Qn(0|(en=0|Qn(0|(nn=0|Qn(0|(rn=0|Qn(0|(an=0|Qn(0|(sn=0|Qn(0|(cn=0|Qn(0|ae,0|ie,0|re,0|cn)),0|u(),0|ne,0|sn)),0|u(),0|on,0|an)),0|u(),0|te,0|rn)),0|u(),0|ee,0|nn)),0|u(),0|Z,0|en)),0|u(),0|X,0|Xt)),0|u(),0|W,0|Wt)),0|u(),0|Xe,0|Ge)),0|u(),0|Ue,0|Ke),Ue=0|u(),We=0|Sn(0|lt,0|qe,-33554432&We|0,0),qe=0|u(),Ge=0|tn(0|(lt=0|Qn(0|$e,0|Ye,16777216,0)),0|u(),25),Xe=0|u(),Xe=0|Qn(0|(Ne=0|Qn(0|(Lt=0|Qn(0|(Kt=0|Qn(0|($t=0|Qn(0|(Yt=0|Qn(0|(Jt=0|Qn(0|(Vt=0|Qn(0|(zt=0|Qn(0|(qt=0|Qn(0|q,0|z,0|V,0|qt)),0|u(),0|J,0|zt)),0|u(),0|Y,0|Vt)),0|u(),0|$,0|Jt)),0|u(),0|G,0|Yt)),0|u(),0|K,0|$t)),0|u(),0|Gt,0|Kt)),0|u(),0|L,0|Lt)),0|u(),0|n,0|Ne)),0|u(),0|Ge,0|Xe),Ge=0|u(),lt=0|Sn(0|$e,0|Ye,-33554432<|0,0),Ye=0|u(),Ne=0|tn(0|($e=0|Qn(0|Ke,0|Ue,33554432,0)),0|u(),26),n=0|u(),n=0|Qn(0|(Le=0|Qn(0|(Mt=0|Qn(0|(Ft=0|Qn(0|(Ot=0|Qn(0|(Rt=0|Qn(0|(Tt=0|Qn(0|(Ht=0|Qn(0|(Nt=0|Qn(0|(Ut=0|Qn(0|U,0|N,0|H,0|Ut)),0|u(),0|j,0|Nt)),0|u(),0|T,0|Ht)),0|u(),0|jt,0|Tt)),0|u(),0|R,0|Rt)),0|u(),0|O,0|Ot)),0|u(),0|F,0|Ft)),0|u(),0|M,0|Mt)),0|u(),0|Pt,0|Le)),0|u(),0|Ne,0|n),Ne=0|u(),$e=0|Sn(0|Ke,0|Ue,-67108864&$e|0,0),u(),Ke=0|tn(0|(Ue=0|Qn(0|Xe,0|Ge,33554432,0)),0|u(),26),Le=0|u(),Le=0|Qn(0|(It=0|Qn(0|(Ct=0|Qn(0|(Et=0|Qn(0|(kt=0|Qn(0|(_t=0|Qn(0|(St=0|Qn(0|(Qt=0|Qn(0|(xt=0|Qn(0|(Dt=0|Qn(0|P,0|D,0|x,0|Dt)),0|u(),0|Q,0|xt)),0|u(),0|S,0|Qt)),0|u(),0|_,0|St)),0|u(),0|k,0|_t)),0|u(),0|E,0|kt)),0|u(),0|B,0|Et)),0|u(),0|Bt,0|Ct)),0|u(),0|wt,0|It)),0|u(),0|Ke,0|Le),Ke=0|u(),Ue=0|Sn(0|Xe,0|Ge,-67108864&Ue|0,0),u(),Je=0|Qn(0|(Xe=0|tn(0|(Ge=0|Qn(0|n,0|Ne,16777216,0)),0|u(),25)),0|u(),0|t,0|Je),t=0|u(),Ge=0|Sn(0|n,0|Ne,-33554432&Ge|0,0),u(),n=0|tn(0|(Ne=0|Qn(0|Le,0|Ke,16777216,0)),0|u(),25),Xe=0|u(),Xe=0|Qn(0|(ft=0|Qn(0|(ht=0|Qn(0|(pt=0|Qn(0|(dt=0|Qn(0|(gt=0|Qn(0|(yt=0|Qn(0|(vt=0|Qn(0|(bt=0|Qn(0|(mt=0|Qn(0|C,0|w,0|I,0|mt)),0|u(),0|m,0|bt)),0|u(),0|b,0|vt)),0|u(),0|v,0|yt)),0|u(),0|y,0|gt)),0|u(),0|g,0|dt)),0|u(),0|d,0|pt)),0|u(),0|p,0|ht)),0|u(),0|At,0|ft)),0|u(),0|n,0|Xe),n=0|u(),Ne=0|Sn(0|Le,0|Ke,-33554432&Ne|0,0),u(),Le=0|Qn(0|lt,0|Ye,0|(Le=0|An(0|(Ke=0|Qn(0|Je,0|t,33554432,0)),0|u(),26)),0|u()),u(),Ke=0|Sn(0|Je,0|t,-67108864&Ke|0,0),u(),Je=0|tn(0|(t=0|Qn(0|Xe,0|n,33554432,0)),0|u(),26),Ye=0|u(),Ye=0|Qn(0|(Ze=0|Qn(0|(tt=0|Qn(0|(nt=0|Qn(0|(rt=0|Qn(0|(it=0|Qn(0|(at=0|Qn(0|(ot=0|Qn(0|(st=0|Qn(0|(ct=0|Qn(0|h,0|A,0|ut,0|ct)),0|u(),0|f,0|st)),0|u(),0|l,0|ot)),0|u(),0|c,0|at)),0|u(),0|s,0|it)),0|u(),0|o,0|rt)),0|u(),0|a,0|nt)),0|u(),0|r,0|tt)),0|u(),0|et,0|Ze)),0|u(),0|Je,0|Ye),Je=0|u(),t=0|Sn(0|Xe,0|n,-67108864&t|0,0),u(),ze=0|Qn(0|(Xe=0|Zt(0|(Xe=0|tn(0|(n=0|Qn(0|Ye,0|Je,16777216,0)),0|u(),25)),0|u(),19,0)),0|u(),0|Ve,0|ze),Ve=0|u(),n=0|Sn(0|Ye,0|Je,-33554432&n|0,0),u(),Ye=0|Qn(0|We,0|qe,0|(Ye=0|An(0|(Je=0|Qn(0|ze,0|Ve,33554432,0)),0|u(),26)),0|u()),u(),Je=0|Sn(0|ze,0|Ve,-67108864&Je|0,0),u(),i[e>>2]=Je,i[e+4>>2]=Ye,i[e+8>>2]=$e,i[e+12>>2]=Ge,i[e+16>>2]=Ke,i[e+20>>2]=Le,i[e+24>>2]=Ue,i[e+28>>2]=Ne,i[e+32>>2]=t,i[e+36>>2]=n}function B(e,t,n){e|=0,n|=0;var r,a,o=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0,_=0,S=0,Q=0,x=0,D=0,P=0,M=0,F=0,O=0,R=0,T=0,j=0,H=0;r=y,a=y=y+63&-64,y=y+2048|0,lr(a+1024|0,t|=0),kt(a+1024|0,e),lr(a,a+1024|0),kt(a,n),e=0;do{s=0|i[a+1024+((4|(t=e<<4))<<3)>>2],c=0|i[a+1024+((4|t)<<3)+4>>2],O=0|yt(0|i[a+1024+(t<<3)>>2],0|i[a+1024+(t<<3)+4>>2],s,c),H=0|u(),x=0|Yt(i[a+1024+((12|t)<<3)>>2]^O,i[a+1024+((12|t)<<3)+4>>2]^H,32),B=0|u(),B=0|Yt((H=0|yt(O,H,c=0|Yt((I=0|yt(0|i[a+1024+((8|t)<<3)>>2],0|i[a+1024+((8|t)<<3)+4>>2],x,B))^s,(m=0|u())^c,24),s=0|u()))^x,(O=0|u())^B,16),x=0|u(),i[a+1024+((12|t)<<3)>>2]=B,i[a+1024+((12|t)<<3)+4>>2]=x,m=0|yt(I,m,B,x),I=0|u(),i[a+1024+((8|t)<<3)>>2]=m,i[a+1024+((8|t)<<3)+4>>2]=I,s=0|Yt(m^c,I^s,63),c=0|u(),i[a+1024+((4|t)<<3)>>2]=s,i[a+1024+((4|t)<<3)+4>>2]=c,M=0|i[a+1024+((5|t)<<3)>>2],F=0|i[a+1024+((5|t)<<3)+4>>2],_=0|yt(0|i[a+1024+((1|t)<<3)>>2],0|i[a+1024+((1|t)<<3)+4>>2],M,F),D=0|u(),w=0|Yt(i[a+1024+((13|t)<<3)>>2]^_,i[a+1024+((13|t)<<3)+4>>2]^D,32),d=0|u(),f=0|yt(A=0|yt(0|i[a+1024+((9|t)<<3)>>2],0|i[a+1024+((9|t)<<3)+4>>2],w,d),f=0|u(),d=0|Yt((D=0|yt(_,D,F=0|Yt(A^M,f^F,24),M=0|u()))^w,(_=0|u())^d,16),w=0|u()),A=0|u(),i[a+1024+((9|t)<<3)>>2]=f,i[a+1024+((9|t)<<3)+4>>2]=A,M=0|Yt(f^F,A^M,63),F=0|u(),E=0|i[a+1024+((6|t)<<3)>>2],k=0|i[a+1024+((6|t)<<3)+4>>2],b=0|yt(0|i[a+1024+((2|t)<<3)>>2],0|i[a+1024+((2|t)<<3)+4>>2],E,k),C=0|u(),h=0|Yt(i[a+1024+((14|t)<<3)>>2]^b,i[a+1024+((14|t)<<3)+4>>2]^C,32),o=0|u(),E=0|Yt((R=0|yt(T=0|yt(0|i[a+1024+((10|t)<<3)>>2],0|i[a+1024+((10|t)<<3)+4>>2],h,o),R=0|u(),o=0|Yt((C=0|yt(b,C,k=0|Yt(T^E,R^k,24),E=0|u()))^h,(b=0|u())^o,16),h=0|u()))^k,(T=0|u())^E,63),k=0|u(),g=0|i[a+1024+((7|t)<<3)>>2],v=0|i[a+1024+((7|t)<<3)+4>>2],l=0|yt(0|i[a+1024+((3|t)<<3)>>2],0|i[a+1024+((3|t)<<3)+4>>2],g,v),p=0|u(),j=0|Yt(i[a+1024+((15|t)<<3)>>2]^l,i[a+1024+((15|t)<<3)+4>>2]^p,32),P=0|u(),g=0|Yt((S=0|yt(Q=0|yt(0|i[a+1024+((11|t)<<3)>>2],0|i[a+1024+((11|t)<<3)+4>>2],j,P),S=0|u(),P=0|Yt((p=0|yt(l,p,v=0|Yt(Q^g,S^v,24),g=0|u()))^j,(l=0|u())^P,16),j=0|u()))^v,(Q=0|u())^g,63),v=0|u(),H=0|yt(O=0|yt(H,O,M,F),H=0|u(),F=0|Yt((T=0|yt(R,T,j=0|Yt(O^P,H^j,32),P=0|u()))^M,(R=0|u())^F,24),M=0|u()),O=0|u(),i[a+1024+(t<<3)>>2]=H,i[a+1024+(t<<3)+4>>2]=O,P=0|Yt(H^j,O^P,16),O=0|u(),i[a+1024+((15|t)<<3)>>2]=P,i[a+1024+((15|t)<<3)+4>>2]=O,O=0|yt(T,R,P,O),P=0|u(),i[a+1024+((10|t)<<3)>>2]=O,i[a+1024+((10|t)<<3)+4>>2]=P,M=0|Yt(O^F,P^M,63),P=0|u(),i[a+1024+((5|t)<<3)>>2]=M,i[a+1024+((5|t)<<3)+4>>2]=P,D=0|yt(_=0|yt(D,_,E,k),D=0|u(),k=0|Yt((Q=0|yt(S,Q,x=0|Yt(_^B,D^x,32),B=0|u()))^E,(S=0|u())^k,24),E=0|u()),_=0|u(),i[a+1024+((1|t)<<3)>>2]=D,i[a+1024+((1|t)<<3)+4>>2]=_,B=0|Yt(D^x,_^B,16),_=0|u(),i[a+1024+((12|t)<<3)>>2]=B,i[a+1024+((12|t)<<3)+4>>2]=_,_=0|yt(Q,S,B,_),B=0|u(),i[a+1024+((11|t)<<3)>>2]=_,i[a+1024+((11|t)<<3)+4>>2]=B,E=0|Yt(_^k,B^E,63),B=0|u(),i[a+1024+((6|t)<<3)>>2]=E,i[a+1024+((6|t)<<3)+4>>2]=B,C=0|yt(b=0|yt(C,b,g,v),C=0|u(),v=0|Yt((I=0|yt(m,I,w=0|Yt(b^d,C^w,32),d=0|u()))^g,(m=0|u())^v,24),g=0|u()),b=0|u(),i[a+1024+((2|t)<<3)>>2]=C,i[a+1024+((2|t)<<3)+4>>2]=b,d=0|Yt(C^w,b^d,16),b=0|u(),i[a+1024+((13|t)<<3)>>2]=d,i[a+1024+((13|t)<<3)+4>>2]=b,b=0|yt(I,m,d,b),d=0|u(),i[a+1024+((8|t)<<3)>>2]=b,i[a+1024+((8|t)<<3)+4>>2]=d,g=0|Yt(b^v,d^g,63),d=0|u(),i[a+1024+((7|t)<<3)>>2]=g,i[a+1024+((7|t)<<3)+4>>2]=d,p=0|yt(l=0|yt(p,l,s,c),p=0|u(),c=0|Yt((A=0|yt(f,A,h=0|Yt(l^o,p^h,32),o=0|u()))^s,(f=0|u())^c,24),s=0|u()),l=0|u(),i[a+1024+((3|t)<<3)>>2]=p,i[a+1024+((3|t)<<3)+4>>2]=l,o=0|Yt(p^h,l^o,16),l=0|u(),i[a+1024+((14|t)<<3)>>2]=o,i[a+1024+((14|t)<<3)+4>>2]=l,l=0|yt(A,f,o,l),o=0|u(),i[a+1024+((9|t)<<3)>>2]=l,i[a+1024+((9|t)<<3)+4>>2]=o,s=0|Yt(l^c,o^s,63),o=0|u(),i[a+1024+((4|t)<<3)>>2]=s,i[a+1024+((4|t)<<3)+4>>2]=o,e=e+1|0}while(8!=(0|e));e=0;do{T=0|i[(R=a+1024+(32+(H=e<<1)<<3)|0)>>2],R=0|i[R+4>>2],l=0|yt(0|i[a+1024+(H<<3)>>2],0|i[a+1024+(H<<3)+4>>2],T,R),t=0|u(),d=0|Yt(i[(d=a+1024+(H+96<<3)|0)>>2]^l,i[d+4>>2]^t,32),I=0|u(),I=0|Yt((t=0|yt(l,t,R=0|Yt((E=0|yt(0|i[(E=a+1024+(H+64<<3)|0)>>2],0|i[E+4>>2],d,I))^T,(k=0|u())^R,24),T=0|u()))^d,(l=0|u())^I,16),d=0|u(),i[(h=a+1024+(H+96<<3)|0)>>2]=I,i[h+4>>2]=d,k=0|yt(E,k,I,d),E=0|u(),i[(h=a+1024+(H+64<<3)|0)>>2]=k,i[h+4>>2]=E,T=0|Yt(k^R,E^T,63),R=0|u(),i[(h=a+1024+(H+32<<3)|0)>>2]=T,i[h+4>>2]=R,f=0|i[(h=a+1024+(H+33<<3)|0)>>2],h=0|i[h+4>>2],b=0|yt(0|i[a+1024+((1|H)<<3)>>2],0|i[a+1024+((1|H)<<3)+4>>2],f,h),p=0|u(),B=0|Yt(i[(B=a+1024+(H+97<<3)|0)>>2]^b,i[B+4>>2]^p,32),Q=0|u(),F=0|yt(M=0|yt(0|i[(M=a+1024+(H+65<<3)|0)>>2],0|i[M+4>>2],B,Q),F=0|u(),Q=0|Yt((p=0|yt(b,p,h=0|Yt(M^f,F^h,24),f=0|u()))^B,(b=0|u())^Q,16),B=0|u()),M=0|u(),i[(_=a+1024+(H+65<<3)|0)>>2]=F,i[_+4>>2]=M,f=0|Yt(F^h,M^f,63),h=0|u(),_=a+1024+(H+16<<3)|0,m=0|i[(w=a+1024+(H+48<<3)|0)>>2],w=0|i[w+4>>2],_=0|yt(0|i[_>>2],0|i[_+4>>2],m,w),C=0|u(),P=0|Yt(i[(P=a+1024+(H+112<<3)|0)>>2]^_,i[P+4>>2]^C,32),j=0|u(),m=0|Yt((c=0|yt(s=0|yt(0|i[(s=a+1024+(H+80<<3)|0)>>2],0|i[s+4>>2],P,j),c=0|u(),j=0|Yt((C=0|yt(_,C,w=0|Yt(s^m,c^w,24),m=0|u()))^P,(_=0|u())^j,16),P=0|u()))^w,(s=0|u())^m,63),w=0|u(),O=a+1024+(H+17<<3)|0,S=0|i[(x=a+1024+(H+49<<3)|0)>>2],x=0|i[x+4>>2],O=0|yt(0|i[O>>2],0|i[O+4>>2],S,x),D=0|u(),o=0|Yt(i[(o=a+1024+(H+113<<3)|0)>>2]^O,i[o+4>>2]^D,32),A=0|u(),S=0|Yt((v=0|yt(g=0|yt(0|i[(g=a+1024+(H+81<<3)|0)>>2],0|i[g+4>>2],o,A),v=0|u(),A=0|Yt((D=0|yt(O,D,x=0|Yt(g^S,v^x,24),S=0|u()))^o,(O=0|u())^A,16),o=0|u()))^x,(g=0|u())^S,63),x=0|u(),t=0|yt(l=0|yt(t,l,f,h),t=0|u(),h=0|Yt((s=0|yt(c,s,o=0|Yt(l^A,t^o,32),A=0|u()))^f,(c=0|u())^h,24),f=0|u()),l=0|u(),i[a+1024+(H<<3)>>2]=t,i[a+1024+(H<<3)+4>>2]=l,A=0|Yt(t^o,l^A,16),l=0|u(),i[(o=a+1024+(H+113<<3)|0)>>2]=A,i[o+4>>2]=l,l=0|yt(s,c,A,l),A=0|u(),i[(c=a+1024+(H+80<<3)|0)>>2]=l,i[c+4>>2]=A,f=0|Yt(l^h,A^f,63),A=0|u(),i[(h=a+1024+(H+33<<3)|0)>>2]=f,i[h+4>>2]=A,p=0|yt(b=0|yt(p,b,m,w),p=0|u(),w=0|Yt((g=0|yt(v,g,d=0|Yt(b^I,p^d,32),I=0|u()))^m,(v=0|u())^w,24),m=0|u()),b=0|u(),i[a+1024+((1|H)<<3)>>2]=p,i[a+1024+((1|H)<<3)+4>>2]=b,I=0|Yt(p^d,b^I,16),b=0|u(),i[(d=a+1024+(H+96<<3)|0)>>2]=I,i[d+4>>2]=b,b=0|yt(g,v,I,b),I=0|u(),i[(v=a+1024+(H+81<<3)|0)>>2]=b,i[v+4>>2]=I,m=0|Yt(b^w,I^m,63),I=0|u(),i[(w=a+1024+(H+48<<3)|0)>>2]=m,i[w+4>>2]=I,C=0|yt(_=0|yt(C,_,S,x),C=0|u(),x=0|Yt((E=0|yt(k,E,B=0|Yt(_^Q,C^B,32),Q=0|u()))^S,(k=0|u())^x,24),S=0|u()),_=0|u(),i[(w=a+1024+(H+16<<3)|0)>>2]=C,i[w+4>>2]=_,Q=0|Yt(C^B,_^Q,16),_=0|u(),i[(B=a+1024+(H+97<<3)|0)>>2]=Q,i[B+4>>2]=_,_=0|yt(E,k,Q,_),Q=0|u(),i[(k=a+1024+(H+64<<3)|0)>>2]=_,i[k+4>>2]=Q,S=0|Yt(_^x,Q^S,63),Q=0|u(),i[(x=a+1024+(H+49<<3)|0)>>2]=S,i[x+4>>2]=Q,D=0|yt(O=0|yt(D,O,T,R),D=0|u(),R=0|Yt((M=0|yt(F,M,P=0|Yt(O^j,D^P,32),j=0|u()))^T,(F=0|u())^R,24),T=0|u()),O=0|u(),i[(x=a+1024+(H+17<<3)|0)>>2]=D,i[x+4>>2]=O,j=0|Yt(D^P,O^j,16),O=0|u(),i[(P=a+1024+(H+112<<3)|0)>>2]=j,i[P+4>>2]=O,O=0|yt(M,F,j,O),j=0|u(),i[(F=a+1024+(H+65<<3)|0)>>2]=O,i[F+4>>2]=j,T=0|Yt(O^R,j^T,63),j=0|u(),i[(H=a+1024+(H+32<<3)|0)>>2]=T,i[H+4>>2]=j,e=e+1|0}while(8!=(0|e));lr(n,a),kt(n,a+1024|0),y=r}function E(e,t,n){e|=0,n|=0;var r,a,o=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0,_=0,S=0,Q=0,x=0,D=0,P=0,M=0,F=0,O=0,R=0,T=0,j=0,H=0;r=y,a=y=y+63&-64,y=y+2048|0,lr(a+1024|0,t|=0),kt(a+1024|0,e),lr(a,a+1024|0),e=0;do{s=0|i[a+1024+((4|(t=e<<4))<<3)>>2],c=0|i[a+1024+((4|t)<<3)+4>>2],O=0|yt(0|i[a+1024+(t<<3)>>2],0|i[a+1024+(t<<3)+4>>2],s,c),H=0|u(),x=0|Yt(i[a+1024+((12|t)<<3)>>2]^O,i[a+1024+((12|t)<<3)+4>>2]^H,32),B=0|u(),B=0|Yt((H=0|yt(O,H,c=0|Yt((I=0|yt(0|i[a+1024+((8|t)<<3)>>2],0|i[a+1024+((8|t)<<3)+4>>2],x,B))^s,(m=0|u())^c,24),s=0|u()))^x,(O=0|u())^B,16),x=0|u(),i[a+1024+((12|t)<<3)>>2]=B,i[a+1024+((12|t)<<3)+4>>2]=x,m=0|yt(I,m,B,x),I=0|u(),i[a+1024+((8|t)<<3)>>2]=m,i[a+1024+((8|t)<<3)+4>>2]=I,s=0|Yt(m^c,I^s,63),c=0|u(),i[a+1024+((4|t)<<3)>>2]=s,i[a+1024+((4|t)<<3)+4>>2]=c,M=0|i[a+1024+((5|t)<<3)>>2],F=0|i[a+1024+((5|t)<<3)+4>>2],_=0|yt(0|i[a+1024+((1|t)<<3)>>2],0|i[a+1024+((1|t)<<3)+4>>2],M,F),D=0|u(),w=0|Yt(i[a+1024+((13|t)<<3)>>2]^_,i[a+1024+((13|t)<<3)+4>>2]^D,32),d=0|u(),f=0|yt(A=0|yt(0|i[a+1024+((9|t)<<3)>>2],0|i[a+1024+((9|t)<<3)+4>>2],w,d),f=0|u(),d=0|Yt((D=0|yt(_,D,F=0|Yt(A^M,f^F,24),M=0|u()))^w,(_=0|u())^d,16),w=0|u()),A=0|u(),i[a+1024+((9|t)<<3)>>2]=f,i[a+1024+((9|t)<<3)+4>>2]=A,M=0|Yt(f^F,A^M,63),F=0|u(),E=0|i[a+1024+((6|t)<<3)>>2],k=0|i[a+1024+((6|t)<<3)+4>>2],b=0|yt(0|i[a+1024+((2|t)<<3)>>2],0|i[a+1024+((2|t)<<3)+4>>2],E,k),C=0|u(),h=0|Yt(i[a+1024+((14|t)<<3)>>2]^b,i[a+1024+((14|t)<<3)+4>>2]^C,32),o=0|u(),E=0|Yt((R=0|yt(T=0|yt(0|i[a+1024+((10|t)<<3)>>2],0|i[a+1024+((10|t)<<3)+4>>2],h,o),R=0|u(),o=0|Yt((C=0|yt(b,C,k=0|Yt(T^E,R^k,24),E=0|u()))^h,(b=0|u())^o,16),h=0|u()))^k,(T=0|u())^E,63),k=0|u(),g=0|i[a+1024+((7|t)<<3)>>2],v=0|i[a+1024+((7|t)<<3)+4>>2],l=0|yt(0|i[a+1024+((3|t)<<3)>>2],0|i[a+1024+((3|t)<<3)+4>>2],g,v),p=0|u(),j=0|Yt(i[a+1024+((15|t)<<3)>>2]^l,i[a+1024+((15|t)<<3)+4>>2]^p,32),P=0|u(),g=0|Yt((S=0|yt(Q=0|yt(0|i[a+1024+((11|t)<<3)>>2],0|i[a+1024+((11|t)<<3)+4>>2],j,P),S=0|u(),P=0|Yt((p=0|yt(l,p,v=0|Yt(Q^g,S^v,24),g=0|u()))^j,(l=0|u())^P,16),j=0|u()))^v,(Q=0|u())^g,63),v=0|u(),H=0|yt(O=0|yt(H,O,M,F),H=0|u(),F=0|Yt((T=0|yt(R,T,j=0|Yt(O^P,H^j,32),P=0|u()))^M,(R=0|u())^F,24),M=0|u()),O=0|u(),i[a+1024+(t<<3)>>2]=H,i[a+1024+(t<<3)+4>>2]=O,P=0|Yt(H^j,O^P,16),O=0|u(),i[a+1024+((15|t)<<3)>>2]=P,i[a+1024+((15|t)<<3)+4>>2]=O,O=0|yt(T,R,P,O),P=0|u(),i[a+1024+((10|t)<<3)>>2]=O,i[a+1024+((10|t)<<3)+4>>2]=P,M=0|Yt(O^F,P^M,63),P=0|u(),i[a+1024+((5|t)<<3)>>2]=M,i[a+1024+((5|t)<<3)+4>>2]=P,D=0|yt(_=0|yt(D,_,E,k),D=0|u(),k=0|Yt((Q=0|yt(S,Q,x=0|Yt(_^B,D^x,32),B=0|u()))^E,(S=0|u())^k,24),E=0|u()),_=0|u(),i[a+1024+((1|t)<<3)>>2]=D,i[a+1024+((1|t)<<3)+4>>2]=_,B=0|Yt(D^x,_^B,16),_=0|u(),i[a+1024+((12|t)<<3)>>2]=B,i[a+1024+((12|t)<<3)+4>>2]=_,_=0|yt(Q,S,B,_),B=0|u(),i[a+1024+((11|t)<<3)>>2]=_,i[a+1024+((11|t)<<3)+4>>2]=B,E=0|Yt(_^k,B^E,63),B=0|u(),i[a+1024+((6|t)<<3)>>2]=E,i[a+1024+((6|t)<<3)+4>>2]=B,C=0|yt(b=0|yt(C,b,g,v),C=0|u(),v=0|Yt((I=0|yt(m,I,w=0|Yt(b^d,C^w,32),d=0|u()))^g,(m=0|u())^v,24),g=0|u()),b=0|u(),i[a+1024+((2|t)<<3)>>2]=C,i[a+1024+((2|t)<<3)+4>>2]=b,d=0|Yt(C^w,b^d,16),b=0|u(),i[a+1024+((13|t)<<3)>>2]=d,i[a+1024+((13|t)<<3)+4>>2]=b,b=0|yt(I,m,d,b),d=0|u(),i[a+1024+((8|t)<<3)>>2]=b,i[a+1024+((8|t)<<3)+4>>2]=d,g=0|Yt(b^v,d^g,63),d=0|u(),i[a+1024+((7|t)<<3)>>2]=g,i[a+1024+((7|t)<<3)+4>>2]=d,p=0|yt(l=0|yt(p,l,s,c),p=0|u(),c=0|Yt((A=0|yt(f,A,h=0|Yt(l^o,p^h,32),o=0|u()))^s,(f=0|u())^c,24),s=0|u()),l=0|u(),i[a+1024+((3|t)<<3)>>2]=p,i[a+1024+((3|t)<<3)+4>>2]=l,o=0|Yt(p^h,l^o,16),l=0|u(),i[a+1024+((14|t)<<3)>>2]=o,i[a+1024+((14|t)<<3)+4>>2]=l,l=0|yt(A,f,o,l),o=0|u(),i[a+1024+((9|t)<<3)>>2]=l,i[a+1024+((9|t)<<3)+4>>2]=o,s=0|Yt(l^c,o^s,63),o=0|u(),i[a+1024+((4|t)<<3)>>2]=s,i[a+1024+((4|t)<<3)+4>>2]=o,e=e+1|0}while(8!=(0|e));e=0;do{T=0|i[(R=a+1024+(32+(H=e<<1)<<3)|0)>>2],R=0|i[R+4>>2],l=0|yt(0|i[a+1024+(H<<3)>>2],0|i[a+1024+(H<<3)+4>>2],T,R),t=0|u(),d=0|Yt(i[(d=a+1024+(H+96<<3)|0)>>2]^l,i[d+4>>2]^t,32),I=0|u(),I=0|Yt((t=0|yt(l,t,R=0|Yt((E=0|yt(0|i[(E=a+1024+(H+64<<3)|0)>>2],0|i[E+4>>2],d,I))^T,(k=0|u())^R,24),T=0|u()))^d,(l=0|u())^I,16),d=0|u(),i[(h=a+1024+(H+96<<3)|0)>>2]=I,i[h+4>>2]=d,k=0|yt(E,k,I,d),E=0|u(),i[(h=a+1024+(H+64<<3)|0)>>2]=k,i[h+4>>2]=E,T=0|Yt(k^R,E^T,63),R=0|u(),i[(h=a+1024+(H+32<<3)|0)>>2]=T,i[h+4>>2]=R,f=0|i[(h=a+1024+(H+33<<3)|0)>>2],h=0|i[h+4>>2],b=0|yt(0|i[a+1024+((1|H)<<3)>>2],0|i[a+1024+((1|H)<<3)+4>>2],f,h),p=0|u(),B=0|Yt(i[(B=a+1024+(H+97<<3)|0)>>2]^b,i[B+4>>2]^p,32),Q=0|u(),F=0|yt(M=0|yt(0|i[(M=a+1024+(H+65<<3)|0)>>2],0|i[M+4>>2],B,Q),F=0|u(),Q=0|Yt((p=0|yt(b,p,h=0|Yt(M^f,F^h,24),f=0|u()))^B,(b=0|u())^Q,16),B=0|u()),M=0|u(),i[(_=a+1024+(H+65<<3)|0)>>2]=F,i[_+4>>2]=M,f=0|Yt(F^h,M^f,63),h=0|u(),_=a+1024+(H+16<<3)|0,m=0|i[(w=a+1024+(H+48<<3)|0)>>2],w=0|i[w+4>>2],_=0|yt(0|i[_>>2],0|i[_+4>>2],m,w),C=0|u(),P=0|Yt(i[(P=a+1024+(H+112<<3)|0)>>2]^_,i[P+4>>2]^C,32),j=0|u(),m=0|Yt((c=0|yt(s=0|yt(0|i[(s=a+1024+(H+80<<3)|0)>>2],0|i[s+4>>2],P,j),c=0|u(),j=0|Yt((C=0|yt(_,C,w=0|Yt(s^m,c^w,24),m=0|u()))^P,(_=0|u())^j,16),P=0|u()))^w,(s=0|u())^m,63),w=0|u(),O=a+1024+(H+17<<3)|0,S=0|i[(x=a+1024+(H+49<<3)|0)>>2],x=0|i[x+4>>2],O=0|yt(0|i[O>>2],0|i[O+4>>2],S,x),D=0|u(),o=0|Yt(i[(o=a+1024+(H+113<<3)|0)>>2]^O,i[o+4>>2]^D,32),A=0|u(),S=0|Yt((v=0|yt(g=0|yt(0|i[(g=a+1024+(H+81<<3)|0)>>2],0|i[g+4>>2],o,A),v=0|u(),A=0|Yt((D=0|yt(O,D,x=0|Yt(g^S,v^x,24),S=0|u()))^o,(O=0|u())^A,16),o=0|u()))^x,(g=0|u())^S,63),x=0|u(),t=0|yt(l=0|yt(t,l,f,h),t=0|u(),h=0|Yt((s=0|yt(c,s,o=0|Yt(l^A,t^o,32),A=0|u()))^f,(c=0|u())^h,24),f=0|u()),l=0|u(),i[a+1024+(H<<3)>>2]=t,i[a+1024+(H<<3)+4>>2]=l,A=0|Yt(t^o,l^A,16),l=0|u(),i[(o=a+1024+(H+113<<3)|0)>>2]=A,i[o+4>>2]=l,l=0|yt(s,c,A,l),A=0|u(),i[(c=a+1024+(H+80<<3)|0)>>2]=l,i[c+4>>2]=A,f=0|Yt(l^h,A^f,63),A=0|u(),i[(h=a+1024+(H+33<<3)|0)>>2]=f,i[h+4>>2]=A,p=0|yt(b=0|yt(p,b,m,w),p=0|u(),w=0|Yt((g=0|yt(v,g,d=0|Yt(b^I,p^d,32),I=0|u()))^m,(v=0|u())^w,24),m=0|u()),b=0|u(),i[a+1024+((1|H)<<3)>>2]=p,i[a+1024+((1|H)<<3)+4>>2]=b,I=0|Yt(p^d,b^I,16),b=0|u(),i[(d=a+1024+(H+96<<3)|0)>>2]=I,i[d+4>>2]=b,b=0|yt(g,v,I,b),I=0|u(),i[(v=a+1024+(H+81<<3)|0)>>2]=b,i[v+4>>2]=I,m=0|Yt(b^w,I^m,63),I=0|u(),i[(w=a+1024+(H+48<<3)|0)>>2]=m,i[w+4>>2]=I,C=0|yt(_=0|yt(C,_,S,x),C=0|u(),x=0|Yt((E=0|yt(k,E,B=0|Yt(_^Q,C^B,32),Q=0|u()))^S,(k=0|u())^x,24),S=0|u()),_=0|u(),i[(w=a+1024+(H+16<<3)|0)>>2]=C,i[w+4>>2]=_,Q=0|Yt(C^B,_^Q,16),_=0|u(),i[(B=a+1024+(H+97<<3)|0)>>2]=Q,i[B+4>>2]=_,_=0|yt(E,k,Q,_),Q=0|u(),i[(k=a+1024+(H+64<<3)|0)>>2]=_,i[k+4>>2]=Q,S=0|Yt(_^x,Q^S,63),Q=0|u(),i[(x=a+1024+(H+49<<3)|0)>>2]=S,i[x+4>>2]=Q,D=0|yt(O=0|yt(D,O,T,R),D=0|u(),R=0|Yt((M=0|yt(F,M,P=0|Yt(O^j,D^P,32),j=0|u()))^T,(F=0|u())^R,24),T=0|u()),O=0|u(),i[(x=a+1024+(H+17<<3)|0)>>2]=D,i[x+4>>2]=O,j=0|Yt(D^P,O^j,16),O=0|u(),i[(P=a+1024+(H+112<<3)|0)>>2]=j,i[P+4>>2]=O,O=0|yt(M,F,j,O),j=0|u(),i[(F=a+1024+(H+65<<3)|0)>>2]=O,i[F+4>>2]=j,T=0|Yt(O^R,j^T,63),j=0|u(),i[(H=a+1024+(H+32<<3)|0)>>2]=T,i[H+4>>2]=j,e=e+1|0}while(8!=(0|e));lr(n,a),kt(n,a+1024|0),y=r}function k(e,t){e|=0;var n,r,a,o,s,c,l,f,A,h,p,d,g,y,v,b,m,I,w,C,B,E,k,_,S,Q,x,D,P,M,F,O,R,T,j,H,N,U,L,K,G,$,Y,J,V,z,q,W,X,Z,ee=0,te=0,ne=0,re=0,ie=0,ae=0,oe=0,se=0,ce=0,ue=0,le=0,fe=0,Ae=0,he=0,pe=0,de=0,ge=0,ye=0,ve=0,be=0,me=0,Ie=0,we=0,Ce=0,Be=0,Ee=0,ke=0,_e=0,Se=0,Qe=0,xe=0,De=0,Pe=0,Me=0,Fe=0,Oe=0,Re=0,Te=0,je=0,He=0,Ne=0,Ue=0,Le=0,Ke=0,Ge=0,$e=0,Ye=0,Je=0,Ve=0,ze=0,qe=0,We=0,Xe=0,Ze=0,et=0,tt=0,nt=0,rt=0,it=0;pe=0|i[(t|=0)>>2],ee=0|i[t+4>>2],oe=0|i[t+8>>2],ae=0|i[t+12>>2],De=0|i[t+16>>2],Ae=0|i[t+20>>2],Ye=0|i[t+24>>2],te=0|i[t+28>>2],_e=0|i[t+32>>2],Ie=0|i[t+36>>2],W=0|Zt(0|pe,((0|pe)<0)<<31>>31|0,0|pe,((0|pe)<0)<<31>>31|0),it=0|u(),T=0|Zt(pe<<1|0,0|(de=((pe<<1|0)<0)<<31>>31),0|ee,((0|ee)<0)<<31>>31|0),Xe=0|u(),J=0|Zt(0|oe,((0|oe)<0)<<31>>31|0,pe<<1|0,0|de),Y=0|u(),$=0|Zt(0|ae,((0|ae)<0)<<31>>31|0,pe<<1|0,0|de),G=0|u(),N=0|Zt(0|De,((0|De)<0)<<31>>31|0,pe<<1|0,0|de),Ze=0|u(),D=0|Zt(0|Ae,((0|Ae)<0)<<31>>31|0,pe<<1|0,0|de),Ve=0|u(),w=0|Zt(0|Ye,((0|Ye)<0)<<31>>31|0,pe<<1|0,0|de),je=0|u(),d=0|Zt(0|te,((0|te)<0)<<31>>31|0,pe<<1|0,0|de),Se=0|u(),c=0|Zt(0|_e,((0|_e)<0)<<31>>31|0,pe<<1|0,0|de),we=0|u(),de=0|Zt(0|Ie,((0|Ie)<0)<<31>>31|0,pe<<1|0,0|de),pe=0|u(),Ge=0|Zt(ee<<1|0,0|(ce=((ee<<1|0)<0)<<31>>31),0|ee,((0|ee)<0)<<31>>31|0),$e=0|u(),Fe=0|Zt(ee<<1|0,0|ce,0|oe,((0|oe)<0)<<31>>31|0),Oe=0|u(),K=0|Zt(ae<<1|0,0|(he=((ae<<1|0)<0)<<31>>31),ee<<1|0,0|ce),L=0|u(),F=0|Zt(0|De,((0|De)<0)<<31>>31|0,ee<<1|0,0|ce),M=0|u(),C=0|Zt(Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0,ee<<1|0,0|ce),He=0|u(),g=0|Zt(0|Ye,((0|Ye)<0)<<31>>31|0,ee<<1|0,0|ce),Qe=0|u(),l=0|Zt(te<<1|0,((te<<1|0)<0)<<31>>31|0,ee<<1|0,0|ce),Ce=0|u(),n=0|Zt(0|_e,((0|_e)<0)<<31>>31|0,ee<<1|0,0|ce),ge=0|u(),ce=0|Zt(38*Ie|0,0|(me=((38*Ie|0)<0)<<31>>31),ee<<1|0,0|ce),ee=0|u(),U=0|Zt(0|oe,((0|oe)<0)<<31>>31|0,0|oe,((0|oe)<0)<<31>>31|0),et=0|u(),P=0|Zt(oe<<1|0,((oe<<1|0)<0)<<31>>31|0,0|ae,((0|ae)<0)<<31>>31|0),ze=0|u(),B=0|Zt(0|De,((0|De)<0)<<31>>31|0,oe<<1|0,((oe<<1|0)<0)<<31>>31|0),Ne=0|u(),b=0|Zt(0|Ae,((0|Ae)<0)<<31>>31|0,oe<<1|0,((oe<<1|0)<0)<<31>>31|0),v=0|u(),p=0|Zt(0|Ye,((0|Ye)<0)<<31>>31|0,oe<<1|0,((oe<<1|0)<0)<<31>>31|0),h=0|u(),r=0|Zt(0|te,((0|te)<0)<<31>>31|0,oe<<1|0,((oe<<1|0)<0)<<31>>31|0),ye=0|u(),V=0|Zt(19*_e|0,0|(Te=((19*_e|0)<0)<<31>>31),oe<<1|0,((oe<<1|0)<0)<<31>>31|0),tt=0|u(),oe=0|Zt(38*Ie|0,0|me,0|oe,((0|oe)<0)<<31>>31|0),se=0|u(),k=0|Zt(ae<<1|0,0|he,0|ae,((0|ae)<0)<<31>>31|0),E=0|u(),y=0|Zt(ae<<1|0,0|he,0|De,((0|De)<0)<<31>>31|0),xe=0|u(),f=0|Zt(Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0,ae<<1|0,0|he),Be=0|u(),s=0|Zt(0|Ye,((0|Ye)<0)<<31>>31|0,ae<<1|0,0|he),o=0|u(),z=0|Zt(38*te|0,0|(be=((38*te|0)<0)<<31>>31),ae<<1|0,0|he),nt=0|u(),O=0|Zt(19*_e|0,0|Te,ae<<1|0,0|he),qe=0|u(),he=0|Zt(38*Ie|0,0|me,ae<<1|0,0|he),ae=0|u(),A=0|Zt(0|De,((0|De)<0)<<31>>31|0,0|De,((0|De)<0)<<31>>31|0),Ee=0|u(),a=0|Zt(De<<1|0,((De<<1|0)<0)<<31>>31|0,0|Ae,((0|Ae)<0)<<31>>31|0),ve=0|u(),q=0|Zt(19*Ye|0,((19*Ye|0)<0)<<31>>31|0,De<<1|0,((De<<1|0)<0)<<31>>31|0),rt=0|u(),R=0|Zt(38*te|0,0|be,0|De,((0|De)<0)<<31>>31|0),We=0|u(),_=0|Zt(19*_e|0,0|Te,De<<1|0,((De<<1|0)<0)<<31>>31|0),Ue=0|u(),De=0|Zt(38*Ie|0,0|me,0|De,((0|De)<0)<<31>>31|0),re=0|u(),Z=0|Zt(38*Ae|0,((38*Ae|0)<0)<<31>>31|0,0|Ae,((0|Ae)<0)<<31>>31|0),X=0|u(),H=0|Zt(19*Ye|0,((19*Ye|0)<0)<<31>>31|0,Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0),j=0|u(),S=0|Zt(38*te|0,0|be,Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0),Le=0|u(),m=0|Zt(19*_e|0,0|Te,Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0),Pe=0|u(),Ae=0|Zt(38*Ie|0,0|me,Ae<<1|0,((Ae<<1|0)<0)<<31>>31|0),ne=0|u(),Q=0|Zt(19*Ye|0,((19*Ye|0)<0)<<31>>31|0,0|Ye,((0|Ye)<0)<<31>>31|0),Ke=0|u(),I=0|Zt(38*te|0,0|be,0|Ye,((0|Ye)<0)<<31>>31|0),Me=0|u(),ue=0|Zt(19*_e|0,0|Te,Ye<<1|0,((Ye<<1|0)<0)<<31>>31|0),le=0|u(),Ye=0|Zt(38*Ie|0,0|me,0|Ye,((0|Ye)<0)<<31>>31|0),ie=0|u(),be=0|Zt(38*te|0,0|be,0|te,((0|te)<0)<<31>>31|0),fe=0|u(),x=0|Zt(19*_e|0,0|Te,te<<1|0,((te<<1|0)<0)<<31>>31|0),Je=0|u(),t=0|Zt(38*Ie|0,0|me,te<<1|0,((te<<1|0)<0)<<31>>31|0),te=0|u(),Te=0|Zt(19*_e|0,0|Te,0|_e,((0|_e)<0)<<31>>31|0),Re=0|u(),_e=0|Zt(38*Ie|0,0|me,0|_e,((0|_e)<0)<<31>>31|0),ke=0|u(),Ie=0|Zt(38*Ie|0,0|me,0|Ie,((0|Ie)<0)<<31>>31|0),me=0|u(),ee=0|Qn(0|(tt=0|Qn(0|(nt=0|Qn(0|(rt=0|Qn(0|(it=0|Qn(0|Z,0|X,0|W,0|it)),0|u(),0|q,0|rt)),0|u(),0|z,0|nt)),0|u(),0|V,0|tt)),0|u(),0|ce,0|ee),ce=0|u(),$e=0|Qn(0|J,0|Y,0|Ge,0|$e),Ge=0|u(),Oe=0|Qn(0|$,0|G,0|Fe,0|Oe),Fe=0|u(),ne=0|Qn(0|(le=0|Qn(0|(fe=0|Qn(0|(Ze=0|Qn(0|(et=0|Qn(0|K,0|L,0|U,0|et)),0|u(),0|N,0|Ze)),0|u(),0|be,0|fe)),0|u(),0|ue,0|le)),0|u(),0|Ae,0|ne),Ae=0|u(),fe=0|tn(0|(le=0|Qn(0|ee,0|ce,33554432,0)),0|(ue=0|u()),26),be=0|u(),be=0|Qn(0|(se=0|Qn(0|(qe=0|Qn(0|(We=0|Qn(0|(Xe=0|Qn(0|H,0|j,0|T,0|Xe)),0|u(),0|R,0|We)),0|u(),0|O,0|qe)),0|u(),0|oe,0|se)),0|u(),0|fe,0|be),fe=0|u(),ue=0|Sn(0|ee,0|ce,-67108864&le|0,0|ue),le=0|u(),se=0|tn(0|(ce=0|Qn(0|ne,0|Ae,33554432,0)),0|(ee=0|u()),26),oe=0|u(),oe=0|Qn(0|(ie=0|Qn(0|(Je=0|Qn(0|(Ve=0|Qn(0|(ze=0|Qn(0|F,0|M,0|P,0|ze)),0|u(),0|D,0|Ve)),0|u(),0|x,0|Je)),0|u(),0|Ye,0|ie)),0|u(),0|se,0|oe),se=0|u(),ee=0|Sn(0|ne,0|Ae,-67108864&ce|0,0|ee),ce=0|u(),ne=0|tn(0|(Ae=0|Qn(0|be,0|fe,16777216,0)),0|u(),25),ie=0|u(),ie=0|Qn(0|(ae=0|Qn(0|(Ue=0|Qn(0|(Le=0|Qn(0|(Ke=0|Qn(0|$e,0|Ge,0|Q,0|Ke)),0|u(),0|S,0|Le)),0|u(),0|_,0|Ue)),0|u(),0|he,0|ae)),0|u(),0|ne,0|ie),ne=0|u(),Ae=0|Sn(0|be,0|fe,-33554432&Ae|0,0),fe=0|u(),ae=0|tn(0|(be=0|Qn(0|oe,0|se,16777216,0)),0|u(),25),he=0|u(),he=0|Qn(0|(te=0|Qn(0|(Re=0|Qn(0|(je=0|Qn(0|(He=0|Qn(0|(Ne=0|Qn(0|k,0|E,0|B,0|Ne)),0|u(),0|C,0|He)),0|u(),0|w,0|je)),0|u(),0|Te,0|Re)),0|u(),0|t,0|te)),0|u(),0|ae,0|he),ae=0|u(),be=0|Sn(0|oe,0|se,-33554432&be|0,0),se=0|u(),te=0|tn(0|(oe=0|Qn(0|ie,0|ne,33554432,0)),0|u(),26),t=0|u(),t=0|Qn(0|(re=0|Qn(0|(Pe=0|Qn(0|(Me=0|Qn(0|Oe,0|Fe,0|I,0|Me)),0|u(),0|m,0|Pe)),0|u(),0|De,0|re)),0|u(),0|te,0|t),te=0|u(),oe=0|Sn(0|ie,0|ne,-67108864&oe|0,0),u(),ie=0|tn(0|(ne=0|Qn(0|he,0|ae,33554432,0)),0|u(),26),re=0|u(),re=0|Qn(0|(ke=0|Qn(0|(Se=0|Qn(0|(Qe=0|Qn(0|(xe=0|Qn(0|b,0|v,0|y,0|xe)),0|u(),0|g,0|Qe)),0|u(),0|d,0|Se)),0|u(),0|_e,0|ke)),0|u(),0|ie,0|re),ie=0|u(),ne=0|Sn(0|he,0|ae,-67108864&ne|0,0),u(),ce=0|Qn(0|(he=0|tn(0|(ae=0|Qn(0|t,0|te,16777216,0)),0|u(),25)),0|u(),0|ee,0|ce),ee=0|u(),ae=0|Sn(0|t,0|te,-33554432&ae|0,0),u(),t=0|tn(0|(te=0|Qn(0|re,0|ie,16777216,0)),0|u(),25),he=0|u(),he=0|Qn(0|(me=0|Qn(0|(we=0|Qn(0|(Ce=0|Qn(0|(Be=0|Qn(0|(Ee=0|Qn(0|p,0|h,0|A,0|Ee)),0|u(),0|f,0|Be)),0|u(),0|l,0|Ce)),0|u(),0|c,0|we)),0|u(),0|Ie,0|me)),0|u(),0|t,0|he),t=0|u(),te=0|Sn(0|re,0|ie,-33554432&te|0,0),u(),re=0|Qn(0|be,0|se,0|(re=0|An(0|(ie=0|Qn(0|ce,0|ee,33554432,0)),0|u(),26)),0|u()),u(),ie=0|Sn(0|ce,0|ee,-67108864&ie|0,0),u(),ce=0|tn(0|(ee=0|Qn(0|he,0|t,33554432,0)),0|u(),26),se=0|u(),se=0|Qn(0|(pe=0|Qn(0|(ge=0|Qn(0|(ye=0|Qn(0|(ve=0|Qn(0|s,0|o,0|a,0|ve)),0|u(),0|r,0|ye)),0|u(),0|n,0|ge)),0|u(),0|de,0|pe)),0|u(),0|ce,0|se),ce=0|u(),ee=0|Sn(0|he,0|t,-67108864&ee|0,0),u(),le=0|Qn(0|(he=0|Zt(0|(he=0|tn(0|(t=0|Qn(0|se,0|ce,16777216,0)),0|u(),25)),0|u(),19,0)),0|u(),0|ue,0|le),ue=0|u(),t=0|Sn(0|se,0|ce,-33554432&t|0,0),u(),se=0|Qn(0|Ae,0|fe,0|(se=0|An(0|(ce=0|Qn(0|le,0|ue,33554432,0)),0|u(),26)),0|u()),u(),ce=0|Sn(0|le,0|ue,-67108864&ce|0,0),u(),i[e>>2]=ce,i[e+4>>2]=se,i[e+8>>2]=oe,i[e+12>>2]=ae,i[e+16>>2]=ie,i[e+20>>2]=re,i[e+24>>2]=ne,i[e+28>>2]=te,i[e+32>>2]=ee,i[e+36>>2]=t}function _(e){var t=0,n=0,r=0,a=0,o=0,s=0,c=0,u=0,l=0;if(e|=0){t=0|i[8683],l=e+-8+(-8&(n=0|i[e+-4>>2]))|0;do{if(1&n)c=e+-8|0,u=e+-8|0,e=-8&n;else{if(r=0|i[e+-8>>2],!(3&n))return;if(s=r+(-8&n)|0,(o=e+-8+(0-r)|0)>>>0>>0)return;if((0|i[8684])==(0|o)){if(3!=(3&(e=0|i[l+4>>2])|0)){c=o,u=o,e=s;break}return i[8681]=s,i[l+4>>2]=-2&e,i[o+4>>2]=1|s,void(i[o+s>>2]=s)}if(r>>>0<256){if(e=0|i[o+8>>2],(0|(t=0|i[o+12>>2]))==(0|e)){i[8679]=i[8679]&~(1<<(r>>>3)),c=o,u=o,e=s;break}i[e+12>>2]=t,i[t+8>>2]=e,c=o,u=o,e=s;break}a=0|i[o+24>>2],e=0|i[o+12>>2];do{if((0|e)==(0|o)){if(e=0|i[o+16+4>>2])t=o+16+4|0;else{if(!(e=0|i[o+16>>2])){e=0;break}t=o+16|0}for(;;)if(n=0|i[(r=e+20|0)>>2])e=n,t=r;else{if(!(n=0|i[(r=e+16|0)>>2]))break;e=n,t=r}i[t>>2]=0}else u=0|i[o+8>>2],i[u+12>>2]=e,i[e+8>>2]=u}while(0);if(a){if(t=0|i[o+28>>2],(0|i[35020+(t<<2)>>2])==(0|o)){if(i[35020+(t<<2)>>2]=e,!e){i[8680]=i[8680]&~(1<>2])==(0|o)?a+16|0:a+20|0)>>2]=e,!e){c=o,u=o,e=s;break}i[e+24>>2]=a,0|(t=0|i[o+16>>2])&&(i[e+16>>2]=t,i[t+24>>2]=e),(t=0|i[o+16+4>>2])?(i[e+20>>2]=t,i[t+24>>2]=e,c=o,u=o,e=s):(c=o,u=o,e=s)}else c=o,u=o,e=s}}while(0);if(!(c>>>0>=l>>>0)&&1&(n=0|i[l+4>>2])){if(2&n)i[l+4>>2]=-2&n,i[u+4>>2]=1|e,i[c+e>>2]=e,a=e;else{if((0|i[8685])==(0|l)){if(l=(0|i[8682])+e|0,i[8682]=l,i[8685]=u,i[u+4>>2]=1|l,(0|u)!=(0|i[8684]))return;return i[8684]=0,void(i[8681]=0)}if((0|i[8684])==(0|l))return l=(0|i[8681])+e|0,i[8681]=l,i[8684]=c,i[u+4>>2]=1|l,void(i[c+l>>2]=l);a=(-8&n)+e|0;do{if(n>>>0<256){if(t=0|i[l+8>>2],(0|(e=0|i[l+12>>2]))==(0|t)){i[8679]=i[8679]&~(1<<(n>>>3));break}i[t+12>>2]=e,i[e+8>>2]=t;break}o=0|i[l+24>>2],e=0|i[l+12>>2];do{if((0|e)==(0|l)){if(e=0|i[l+16+4>>2])t=l+16+4|0;else{if(!(e=0|i[l+16>>2])){t=0;break}t=l+16|0}for(;;)if(n=0|i[(r=e+20|0)>>2])e=n,t=r;else{if(!(n=0|i[(r=e+16|0)>>2]))break;e=n,t=r}i[t>>2]=0,t=e}else t=0|i[l+8>>2],i[t+12>>2]=e,i[e+8>>2]=t,t=e}while(0);if(0|o){if(e=0|i[l+28>>2],(0|i[35020+(e<<2)>>2])==(0|l)){if(i[35020+(e<<2)>>2]=t,!t){i[8680]=i[8680]&~(1<>2])==(0|l)?o+16|0:o+20|0)>>2]=t,!t)break;i[t+24>>2]=o,0|(e=0|i[l+16>>2])&&(i[t+16>>2]=e,i[e+24>>2]=t),0|(e=0|i[l+16+4>>2])&&(i[t+20>>2]=e,i[e+24>>2]=t)}}while(0);if(i[u+4>>2]=1|a,i[c+a>>2]=a,(0|u)==(0|i[8684]))return void(i[8681]=a)}if(n=a>>>3,a>>>0<256)return(e=0|i[8679])&1<>2]):(i[8679]=e|1<>2]=u,i[t+12>>2]=u,i[u+8>>2]=t,void(i[u+12>>2]=34756+(n<<1<<2));t=35020+((r=(e=a>>>8)?a>>>0>16777215?31:a>>>(7+(r=14-((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4|(e+1048320|0)>>>16&8|(245760+(r=e<<((e+1048320|0)>>>16&8)<<((520192+(e<<((e+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(r<<((r+245760|0)>>>16&2)>>>15)|0)|0)&1|r<<1:0)<<2)|0,i[u+28>>2]=r,i[u+20>>2]=0,i[u+16>>2]=0,e=0|i[8680],n=1<>2];t:do{if((-8&i[e+4>>2]|0)!=(0|a)){for(r=a<<(31==(0|r)?0:25-(r>>>1)|0);t=0|i[(n=e+16+(r>>>31<<2)|0)>>2];){if((-8&i[t+4>>2]|0)==(0|a)){e=t;break t}r<<=1,e=t}i[n>>2]=u,i[u+24>>2]=e,i[u+12>>2]=u,i[u+8>>2]=u;break e}}while(0);l=0|i[(c=e+8|0)>>2],i[l+12>>2]=u,i[c>>2]=u,i[u+8>>2]=l,i[u+12>>2]=e,i[u+24>>2]=0}else i[8680]=e|n,i[t>>2]=u,i[u+24>>2]=t,i[u+12>>2]=u,i[u+8>>2]=u}while(0);if(l=(0|i[8687])-1|0,i[8687]=l,!(0|l)){for(e=35172;e=0|i[e>>2];)e=e+8|0;i[8687]=-1}}}}function S(e,t){t|=0;var n=0,r=0,a=0,o=0,s=0,c=0,u=0;n=0|i[4+(e|=0)>>2];do{if(1&n)u=e,n=t;else{if(c=0|i[e>>2],!(3&n))return;if((0|i[8684])==(e+(0-c)|0)){if(3!=(3&(n=0|i[e+t+4>>2])|0)){u=e+(0-c)|0,n=c+t|0;break}return i[8681]=c+t,i[e+t+4>>2]=-2&n,i[e+(0-c)+4>>2]=c+t|1,void(i[e+t>>2]=c+t)}if(c>>>0<256){if(n=0|i[e+(0-c)+8>>2],(0|(r=0|i[e+(0-c)+12>>2]))==(0|n)){i[8679]=i[8679]&~(1<<(c>>>3)),u=e+(0-c)|0,n=c+t|0;break}i[n+12>>2]=r,i[r+8>>2]=n,u=e+(0-c)|0,n=c+t|0;break}s=0|i[e+(0-c)+24>>2],n=0|i[e+(0-c)+12>>2];do{if((0|n)==(e+(0-c)|0)){if(n=0|i[4+(r=e+(0-c)+16|0)>>2])r=r+4|0;else if(!(n=0|i[r>>2])){r=0;break}for(;;)if(a=0|i[(o=n+20|0)>>2])n=a,r=o;else{if(!(a=0|i[(o=n+16|0)>>2]))break;n=a,r=o}i[r>>2]=0,r=n}else r=0|i[e+(0-c)+8>>2],i[r+12>>2]=n,i[n+8>>2]=r,r=n}while(0);if(s){if(n=0|i[e+(0-c)+28>>2],(0|i[35020+(n<<2)>>2])==(e+(0-c)|0)){if(i[35020+(n<<2)>>2]=r,!r){i[8680]=i[8680]&~(1<>2])==(e+(0-c)|0)?s+16|0:s+20|0)>>2]=r,!r){u=e+(0-c)|0,n=c+t|0;break}i[r+24>>2]=s,0|(n=0|i[e+(0-c)+16>>2])&&(i[r+16>>2]=n,i[n+24>>2]=r),(n=0|i[e+(0-c)+16+4>>2])?(i[r+20>>2]=n,i[n+24>>2]=r,u=e+(0-c)|0,n=c+t|0):(u=e+(0-c)|0,n=c+t|0)}else u=e+(0-c)|0,n=c+t|0}}while(0);if(2&(a=0|i[e+t+4>>2]))i[e+t+4>>2]=-2&a,i[u+4>>2]=1|n,i[u+n>>2]=n,s=n;else{if((0|i[8685])==(e+t|0)){if(t=(0|i[8682])+n|0,i[8682]=t,i[8685]=u,i[u+4>>2]=1|t,(0|u)!=(0|i[8684]))return;return i[8684]=0,void(i[8681]=0)}if((0|i[8684])==(e+t|0))return t=(0|i[8681])+n|0,i[8681]=t,i[8684]=u,i[u+4>>2]=1|t,void(i[u+t>>2]=t);s=(-8&a)+n|0;do{if(a>>>0<256){if(r=0|i[e+t+8>>2],(0|(n=0|i[e+t+12>>2]))==(0|r)){i[8679]=i[8679]&~(1<<(a>>>3));break}i[r+12>>2]=n,i[n+8>>2]=r;break}c=0|i[e+t+24>>2],n=0|i[e+t+12>>2];do{if((0|n)==(e+t|0)){if(n=0|i[e+t+16+4>>2])r=e+t+16+4|0;else{if(!(n=0|i[e+t+16>>2])){r=0;break}r=e+t+16|0}for(;;)if(a=0|i[(o=n+20|0)>>2])n=a,r=o;else{if(!(a=0|i[(o=n+16|0)>>2]))break;n=a,r=o}i[r>>2]=0,r=n}else r=0|i[e+t+8>>2],i[r+12>>2]=n,i[n+8>>2]=r,r=n}while(0);if(0|c){if(n=0|i[e+t+28>>2],(0|i[35020+(n<<2)>>2])==(e+t|0)){if(i[35020+(n<<2)>>2]=r,!r){i[8680]=i[8680]&~(1<>2])==(e+t|0)?c+16|0:c+20|0)>>2]=r,!r)break;i[r+24>>2]=c,0|(n=0|i[e+t+16>>2])&&(i[r+16>>2]=n,i[n+24>>2]=r),0|(n=0|i[e+t+16+4>>2])&&(i[r+20>>2]=n,i[n+24>>2]=r)}}while(0);if(i[u+4>>2]=1|s,i[u+s>>2]=s,(0|u)==(0|i[8684]))return void(i[8681]=s)}if(a=s>>>3,s>>>0<256)return(n=0|i[8679])&1<>2]):(i[8679]=n|1<>2]=u,i[r+12>>2]=u,i[u+8>>2]=r,void(i[u+12>>2]=34756+(a<<1<<2));if(r=35020+((o=(n=s>>>8)?s>>>0>16777215?31:s>>>(7+(o=14-((520192+(n<<((n+1048320|0)>>>16&8))|0)>>>16&4|(n+1048320|0)>>>16&8|(245760+(o=n<<((n+1048320|0)>>>16&8)<<((520192+(n<<((n+1048320|0)>>>16&8))|0)>>>16&4))|0)>>>16&2)+(o<<((o+245760|0)>>>16&2)>>>15)|0)|0)&1|o<<1:0)<<2)|0,i[u+28>>2]=o,i[u+20>>2]=0,i[u+16>>2]=0,!((n=0|i[8680])&(a=1<>2]=u,i[u+24>>2]=r,i[u+12>>2]=u,void(i[u+8>>2]=u);n=0|i[r>>2];e:do{if((-8&i[n+4>>2]|0)!=(0|s)){for(o=s<<(31==(0|o)?0:25-(o>>>1)|0);r=0|i[(a=n+16+(o>>>31<<2)|0)>>2];){if((-8&i[r+4>>2]|0)==(0|s)){n=r;break e}o<<=1,n=r}return i[a>>2]=u,i[u+24>>2]=n,i[u+12>>2]=u,void(i[u+8>>2]=u)}}while(0);t=0|i[(e=n+8|0)>>2],i[t+12>>2]=u,i[e>>2]=u,i[u+8>>2]=t,i[u+12>>2]=n,i[u+24>>2]=0}function Q(e,t,n,a,o){e|=0,t|=0,n|=0;var s,c,l=0,f=0,A=0,h=0,p=0,d=0,g=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0,_=0,S=0,Q=0,x=0,D=0,P=0,M=0,F=0,O=0,R=0,T=0,j=0,H=0,N=0,U=0,L=0,K=0,G=0,$=0,Y=0,J=0,V=0,z=0,q=0,W=0,X=0,Z=0,ee=0,te=0,ne=0,re=0,ie=0,ae=0,oe=0,se=0,ce=0,ue=0,le=0,fe=0,Ae=0,he=0;if(c=y,s=y=y+63&-64,y=y+64|0,!(0==(0|(a|=0))&0==(0|(o|=0)))){for(U=0|i[e>>2],L=0|i[e+4>>2],K=0|i[e+8>>2],G=0|i[e+12>>2],$=0|i[e+16>>2],P=0|i[e+20>>2],M=0|i[e+24>>2],F=0|i[e+28>>2],O=0|i[e+32>>2],R=0|i[e+36>>2],T=0|i[e+40>>2],j=0|i[e+44>>2],H=0|i[e+56>>2],N=0|i[e+60>>2],f=0,x=0|i[e+48>>2],D=0|i[e+52>>2],A=t;;){if(Q=o>>>0<0|0==(0|o)&a>>>0<64){l=(t=s)+64|0;do{i[t>>2]=0,t=t+4|0}while((0|t)<(0|l));t=0;do{r[s+t>>0]=0|r[A+t>>0],t=t+1|0}while(o>>>0>0|0==(0|o)&a>>>0>t>>>0);S=s,f=n,A=s}else S=n;n=20,t=U,l=L,h=T,p=j,d=x,g=D,v=H,b=N,m=K,I=G,w=$,C=P,B=M,E=F,k=O,_=R;do{q=0|fr((ee=0|fr((Ae=0|fr((Z=(ee=0|fr((fe=t+w|0)^d,16))+k|0)^w,12))+fe^ee,8))+Z^Ae,7),he=0|fr((V=0|fr((ce=0|fr((J=(V=0|fr((se=l+C|0)^g,16))+_|0)^C,12))+se^V,8))+J^ce,7),ue=0|fr((z=0|fr((re=0|fr((te=(z=0|fr((ne=m+B|0)^v,16))+h|0)^B,12))+ne^z,8))+te^re,7),ie=0|fr((ae=0|fr((X=0|fr((Y=(ae=0|fr((W=I+E|0)^b,16))+p|0)^E,12))+W^ae,8))+Y^X,7),C=0|fr((h=(b=0|fr((t=(oe=0|fr((le=0|fr(ae^he+(Ae+fe),16))+(z+te)^he,12))+(he+(Ae+fe))|0)^le,8))+(le+(z+te))|0)^oe,7),B=0|fr((p=(d=0|fr((l=(te=0|fr((oe=0|fr(ue+(ce+se)^ee,16))+(ae+Y)^ue,12))+(ue+(ce+se))|0)^oe,8))+(oe+(ae+Y))|0)^te,7),E=0|fr((k=(g=0|fr((m=(Y=0|fr((te=0|fr(ie+(re+ne)^V,16))+(ee+Z)^ie,12))+(ie+(re+ne))|0)^te,8))+(te+(ee+Z))|0)^Y,7),w=0|fr((_=(v=0|fr((I=(Y=0|fr((z=0|fr(X+W+q^z,16))+(V+J)^q,12))+(X+W+q)|0)^z,8))+(z+(V+J))|0)^Y,7),n=n+-2|0}while(0!=(0|n));if(X=(0|Kn(A))^t+U,Z=(0|Kn(A+4|0))^l+L,ee=(0|Kn(A+8|0))^m+K,te=(0|Kn(A+12|0))^I+G,ne=(0|Kn(A+16|0))^w+$,re=(0|Kn(A+20|0))^C+P,ie=(0|Kn(A+24|0))^B+M,ae=(0|Kn(A+28|0))^E+F,oe=(0|Kn(A+32|0))^k+O,se=(0|Kn(A+36|0))^_+R,ce=(0|Kn(A+40|0))^h+T,ue=(0|Kn(A+44|0))^p+j,le=(0|Kn(A+48|0))^d+x,fe=(0|Kn(A+52|0))^g+D,Ae=(0|Kn(A+56|0))^v+H,he=(0|Kn(A+60|0))^b+N,l=D+(0==(0|(t=x+1|0))&1)|0,Pn(S,X),Pn(S+4|0,Z),Pn(S+8|0,ee),Pn(S+12|0,te),Pn(S+16|0,ne),Pn(S+20|0,re),Pn(S+24|0,ie),Pn(S+28|0,ae),Pn(S+32|0,oe),Pn(S+36|0,se),Pn(S+40|0,ce),Pn(S+44|0,ue),Pn(S+48|0,le),Pn(S+52|0,fe),Pn(S+56|0,Ae),Pn(S+60|0,he),o>>>0<0|0==(0|o)&a>>>0<65)break;n=0|Qn(0|a,0|o,-64,-1),o=0|u(),a=n,n=S+64|0,x=t,D=l,A=A+64|0}if(Q&&0|a){o=0;do{r[f+o>>0]=0|r[S+o>>0],o=o+1|0}while((0|o)!=(0|a))}i[e+48>>2]=t,i[e+52>>2]=l}y=c}function x(e,t,n,a){t|=0,n|=0,a|=0;var o,s,c,l,f,A=0,h=0,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0;if(f=0==(0|r[80+(e|=0)>>0])?16777216:0,o=0|i[e+4>>2],s=0|i[e+8>>2],c=0|i[e+12>>2],l=0|i[e+16>>2],g=0|i[e+20>>2],d=0|i[e+24>>2],p=0|i[e+28>>2],h=0|i[e+32>>2],A=0|i[e+36>>2],a>>>0>0|0==(0|a)&n>>>0>15)for(m=0|i[e>>2];;){if(E=(67108863&(0|Kn(t)))+g|0,k=((0|Kn(t+3|0))>>>2&67108863)+d|0,B=((0|Kn(t+6|0))>>>4&67108863)+p|0,C=((0|Kn(t+9|0))>>>6)+h|0,g=((0|Kn(t+12|0))>>>8|f)+A|0,A=0|Zt(0|E,0,0|m,0),y=0|u(),p=0|Qn(0|(y=0|Qn(0|(p=0|Qn(0|(y=0|Qn(0|(p=0|Zt(0|k,0,5*l|0,0)),0|u(),0|A,0|y)),0|(A=0|u()),0|(p=0|Zt(0|B,0,5*c|0,0)),0|u())),0|(A=0|u()),0|(y=0|Zt(0|C,0,5*s|0,0)),0|u())),0|(A=0|u()),0|(p=0|Zt(0|g,0,5*o|0,0)),0|u()),A=0|u(),y=0|Zt(0|E,0,0|o,0),v=0|u(),w=0|Qn(0|(v=0|Qn(0|(w=0|Qn(0|(v=0|Qn(0|(w=0|Zt(0|k,0,0|m,0)),0|u(),0|y,0|v)),0|(y=0|u()),0|(w=0|Zt(0|B,0,5*l|0,0)),0|u())),0|(y=0|u()),0|(v=0|Zt(0|C,0,5*c|0,0)),0|u())),0|(y=0|u()),0|(w=0|Zt(0|g,0,5*s|0,0)),0|u()),y=0|u(),v=0|Zt(0|E,0,0|s,0),b=0|u(),I=0|Qn(0|(b=0|Qn(0|(I=0|Qn(0|(b=0|Qn(0|(I=0|Zt(0|k,0,0|o,0)),0|u(),0|v,0|b)),0|(v=0|u()),0|(I=0|Zt(0|B,0,0|m,0)),0|u())),0|(v=0|u()),0|(b=0|Zt(0|C,0,5*l|0,0)),0|u())),0|(v=0|u()),0|(I=0|Zt(0|g,0,5*c|0,0)),0|u()),v=0|u(),b=0|Zt(0|E,0,0|c,0),h=0|u(),d=0|Qn(0|(h=0|Qn(0|(d=0|Qn(0|(h=0|Qn(0|(d=0|Zt(0|k,0,0|s,0)),0|u(),0|b,0|h)),0|(b=0|u()),0|(d=0|Zt(0|B,0,0|o,0)),0|u())),0|(b=0|u()),0|(h=0|Zt(0|C,0,0|m,0)),0|u())),0|(b=0|u()),0|(d=0|Zt(0|g,0,5*l|0,0)),0|u()),b=0|u(),h=0|Zt(0|E,0,0|l,0),E=0|u(),g=0|Qn(0|(C=0|Qn(0|(B=0|Qn(0|(E=0|Qn(0|(k=0|Zt(0|k,0,0|c,0)),0|u(),0|h,0|E)),0|(h=0|u()),0|(B=0|Zt(0|B,0,0|s,0)),0|u())),0|(h=0|u()),0|(C=0|Zt(0|C,0,0|o,0)),0|u())),0|(h=0|u()),0|(g=0|Zt(0|g,0,0|m,0)),0|u()),h=0|u(),A=0|An(0|p,0|A,26),u(),y=0|An(0|(A=0|Qn(0|w,0|y,0|A,0)),0|u(),26),u(),v=0|An(0|(y=0|Qn(0|I,0|v,0|y,0)),0|u(),26),u(),b=0|An(0|(v=0|Qn(0|d,0|b,0|v,0)),0|u(),26),u(),h=0|An(0|(b=0|Qn(0|g,0|h,0|b,0)),0|u(),26),u(),n=0|Qn(0|n,0|a,-16,-1),!((a=0|u())>>>0>0|0==(0|a)&n>>>0>15)){n=(5*h|0)+(67108863&p)&67108863,d=(((5*h|0)+(67108863&p)|0)>>>26)+(67108863&A)|0,p=67108863&y,h=67108863&v,A=67108863&b;break}g=(5*h|0)+(67108863&p)&67108863,d=(((5*h|0)+(67108863&p)|0)>>>26)+(67108863&A)|0,p=67108863&y,h=67108863&v,A=67108863&b,t=t+16|0}else n=g;i[e+20>>2]=n,i[e+24>>2]=d,i[e+28>>2]=p,i[e+32>>2]=h,i[e+36>>2]=A}function D(e,t){e|=0;var n=0,a=0,o=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0;f=0|bt(t|=0),l=0|u(),C=0|cn(0|(C=0|Wt(0|r[t+4>>0],0|r[t+5>>0],0|r[t+6>>0])),0|u(),6),B=0|u(),c=0|cn(0|(c=0|Wt(0|r[t+7>>0],0|r[t+8>>0],0|r[t+9>>0])),0|u(),5),s=0|u(),I=0|cn(0|(I=0|Wt(0|r[t+10>>0],0|r[t+11>>0],0|r[t+12>>0])),0|u(),3),w=0|u(),o=0|cn(0|(o=0|Wt(0|r[t+13>>0],0|r[t+14>>0],0|r[t+15>>0])),0|u(),2),a=0|u(),b=0|bt(t+16|0),m=0|u(),A=0|cn(0|(A=0|Wt(0|r[t+20>>0],0|r[t+21>>0],0|r[t+22>>0])),0|u(),7),n=0|u(),h=0|cn(0|(h=0|Wt(0|r[t+23>>0],0|r[t+24>>0],0|r[t+25>>0])),0|u(),5),v=0|u(),p=0|cn(0|(p=0|Wt(0|r[t+26>>0],0|r[t+27>>0],0|r[t+28>>0])),0|u(),4),d=0|u(),g=0|cn(0|(g=0|Wt(0|r[t+29>>0],0|r[t+30>>0],0|r[t+31>>0])),0|u(),2),u(),E=0|Sn(0,0,0|(E=0|An(0|(y=0|Qn(33554428&g|0,0,16777216,0)),0|u(),25)),0|u()),u(),l=0|Qn(19&E|0,0,0|f,0|l),f=0|u(),y=0|Sn(33554428&g|0,0,33554432&y|0,0),g=0|u(),s=0|Qn(0|(t=0|tn(0|(E=0|Qn(0|C,0|B,16777216,0)),0|u(),25)),0|u(),0|c,0|s),c=0|u(),E=0|Sn(0|C,0|B,-33554432&E|0,0),B=0|u(),a=0|Qn(0|(t=0|tn(0|(C=0|Qn(0|I,0|w,16777216,0)),0|u(),25)),0|u(),0|o,0|a),o=0|u(),C=0|Sn(0|I,0|w,-33554432&C|0,0),w=0|u(),t=0|Qn(0|A,0|n,0|(t=0|tn(0|(I=0|Qn(0|b,0|m,16777216,0)),0|u(),25)),0|u()),n=0|u(),I=0|Sn(0|b,0|m,-33554432&I|0,0),m=0|u(),d=0|Qn(0|(A=0|tn(0|(b=0|Qn(0|h,0|v,16777216,0)),0|u(),25)),0|u(),0|p,0|d),p=0|u(),b=0|Sn(0|h,0|v,-33554432&b|0,0),v=0|u(),A=0|Qn(0|E,0|B,0|(A=0|An(0|(h=0|Qn(0|l,0|f,33554432,0)),0|u(),26)),0|u()),u(),h=0|Sn(0|l,0|f,-67108864&h|0,0),u(),l=0|Qn(0|C,0|w,0|(l=0|An(0|(f=0|Qn(0|s,0|c,33554432,0)),0|u(),26)),0|u()),u(),f=0|Sn(0|s,0|c,-67108864&f|0,0),u(),s=0|Qn(0|I,0|m,0|(s=0|An(0|(c=0|Qn(0|a,0|o,33554432,0)),0|u(),26)),0|u()),u(),c=0|Sn(0|a,0|o,-67108864&c|0,0),u(),a=0|Qn(0|b,0|v,0|(a=0|An(0|(o=0|Qn(0|t,0|n,33554432,0)),0|u(),26)),0|u()),u(),o=0|Sn(0|t,0|n,-67108864&o|0,0),u(),t=0|Qn(0|y,0|g,0|(t=0|An(0|(n=0|Qn(0|d,0|p,33554432,0)),0|u(),26)),0|u()),u(),n=0|Sn(0|d,0|p,-67108864&n|0,0),u(),i[e>>2]=h,i[e+4>>2]=A,i[e+8>>2]=f,i[e+12>>2]=l,i[e+16>>2]=c,i[e+20>>2]=s,i[e+24>>2]=o,i[e+28>>2]=a,i[e+32>>2]=n,i[e+36>>2]=t}function P(e,t){e|=0;var n=0,r=0,a=0,o=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0;l=0|i[(t|=0)>>2],w=0|i[t+4>>2],s=0|i[t+8>>2],m=0|i[t+12>>2],a=0|i[t+16>>2],v=0|i[t+20>>2],n=0|i[t+24>>2],A=0|i[t+28>>2],h=0|i[t+32>>2],B=0|i[t+36>>2],l=0|Zt(0|l,((0|l)<0)<<31>>31|0,121666,0),c=0|u(),w=0|Zt(0|w,((0|w)<0)<<31>>31|0,121666,0),C=0|u(),s=0|Zt(0|s,((0|s)<0)<<31>>31|0,121666,0),o=0|u(),m=0|Zt(0|m,((0|m)<0)<<31>>31|0,121666,0),I=0|u(),a=0|Zt(0|a,((0|a)<0)<<31>>31|0,121666,0),r=0|u(),v=0|Zt(0|v,((0|v)<0)<<31>>31|0,121666,0),b=0|u(),n=0|Zt(0|n,((0|n)<0)<<31>>31|0,121666,0),t=0|u(),A=0|Zt(0|A,((0|A)<0)<<31>>31|0,121666,0),y=0|u(),h=0|Zt(0|h,((0|h)<0)<<31>>31|0,121666,0),p=0|u(),c=0|Qn(0|(f=0|Zt(0|(f=0|tn(0|(g=0|Qn(0|(B=0|Zt(0|B,((0|B)<0)<<31>>31|0,121666,0)),0|(d=0|u()),16777216,0)),0|u(),25)),0|u(),19,0)),0|u(),0|l,0|c),l=0|u(),g=0|Sn(0|B,0|d,-33554432&g|0,0),d=0|u(),o=0|Qn(0|(f=0|tn(0|(B=0|Qn(0|w,0|C,16777216,0)),0|u(),25)),0|u(),0|s,0|o),s=0|u(),B=0|Sn(0|w,0|C,-33554432&B|0,0),C=0|u(),r=0|Qn(0|(f=0|tn(0|(w=0|Qn(0|m,0|I,16777216,0)),0|u(),25)),0|u(),0|a,0|r),a=0|u(),w=0|Sn(0|m,0|I,-33554432&w|0,0),I=0|u(),t=0|Qn(0|(f=0|tn(0|(m=0|Qn(0|v,0|b,16777216,0)),0|u(),25)),0|u(),0|n,0|t),n=0|u(),m=0|Sn(0|v,0|b,-33554432&m|0,0),b=0|u(),p=0|Qn(0|(f=0|tn(0|(v=0|Qn(0|A,0|y,16777216,0)),0|u(),25)),0|u(),0|h,0|p),h=0|u(),v=0|Sn(0|A,0|y,-33554432&v|0,0),y=0|u(),f=0|Qn(0|B,0|C,0|(f=0|An(0|(A=0|Qn(0|c,0|l,33554432,0)),0|u(),26)),0|u()),u(),A=0|Sn(0|c,0|l,-67108864&A|0,0),u(),c=0|Qn(0|w,0|I,0|(c=0|An(0|(l=0|Qn(0|o,0|s,33554432,0)),0|u(),26)),0|u()),u(),l=0|Sn(0|o,0|s,-67108864&l|0,0),u(),o=0|Qn(0|m,0|b,0|(o=0|An(0|(s=0|Qn(0|r,0|a,33554432,0)),0|u(),26)),0|u()),u(),s=0|Sn(0|r,0|a,-67108864&s|0,0),u(),r=0|Qn(0|v,0|y,0|(r=0|An(0|(a=0|Qn(0|t,0|n,33554432,0)),0|u(),26)),0|u()),u(),a=0|Sn(0|t,0|n,-67108864&a|0,0),u(),t=0|Qn(0|g,0|d,0|(t=0|An(0|(n=0|Qn(0|p,0|h,33554432,0)),0|u(),26)),0|u()),u(),n=0|Sn(0|p,0|h,-67108864&n|0,0),u(),i[e>>2]=A,i[e+4>>2]=f,i[e+8>>2]=l,i[e+12>>2]=c,i[e+16>>2]=s,i[e+20>>2]=o,i[e+24>>2]=a,i[e+28>>2]=r,i[e+32>>2]=n,i[e+36>>2]=t}function M(e,t,n){e|=0,t|=0;var i,o,s=0,c=0,u=0;if(o=y,i=y=y+63&-64,y=y+64|0,(n|=0)<<24>>24&&(255&n)<=64){if(0|function(e,t){return 1&(0!=(0|(e|=0))|0!=(0|(t|=0)))|0}(a[e+80>>0]|a[e+80+1>>0]<<8|a[e+80+2>>0]<<16|a[e+80+3>>0]<<24,a[e+80+4>>0]|a[e+80+4+1>>0]<<8|a[e+80+4+2>>0]<<16|a[e+80+4+3>>0]<<24))s=-1;else{s=a[e+352>>0]|a[e+352+1>>0]<<8|a[e+352+2>>0]<<16|a[e+352+3>>0]<<24;do{if(s>>>0>128){if(ue(e,128,0),v(e,e+96|0),s=(a[e+352>>0]|a[e+352+1>>0]<<8|a[e+352+2>>0]<<16|a[e+352+3>>0]<<24)-128|0,r[e+352>>0]=s,r[e+352+1>>0]=s>>8,r[e+352+2>>0]=s>>16,r[e+352+3>>0]=s>>24,s>>>0<129){te(e+96|0,e+224|0,0|s),c=a[e+352>>0]|a[e+352+1>>0]<<8|a[e+352+2>>0]<<16|a[e+352+3>>0]<<24,u=e+96|0;break}l(33456,33488,306,33533)}else c=s,u=e+96|0}while(0);ue(e,c,0),function(e){0|r[356+(e|=0)>>0]&&function(e){r[88+(e|=0)>>0]=-1,r[e+88+1>>0]=-1,r[e+88+2>>0]=-1,r[e+88+3>>0]=-1,r[e+88+4>>0]=-1,r[e+88+4+1>>0]=-1,r[e+88+4+2>>0]=-1,r[e+88+4+3>>0]=-1}(e),r[e+80>>0]=-1,r[e+80+1>>0]=-1,r[e+80+2>>0]=-1,r[e+80+3>>0]=-1,r[e+80+4>>0]=-1,r[e+80+4+1>>0]=-1,r[e+80+4+2>>0]=-1,r[e+80+4+3>>0]=-1}(e),_e(e+96+(s=a[e+352>>0]|a[e+352+1>>0]<<8|a[e+352+2>>0]<<16|a[e+352+3>>0]<<24)|0,0,256-s|0),v(e,u),Ot(i,a[e>>0]|a[e+1>>0]<<8|a[e+2>>0]<<16|a[e+3>>0]<<24,a[e+4>>0]|a[e+4+1>>0]<<8|a[e+4+2>>0]<<16|a[e+4+3>>0]<<24),Ot(i+8|0,a[e+8>>0]|a[e+8+1>>0]<<8|a[e+8+2>>0]<<16|a[e+8+3>>0]<<24,a[e+8+4>>0]|a[e+8+4+1>>0]<<8|a[e+8+4+2>>0]<<16|a[e+8+4+3>>0]<<24),Ot(i+16|0,a[e+16>>0]|a[e+16+1>>0]<<8|a[e+16+2>>0]<<16|a[e+16+3>>0]<<24,a[e+16+4>>0]|a[e+16+4+1>>0]<<8|a[e+16+4+2>>0]<<16|a[e+16+4+3>>0]<<24),Ot(i+24|0,a[e+24>>0]|a[e+24+1>>0]<<8|a[e+24+2>>0]<<16|a[e+24+3>>0]<<24,a[e+24+4>>0]|a[e+24+4+1>>0]<<8|a[e+24+4+2>>0]<<16|a[e+24+4+3>>0]<<24),Ot(i+32|0,a[e+32>>0]|a[e+32+1>>0]<<8|a[e+32+2>>0]<<16|a[e+32+3>>0]<<24,a[e+32+4>>0]|a[e+32+4+1>>0]<<8|a[e+32+4+2>>0]<<16|a[e+32+4+3>>0]<<24),Ot(i+40|0,a[e+40>>0]|a[e+40+1>>0]<<8|a[e+40+2>>0]<<16|a[e+40+3>>0]<<24,a[e+40+4>>0]|a[e+40+4+1>>0]<<8|a[e+40+4+2>>0]<<16|a[e+40+4+3>>0]<<24),Ot(i+48|0,a[e+48>>0]|a[e+48+1>>0]<<8|a[e+48+2>>0]<<16|a[e+48+3>>0]<<24,a[e+48+4>>0]|a[e+48+4+1>>0]<<8|a[e+48+4+2>>0]<<16|a[e+48+4+3>>0]<<24),Ot(i+56|0,a[e+56>>0]|a[e+56+1>>0]<<8|a[e+56+2>>0]<<16|a[e+56+3>>0]<<24,a[e+56+4>>0]|a[e+56+4+1>>0]<<8|a[e+56+4+2>>0]<<16|a[e+56+4+3>>0]<<24),te(0|t,0|i,255&n|0),Et(e,64),Et(u,256),s=0}return y=o,0|s}return _r(),0}function F(e,t,n,a){e|=0,t|=0,n|=0;var o,s,c=0,u=0,l=0,f=0,A=0,h=0;switch(s=y,o=y=y+63&-64,y=y+16|0,0|(a|=0)){case 2:if(t>>>0<13)a=-31;else{c=33688,u=(a=e)+13|0;do{r[a>>0]=0|r[c>>0],a=a+1|0,c=c+1|0}while((0|a)<(0|u));e=e+12|0,u=t+-12|0,c=6}break;case 1:if(t>>>0<12)a=-31;else{c=33701,u=(a=e)+12|0;do{r[a>>0]=0|r[c>>0],a=a+1|0,c=c+1|0}while((0|a)<(0|u));e=e+11|0,u=t+-11|0,c=6}break;default:a=-31}do{if(6==(0|c)&&!(a=0|se(n))){if(at(o,19),c=e+(a=0|Ve(o))|0,f=u-a|0,u>>>0<=a>>>0){a=-31;break}if(te(0|e,0|o,a+1|0),f>>>0>=4){if(r[c>>0]=36,r[c+1>>0]=109,r[c+2>>0]=61,r[c+3>>0]=0,at(o,0|i[n+44>>2]),u=c+3+(e=0|Ve(o))|0,(f+-3|0)>>>0<=e>>>0){a=-31;break}if(te(c+3|0,0|o,e+1|0),(f+-3-e|0)>>>0>=4){if(r[u>>0]=44,r[u+1>>0]=116,r[u+2>>0]=61,r[u+3>>0]=0,at(o,0|i[n+40>>2]),t=u+3+(a=0|Ve(o))|0,l=f+-3-e-3-a|0,(f+-3-e-3|0)>>>0<=a>>>0){a=-31;break}if(te(u+3|0,0|o,a+1|0),l>>>0>=4){if(r[t>>0]=44,r[t+1>>0]=112,r[t+2>>0]=61,r[t+3>>0]=0,at(o,0|i[n+48>>2]),(l+-3|0)>>>0<=(c=0|Ve(o))>>>0){a=-31;break}if(te(t+3|0,0|o,c+1|0),a=t+3+c+1|0,(l+-3-c|0)>>>0>=2&&(r[t+3+c>>0]=36,r[t+3+c+1>>0]=0,$(a,l+-3-c-1|0,0|i[n+16>>2],0|i[n+20>>2],3),(h=l+-3-c-1-(A=0|Ve(a))|0)>>>0>=2))return r[a+A>>0]=36,r[a+A+1>>0]=0,$(a+A+1|0,h+-1|0,0|i[n>>2],0|i[n+4>>2],3),y=s,0;a=-31}else a=-31}else a=-31}else a=-31}}while(0);return y=s,0|a}function O(e,t,n,a){e|=0,t|=0,n|=0,a|=0;var o,s,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,v=0;s=y,o=y=y+63&-64,y=y+704|0;e:do{if(!(0==(0|n)&0==(0|a))){if(h=0|An(0|(v=0|i[e+72>>2]),0|(d=0|i[e+72+4>>2]),3),u(),p=0|cn(0|n,0|a,3),g=0|u(),f=0|An(0|n,0|a,61),A=0|u(),d=0|Qn(0|v,0|d,0|p,0|g),v=0|u(),i[e+72>>2]=d,i[e+72+4>>2]=v,c=0|i[e+64>>2],l=0|i[e+64+4>>2],v>>>0>>0|(0|v)==(0|g)&d>>>0

>>0&&(c=0|Qn(0|c,0|l,1,0),l=0|u(),i[e+64>>2]=c,i[e+64+4>>2]=l),c=0|Qn(0|c,0|l,0|f,0|A),A=0|u(),i[e+64>>2]=c,i[e+64+4>>2]=A,A=0|Sn(128,0,127&h|0,0),(c=0|u())>>>0>a>>>0|(0|c)==(0|a)&A>>>0>n>>>0)for(c=0,l=0;;)if(g=0|r[t+c>>0],v=0|Qn(0|c,0|l,127&h|0,0),u(),r[e+80+v>>0]=g,c=0|Qn(0|c,0|l,1,0),!((l=0|u())>>>0>>0|(0|l)==(0|a)&c>>>0>>0))break e;if(!(0==(0|A)&0==(0|c))){l=0,f=0;do{g=0|r[t+l>>0],v=0|Qn(0|l,0|f,127&h|0,0),u(),r[e+80+v>>0]=g,l=0|Qn(0|l,0|f,1,0),f=0|u()}while(f>>>0>>0|(0|f)==(0|c)&l>>>0>>0)}if(m(e,e+80|0,o,o+640|0),c=0|Sn(0|n,0|a,0|A,0|c),(f=0|u())>>>0>0|0==(0|f)&c>>>0>127){l=t+A|0;do{m(e,l,o,o+640|0),l=l+128|0,c=0|Qn(0|c,0|f,-128,-1),f=0|u()}while(f>>>0>0|0==(0|f)&c>>>0>127)}else l=t+A|0;if(!(0==(0|(A=127&c))&!0)){c=0,f=0;do{r[e+80+c>>0]=0|r[l+c>>0],c=0|Qn(0|c,0|f,1,0),f=0|u()}while(f>>>0<0|0==(0|f)&c>>>0>>0)}Et(o,704)}}while(0);y=s}function R(e,t,n){e|=0,t|=0;var r=0,i=0,a=0,o=0,s=0,c=0,u=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0,_=0,S=0,Q=0,x=0,D=0,P=0,M=0,F=0,O=0,R=0,T=0,j=0,H=0;i=0|Kn(n|=0),a=0|Kn(n+4|0),o=0|Kn(n+8|0),s=0|Kn(n+12|0),c=0|Kn(n+16|0),u=0|Kn(n+20|0),h=0|Kn(n+24|0),p=0|Kn(n+28|0),d=0|Kn(t),g=0|Kn(t+4|0),y=0|Kn(t+8|0),l=0,f=1634760805,A=857760878,n=0|Kn(t+12|0),t=2036477234,r=1797285236;do{w=0|fr((k=0|fr((j=0|fr((E=(k=0|fr(d^(T=i+f|0),16))+c|0)^i,12))+T^k,8))+E^j,7),H=0|fr((m=0|fr((F=0|fr((b=(m=0|fr(g^(M=a+A|0),16))+u|0)^a,12))+M^m,8))+b^F,7),O=0|fr((I=0|fr((Q=0|fr((_=(I=0|fr(y^(S=o+t|0),16))+h|0)^o,12))+S^I,8))+_^Q,7),x=0|fr((D=0|fr((B=0|fr((v=(D=0|fr(n^(C=s+r|0),16))+p|0)^s,12))+C^D,8))+v^B,7),a=0|fr((h=(n=0|fr((f=(P=0|fr((R=0|fr(D^H+(j+T),16))+(I+_)^H,12))+(H+(j+T))|0)^R,8))+(R+(I+_))|0)^P,7),o=0|fr((p=(d=0|fr((A=(_=0|fr((P=0|fr(O+(F+M)^k,16))+(D+v)^O,12))+(O+(F+M))|0)^P,8))+(P+(D+v))|0)^_,7),s=0|fr((c=(g=0|fr((t=(v=0|fr((_=0|fr(x+(Q+S)^m,16))+(k+E)^x,12))+(x+(Q+S))|0)^_,8))+(_+(k+E))|0)^v,7),i=0|fr((u=(y=0|fr((r=(v=0|fr((I=0|fr(B+C+w^I,16))+(m+b)^w,12))+(B+C+w)|0)^I,8))+(I+(m+b))|0)^v,7),l=l+1|0}while(10!=(0|l));Pn(e,f),Pn(e+4|0,A),Pn(e+8|0,t),Pn(e+12|0,r),Pn(e+16|0,d),Pn(e+20|0,g),Pn(e+24|0,y),Pn(e+28|0,n)}function T(e,t,n,i){e|=0,n|=0,i|=0;var a,o,s=0,c=0;for(a=y,o=y=y+63&-64,y=y+2272|0,de(o+1536|0,t|=0),de(o+1280|0,i),nn(o,n),rn(o+2112|0,n),en(o+1792|0,o+2112|0),Xe(o+2112|0,o+1792|0,o),en(o+1952|0,o+2112|0),nn(o+160|0,o+1952|0),Xe(o+2112|0,o+1792|0,o+160|0),en(o+1952|0,o+2112|0),nn(o+320|0,o+1952|0),Xe(o+2112|0,o+1792|0,o+320|0),en(o+1952|0,o+2112|0),nn(o+480|0,o+1952|0),Xe(o+2112|0,o+1792|0,o+480|0),en(o+1952|0,o+2112|0),nn(o+640|0,o+1952|0),Xe(o+2112|0,o+1792|0,o+640|0),en(o+1952|0,o+2112|0),nn(o+800|0,o+1952|0),Xe(o+2112|0,o+1792|0,o+800|0),en(o+1952|0,o+2112|0),nn(o+960|0,o+1952|0),Xe(o+2112|0,o+1792|0,o+960|0),en(o+1952|0,o+2112|0),nn(o+1120|0,o+1952|0),function(e){jn(e|=0),_n(e+40|0),_n(e+80|0)}(e),n=255;;){if(0|r[o+1536+n>>0]){s=n,c=5;break}if(0|r[o+1280+n>>0]){s=n,c=5;break}if(!n)break;n=n+-1|0}if(5==(0|c)&&(0|s)>-1)for(;ot(o+2112|0,e),(n=0|r[o+1536+s>>0])<<24>>24<=0?n<<24>>24<0&&(en(o+1952|0,o+2112|0),We(o+2112|0,o+1952|0,o+(160*(((n<<24>>24)/-2|0)<<24>>24)|0)|0)):(en(o+1952|0,o+2112|0),Xe(o+2112|0,o+1952|0,o+(160*((255&n)>>>1&255)|0)|0)),(n=0|r[o+1280+s>>0])<<24>>24<=0?n<<24>>24<0&&(en(o+1952|0,o+2112|0),Ze(o+2112|0,o+1952|0,160+(120*(((n<<24>>24)/-2|0)<<24>>24)|0)|0)):(en(o+1952|0,o+2112|0),et(o+2112|0,o+1952|0,160+(120*((255&n)>>>1&255)|0)|0)),bn(e,o+2112|0),(0|s)>0;)s=s+-1|0;y=a}function j(e,t,n,a,o,s,c,u){e|=0,t|=0,n|=0,a|=0,o|=0,s|=0,c|=0,u|=0;var l,f,A=0,h=0,p=0,d=0,g=0,v=0,b=0;if(f=y,l=y=y+63&-64,y=y+16|0,i[l>>2]=0,tr(u),a){d=0,h=0,p=0,A=0;e:for(;;){for(v=A;A=0|r[n+v>>0],255==(0|(g=4&u?0|$e(A):0|Ye(A)));){if(!o){g=18;break e}if(!(0|Ln(o,A))){g=19;break e}if(!((A=v+1|0)>>>0>>0)){g=17;break e}v=A}if(d=g+(d<<6)|0,(A=h+6|0)>>>0>7){if(h=h+-2|0,p>>>0>=t>>>0){g=13;break}r[e+p>>0]=d>>>h,p=p+1|0}else h=A;if((A=v+1|0)>>>0>=a>>>0){g=16;break}}13==(0|g)?(i[l>>2]=v,i[8678]=68,A=-1):16==(0|g)||17==(0|g)?(i[l>>2]=A,A=0):(18==(0|g)||19==(0|g))&&(i[l>>2]=v,A=0),h>>>0>4?(p=0,A=-1):g=21}else d=0,h=0,p=0,A=0,g=21;do{if(21==(0|g))if((1<>>1)),A)p=0;else if(0!=(0|o)&&(b=0|i[l>>2])>>>0>>0){for(A=b;;){if(!(0|Ln(o,0|r[n+A>>0]))){g=31;break}if((A=A+1|0)>>>0>=a>>>0){g=30;break}}if(30==(0|g)){i[l>>2]=A,A=0;break}if(31==(0|g)){i[l>>2]=A,A=0;break}}else A=0}while(0);return h=0|i[l>>2],c?i[c>>2]=n+h:(0|h)!=(0|a)&&(i[8678]=28,A=-1),0|s&&(i[s>>2]=p),y=f,0|A}function H(e,t,n){t|=0,n|=0;var a,o,s,c=0,u=0,l=0;switch(s=y,o=y=y+63&-64,y=y+16|0,l=0|i[20+(e|=0)>>2],a=0|i[e+4>>2],i[e+20>>2]=0,i[e+4>>2]=0,0|n){case 2:0|it(t,33653,9)?t=-32:(t=t+9|0,u=4);break;case 1:0|it(t,33663,8)?t=-32:(t=t+8|0,u=4);break;default:t=-26}do{if(4==(0|u))if(0==(0|it(t,33672,3))&&0!=(0|(c=0|Ge(t+3|0,o+4|0))))if(19==(0|i[o+4>>2]))if(0|it(c,33676,3))t=-32;else{if(!(t=0|Ge(c+3|0,o+4|0))){t=-32;break}if(i[e+44>>2]=i[o+4>>2],0|it(t,33680,3))t=-32;else{if(!(t=0|Ge(t+3|0,o+4|0))){t=-32;break}if(i[e+40>>2]=i[o+4>>2],0|it(t,33684,3))t=-32;else{if(!(t=0|Ge(t+3|0,o+4|0))){t=-32;break}if(u=0|i[o+4>>2],i[e+48>>2]=u,i[e+52>>2]=u,t=(u=36==(0|r[t>>0]))?t+1|0:t,u){if(i[o+4>>2]=l,0|j(u=0|i[e+16>>2],l,t,0|Ve(t),0,o+4|0,o,3)){t=-32;break}if(i[e+20>>2]=i[o+4>>2],t=0|i[o>>2],t=(l=36==(0|r[t>>0]))?t+1|0:t,l){if(i[o+4>>2]=a,0|j(l=0|i[e>>2],a,t,0|Ve(t),0,o+4|0,o,3)){t=-32;break}i[e+4>>2]=i[o+4>>2],n=0|i[o>>2],(t=0|se(e))||(t=0==(0|r[n>>0])?0:-32)}else t=-32}else t=-32}}}else t=-26;else t=-32}while(0);return y=s,0|t}function N(e,t,n){e|=0,t|=0;var r=0,i=0,a=0,o=0,s=0,c=0,u=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0,_=0,S=0,Q=0,x=0,D=0,P=0,M=0;a=0|Kn(n|=0),A=0|Kn(n+4|0),h=0|Kn(n+8|0),p=0|Kn(n+12|0),s=0|Kn(n+16|0),c=0|Kn(n+20|0),u=0|Kn(n+24|0),l=0|Kn(n+28|0),g=0|Kn(t),y=0|Kn(t+4|0),v=0|Kn(t+8|0),r=20,i=1634760805,o=2036477234,f=1797285236,d=857760878,n=0|Kn(t+12|0);do{x=(0|fr((I=(0|fr((B=(0|fr((_=(0|fr(c+i|0,7))^p)+i|0,9))^v)+_|0,13))^c)+B|0,18))^i,k=(0|fr((M=(0|fr((m=(0|fr((C=(0|fr(d+a|0,7))^n)+d|0,9))^u)+C|0,13))^a)+m|0,18))^d,w=(0|fr((Q=(0|fr((P=(0|fr((b=(0|fr(o+g|0,7))^l)+o|0,9))^A)+b|0,13))^g)+P|0,18))^o,t=(0|fr((E=(0|fr((S=(0|fr((D=(0|fr(f+s|0,7))^h)+f|0,9))^y)+D|0,13))^s)+S|0,18))^f,i=(0|fr((h=(0|fr((A=(0|fr((a=(0|fr(D+x|0,7))^M)+x|0,9))^P)+a|0,13))^D)+A|0,18))^x,d=(0|fr((p=(0|fr((y=(0|fr((g=(0|fr(k+_|0,7))^Q)+k|0,9))^S)+g|0,13))^_)+y|0,18))^k,o=(0|fr((n=(0|fr((v=(0|fr((s=(0|fr(w+C|0,7))^E)+w|0,9))^B)+s|0,13))^C)+v|0,18))^w,f=(0|fr((l=(0|fr((u=(0|fr((c=(0|fr(t+b|0,7))^I)+t|0,9))^m)+c|0,13))^b)+u|0,18))^t,r=r+-2|0}while(0!=(0|r));Pn(e,i),Pn(e+4|0,d),Pn(e+8|0,o),Pn(e+12|0,f),Pn(e+16|0,g),Pn(e+20|0,y),Pn(e+24|0,v),Pn(e+28|0,n)}function U(e,t,n,a){t|=0,n|=0,a|=0;var o=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0;if(0==(0|(s=0|i[56+(e|=0)>>2]))&0==(0|(o=0|i[e+56+4>>2])))h=7;else{if(l=0|Sn(16,0,0|s,0|o),!(0==(0|(A=(f=0|u())>>>0>a>>>0|(0|f)==(0|a)&l>>>0>n>>>0?n:l))&0==(0|(f=f>>>0>a>>>0|(0|f)==(0|a)&l>>>0>n>>>0?a:f)))){l=0,c=0;do{p=0|r[t+l>>0],s=0|Qn(0|s,0|o,0|l,0|c),u(),r[e+64+s>>0]=p,l=0|Qn(0|l,0|c,1,0),c=0|u(),s=0|i[e+56>>2],o=0|i[e+56+4>>2]}while(c>>>0>>0|(0|c)==(0|f)&l>>>0>>0)}p=0|Qn(0|s,0|o,0|A,0|f),l=0|u(),i[e+56>>2]=p,i[e+56+4>>2]=l,l>>>0<0|0==(0|l)&p>>>0<16||(n=0|Sn(0|n,0|a,0|A,0|f),a=0|u(),x(e,e+64|0,16,0),i[e+56>>2]=0,i[e+56+4>>2]=0,t=t+A|0,h=7)}if(7==(0|h)&&(o=-16&n,a>>>0>0|0==(0|a)&n>>>0>15?(s=0|Sn(0|n,0|a,0|o,0|a),p=0|u(),x(e,t,o,a),a=p,t=t+o|0):s=n,!(0==(0|s)&0==(0|a)))){o=0,n=0;do{h=0|r[t+o>>0],p=0|Qn(0|i[e+56>>2],0|i[e+56+4>>2],0|o,0|n),u(),r[e+64+p>>0]=h,o=0|Qn(0|o,0|n,1,0),n=0|u()}while(n>>>0>>0|(0|n)==(0|a)&o>>>0>>0);h=0|Qn(0|i[e+56>>2],0|i[e+56+4>>2],0|s,0|a),p=0|u(),i[e+56>>2]=h,i[e+56+4>>2]=p}}function L(e,t){e|=0,t|=0;var n=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0;e:do{if(0|e){do{if(2==(0|i[e+36>>2])){if(0==(0|(n=0|i[t>>2]))&&(0|a[t+8>>0])<=1){s=6;break}p=0|i[e+4>>2],h=0}else s=6}while(0);if(6==(0|s)&&(re(e,t,p=0|i[e+4>>2]),n=0|i[t>>2],h=1),n=0==(0|n)&(c=0|r[t+8>>0])<<24>>24==0?2:0,s=0|i[e+24>>2],f=0|o(s,0|i[t+4>>2]),A=0|i[e+20>>2],c=f+n+(0|o(A,255&c))|0,n>>>0>>0)for(l=s,A=c,s=(0==(0|(c>>>0)%(s>>>0))?s+-1|0:-1)+c|0;;){if(f=1==(0|(A>>>0)%(l>>>0))?A+-1|0:s,s=h?p+(n<<3)|0:(0|i[4+(0|i[e>>2])>>2])+(f<<10)|0,y=0|i[(l=s)>>2],l=0|Vt(0|i[l+4>>2],0,0|i[e+28>>2],0),c=0|u(),d=0|i[t>>2],s=0|r[t+8>>0],g=0|i[t+4>>2],l=0==(0|d)&s<<24>>24==0?g:l,i[t+12>>2]=n,c=0|ve(e,d,s,n,y,1&((0|l)==(0|g)?0==(0|(0==(0|d)&s<<24>>24==0?0:c)):0)),c=(s=0|i[4+(0|i[e>>2])>>2])+((0|o(0|i[e+24>>2],l))<<10)+(c<<10)|0,l=s+(A<<10)|0,d?B(s+(f<<10)|0,c,l):E(s+(f<<10)|0,c,l),(n=n+1|0)>>>0>=(0|i[e+20>>2])>>>0)break e;l=0|i[e+24>>2],A=A+1|0,s=f+1|0}}}while(0)}function K(e,t,n){var r,a;n|=0,r=y,a=y=y+63&-64,y=y+400|0,0==(0|(e|=0))|0==(0|(t|=0))||(vt(a,0,0,64),Pn(a+384|0,0|i[t+48>>2]),Hn(a,a+384|0,4,0),Pn(a+384|0,0|i[t+4>>2]),Hn(a,a+384|0,4,0),Pn(a+384|0,0|i[t+44>>2]),Hn(a,a+384|0,4,0),Pn(a+384|0,0|i[t+40>>2]),Hn(a,a+384|0,4,0),Pn(a+384|0,19),Hn(a,a+384|0,4,0),Pn(a+384|0,n),Hn(a,a+384|0,4,0),Pn(a+384|0,0|i[t+12>>2]),Hn(a,a+384|0,4,0),0|(n=0|i[t+8>>2])&&(Hn(a,n,0|i[t+12>>2],0),1&i[t+56>>2]|0)&&(Et(0|i[t+8>>2],0|i[t+12>>2]),i[t+12>>2]=0),Pn(a+384|0,0|i[t+20>>2]),Hn(a,a+384|0,4,0),0|(n=0|i[t+16>>2])&&Hn(a,n,0|i[t+20>>2],0),Pn(a+384|0,0|i[t+28>>2]),Hn(a,a+384|0,4,0),0|(n=0|i[t+24>>2])&&(Hn(a,n,0|i[t+28>>2],0),2&i[t+56>>2]|0)&&(Et(0|i[t+24>>2],0|i[t+28>>2]),i[t+28>>2]=0),Pn(a+384|0,0|i[t+36>>2]),Hn(a,a+384|0,4,0),0|(n=0|i[t+32>>2])&&Hn(a,n,0|i[t+36>>2],0),ln(a,e,64)),y=r}function G(e,t,n,a){e|=0,t|=0,n|=0,a|=0;var o,s,c=0,u=0,l=0;if(o=y,s=y=y+63&-64,y=y+528|0,i[s+512>>2]=0,Pn(s+512|0,t),t>>>0<65)(0|vt(s,0,0,t))>=0&&(Hn(s,s+512|0,4,0),Hn(s,n,a,0),ln(s,e,t));else e:do{if((0|vt(s,0,0,64))>=0&&(Hn(s,s+512|0,4,0),Hn(s,n,a,0),(0|ln(s,s+448|0,64))>=0)){u=s+448|0,l=(c=e)+32|0;do{r[c>>0]=0|r[u>>0],c=c+1|0,u=u+1|0}while((0|c)<(0|l));u=s+448|0,l=64+(c=s+384|0)|0;do{i[c>>2]=i[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|l));if((t+-32|0)>>>0>64){a=e+32|0,n=t+-32|0;do{if((0|Nt(s+448|0,64,s+384|0,64,0,0,0))<0)break e;u=s+448|0,l=(c=a)+32|0;do{r[c>>0]=0|r[u>>0],c=c+1|0,u=u+1|0}while((0|c)<(0|l));n=n+-32|0,a=a+32|0,u=s+448|0,l=64+(c=s+384|0)|0;do{i[c>>2]=i[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|l))}while(n>>>0>64)}else a=e+32|0,n=t+-32|0;(0|Nt(s+448|0,n,s+384|0,64,0,0,0))>=0&&te(0|a,s+448|0,0|n)}}while(0);Et(s,384),y=o}function $(e,t,n,i,s){e|=0,t|=0,n|=0,i|=0;var c=0,u=0,f=0,A=0,h=0,p=0;tr(s|=0),u=(0|o((i>>>0)/3|0,-3))+i|0,c=((i>>>0)/3|0)<<2;do{if(u){if(2&s){c=(2|c)+(u>>>1)|0;break}c=c+4|0;break}}while(0);if(c>>>0>=t>>>0&&_r(),4&s)if(0|i){A=0,s=0,u=0,h=0;do{if(p=h,h=h+1|0,A=A<<8|0|a[n+p>>0],(s=s+8|0)>>>0>5)for(;;){if(p=255&(0|jt(A>>>(s=s+-6|0)&63)),f=u+1|0,r[e+u>>0]=p,!(s>>>0>5)){u=f;break}u=f}}while((0|h)!=(0|i));s&&(p=255&(0|jt(A<<6-s&63)),r[e+u>>0]=p,u=u+1|0)}else u=0;else if(0|i){A=0,s=0,u=0,h=0;do{if(f=h,h=h+1|0,A=A<<8|0|a[n+f>>0],(s=s+8|0)>>>0>5)for(;;){if(p=255&(0|Ht(A>>>(s=s+-6|0)&63)),f=u+1|0,r[e+u>>0]=p,!(s>>>0>5)){u=f;break}u=f}}while((0|h)!=(0|i));s&&(p=255&(0|Ht(A<<6-s&63)),r[e+u>>0]=p,u=u+1|0)}else u=0;return c>>>0>>0&&l(34564,34583,230,34599),c>>>0>u>>>0?_e(e+u|0,61,c-u|0):c=u,_e(e+c|0,0,((p=c+1|0)>>>0>>0?t:p)-c|0),0|e}function Y(e,t,n,o,s,c,l,f){e|=0,t|=0,s|=0,c|=0,l|=0,f|=0;var A,h,p=0,d=0;if(A=y,h=y=y+63&-64,y=y+112|0,!(0==(0|(n|=0))&0==(0|(o|=0)))){p=(d=h)+32|0;do{r[d>>0]=0|r[f>>0],d=d+1|0,f=f+1|0}while((0|d)<(0|p));f=a[s+4>>0]|a[s+4+1>>0]<<8|a[s+4+2>>0]<<16|a[s+4+3>>0]<<24,i[h+96>>2]=a[s>>0]|a[s+1>>0]<<8|a[s+2>>0]<<16|a[s+3>>0]<<24,i[h+96+4>>2]=f,f=8;do{r[h+96+f>>0]=c,c=0|An(0|c,0|l,8),l=0|u(),f=f+1|0}while(16!=(0|f));if(o>>>0>0|0==(0|o)&n>>>0>63)for(c=o;;){nr(h+32|0,h+96|0,h),l=0;do{r[e+l>>0]=r[h+32+l>>0]^r[t+l>>0],l=l+1|0}while(64!=(0|l));for(f=8,l=1;l=l+(0|a[(o=h+96+f|0)>>0])|0,r[o>>0]=l,16!=(0|(f=f+1|0));)l>>>=8;if(l=0|Qn(0|n,0|c,-64,-1),e=e+64|0,t=t+64|0,!((f=0|u())>>>0>0|0==(0|f)&l>>>0>63)){c=l;break}n=l,c=f}else c=n,f=o;if(!(0==(0|c)&0==(0|f))&&(nr(h+32|0,h+96|0,h),0|c)){l=0;do{r[e+l>>0]=r[h+32+l>>0]^r[t+l>>0],l=l+1|0}while((0|l)!=(0|c))}Et(h+32|0,64),Et(h,32)}y=A}function J(e,t){t|=0;var n,a,o,s,c,l,f=0,A=0,h=0,p=0;0==(0|(A=0|i[56+(e|=0)>>2]))&0==(0|(f=0|i[e+56+4>>2]))||(r[e+64+A>>0]=1,f=0|Qn(0|A,0|f,1,0),(h=0|u())>>>0<0|0==(0|h)&f>>>0<16&&_e(e+64+f|0,0,14-A+1|0),r[e+80>>0]=1,x(e,e+64|0,16,0)),A=0|i[e+24>>2],p=(o=(-67108864|(a=((p=((h=(0|i[e+28>>2])+(A>>>26)|0)>>>26)+(0|i[e+32>>2])|0)>>>26)+(0|i[e+36>>2])|0))+((((((s=((l=(5*(a>>>26)|0)+(0|i[e+20>>2])|0)>>>26)+(67108863&A)+((5+(67108863&l)|0)>>>26)|0)>>>26)+(67108863&h)|0)>>>26)+(67108863&p)|0)>>>26)|0)>>31&67108863&p|(c=(o>>>31)-1&67108863)&(((s>>>26)+(67108863&h)|0)>>>26)+(67108863&p),n=0|Qn(o>>31&67108863&l|c&5+(67108863&l)|(o>>31&(l>>>26)+(67108863&A)|c&s)<<26|0,0,0|i[e+40>>2],0),f=0|u(),f=0|Qn(0|(A=0|Qn((o>>31&(l>>>26)+(67108863&A)|c&s)>>>6|(o>>31&67108863&h|c&(s>>>26)+(67108863&h))<<20|0,0,0|i[e+44>>2],0)),0|u(),0|f,0),A=0|u(),A=0|Qn(0|(h=0|Qn((o>>31&67108863&h|c&(s>>>26)+(67108863&h))>>>12|p<<14|0,0,0|i[e+48>>2],0)),0|u(),0|A,0),h=0|u(),h=0|Qn(0|(p=0|Qn(((o>>>31)-1&o|o>>31&a)<<8|p>>>18|0,0,0|i[e+52>>2],0)),0|u(),0|h,0),u(),Pn(t,n),Pn(t+4|0,f),Pn(t+8|0,A),Pn(t+12|0,h),Et(e,88)}function V(e,t){var n,r;e|=0,n=y,r=y=y+63&-64,y=y+192|0,k(r+144|0,t|=0),k(r+96|0,r+144|0),k(r+96|0,r+96|0),C(r+96|0,t,r+96|0),C(r+144|0,r+144|0,r+96|0),k(r+48|0,r+144|0),C(r+96|0,r+96|0,r+48|0),k(r+48|0,r+96|0),t=1;do{k(r+48|0,r+48|0),t=t+1|0}while(5!=(0|t));C(r+96|0,r+48|0,r+96|0),k(r+48|0,r+96|0),t=1;do{k(r+48|0,r+48|0),t=t+1|0}while(10!=(0|t));C(r+48|0,r+48|0,r+96|0),k(r,r+48|0),t=1;do{k(r,r),t=t+1|0}while(20!=(0|t));C(r+48|0,r,r+48|0),k(r+48|0,r+48|0),t=1;do{k(r+48|0,r+48|0),t=t+1|0}while(10!=(0|t));C(r+96|0,r+48|0,r+96|0),k(r+48|0,r+96|0),t=1;do{k(r+48|0,r+48|0),t=t+1|0}while(50!=(0|t));C(r+48|0,r+48|0,r+96|0),k(r,r+48|0),t=1;do{k(r,r),t=t+1|0}while(100!=(0|t));C(r+48|0,r,r+48|0),k(r+48|0,r+48|0),t=1;do{k(r+48|0,r+48|0),t=t+1|0}while(50!=(0|t));C(r+96|0,r+48|0,r+96|0),k(r+96|0,r+96|0),t=1;do{k(r+96|0,r+96|0),t=t+1|0}while(5!=(0|t));C(e,r+96|0,r+144|0),y=n}function z(e,t){e|=0;var n,i,a=0;for(n=y,i=y=y+63&-64,y=y+1760|0,nn(i,t|=0),rn(i+1600|0,t),en(i+1280|0,i+1600|0),Xe(i+1600|0,i+1280|0,i),en(i+1440|0,i+1600|0),nn(i+160|0,i+1440|0),Xe(i+1600|0,i+1280|0,i+160|0),en(i+1440|0,i+1600|0),nn(i+320|0,i+1440|0),Xe(i+1600|0,i+1280|0,i+320|0),en(i+1440|0,i+1600|0),nn(i+480|0,i+1440|0),Xe(i+1600|0,i+1280|0,i+480|0),en(i+1440|0,i+1600|0),nn(i+640|0,i+1440|0),Xe(i+1600|0,i+1280|0,i+640|0),en(i+1440|0,i+1600|0),nn(i+800|0,i+1440|0),Xe(i+1600|0,i+1280|0,i+800|0),en(i+1440|0,i+1600|0),nn(i+960|0,i+1440|0),Xe(i+1600|0,i+1280|0,i+960|0),en(i+1440|0,i+1600|0),nn(i+1120|0,i+1440|0),Yn(e),a=252;rn(i+1600|0,e),(t=0|r[31840+a>>0])<<24>>24<=0?t<<24>>24<0&&(en(i+1440|0,i+1600|0),We(i+1600|0,i+1440|0,i+(160*(((t<<24>>24)/-2|0)<<24>>24)|0)|0)):(en(i+1440|0,i+1600|0),Xe(i+1600|0,i+1440|0,i+(160*((255&t)>>>1&255)|0)|0)),en(e,i+1600|0),a;)a=a+-1|0;y=n}function q(e,t,n,r,a,o,s){e|=0,t|=0,n|=0,r|=0,a|=0;var c,l,f=0,A=0;return c=y,l=y=y+63&-64,y=y+352|0,N(l,o|=0,s|=0),e>>>0>n>>>0&&0>>0|0==(0|a)&(e-n|0)>>>0>>0||n>>>0>e>>>0&&0>>0|0==(0|a)&(n-e|0)>>>0>>0?A=5:f=n,5==(0|A)&&(Bt(0|e,0|n,0|r),f=e),i[l+32>>2]=0,i[l+32+4>>2]=0,i[l+32+8>>2]=0,i[l+32+12>>2]=0,i[l+32+16>>2]=0,i[l+32+20>>2]=0,i[l+32+24>>2]=0,i[l+32+28>>2]=0,0==(0|(s=a>>>0>0|0==(0|a)&r>>>0>32?32:r))&0==(0|(n=a>>>0>0|0==(0|a)&r>>>0>32?0:a))||te(l+32+32|0,0|f,-2-(A=~a>>>0>4294967295|-1==(0|~a)&~r>>>0>4294967263?~r:-33)+1|0),En(l+32|0,l+32|0,A=0|Qn(0|s,0|n,32,0),0|u(),o+16|0,l),Wn(l+96|0,l+32|0),0==(0|s)&0==(0|n)||te(0|e,l+32+32|0,-2-(A=~a>>>0>4294967295|-1==(0|~a)&~r>>>0>4294967263?~r:-33)+1|0),Et(l+32|0,64),a>>>0>0|0==(0|a)&r>>>0>32&&wn(e+s|0,f+s|0,A=0|Sn(0|r,0|a,0|s,0|n),0|u(),o+16|0,l),Et(l,32),xn(l+96|0,e,r,a),qn(l+96|0,t),Et(l+96|0,256),y=c,0}function W(e,t,n,i){e|=0,t|=0,n|=0,i|=0;var o=0,s=0,c=0,l=0;e:do{if(!(0==(0|n)&0==(0|i))){for(o=a[e+352>>0]|a[e+352+1>>0]<<8|a[e+352+2>>0]<<16|a[e+352+3>>0]<<24,c=t;t=e+96+o|0,i>>>0>0|0==(0|i)&n>>>0>(l=256-o|0)>>>0;){te(0|t,0|c,0|l),t=(a[e+352>>0]|a[e+352+1>>0]<<8|a[e+352+2>>0]<<16|a[e+352+3>>0]<<24)+l|0,r[e+352>>0]=t,r[e+352+1>>0]=t>>8,r[e+352+2>>0]=t>>16,r[e+352+3>>0]=t>>24,ue(e,128,0),v(e,e+96|0),o=e+224|0,s=128+(t=e+96|0)|0;do{r[t>>0]=0|r[o>>0],t=t+1|0,o=o+1|0}while((0|t)<(0|s));if(o=(a[e+352>>0]|a[e+352+1>>0]<<8|a[e+352+2>>0]<<16|a[e+352+3>>0]<<24)-128|0,r[e+352>>0]=o,r[e+352+1>>0]=o>>8,r[e+352+2>>0]=o>>16,r[e+352+3>>0]=o>>24,0==(0|(n=0|Sn(0|n,0|i,0|l,0)))&0==(0|(i=0|u())))break e;c=c+l|0}te(0|t,0|c,0|n),l=(a[e+352>>0]|a[e+352+1>>0]<<8|a[e+352+2>>0]<<16|a[e+352+3>>0]<<24)+n|0,r[e+352>>0]=l,r[e+352+1>>0]=l>>8,r[e+352+2>>0]=l>>16,r[e+352+3>>0]=l>>24}}while(0)}function X(e,t,n){var r,a,o,s,c,u,l,f,A,h,p,d,g,y,v,b,m,I,w,C;t|=0,n|=0,C=0|i[(e|=0)>>2],I=0|i[e+4>>2],b=0|i[e+8>>2],y=0|i[e+12>>2],d=0|i[e+16>>2],h=0|i[e+20>>2],f=0|i[e+24>>2],u=0|i[e+28>>2],s=0|i[e+32>>2],a=0|i[e+36>>2],w=0|i[t>>2],m=0|i[t+4>>2],v=0|i[t+8>>2],g=0|i[t+12>>2],p=0|i[t+16>>2],A=0|i[t+20>>2],l=0|i[t+24>>2],c=0|i[t+28>>2],o=0|i[t+32>>2],r=0|i[t+36>>2],i[e>>2]=(w^C)&0-n^C,i[e+4>>2]=(m^I)&0-n^I,i[e+8>>2]=(v^b)&0-n^b,i[e+12>>2]=(g^y)&0-n^y,i[e+16>>2]=(p^d)&0-n^d,i[e+20>>2]=(A^h)&0-n^h,i[e+24>>2]=(l^f)&0-n^f,i[e+28>>2]=(c^u)&0-n^u,i[e+32>>2]=(o^s)&0-n^s,i[e+36>>2]=(r^a)&0-n^a,i[t>>2]=(w^C)&0-n^w,i[t+4>>2]=(m^I)&0-n^m,i[t+8>>2]=(v^b)&0-n^v,i[t+12>>2]=(g^y)&0-n^g,i[t+16>>2]=(p^d)&0-n^p,i[t+20>>2]=(A^h)&0-n^A,i[t+24>>2]=(l^f)&0-n^l,i[t+28>>2]=(c^u)&0-n^c,i[t+32>>2]=(o^s)&0-n^o,i[t+36>>2]=(r^a)&0-n^r}function Z(e,t,n,o,s){e|=0,o|=0,s|=0;var c,l,f=0,A=0,h=0,p=0,d=0;if(c=y,l=y=y+63&-64,y=y+112|0,!(0==(0|(t|=0))&0==(0|(n|=0)))){f=(A=l)+32|0;do{r[A>>0]=0|r[s>>0],A=A+1|0,s=s+1|0}while((0|A)<(0|f));if(A=a[o+4>>0]|a[o+4+1>>0]<<8|a[o+4+2>>0]<<16|a[o+4+3>>0]<<24,i[l+96>>2]=a[o>>0]|a[o+1>>0]<<8|a[o+2>>0]<<16|a[o+3>>0]<<24,i[l+96+4>>2]=A,i[l+96+8>>2]=0,i[l+96+8+4>>2]=0,n>>>0>0|0==(0|n)&t>>>0>63){do{for(nr(e,l+96|0,l),f=8,s=1;s=s+(0|a[(A=l+96+f|0)>>0])|0,r[A>>0]=s,16!=(0|(f=f+1|0));)s>>>=8;t=0|Qn(0|t,0|n,-64,-1),n=0|u(),e=e+64|0}while(n>>>0>0|0==(0|n)&t>>>0>63);0==(0|t)&0==(0|n)||(p=e,d=t,h=8)}else p=e,d=t,h=8;if(8==(0|h)&&(nr(l+32|0,l+96|0,l),0|d)){s=0;do{r[p+s>>0]=0|r[l+32+s>>0],s=s+1|0}while((0|s)!=(0|d))}Et(l+32|0,64),Et(l,32)}y=c}function ee(e,t,n,r,i,a,o){e|=0,t|=0,n|=0,r|=0,i|=0;var s,c,l=0;return c=y,s=y=y+63&-64,y=y+96|0,N(s,a|=0,o|=0),function(e,t,n){Z(e|=0,32,0,t|=0,n|=0)}(s+32|0,a+16|0,s),0|function(e,t,n,r,i){return 0|function(e,t,n,r,i){var a,o;return e|=0,a=y,o=y=y+63&-64,y=y+16|0,function(e,t,n,r,i){var a,o;e|=0,t|=0,n|=0,r|=0,a=y,o=y=y+63&-64,y=y+96|0,Se(o,i|=0),U(o,t,n,r),J(o,e),y=a}(o,t|=0,n|=0,r|=0,i|=0),i=0|ur(e,o),y=a,0|i}(e|=0,t|=0,n|=0,r|=0,i|=0)}(n,t,r,i,s+32|0)?(Et(s,32),t=-1):e?(t>>>0>=e>>>0&&0>>0|0==(0|i)&(t-e|0)>>>0>>0||e>>>0>=t>>>0&&0>>0|0==(0|i)&(e-t|0)>>>0>>0?l=8:n=t,8==(0|l)&&(Bt(0|e,0|t,0|r),n=e),0==(0|(t=i>>>0>0|0==(0|i)&r>>>0>32?32:r))&0==(0|(o=i>>>0>0|0==(0|i)&r>>>0>32?0:i))?En(s+32|0,s+32|0,32,0,a+16|0,s):(te(s+32+32|0,0|n,-2-(l=~i>>>0>4294967295|-1==(0|~i)&~r>>>0>4294967263?~r:-33)+1|0),En(s+32|0,s+32|0,0|Qn(0|t,0|o,32,0),0|u(),a+16|0,s),te(0|e,s+32+32|0,-2-l+1|0)),i>>>0>0|0==(0|i)&r>>>0>32&&wn(e+t|0,n+t|0,0|Sn(0|r,0|i,0|t,0|o),0|u(),a+16|0,s),Et(s,32),t=0):t=0,y=c,0|t}function te(e,t,n){e|=0,t|=0;var a,o,s=0;if((0|(n|=0))>=8192)return p(0|e,0|t,0|n),0|e;if(o=0|e,a=e+n|0,(3&e)==(3&t)){for(;3&e;){if(!n)return 0|o;r[e>>0]=0|r[t>>0],e=e+1|0,t=t+1|0,n=n-1|0}for(s=(n=-4&a|0)-64|0;(0|e)<=(0|s);)i[e>>2]=i[t>>2],i[e+4>>2]=i[t+4>>2],i[e+8>>2]=i[t+8>>2],i[e+12>>2]=i[t+12>>2],i[e+16>>2]=i[t+16>>2],i[e+20>>2]=i[t+20>>2],i[e+24>>2]=i[t+24>>2],i[e+28>>2]=i[t+28>>2],i[e+32>>2]=i[t+32>>2],i[e+36>>2]=i[t+36>>2],i[e+40>>2]=i[t+40>>2],i[e+44>>2]=i[t+44>>2],i[e+48>>2]=i[t+48>>2],i[e+52>>2]=i[t+52>>2],i[e+56>>2]=i[t+56>>2],i[e+60>>2]=i[t+60>>2],e=e+64|0,t=t+64|0;for(;(0|e)<(0|n);)i[e>>2]=i[t>>2],e=e+4|0,t=t+4|0}else for(n=a-4|0;(0|e)<(0|n);)r[e>>0]=0|r[t>>0],r[e+1>>0]=0|r[t+1>>0],r[e+2>>0]=0|r[t+2>>0],r[e+3>>0]=0|r[t+3>>0],e=e+4|0,t=t+4|0;for(;(0|e)<(0|a);)r[e>>0]=0|r[t>>0],e=e+1|0,t=t+1|0;return 0|o}function ne(e,t){e|=0;var n,a,o=0;n=y,a=y=y+63&-64,y=y+48|0,function(e,t){var n,r,a,o,s,c,u,l,f,A,h;e|=0,f=0|i[(t|=0)>>2],h=0|i[t+4>>2],u=0|i[t+8>>2],c=0|i[t+12>>2],s=0|i[t+16>>2],A=0|i[t+20>>2],a=0|i[t+24>>2],r=0|i[t+28>>2],n=0|i[t+32>>2],o=(((((l=((19*((((((((((((16777216+(19*(t=0|i[t+36>>2])|0)|0)>>>25)+f>>26)+h>>25)+u>>26)+c>>25)+s>>26)+A>>25)+a>>26)+r>>25)+n>>26)+t>>25)|0)+f>>26)+h|0)>>25)+u>>26)+c>>25)+s>>26)+A|0,i[e>>2]=(19*((((((((((((16777216+(19*t|0)|0)>>>25)+f>>26)+h>>25)+u>>26)+c>>25)+s>>26)+A>>25)+a>>26)+r>>25)+n>>26)+t>>25)|0)+f&67108863,i[e+4>>2]=33554431&l,i[e+8>>2]=(l>>25)+u&67108863,i[e+12>>2]=((l>>25)+u>>26)+c&33554431,i[e+16>>2]=(((l>>25)+u>>26)+c>>25)+s&67108863,i[e+20>>2]=33554431&o,i[e+24>>2]=(o>>25)+a&67108863,i[e+28>>2]=((o>>25)+a>>26)+r&33554431,i[e+32>>2]=(((o>>25)+a>>26)+r>>25)+n&67108863,i[e+36>>2]=((((o>>25)+a>>26)+r>>25)+n>>26)+t&33554431}(a,t|=0),t=0|i[a>>2],r[e>>0]=t,r[e+1>>0]=t>>>8,r[e+2>>0]=t>>>16,o=0|i[a+4>>2],r[e+3>>0]=o<<2|t>>>24,r[e+4>>0]=o>>>6,r[e+5>>0]=o>>>14,t=0|i[a+8>>2],r[e+6>>0]=t<<3|o>>>22,r[e+7>>0]=t>>>5,r[e+8>>0]=t>>>13,o=0|i[a+12>>2],r[e+9>>0]=o<<5|t>>>21,r[e+10>>0]=o>>>3,r[e+11>>0]=o>>>11,t=0|i[a+16>>2],r[e+12>>0]=t<<6|o>>>19,r[e+13>>0]=t>>>2,r[e+14>>0]=t>>>10,r[e+15>>0]=t>>>18,t=0|i[a+20>>2],r[e+16>>0]=t,r[e+17>>0]=t>>>8,r[e+18>>0]=t>>>16,o=0|i[a+24>>2],r[e+19>>0]=o<<1|t>>>24,r[e+20>>0]=o>>>7,r[e+21>>0]=o>>>15,t=0|i[a+28>>2],r[e+22>>0]=t<<3|o>>>23,r[e+23>>0]=t>>>5,r[e+24>>0]=t>>>13,o=0|i[a+32>>2],r[e+25>>0]=o<<4|t>>>21,r[e+26>>0]=o>>>4,r[e+27>>0]=o>>>12,t=0|i[a+36>>2],r[e+28>>0]=t<<6|o>>>20,r[e+29>>0]=t>>>2,r[e+30>>0]=t>>>10,r[e+31>>0]=t>>>18,y=n}function re(e,t,n){e|=0,t|=0,n|=0;var r,o,s=0,c=0,l=0;if(r=y,o=y=y+63&-64,y=y+4096|0,Ar(o+3072|0),Ar(o+2048|0),0!=(0|e)&0!=(0|t)&&(i[o+2048>>2]=i[t>>2],i[o+2048+4>>2]=0,i[o+2048+8>>2]=i[t+4>>2],i[o+2048+8+4>>2]=0,i[o+2048+16>>2]=a[t+8>>0],i[o+2048+16+4>>2]=0,i[o+2048+24>>2]=i[e+16>>2],i[o+2048+24+4>>2]=0,i[o+2048+32>>2]=i[e+8>>2],i[o+2048+32+4>>2]=0,i[o+2048+40>>2]=i[e+36>>2],i[o+2048+40+4>>2]=0,0|i[e+20>>2])){t=0;do{(s=127&t)||(l=0|Qn(0|i[o+2048+48>>2],0|i[o+2048+48+4>>2],1,0),c=0|u(),i[o+2048+48>>2]=l,i[o+2048+48+4>>2]=c,Ar(o),Ar(o+1024|0),B(o+3072|0,o+2048|0,o),B(o+3072|0,o,o+1024|0)),c=0|i[o+1024+(s<<3)+4>>2],i[(l=n+(t<<3)|0)>>2]=i[o+1024+(s<<3)>>2],i[l+4>>2]=c,t=t+1|0}while(t>>>0<(0|i[e+20>>2])>>>0)}y=r}function ie(e,t,n,r){e|=0,t|=0,n|=0,r|=0;var a,o,s,c,u=0,l=0,f=0;c=y,s=y=y+63&-64,y=y+64|0,l=52+(u=s+8|0)|0;do{i[u>>2]=0,u=u+4|0}while((0|u)<(0|l));u=0|Ve(e),i[s+36>>2]=u,i[s+20>>2]=u,i[s+4>>2]=u,l=0|I(u),i[s+32>>2]=l,a=0|I(u),i[s+16>>2]=a,o=0|I(u),i[s>>2]=o;do{if(0==(0|l)|0==(0|a)|0==(0|o))_(l),_(a),_(o),u=-22;else{if(!(f=0|I(u))){_(l),_(a),_(o),u=-22;break}if(0|(u=0|H(s,e,r))){_(0|i[s+32>>2]),_(0|i[s+16>>2]),_(0|i[s>>2]),_(f);break}r=0|le(0|i[s+40>>2],0|i[s+44>>2],0|i[s+52>>2],t,n,0|i[s+16>>2],0|i[s+20>>2],f,0|i[s+4>>2],0,0,r),_(0|i[s+32>>2]),_(0|i[s+16>>2]),u=0==(0|r)&&0==(0|tt(f,0|i[s>>2],0|i[s+4>>2]))?0:-35,_(f),_(0|i[s>>2])}}while(0);return y=c,0|u}function ae(e,t){e|=0,t|=0;var n,i,o=0,s=0,c=0;n=y,i=y=y+63&-64,y=y+464|0,o=0;do{c=0|r[t+o>>0],r[i+(s=o<<1)>>0]=15&c,r[i+(1|s)>>0]=(255&c)>>>4,o=o+1|0}while(32!=(0|o));t=0,o=0;do{t=134217728+((s=t+(0|a[(c=i+o|0)>>0])|0)<<24)>>28,r[c>>0]=s-(t<<4),o=o+1|0}while(63!=(0|o));r[i+63>>0]=t+(0|a[i+63>>0]),Yn(e),t=1;do{Vn(i+64|0,t>>>1,0|r[i+t>>0]),et(i+304|0,e,i+64|0),en(e,i+304|0),t=t+2|0}while(t>>>0<64);rn(i+304|0,e),bn(i+184|0,i+304|0),ot(i+304|0,i+184|0),bn(i+184|0,i+304|0),ot(i+304|0,i+184|0),bn(i+184|0,i+304|0),ot(i+304|0,i+184|0),en(e,i+304|0),t=0;do{Vn(i+64|0,t>>>1,0|r[i+t>>0]),et(i+304|0,e,i+64|0),en(e,i+304|0),t=t+2|0}while(t>>>0<64);y=n}function oe(e,t,n,r,i,a,o,s,c,l,f){var A;e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,o|=0,s|=0,c|=0,A=y,y=y+352|0,$t(A+16|0,64,0,l|=0,f|=0),Wn(A+80|0,A+16|0),Et(A+16|0,64),xn(A+80|0,o,s,c),t=0|Sn(0,0,0|s,0|c),u(),xn(A+80|0,34624,15&t,0),xn(A+80|0,n,r,i),t=0|Sn(0,0,0|r,0|i),u(),xn(A+80|0,34624,15&t,0),Ot(A+336|0,s,c),xn(A+80|0,A+336|0,8,0),Ot(A+336|0,r,i),xn(A+80|0,A+336|0,8,0),qn(A+80|0,A),Et(A+80|0,256),t=0|ur(A,a),Et(A,16);do{if(e){if(t){_e(0|e,0,0|r),t=-1;break}ct(e,n,r,i,l,1,f),t=0;break}}while(0);return y=A,0|t}function se(e){e|=0;var t=0,n=0;do{if(e)if(0|i[e>>2])if((0|i[e+4>>2])>>>0>=16){if(0==(0|i[e+8>>2])&&0|i[e+12>>2]){t=-18;break}if(t=0|i[e+20>>2],!(0|i[e+16>>2]))return 0|(0==(0|t)?-6:-19);if(t>>>0>=8){if(0==(0|i[e+24>>2])&&0|i[e+28>>2]){t=-20;break}if(0==(0|i[e+32>>2])&&0|i[e+36>>2]){t=-21;break}if((t=0|i[e+44>>2])>>>0>=8)if(t>>>0<=2097152)if(t>>>0>=(n=0|i[e+48>>2])<<3>>>0)if(0|i[e+40>>2])if(n){if(!(n>>>0>16777215))return 0|(0==(0|(e=0|i[e+52>>2]))?-28:e>>>0>16777215?-29:0);t=-17}else t=-16;else t=-12;else t=-14;else t=-15;else t=-14}else t=-6}else t=-2;else t=-1;else t=-25}while(0);return 0|t}function ce(e,t,n,a,o){var s,c;e|=0,n|=0,a|=0,o|=0,s=y,c=y=y+63&-64,y=y+192|0,((t|=0)-1&255)>63&&_r(),n||_r(),r[c+128>>0]=t,r[c+128+1>>0]=32,r[c+128+2>>0]=1,r[c+128+3>>0]=1,$n(c+128+4|0),Ot(c+128+8|0,0,0),i[c+128+16>>2]=0,i[c+128+16+4>>2]=0,i[c+128+16+8>>2]=0,i[c+128+16+12>>2]=0,a?function(e,t){t|=0;var n=0;e=16+(n=32+(e|=0)|0)|0;do{r[n>>0]=0|r[t>>0],n=n+1|0,t=t+1|0}while((0|n)<(0|e))}(c+128|0,a):(i[c+128+32>>2]=0,i[c+128+32+4>>2]=0,i[c+128+32+8>>2]=0,i[c+128+32+12>>2]=0),o?function(e,t){t|=0;var n=0;e=16+(n=48+(e|=0)|0)|0;do{r[n>>0]=0|r[t>>0],n=n+1|0,t=t+1|0}while((0|n)<(0|e))}(c+128|0,o):(i[c+128+48>>2]=0,i[c+128+48+4>>2]=0,i[c+128+48+8>>2]=0,i[c+128+48+12>>2]=0),Ue(e,c+128|0),o=96+(t=c+32|0)|0;do{i[t>>2]=0,t=t+4|0}while((0|t)<(0|o));o=(t=c)+32|0;do{r[t>>0]=0|r[n>>0],t=t+1|0,n=n+1|0}while((0|t)<(0|o));W(e,c,128,0),Et(c,128),y=s}function ue(e,t,n){var i,o;t|=0,n|=0,i=0|Qn(a[64+(e|=0)>>0]|a[e+64+1>>0]<<8|a[e+64+2>>0]<<16|a[e+64+3>>0]<<24|0,a[e+64+4>>0]|a[e+64+4+1>>0]<<8|a[e+64+4+2>>0]<<16|a[e+64+4+3>>0]<<24|0,0|t,0|n),o=0|u(),r[e+64>>0]=i,r[e+64+1>>0]=i>>8,r[e+64+2>>0]=i>>16,r[e+64+3>>0]=i>>24,r[e+64+4>>0]=o,r[e+64+4+1>>0]=o>>8,r[e+64+4+2>>0]=o>>16,r[e+64+4+3>>0]=o>>24,t=0|Qn(a[e+72>>0]|a[e+72+1>>0]<<8|a[e+72+2>>0]<<16|a[e+72+3>>0]<<24|0,a[e+72+4>>0]|a[e+72+4+1>>0]<<8|a[e+72+4+2>>0]<<16|a[e+72+4+3>>0]<<24|0,1&(o>>>0>>0|(0|o)==(0|n)&i>>>0>>0)|0,0),n=0|u(),r[e+72>>0]=t,r[e+72+1>>0]=t>>8,r[e+72+2>>0]=t>>16,r[e+72+3>>0]=t>>24,r[e+72+4>>0]=n,r[e+72+4+1>>0]=n>>8,r[e+72+4+2>>0]=n>>16,r[e+72+4+3>>0]=n>>24}function le(e,t,n,r,a,o,s,c,u,l,f,A){var h,p,d;e|=0,t|=0,n|=0,r|=0,a|=0,o|=0,s|=0,c|=0,l|=0,f|=0,A|=0,d=y,p=y=y+63&-64,y=y+64|0,h=0|I(u|=0);do{if(h){if(i[p>>2]=h,i[p+4>>2]=u,i[p+8>>2]=r,i[p+12>>2]=a,i[p+16>>2]=o,i[p+20>>2]=s,i[p+24>>2]=0,i[p+24+4>>2]=0,i[p+24+8>>2]=0,i[p+24+12>>2]=0,i[p+40>>2]=e,i[p+44>>2]=t,i[p+48>>2]=n,i[p+52>>2]=n,i[p+56>>2]=0,0|(t=0|me(p,A))){Et(h,u),_(h);break}if(0|c&&te(0|c,0|h,0|u),0!=(0|l)&0!=(0|f)&&0|F(l,f,p,A)){Et(h,u),Et(l,f),_(h),t=-31;break}Et(h,u),_(h),t=0}else t=-22}while(0);return y=d,0|t}function fe(e,t){var n,r,i=0;return r=y,n=y=y+63&-64,y=y+288|0,D(40+(e|=0)|0,t|=0),_n(e+80|0),k(n+240|0,e+40|0),C(n+192|0,n+240|0,16),Ce(n+240|0,n+240|0,e+80|0),Be(n+192|0,n+192|0,e+80|0),k(n+144|0,n+192|0),C(n+144|0,n+144|0,n+192|0),k(e,n+144|0),C(e,e,n+192|0),C(e,e,n+240|0),function(e,t){e|=0;var n,r,i=0;n=y,r=y=y+63&-64,y=y+144|0,k(r+96|0,t|=0),k(r+48|0,r+96|0),k(r+48|0,r+48|0),C(r+48|0,t,r+48|0),C(r+96|0,r+96|0,r+48|0),k(r+96|0,r+96|0),C(r+96|0,r+48|0,r+96|0),k(r+48|0,r+96|0),i=1;do{k(r+48|0,r+48|0),i=i+1|0}while(5!=(0|i));C(r+96|0,r+48|0,r+96|0),k(r+48|0,r+96|0),i=1;do{k(r+48|0,r+48|0),i=i+1|0}while(10!=(0|i));C(r+48|0,r+48|0,r+96|0),k(r,r+48|0),i=1;do{k(r,r),i=i+1|0}while(20!=(0|i));C(r+48|0,r,r+48|0),k(r+48|0,r+48|0),i=1;do{k(r+48|0,r+48|0),i=i+1|0}while(10!=(0|i));C(r+96|0,r+48|0,r+96|0),k(r+48|0,r+96|0),i=1;do{k(r+48|0,r+48|0),i=i+1|0}while(50!=(0|i));C(r+48|0,r+48|0,r+96|0),k(r,r+48|0),i=1;do{k(r,r),i=i+1|0}while(100!=(0|i));C(r+48|0,r,r+48|0),k(r+48|0,r+48|0),i=1;do{k(r+48|0,r+48|0),i=i+1|0}while(50!=(0|i));C(r+96|0,r+48|0,r+96|0),k(r+96|0,r+96|0),k(r+96|0,r+96|0),C(e,r+96|0,t),y=n}(e,e),C(e,e,n+144|0),C(e,e,n+240|0),k(n+96|0,e),C(n+96|0,n+96|0,n+192|0),Ce(n+48|0,n+96|0,n+240|0),0|an(n+48|0)?i=4:(Be(n,n+96|0,n+240|0),0|an(n)?(C(e,e,64),i=4):e=-1),4==(0|i)&&((0|(i=0|hn(e)))==((0|a[t+31>>0])>>>7|0)&&He(e,e),C(e+120|0,e,e+40|0),e=0),y=r,0|e}function Ae(e,t,n){var r,a,o,s,c,u,l,f,A,h,p,d,g,y,v,b,m,I,w;t|=0,n|=0,w=0|i[(e|=0)>>2],m=0|i[e+4>>2],v=0|i[e+8>>2],g=0|i[e+12>>2],p=0|i[e+16>>2],A=0|i[e+20>>2],l=0|i[e+24>>2],c=0|i[e+28>>2],o=0|i[e+32>>2],r=0|i[e+36>>2],I=(i[t+4>>2]^m)&0-n,b=(i[t+8>>2]^v)&0-n,y=(i[t+12>>2]^g)&0-n,d=(i[t+16>>2]^p)&0-n,h=(i[t+20>>2]^A)&0-n,f=(i[t+24>>2]^l)&0-n,u=(i[t+28>>2]^c)&0-n,s=(i[t+32>>2]^o)&0-n,a=(i[t+36>>2]^r)&0-n,i[e>>2]=(i[t>>2]^w)&0-n^w,i[e+4>>2]=I^m,i[e+8>>2]=b^v,i[e+12>>2]=y^g,i[e+16>>2]=d^p,i[e+20>>2]=h^A,i[e+24>>2]=f^l,i[e+28>>2]=u^c,i[e+32>>2]=s^o,i[e+36>>2]=a^r}function he(e,t,n,r,a,o,s,c,l,f,A,h){return e|=0,t|=0,n|=0,r|=0,a|=0,o|=0,s|=0,c|=0,l|=0,f|=0,f=y,y=y+336|0,$t(f,64,0,A|=0,h|=0),Wn(f+64|0,f),Et(f,64),xn(f+64|0,s,c,l),s=0|Sn(0,0,0|c,0|l),u(),xn(f+64|0,34624,15&s,0),ct(e,r,a,o,A,1,h),xn(f+64|0,e,a,o),A=0|Sn(0,0,0|a,0|o),u(),xn(f+64|0,34624,15&A,0),Ot(f+320|0,c,l),xn(f+64|0,f+320|0,8,0),Ot(f+320|0,a,o),xn(f+64|0,f+320|0,8,0),qn(f+64|0,t),Et(f+64|0,256),0|n&&(i[n>>2]=16,i[n+4>>2]=0),y=f,0}function pe(e){var t,n,o=0,s=0,c=0;t=y,n=y=y+63&-64,y=y+48|0,s=e|=0,c=(o=n)+32|0;do{r[o>>0]=0|r[s>>0],o=o+1|0,s=s+1|0}while((0|o)<(0|c));o=a[e+36+4>>0]|a[e+36+4+1>>0]<<8|a[e+36+4+2>>0]<<16|a[e+36+4+3>>0]<<24,i[n+32>>2]=a[e+36>>0]|a[e+36+1>>0]<<8|a[e+36+2>>0]<<16|a[e+36+3>>0]<<24,i[n+32+4>>2]=o,function(e,t,n,r){!function(e,t,n,r){ut(e|=0,t|=0,40,0,n|=0,0,r|=0)}(e|=0,t|=0,n|=0,r|=0)}(n,n,e+32|0,e),s=n,c=(o=e)+32|0;do{r[o>>0]=0|r[s>>0],o=o+1|0,s=s+1|0}while((0|o)<(0|c));s=0|i[n+32>>2],c=0|i[n+32+4>>2],r[e+36>>0]=s,r[e+36+1>>0]=s>>8,r[e+36+2>>0]=s>>16,r[e+36+3>>0]=s>>24,r[e+36+4>>0]=c,r[e+36+4+1>>0]=c>>8,r[e+36+4+2>>0]=c>>16,r[e+36+4+3>>0]=c>>24,kn(e),y=t}function de(e,t){e|=0,t|=0;var n=0,i=0,o=0,s=0,c=0;n=0;do{r[e+n>>0]=(0|a[t+(n>>>3)>>0])>>>(7&n)&1,n=n+1|0}while(256!=(0|n));c=0;do{o=e+c|0;e:do{if(0|r[o>>0]){s=1;do{if((n=s+c|0)>>>0>=256)break e;t=0|r[e+n>>0];t:do{if(t<<24>>24){if(((i=t<<24>>24<>0])|0)<16){r[o>>0]=i+t,r[e+n>>0]=0;break}if((t-i|0)<-15)break e;for(r[o>>0]=t-i;0|r[(t=e+n|0)>>0];)if(r[t>>0]=0,(n=n+1|0)>>>0>=256)break t;r[t>>0]=1}}while(0);s=s+1|0}while(s>>>0<7)}}while(0);c=c+1|0}while(256!=(0|c))}function ge(e,t,n,r,i,a,o,s,c,u,l){var f;e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,o|=0,s|=0,c|=0,f=y,y=y+352|0,er(f+16|0,u|=0,l|=0),Wn(f+80|0,f+16|0),Et(f+16|0,64),xn(f+80|0,o,s,c),Ot(f+336|0,s,c),xn(f+80|0,f+336|0,8,0),xn(f+80|0,n,r,i),Ot(f+336|0,r,i),xn(f+80|0,f+336|0,8,0),qn(f+80|0,f),Et(f+80|0,256),t=0|ur(f,a),Et(f,16);do{if(e){if(t){_e(0|e,0,0|r),t=-1;break}Kt(e,n,r,i,u,l),t=0;break}}while(0);return y=f,0|t}function ye(e,t,n,r,a,o,s){var c,u;e|=0,t|=0,n|=0,r|=0,a|=0,o|=0,c=y,u=y=y+63&-64,y=y+560|0,Dn(u+192|0,s|=0),Pt(u+128|0,o,32,0),O(u+192|0,u+128+32|0,32,0),O(u+192|0,n,r,a),Lt(u+192|0,u+64|0),Bt(e+32|0,o+32|0,32),w(u+64|0),ae(u+400|0,u+64|0),At(e,u+400|0),Dn(u+192|0,s),O(u+192|0,e,64,0),O(u+192|0,n,r,a),Lt(u+192|0,u),w(u),Un(u+128|0),b(e+32|0,u,u+128|0,u+64|0),Et(u+128|0,64),Et(u+64|0,64),0|t&&(i[t>>2]=64,i[t+4>>2]=0),y=c}function ve(e,t,n,r,a,s){e|=0,t|=0,n|=0,r|=0,a|=0,s|=0;var c=0;do{if(t){if(c=(0|i[e+24>>2])-(0|i[e+20>>2])|0,s){c=r+-1+c|0;break}c=c+((0==(0|r))<<31>>31)|0;break}if(!(n<<24>>24)){c=r+-1|0;break}if(c=0|o(0|i[e+20>>2],255&n),s){c=r+-1+c|0;break}c=c+((0==(0|r))<<31>>31)|0;break}while(0);return Zt(0|a,0,0|a,0),Zt(0|u(),0,0|c,0),s=0|Sn(c+-1|0,0,0|u(),0),a=0|u(),0==(0|t)|n<<24>>24==3?(c=0,r=0):(c=0|o(0|i[e+20>>2],1+(255&n)|0),r=0),e=0|Vt(0|(t=0|Qn(0|s,0|a,0|c,0|r)),0|(n=0|u()),0|i[e+24>>2],0),u(),0|e}function be(e,t,n,r,a){r|=0,a|=0;var o,s,c,u=0;if(c=y,s=y=y+63&-64,y=y+64|0,(n|=0)>>>0>0|0==(0|n)&(t|=0)>>>0>4294967295|(o=0|Ve(e|=0))>>>0>127)i[8678]=28,n=-1;else{u=(n=s)+60|0;do{i[n>>2]=0,n=n+4|0}while((0|n)<(0|u));(u=0|function(e){var t;return(t=0|I(e|=0))&&3&i[t+-4>>2]?(_e(0|t,0,0|e),0|t):0|t}(o))?(i[s+16>>2]=u,i[s+8>>2]=u,i[s>>2]=u,i[s+20>>2]=o,i[s+12>>2]=o,i[s+4>>2]=o,i[s+24>>2]=0,i[s+24+4>>2]=0,i[s+24+8>>2]=0,i[s+24+12>>2]=0,0|H(s,e,a)?(i[8678]=28,n=-1):n=(0|i[s+40>>2])==(0|t)?(0|i[s+44>>2])!=(r>>>10|0)&1:1,_(u)):n=-1}return y=c,0|n}function me(e,t){t|=0;var n,r,a=0,s=0,c=0;if(r=y,n=y=y+63&-64,y=y+48|0,!(a=0|se(e|=0)))if((t+-1|0)>>>0<=1){if(s=0|i[e+44>>2],a=0|i[e+48>>2],c=0|o(s=((s>>>0>>0?a<<3:s)>>>0)/(a<<2>>>0)|0,a<<2),i[n>>2]=0,i[n+8>>2]=i[e+40>>2],i[n+12>>2]=-1,i[n+16>>2]=c,i[n+20>>2]=s,i[n+24>>2]=s<<2,i[n+28>>2]=a,i[n+32>>2]=i[e+52>>2],i[n+36>>2]=t,!(a=0|function(e,t){e|=0,t|=0;var n,r,a=0;r=y,n=y=y+63&-64,y=y+80|0;do{if(0==(0|e)|0==(0|t))a=-25;else{if(a=0|I(i[e+20>>2]<<3),i[e+4>>2]=a,a){if(a=0|Pe(e,0|i[e+16>>2])){vn(e,0|i[t+56>>2]);break}K(n,t,0|i[e+36>>2]),Et(n+64|0,8),Ne(n,e),Et(n,72),a=0;break}a=-22}}while(0);return y=r,0|a}(n,e))){if(0|i[n+8>>2]){a=0;do{xe(n,a),a=a+1|0}while(a>>>0<(0|i[n+8>>2])>>>0)}!function(e,t){var n,r,a=0,s=0;if(n=y,r=y=y+63&-64,y=y+2048|0,0!=(0|(e|=0))&0!=(0|(t|=0))){if(lr(r+1024|0,(0|i[4+(0|i[t>>2])>>2])+(i[t+24>>2]<<10)-1024|0),(0|i[t+28>>2])>>>0>1){a=1;do{s=(s=0|i[t+24>>2])-1+(0|o(s,a))|0,kt(r+1024|0,(0|i[4+(0|i[t>>2])>>2])+(s<<10)|0),a=a+1|0}while(a>>>0<(0|i[t+28>>2])>>>0)}!function(e,t){e|=0,t|=0;var n=0,r=0;n=0;do{Ot(e+(n<<3)|0,0|i[(r=t+(n<<3)|0)>>2],0|i[r+4>>2]),n=n+1|0}while(128!=(0|n))}(r,r+1024|0),G(0|i[e>>2],0|i[e+4>>2],r,1024),Et(r+1024|0,1024),Et(r,1024),vn(t,0|i[e+56>>2])}y=n}(e,n),a=0}}else a=-26;return y=r,0|a}function Ie(e,t,n,r,i,a){var o,s;return t|=0,n|=0,r|=0,i|=0,a|=0,s=y,o=y=y+63&-64,y=y+592|0,0!=(0|gt(32+(e|=0)|0))&&0==(0|Ee(e))&&0!=(0|Gt(i))&&0==(0|Ee(i))&&0==(0|fe(o+424|0,i))?(Dn(o+96|0,a),O(o+96|0,e,32,0),O(o+96|0,i,32,0),O(o+96|0,t,n,r),Lt(o+96|0,o+32|0),w(o+32|0),T(o+304|0,o+32|0,o+424|0,e+32|0),At(o,o+304|0),n=0|cr(o,e),n=0|((0|o)==(0|e)?-1:n)|tt(e,o,32)):n=-1,y=s,0|n}function we(e,t){t|=0;var n,a=0,o=0;n=y,y=y+192|0,Dt(e|=0),o=128+(a=n+64|0)|0;do{i[a>>2]=909522486,a=a+4|0}while((0|a)<(0|o));r[n+64>>0]=54^r[t>>0],a=1;do{r[(o=n+64+a|0)>>0]=r[o>>0]^r[t+a>>0],a=a+1|0}while(32!=(0|a));O(e,n+64|0,128,0),Dt(e+208|0),o=128+(a=n+64|0)|0;do{i[a>>2]=1549556828,a=a+4|0}while((0|a)<(0|o));r[n+64>>0]=92^r[t>>0],a=1;do{r[(o=n+64+a|0)>>0]=r[o>>0]^r[t+a>>0],a=a+1|0}while(32!=(0|a));O(e+208|0,n+64|0,128,0),Et(n+64|0,128),Et(n,64),y=n}function Ce(e,t,n){var r,a,o,s,c,u,l,f,A;e|=0,n|=0,A=(0|i[4+(t|=0)>>2])-(0|i[n+4>>2])|0,f=(0|i[t+8>>2])-(0|i[n+8>>2])|0,l=(0|i[t+12>>2])-(0|i[n+12>>2])|0,u=(0|i[t+16>>2])-(0|i[n+16>>2])|0,c=(0|i[t+20>>2])-(0|i[n+20>>2])|0,s=(0|i[t+24>>2])-(0|i[n+24>>2])|0,o=(0|i[t+28>>2])-(0|i[n+28>>2])|0,a=(0|i[t+32>>2])-(0|i[n+32>>2])|0,r=(0|i[t+36>>2])-(0|i[n+36>>2])|0,i[e>>2]=(0|i[t>>2])-(0|i[n>>2]),i[e+4>>2]=A,i[e+8>>2]=f,i[e+12>>2]=l,i[e+16>>2]=u,i[e+20>>2]=c,i[e+24>>2]=s,i[e+28>>2]=o,i[e+32>>2]=a,i[e+36>>2]=r}function Be(e,t,n){var r,a,o,s,c,u,l,f,A;e|=0,t|=0,A=(0|i[4+(n|=0)>>2])+(0|i[t+4>>2])|0,f=(0|i[n+8>>2])+(0|i[t+8>>2])|0,l=(0|i[n+12>>2])+(0|i[t+12>>2])|0,u=(0|i[n+16>>2])+(0|i[t+16>>2])|0,c=(0|i[n+20>>2])+(0|i[t+20>>2])|0,s=(0|i[n+24>>2])+(0|i[t+24>>2])|0,o=(0|i[n+28>>2])+(0|i[t+28>>2])|0,a=(0|i[n+32>>2])+(0|i[t+32>>2])|0,r=(0|i[n+36>>2])+(0|i[t+36>>2])|0,i[e>>2]=(0|i[n>>2])+(0|i[t>>2]),i[e+4>>2]=A,i[e+8>>2]=f,i[e+12>>2]=l,i[e+16>>2]=u,i[e+20>>2]=c,i[e+24>>2]=s,i[e+28>>2]=o,i[e+32>>2]=a,i[e+36>>2]=r}function Ee(e){e|=0;var t,n,i=0,o=0,s=0,c=0;t=y,n=y=y+63&-64,y=y+16|0,r[n>>0]=0,r[n+1>>0]=0,r[n+2>>0]=0,r[n+3>>0]=0,r[n+4>>0]=0,r[n+5>>0]=0,r[n+6>>0]=0,s=0;do{i=0|r[e+s>>0],o=0;do{r[(c=n+o|0)>>0]=r[c>>0]|r[32096+(o<<5)+s>>0]^i,o=o+1|0}while(7!=(0|o));s=s+1|0}while(31!=(0|s));i=127&r[e+31>>0],o=0;do{r[(c=n+o|0)>>0]=r[c>>0]|i^r[32096+(o<<5)+31>>0],o=o+1|0}while(7!=(0|o));i=0,o=0;do{o=(0|a[n+i>>0])-1|o,i=i+1|0}while(7!=(0|i));return y=t,o>>>8&1|0}function ke(e,t,n,r,a,o,s,c,u,l,f,A){return e|=0,t|=0,n|=0,r|=0,a|=0,o|=0,s|=0,c|=0,u|=0,l|=0,l=y,y=y+336|0,er(l,f|=0,A|=0),Wn(l+64|0,l),Et(l,64),xn(l+64|0,s,c,u),Ot(l+320|0,c,u),xn(l+64|0,l+320|0,8,0),Kt(e,r,a,o,f,A),xn(l+64|0,e,a,o),Ot(l+320|0,a,o),xn(l+64|0,l+320|0,8,0),qn(l+64|0,t),Et(l+64|0,256),0|n&&(i[n>>2]=16,i[n+4>>2]=0),y=l,0}function _e(e,t,n){t|=0;var a,o=0;if(a=(e|=0)+(n|=0)|0,t&=255,(0|n)>=67){for(;3&e;)r[e>>0]=t,e=e+1|0;for(o=t|t<<8|t<<16|t<<24;(0|e)<=((-4&a)-64|0);)i[e>>2]=o,i[e+4>>2]=o,i[e+8>>2]=o,i[e+12>>2]=o,i[e+16>>2]=o,i[e+20>>2]=o,i[e+24>>2]=o,i[e+28>>2]=o,i[e+32>>2]=o,i[e+36>>2]=o,i[e+40>>2]=o,i[e+44>>2]=o,i[e+48>>2]=o,i[e+52>>2]=o,i[e+56>>2]=o,i[e+60>>2]=o,e=e+64|0;for(;(0|e)<(-4&a|0);)i[e>>2]=o,e=e+4|0}for(;(0|e)<(0|a);)r[e>>0]=t,e=e+1|0;return a-n|0}function Se(e,t){e|=0;var n=0;n=67108863&(0|Kn(t|=0)),i[e>>2]=n,n=(0|Kn(t+3|0))>>>2&67108611,i[e+4>>2]=n,n=(0|Kn(t+6|0))>>>4&67092735,i[e+8>>2]=n,n=(0|Kn(t+9|0))>>>6&66076671,i[e+12>>2]=n,n=(0|Kn(t+12|0))>>>8&1048575,i[e+16>>2]=n,i[e+20>>2]=0,i[e+20+4>>2]=0,i[e+20+8>>2]=0,i[e+20+12>>2]=0,i[e+20+16>>2]=0,n=0|Kn(t+16|0),i[e+40>>2]=n,n=0|Kn(t+20|0),i[e+44>>2]=n,n=0|Kn(t+24|0),i[e+48>>2]=n,t=0|Kn(t+28|0),i[e+52>>2]=t,i[e+56>>2]=0,i[e+56+4>>2]=0,r[e+80>>0]=0}function Qe(e,t,n,r,a,o){e|=0,t|=0,n|=0,r|=0,a|=0,o|=0;var s=0,c=0,l=0;do{if(a>>>0<0|0==(0|a)&r>>>0<64||(s=0|Qn(0|r,0|a,-64,-1),(c=0|u())>>>0>0|0==(0|c)&s>>>0>4294967231))l=10;else{if(0|Bn(n,n+64|0,s,c,o)){if(!e){l=10;break}_e(0|e,0,0|s),l=10;break}0|t&&(i[t>>2]=s,i[t+4>>2]=c),e?(Bt(0|e,n+64|0,0|s),r=0):r=0}}while(0);return 10==(0|l)&&(t?(i[t>>2]=0,i[t+4>>2]=0,r=-1):r=-1),0|r}function xe(e,t){t|=0;var n,a,o=0,s=0;if(n=y,a=y=y+63&-64,y=y+32|0,0|(e|=0)&&0|(o=0|i[e+28>>2])){i[a>>2]=t,s=0;do{if(r[a+8>>0]=s,o){t=0;do{i[a+4>>2]=t,i[a+12>>2]=0,i[a+16>>2]=i[a>>2],i[a+16+4>>2]=i[a+4>>2],i[a+16+8>>2]=i[a+8>>2],i[a+16+12>>2]=i[a+12>>2],L(e,a+16|0),t=t+1|0,o=0|i[e+28>>2]}while(t>>>0>>0)}else o=0;s=s+1|0}while(4!=(0|s))}y=n}function De(e,t,n,a){e|=0,n|=0,a|=0;var o,s,c=0;if(o=y,s=y=y+63&-64,y=y+192|0,((t|=0)-1&255)>63&&_r(),!((a+-1&255)>63|0==(0|n))){r[s+128>>0]=t,r[s+128+1>>0]=a,r[s+128+2>>0]=1,r[s+128+3>>0]=1,$n(s+128+4|0),Ot(s+128+8|0,0,0),c=48+(t=s+128+16|0)|0;do{i[t>>2]=0,t=t+4|0}while((0|t)<(0|c));return Ue(e,s+128|0),_e(s+(255&a)|0,0,128-(255&a)|0),te(0|s,0|n,255&a|0),W(e,s,128,0),Et(s,128),void(y=o)}_r()}function Pe(e,t){e|=0,t|=0;var n,r,a=0;r=y,n=y=y+63&-64,y=y+16|0;do{if(0!=(0|e)&&0!=(0|t)&&1024==(0|(t<<10>>>0)/(t>>>0))&&(a=0|I(12),i[e>>2]=a,0!=(0|a))){if(i[a+4>>2]=0,i[a>>2]=0,a=0|fn(n,t<<10),i[8678]=a,a)i[n>>2]=0;else if(0|(a=0|i[n>>2])){i[i[e>>2]>>2]=a,i[4+(0|i[e>>2])>>2]=a,i[8+(0|i[e>>2])>>2]=t<<10,a=0;break}_(0|i[e>>2]),i[e>>2]=0,a=-22}else a=-22}while(0);return y=r,0|a}function Me(e,t,n,r,o,s){var c,u,l;return e|=0,t|=0,n|=0,r|=0,s|=0,u=y,c=y=y+63&-64,y=y+32|0,l=a[4+(o|=0)>>0]|a[o+4+1>>0]<<8|a[o+4+2>>0]<<16|a[o+4+3>>0]<<24,i[c+16>>2]=a[o>>0]|a[o+1>>0]<<8|a[o+2>>0]<<16|a[o+3>>0]<<24,i[c+16+4>>2]=l,i[c+16+8>>2]=0,i[c+16+8+4>>2]=0,Ot(c,n,r),i[c+8>>2]=0,i[c+8+4>>2]=0,(t+-16|0)>>>0>48?(i[8678]=28,n=-1):n=0|function(e,t,n,r,i){return n|=0,((t|=0)-1|0)>>>0>63?n=-1:(function(e,t,n,r,i){var a,o;if(t|=0,n|=0,r|=0,i|=0,a=y,o=y=y+63&-64,y=y+368|0,(e|=0)||_r(),(n+-1&255)>63&&_r(),t)return ce(o,n,t,r,i),W(o,0,0,0),M(o,e,n),void(y=a);_r()}(e|=0,n,255&t,r|=0,i|=0),n=0),0|n}(e,t,s,c,c+16|0),y=u,0|n}function Fe(e,t,n,r,o,s,c,l,f,A,h){var p;return e|=0,t|=0,n|=0,r|=0,o|=0,s|=0,c|=0,l|=0,f|=0,A|=0,h|=0,p=y,y=y+48|0,i[p+32>>2]=0,R(p,A,h),t=a[A+16+4>>0]|a[A+16+4+1>>0]<<8|a[A+16+4+2>>0]<<16|a[A+16+4+3>>0]<<24,i[p+32+4>>2]=a[A+16>>0]|a[A+16+1>>0]<<8|a[A+16+2>>0]<<16|a[A+16+3>>0]<<24,i[p+32+4+4>>2]=t,t=0|function(e,t,n,r,i,a,o,s,c,l){var f;e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,o|=0,s|=0,f=y,y=y+352|0,qt(f+16|0,64,0,c|=0,l|=0),Wn(f+80|0,f+16|0),Et(f+16|0,64),xn(f+80|0,a,o,s),a=0|Sn(0,0,0|o,0|s),u(),xn(f+80|0,34640,15&a,0),xn(f+80|0,t,n,r),a=0|Sn(0,0,0|n,0|r),u(),xn(f+80|0,34640,15&a,0),Ot(f+336|0,o,s),xn(f+80|0,f+336|0,8,0),Ot(f+336|0,n,r),xn(f+80|0,f+336|0,8,0),qn(f+80|0,f),Et(f+80|0,256),o=0|ur(f,i),Et(f,16);do{if(e){if(o){_e(0|e,0,0|n),o=-1;break}Ft(e,t,n,r,c,1,l),o=0;break}}while(0);return y=f,0|o}(e,n,r,o,s,c,l,f,p+32|0,p),Et(p,32),y=p,0|t}function Oe(e,t,n,a,o,s,c){t|=0,n|=0,a|=0,o|=0,s|=0,c|=0;var u,l,f,A=0;f=y,u=y=y+63&-64,y=y+16|0,l=128+(A=e|=0)|0;do{r[A>>0]=0,A=A+1|0}while((0|A)<(0|l));do{if(!((s|a)>>>0>0|0==(s|a|0)&(o|n)>>>0>4294967295|c>>>0>2147483648)){if(s>>>0<0|0==(0|s)&o>>>0<3|c>>>0<8192){i[8678]=28,n=-1;break}Xt(u,16),n=(0!=(0|Cn(o,c>>>10,t,n,u,e)))<<31>>31;break}i[8678]=22,n=-1}while(0);return y=f,0|n}function Re(e,t,n,r,o,s,c,l,f,A,h,p){return e|=0,t|=0,n|=0,r|=0,o|=0,s|=0,c|=0,l|=0,f|=0,A|=0,h|=0,p|=0,A=y,y=y+48|0,i[A+32>>2]=0,R(A,h,p),p=a[h+16+4>>0]|a[h+16+4+1>>0]<<8|a[h+16+4+2>>0]<<16|a[h+16+4+3>>0]<<24,i[A+32+4>>2]=a[h+16>>0]|a[h+16+1>>0]<<8|a[h+16+2>>0]<<16|a[h+16+3>>0]<<24,i[A+32+4+4>>2]=p,function(e,t,n,r,a,o,s,c,l,f,A){var h;e|=0,t|=0,n|=0,r|=0,a|=0,o|=0,s|=0,c|=0,l|=0,h=y,y=y+336|0,qt(h,64,0,f|=0,A|=0),Wn(h+64|0,h),Et(h,64),xn(h+64|0,s,c,l),s=0|Sn(0,0,0|c,0|l),u(),xn(h+64|0,34640,15&s,0),Ft(e,r,a,o,f,1,A),xn(h+64|0,e,a,o),f=0|Sn(0,0,0|a,0|o),u(),xn(h+64|0,34640,15&f,0),Ot(h+320|0,c,l),xn(h+64|0,h+320|0,8,0),Ot(h+320|0,a,o),xn(h+64|0,h+320|0,8,0),qn(h+64|0,t),Et(h+64|0,256),0|n&&(i[n>>2]=16,i[n+4>>2]=0),y=h}(e,t,n,r,o,s,c,l,f,A+32|0,A),Et(A,32),y=A,0}function Te(e,t,n,a,o){e|=0,t|=0,n|=0,a|=0,o|=0;var s=0,c=0;e:do{if(o){for(c=0|i[n>>2];;){if(c>>>0>=t>>>0){s=4;break}if((s=0|r[e+c>>0])<<24>>24!=61){if(!a){s=9;break}if(!(0|Ln(a,s<<24>>24))){s=9;break}}else o=o+-1|0;if(c=c+1|0,i[n>>2]=c,!o){o=0;break e}}if(4==(0|s)){i[8678]=68,o=-1;break}if(9==(0|s)){i[8678]=28,o=-1;break}}else o=0}while(0);return 0|o}function je(e,t,n,a,o,s,c){t|=0,n|=0,a|=0,o|=0,s|=0,c|=0;var u,l,f,A=0;f=y,u=y=y+63&-64,y=y+16|0,l=128+(A=e|=0)|0;do{r[A>>0]=0,A=A+1|0}while((0|A)<(0|l));do{if(!((s|a)>>>0>0|0==(s|a|0)&(o|n)>>>0>4294967295|c>>>0>2147483648)){if(0==(0|o)&0==(0|s)|c>>>0<8192){i[8678]=28,n=-1;break}Xt(u,16),n=(0!=(0|In(o,c>>>10,t,n,u,e)))<<31>>31;break}i[8678]=22,n=-1}while(0);return y=f,0|n}function He(e,t){var n,r,a,o,s,c,u,l,f;e|=0,f=0-(0|i[4+(t|=0)>>2])|0,l=0-(0|i[t+8>>2])|0,u=0-(0|i[t+12>>2])|0,c=0-(0|i[t+16>>2])|0,s=0-(0|i[t+20>>2])|0,o=0-(0|i[t+24>>2])|0,a=0-(0|i[t+28>>2])|0,r=0-(0|i[t+32>>2])|0,n=0-(0|i[t+36>>2])|0,i[e>>2]=0-(0|i[t>>2]),i[e+4>>2]=f,i[e+8>>2]=l,i[e+12>>2]=u,i[e+16>>2]=c,i[e+20>>2]=s,i[e+24>>2]=o,i[e+28>>2]=a,i[e+32>>2]=r,i[e+36>>2]=n}function Ne(e,t){e|=0;var n,r,a=0;if(n=y,r=y=y+63&-64,y=y+1024|0,0|i[28+(t|=0)>>2]){a=0;do{Pn(e+64|0,0),Pn(e+68|0,a),G(r,1024,e,72),Rt((0|i[4+(0|i[t>>2])>>2])+((0|o(0|i[t+24>>2],a))<<10)|0,r),Pn(e+64|0,1),G(r,1024,e,72),Rt((0|i[4+(0|i[t>>2])>>2])+(1+(0|o(0|i[t+24>>2],a))<<10)|0,r),a=a+1|0}while(a>>>0<(0|i[t+28>>2])>>>0)}Et(r,1024),y=n}function Ue(e,t){t|=0;var n=0,i=0,o=0,s=0;!function(e){var t,n=0,i=0;i=32352,t=64+(n=e|=0)|0;do{r[n>>0]=0|r[i>>0],n=n+1|0,i=i+1|0}while((0|n)<(0|t));_e(e+64|0,0,293)}(e|=0),n=0;do{s=0|Ut(t+(n<<3)|0),o=0|u(),s=(a[(i=e+(n<<3)|0)>>0]|a[i+1>>0]<<8|a[i+2>>0]<<16|a[i+3>>0]<<24)^s,o=(a[i+4>>0]|a[i+4+1>>0]<<8|a[i+4+2>>0]<<16|a[i+4+3>>0]<<24)^o,r[i>>0]=s,r[i+1>>0]=s>>8,r[i+2>>0]=s>>16,r[i+3>>0]=s>>24,r[i+4>>0]=o,r[i+4+1>>0]=o>>8,r[i+4+2>>0]=o>>16,r[i+4+3>>0]=o>>24,n=n+1|0}while(8!=(0|n))}function Le(e){var t,n,r,i,o,s,l=0;return o=0|a[7+(e|=0)>>0],s=0|cn(0|a[e+6>>0],0,8),l=0|u(),i=0|cn(0|a[e+5>>0],0,16),l=0|l|u(),r=0|cn(0|a[e+4>>0],0,24),l=0|(l=0|l|u())|a[e+3>>0],n=0|cn(0|a[e+2>>0],0,40),l=0|l|u(),t=0|cn(0|a[e+1>>0],0,48),l=0|l|u(),e=0|cn(0|a[e>>0],0,56),c(0|l|u()|0),s|o|i|r|n|t|e|0}function Ke(e,t,n,r,a,o){t|=0,a|=0,o|=0;var s,c=0;return s=y,c=y=y+63&-64,y=y+16|0,Bt(64+(e|=0)|0,0|(n|=0),0|(r|=0)),mn(e,c,e+64|0,r,a,o),64==(0|i[c>>2])&0==(0|i[c+4>>2])?0|t?(c=0|Qn(0|r,0|a,64,0),r=0|u(),i[t>>2]=c,i[t+4>>2]=r,r=0):r=0:(0|t&&(i[t>>2]=0,i[t+4>>2]=0),_e(0|e,0,r+64|0),r=-1),y=s,0|r}function Ge(e,t){t|=0;var n,a=0,o=0,s=0,c=0;n=0|r[(e|=0)>>0];e:do{if((n+-48&255)<=9){for(o=n,s=0,c=e;;){if(!(s>>>0<429496730&((o=(o<<24>>24)-48|0)>>>0>~(a=10*s|0)>>>0^1))){a=0;break e}if(s=(o>>>0>~a>>>0?0:o)+a|0,((o=0|r[(a=c+1|0)>>0])-48&255)>9)break;c=a}(0|a)!=(0|e)&&(0|c)==(0|e)|n<<24>>24!=48?i[t>>2]=s:a=0}else a=0}while(0);return 0|a}function $e(e){return((0-((0-(95^(e|=0))|0)>>>8&63^63|(0-(45^e)|0)>>>8&62^62|((e+65439|0)>>>8^255)&e+185&((122-e|0)>>>8&255^255)|((e+-65|0)>>>8^255)&e+-65&((90-e|0)>>>8&255^255)|((e+65488|0)>>>8^255)&e+4&((57-e|0)>>>8&255^255))|0)>>>8&255^255)&(0-(65^e)|0)>>>8|(0-(95^e)|0)>>>8&63^63|(0-(45^e)|0)>>>8&62^62|((e+65439|0)>>>8^255)&e+185&((122-e|0)>>>8&255^255)|((e+-65|0)>>>8^255)&e+-65&((90-e|0)>>>8&255^255)|((e+65488|0)>>>8^255)&e+4&((57-e|0)>>>8&255^255)|0}function Ye(e){return((0-((0-(47^(e|=0))|0)>>>8&63^63|(0-(43^e)|0)>>>8&62^62|((e+65439|0)>>>8^255)&e+185&((122-e|0)>>>8&255^255)|((e+-65|0)>>>8^255)&e+-65&((90-e|0)>>>8&255^255)|((e+65488|0)>>>8^255)&e+4&((57-e|0)>>>8&255^255))|0)>>>8&255^255)&(0-(65^e)|0)>>>8|(0-(47^e)|0)>>>8&63^63|(0-(43^e)|0)>>>8&62^62|((e+65439|0)>>>8^255)&e+185&((122-e|0)>>>8&255^255)|((e+-65|0)>>>8^255)&e+-65&((90-e|0)>>>8&255^255)|((e+65488|0)>>>8^255)&e+4&((57-e|0)>>>8&255^255)|0}function Je(e,t){var n,r,a,o,s,c,u,l,f;e|=0,f=0|i[4+(t|=0)>>2],l=0|i[t+8>>2],u=0|i[t+12>>2],c=0|i[t+16>>2],s=0|i[t+20>>2],o=0|i[t+24>>2],a=0|i[t+28>>2],r=0|i[t+32>>2],n=0|i[t+36>>2],i[e>>2]=i[t>>2],i[e+4>>2]=f,i[e+8>>2]=l,i[e+12>>2]=u,i[e+16>>2]=c,i[e+20>>2]=s,i[e+24>>2]=o,i[e+28>>2]=a,i[e+32>>2]=r,i[e+36>>2]=n}function Ve(e){e|=0;var t=0,n=0,a=0;e:do{if(3&e)for(t=e,n=e;;){if(!(0|r[n>>0]))break e;if(!(3&(t=n=n+1|0))){t=n,a=5;break}}else t=e,a=5}while(0);if(5==(0|a)){for(;!((-2139062144&(n=0|i[t>>2])^-2139062144)&n+-16843009);)t=t+4|0;if((255&n)<<24>>24)do{t=t+1|0}while(0!=(0|r[t>>0]))}return t-e|0}function ze(e,t){t|=0;var n=0;i[(e|=0)>>2]=1634760805,i[e+4>>2]=857760878,i[e+8>>2]=2036477234,i[e+12>>2]=1797285236,n=0|Kn(t),i[e+16>>2]=n,n=0|Kn(t+4|0),i[e+20>>2]=n,n=0|Kn(t+8|0),i[e+24>>2]=n,n=0|Kn(t+12|0),i[e+28>>2]=n,n=0|Kn(t+16|0),i[e+32>>2]=n,n=0|Kn(t+20|0),i[e+36>>2]=n,n=0|Kn(t+24|0),i[e+40>>2]=n,t=0|Kn(t+28|0),i[e+44>>2]=t}function qe(e,t,n){t|=0,n|=0;var i=0;r[7+(e|=0)>>0]=t,i=0|An(0|t,0|n,8),u(),r[e+6>>0]=i,i=0|An(0|t,0|n,16),u(),r[e+5>>0]=i,i=0|An(0|t,0|n,24),u(),r[e+4>>0]=i,r[e+3>>0]=n,i=0|An(0|t,0|n,40),u(),r[e+2>>0]=i,i=0|An(0|t,0|n,48),u(),r[e+1>>0]=i,n=0|An(0|t,0|n,56),u(),r[e>>0]=n}function We(e,t,n){var r,i;n|=0,r=y,i=y=y+63&-64,y=y+48|0,Be(e|=0,40+(t|=0)|0,t),Ce(e+40|0,t+40|0,t),C(e+80|0,e,n+40|0),C(e+40|0,e+40|0,n),C(e+120|0,n+120|0,t+120|0),C(e,t+80|0,n+80|0),Be(i,e,e),Ce(e,e+80|0,e+40|0),Be(e+40|0,e+80|0,e+40|0),Ce(e+80|0,i,e+120|0),Be(e+120|0,i,e+120|0),y=r}function Xe(e,t,n){var r,i;n|=0,r=y,i=y=y+63&-64,y=y+48|0,Be(e|=0,40+(t|=0)|0,t),Ce(e+40|0,t+40|0,t),C(e+80|0,e,n),C(e+40|0,e+40|0,n+40|0),C(e+120|0,n+120|0,t+120|0),C(e,t+80|0,n+80|0),Be(i,e,e),Ce(e,e+80|0,e+40|0),Be(e+40|0,e+80|0,e+40|0),Be(e+80|0,i,e+120|0),Ce(e+120|0,i,e+120|0),y=r}function Ze(e,t,n){var r,i;n|=0,r=y,i=y=y+63&-64,y=y+48|0,Be(e|=0,40+(t|=0)|0,t),Ce(e+40|0,t+40|0,t),C(e+80|0,e,n+40|0),C(e+40|0,e+40|0,n),C(e+120|0,n+80|0,t+120|0),Be(i,t+80|0,t+80|0),Ce(e,e+80|0,e+40|0),Be(e+40|0,e+80|0,e+40|0),Ce(e+80|0,i,e+120|0),Be(e+120|0,i,e+120|0),y=r}function et(e,t,n){var r,i;n|=0,r=y,i=y=y+63&-64,y=y+48|0,Be(e|=0,40+(t|=0)|0,t),Ce(e+40|0,t+40|0,t),C(e+80|0,e,n),C(e+40|0,e+40|0,n+40|0),C(e+120|0,n+80|0,t+120|0),Be(i,t+80|0,t+80|0),Ce(e,e+80|0,e+40|0),Be(e+40|0,e+80|0,e+40|0),Be(e+80|0,i,e+120|0),Ce(e+120|0,i,e+120|0),y=r}function tt(e,t,n){var o,s;if(e|=0,t|=0,n|=0,o=y,s=y=y+63&-64,y=y+16|0,i[s+4>>2]=e,i[s>>2]=t,r[s+8>>0]=0,0|n){e=0;do{r[s+8>>0]=r[s+8>>0]|r[(0|i[s>>2])+e>>0]^r[(0|i[s+4>>2])+e>>0],e=e+1|0}while((0|e)!=(0|n))}return y=o,((511+(0|a[s+8>>0])|0)>>>8&1)-1|0}function nt(e,t){e|=0;var n,a,o=0;if(n=y,a=y=y+63&-64,y=y+64|0,!(((t|=0)-1&255)>63)){r[a>>0]=t,r[a+1>>0]=0,r[a+2>>0]=1,r[a+3>>0]=1,$n(a+4|0),Ot(a+8|0,0,0),o=48+(t=a+16|0)|0;do{i[t>>2]=0,t=t+4|0}while((0|t)<(0|o));return Ue(e,a),void(y=n)}_r()}function rt(e,t,n){var a,o;e|=0,t|=0,n|=0,a=y,o=y=y+63&-64,y=y+16|0,i[o+8>>2]=e,i[o+4>>2]=t,i[o>>2]=0,e=0;do{i[o>>2]=i[o>>2]|255&(r[(0|i[o+4>>2])+e>>0]^r[(0|i[o+8>>2])+e>>0]),e=e+1|0}while((0|e)!=(0|n));return y=a,((511+(0|i[o>>2])|0)>>>8&1)-1|0}function it(e,t,n){t|=0,n|=0;var i=0,o=0;i=0|r[(e|=0)>>0];e:do{if(i<<24>>24)for(;;){if(n=n+-1|0,!(i<<24>>24==(o=0|r[t>>0])<<24>>24&0!=(0|n)&o<<24>>24!=0))break e;if(t=t+1|0,!((i=0|r[(e=e+1|0)>>0])<<24>>24)){i=0;break}}else i=0}while(0);return(255&i)-(0|a[t>>0])|0}function at(e,t){e|=0,t|=0;var n,i,a=0,s=0,c=0,u=0;for(n=y,i=y=y+63&-64,y=y+16|0,s=10;u=255&((c=t)+(0|o(t=(t>>>0)/10|0,-10))|48),r[i+(a=s+-1|0)>>0]=u,c>>>0>9&0!=(0|a);)s=a;te(0|e,i+a|0,0|(u=11-s|0)),r[e+u>>0]=0,y=n}function ot(e,t){var n,r;n=y,r=y=y+63&-64,y=y+48|0,k(e|=0,t|=0),k(e+80|0,t+40|0),function(e,t){e|=0;var n,r,a,o,s,c,l,f,A,h,p,d,g,y,v,b,m,I,w,C,B,E,k,_,S,Q,x,D,P,M,F,O,R,T,j,H,N,U,L,K,G,$,Y,J,V,z,q,W,X,Z,ee,te,ne=0,re=0,ie=0,ae=0,oe=0,se=0,ce=0,ue=0,le=0,fe=0,Ae=0,he=0,pe=0,de=0,ge=0,ye=0,ve=0,be=0,me=0,Ie=0,we=0,Ce=0,Be=0,Ee=0,ke=0,_e=0,Se=0,Qe=0,xe=0,De=0,Pe=0,Me=0,Fe=0,Oe=0,Re=0,Te=0,je=0,He=0,Ne=0,Ue=0,Le=0,Ke=0,Ge=0,$e=0,Ye=0,Je=0,Ve=0,ze=0,qe=0,We=0,Xe=0,Ze=0,et=0,tt=0,nt=0,rt=0,it=0;ue=0|i[(t|=0)>>2],ge=0|i[t+4>>2],he=0|i[t+8>>2],Ie=0|i[t+12>>2],re=0|i[t+16>>2],we=0|i[t+20>>2],ye=0|i[t+24>>2],se=0|i[t+28>>2],oe=0|i[t+32>>2],t=0|i[t+36>>2],Z=0|Zt(0|ue,((0|ue)<0)<<31>>31|0,0|ue,((0|ue)<0)<<31>>31|0),it=0|u(),J=0|Zt(ue<<1|0,0|(le=((ue<<1|0)<0)<<31>>31),0|ge,((0|ge)<0)<<31>>31|0),et=0|u(),G=0|Zt(0|he,((0|he)<0)<<31>>31|0,ue<<1|0,0|le),K=0|u(),j=0|Zt(0|Ie,((0|Ie)<0)<<31>>31|0,ue<<1|0,0|le),T=0|u(),x=0|Zt(0|re,((0|re)<0)<<31>>31|0,ue<<1|0,0|le),Ke=0|u(),E=0|Zt(0|we,((0|we)<0)<<31>>31|0,ue<<1|0,0|le),je=0|u(),b=0|Zt(0|ye,((0|ye)<0)<<31>>31|0,ue<<1|0,0|le),Fe=0|u(),p=0|Zt(0|se,((0|se)<0)<<31>>31|0,ue<<1|0,0|le),Qe=0|u(),s=0|Zt(0|oe,((0|oe)<0)<<31>>31|0,ue<<1|0,0|le),Ee=0|u(),le=0|Zt(0|t,((0|t)<0)<<31>>31|0,ue<<1|0,0|le),ue=0|u(),L=0|Zt(ge<<1|0,0|(ne=((ge<<1|0)<0)<<31>>31),0|ge,((0|ge)<0)<<31>>31|0),We=0|u(),R=0|Zt(ge<<1|0,0|ne,0|he,((0|he)<0)<<31>>31|0),Je=0|u(),M=0|Zt(Ie<<1|0,0|(ie=((Ie<<1|0)<0)<<31>>31),ge<<1|0,0|ne),P=0|u(),S=0|Zt(0|re,((0|re)<0)<<31>>31|0,ge<<1|0,0|ne),_=0|u(),m=0|Zt(we<<1|0,((we<<1|0)<0)<<31>>31|0,ge<<1|0,0|ne),Oe=0|u(),d=0|Zt(0|ye,((0|ye)<0)<<31>>31|0,ge<<1|0,0|ne),xe=0|u(),c=0|Zt(se<<1|0,((se<<1|0)<0)<<31>>31|0,ge<<1|0,0|ne),ke=0|u(),fe=0|Zt(0|oe,((0|oe)<0)<<31>>31|0,ge<<1|0,0|ne),Ae=0|u(),ne=0|Zt(38*t|0,0|(de=((38*t|0)<0)<<31>>31),ge<<1|0,0|ne),ge=0|u(),D=0|Zt(0|he,((0|he)<0)<<31>>31|0,0|he,((0|he)<0)<<31>>31|0),Ge=0|u(),k=0|Zt(he<<1|0,((he<<1|0)<0)<<31>>31|0,0|Ie,((0|Ie)<0)<<31>>31|0),He=0|u(),I=0|Zt(0|re,((0|re)<0)<<31>>31|0,he<<1|0,((he<<1|0)<0)<<31>>31|0),Re=0|u(),v=0|Zt(0|we,((0|we)<0)<<31>>31|0,he<<1|0,((he<<1|0)<0)<<31>>31|0),y=0|u(),h=0|Zt(0|ye,((0|ye)<0)<<31>>31|0,he<<1|0,((he<<1|0)<0)<<31>>31|0),A=0|u(),n=0|Zt(0|se,((0|se)<0)<<31>>31|0,he<<1|0,((he<<1|0)<0)<<31>>31|0),Ce=0|u(),q=0|Zt(19*oe|0,0|(Me=((19*oe|0)<0)<<31>>31),he<<1|0,((he<<1|0)<0)<<31>>31|0),tt=0|u(),he=0|Zt(38*t|0,0|de,0|he,((0|he)<0)<<31>>31|0),ve=0|u(),C=0|Zt(Ie<<1|0,0|ie,0|Ie,((0|Ie)<0)<<31>>31|0),w=0|u(),g=0|Zt(Ie<<1|0,0|ie,0|re,((0|re)<0)<<31>>31|0),De=0|u(),l=0|Zt(we<<1|0,((we<<1|0)<0)<<31>>31|0,Ie<<1|0,0|ie),_e=0|u(),o=0|Zt(0|ye,((0|ye)<0)<<31>>31|0,Ie<<1|0,0|ie),a=0|u(),W=0|Zt(38*se|0,0|(Le=((38*se|0)<0)<<31>>31),Ie<<1|0,0|ie),nt=0|u(),$=0|Zt(19*oe|0,0|Me,Ie<<1|0,0|ie),Xe=0|u(),ie=0|Zt(38*t|0,0|de,Ie<<1|0,0|ie),Ie=0|u(),f=0|Zt(0|re,((0|re)<0)<<31>>31|0,0|re,((0|re)<0)<<31>>31|0),Se=0|u(),r=0|Zt(re<<1|0,((re<<1|0)<0)<<31>>31|0,0|we,((0|we)<0)<<31>>31|0),Be=0|u(),X=0|Zt(19*ye|0,((19*ye|0)<0)<<31>>31|0,re<<1|0,((re<<1|0)<0)<<31>>31|0),rt=0|u(),Y=0|Zt(38*se|0,0|Le,0|re,((0|re)<0)<<31>>31|0),Ze=0|u(),H=0|Zt(19*oe|0,0|Me,re<<1|0,((re<<1|0)<0)<<31>>31|0),Ve=0|u(),re=0|Zt(38*t|0,0|de,0|re,((0|re)<0)<<31>>31|0),be=0|u(),te=0|Zt(38*we|0,((38*we|0)<0)<<31>>31|0,0|we,((0|we)<0)<<31>>31|0),ee=0|u(),z=0|Zt(19*ye|0,((19*ye|0)<0)<<31>>31|0,we<<1|0,((we<<1|0)<0)<<31>>31|0),V=0|u(),N=0|Zt(38*se|0,0|Le,we<<1|0,((we<<1|0)<0)<<31>>31|0),ze=0|u(),F=0|Zt(19*oe|0,0|Me,we<<1|0,((we<<1|0)<0)<<31>>31|0),$e=0|u(),we=0|Zt(38*t|0,0|de,we<<1|0,((we<<1|0)<0)<<31>>31|0),pe=0|u(),U=0|Zt(19*ye|0,((19*ye|0)<0)<<31>>31|0,0|ye,((0|ye)<0)<<31>>31|0),qe=0|u(),O=0|Zt(38*se|0,0|Le,0|ye,((0|ye)<0)<<31>>31|0),Ye=0|u(),Q=0|Zt(19*oe|0,0|Me,ye<<1|0,((ye<<1|0)<0)<<31>>31|0),Ne=0|u(),ye=0|Zt(38*t|0,0|de,0|ye,((0|ye)<0)<<31>>31|0),ce=0|u(),Le=0|Zt(38*se|0,0|Le,0|se,((0|se)<0)<<31>>31|0),Ue=0|u(),B=0|Zt(19*oe|0,0|Me,se<<1|0,((se<<1|0)<0)<<31>>31|0),Te=0|u(),se=0|Zt(38*t|0,0|de,se<<1|0,((se<<1|0)<0)<<31>>31|0),me=0|u(),Me=0|Zt(19*oe|0,0|Me,0|oe,((0|oe)<0)<<31>>31|0),Pe=0|u(),oe=0|Zt(38*t|0,0|de,0|oe,((0|oe)<0)<<31>>31|0),ae=0|u(),t=0|Zt(38*t|0,0|de,0|t,((0|t)<0)<<31>>31|0),de=0|u(),ge=0|Qn(0|(tt=0|Qn(0|(nt=0|Qn(0|(rt=0|Qn(0|(it=0|Qn(0|te,0|ee,0|Z,0|it)),0|u(),0|X,0|rt)),0|u(),0|W,0|nt)),0|u(),0|q,0|tt)),0|u(),0|ne,0|ge),ne=0|u(),ve=0|Qn(0|(Xe=0|Qn(0|(Ze=0|Qn(0|(et=0|Qn(0|z,0|V,0|J,0|et)),0|u(),0|Y,0|Ze)),0|u(),0|$,0|Xe)),0|u(),0|he,0|ve),he=0|u(),Ie=0|Qn(0|(Ve=0|Qn(0|(ze=0|Qn(0|(qe=0|Qn(0|(We=0|Qn(0|G,0|K,0|L,0|We)),0|u(),0|U,0|qe)),0|u(),0|N,0|ze)),0|u(),0|H,0|Ve)),0|u(),0|ie,0|Ie),ie=0|u(),be=0|Qn(0|($e=0|Qn(0|(Ye=0|Qn(0|(Je=0|Qn(0|j,0|T,0|R,0|Je)),0|u(),0|O,0|Ye)),0|u(),0|F,0|$e)),0|u(),0|re,0|be),re=0|u(),pe=0|Qn(0|(Ne=0|Qn(0|(Ue=0|Qn(0|(Ke=0|Qn(0|(Ge=0|Qn(0|M,0|P,0|D,0|Ge)),0|u(),0|x,0|Ke)),0|u(),0|Le,0|Ue)),0|u(),0|Q,0|Ne)),0|u(),0|we,0|pe),we=0|u(),ce=0|Qn(0|(Te=0|Qn(0|(je=0|Qn(0|(He=0|Qn(0|S,0|_,0|k,0|He)),0|u(),0|E,0|je)),0|u(),0|B,0|Te)),0|u(),0|ye,0|ce),ye=0|u(),me=0|Qn(0|(Pe=0|Qn(0|(Fe=0|Qn(0|(Oe=0|Qn(0|(Re=0|Qn(0|C,0|w,0|I,0|Re)),0|u(),0|m,0|Oe)),0|u(),0|b,0|Fe)),0|u(),0|Me,0|Pe)),0|u(),0|se,0|me),se=0|u(),ae=0|Qn(0|(Qe=0|Qn(0|(xe=0|Qn(0|(De=0|Qn(0|v,0|y,0|g,0|De)),0|u(),0|d,0|xe)),0|u(),0|p,0|Qe)),0|u(),0|oe,0|ae),oe=0|u(),de=0|Qn(0|(Ee=0|Qn(0|(ke=0|Qn(0|(_e=0|Qn(0|(Se=0|Qn(0|h,0|A,0|f,0|Se)),0|u(),0|l,0|_e)),0|u(),0|c,0|ke)),0|u(),0|s,0|Ee)),0|u(),0|t,0|de),t=0|u(),ue=0|Qn(0|(Ae=0|Qn(0|(Ce=0|Qn(0|(Be=0|Qn(0|o,0|a,0|r,0|Be)),0|u(),0|n,0|Ce)),0|u(),0|fe,0|Ae)),0|u(),0|le,0|ue),le=0|u(),ne=0|cn(0|ge,0|ne,1),ge=0|u(),he=0|cn(0|ve,0|he,1),ve=0|u(),ie=0|cn(0|Ie,0|ie,1),Ie=0|u(),re=0|cn(0|be,0|re,1),be=0|u(),we=0|cn(0|pe,0|we,1),pe=0|u(),ye=0|cn(0|ce,0|ye,1),ce=0|u(),se=0|cn(0|me,0|se,1),me=0|u(),oe=0|cn(0|ae,0|oe,1),ae=0|u(),t=0|cn(0|de,0|t,1),de=0|u(),le=0|cn(0|ue,0|le,1),ue=0|u(),ve=0|Qn(0|(Ce=0|tn(0|(Ae=0|Qn(0|ne,0|ge,33554432,0)),0|(fe=0|u()),26)),0|u(),0|he,0|ve),he=0|u(),fe=0|Sn(0|ne,0|ge,-67108864&Ae|0,0|fe),Ae=0|u(),ce=0|Qn(0|(Ce=0|tn(0|(ge=0|Qn(0|we,0|pe,33554432,0)),0|(ne=0|u()),26)),0|u(),0|ye,0|ce),ye=0|u(),ne=0|Sn(0|we,0|pe,-67108864&ge|0,0|ne),ge=0|u(),Ie=0|Qn(0|(we=0|tn(0|(pe=0|Qn(0|ve,0|he,16777216,0)),0|u(),25)),0|u(),0|ie,0|Ie),ie=0|u(),pe=0|Sn(0|ve,0|he,-33554432&pe|0,0),he=0|u(),me=0|Qn(0|(we=0|tn(0|(ve=0|Qn(0|ce,0|ye,16777216,0)),0|u(),25)),0|u(),0|se,0|me),se=0|u(),ve=0|Sn(0|ce,0|ye,-33554432&ve|0,0),ye=0|u(),be=0|Qn(0|(we=0|tn(0|(ce=0|Qn(0|Ie,0|ie,33554432,0)),0|u(),26)),0|u(),0|re,0|be),re=0|u(),ce=0|Sn(0|Ie,0|ie,-67108864&ce|0,0),u(),ae=0|Qn(0|(Ie=0|tn(0|(ie=0|Qn(0|me,0|se,33554432,0)),0|u(),26)),0|u(),0|oe,0|ae),oe=0|u(),ie=0|Sn(0|me,0|se,-67108864&ie|0,0),u(),ge=0|Qn(0|(me=0|tn(0|(se=0|Qn(0|be,0|re,16777216,0)),0|u(),25)),0|u(),0|ne,0|ge),ne=0|u(),se=0|Sn(0|be,0|re,-33554432&se|0,0),u(),de=0|Qn(0|(be=0|tn(0|(re=0|Qn(0|ae,0|oe,16777216,0)),0|u(),25)),0|u(),0|t,0|de),t=0|u(),re=0|Sn(0|ae,0|oe,-33554432&re|0,0),u(),ae=0|Qn(0|ve,0|ye,0|(ae=0|An(0|(oe=0|Qn(0|ge,0|ne,33554432,0)),0|u(),26)),0|u()),u(),oe=0|Sn(0|ge,0|ne,-67108864&oe|0,0),u(),ue=0|Qn(0|(ge=0|tn(0|(ne=0|Qn(0|de,0|t,33554432,0)),0|u(),26)),0|u(),0|le,0|ue),le=0|u(),ne=0|Sn(0|de,0|t,-67108864&ne|0,0),u(),Ae=0|Qn(0|(de=0|Zt(0|(de=0|tn(0|(t=0|Qn(0|ue,0|le,16777216,0)),0|u(),25)),0|u(),19,0)),0|u(),0|fe,0|Ae),fe=0|u(),t=0|Sn(0|ue,0|le,-33554432&t|0,0),u(),ue=0|Qn(0|pe,0|he,0|(ue=0|An(0|(le=0|Qn(0|Ae,0|fe,33554432,0)),0|u(),26)),0|u()),u(),le=0|Sn(0|Ae,0|fe,-67108864&le|0,0),u(),i[e>>2]=le,i[e+4>>2]=ue,i[e+8>>2]=ce,i[e+12>>2]=se,i[e+16>>2]=oe,i[e+20>>2]=ae,i[e+24>>2]=ie,i[e+28>>2]=re,i[e+32>>2]=ne,i[e+36>>2]=t}(e+120|0,t+80|0),Be(e+40|0,t,t+40|0),k(r,e+40|0),Be(e+40|0,e+80|0,e),Ce(e+80|0,e+80|0,e),Ce(e,r,e+40|0),Ce(e+120|0,e+120|0,e+80|0),y=n}function st(e,t,n){var i,o;if(e|=0,t|=0,n|=0,o=y,i=y=y+63&-64,y=y+16|0,r[i>>0]=0,0|function(e,t,n){e|=0,t|=0;var i,o,s=0;if(o=y,i=y=y+63&-64,y=y+336|0,0|function(e){e|=0;var t,n,i=0,o=0,s=0,c=0;t=y,n=y=y+63&-64,y=y+16|0,r[n>>0]=0,r[n+1>>0]=0,r[n+2>>0]=0,r[n+3>>0]=0,r[n+4>>0]=0,r[n+5>>0]=0,r[n+6>>0]=0,s=0;do{i=0|r[e+s>>0],o=0;do{r[(c=n+o|0)>>0]=r[c>>0]|r[33184+(o<<5)+s>>0]^i,o=o+1|0}while(7!=(0|o));s=s+1|0}while(31!=(0|s));i=127&r[e+31>>0],o=0;do{r[(c=n+o|0)>>0]=r[c>>0]|i^r[33184+(o<<5)+31>>0],o=o+1|0}while(7!=(0|o));i=0,o=0;do{o=(0|a[n+i>>0])-1|o,i=i+1|0}while(7!=(0|i));return y=t,o>>>8&1|0}(n|=0))s=-1;else{s=0;do{r[e+s>>0]=0|r[t+s>>0],s=s+1|0}while(32!=(0|s));for(r[e>>0]=-8&r[e>>0],r[e+31>>0]=63&r[e+31>>0]|64,D(i+288|0,n),_n(i+240|0),jn(i+192|0),Je(i+144|0,i+288|0),_n(i+96|0),s=254,t=0;n=t,X(i+240|0,i+144|0,n^=t=(0|a[e+(s>>>3)>>0])>>>(7&s)&1),X(i+192|0,i+96|0,n),Ce(i+48|0,i+144|0,i+96|0),Ce(i,i+240|0,i+192|0),Be(i+240|0,i+240|0,i+192|0),Be(i+192|0,i+144|0,i+96|0),C(i+96|0,i+48|0,i+240|0),C(i+192|0,i+192|0,i),k(i+48|0,i),k(i,i+240|0),Be(i+144|0,i+96|0,i+192|0),Ce(i+192|0,i+96|0,i+192|0),C(i+240|0,i,i+48|0),Ce(i,i,i+48|0),k(i+192|0,i+192|0),P(i+96|0,i),k(i+144|0,i+144|0),Be(i+48|0,i+48|0,i+96|0),C(i+96|0,i+288|0,i+192|0),C(i+192|0,i,i+48|0),s;)s=s+-1|0;X(i+240|0,i+144|0,t),X(i+192|0,i+96|0,t),V(i+192|0,i+192|0),C(i+240|0,i+240|0,i+192|0),ne(e,i+240|0),s=0}return y=o,0|s}(e,t,n))t=-1;else{t=0;do{r[i>>0]=r[i>>0]|r[e+t>>0],t=t+1|0}while(32!=(0|t));t=0-((511+(0|a[i>>0])|0)>>>8&1)|0}return y=o,0|t}function ct(e,t,n,r,i,a,o){e|=0,t|=0,i|=0,a|=0,o|=0;var s,c=0;c=0|Sn(0,1,0|(c=0|An(0|(c=0|Qn(0|(n|=0),0|(r|=0),63,0)),0|u(),6)),0|u()),(s=0|u())>>>0<0|0==(0|s)&c>>>0>>0?_r():Ft(e,t,n,r,i,a,o)}function ut(e,t,n,r,i,a,o){var s,c;e|=0,t|=0,i|=0,o|=0,s=y,c=y=y+63&-64,y=y+80|0,0==(0|(n|=0))&0==(0|(r|=0))||(Pn(c+64|0,a|=0),ze(c,o),_t(c,i,c+64|0),Q(c,t,e,n,r),Et(c,64)),y=s}function lt(e,t,n){var i,a;e|=0,i=y,a=y=y+63&-64,y=y+160|0,Pt(t|=0,n|=0,32,0),r[t>>0]=-8&r[t>>0],r[t+31>>0]=63&r[t+31>>0]|64,ae(a,t),At(e,a),Bt(0|t,0|n,32),Bt(t+32|0,0|e,32),y=i}function ft(e,t,n,r){e|=0,t|=0,n|=0,r|=0;e:do{if(r>>>0>0|0==(0|r)&n>>>0>4294967295)i[8678]=22,n=-1;else{switch(0|ir(e,t,n)){case 0:n=0;break e;case-35:i[8678]=28}n=-1}}while(0);return 0|n}function At(e,t){var n,i;e|=0,n=y,i=y=y+63&-64,y=y+144|0,V(i+96|0,80+(t|=0)|0),C(i+48|0,t,i+96|0),C(i,t+40|0,i+96|0),ne(e,i),t=(0|hn(i+48|0))<<7,r[e+31>>0]=t^(0|a[e+31>>0]),y=n}function ht(e,t,n,r){e|=0,t|=0,n|=0,r|=0;e:do{if(r>>>0>0|0==(0|r)&n>>>0>4294967295)i[8678]=22,n=-1;else{switch(0|ar(e,t,n)){case 0:n=0;break e;case-35:i[8678]=28}n=-1}}while(0);return 0|n}function pt(e,t,n,r,i,a,o,s){var c;return e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,c=y,y=y+32|0,0|Nn(c,o|=0,s|=0)?r=-1:(r=0|sn(e,t,n,r,i,a,c),Et(c,32)),y=c,0|r}function dt(e,t,n,r,i,a,o,s){var c;return e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,c=y,y=y+32|0,0|Nn(c,o|=0,s|=0)?r=-1:(un(e,t,n,r,i,a,c),Et(c,32),r=0),y=c,0|r}function gt(e){e|=0;var t=0,n=0,i=0,a=0,o=0;for(a=0,o=32,t=1;a=(255&(n=0|r[e+(o=o+-1|0)>>0]))-(255&(i=0|r[32320+o>>0]))>>8&(t&=255)|255&a,o;)t&=(65535+(255&(i^n))|0)>>>8;return 0!=(0|a)|0}function yt(e,t,n,r){return r=0|Qn(0|Qn(0|(n|=0),0|(r|=0),0|(e|=0),0|(t|=0)),0|u(),0|(r=0|Zt(-2&(r=0|cn(0|e,0|t,1))|0,1&(0|u())|0,0|n,0)),0|u()),c(0|u()),0|r}function vt(e,t,n,r){e|=0,t|=0,n|=0,r|=0;do{if(!(n>>>0>64|(r+-1|0)>>>0>63)){if(0==(0|t)|0==(0|n)){nt(e,255&r),t=0;break}De(e,255&r,t,255&n),t=0;break}t=-1}while(0);return 0|t}function bt(e){var t,n,r,i=0;return n=0|a[(e|=0)>>0],r=0|cn(0|a[e+1>>0],0,8),i=0|u(),t=0|cn(0|a[e+2>>0],0,16),i=0|i|u(),e=0|cn(0|a[e+3>>0],0,24),c(0|i|u()|0),r|n|t|e|0}function mt(e,t){e|=0,t|=0;var n,i,o=0;n=y,i=y=y+63&-64,y=y+16|0,r[i>>0]=0,o=0;do{r[i>>0]=r[i>>0]|r[e+o>>0],o=o+1|0}while((0|o)!=(0|t));return y=n,(511+(0|a[i>>0])|0)>>>8&1|0}function It(e,t,n){e|=0,t|=0;var r=0;(n|=0)?(r=0|Kn(n),i[e+48>>2]=r,n=0|Kn(n+4|0)):(i[e+48>>2]=0,n=0),i[e+52>>2]=n,r=0|Kn(t),i[e+56>>2]=r,r=0|Kn(t+4|0),i[e+60>>2]=r}function wt(e,t,n){var r,i;e|=0,t|=0,n|=0,r=y,i=y=y+63&-64,y=y+384|0,Rn(i,0,0,24),Mn(i,t,32,0),Mn(i,n,32,0),Gn(i,e,24),y=r}function Ct(e,t,n,r,i,a,o){return t|=0,i|=0,a|=0,o|=0,0|((r|=0)>>>0<0|0==(0|r)&(n|=0)>>>0<16?-1:0|pt(e|=0,t+16|0,t,n=0|Qn(0|n,0|r,-16,-1),0|u(),i,a,o))}function Bt(e,t,n){var i=0;if((0|(t|=0))<(0|(e|=0))&(0|e)<(t+(n|=0)|0)){for(i=e,t=t+n|0,e=e+n|0;(0|n)>0;)t=t-1|0,n=n-1|0,r[(e=e-1|0)>>0]=0|r[t>>0];e=i}else te(e,t,n);return 0|e}function Et(e,t){var n,a;if(e|=0,t|=0,n=y,a=y=y+63&-64,y=y+16|0,i[a>>2]=e,0|t){e=0;do{r[(0|i[a>>2])+e>>0]=0,e=e+1|0}while((0|e)!=(0|t))}y=n}function kt(e,t){e|=0,t|=0;var n=0,r=0,a=0,o=0;n=0;do{o=t+(n<<3)|0,a=i[4+(r=e+(n<<3)|0)>>2]^i[o+4>>2],i[r>>2]=i[r>>2]^i[o>>2],i[r+4>>2]=a,n=n+1|0}while(128!=(0|n))}function _t(e,t,n){e|=0,t|=0,n=(n|=0)?0|Kn(n):0,i[e+48>>2]=n,n=0|Kn(t),i[e+52>>2]=n,n=0|Kn(t+4|0),i[e+56>>2]=n,t=0|Kn(t+8|0),i[e+60>>2]=t}function St(e,t){var n,i;t|=0,i=y,y=y+64|0,function(e,t){var n;t|=0,n=y,y=y+64|0,Lt(e|=0,n),O(e+208|0,n,64,0),Lt(e+208|0,t),Et(n,64),y=n}(e|=0,i),e=i,n=t+32|0;do{r[t>>0]=0|r[e>>0],t=t+1|0,e=e+1|0}while((0|t)<(0|n));y=i}function Qt(e){var t;return e|=0,((t=0|i[8808])+e|0)>>>0>(0|h())>>>0&&0==(0|d(t+e|0))?(i[8678]=48,0|(e=-1)):(i[8808]=t+e,0|(e=t))}function xt(e,t,n,r,i){var a;e|=0,t|=0,n|=0,r|=0,a=y,y=y+416|0,function(e,t){we(e|=0,t|=0)}(a,i|=0),function(e,t,n,r){Tn(e|=0,t|=0,n|=0,r|=0)}(a,t,n,r),St(a,e),y=a}function Dt(e){var t,n=0;i[64+(e|=0)>>2]=0,i[e+64+4>>2]=0,i[e+64+8>>2]=0,i[e+64+12>>2]=0,n=32352,t=e+64|0;do{i[e>>2]=i[n>>2],e=e+4|0,n=n+4|0}while((0|e)<(0|t))}function Pt(e,t,n,r){var i,a;e|=0,t|=0,n|=0,r|=0,i=y,a=y=y+63&-64,y=y+208|0,Dt(a),O(a,t,n,r),Lt(a,e),y=i}function Mt(e,t,n){e|=0,t|=0;var r=0,a=0;if((n|=0)>>>3|0){r=0;do{qe(e+(r<<3)|0,0|i[(a=t+(r<<3)|0)>>2],0|i[a+4>>2]),r=r+1|0}while((0|r)!=(n>>>3|0))}}function Ft(e,t,n,r,i,a,o){e|=0,t|=0,i|=0,a|=0,o|=0,(r|=0)>>>0>0|0==(0|r)&(n|=0)>>>0>4294967295?_r():ut(e,t,n,r,i,a,o)}function Ot(e,t,n){t|=0,n|=0,r[(e|=0)>>0]=t,r[e+1>>0]=t>>8,r[e+2>>0]=t>>16,r[e+3>>0]=t>>24,r[e+4>>0]=n,r[e+4+1>>0]=n>>8,r[e+4+2>>0]=n>>16,r[e+4+3>>0]=n>>24}function Rt(e,t){e|=0,t|=0;var n=0,r=0,a=0,o=0;n=0;do{o=0|Ut(t+(n<<3)|0),a=0|u(),i[(r=e+(n<<3)|0)>>2]=o,i[r+4>>2]=a,n=n+1|0}while(128!=(0|n))}function Tt(e,t,n,r,i,a,o){return e|=0,t|=0,i|=0,a|=0,o|=0,(r|=0)>>>0>0|0==(0|r)&(n|=0)>>>0>4294967279?(_r(),0):0|dt(e+16|0,e,t,n,r,i,a,o)}function jt(e){return(0-(62^(e|=0))|0)>>>8&45^45|(e+65510|0)>>>8&255&e+65|(0-(63^e)|0)>>>8&95^95|(e+65484|0)>>>8&e+71&((e+65510|0)>>>8&255^255)|(e+65474|0)>>>8&e+252&((e+65484|0)>>>8&255^255)|0}function Ht(e){return(0-(62^(e|=0))|0)>>>8&43^43|(e+65510|0)>>>8&255&e+65|(0-(63^e)|0)>>>8&47^47|(e+65484|0)>>>8&e+71&((e+65510|0)>>>8&255^255)|(e+65474|0)>>>8&e+252&((e+65484|0)>>>8&255^255)|0}function Nt(e,t,n,r,i,a,o){return r|=0,((t|=0)-1|0)>>>0>63|(o|=0)>>>0>64?r=-1:(function(e,t,n,r,i,a,o){var s,c;e|=0,n|=0,r|=0,o|=0,s=y,c=y=y+63&-64,y=y+368|0,0==(0|(t|=0))&(0!=(0|(i|=0))|0!=(0|(a|=0)))&&_r(),e||_r(),(r+-1&255)>63&&_r(),0!=(0|n)|o<<24>>24==0||_r(),(255&o)>64&&_r(),o<<24>>24?De(c,r,n,o):nt(c,r),W(c,t,i,a),M(c,e,r),y=s}(e|=0,n|=0,a|=0,255&t,r,i|=0,255&o),r=0),0|r}function Ut(e){var t;return t=a[(e|=0)>>0]|a[e+1>>0]<<8|a[e+2>>0]<<16|a[e+3>>0]<<24,c(a[e+4>>0]|a[e+4+1>>0]<<8|a[e+4+2>>0]<<16|a[e+4+3>>0]<<24|0),0|t}function Lt(e,t){var n,r;t|=0,n=y,r=y=y+63&-64,y=y+704|0,function(e,t){t|=0;var n=0,r=0;if(n=0|An(0|i[72+(e|=0)>>2],0|i[e+72+4>>2],3),u(),(127&n)>>>0<112)112-(127&n)|0&&te(e+80+(127&n)|0,33056,112-(127&n)|0);else{128-(127&n)|0&&te(e+80+(127&n)|0,33056,128-(127&n)|0),m(e,e+80|0,t,t+640|0),r=112+(n=e+80|0)|0;do{i[n>>2]=0,n=n+4|0}while((0|n)<(0|r))}Mt(e+192|0,e+64|0,16),m(e,e+80|0,t,t+640|0)}(e|=0,r),Mt(t,e,64),Et(r,704),Et(e,208),y=n}function Kt(e,t,n,r,i,a){e|=0,t|=0,i|=0,a|=0,(r|=0)>>>0>0|0==(0|r)&(n|=0)>>>0>4294967295?_r():function(e,t,n,r,i,a,o,s){var c,u;e|=0,t|=0,i|=0,s|=0,c=y,u=y=y+63&-64,y=y+80|0,0==(0|(n|=0))&0==(0|(r|=0))||(Pn(u+64|0,1),Pn(u+64+4|0,0),ze(u,s),It(u,i,u+64|0),Q(u,t,e,n,r),Et(u,64)),y=c}(e,t,n,r,i,0,0,a)}function Gt(e){var t=0,n=0;t=127&r[31+(e|=0)>>0]^127,n=30;do{t|=~r[e+n>>0],n=n+-1|0}while(0!=(0|n));return(236-(0|a[e>>0])&511+(255&t))>>>8&1^1|0}function $t(e,t,n,r,i){e|=0,r|=0,i|=0,(n|=0)>>>0>0|0==(0|n)&(t|=0)>>>0>4294967295?_r():qt(e,t,n,r,i)}function Yt(e,t,n){var r,i;return r=0|An(0|(e|=0),0|(t|=0),0|(n|=0)),i=0|u(),n=0|cn(0|e,0|t,64-n|0),c(0|u()|i|0),n|r|0}function Jt(e,t,n){var r,i;return r=0|cn(0|(e|=0),0|(t|=0),0|(n|=0)),i=0|u(),n=0|An(0|e,0|t,64-n|0),c(0|u()|i|0),n|r|0}function Vt(e,t,n,r){var a;return a=y,y=y+16|0,function(e,t,n,r,a){e|=0,n|=0,r|=0,a|=0;var o=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0,v=0;if(!(t|=0))return r?a?(i[a>>2]=0|e,i[a+4>>2]=0&t,a=0,0|(c(0|(r=0)),a)):(a=0,0|(c(0|(r=0)),a)):(0|a&&(i[a>>2]=(e>>>0)%(n>>>0),i[a+4>>2]=0),a=(e>>>0)/(n>>>0)>>>0,0|(c(0|(r=0)),a));do{if(n){if(0|r){if((l=(0|s(0|r))-(0|s(0|t))|0)>>>0<=31){g=l+1|0,f=e>>>((l+1|0)>>>0)&l-31>>31|t<<31-l,d=t>>>((l+1|0)>>>0)&l-31>>31,o=0,l=e<<31-l;break}return a?(i[a>>2]=0|e,i[a+4>>2]=t|0&t,a=0,0|(c(0|(r=0)),a)):(a=0,0|(c(0|(r=0)),a))}if(n-1&n|0){g=l=33+(0|s(0|n))-(0|s(0|t))|0,f=32-l-1>>31&t>>>((l-32|0)>>>0)|(t<<32-l|e>>>(l>>>0))&l-32>>31,d=l-32>>31&t>>>(l>>>0),o=e<<64-l&32-l>>31,l=(t<<64-l|e>>>((l-32|0)>>>0))&32-l>>31|e<<32-l&l-33>>31;break}return 0|a&&(i[a>>2]=n-1&e,i[a+4>>2]=0),1==(0|n)?(a=0|e,0|(c(0|(r=t|0&t)),a)):(r=t>>>((a=0|sr(0|n))>>>0)|0,a=t<<32-a|e>>>(a>>>0)|0,0|(c(0|r),a))}if(!r)return 0|a&&(i[a>>2]=(t>>>0)%(n>>>0),i[a+4>>2]=0),a=(t>>>0)/(n>>>0)>>>0,0|(c(0|(r=0)),a);if(!e)return 0|a&&(i[a>>2]=0,i[a+4>>2]=(t>>>0)%(r>>>0)),a=(t>>>0)/(r>>>0)>>>0,0|(c(0|(n=0)),a);if(!(r-1&r))return 0|a&&(i[a>>2]=0|e,i[a+4>>2]=r-1&t|0&t),n=0,a=t>>>((0|sr(0|r))>>>0),0|(c(0|n),a);if((l=(0|s(0|r))-(0|s(0|t))|0)>>>0<=30){g=l+1|0,f=t<<31-l|e>>>((l+1|0)>>>0),d=t>>>((l+1|0)>>>0),o=0,l=e<<31-l;break}return a?(i[a>>2]=0|e,i[a+4>>2]=t|0&t,a=0,0|(c(0|(r=0)),a)):(a=0,0|(c(0|(r=0)),a))}while(0);if(g){h=0|Qn(0|n,r|0&r|0,-1,-1),p=0|u(),A=l,t=d,e=g,l=0;do{v=A,A=o>>>31|A<<1,o=l|o<<1,Sn(0|h,0|p,0|(v=f<<1|v>>>31|0),0|(y=f>>>31|t<<1|0)),l=1&(d=(g=0|u())>>31|((0|g)<0?-1:0)<<1),f=0|Sn(0|v,0|y,d&(0|n)|0,(((0|g)<0?-1:0)>>31|((0|g)<0?-1:0)<<1)&(r|0&r)|0),t=0|u(),e=e-1|0}while(0!=(0|e));e=0}else A=l,t=d,e=0,l=0;0|a&&(i[a>>2]=f,i[a+4>>2]=t),v=-2&(o<<1|0)|l,c(0|(y=(0|o)>>>31|A<<1|0&(0|o>>>31)|e))}(e|=0,t|=0,n|=0,r|=0,0|a),y=a,0|(c(0|i[a+4>>2]),0|i[a>>2])}function zt(e){e|=0;var t=0,n=0,i=0;for(t=1,n=0;t=t+(0|a[(i=e+n|0)>>0])|0,r[i>>0]=t,4!=(0|(n=n+1|0));)t>>>=8}function qt(e,t,n,r,i){e|=0,r|=0,i|=0,(n|=0)>>>0>0|0==(0|n)&(t|=0)>>>0>4294967295?_r():function(e,t,n,r,i){var a,o;e|=0,r|=0,a=y,o=y=y+63&-64,y=y+64|0,0==(0|(t|=0))&0==(0|(n|=0))||(ze(o,i|=0),_t(o,r,0),_e(0|e,0,0|t),Q(o,e,e,t,n),Et(o,64)),y=a}(e,t,n,r,i)}function Wt(e,t,n){var r;return e|=0,n|=0,t=0|cn(255&(t|=0)|0,0,8),r=0|u(),n=0|cn(255&n|0,0,16),c(0|r|u()|0),t|255&e|n|0}function Xt(e,t){e|=0;var n=0,i=0;if(0|(t|=0)){n=0;do{i=255&(0|dr()),r[e+n>>0]=i,n=n+1|0}while((0|n)!=(0|t))}}function Zt(e,t,n,r){var i,a;return t|=0,r|=0,i=0|function(e,t){var n,r,i;return i=((n=0|o(65535&(t|=0),65535&(e|=0)))>>>16)+(0|o(65535&t,e>>>16))|0,r=0|o(t>>>16,65535&e),0|(c((i>>>16)+(0|o(t>>>16,e>>>16))+(((65535&i)+r|0)>>>16)|0),i+r<<16|65535&n|0)}(e|=0,n|=0),a=0|u(),0|(c((0|o(t,n))+(0|o(r,e))+a|0&a|0),0|i)}function en(e,t){C(e|=0,t|=0,t+120|0),C(e+40|0,t+40|0,t+80|0),C(e+80|0,t+80|0,t+120|0),C(e+120|0,t,t+40|0)}function tn(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(c(t>>n|0),e>>>n|(t&(1<>n-32|0)}function nn(e,t){Be(e|=0,40+(t|=0)|0,t),Ce(e+40|0,t+40|0,t),Je(e+80|0,t+80|0),C(e+120|0,t+120|0,112)}function rn(e,t){var n,r;e|=0,n=y,r=y=y+63&-64,y=y+128|0,function(e,t){Je(e|=0,t|=0),Je(e+40|0,t+40|0),Je(e+80|0,t+80|0)}(r,t|=0),ot(e,r),y=n}function an(e){var t,n;return t=y,n=y=y+63&-64,y=y+32|0,ne(n,e|=0),e=0|mt(n,32),y=t,0|e}function on(e,t){e|=0,t|=0;var n=0,i=0;n=0;do{r[(i=e+n|0)>>0]=r[i>>0]^r[t+n>>0],n=n+1|0}while(8!=(0|n))}function sn(e,t,n,r,i,a,o){return 0|ee(e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,o|=0)}function cn(e,t,n){return e|=0,(0|(n|=0))<32?(c((t|=0)<>>32-n|0),e<>>0<256?0|M(e|=0,t|=0,255&n):(l(33547,33567,107,33620),0)}function fn(e,t){e|=0;var n=0;return(t|=0)>>>0<=4294967168&&0!=(0|(n=0|function(e){var t,n=0,r=0,a=0,o=0;if((e|=0)>>>0>=4294967168)return i[8678]=48,0;if(!(r=0|I(76+(t=e>>>0<11?16:e+11&-8)|0)))return 0;do{if(63&r){if(n=(a=((r+63&-64)-8-(r+-8)|0)>>>0>15?(r+63&-64)-8|0:56+(r+63&-64)|0)-(r+-8)|0,3&(e=0|i[r+-4>>2])){i[a+4>>2]=(-8&e)-n|1&i[a+4>>2]|2,i[a+((-8&e)-n)+4>>2]=1|i[a+((-8&e)-n)+4>>2],i[r+-4>>2]=n|1&i[r+-4>>2]|2,i[a+4>>2]=1|i[a+4>>2],S(r+-8|0,n),o=a,e=a;break}i[a>>2]=(0|i[r+-8>>2])+n,i[a+4>>2]=(-8&e)-n,o=a,e=a;break}o=r+-8|0,e=r+-8|0}while(0);return 3&(e=0|i[(n=e+4|0)>>2])|0&&(-8&e)>>>0>(t+16|0)>>>0&&(a=o+t|0,i[n>>2]=t|1&e|2,i[a+4>>2]=(-8&e)-t|3,i[(r=o+(-8&e)+4|0)>>2]=1|i[r>>2],S(a,(-8&e)-t|0)),0|o+8}(t)))?(i[e>>2]=n,t=0):t=48,0|t}function An(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(c(t>>>n|0),e>>>n|(t&(1<>>n-32|0)}function hn(e){var t,n;return n=y,t=y=y+63&-64,y=y+32|0,ne(t,e|=0),y=n,1&r[t>>0]|0}function pn(e,t,n){Ae(e|=0,t|=0,255&(n|=0)),Ae(e+40|0,t+40|0,255&n),Ae(e+80|0,t+80|0,255&n)}function dn(e,t,n,r,i,a,o){return 0|Nt(e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,o|=0)}function gn(e,t,n,r,i,a,o){return 0|le(e|=0,t|=0,1,n|=0,r|=0,i|=0,16,a|=0,o|=0,0,0,2)}function yn(e,t,n,r,i,a,o){return 0|le(e|=0,t|=0,1,n|=0,r|=0,i|=0,16,a|=0,o|=0,0,0,1)}function vn(e,t){(function(e,t){e|=0,0|(t|=0)&&(0|(t=0|i[e>>2])&&Et(0|i[t+4>>2],i[e+16>>2]<<10),0|(t=0|i[e+4>>2])&&Et(t,i[e+20>>2]<<3))})(e|=0,4&(t|=0)),_(0|i[e+4>>2]),i[e+4>>2]=0,function(e){var t=0;0|(e|=0)&&0|(t=0|i[e>>2])&&_(t),_(e)}(0|i[e>>2]),i[e>>2]=0}function bn(e,t){C(e|=0,t|=0,t+120|0),C(e+40|0,t+40|0,t+80|0),C(e+80|0,t+80|0,t+120|0)}function mn(e,t,n,r,i,a){ye(e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,0)}function In(e,t,n,r,i,a){return 0|le(e|=0,t|=0,1,n|=0,r|=0,i|=0,16,0,32,a|=0,128,2)}function wn(e,t,n,r,i,a){Y(e|=0,t|=0,n|=0,r|=0,i|=0,1,0,a|=0)}function Cn(e,t,n,r,i,a){return 0|le(e|=0,t|=0,1,n|=0,r|=0,i|=0,16,0,32,a|=0,128,1)}function Bn(e,t,n,r,i){return 0|Ie(e|=0,t|=0,n|=0,r|=0,i|=0,0)}function En(e,t,n,r,i,a){Y(e|=0,t|=0,n|=0,r|=0,i|=0,0,0,a|=0)}function kn(e){r[32+(e|=0)>>0]=1,r[e+32+1>>0]=0,r[e+32+2>>0]=0,r[e+32+3>>0]=0}function _n(e){var t;i[(e|=0)>>2]=1,t=36+(e=e+4|0)|0;do{i[e>>2]=0,e=e+4|0}while((0|e)<(0|t))}function Sn(e,t,n,r){return 0|(c(0|(r=(t|=0)-(r|=0)-((n|=0)>>>0>(e|=0)>>>0|0)>>>0)),e-n>>>0|0)}function Qn(e,t,n,r){return 0|(c((t|=0)+(r|=0)+((e|=0)+(n|=0)>>>0>>>0>>0|0)>>>0|0),e+n>>>0|0)}function xn(e,t,n,r){!function(e,t,n,r){U(e|=0,t|=0,n|=0,r|=0)}(e|=0,t|=0,n|=0,r|=0)}function Dn(e,t){t|=0,Dt(e|=0),0|t&&O(e,33408,34,0)}function Pn(e,t){t|=0,r[(e|=0)>>0]=t,r[e+1>>0]=t>>8,r[e+2>>0]=t>>16,r[e+3>>0]=t>>24}function Mn(e,t,n,r){return Hn(e|=0,t|=0,n|=0,r|=0),0}function Fn(e,t,n,r){return 0|be(e|=0,t|=0,n|=0,r|=0,2)}function On(e,t,n,r){return 0|be(e|=0,t|=0,n|=0,r|=0,1)}function Rn(e,t,n,r){return 0|vt(e|=0,t|=0,n|=0,r|=0)}function Tn(e,t,n,r){O(e|=0,t|=0,n|=0,r|=0)}function jn(e){var t;t=40+(e|=0)|0;do{i[e>>2]=0,e=e+4|0}while((0|e)<(0|t))}function Hn(e,t,n,r){W(e|=0,t|=0,n|=0,r|=0)}function Nn(e,t,n){return 0|function(e,t,n){var r,i;return e|=0,i=y,r=y=y+63&-64,y=y+32|0,0|st(r,n|=0,t|=0)?e=-1:(N(e,34656,r),e=0),y=i,0|e}(e|=0,t|=0,n|=0)}function Un(e){r[(e|=0)>>0]=-8&r[e>>0],r[e+31>>0]=63&r[e+31>>0]|64}function Ln(e,t){return e=0|function(e,t){e|=0,t|=0;var n=0,a=0;e:do{if(255&t){if(3&e)do{if((a=0|r[e>>0])<<24>>24==0||a<<24>>24==(255&t)<<24>>24)break e;e=e+1|0}while(0!=(3&e|0));a=0|o(255&t,16843009),n=0|i[e>>2];t:do{if(!((-2139062144&n^-2139062144)&n+-16843009))do{if((-2139062144&(n^=a)^-2139062144)&n+-16843009|0)break t;n=0|i[(e=e+4|0)>>2]}while(!((-2139062144&n^-2139062144)&n+-16843009|0))}while(0);for(;(a=0|r[e>>0])<<24>>24!=0&&a<<24>>24!=(255&t)<<24>>24;)e=e+1|0}else e=e+(0|Ve(e))|0}while(0);return 0|e}(e|=0,t|=0),0|((0|r[e>>0])==(255&t)<<24>>24?e:0)}function Kn(e){return a[(e|=0)>>0]|a[e+1>>0]<<8|a[e+2>>0]<<16|a[e+3>>0]<<24|0}function Gn(e,t,n){return 0|ln(e|=0,t|=0,n|=0)}function $n(e){r[(e|=0)>>0]=0,r[e+1>>0]=0,r[e+2>>0]=0,r[e+3>>0]=0}function Yn(e){jn(e|=0),_n(e+40|0),_n(e+80|0),jn(e+120|0)}function Jn(e){i[(e|=0)>>2]=0,i[e+4>>2]=0,i[e+8>>2]=0,i[e+12>>2]=0}function Vn(e,t,n){!function(e,t,n){var r,i,a;e|=0,t|=0,r=y,a=y=y+63&-64,y=y+128|0,n=((n|=0)<<24>>24)-((0-(255&(i=0|function(e){return(255&(e|=0))>>>7|0}(n)))&n<<24>>24)<<1)&255,function(e){_n(e|=0),_n(e+40|0),jn(e+80|0)}(e),pn(e,t,0|or(n,1)),pn(e,t+120|0,0|or(n,2)),pn(e,t+240|0,0|or(n,3)),pn(e,t+360|0,0|or(n,4)),pn(e,t+480|0,0|or(n,5)),pn(e,t+600|0,0|or(n,6)),pn(e,t+720|0,0|or(n,7)),pn(e,t+840|0,0|or(n,8)),Je(a,e+40|0),Je(a+40|0,e),He(a+80|0,e+80|0),pn(e,a,i),y=r}(e|=0,1120+(960*(t|=0)|0)|0,n|=0)}function zn(e,t){return 0|function(e,t){e|=0,t|=0;var n,i,a=0;n=y,i=y=y+63&-64,y=y+208|0,a=0;do{r[e+a>>0]=0|r[t+a>>0],a=a+1|0}while(32!=(0|a));return r[e>>0]=-8&r[e>>0],r[e+31>>0]=63&r[e+31>>0]|64,ae(i+40|0,e),function(e,t,n){var r,i;e|=0,r=y,i=y=y+63&-64,y=y+96|0,Be(i+48|0,n|=0,t|=0),Ce(i,n,t),V(i,i),C(e,i+48|0,i),y=r}(i,i+40+40|0,i+40+80|0),ne(e,i),y=n,0}(e|=0,t|=0)}function qn(e,t){!function(e,t){J(e|=0,t|=0)}(e|=0,t|=0)}function Wn(e,t){!function(e,t){Se(e|=0,t|=0)}(e|=0,t|=0)}function Xn(e,t,n){return 0|st(e|=0,t|=0,n|=0)}function Zn(e,t){return 0|function(e,t){return e|=0,Xt(t|=0,32),0|zn(e,t)}(e|=0,t|=0)}function er(e,t,n){!function(e,t,n,r,i){var a,o;e|=0,r|=0,a=y,o=y=y+63&-64,y=y+64|0,0==(0|(t|=0))&0==(0|(n|=0))||(ze(o,i|=0),It(o,r,0),_e(0|e,0,64),Q(o,e,e,64,0),Et(o,64)),y=a}(e|=0,64,0,t|=0,n|=0)}function tr(e){1!=(-7&(e|=0)|0)&&_r()}function nr(e,t,n){!function(e,t,n){e|=0,t|=0;var r,i,a,o,s,c,u,l,f,A,h,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0,B=0,E=0,k=0,_=0,S=0,Q=0,x=0,D=0,P=0,M=0,F=0,O=0,R=0,T=0,j=0,H=0,N=0,U=0,L=0,K=0,G=0,$=0;h=0|Kn(n|=0),s=0|Kn(n+4|0),c=0|Kn(n+8|0),u=0|Kn(n+12|0),l=0|Kn(n+16|0),f=0|Kn(n+20|0),A=0|Kn(n+24|0),r=0|Kn(n+28|0),i=0|Kn(t),a=0|Kn(t+4|0),o=0|Kn(t+8|0),n=0|Kn(t+12|0),t=0,p=1634760805,d=h,g=2036477234,y=l,v=f,b=A,m=r,I=1797285236,w=s,C=c,B=u,E=857760878,k=i,_=a,S=o,Q=n;do{L=(0|fr((M=(0|fr((R=(0|fr((H=(0|fr(p+v|0,7))^B)+p|0,9))^S)+H|0,13))^v)+R|0,18))^p,j=(0|fr(($=(0|fr((P=(0|fr((O=(0|fr(d+E|0,7))^Q)+E|0,9))^b)+O|0,13))^d)+P|0,18))^E,F=(0|fr((U=(0|fr((G=(0|fr((D=(0|fr(k+g|0,7))^m)+g|0,9))^w)+D|0,13))^k)+G|0,18))^g,x=(0|fr((T=(0|fr((N=(0|fr((K=(0|fr(y+I|0,7))^C)+I|0,9))^_)+K|0,13))^y)+N|0,18))^I,p=(0|fr((C=(0|fr((w=(0|fr((d=(0|fr(K+L|0,7))^$)+L|0,9))^G)+d|0,13))^K)+w|0,18))^L,E=(0|fr((B=(0|fr((_=(0|fr((k=(0|fr(j+H|0,7))^U)+j|0,9))^N)+k|0,13))^H)+_|0,18))^j,g=(0|fr((Q=(0|fr((S=(0|fr((y=(0|fr(F+O|0,7))^T)+F|0,9))^R)+y|0,13))^O)+S|0,18))^F,I=(0|fr((m=(0|fr((b=(0|fr((v=(0|fr(x+D|0,7))^M)+x|0,9))^P)+v|0,13))^D)+b|0,18))^x,t=t+2|0}while(t>>>0<20);Pn(e,p+1634760805|0),Pn(e+4|0,d+h|0),Pn(e+8|0,w+s|0),Pn(e+12|0,C+c|0),Pn(e+16|0,B+u|0),Pn(e+20|0,E+857760878|0),Pn(e+24|0,k+i|0),Pn(e+28|0,_+a|0),Pn(e+32|0,S+o|0),Pn(e+36|0,Q+n|0),Pn(e+40|0,g+2036477234|0),Pn(e+44|0,y+l|0),Pn(e+48|0,v+f|0),Pn(e+52|0,b+A|0),Pn(e+56|0,m+r|0),Pn(e+60|0,I+1797285236|0)}(e|=0,t|=0,n|=0)}function rr(e,t){return 0|zn(e|=0,t|=0)}function ir(e,t,n){return 0|ie(e|=0,t|=0,n|=0,2)}function ar(e,t,n){return 0|ie(e|=0,t|=0,n|=0,1)}function or(e,t){return((255&((t|=0)^(e|=0)))-1|0)>>>31&255|0}function sr(e){return 0|((e|=0)?31-(0|s(e^e-1))|0:32)}function cr(e,t){return 0|rt(e|=0,t|=0,32)}function ur(e,t){return 0|rt(e|=0,t|=0,16)}function lr(e,t){te(0|(e|=0),0|(t|=0),1024)}function fr(e,t){return(e|=0)>>>(32-(t|=0)|0)|e<>>0>0|0==(0|o)&(a|=0)>>>0>15?(o=0|ge(e|=0,0,r,n=0|Qn(0|a,0|o,-16,-1),h=0|u(),r+a+-16|0,s,c,l,f,A),t&&(a=0==(0|o)?n:0,n=0==(0|o)?h:0,p=4)):t?(a=0,n=0,o=-1,p=4):o=-1,4==(0|p)&&(i[t>>2]=a,i[t+4>>2]=n),0|o},_crypto_aead_chacha20poly1305_decrypt_detached:ge,_crypto_aead_chacha20poly1305_encrypt:function(e,t,n,r,a,o,s,c,l,f,A){return e|=0,t|=0,n|=0,o|=0,s|=0,c|=0,l|=0,f|=0,A|=0,(a|=0)>>>0>0|0==(0|a)&(r|=0)>>>0>4294967279&&_r(),ke(e,e+r|0,0,n,r,a,o,s,c,0,f,A),0|t&&(f=0|Qn(0|r,0|a,16,0),l=0|u(),i[t>>2]=f,i[t+4>>2]=l),0},_crypto_aead_chacha20poly1305_encrypt_detached:ke,_crypto_aead_chacha20poly1305_ietf_abytes:Cr,_crypto_aead_chacha20poly1305_ietf_decrypt:function(e,t,n,r,a,o,s,c,l,f,A){t|=0,n|=0,r|=0,s|=0,c|=0,l|=0,f|=0,A|=0;var h=0,p=0;return(o|=0)>>>0>0|0==(0|o)&(a|=0)>>>0>15?(o=0|oe(e|=0,0,r,n=0|Qn(0|a,0|o,-16,-1),h=0|u(),r+a+-16|0,s,c,l,f,A),t&&(a=0==(0|o)?n:0,n=0==(0|o)?h:0,p=4)):t?(a=0,n=0,o=-1,p=4):o=-1,4==(0|p)&&(i[t>>2]=a,i[t+4>>2]=n),0|o},_crypto_aead_chacha20poly1305_ietf_decrypt_detached:oe,_crypto_aead_chacha20poly1305_ietf_encrypt:function(e,t,n,r,a,o,s,c,l,f,A){return e|=0,t|=0,n|=0,o|=0,s|=0,c|=0,l|=0,f|=0,A|=0,(a|=0)>>>0>0|0==(0|a)&(r|=0)>>>0>4294967279&&_r(),he(e,e+r|0,0,n,r,a,o,s,c,0,f,A),0|t&&(f=0|Qn(0|r,0|a,16,0),l=0|u(),i[t>>2]=f,i[t+4>>2]=l),0},_crypto_aead_chacha20poly1305_ietf_encrypt_detached:he,_crypto_aead_chacha20poly1305_ietf_keybytes:Er,_crypto_aead_chacha20poly1305_ietf_keygen:hr,_crypto_aead_chacha20poly1305_ietf_messagebytes_max:gr,_crypto_aead_chacha20poly1305_ietf_npubbytes:function(){return 12},_crypto_aead_chacha20poly1305_ietf_nsecbytes:kr,_crypto_aead_chacha20poly1305_keybytes:Er,_crypto_aead_chacha20poly1305_keygen:hr,_crypto_aead_chacha20poly1305_messagebytes_max:gr,_crypto_aead_chacha20poly1305_npubbytes:Ir,_crypto_aead_chacha20poly1305_nsecbytes:kr,_crypto_aead_xchacha20poly1305_ietf_abytes:Cr,_crypto_aead_xchacha20poly1305_ietf_decrypt:function(e,t,n,r,a,o,s,c,l,f,A){t|=0,n|=0,r|=0,s|=0,c|=0,l|=0,f|=0,A|=0;var h=0,p=0;return(o|=0)>>>0>0|0==(0|o)&(a|=0)>>>0>15?(o=0|Fe(e|=0,0,r,n=0|Qn(0|a,0|o,-16,-1),h=0|u(),r+a+-16|0,s,c,l,f,A),t&&(a=0==(0|o)?n:0,n=0==(0|o)?h:0,p=4)):t?(a=0,n=0,o=-1,p=4):o=-1,4==(0|p)&&(i[t>>2]=a,i[t+4>>2]=n),0|o},_crypto_aead_xchacha20poly1305_ietf_decrypt_detached:Fe,_crypto_aead_xchacha20poly1305_ietf_encrypt:function(e,t,n,r,a,o,s,c,l,f,A){return e|=0,t|=0,n|=0,o|=0,s|=0,c|=0,l|=0,f|=0,A|=0,(a|=0)>>>0>0|0==(0|a)&(r|=0)>>>0>4294967279&&_r(),Re(e,e+r|0,0,n,r,a,o,s,c,0,f,A),0|t&&(f=0|Qn(0|r,0|a,16,0),l=0|u(),i[t>>2]=f,i[t+4>>2]=l),0},_crypto_aead_xchacha20poly1305_ietf_encrypt_detached:Re,_crypto_aead_xchacha20poly1305_ietf_keybytes:Er,_crypto_aead_xchacha20poly1305_ietf_keygen:hr,_crypto_aead_xchacha20poly1305_ietf_messagebytes_max:gr,_crypto_aead_xchacha20poly1305_ietf_npubbytes:wr,_crypto_aead_xchacha20poly1305_ietf_nsecbytes:kr,_crypto_auth:function(e,t,n,r,i){return xt(e|=0,t|=0,n|=0,r|=0,i|=0),0},_crypto_auth_bytes:Er,_crypto_auth_keybytes:Er,_crypto_auth_keygen:hr,_crypto_auth_verify:function(e,t,n,r,i){return 0|function(e,t,n,r,i){var a;return e|=0,a=y,y=y+32|0,xt(a,t|=0,n|=0,r|=0,i|=0),i=0|cr(e,a),i=0|((0|a)==(0|e)?-1:i)|tt(a,e,32),y=a,0|i}(e|=0,t|=0,n|=0,r|=0,i|=0)},_crypto_box_beforenm:Nn,_crypto_box_beforenmbytes:Er,_crypto_box_detached:dt,_crypto_box_detached_afternm:un,_crypto_box_easy:Tt,_crypto_box_easy_afternm:function(e,t,n,r,i,a){return e|=0,t|=0,i|=0,a|=0,(r|=0)>>>0>0|0==(0|r)&(n|=0)>>>0>4294967279?(_r(),0):(un(e+16|0,e,t,n,r,i,a),0)},_crypto_box_keypair:Zn,_crypto_box_macbytes:Cr,_crypto_box_messagebytes_max:gr,_crypto_box_noncebytes:wr,_crypto_box_open_detached:pt,_crypto_box_open_detached_afternm:sn,_crypto_box_open_easy:Ct,_crypto_box_open_easy_afternm:function(e,t,n,r,i,a){return t|=0,i|=0,a|=0,0|((r|=0)>>>0<0|0==(0|r)&(n|=0)>>>0<16?-1:0|sn(e|=0,t+16|0,t,n=0|Qn(0|n,0|r,-16,-1),0|u(),i,a))},_crypto_box_publickeybytes:Er,_crypto_box_seal:function(e,t,n,i,a){e|=0,t|=0,n|=0,i|=0,a|=0;var o,s=0,c=0,u=0;if(o=y,y=y+96|0,0|Zn(o+32|0,o))n=-1;else{c=o+32|0,u=(s=e)+32|0;do{r[s>>0]=0|r[c>>0],s=s+1|0,c=c+1|0}while((0|s)<(0|u));wt(o+64|0,o+32|0,a),n=0|Tt(e+32|0,t,n,i,o+64|0,a,o),Et(o,32),Et(o+32|0,32),Et(o+64|0,24)}return y=o,0|n},_crypto_box_seal_open:function(e,t,n,r,i,a){var o,s;return e|=0,t|=0,i|=0,a|=0,s=y,o=y=y+63&-64,y=y+32|0,(r|=0)>>>0<0|0==(0|r)&(n|=0)>>>0<48?n=-1:(r=0|Qn(0|n,0|r,-32,-1),n=0|u(),wt(o,t,i),n=0|Ct(e,t+32|0,r,n,o,t,a)),y=s,0|n},_crypto_box_sealbytes:function(){return 48},_crypto_box_secretkeybytes:Er,_crypto_box_seed_keypair:function(e,t,n){return 0|function(e,t,n){e|=0,t|=0;var i,a,o=0,s=0;a=y,s=y=y+63&-64,y=y+64|0,Pt(s,n|=0,32,0),o=s,i=(n=t)+32|0;do{r[n>>0]=0|r[o>>0],n=n+1|0,o=o+1|0}while((0|n)<(0|i));return Et(s,64),s=0|zn(e,t),y=a,0|s}(e|=0,t|=0,n|=0)},_crypto_box_seedbytes:Er,_crypto_generichash:dn,_crypto_generichash_bytes:Er,_crypto_generichash_bytes_max:Br,_crypto_generichash_bytes_min:Cr,_crypto_generichash_final:Gn,_crypto_generichash_init:Rn,_crypto_generichash_keybytes:Er,_crypto_generichash_keybytes_max:Br,_crypto_generichash_keybytes_min:Cr,_crypto_generichash_keygen:hr,_crypto_generichash_statebytes:function(){return 384},_crypto_generichash_update:Mn,_crypto_hash:function(e,t,n,r){return Pt(e|=0,t|=0,n|=0,r|=0),0},_crypto_hash_bytes:Br,_crypto_kdf_bytes_max:Br,_crypto_kdf_bytes_min:Cr,_crypto_kdf_contextbytes:Ir,_crypto_kdf_derive_from_key:function(e,t,n,r,i,a){return 0|Me(e|=0,t|=0,n|=0,r|=0,i|=0,a|=0)},_crypto_kdf_keybytes:Er,_crypto_kdf_keygen:hr,_crypto_kx_client_session_keys:function(e,t,n,i,a){var o,s,c;if(t|=0,n|=0,i|=0,a|=0,c=y,s=y=y+63&-64,y=y+480|0,o=0==(0|(e|=0))?t:e,t=0==(0|t)?o:t,o||_r(),0|Xn(s+448|0,i,a))e=-1;else{Rn(s,0,0,64),Mn(s,s+448|0,32,0),Et(s+448|0,32),Mn(s,n,32,0),Mn(s,a,32,0),Gn(s,s+384|0,64),Et(s,384),e=0;do{r[o+e>>0]=0|r[s+384+e>>0],r[t+e>>0]=0|r[s+384+(e+32)>>0],e=e+1|0}while(32!=(0|e));Et(s+384|0,64),e=0}return y=c,0|e},_crypto_kx_keypair:function(e,t){return e|=0,Xt(t|=0,32),0|rr(e,t)},_crypto_kx_publickeybytes:Er,_crypto_kx_secretkeybytes:Er,_crypto_kx_seed_keypair:function(e,t,n){return e|=0,dn(t|=0,32,n|=0,32,0,0,0),0|rr(e,t)},_crypto_kx_seedbytes:Er,_crypto_kx_server_session_keys:function(e,t,n,i,a){var o,s,c;if(t|=0,n|=0,i|=0,a|=0,c=y,s=y=y+63&-64,y=y+480|0,o=0==(0|(e|=0))?t:e,t=0==(0|t)?o:t,o||_r(),0|Xn(s+448|0,i,a))e=-1;else{Rn(s,0,0,64),Mn(s,s+448|0,32,0),Et(s+448|0,32),Mn(s,a,32,0),Mn(s,n,32,0),Gn(s,s+384|0,64),Et(s,384),e=0;do{r[t+e>>0]=0|r[s+384+e>>0],r[o+e>>0]=0|r[s+384+(e+32)>>0],e=e+1|0}while(32!=(0|e));Et(s+384|0,64),e=0}return y=c,0|e},_crypto_kx_sessionkeybytes:Er,_crypto_pwhash:function(e,t,n,r,a,o,s,c,u,l,f){switch(e|=0,t|=0,n|=0,r|=0,a|=0,o|=0,s|=0,c|=0,u|=0,l|=0,0|(f|=0)){case 1:t=0|function(e,t,n,r,a,o,s,c,u,l){n|=0,r|=0,a|=0,o|=0,s|=0,c|=0,u|=0,l|=0,_e(0|(e|=0),0,0|(t|=0));do{if(!(n>>>0>0|0==(0|n)&t>>>0>4294967295)){if(n>>>0<0|0==(0|n)&t>>>0<16){i[8678]=28,t=-1;break}if((u|o)>>>0>0|0==(u|o|0)&(c|a)>>>0>4294967295|l>>>0>2147483648){i[8678]=22,t=-1;break}if(u>>>0<0|0==(0|u)&c>>>0<3|l>>>0<8192){i[8678]=28,t=-1;break}t=(0!=(0|yn(c,l>>>10,r,a,s,e,t)))<<31>>31;break}i[8678]=22,t=-1}while(0);return 0|t}(e,t,n,r,a,o,s,c,u,l);break;case 2:t=0|function(e,t,n,r,a,o,s,c,u,l){n|=0,r|=0,a|=0,o|=0,s|=0,c|=0,u|=0,l|=0,_e(0|(e|=0),0,0|(t|=0));do{if(!(n>>>0>0|0==(0|n)&t>>>0>4294967295)){if(n>>>0<0|0==(0|n)&t>>>0<16){i[8678]=28,t=-1;break}if((u|o)>>>0>0|0==(u|o|0)&(c|a)>>>0>4294967295|l>>>0>2147483648){i[8678]=22,t=-1;break}if(0==(0|c)&0==(0|u)|l>>>0<8192){i[8678]=28,t=-1;break}t=(0!=(0|gn(c,l>>>10,r,a,s,e,t)))<<31>>31;break}i[8678]=22,t=-1}while(0);return 0|t}(e,t,n,r,a,o,s,c,u,l);break;default:i[8678]=28,t=-1}return 0|t},_crypto_pwhash_alg_argon2i13:mr,_crypto_pwhash_alg_argon2id13:vr,_crypto_pwhash_alg_default:vr,_crypto_pwhash_bytes_max:br,_crypto_pwhash_bytes_min:Cr,_crypto_pwhash_memlimit_interactive:function(){return 67108864},_crypto_pwhash_memlimit_max:function(){return-2147483648},_crypto_pwhash_memlimit_min:function(){return 8192},_crypto_pwhash_memlimit_moderate:function(){return 268435456},_crypto_pwhash_memlimit_sensitive:function(){return 1073741824},_crypto_pwhash_opslimit_interactive:vr,_crypto_pwhash_opslimit_max:br,_crypto_pwhash_opslimit_min:mr,_crypto_pwhash_opslimit_moderate:yr,_crypto_pwhash_opslimit_sensitive:function(){return 4},_crypto_pwhash_passwd_max:br,_crypto_pwhash_passwd_min:kr,_crypto_pwhash_saltbytes:Cr,_crypto_pwhash_str:function(e,t,n,r,i,a,o){return 0|je(e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,o|=0)},_crypto_pwhash_str_alg:function(e,t,n,r,i,a,o,s){e|=0,t|=0,n|=0,r|=0,i|=0,a|=0,o|=0;var c=0;switch(0|(s|=0)){case 1:c=0|Oe(e,t,n,r,i,a,o);break;case 2:c=0|je(e,t,n,r,i,a,o);break;default:_r()}return 0|c},_crypto_pwhash_str_needs_rehash:function(e,t,n,r){e|=0,t|=0,n|=0,r|=0;do{if(0|it(e,33713,10)){if(0|it(e,33724,9)){i[8678]=28,t=-1;break}t=0|On(e,t,n,r);break}t=0|Fn(e,t,n,r)}while(0);return 0|t},_crypto_pwhash_str_verify:function(e,t,n,r){e|=0,t|=0,n|=0,r|=0;do{if(0|it(e,33713,10)){if(0|it(e,33724,9)){i[8678]=28,n=-1;break}n=0|ht(e,t,n,r);break}n=0|ft(e,t,n,r)}while(0);return 0|n},_crypto_pwhash_strbytes:function(){return 128},_crypto_pwhash_strprefix:function(){return 33713},_crypto_scalarmult:Xn,_crypto_scalarmult_base:rr,_crypto_scalarmult_bytes:Er,_crypto_scalarmult_scalarbytes:Er,_crypto_secretbox_detached:q,_crypto_secretbox_easy:function(e,t,n,r,i,a){return e|=0,t|=0,i|=0,a|=0,(r|=0)>>>0>0|0==(0|r)&(n|=0)>>>0>4294967279?(_r(),0):(q(e+16|0,e,t,n,r,i,a),0)},_crypto_secretbox_keybytes:Er,_crypto_secretbox_keygen:hr,_crypto_secretbox_macbytes:Cr,_crypto_secretbox_messagebytes_max:gr,_crypto_secretbox_noncebytes:wr,_crypto_secretbox_open_detached:ee,_crypto_secretbox_open_easy:function(e,t,n,r,i,a){return t|=0,i|=0,a|=0,0|((r|=0)>>>0<0|0==(0|r)&(n|=0)>>>0<16?-1:0|ee(e|=0,t+16|0,t,n=0|Qn(0|n,0|r,-16,-1),0|u(),i,a))},_crypto_secretstream_xchacha20poly1305_abytes:function(){return 17},_crypto_secretstream_xchacha20poly1305_headerbytes:wr,_crypto_secretstream_xchacha20poly1305_init_pull:function(e,t,n){var i;return R(e|=0,t|=0,n|=0),kn(e),i=a[t+16>>0]|a[t+16+1>>0]<<8|a[t+16+2>>0]<<16|a[t+16+3>>0]<<24,n=a[t+16+4>>0]|a[t+16+4+1>>0]<<8|a[t+16+4+2>>0]<<16|a[t+16+4+3>>0]<<24,r[e+36>>0]=i,r[e+36+1>>0]=i>>8,r[e+36+2>>0]=i>>16,r[e+36+3>>0]=i>>24,r[e+36+4>>0]=n,r[e+36+4+1>>0]=n>>8,r[e+36+4+2>>0]=n>>16,r[e+36+4+3>>0]=n>>24,r[e+44>>0]=0,r[e+44+1>>0]=0,r[e+44+2>>0]=0,r[e+44+3>>0]=0,r[e+44+4>>0]=0,r[e+44+4+1>>0]=0,r[e+44+4+2>>0]=0,r[e+44+4+3>>0]=0,0},_crypto_secretstream_xchacha20poly1305_init_push:function(e,t,n){return e|=0,n|=0,Xt(t|=0,24),R(e,t,n),kn(e),n=a[t+16>>0]|a[t+16+1>>0]<<8|a[t+16+2>>0]<<16|a[t+16+3>>0]<<24,t=a[t+16+4>>0]|a[t+16+4+1>>0]<<8|a[t+16+4+2>>0]<<16|a[t+16+4+3>>0]<<24,r[e+36>>0]=n,r[e+36+1>>0]=n>>8,r[e+36+2>>0]=n>>16,r[e+36+3>>0]=n>>24,r[e+36+4>>0]=t,r[e+36+4+1>>0]=t>>8,r[e+36+4+2>>0]=t>>16,r[e+36+4+3>>0]=t>>24,r[e+44>>0]=0,r[e+44+1>>0]=0,r[e+44+2>>0]=0,r[e+44+3>>0]=0,r[e+44+4>>0]=0,r[e+44+4+1>>0]=0,r[e+44+4+2>>0]=0,r[e+44+4+3>>0]=0,0},_crypto_secretstream_xchacha20poly1305_keybytes:Er,_crypto_secretstream_xchacha20poly1305_keygen:hr,_crypto_secretstream_xchacha20poly1305_messagebytes_max:function(){return-18},_crypto_secretstream_xchacha20poly1305_pull:function(e,t,n,a,o,s,c,l,f,A){e|=0,t|=0,a|=0,o|=0,s|=0,c|=0,l|=0,f|=0,A|=0;var h,p,d=0,g=0,v=0;p=y,h=y=y+63&-64,y=y+352|0,0|(n|=0)&&(i[n>>2]=0,i[n+4>>2]=0),0|a&&(r[a>>0]=-1);do{if(c>>>0<0|0==(0|c)&s>>>0<17)l=-1;else{g=0|Qn(0|s,0|c,-17,-1),(v=0|u())>>>0>0|0==(0|v)&g>>>0>4294967278&&_r(),$t(h+16|0,64,0,e+32|0,e),Wn(h+80|0,h+16|0),Et(h+16|0,64),xn(h+80|0,l,f,A),l=0|Sn(0,0,0|f,0|A),u(),xn(h+80|0,34672,15&l,0),d=64+(l=h+16|0)|0;do{i[l>>2]=0,l=l+4|0}while((0|l)<(0|d));if(r[h+16>>0]=0|r[o>>0],ct(h+16|0,h+16|0,64,0,e+32|0,1,e),l=0|r[h+16>>0],r[h+16>>0]=0|r[o>>0],xn(h+80|0,h+16|0,64,0),xn(h+80|0,o+1|0,g,v),d=0|Qn(0|s,0|c,15,0),u(),xn(h+80|0,34672,15&d,0),Ot(h+336|0,f,A),xn(h+80|0,h+336|0,8,0),Ot(h+336|0,A=0|Qn(0|s,0|c,47,0),0|u()),xn(h+80|0,h+336|0,8,0),qn(h+80|0,h),Et(h+80|0,256),0|tt(h,o+1+g|0,16)){Et(h,16),l=-1;break}ct(t,o+1|0,g,v,e+32|0,2,e),on(e+36|0,h),zt(e+32|0),(0!=(2&l)||0|mt(e+32|0,4))&&pe(e),0|n&&(i[n>>2]=g,i[n+4>>2]=v),0|a?(r[a>>0]=l,l=0):l=0}}while(0);return y=p,0|l},_crypto_secretstream_xchacha20poly1305_push:function(e,t,n,a,o,s,c,l,f,A){e|=0,t|=0,a|=0,o|=0,s|=0,c|=0,l|=0,f|=0,A|=0;var h,p,d=0;p=y,d=y=y+63&-64,y=y+336|0,0|(n|=0)&&(i[n>>2]=0,i[n+4>>2]=0),s>>>0>0|0==(0|s)&o>>>0>4294967278&&_r(),$t(d,64,0,e+32|0,e),Wn(d+64|0,d),Et(d,64),xn(d+64|0,c,l,f),c=0|Sn(0,0,0|l,0|f),u(),xn(d+64|0,34672,15&c,0),h=(c=d)+64|0;do{i[c>>2]=0,c=c+4|0}while((0|c)<(0|h));return r[d>>0]=A,ct(d,d,64,0,e+32|0,1,e),xn(d+64|0,d,64,0),r[t>>0]=0|r[d>>0],ct(t+1|0,a,o,s,e+32|0,2,e),xn(d+64|0,t+1|0,o,s),xn(d+64|0,34672,15&o,0),Ot(d+320|0,l,f),xn(d+64|0,d+320|0,8,0),Ot(d+320|0,a=0|Qn(0|o,0|s,64,0),0|u()),xn(d+64|0,d+320|0,8,0),qn(d+64|0,t+1+o|0),Et(d+64|0,256),on(e+36|0,t+1+o|0),zt(e+32|0),(0!=(2&A)||0|mt(e+32|0,4))&&pe(e),0|n&&(A=0|Qn(0|o,0|s,17,0),d=0|u(),i[n>>2]=A,i[n+4>>2]=d),y=p,0},_crypto_secretstream_xchacha20poly1305_rekey:pe,_crypto_secretstream_xchacha20poly1305_statebytes:function(){return 52},_crypto_secretstream_xchacha20poly1305_tag_final:yr,_crypto_secretstream_xchacha20poly1305_tag_message:kr,_crypto_secretstream_xchacha20poly1305_tag_push:mr,_crypto_secretstream_xchacha20poly1305_tag_rekey:vr,_crypto_shorthash:function(e,t,n,r,i){return function(e,t,n,r,i){e|=0,t|=0,n|=0,r|=0;var o=0,s=0,c=0,l=0,f=0,A=0,h=0,p=0,d=0,g=0,y=0,v=0,b=0,m=0,I=0,w=0,C=0;if(A=0|Ut(i|=0),p=0|u(),o=0|Ut(i+8|0),s=0|u(),r=0|cn(0|n,0|r,56),i=0|u(),(t+n+(0-(7&n))|0)==(0|t))y=2037671283^o,c=1952801890^s,g=1886610805^A,h=1936682341^p,f=1852075885^o,l=1685025377^s,I=1852142177^A,o=1819895653^p,s=t;else for(m=2037671283^o,c=1952801890^s,y=1886610805^A,h=1936682341^p,f=1852075885^o,l=1685025377^s,s=1852142177^A,o=1819895653^p,g=t;;){if(C=(v=0|Ut(g))^m,c^=b=0|u(),I=0|Qn(0|y,0|h,0|f,0|l),m=0|u(),A=0|Jt(f,l,13),f=(0|u())^m,l=0|Jt(I,m,32),m=0|u(),p=0|Qn(0|C,0|c,0|s,0|o),d=0|u(),m=0|Qn((c=0|Jt(C,c,16))^p|0,0|(s=(0|u())^d),0|l,0|m),l=0|u(),s=0|Jt(c^p,s,21),c=l^(0|u()),d=0|Qn(0|p,0|d,A^I|0,0|f),p=0|u(),f=0|Jt(A^I,f,17),o=(0|u())^p,p=0|Jt(d,p,32),I=0|u(),l=0|Qn(f^d|0,0|o,0|m,0|l),A=0|u(),o=0|Jt(f^d,o,13),d=(0|u())^A,A=0|Jt(l,A,32),f=0|u(),I=0|Qn(0|p,0|I,m^s|0,0|c),p=0|u(),f=0|Qn((c=0|Jt(m^s,c,16))^I|0,0|(s=(0|u())^p),0|A,0|f),A=0|u(),s=0|Jt(c^I,s,21),c=A^(0|u()),p=0|Qn(o^l|0,0|d,0|I,0|p),I=0|u(),d=0|Jt(o^l,d,17),l=(0|u())^I,I=0|Jt(p,I,32),o=0|u(),(0|(g=g+8|0))==(t+n+(0-(7&n))|0)){y=f^s,g=f^v,h=A^b,f=d^p,s=t+n+(0-(7&n))|0;break}m=f^s,y=f^v,h=A^b,f=d^p,s=I}switch(7&n){case 7:w=0|cn(0|a[s+6>>0],0,48),i=0|u()|i,r|=w,w=6;break;case 6:w=6;break;case 5:w=7;break;case 4:w=8;break;case 3:w=9;break;case 2:w=10;break;case 1:w=11}6==(0|w)&&(C=0|cn(0|a[s+5>>0],0,40),i=0|u()|i,r|=C,w=7),7==(0|w)&&(i=0|a[s+4>>0]|i,w=8),8==(0|w)&&(r|=C=0|cn(0|a[s+3>>0],0,24),i=0|u()|i,w=9),9==(0|w)&&(r|=C=0|cn(0|a[s+2>>0],0,16),i=0|u()|i,w=10),10==(0|w)&&(r|=C=0|cn(0|a[s+1>>0],0,8),i=0|u()|i,w=11),11==(0|w)&&(r=0|r|a[s>>0]),n=r^y,b=i^c,g=0|Qn(0|g,0|h,0|f,0|l),y=0|u(),v=0|Jt(f,l,13),t=(0|u())^y,y=0|Jt(g,y,32),w=0|u(),I=0|Qn(0|n,0|b,0|I,0|o),C=0|u(),w=0|Qn((b=0|Jt(n,b,16))^I|0,0|(n=(0|u())^C),0|y,0|w),y=0|u(),n=0|Jt(b^I,n,21),b=y^(0|u()),C=0|Qn(0|I,0|C,v^g|0,0|t),I=0|u(),t=0|Jt(v^g,t,17),g=(0|u())^I,I=0|Jt(C,I,32),v=0|u(),y=0|Qn(t^C|0,0|g,0|w,0|y),m=0|u(),g=0|Jt(t^C,g,13),C=(0|u())^m,m=0|Jt(y,m,32),t=0|u(),v=0|Qn(0|I,0|v,w^n|0,0|b),I=0|u(),t=0|Qn((b=0|Jt(w^n,b,16))^v|0,0|(n=(0|u())^I),0|m,0|t),m=0|u(),n=0|Jt(b^v,n,21),b=m^(0|u()),I=0|Qn(g^y|0,0|C,0|v,0|I),v=0|u(),C=0|Jt(g^y,C,17),y=(0|u())^v,v=0|Jt(I,v,32),g=0|u(),m=0|Qn(t^r|0,m^i|0,C^I|0,0|y),w=0|u(),y=0|Jt(C^I,y,13),I=(0|u())^w,w=0|Jt(m,w,32),C=0|u(),g=0|Qn(255^v|0,0|g,t^n|0,0|b),v=0|u(),C=0|Qn((b=0|Jt(t^n,b,16))^g|0,0|(n=(0|u())^v),0|w,0|C),w=0|u(),n=0|Jt(b^g,n,21),b=w^(0|u()),v=0|Qn(0|g,0|v,y^m|0,0|I),g=0|u(),I=0|Jt(y^m,I,17),m=(0|u())^g,g=0|Jt(v,g,32),y=0|u(),w=0|Qn(I^v|0,0|m,0|C,0|w),t=0|u(),m=0|Jt(I^v,m,13),v=(0|u())^t,t=0|Jt(w,t,32),I=0|u(),y=0|Qn(0|g,0|y,C^n|0,0|b),g=0|u(),I=0|Qn((b=0|Jt(C^n,b,16))^y|0,0|(n=(0|u())^g),0|t,0|I),t=0|u(),n=0|Jt(b^y,n,21),b=t^(0|u()),g=0|Qn(m^w|0,0|v,0|y,0|g),y=0|u(),v=0|Jt(m^w,v,17),w=(0|u())^y,y=0|Jt(g,y,32),m=0|u(),t=0|Qn(v^g|0,0|w,0|I,0|t),C=0|u(),w=0|Jt(v^g,w,13),g=(0|u())^C,C=0|Jt(t,C,32),v=0|u(),m=0|Qn(0|y,0|m,I^n|0,0|b),y=0|u(),v=0|Qn((b=0|Jt(I^n,b,16))^m|0,0|(n=(0|u())^y),0|C,0|v),C=0|u(),n=0|Jt(b^m,n,21),b=C^(0|u()),y=0|Qn(w^t|0,0|g,0|m,0|y),m=0|u(),g=0|Jt(w^t,g,17),t=(0|u())^m,m=0|Jt(y,m,32),w=0|u(),C=0|Qn(g^y|0,0|t,0|v,0|C),I=0|u(),t=0|Jt(g^y,t,13),I=(0|u())^I,w=0|Qn(0|m,0|w,v^n|0,0|b),m=0|u(),b=0|Jt((b=0|Jt(v^n,b,16))^w,(0|u())^m,21),n=0|u(),m=0|Qn(t^C|0,0|I,0|w,0|m),w=0|u(),I=0|Jt(t^C,I,17),C=0|u(),Ot(e,b^m^I^(t=0|Jt(m,w,32)),n^w^C^(0|u()))}(e|=0,t|=0,n|=0,r|=0,i|=0),0},_crypto_shorthash_bytes:Ir,_crypto_shorthash_keybytes:Cr,_crypto_shorthash_keygen:function(e){Xt(e|=0,16)},_crypto_sign:function(e,t,n,r,i,a){return 0|Ke(e|=0,t|=0,n|=0,r|=0,i|=0,a|=0)},_crypto_sign_bytes:Br,_crypto_sign_detached:function(e,t,n,r,i,a){return mn(e|=0,t|=0,n|=0,r|=0,i|=0,a|=0),0},_crypto_sign_ed25519_pk_to_curve25519:function(e,t){var n,r;return e|=0,r=y,n=y=y+63&-64,y=y+256|0,0==(0|Ee(t|=0))&&0==(0|fe(n+88|0,t))&&0!=(0|function(e){var t,n;return t=y,n=y=y+63&-64,y=y+160|0,z(n,e|=0),e=0|an(n),y=t,0|e}(n+88|0))?(_n(n),Ce(n,n,n+88+40|0),_n(n+48|0),Be(n+48|0,n+48|0,n+88+40|0),V(n,n),C(n+48|0,n+48|0,n),ne(e,n+48|0),e=0):e=-1,y=r,0|e},_crypto_sign_ed25519_sk_to_curve25519:function(e,t){var n,i,a;e|=0,i=y,a=y=y+63&-64,y=y+64|0,Pt(a,t|=0,32,0),r[a>>0]=-8&r[a>>0],r[a+31>>0]=63&r[a+31>>0]|64,t=a,n=e+32|0;do{r[e>>0]=0|r[t>>0],e=e+1|0,t=t+1|0}while((0|e)<(0|n));return Et(a,64),y=i,0},_crypto_sign_final_create:function(e,t,n,r){return function(e,t,n,r){var i,a;t|=0,n|=0,r|=0,i=y,a=y=y+63&-64,y=y+64|0,Lt(e|=0,a),ye(t,n,a,64,0,r,1),y=i}(e|=0,t|=0,n|=0,r|=0),0},_crypto_sign_final_verify:function(e,t,n){return 0|function(e,t,n){var r,i;return t|=0,n|=0,r=y,i=y=y+63&-64,y=y+64|0,Lt(e|=0,i),e=0|Ie(t,i,64,0,n,1),y=r,0|e}(e|=0,t|=0,n|=0)},_crypto_sign_init:function(e){return function(e){Dt(e|=0)}(e|=0),0},_crypto_sign_keypair:function(e,t){return function(e,t){var n,r;e|=0,t|=0,n=y,r=y=y+63&-64,y=y+32|0,Xt(r,32),lt(e,t,r),Et(r,32),y=n}(e|=0,t|=0),0},_crypto_sign_messagebytes_max:function(){return-65},_crypto_sign_open:function(e,t,n,r,i,a){return 0|Qe(e|=0,t|=0,n|=0,r|=0,i|=0,a|=0)},_crypto_sign_publickeybytes:Er,_crypto_sign_secretkeybytes:Br,_crypto_sign_seed_keypair:function(e,t,n){return lt(e|=0,t|=0,n|=0),0},_crypto_sign_seedbytes:Er,_crypto_sign_statebytes:function(){return 208},_crypto_sign_update:function(e,t,n,r){return Tn(e|=0,t|=0,n|=0,r|=0),0},_crypto_sign_verify_detached:function(e,t,n,r,i){return 0|Bn(e|=0,t|=0,n|=0,r|=0,i|=0)},_emscripten_get_sbrk_ptr:function(){return 35232},_emscripten_replace_memory:function(e){return r=new Int8Array(e),a=new Uint8Array(e),i=new Int32Array(e),n=e,!0},_free:_,_i64Add:Qn,_i64Subtract:Sn,_malloc:I,_memcpy:te,_memmove:Bt,_memset:_e,_randombytes:function(e,t,n){(n|=0)>>>0<1|1==(0|n)&(t|=0)>>>0<0?Xt(e|=0,t):l(34506,34526,197,34552)},_randombytes_buf:Xt,_randombytes_buf_deterministic:function(e,t,n){$t(e|=0,t|=0,0,34494,n|=0)},_randombytes_close:kr,_randombytes_random:dr,_randombytes_seedbytes:Er,_randombytes_stir:pr,_randombytes_uniform:function(e){var t=0;if((e|=0)>>>0<2)t=0;else{do{t=0|dr()}while(t>>>0<(((0-e|0)>>>0)%(e>>>0)|0)>>>0);t=(t>>>0)%(e>>>0)|0}return 0|t},_sodium_base642bin:j,_sodium_base64_encoded_len:function(e,t){var n;return e|=0,tr(t|=0),(((e>>>0)/3|0)<<2|1)+(4-(3-(n=(0|o((e>>>0)/3|0,-3))+e|0)&0-(t>>>1&1))&0-(1&(n>>>1|n)))|0},_sodium_bin2base64:$,_sodium_bin2hex:function(e,t,n,i){e|=0,n|=0;var o=0,s=0;if((i|=0)>>>0<2147483647&i<<1>>>0<(t|=0)>>>0||_r(),i){t=0;do{s=0|a[n+t>>0],r[e+(o=t<<1)>>0]=87+(s>>>4)+((65526+(s>>>4)|0)>>>8&217),r[e+(1|o)>>0]=(22272+((15&s)<<8)+(65526+(15&s)&55552)|0)>>>8,t=t+1|0}while((0|t)!=(0|i));t=i<<1}else t=0;return r[e+t>>0]=0,0|e},_sodium_hex2bin:function(e,t,n,o,s,c,u){e|=0,t|=0,n|=0,o|=0,s|=0,c|=0,u|=0;var l=0,f=0,A=0,h=0,p=0,d=0,g=0;e:do{if(o){h=0,d=0,l=0,f=0;t:for(;;){for(;!(255&((p=(65526+(201+(223&(A=0|a[n+l>>0]))&255)^65520+(201+(223&A)&255))>>>8)|(65526+(48^A)|0)>>>8)|0);){if(!(0!=(0|s)&f<<24>>24==0)){A=0;break t}if(!(0|Ln(s,A))){f=h,g=17;break e}if(!((l=l+1|0)>>>0>>0)){f=h,g=17;break e}f=0}if(A=p&201+(223&A)|(65526+(48^A)|0)>>>8&(48^A),h>>>0>=t>>>0){g=9;break}if(f<<24>>24?(r[e+h>>0]=A|255&d,h=h+1|0,A=d):A=A<<4&255,f=~f,!((l=l+1|0)>>>0>>0)){A=0;break}d=A}if(9==(0|g)&&(i[8678]=68,A=-1),f<<24>>24){i[8678]=28,A=0,f=l+-1|0,l=-1;break}if(A){A=0,f=l,l=-1;break}f=h,g=17;break}f=0,l=0,g=17}while(0);return 17==(0|g)&&(A=f,f=l,l=0),u?i[u>>2]=n+f:(0|f)!=(0|o)&&(i[8678]=28,l=-1),0|c&&(i[c>>2]=A),0|l},_sodium_init:function(){var e=0;return 0|i[8676]?e=1:(function(){return e=y,t=y=y+63&-64,y=y+16|0,Jn(t),0|i[t>>2]&&Jn(t),void(y=e);var e,t}(),pr(),function(){var e=0;(0|(e=0|g(30)))>0?i[8677]=e:e=0|i[8677],e>>>0<16?_r():Xt(34688,16)}(),i[8676]=1,e=0),0|e},_sodium_library_minimal:mr,_sodium_library_version_major:function(){return 10},_sodium_library_version_minor:yr,_sodium_pad:function(e,t,n,o,s){e|=0,t|=0,n|=0,s|=0;var c,u,l=0,f=0;if(u=y,c=y=y+63&-64,y=y+16|0,o|=0)if((f=o+-1-(l=o+-1&o?(n>>>0)%(o>>>0)|0:o+-1&n)|0)>>>0>=~n>>>0&&_r(),(f+n|0)>>>0>>0){0|e&&(i[e>>2]=f+n+1),r[c>>0]=0,l=0;do{e=((l^f)-1|0)>>>24,r[(s=t+(f+n)+(0-l)|0)>>0]=128&e|r[c>>0]&r[s>>0]&255,r[c>>0]=0|e|a[c>>0],l=l+1|0}while((0|l)!=(0|o));l=0}else l=-1;else l=-1;return y=u,0|l},_sodium_unpad:function(e,t,n,r){e|=0,t|=0,n|=0,r|=0;var o,s,c=0,u=0,l=0,f=0,A=0;if(s=y,o=y=y+63&-64,y=y+16|0,i[o>>2]=0,(r+-1|0)>>>0>>0){for(c=0,l=0,f=0;c&=255,u=0|a[t+(n+-1)+(0-l)>>0],A=(511+(0|i[o>>2])&c+511&511+(128^u))>>>8&1,i[o>>2]=l&0-A|i[o>>2],f=A|255&f,(0|(l=l+1|0))!=(0|r);)c|=u;i[e>>2]=n+-1-(0|i[o>>2]),c=f+-1|0}else c=-1;return y=s,0|c},_sodium_version_string:function(){return 34617},establishStackSpace:function(e,t){y=e|=0},stackAlloc:function(e){var t;return t=y,y=15+(y=y+(e|=0)|0)&-16,0|t},stackRestore:function(e){y=e|=0},stackSave:function(){return 0|y}}}({Math:Math,Int8Array:Int8Array,Int32Array:Int32Array,Uint8Array:Uint8Array},{a:W,b:function(e){B=e},c:function(){return B},d:function(e,t,n,r){W("Assertion failed: "+O(e)+", at: "+[t?O(t):"unknown filename",n,r?O(r):"unknown function"])},e:ue,f:function(){W()},g:function(e){return re[e]()},h:se,i:function(e,t,n){Q.set(Q.subarray(t,t+n),e)},j:function(e){var t=se();if(e>2130706432)return!1;for(var n=Math.max(t,16777216);n>0]=t;break;case"i16":x[e>>1]=t;break;case"i32":D[e>>2]=t;break;case"i64":Z=[t>>>0,(X=t,+G(X)>=1?X>0?(0|J(+Y(X/4294967296),4294967295))>>>0:~~+$((X-+(~~X>>>0))/4294967296)>>>0:0)],D[e>>2]=Z[0],D[e+4>>2]=Z[1];break;case"float":P[e>>2]=t;break;case"double":M[e>>3]=t;break;default:W("invalid type for setValue: "+n)}},r.getValue=function(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return S[e>>0];case"i16":return x[e>>1];case"i32":case"i64":return D[e>>2];case"float":return P[e>>2];case"double":return M[e>>3];default:W("invalid type for getValue: "+t)}return null},r.UTF8ToString=O,ee)if(ne(ee)||(pe=ee,ee=r.locateFile?r.locateFile(pe,I):I+pe),d||h){var ve=v(ee);Q.set(ve,8)}else{V++,r.monitorRunDependencies&&r.monitorRunDependencies(V);var be=function(e){e.byteLength&&(e=new Uint8Array(e)),Q.set(e,8),r.memoryInitializerRequest&&delete r.memoryInitializerRequest.response,function(e){if(V--,r.monitorRunDependencies&&r.monitorRunDependencies(V),0==V&&(null!==z&&(clearInterval(z),z=null),q)){var t=q;q=null,t()}}()},me=function(){y(ee,be,(function(){throw"could not load memory initializer "+ee}))},Ie=he(ee);if(Ie)be(Ie.buffer);else if(r.memoryInitializerRequest){var we=function(){var e=r.memoryInitializerRequest,t=e.response;if(200!==e.status&&0!==e.status){var n=he(r.memoryInitializerRequestURL);if(!n)return void me();t=n.buffer}be(t)};r.memoryInitializerRequest.response?setTimeout(we,0):r.memoryInitializerRequest.addEventListener("load",we)}else me()}function Ce(e){function t(){de||(de=!0,E||(H(U),H(L),r.onRuntimeInitialized&&r.onRuntimeInitialized(),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)e=r.postRun.shift(),K.unshift(e);var e;H(K)}()))}e=e||p,V>0||(function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)e=r.preRun.shift(),N.unshift(e);var e;H(N)}(),V>0||(r.setStatus?(r.setStatus("Running..."),setTimeout((function(){setTimeout((function(){r.setStatus("")}),1),t()}),1)):t()))}if(q=function e(){de||Ce(),de||(q=e)},r.run=Ce,r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();Ce(),Object.keys(l).forEach((function(e){"getRandomValue"!==e&&delete l[e]})),Object.keys(r).forEach((function(e){l[e]=r[e]}))};var s,c=void 0!==c?c:{},f={};for(s in c)c.hasOwnProperty(s)&&(f[s]=c[s]);var A,h,p=[],d=!1,g=!1,y=!1;d="object"==("undefined"==typeof window?"undefined":u(window)),g="function"==typeof importScripts,A="object"==(void 0===i?"undefined":u(i))&&"object"==u(i.versions)&&"string"==typeof i.versions.node,y=A&&!d&&!g,h=!d&&!y&&!g;var v,b,m,I,w="";y?(w=a+"/",v=function(e,t){var r;return(r=pe(e))||(m||(m=n(44)),I||(I=n(45)),e=I.normalize(e),r=m.readFileSync(e)),t?r:r.toString()},b=function(e){var t=v(e,!0);return t.buffer||(t=new Uint8Array(t)),x(t.buffer),t},i.argv.length>1&&i.argv[1].replace(/\\/g,"/"),p=i.argv.slice(2),e.exports=c,i.on("unhandledRejection",te),c.inspect=function(){return"[Emscripten Module object]"}):h?("undefined"!=typeof read&&(v=function(e){var t=pe(e);return t?Ae(t):read(e)}),b=function(e){var t;return(t=pe(e))?t:"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(x("object"==u(t=read(e,"binary"))),t)},"undefined"!=typeof scriptArgs?p=scriptArgs:void 0!==arguments&&(p=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(d||g)&&(g?w=self.location.href:document.currentScript&&(w=document.currentScript.src),w=0!==w.indexOf("blob:")?w.substr(0,w.lastIndexOf("/")+1):"",v=function(e){try{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText}catch(t){var n=pe(e);if(n)return Ae(n);throw t}},g&&(b=function(e){try{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}catch(t){var n=pe(e);if(n)return n;throw t}}));var C=c.print||void 0,B=c.printErr||void 0;for(s in f)f.hasOwnProperty(s)&&(c[s]=f[s]);f=null,c.arguments&&(p=c.arguments),c.thisProgram&&c.thisProgram,c.quit&&c.quit;var E,k,_={"f64-rem":function(e,t){return e%t},debugger:function(){}};new Array(8),c.wasmBinary&&(E=c.wasmBinary),c.noExitRuntime&&c.noExitRuntime,"object"!=("undefined"==typeof WebAssembly?"undefined":u(WebAssembly))&&B("no native wasm support detected");var S=new WebAssembly.Table({initial:0,maximum:0,element:"anyfunc"}),Q=!1;function x(e,t){e||te("Assertion failed: "+t)}var D,P,M,F,O,R,T,j="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function H(e,t){return e?function(e,t,n){for(var r=t+n,i=t;e[i]&&!(i>=r);)++i;if(i-t>16&&e.subarray&&j)return j.decode(e.subarray(t,i));for(var a="";t>10,56320|1023&u)}}else a+=String.fromCharCode((31&o)<<6|s)}else a+=String.fromCharCode(o)}return a}(M,e,t):""}function N(e,t){return e%t>0&&(e+=t-e%t),e}function U(e){D=e,c.HEAP8=P=new Int8Array(e),c.HEAP16=F=new Int16Array(e),c.HEAP32=O=new Int32Array(e),c.HEAPU8=M=new Uint8Array(e),c.HEAPU16=new Uint16Array(e),c.HEAPU32=new Uint32Array(e),c.HEAPF32=R=new Float32Array(e),c.HEAPF64=T=new Float64Array(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var L=c.TOTAL_MEMORY||16777216;function K(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var n=t.func;"number"==typeof n?void 0===t.arg?c.dynCall_v(n):c.dynCall_vi(n,t.arg):n(void 0===t.arg?null:t.arg)}else t()}}(k=c.wasmMemory?c.wasmMemory:new WebAssembly.Memory({initial:L/65536}))&&(D=k.buffer),L=D.byteLength,U(D),O[9312]=5280320;var G=[],$=[],Y=[],J=[],V=Math.abs,z=Math.ceil,q=Math.floor,W=Math.min,X=0,Z=null,ee=null;function te(e){throw c.onAbort&&c.onAbort(e),C(e+=""),B(e),Q=!0,"abort("+e+"). Build with -s ASSERTIONS=1 for more info."}c.preloadedImages={},c.preloadedAudios={};var ne="data:application/octet-stream;base64,";function re(e){return String.prototype.startsWith?e.startsWith(ne):0===e.indexOf(ne)}var ie,ae,oe,se="data:application/octet-stream;base64,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XQJxYwCIAgJyYwBeAnNjAIoCAnRjAIkCAnVjAIMCAnZjAEgCd2MA/AECeGMAbAJ5YwD/AQJ6YwD+AQJBYwD9AQq20ATgAhMAIABBwAAgAWuthiAAIAGtiIQLEAAgACABdCAAQSAgAWt2cgseACAAIAF8IAFC/////w+DIABCAYZC/v///x+DfnwLUAEDfwJ/IwAhBCMAQT9qQUBxJAAjACECIwBBEGokACACIAA2AgAgAQRAQQAhAANAIAAgAigCAGpBADoAACAAQQFqIgAgAUcNAAsLIAQLJAALCQAgACABNgAAC8UJAg1/KX4gAigCBCIDrCEQIAIoAggiBKwhGCACKAIMIgWsIRsgAigCECIGrCEdIAIoAhQiB6whHyACKAIYIgisISYgAigCHCIJrCEtIAIoAiAiCqwhMCABKAIEIgusISAgASgCDCIMrCEhIAEoAhQiDawhIiABKAIcIg6sISMgASgCJCIPrCEkIA9BAXSsIicgA0ETbKx+IAEoAgCsIhEgAigCAKwiEn58IAEoAiCsIhMgBEETbKwiLn58IA5BAXSsIiggBUETbKwiKX58IAEoAhisIhQgBkETbKwiJX58IA1BAXSsIiogB0ETbKwiHn58IAEoAhCsIhUgCEETbKwiHH58IAxBAXSsIisgCUETbKwiGX58IApBE2ysIhcgASgCCKwiFn58IAtBAXSsIiwgAigCJCIBQRNsrCIafnwhMSAQIBR+IBIgI358IBggIn58IBUgG358IB0gIX58IBYgH358ICAgJn58IBEgLX58IBcgJH58IBMgGn58IBAgKn4gEiAUfnwgFSAYfnwgGyArfnwgFiAdfnwgHyAsfnwgESAmfnwgGSAnfnwgEyAXfnwgGiAofnwgECAVfiASICJ+fCAYICF+fCAWIBt+fCAdICB+fCARIB9+fCAcICR+fCATIBl+fCAXICN+fCAUIBp+fCAQICt+IBIgFX58IBYgGH58IBsgLH58IBEgHX58IB4gJ358IBMgHH58IBkgKH58IBQgF358IBogKn58Ii9CgICAEHwiM0Iah3wiNEKAgIAIfCI1QhmHfCI2QoCAgBB8IjdCGod8ITIgLyAzQoCAgGCDfSASICF+IBAgFn58IBggIH58IBEgG358ICQgJX58IBMgHn58IBwgI358IBQgGX58IBcgIn58IBUgGn58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KAIAIgEEQCAEQQF0IQQgASgCBEF4cSADRg0CIAEhAAwBCwsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAILCyABKAIIIgAgAjYCDCABIAI2AgggAiAANgIIIAIgATYCDCACQQA2AhgLBUGQlwIgBCAGcjYCACAAIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggLQayXAkGslwIoAgBBf2oiADYCACAABEAPC0HUmgIhAANAIAAoAgAiAUEIaiEAIAENAAtBrJcCQX82AgALBABBIAvGAwEDfyACQYDAAE4EQCAAIAEgAhAFGiAADwsgACEEIAAgAmohAyAAQQNxIAFBA3FGBEADQCAAQQNxBEAgAkUEQCAEDwsgACABLAAAOgAAIABBAWohACABQQFqIQEgAkEBayECDAELCyADQXxxIgJBQGohBQNAIAAgBUwEQCAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCAAIAEoAgw2AgwgACABKAIQNgIQIAAgASgCFDYCFCAAIAEoAhg2AhggACABKAIcNgIcIAAgASgCIDYCICAAIAEoAiQ2AiQgACABKAIoNgIoIAAgASgCLDYCLCAAIAEoAjA2AjAgACABKAI0NgI0IAAgASgCODYCOCAAIAEoAjw2AjwgAEFAayEAIAFBQGshAQwBCwsDQCAAIAJIBEAgACABKAIANgIAIABBBGohACABQQRqIQEMAQsLBSADQQRrIQIDQCAAIAJIBEAgACABLAAAOgAAIAAgASwAAToAASAAIAEsAAI6AAIgACABLAADOgADIABBBGohACABQQRqIQEMAQsLCwNAIAAgA0gEQCAAIAEsAAA6AAAgAEEBaiEAIAFBAWohAQwBCwsgBAsKACAAIAEgAhA7C5gCAQR/IAAgAmohBCABQf8BcSEDIAJBwwBOBEADQCAAQQNxBEAgACADOgAAIABBAWohAAwBCwsgA0EIdCADciADQRB0ciADQRh0ciEBIARBfHEiBUFAaiEGA0AgACAGTARAIAAgATYCACAAIAE2AgQgACABNgIIIAAgATYCDCAAIAE2AhAgACABNgIUIAAgATYCGCAAIAE2AhwgACABNgIgIAAgATYCJCAAIAE2AiggACABNgIsIAAgATYCMCAAIAE2AjQgACABNgI4IAAgATYCPCAAQUBrIQAM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ACIgQQEQByElIAZBEGpBA3QgAmogHCAhfCAifCAgQQgQByAlICBCB4iFhXwiIjcDACAdQRMQByEhIB1BPRAHICEgHUIGiIWFIRwgGSkDACEhIBQpAwAiHUEBEAchJSATQRBqQQN0IAJqICAgHCAhfHwgHUEIEAcgJSAdQgeIhYV8IiA3AwAgIkETEAchHCAiQT0QByAcICJCBoiFhSEcIAdBCWpBA3QgAmopAwAhJSAHQQFqQQN0IAJqKQMAIiJBARAHISYgB0EQakEDdCACaiAdICV8IBx8ICJBCBAHICYgIkIHiIWFfCIdNwMAICBBExAHIRwgIyAgQT0QByAcICBCBoiFhXwhHCAWKQMAIiBBARAHISUgFUEQakEDdCACaiAcICJ8ICBBCBAHICUgIEIHiIWFfCIiNwMAIB1BExAHIRwgHUE9EAcgHCAdQgaIhYUhHCAIQQlqQQN0IAJqKQMAISUgCEEBakEDdCACaikDACIdQQEQByEmIAhBEGpBA3QgAmogICAlfCAcfCAdQQgQByAmIB1CB4iFhXwiIDcDACAiQRMQByEcICJBPRAHIBwgIkIGiIWFISIgDUEJakEDdCACaikDACAifCEiIB5BARAHIRwgDUEQakEDdCACaiAdICJ8IB5BCBAHIBwgHkIHiIWFfCIdNwMAICBBExAHISIgIEE9EAcgIiAgQgaIhYUhIiAJQQlqQQN0IAJqKQMAIRwgCUEBakEDdCACaikDACIgQQEQByElIAlBEGpBA3QgAmogHCAefCAifCAgQQgQByAlICBCB4iFhXwiHjcDACAdQRMQByEiIB1BPRAHICIgHUIGiIWFIR0gDkEJakEDdCACaikDACAdfCEdIB9BARAHISIgDkEQakEDdCACaiAdICB8IB9BCBAHICIgH0IHiIWFfCIdNwMAIB5BExAHISAgHkE9EAcgICAeQgaIhYUhICAKQQlqQQN0IAJqKQMAISIgCkEBakEDdCACaikDACIeQQEQByEcIApBEGpBA3QgAmogHyAifCAgfCAeQQgQByAcIB5CB4iFhXwiHzcDACAdQRMQByEgIB1BPRAHICAgHUIGiIWFIR0gD0EJakEDdCACaikDACAdfCEdICFBARAHISAgD0EQakEDdCACaiAdIB58ICFBCBAHICAgIUIHiIWFfCIeNwMAIB9BExAHIR0gH0E9EAcgHSAfQgaIhYUhHSALQQlqQQN0IAJqKQMAISAgC0EBakEDdCACaikDACIfQQEQByEiIAtBEGpBA3QgAmogICAhfCAdfCAfQQgQByAiIB9CB4iFhXwiHzcDACAeQRMQByEhIB5BPRAHICEgHkIGiIWFIR4gEEEJakEDdCACaikDACEhICNBARAHIR0gEEEQakEDdCACaiAhICR8IB58ICNBCBAHIB0gI0IHiIWFfDcDACAfQRMQByEeIB9BPRAHIB4gH0IGiIWFIR8gDEEJakEDdCACaikDACEhIAxBAWpBA3QgAmopAwAiHkEBEAchJCAMQRBqQQN0IAJqICEgI3wgH3wgHkEIEAcgJCAeQgeIhYV8NwMAIARB0ABJBEAgBCEBDAILCwtBACEBA0AgAUEDdCAAaiICIAFBA3QgA2opAwAgAikDAHw3AwAgAUEBaiIBQQhHDQALCywAIAJBgAJJBEAgACABIAJB/wFxEHMPBUH7jQJBj44CQesAQcSOAhACC0EAC0IAIANBf2pBP0sgAkHAAEtyBH9BfwUgA0H/AXEhAyACRSABRXIEQCAAIAMQrgEFIAAgAyABIAJB/wFxEK0BC0EACwsKACAAIAEgAhBNCwwAIAAgASACIAMQTgvoBAEUfyACKAAAIQ8CfyACKAAIIRYgAigADCEDQRQhFEHl8MGLBiEEQbLaiMsHIQwgAigAECEQIAIoABQhCSACKAAYIQ0gAigAHCEKQfTKgdkGIQUgAigABCECIBYLIQsgAyEIQe7IgZkDIQYgASgAACEOIAEoAAQhAyABKAAIIQcgASgADCEBA0AgBCAEIAlqQQcQCCAIcyIRakEJEAggB3MiByAHIBFqQQ0QCCAJcyIJakESEAggBHMhBCAGIAYgD2pBBxAIIAFzIhJqQQkQCCANcyIVIBIgFWpBDRAIIA9zIg1qQRIQCCAGcyEGIAwgDCAOakEHEAggCnMiE2pBCRAIIAJzIgIgAiATakENEAggDnMiCGpBEhAIIAxzIQogBSAFIBBqQQcQCCALcyILakEJEAggA3MiAyADIAtqQQ0QCCAQcyIBakESEAggBXMhBSAEIAQgC2pBBxAIIA1zIg9qQQkQCCACcyICIAIgD2pBDRAIIAtzIgtqQRIQCCAEcyEEIAYgBiARakEHEAggCHMiDmpBCRAIIANzIgMgAyAOakENEAggEXMiCGpBEhAIIAZzIQYgCiASakEHEAggAXMiECAKakEJEAggB3MiByAHIBBqQQ0QCCAScyIBakESEAggCnMhDCAFIBNqQQcQCCAJcyIJIAVqQQkQCCAVcyINIAkgDWpBDRAIIBNzIgpqQRIQCCAFcyEFIBRBfmoiFA0ACyAAIAQQCyAAQQRqIAYQCyAAQQhqIAwQCyAAQQxqIAUQCyAAQRBqIA4QCyAAQRRqIAMQCyAAQRhqIAcQCyAAQRxqIAEQCwveEwIIfx9+IAAsAAAgACwAASAAQQJqIgIsAAAQEEL///8AgyETAn4gAhARQgWIQv///wCDIScgACwABSAALAAGIABBB2oiAywAABAQQgKIQv///wCDIR8gAxARQgeIQv///wCDISAgAEEKaiIHEBFCBIhC////AIMhGSAALAANIAAsAA4gAEEPaiIELAAAEBBCAYhC////AIMhISAEEBFCBohC////AIMhFCAALAASIAAsABMgACwAFBAQQgOIQv///wCDIRogACwAFSAALAAWIABBF2oiBSwAABAQQv///wCDIRUgBRARQgWIQv///wCDIRsgACwAGiAALAAbIABBHGoiBiwAABAQQgKIQv///wCDIRYgBhARQgeIQv///wCDIRwgAEEfaiIIEBFCBIhC////AIMhECAALAAiIAAsACMgAEEkaiIBLAAAEBBCAYhC////AIMhESABEBFCBohC////AIMhEgJ+IAAsACcgACwAKCAALAApEBBCA4hC////AIMhJiAALAAqIAAsACsgAEEsaiIBLAAAEBBC////AIMhDCABEBFCBYhC////AIMhHSAALAAvIAAsADAgAEExaiIBLAAAEBBCAohC////AIMhCSABEBFCB4hC////AIMhCiAAQTRqEBFCBIhC////AIMhCyAALAA3IAAsADggAEE5aiIBLAAAEBBCAYhC////AIMhDSABEBFCBohC////AIMhDiAAQTxqEBFCA4giD0KDoVZ+IAx8IQwgC0KDoVZ+IBF8IA1C0asIfnwgD0Ln9id+fCAOQtOMQ358IApCg6FWfiAQfCALQtGrCH58IA1C04xDfnwgD0KY2hx+fCAOQuf2J358Ih5CgIBAfSIiQhWHfCERICYLIA9C0asIfnwgDkKDoVZ+fCANQoOhVn4gEnwgD0LTjEN+fCAOQtGrCH58IiNCgIBAfSIkQhWHfCESIB0gDEKAgEB9IhdCFYd8IRAgHiAiQoCAgH+DfSAJQoOhVn4gHHwgCkLRqwh+fCALQtOMQ358IA1C5/YnfnwgD0KT2Ch+fCAOQpjaHH58IBYgCULRqwh+fCAKQtOMQ358IAtC5/YnfnwgDUKY2hx+fCAOQpPYKH58IhZCgIBAfSIdQhWHfCIcQoCAQH0iJUIVh3whDiAjICRCgICAf4N9IBFCgIBAfSIeQhWHfCEPIAwgF0KAgIB/g30gEkKAgEB9IiJCFYd8IQwgEEKDoVZ+IBZ8IAlC04xDfiAbfCAKQuf2J358IAtCmNocfnwgDUKT2Ch+fCAVIAlC5/YnfnwgCkKY2hx+fCALQpPYKH58IhVCgIBAfSIXQhWIfCIbQoCAQH0iI0IVh3wgHUKAgIB/g30hDSAVIBogCUKY2hx+fCAKQpPYKH58IBQgCUKT2Ch+fCIUQoCAQH0iFUIViHwiGkKAgEB9IhZCFYh8IBdCgICAf4N9IBBC04xDfnwgDELRqwh+fCASICJCgICAf4N9IgtCg6FWfnwhEiAUIBVCgICA////AYN9IBBCmNocfnwgDELn9id+fCALQtOMQ358IA9C0asIfnwgESAeQoCAgH+DfSIJQoOhVn58IREgJwsgCUKT2Ch+fCAOQpjaHH58IBMgDkKT2Ch+fCIYQoCAQH0iFEIVh3wiFUKAgEB9IRMgGCAUQoCAgH+DfSAcICVCgICAf4N9IA1CgIBAfSIXQhWHfCIcQoCAQH0iHUIVhyIKQpPYKH58IRggHCAdQoCAgH+DfSANIBdCgICAf4N9IBsgEELRqwh+fCAjQoCAgH+DfSAMQoOhVn58IBJCgIBAfSIUQhWHfCIbQoCAQH0iHkIVh3wgGyAeQoCAgH+DfSASIBRCgICAf4N9IBogFkKAgIB/g30gEELn9id+fCAMQtOMQ358IAtC0asIfnwgD0KDoVZ+fCARQoCAQH0iDUIVh3wiGkKAgEB9IhZCFYd8IBogFkKAgIB/g30gESANQoCAgH+DfSAhIBBCk9gofnwgDEKY2hx+fCALQuf2J358IA9C04xDfnwgCULRqwh+fCAOQoOhVn58IBkgDEKT2Ch+fCALQpjaHH58IA9C5/YnfnwgCULTjEN+fCAOQtGrCH58IhJCgIBAfSIZQhWHfCIQQoCAQH0iDEIVh3wgCkKDoVZ+IBB8IAxCgICAf4N9IBIgCkLRqwh+fCAZQoCAgH+DfSAgIAtCk9gofnwgD0KY2hx+fCAJQuf2J358IA5C04xDfnwgHyAPQpPYKH58IAlCmNocfnwgDkLn9id+fCINQoCAQH0iEUIVh3wiCUKAgEB9IgtCFYd8IApC04xDfiAJfCALQoCAgH+DfSANIApC5/YnfnwgEUKAgIB/g30gE0IVh3wgFSAKQpjaHH58IBNCgICAf4N9IBhCFYd8Ig1CFYd8Ig5CFYd8Ig9CFYd8IgtCFYd8IhBCFYd8IgxCFYd8IhFCFYd8Ih9CFYd8IiBCFYd8IhlCFYd8IiFCFYciCUKT2Ch+IBhC////AIN8IQogGUL///8AgyAgQv///wCDIB9C////AIMgEUL///8AgyAMQv///wCDIAlCg6FWfiAQQv///wCDfCAJQtGrCH4gC0L///8Ag3wgCULTjEN+IA9C////AIN8IAlC5/YnfiAOQv///wCDfCAJQpjaHH4gDUL///8Ag3wgCkIVh3wiC0IVh3wiEkIVh3wiDUIVh3wiDkIVh3wiE0IVh3wiCUIVh3wiEEIVh3wiD0IVh3wiDEIVh3whESAAIAo8AAAgACAKQgiIPAABIAIgCkIQiEIfgyALQv///wCDIgpCBYaEPAAAIAAgC0IDiDwAAyAAIAtCC4g8AAQgACAKQhOIIBJC////AIMiCkIChoQ8AAUgACASQgaIPAAGIAMgCkIOiCANQv///wCDIgpCB4aEPAAAIAAgDUIBiDwACCAAIA1CCYg8AAkgByAKQhGIIA5C////AIMiCkIEhoQ8AAAgACAOQgSIPAALIAAgDkIMiDwADCAAIApCFIggE0L///8AgyIKQgGGhDwADSAAIBNCB4g8AA4gBCAKQg+IIAlC////AIMiCkIGhoQ8AAAgACAJQgKIPAAQIAAgCUIKiDwAESAAIBBCA4YgCkISiIQ8ABIgACAQQgWIPAATIAAgEEINiDwAFCAAIA88ABUgACAPQgiIPAAWIAUgD0IQiEIfgyAMQv///wCDIglCBYaEPAAAIAAgDEIDiDwAGCAAIAxCC4g8ABkgACAJQhOIIBFC////AIMiCUIChoQ8ABogACARQgaIPAAbIAYgCUIOiCAhQv///wCDIBFCFYd8IglCB4aEPAAAIAAgCUIBiDwAHSAAIAlCCYg8AB4gCCAJQhGHPAAAC/UBAQd/An8jACEHIwBBP2pBQHEkACMAIQIjAEEQaiQAIAJBADYAACACQQA7AAQgAkEAOgAGA0AgACABaiwAACEFQQAhAwNAIAIgA2oiBiAGLAAAIAUgASADQQV0QdCCAmpqLAAAc3I6AAAgA0EBaiIDQQdHDQALIAFBAWoiAUEfRw0ACyAALAAfQf8AcSEBQQAhAANAIAAgAmoiAyADLAAAIAEgAEEFdEHvggJqLAAAc3I6AAAgAEEBaiIAQQdHDQALQQAhAEEAIQEDQCABIAAgAmotAABBf2pyIQEgAEEBaiIAQQdHDQALIAcLJAAgAUEIdkEBcQvhAgEJfwJ/IwAhCiMAQT9qQUBxJAAjACEDIwBB0ANqJAAgA0GwAmohAiADQbgBaiEFIANBQGshBgNAIAMgBEEBdCIHaiABIARqLAAAIghBD3E6AAAgB0EBciADaiAIQf8BcUEEdjoAACAEQQFqIgRBIEcNAAtBACEEQQAhAQNAIAQgASADaiIHLQAAaiIIQRh0QYCAgEBrQRx1IQQgByAIIARBBHRrOgAAIAFBAWoiAUE/Rw0ACyADIAMtAD8gBGo6AD8gABB6QQEhAQNAIAYgAUEBdiABIANqLAAAEHkgAiAAIAYQVSAAIAIQFCABQQJqIgFBwABJDQALIAIgABA9IAUgAhA+IAIgBRA1IAUgAhA+IAIgBRA1IAUgAhA+IAIgBRA1IAAgAhAUQQAhAQNAIAYgAUEBdiABIANqLAAAEHkgAiAAIAYQVSAAIAIQFCABQQJqIgFBwABJDQALIAoLJAALmwEBBn8CfyMAIQgjAEE/akFAcSQAIwAhBSMAQTBqJAAgACABQShqIgMgARATIABBKGoiBCADIAEQFSAAQdAAaiIGIAAgAhAMIAQgBCACQShqEAwgAEH4AGoiAyACQdAAaiABQfgAahAMIAUgAUHQAGoiASABEBMgACAGIAQQFSAEIAYgBBATIAYgBSADEBMgAyAFIAMQFSAICyQAC2kBBX8CfyMAIQYjAEE/akFAcSQAIwAhAiMAQZABaiQAIAJB4ABqIgMgAUHQAGoQPyACQTBqIgUgASADEAwgAiABQShqIAMQDCAAIAIQLiAFEH9BB3QhASAAIAAtAB8gAXM6AB8gBgskAAudAgETf0EAIAJrIgIgACgCBCIDIAEoAgRzcSEEIAIgACgCCCIFIAEoAghzcSEGIAIgACgCDCIHIAEoAgxzcSEIIAIgACgCECIJIAEoAhBzcSEKIAIgACgCFCILIAEoAhRzcSEMIAIgACgCGCINIAEoAhhzcSEOIAIgACgCHCIPIAEoAhxzcSEQIAIgACgCICIRIAEoAiBzcSESIAIgACgCJCITIAEoAiRzcSEUIAAgACgCACIVIAIgFSABKAIAc3FzNgIAIAAgAyAEczYCBCAAIAUgBnM2AgggACAHIAhzNgIMIAAgCSAKczYCECAAIAsgDHM2AhQgACANIA5zNgIYIAAgDyAQczYCHCAAIBEgEnM2AiAgACATIBRzNgIkCzQBA38CfyMAIQMjAEE/akFAcSQAIwAhASMAQSBqJAAgASAAEC4gAUEgEFwhACADCyQAIAALEAAgACABIAIgAyAEIAUQZgsTACAAIAEgAiADIAQgBRBnGkEACwsAIAAgASACEL8BC2ABBH8CfyMAIQUjAEE/akFAcSQAIwAhAiMAQRBqJAAgAkEAOgAAA0AgAiAAIANqLAAAIAIsAAByOgAAIANBAWoiAyABRw0ACyACLQAAQf8DakEIdkEBcSEAIAULJAAgAAvLBAEMfwJ/IwAhEyMAQT9qQUBxJAACfyMAIRIjAEEQaiQAIBILIgtBADYCACAHEF8CQAJAIAMEfyAHQQRxRSEQIARFIRFBACEKAn8CQAJAAkACQANAAkADQAJAIAIgDGosAAAhDSAQBH8gDRCFAgUgDRCGAgsiDkH/AUcNACARDQYgBCANEEBFDQcgDEEBaiIMIANJDQEMBQsLIA4gCEEGdGohCCAJQQZqIg5BB0sEQCAJQX5qIQkgCiABTw0BIAAgCmogCCAJdjoAACAKQQFqIQoFIA4hCQsgDEEBaiIMIANJDQEMAgsLIAsgDDYCAEGIlwJBxAA2AgAgCCEAQX8hCCAJDAQLIAsgDDYCACAIIQBBACEIIAkMAwsgCyAMNgIAIAghAEEAIQggCQwCCyALIAw2AgAgCCEAQQAhCCAJDAELIAsgDDYCACAIIQBBACEIIAkLIgFBBEsEf0EAIQpBfwUgACEJIAghAAwCCwVBACEBQQAhCkEAIQAMAQshAAwBCyAJQQEgAXRBf2pxBEBBACEKQX8hAAUgB0ECcSAAckUEQCACIAMgCyAEIAFBAXYQhAIhAAsgAARAQQAhCgUgBARAIAsoAgAiACADSQRAAkADQCAEIAAgAmosAAAQQEUNASAAQQFqIgAgA0kNAAsgCyAANgIAQQAhAAwFCyALIAA2AgALC0EAIQALCwsgCygCACEBIAYEQCAGIAEgAmo2AgAFIAEgA0cEQEGIlwJBHDYCAEF/IQALCyAFBEAgBSAKNgIACyATCyQAIAALxQMBBX8gBBBfIAMgA0EDbiIHQX1saiEGIAdBAnQhByAHQQJyIAZBAXZqIAdBBGogBEECcRsgByAGGyIHIAFPBEAQAAsgA0EARyEGIAcgBEEEcQR/IAYEf0EAIQQDQCACIAlqLQAAIAhBCHRyIQggBUEIaiIFQQVLBEADfyAEQQFqIQYgACAEaiAIIAVBemoiBXZBP3EQjwE6AAAgBUEFSwR/IAYhBAwBBSAGCwshBAsgCUEBaiIJIANHDQALIAUEfyAAIARqIAhBBiAFa3RBP3EQjwE6AAAgBEEBagUgBAsFQQALBSAGBH9BACEEA0AgAiAJai0AACAIQQh0ciEIIAVBCGoiBUEFSwRAA38gBEEBaiEGIAAgBGogCCAFQXpqIgV2QT9xEI4BOgAAIAVBBUsEfyAGIQQMAQUgBgsLIQQLIAlBAWoiCSADRw0ACyAFBH8gACAEaiAIQQYgBWt0QT9xEI4BOgAAIARBAWoFIAQLBUEACwsiBEkEQEH0lQJBh5YCQeYBQZeWAhACCyAHIARLBEAgACAEakE9IAcgBGsQGhogByEECyAAIARqQQAgASAEQQFqIgIgAiABSRsgBGsQGhogAAsPACAAQXlxQQFHBEAQAAsLEQAgACABIAIgA0IAIAQQiwELIAAgAkL/////D1YEQBAABSAAIAEgAiADIAQgBRCWAQsLHAAgAUL/////D1YEQBAABSAAIAEgAiADEJACCwsVACAAEDogAQRAIABB8IwCQiIQHQsLngEBA38CfyMAIQMjAEE/akFAcSQAIwAhASMAQTBqJAAgASAAKQAANwAAIAEgACkACDcACCABIAApABA3ABAgASAAKQAYNwAYIAEgACkAJDcDICABIAFCKCAAQSBqQQAgABCWASAAIAEpAAA3AAAgACABKQAINwAIIAAgASkAEDcAECAAIAEpABg3ABggACABKQMgNwAkIAAQZSADCyQACwkAIABBATYAIAuWAgIFfwJ+An8jACEKIwBBP2pBQHEkACMAIQYjAEHgAGokACAGIAQgBRBRIAZBIGoiBSAEQRBqIgQgBhD7ASACIAEgAyAFENMCBH8gBkEgEApBfwUgAARAIAEgAE9BACABIABrrSADVBsgACABT0EAIAAgAWutIANUG3IEQCAAIAEgA6cQLBogACEBC0IgIAMgA0IgViICGyILQgBRBEAgBSAFQiAgBCAGEGAFIAVBIGoiCCABQX8gA0J/hSIMQl8gDEJfVhunayIJEBgaIAUgBSALQiB8IAQgBhBgIAAgCCAJEBgaCyACBEAgACALpyICaiABIAJqIAMgC30gBCAGEJMBCyAGQSAQCgtBAAshACAKCyQAIAALxQICB38CfgJ/IwAhDCMAQT9qQUBxJAAjACEHIwBB4AJqJAAgB0EgaiEGIAciCCAEIAUQUSAAIAJLQQAgACIFIAIiCWutIANUGyACIABLQQAgCSAFa60gA1QbcgRAIAAgAiADpxAsGiAAIQILIAZCADcDACAGQgA3AwggBkIANwMQIAZCADcDGEIgIAMgA0IgViIFGyINQgBRIglFBEAgBkEgaiACQX8gA0J/hSIOQl8gDkJfVhunaxAYGgsgBiAGIA1CIHwgBEEQaiILIAgQYCAHQeAAaiIEIAYQJiAJRQRAIAAgBkEgakF/IANCf4UiDkJfIA5CX1Ybp2sQGBoLIAZBwAAQCiAFBEAgACANpyIFaiACIAVqIAMgDX0gCyAIEJMBCyAIQSAQCiAEIAAgAxAPIAQgARAlIARBgAIQCiAMCyQAQQALCQAgACABELECCwsAIAAgASACEKEBCwgAIAAgARBoCwQAQQgLBABBAwsEAEF/C4cEAQZ/An8jACEJIwBBP2pBQHEkACMAIQYjAEGQBGokACAGQcADaiEEIAZBgANqIQUgBkGABGoiB0EANgIAIAcgATYAACABQcEASQRAIAZBAEEAIAEQTkEATgRAIAYgB0IEEBkgBiACIAOtEBkgBiAAIAEQTRoLBSAGQQBBAEHAABBOQQBOBEACQCAGIAdCBBAZIAYgAiADrRAZIAYgBEHAABBNQQBOBEAgACAEKQAANwAAIAAgBCkACDcACCAAIAQpABA3ABAgACAEKQAYNwAYIABBIGohACAFIAQpAwA3AwAgBSAEKQMINwMIIAUgBCkDEDcDECAFIAQpAxg3AxggBSAEKQMgNwMgIAUgBCkDKDcDKCAFIAQpAzA3AzAgBSAEKQM4NwM4IAFBYGoiAUHAAEsEQANAIARBwAAgBULAAEEAQQAQckEASA0DIAAgBCkAADcAACAAIAQpAAg3AAggACAEKQAQNwAQIAAgBCkAGDcAGCAAQSBqIQAgBSAEKQMANwMAIAUgBCkDCDcDCCAFIAQpAxA3AxAgBSAEKQMYNwMYIAUgBCkDIDcDICAFIAQpAyg3AyggBSAEKQMwNwMwIAUgBCkDODcDOCABQWBqIgFBwABLDQALCyAEIAEgBULAAEEAQQAQckEATgRAIAAgBCABEBgaCwsLCwsgBkGAAxAKIAkLJAAL2A4CE38QfgJ/IwAhFSMAQT9qQUBxJAAjACEDIwBBgBBqJAAgA0GACGoiBCABEDAgBCAAEDIgAyIBIAQQMCADIAIQMkEAIQADQCAAQQR0IgNBA3QgBGoiCSkDACADQQRyQQN0IARqIgUpAwAiHRAJIRkgA0EMckEDdCAEaiIGKQMAIBmFQSAQByEWIAYgFiAZIB0gA0EIckEDdCAEaiIHKQMAIBYQCSIWhUEYEAciHRAJIiGFQRAQByIZNwMAIAcgFiAZEAkiFjcDACAFIBYgHYVBPxAHIh03AwAgA0EBckEDdCAEaiIKKQMAIANBBXJBA3QgBGoiCykDACIbEAkhGiADQQ1yQQN0IARqIgwpAwAgGoVBIBAHIhcgGiAbIANBCXJBA3QgBGoiCCkDACAXEAkiG4VBGBAHIhcQCSIjhUEQEAchGiAIIBsgGhAJIhs3AwAgFyAbhUE/EAchFyADQQJyQQN0IARqIg0pAwAgA0EGckEDdCAEaiIOKQMAIhwQCSEfIANBDnJBA3QgBGoiDykDACAfhUEgEAciGCAfIBwgA0EKckEDdCAEaiIQKQMAIBgQCSIchUEYEAciGBAJIiSFQRAQByEfIBggHCAfEAkiIoVBPxAHIRwgA0EDckEDdCAEaiIRKQMAIANBB3JBA3QgBGoiEikDACIeEAkhGCADQQ9yQQN0IARqIhMpAwAgGIVBIBAHIiAgGCAeIANBC3JBA3QgBGoiAykDACAgEAkiHoVBGBAHIiAQCSIlhUEQEAchGCAgIB4gGBAJIiCFQT8QByEeIBcgIiAYICEgFxAJIhiFQSAQByIhEAkiIoVBGBAHIRcgCSAYIBcQCSIYNwMAIBMgGCAhhUEQEAciGDcDACAQICIgGBAJIhg3AwAgCyAXIBiFQT8QBzcDACAcICAgIyAcEAkiFyAZhUEgEAciHBAJIhiFQRgQByEZIAogFyAZEAkiFzcDACAGIBcgHIVBEBAHIhc3AwAgAyAYIBcQCSIXNwMAIA4gFyAZhUE/EAc3AwAgHiAWIBogJCAeEAkiFoVBIBAHIhoQCSIXhUEYEAchGSANIBYgGRAJIhY3AwAgDCAWIBqFQRAQByIWNwMAIAcgFyAWEAkiFjcDACASIBYgGYVBPxAHNwMAIBsgHyAlIB0QCSIWhUEgEAciGhAJIhsgHYVBGBAHIRkgESAWIBkQCSIWNwMAIA8gFiAahUEQEAciFjcDACAIIBsgFhAJIhY3AwAgBSAWIBmFQT8QBzcDACAAQQFqIgBBCEcNAAtBACEAA0AgAEEBdCIDQQN0IARqIgkpAwAgA0EgakEDdCAEaiIFKQMAIh0QCSEZIANB4ABqQQN0IARqIgYpAwAgGYVBIBAHIRYgBiAWIBkgHSADQUBrQQN0IARqIgcpAwAgFhAJIhaFQRgQByIdEAkiIYVBEBAHIhk3AwAgByAWIBkQCSIWNwMAIAUgFiAdhUE/EAciHTcDACADQQFyQQN0IARqIgopAwAgA0EhakEDdCAEaiILKQMAIhsQCSEaIANB4QBqQQN0IARqIgwpAwAgGoVBIBAHIhcgGiAbIANBwQBqQQN0IARqIggpAwAgFxAJIhuFQRgQByIXEAkiI4VBEBAHIRogCCAbIBoQCSIbNwMAIBcgG4VBPxAHIRcgA0EQakEDdCAEaiINKQMAIANBMGpBA3QgBGoiDikDACIcEAkhHyADQfAAakEDdCAEaiIPKQMAIB+FQSAQByIYIB8gHCADQdAAakEDdCAEaiIQKQMAIBgQCSIchUEYEAciGBAJIiSFQRAQByEfIBggHCAfEAkiIoVBPxAHIRwgA0ERakEDdCAEaiIRKQMAIANBMWpBA3QgBGoiEikDACIeEAkhGCADQfEAakEDdCAEaiITKQMAIBiFQSAQByIgIBggHiADQdEAakEDdCAEaiIDKQMAICAQCSIehUEYEAciIBAJIiWFQRAQByEYICAgHiAYEAkiIIVBPxAHIR4gFyAiIBggISAXEAkiGIVBIBAHIiEQCSIihUEYEAchFyAJIBggFxAJIhg3AwAgEyAYICGFQRAQByIYNwMAIBAgIiAYEAkiGDcDACALIBcgGIVBPxAHNwMAIBwgICAjIBwQCSIXIBmFQSAQByIcEAkiGIVBGBAHIRkgCiAXIBkQCSIXNwMAIAYgFyAchUEQEAciFzcDACADIBggFxAJIhc3AwAgDiAXIBmFQT8QBzcDACAeIBYgGiAkIB4QCSIWhUEgEAciGhAJIheFQRgQByEZIA0gFiAZEAkiFjcDACAMIBYgGoVBEBAHIhY3AwAgByAXIBYQCSIWNwMAIBIgFiAZhUE/EAc3AwAgGyAfICUgHRAJIhaFQSAQByIaEAkiGyAdhUEYEAchGSARIBYgGRAJIhY3AwAgDyAWIBqFQRAQByIWNwMAIAggGyAWEAkiFjcDACAFIBYgGYVBPxAHNwMAIABBAWoiAEEIRw0ACyACIAEQMCACIAQQMiAVCyQAC+0BAQF/IAAEfyAAKAIABH8gACgCBEEQSQR/QX4FAn8gACgCCEUEQEFuIAAoAgwNARoLIAAoAhQhASAAKAIQRQRAQW1BeiABGw8LIAFBCEkEf0F6BSAAKAIYRQRAQWwgACgCHA0CGgsgACgCIEUEQEFrIAAoAiQNAhoLIAAoAiwiAUEISQR/QXIFIAFBgICAAUsEf0FxBSABIAAoAjAiAUEDdEkEf0FyBSAAKAIoBH8gAQR/IAFB////B0sEf0FvBUFjQQAgACgCNCIAQf///wdLG0FkIAAbCwVBcAsFQXQLCwsLCwsLBUF/CwVBZwsLtQQCCn8RfkEAQYCAgAggACwAUBshDCAAKAIEIQggACgCCCEJIAAoAgwhCiAAKAIQIQsgACgCFCEEIAAoAhghAyAAKAIcIQUgACgCICEGIAAoAiQhByACQg9WBEAgACgCAK0hDiALQQVsrSEPIApBBWytIRUgCUEFbK0hGCAIQQVsrSEbIAitIRAgCa0hFiAKrSEZIAutIRwDQCABKAAAQf///x9xIARqrSINIA5+IAEoAANBAnZB////H3EgA2qtIhEgD358IAEoAAZBBHZB////H3EgBWqtIhIgFX58IAYgASgACUEGdmqtIhMgGH58IAcgDCABKAAMQQh2cmqtIhQgG358IRogDSAWfiAQIBF+fCAOIBJ+fCAPIBN+fCAUIBV+fCANIBB+IA4gEX58IA8gEn58IBMgFX58IBQgGH58IBpCGohC/////w+DfCIdQhqIQv////8Pg3wiF6dB////H3EhBSANIBl+IBEgFn58IBAgEn58IA4gE358IA8gFH58IBdCGohC/////w+DfCIXp0H///8fcSEGIA0gHH4gESAZfnwgEiAWfnwgECATfnwgDiAUfnwgF0IaiEL/////D4N8Ig2nQf///x9xIQcgDUIaiKdBBWwgGqdB////H3FqIgNB////H3EhBCAdp0H///8fcSADQRp2aiEDIAFBEGohASACQnB8IgJCD1YNAAsLIAAgBDYCFCAAIAM2AhggACAFNgIcIAAgBjYCICAAIAc2AiQLMAAgAUF/akE/SyAFQcAAS3IEf0F/BSAAIAIgBCABQf8BcSADIAVB/wFxEOECQQALC4QDAQd/IwAhByMAQT9qQUBxJAAjACEDIwBBQGskACACQf8BcQRAIAJB/wFxIQggAkH/AXFBwABMBEACfyAAKQBQQgBSBH9BfwUgACgA4AIiAkGAAUsEQCAAQoABEHQgACAAQeAAaiICEHcgACAAKADgAkGAf2oiBTYA4AIgBUGBAUkEQCACIABB4AFqIAUQGBogACgA4AIhBiACIQQFQaCNAkHAjQJBsgJB7Y0CEAILBSACIQYgAEHgAGohBAsgACAGrRB0IAAiAiwA5AIEQCACQn83AFgLIAJCfzcAUCAAKADgAiICIABB4ABqakEAQYACIAJrEBoaIAAgBBB3IAMgACkAABASIANBCGogACkACBASIANBEGogACkAEBASIANBGGogACkAGBASIANBIGogACkAIBASIANBKGogACkAKBASIANBMGogACkAMBASIANBOGogACkAOBASIAEgAyAIEBgaIABBwAAQCiAEQYACEApBAAshCSAHJAAgCQsPCwsQAEEACy0CAX8BfiABIABBQGsiAikAAHwhAyACIAM3AAAgACAAKQBIIAMgAVStfDcASAsJACAAQQA2AAALNgECfyAAEOMCA0AgAkEDdCAAaiIDIAEgAkEDdGopAAAgAykAAIU3AAAgAkEBaiICQQhHDQALC4s2AgV/In4CfyMAIQYjAEE/akFAcSQAIwAhAiMAQYACaiQAIAJBgAFqIQMDQCAEQQN0IANqIAEgBEEDdGopAAA3AwAgBEEBaiIE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EyABLAAUEBBCA4hC////AIMhDSABLAAVIAEsABYgAUEXaiIELAAAEBBC////AIMhCCAEEBFCBYhC////AIMhECABLAAaIAEsABsgAUEcaiIBLAAAEBBCAohC////AIMhDCABEBFCB4ghCSACLAAAIAIsAAEgAkECaiIBLAAAEBBC////AIMhGCABEBFCBYhC////AIMhGSACLAAFIAIsAAYgAkEHaiIBLAAAEBBCAohC////AIMhGyABEBFCB4hC////AIMhHCACQQpqEBFCBIhC////AIMhGiACLAANIAIsAA4gAkEPaiIBLAAAEBBCAYhC////AIMhFSABEBFCBohC////AIMhFiACLAASIAIsABMgAiwAFBAQQgOIQv///wCDIREgAiwAFSACLAAWIAJBF2oiASwAABAQQv///wCDIRMgARARQgWIQv///wCDIRQgAiwAGiACLAAbIAJBHGoiASwAABAQQgKIQv///wCDIRIgARARQgeIIRcgAywAACADLAABIANBAmoiASwAABAQQv///wCDIR0gARARQgWIQv///wCDIR4gAywABSADLAAGIANBB2oiASwAABAQQgKIQv///wCDITEgARARQgeIQv///wCDITIgA0EKahARQgSIQv///wCDITMgAywADSADLAAOIANBD2oiASwAABAQQgGIQv///wCDITQgARARQgaIQv///wCDISogAywAEiADLAATIAMsABQQEEIDiEL///8AgyE1IAMsABUgAywAFiADQRdqIgEsAAAQEEL///8AgyErIAEQEUIFiEL///8AgyEsIBAgGX4gDCAYfnwgCCAbfnwgDSAcfnwgCyAafnwgByAVfnwgCiAWfnwgDiATfnwgDyARfnwgBiAUfnwgBSASfnwgAywAGiADLAAbIANBHGoiASwAABAQQgKIQv///wCDfCItQoCAQH0hJSAMIBR+IAkgE358IBAgEn58IAggF358IAwgE34gCSARfnwgECAUfnwgCCASfnwgDSAXfnwiH0KAgEB9IiZCFYd8ISEgDCAXfiAJIBJ+fCAMIBJ+IAkgFH58IBAgF358IiJCgIBAfSIkQhWHfCEgIAkgF34iJ0KAgEB9IihCFYchIyAFIBl+IAYgGH58IB58IB0gBSAYfnwiNkKAgEB9IjdCFYh8IjhCgIBAfSEwIB8gJkKAgIB/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IAVB////H3E2AgggACAGQf///w9xNgIMIAAgB0H///8fcTYCECAAIAhB////D3E2AhQgACAJQf///x9xNgIYIAAgAUH///8PcTYCHCAAIANB////H3E2AiAgACAKIANBGnVqQf///w9xNgIkC0MBA38CfyMAIQUjAEE/akFAcSQAIwAhAyMAQSBqJAAgAyACIAEQoQEEf0F/BSAAQdCWAiADEFFBAAshACAFCyQAIAALZQEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBBQGskACADIAJCIBA5IAEgAykAADcAACABIAMpAAg3AAggASADKQAQNwAQIAEgAykAGDcAGCADQcAAEAogACABEGghACAFCyQAIAALBABBMAtRAQN/An8jACEHIwBBP2pBQHEkACMAIQUjAEEgaiQAIAJCMFQEf0F/BSAFIAEgAxCDASAAIAFBIGogAkJgfCAFIAEgBBCEAQshACAHCyQAIAALigEBBH8jACEFIwBB4ABqJAAgBUFAayEGIAVBIGoiBCAFIgcQiAEEQEF/IQAFIAAgBCkAADcAACAAIAQpAAg3AAggACAEKQAQNwAQIAAgBCkAGDcAGCAGIAQgAxCDASAAQSBqIAEgAiAGIAMgBxCGASEAIAdBIBAKIARBIBAKIAZBGBAKCyAFJAAgAAshACACQhBUBH9BfwUgACABQRBqIAEgAkJwfCADIAQQWQsLKAAgAkLv////D1YEQBAABSAAQRBqIAAgASACIAMgBBBaGkEADwtBAAszAQF+IAGtIAKtQiCGhCIDQoCAgIAQVARAIAAgA6cQHwVBupUCQc6VAkHFAUHolQIQAgsLFQAgACABIAKtIAOtQiCGhCAEEJsBCxQAIAAgASACrSADrUIghoQQHUEACxcAIAAgASACIAOtIAStQiCGhCAFEJQCCxkAIAAgASACIAOtIAStQiCGhCAFEJkBQQALFwAgACABIAIgA60gBK1CIIaEIAUQkwILFwAgACABIAKtIAOtQiCGhCAEEKICQQALJQAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCRCpAgslACAAIAEgAiADIAQgBa0gBq1CIIaEIAcgCK0gCa1CIIaEEKcCCxcAIAAgASACrSADrUIghoQgBCAFEKwCCxgAIAAgASACIAOtIAStQiCGhCAFIAYQZgsXACAAIAEgAq0gA61CIIaEIAQgBRCtAgsYACAAIAEgAiADrSAErUIghoQgBSAGEGcLEwAgACABIAKtIAOtQiCGhBC0AgsTACAAIAGtIAKtQiCGhCADELMCCyEAIAAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgBxC1AgsfACAAIAEgAq0gA61CIIaEIAStIAWtQiCGhCAGEKIBCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChC2AgsXACAAIAEgAq0gA61CIIaEIAQgBRDZAgsUACAAIAEgAq0gA61CIIaEEDlBAAsSACAAIAEgAq0gA61CIIaEECcLGQAgACABIAIgA60gBK1CIIaEIAUgBhCvAQsXACAAIAEgAq0gA61CIIaEIAQgBRDCAQsVACAAIAEgAq0gA61CIIaEIAQQwwELFwAgACABIAKtIAOtQiCGhCAEIAUQxAELGQAgACABIAKtIAOtQiCGhCAEIAUgBhCEAQsYACAAIAEgAiADrSAErUIghoQgBSAGEFkLGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEIUBCwsAIAAgASACEMABCxcAIAAgASACrSADrUIghoQgBCAFEMUBCxkAIAAgASACrSADrUIghoQgBCAFIAYQhgELGAAgACABIAIgA60gBK1CIIaEIAUgBhBaCxsAIAAgASACIAOtIAStQiCGhCAFIAYgBxCHAQsVACAAIAEgAq0gA61CIIaEIAQQ7QELFwAgACABIAKtIAOtQiCGhCAEEIkBQQALJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKABCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQnwILJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCdAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEI4CCz4BAn8jACEEIwBBIGokACAEIAEgAiADEIkBQX8gACAEEJEBIAAgBEYbIQEgBCAAQSAQQSABciEFIAQkACAFCyYAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxB7CyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQtQELJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCsAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEN0CCycAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxCCAQslACAAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgCSAKELwBCyUAIAAgAiADrSAErUIghoQgBSAGIAetIAitQiCGhCAJIAoQsAELJQAgACABIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChDkAgvQAgEGfyAAQYB/TwRAQYiXAkEwNgIAQQAPC0EQIABBC2pBeHEgAEELSRsiBEHMAGoQISIARQRAQQAPCyAAQXhqIQEgAEE/cQR/IABBfGoiBSgCACIGQXhxIABBP2pBQHEiAEF4aiICIABBOGogAiABa0EPSxsiACABayICayEDIAZBA3EEQCAAIAAoAgRBAXEgA3JBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSAFKAIAQQFxIAJyQQJyNgIAIAAgACgCBEEBcjYCBCABIAIQigEFIAAgASgCACACajYCACAAIAM2AgQLIAAFIAEiAAshAiAAKAIEIgFBA3EEQCABQXhxIgMgBEEQaksEQCAAIAFBAXEgBHJBAnI2AgQgAiAEaiIAIAMgBGsiAUEDcjYCBCACIANqIgQgBCgCBEEBcjYCBCAAIAEQigELCyACQQhqCy4BAX8gABAhIgFFBEAgAQ8LIAFBfGooAgBBA3FFBEAgAQ8LIAFBACAAEBoaIAEL+gEBA38gAUH/AXEiAgRAAkAgAEEDcQRAIAFB/wFxIQMDQCAALAAAIgQgA0EYdEEYdUYgBEVyDQIgAEEBaiIAQQNxDQALCyACQYGChAhsIQMgACgCACICQYCBgoR4cUGAgYKEeHMgAkH//ft3anFFBEADQCACIANzIgJBgIGChHhxQYCBgoR4cyACQf/9+3dqcUUEQCAAQQRqIgAoAgAiAkGAgYKEeHFBgIGChHhzIAJB//37d2pxRQ0BCwsLIAFB/wFxIQIDQCAAQQFqIQEgACwAACIDIAJBGHRBGHVGIANFckUEQCABIQAMAQsLCwUgABAjIABqIQALIAALQgEBfyMAIQIjAEFAayQAIAAgAhCBAiABIAIpAAA3AAAgASACKQAINwAIIAEgAikAEDcAECABIAIpABg3ABggAiQACwYAQYiXAguhAQEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBB8ABqJAAgAyACKQAANwAAIAMgAikACDcACCADIAIpABA3ABAgAyACKQAYNwAYIANB4ABqIgIgASkAADcDACACQgA3AwggA0EgaiIBIAIgAxB4QQAhAgNAIAAgAmogASACaiwAADoAACACQQFqIgJBIEcNAAsgAUHAABAKIANBIBAKIAULJAALBABBCgsGAEGplgILyAEBCH8CfyMAIQsjAEE/akFAcSQAIwAhBCMAQRBqJAAgBEEANgIAIANBf2ogAkkEfyABIAJBf2oiCGohCUEAIQJBACEBA0AgCSABay0AACIKQYABc0H/A2ogAkH/AXEiAkH/A2ogBCgCAEH/A2pxcUEIdkEBcSEGIAIgCnIhAiAEIAQoAgBBACAGayABcXI2AgAgBiAFQf8BcXIhBSABQQFqIgEgA0cNAAsgACAIIAQoAgBrNgIAIAVBf2oFQX8LIQAgCwskACAAC9YBAQV/An8jACEJIwBBP2pBQHEkACMAIQYjAEEQaiQAIAMEfyADIANBf2oiBXEEfyACIANwBSACIAVxCyEIIAUgCGsiBSACQX9zTwRAEAALIAIgBWoiAiAESQR/IAAEQCAAIAJBAWo2AgALIAEgAmohASAGQQA6AABBACEAA38gASAAayICIAIsAAAgBiwAAHFB/wFxIAAgBXNBf2pBGHYiAkGAAXFyOgAAIAYgBi0AACACcjoAACAAQQFqIgAgA0cNAEEACwVBfwsFQX8LIQAgCQskACAACzYBAX9BHhADIgBBAEoEQEGElwIgADYCAAVBhJcCKAIAIQALIABBEEkEQBAABUHwlgJBEBAfCws1AQF/IwAhAiMAQUBrJAAgACACECogAEHQAWoiACACQsAAEB0gACABECogAkHAABAKIAIkAAs2AQN/An8jACECIwBBP2pBQHEkACMAIQAjAEEQaiQAIAAQjQEgACgCAARAIAAQjQELIAILJAALIwBBgJcCKAIABH9BAQUQggIQkAEQgAJBgJcCQQE2AgBBAAsLgQEBBH8gBAR/An8gA0UhBiACKAIAIQUCQANAIAUgAUkEQCAAIAVqLAAAIgchCCAHQT1GBEAgBEF/aiEEBSAGDQMgAyAIEEBF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BMUAKNUyAdRghP9YirT+5JJ8/7j29wBBdVb//WbS/v55JACJcwP/PBjYAIYSHQA74mEAsI5HAAfRoQC9VDP+m/pIANVU6/8t3uAA7pSP/6oqNf9Op3UAugAo/32xZ/9F4UIA4wdYAUusBgCpLeMBECRG/zICCf+LwRYAj7fn/tpFMgDsOKEB1YMqAIqRLP6I5Sj/MT8j/z2R9f9lwAL+6KdxAJhoJgF5udoAeYvT/nfwIwBBvdn+u7Oi/6C75gA++A7/PE5hAP/3o//hO1v/a0c6//EvIQEydewA27E//vRaswAjwtf/vUMy/xeHgQBovSX/uTnCACM+5//c+GwADOeyAI9QWwGDXWX/kCcCAf/6sgAFEez+iyAuAMy8Jv71czT/v3FJ/r9sRf8WRfUBF8uyAKpjqgBB+G8AJWyZ/0AlRQAAWD7+WZSQ/79E4AHxJzUAKcvt/5F+wv/dKv3/GWOXAGH93wFKczH/Bq9I/zuwywB8t/kB5ORjAIEMz/6owMP/zLAQ/pjqqwBNJVX/IXiH/47C4wEf1joA1bt9/+guPP++dCr+l7IT/zM+7f7M7MEAwug8AKwinf+9ELj+ZwNf/43pJP4pGQv/FcOmAHb1LQBD1ZX/nwwS/7uk4wGgGQUADE7DASvF4QAwjin+xJs8/9/HEgGRiJwA/HWp/pHi7gDvF2sAbbW8/+ZwMf5Jqu3/57fj/1DcFADCa38Bf81lAC40xQHSqyT/WANa/ziXjQBgu///Kk7IAP5GRgH0fagAzESKAXzXRgBmQsj+ETTkAHXcj/7L+HsAOBKu/7qXpP8z6NABoOQr//kdGQFEvj8ADQAAAAD/AAAAAPUAAAAAAAD7AAAAAAAA/QAAAADzAAAAAAcAAAAAAAMAAAAA8wAAAAAFAEGLgQILQAsAAAAAAAsAAAAA8wAAAAAAAP0AAAAAAP8AAAAAAwAAAAD1AAAAAAAAAA8AAAAAAP8AAAAA/wAAAAAHAAAAAAUAQcyCAgsBAQBB8IICCwEBAEGQgwILsAEm6JWPwrInsEXD9Iny75jw1d+sBdPGMzmxOAKIbVP8BccXanA9TdhPujwLdg0QZw8qIFP6LDnMxk7H/XeSrAN67P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/7dP1XBpjEljWnPei3vneFABBz4QCC8IFEAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgABBsIsCCwEBAEHQiwILwQHg63p8O0G4rhZW4/rxn8Rq2gmN65wysf2GYgUWX0m4AF+clbyjUIwksdCxVZyD71sERFzEWByOhtgiTt3QnxFX7P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBAEGgjQILjwlTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGJsYWtlMmJfZmluYWwAb3V0bGVuIDw9IFVJTlQ4X01BWABjcnlwdG9fZ2VuZXJpY2hhc2gvYmxha2UyYi9yZWYvZ2VuZXJpY2hhc2hfYmxha2UyYi5jAGNyeXB0b19nZW5lcmljaGFzaF9ibGFrZTJiX2ZpbmFsACRhcmdvbjJpZAAkYXJnb24yaQAkdj0AJG09ACx0PQAscD0AJGFyZ29uMmlkJHY9ACRhcmdvbjJpJHY9ACRhcmdvbjJpZCQAJGFyZ29uMmkkACJ7IHJldHVybiBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUoKTsgfSIAeyBpZiAoTW9kdWxlLmdldFJhbmRvbVZhbHVlID09PSB1bmRlZmluZWQpIHsgdHJ5IHsgdmFyIHdpbmRvd18gPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyA/IHdpbmRvdyA6IHNlbGY7IHZhciBjcnlwdG9fID0gdHlwZW9mIHdpbmRvd18uY3J5cHRvICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvd18uY3J5cHRvIDogd2luZG93Xy5tc0NyeXB0bzsgdmFyIHJhbmRvbVZhbHVlc1N0YW5kYXJkID0gZnVuY3Rpb24oKSB7IHZhciBidWYgPSBuZXcgVWludDMyQXJyYXkoMSk7IGNyeXB0b18uZ2V0UmFuZG9tVmFsdWVzKGJ1Zik7IHJldHVybiBidWZbMF0gPj4+IDA7IH07IHJhbmRvbVZhbHVlc1N0YW5kYXJkKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlc1N0YW5kYXJkOyB9IGNhdGNoIChlKSB7IHRyeSB7IHZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTsgdmFyIHJhbmRvbVZhbHVlTm9kZUpTID0gZnVuY3Rpb24oKSB7IHZhciBidWYgPSBjcnlwdG9bJ3JhbmRvbUJ5dGVzJ10oNCk7IHJldHVybiAoYnVmWzBdIDw8IDI0IHwgYnVmWzFdIDw8IDE2IHwgYnVmWzJdIDw8IDggfCBidWZbM10pID4+PiAwOyB9OyByYW5kb21WYWx1ZU5vZGVKUygpOyBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPSByYW5kb21WYWx1ZU5vZGVKUzsgfSBjYXRjaCAoZSkgeyB0aHJvdyAnTm8gc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvdW5kJzsgfSB9IH0gfQBMaWJzb2RpdW1EUkdidWZfbGVuIDw9IFNJWkVfTUFYAHJhbmRvbWJ5dGVzL3JhbmRvbWJ5dGVzLmMAcmFuZG9tYnl0ZXMAYjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAxLjAuMTg=";function ce(){try{if(E)return new Uint8Array(E);var e=pe(se);if(e)return e;if(b)return b(se);throw"both async and sync fetching of the wasm failed"}catch(e){te(e)}}re(se)||(ie=se,se=c.locateFile?c.locateFile(ie,w):w+ie),c.asm=function(){var e={env:ge,wasi_unstable:ge,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:_};function t(e,t){var n=e.exports;c.asm=n,function(e){if(X--,c.monitorRunDependencies&&c.monitorRunDependencies(X),0==X&&(null!==Z&&(clearInterval(Z),Z=null),ee)){var t=ee;ee=null,t()}}()}function n(e){t(e.instance)}function r(t){return(E||!d&&!g||"function"!=typeof fetch?new Promise((function(e,t){e(ce())})):fetch(se,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+se+"'";return e.arrayBuffer()})).catch((function(){return ce()}))).then((function(t){return WebAssembly.instantiate(t,e)})).then(t,(function(e){B("failed to asynchronously prepare wasm: "+e),te(e)}))}if(X++,c.monitorRunDependencies&&c.monitorRunDependencies(X),c.instantiateWasm)try{return c.instantiateWasm(e,t)}catch(e){return B("Module.instantiateWasm callback failed with error: "+e),!1}return function(){if(E||"function"!=typeof WebAssembly.instantiateStreaming||re(se)||"function"!=typeof fetch)return r(n);fetch(se,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(n,(function(e){B("wasm streaming compile failed: "+e),B("falling back to ArrayBuffer instantiation"),r(n)}))}))}(),{}};var ue=[function(){return c.getRandomValue()},function(){if(void 0===c.getRandomValue)try{var e="object"==("undefined"==typeof window?"undefined":u(window))?window:self,t=void 0!==e.crypto?e.crypto:e.msCrypto,r=function(){var e=new Uint32Array(1);return t.getRandomValues(e),e[0]>>>0};r(),c.getRandomValue=r}catch(e){try{var i=n(46),a=function(){var e=i.randomBytes(4);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0};a(),c.getRandomValue=a}catch(e){throw"No secure random number generator found"}}}];function le(){return P.length}var fe=!1;function Ae(e){for(var t=[],n=0;n255&&(fe&&x(!1,"Character code "+r+" ("+String.fromCharCode(r)+") at offset "+n+" not in 0x00-0xFF."),r&=255),t.push(String.fromCharCode(r))}return t.join("")}var he="function"==typeof atob?atob:function(e){var t,n,r,i,a,o,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",u=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{t=s.indexOf(e.charAt(u++))<<2|(i=s.indexOf(e.charAt(u++)))>>4,n=(15&i)<<4|(a=s.indexOf(e.charAt(u++)))>>2,r=(3&a)<<6|(o=s.indexOf(e.charAt(u++))),c+=String.fromCharCode(t),64!==a&&(c+=String.fromCharCode(n)),64!==o&&(c+=String.fromCharCode(r))}while(u2147418112)return!1;for(var n=Math.max(t,16777216);n>16),U(k.buffer),1}catch(e){}}(n)},d:function(e){switch(e){case 30:return 16384;case 85:return 131068;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==("undefined"==typeof navigator?"undefined":u(navigator))&&navigator.hardwareConcurrency||1}return c.___errno_location&&(O[c.___errno_location()>>2]=28),-1},memory:k,table:S},ye=c.asm({},ge,D);function ve(e){function t(){de||(de=!0,Q||(K($),K(Y),c.onRuntimeInitialized&&c.onRuntimeInitialized(),function(){if(c.postRun)for("function"==typeof c.postRun&&(c.postRun=[c.postRun]);c.postRun.length;)e=c.postRun.shift(),J.unshift(e);var e;K(J)}()))}e=e||p,X>0||(function(){if(c.preRun)for("function"==typeof c.preRun&&(c.preRun=[c.preRun]);c.preRun.length;)e=c.preRun.shift(),G.unshift(e);var e;K(G)}(),X>0||(c.setStatus?(c.setStatus("Running..."),setTimeout((function(){setTimeout((function(){c.setStatus("")}),1),t()}),1)):t()))}if(c.asm=ye,c.___errno_location=function(){return c.asm.h.apply(null,arguments)},c._crypto_aead_chacha20poly1305_abytes=function(){return c.asm.i.apply(null,arguments)},c._crypto_aead_chacha20poly1305_decrypt=function(){return c.asm.j.apply(null,arguments)},c._crypto_aead_chacha20poly1305_decrypt_detached=function(){return c.asm.k.apply(null,arguments)},c._crypto_aead_chacha20poly1305_encrypt=function(){return c.asm.l.apply(null,arguments)},c._crypto_aead_chacha20poly1305_encrypt_detached=function(){return c.asm.m.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_abytes=function(){return c.asm.n.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_decrypt=function(){return c.asm.o.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_decrypt_detached=function(){return c.asm.p.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_encrypt=function(){return c.asm.q.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_encrypt_detached=function(){return c.asm.r.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_keybytes=function(){return c.asm.s.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_keygen=function(){return c.asm.t.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_messagebytes_max=function(){return c.asm.u.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_npubbytes=function(){return c.asm.v.apply(null,arguments)},c._crypto_aead_chacha20poly1305_ietf_nsecbytes=function(){return c.asm.w.apply(null,arguments)},c._crypto_aead_chacha20poly1305_keybytes=function(){return c.asm.x.apply(null,arguments)},c._crypto_aead_chacha20poly1305_keygen=function(){return c.asm.y.apply(null,arguments)},c._crypto_aead_chacha20poly1305_messagebytes_max=function(){return c.asm.z.apply(null,arguments)},c._crypto_aead_chacha20poly1305_npubbytes=function(){return c.asm.A.apply(null,arguments)},c._crypto_aead_chacha20poly1305_nsecbytes=function(){return c.asm.B.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_abytes=function(){return c.asm.C.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_decrypt=function(){return c.asm.D.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_decrypt_detached=function(){return c.asm.E.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_encrypt=function(){return c.asm.F.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_encrypt_detached=function(){return c.asm.G.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_keybytes=function(){return c.asm.H.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_keygen=function(){return c.asm.I.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_messagebytes_max=function(){return c.asm.J.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_npubbytes=function(){return c.asm.K.apply(null,arguments)},c._crypto_aead_xchacha20poly1305_ietf_nsecbytes=function(){return c.asm.L.apply(null,arguments)},c._crypto_auth=function(){return c.asm.M.apply(null,arguments)},c._crypto_auth_bytes=function(){return c.asm.N.apply(null,arguments)},c._crypto_auth_keybytes=function(){return c.asm.O.apply(null,arguments)},c._crypto_auth_keygen=function(){return c.asm.P.apply(null,arguments)},c._crypto_auth_verify=function(){return c.asm.Q.apply(null,arguments)},c._crypto_box_beforenm=function(){return c.asm.R.apply(null,arguments)},c._crypto_box_beforenmbytes=function(){return c.asm.S.apply(null,arguments)},c._crypto_box_detached=function(){return c.asm.T.apply(null,arguments)},c._crypto_box_detached_afternm=function(){return c.asm.U.apply(null,arguments)},c._crypto_box_easy=function(){return c.asm.V.apply(null,arguments)},c._crypto_box_easy_afternm=function(){return c.asm.W.apply(null,arguments)},c._crypto_box_keypair=function(){return c.asm.X.apply(null,arguments)},c._crypto_box_macbytes=function(){return c.asm.Y.apply(null,arguments)},c._crypto_box_messagebytes_max=function(){return c.asm.Z.apply(null,arguments)},c._crypto_box_noncebytes=function(){return c.asm._.apply(null,arguments)},c._crypto_box_open_detached=function(){return c.asm.$.apply(null,arguments)},c._crypto_box_open_detached_afternm=function(){return c.asm.aa.apply(null,arguments)},c._crypto_box_open_easy=function(){return c.asm.ba.apply(null,arguments)},c._crypto_box_open_easy_afternm=function(){return c.asm.ca.apply(null,arguments)},c._crypto_box_publickeybytes=function(){return c.asm.da.apply(null,arguments)},c._crypto_box_seal=function(){return c.asm.ea.apply(null,arguments)},c._crypto_box_seal_open=function(){return c.asm.fa.apply(null,arguments)},c._crypto_box_sealbytes=function(){return c.asm.ga.apply(null,arguments)},c._crypto_box_secretkeybytes=function(){return c.asm.ha.apply(null,arguments)},c._crypto_box_seed_keypair=function(){return c.asm.ia.apply(null,arguments)},c._crypto_box_seedbytes=function(){return c.asm.ja.apply(null,arguments)},c._crypto_generichash=function(){return c.asm.ka.apply(null,arguments)},c._crypto_generichash_bytes=function(){return c.asm.la.apply(null,arguments)},c._crypto_generichash_bytes_max=function(){return c.asm.ma.apply(null,arguments)},c._crypto_generichash_bytes_min=function(){return c.asm.na.apply(null,arguments)},c._crypto_generichash_final=function(){return c.asm.oa.apply(null,arguments)},c._crypto_generichash_init=function(){return c.asm.pa.apply(null,arguments)},c._crypto_generichash_keybytes=function(){return c.asm.qa.apply(null,arguments)},c._crypto_generichash_keybytes_max=function(){return c.asm.ra.apply(null,arguments)},c._crypto_generichash_keybytes_min=function(){return c.asm.sa.apply(null,arguments)},c._crypto_generichash_keygen=function(){return c.asm.ta.apply(null,arguments)},c._crypto_generichash_statebytes=function(){return c.asm.ua.apply(null,arguments)},c._crypto_generichash_update=function(){return c.asm.va.apply(null,arguments)},c._crypto_hash=function(){return c.asm.wa.apply(null,arguments)},c._crypto_hash_bytes=function(){return c.asm.xa.apply(null,arguments)},c._crypto_kdf_bytes_max=function(){return c.asm.ya.apply(null,arguments)},c._crypto_kdf_bytes_min=function(){return c.asm.za.apply(null,arguments)},c._crypto_kdf_contextbytes=function(){return c.asm.Aa.apply(null,arguments)},c._crypto_kdf_derive_from_key=function(){return c.asm.Ba.apply(null,arguments)},c._crypto_kdf_keybytes=function(){return c.asm.Ca.apply(null,arguments)},c._crypto_kdf_keygen=function(){return c.asm.Da.apply(null,arguments)},c._crypto_kx_client_session_keys=function(){return c.asm.Ea.apply(null,arguments)},c._crypto_kx_keypair=function(){return c.asm.Fa.apply(null,arguments)},c._crypto_kx_publickeybytes=function(){return c.asm.Ga.apply(null,arguments)},c._crypto_kx_secretkeybytes=function(){return c.asm.Ha.apply(null,arguments)},c._crypto_kx_seed_keypair=function(){return c.asm.Ia.apply(null,arguments)},c._crypto_kx_seedbytes=function(){return c.asm.Ja.apply(null,arguments)},c._crypto_kx_server_session_keys=function(){return c.asm.Ka.apply(null,arguments)},c._crypto_kx_sessionkeybytes=function(){return c.asm.La.apply(null,arguments)},c._crypto_pwhash=function(){return c.asm.Ma.apply(null,arguments)},c._crypto_pwhash_alg_argon2i13=function(){return c.asm.Na.apply(null,arguments)},c._crypto_pwhash_alg_argon2id13=function(){return c.asm.Oa.apply(null,arguments)},c._crypto_pwhash_alg_default=function(){return c.asm.Pa.apply(null,arguments)},c._crypto_pwhash_bytes_max=function(){return c.asm.Qa.apply(null,arguments)},c._crypto_pwhash_bytes_min=function(){return c.asm.Ra.apply(null,arguments)},c._crypto_pwhash_memlimit_interactive=function(){return c.asm.Sa.apply(null,arguments)},c._crypto_pwhash_memlimit_max=function(){return c.asm.Ta.apply(null,arguments)},c._crypto_pwhash_memlimit_min=function(){return c.asm.Ua.apply(null,arguments)},c._crypto_pwhash_memlimit_moderate=function(){return c.asm.Va.apply(null,arguments)},c._crypto_pwhash_memlimit_sensitive=function(){return c.asm.Wa.apply(null,arguments)},c._crypto_pwhash_opslimit_interactive=function(){return c.asm.Xa.apply(null,arguments)},c._crypto_pwhash_opslimit_max=function(){return c.asm.Ya.apply(null,arguments)},c._crypto_pwhash_opslimit_min=function(){return c.asm.Za.apply(null,arguments)},c._crypto_pwhash_opslimit_moderate=function(){return c.asm._a.apply(null,arguments)},c._crypto_pwhash_opslimit_sensitive=function(){return c.asm.$a.apply(null,arguments)},c._crypto_pwhash_passwd_max=function(){return c.asm.ab.apply(null,arguments)},c._crypto_pwhash_passwd_min=function(){return c.asm.bb.apply(null,arguments)},c._crypto_pwhash_saltbytes=function(){return c.asm.cb.apply(null,arguments)},c._crypto_pwhash_str=function(){return c.asm.db.apply(null,arguments)},c._crypto_pwhash_str_alg=function(){return c.asm.eb.apply(null,arguments)},c._crypto_pwhash_str_needs_rehash=function(){return c.asm.fb.apply(null,arguments)},c._crypto_pwhash_str_verify=function(){return c.asm.gb.apply(null,arguments)},c._crypto_pwhash_strbytes=function(){return c.asm.hb.apply(null,arguments)},c._crypto_pwhash_strprefix=function(){return c.asm.ib.apply(null,arguments)},c._crypto_scalarmult=function(){return c.asm.jb.apply(null,arguments)},c._crypto_scalarmult_base=function(){return c.asm.kb.apply(null,arguments)},c._crypto_scalarmult_bytes=function(){return c.asm.lb.apply(null,arguments)},c._crypto_scalarmult_scalarbytes=function(){return c.asm.mb.apply(null,arguments)},c._crypto_secretbox_detached=function(){return c.asm.nb.apply(null,arguments)},c._crypto_secretbox_easy=function(){return c.asm.ob.apply(null,arguments)},c._crypto_secretbox_keybytes=function(){return c.asm.pb.apply(null,arguments)},c._crypto_secretbox_keygen=function(){return c.asm.qb.apply(null,arguments)},c._crypto_secretbox_macbytes=function(){return c.asm.rb.apply(null,arguments)},c._crypto_secretbox_messagebytes_max=function(){return c.asm.sb.apply(null,arguments)},c._crypto_secretbox_noncebytes=function(){return c.asm.tb.apply(null,arguments)},c._crypto_secretbox_open_detached=function(){return c.asm.ub.apply(null,arguments)},c._crypto_secretbox_open_easy=function(){return c.asm.vb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_abytes=function(){return c.asm.wb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_headerbytes=function(){return c.asm.xb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_init_pull=function(){return c.asm.yb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_init_push=function(){return c.asm.zb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_keybytes=function(){return c.asm.Ab.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_keygen=function(){return c.asm.Bb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_messagebytes_max=function(){return c.asm.Cb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_pull=function(){return c.asm.Db.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_push=function(){return c.asm.Eb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_rekey=function(){return c.asm.Fb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_statebytes=function(){return c.asm.Gb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_tag_final=function(){return c.asm.Hb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_tag_message=function(){return c.asm.Ib.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_tag_push=function(){return c.asm.Jb.apply(null,arguments)},c._crypto_secretstream_xchacha20poly1305_tag_rekey=function(){return c.asm.Kb.apply(null,arguments)},c._crypto_shorthash=function(){return c.asm.Lb.apply(null,arguments)},c._crypto_shorthash_bytes=function(){return c.asm.Mb.apply(null,arguments)},c._crypto_shorthash_keybytes=function(){return c.asm.Nb.apply(null,arguments)},c._crypto_shorthash_keygen=function(){return c.asm.Ob.apply(null,arguments)},c._crypto_sign=function(){return c.asm.Pb.apply(null,arguments)},c._crypto_sign_bytes=function(){return c.asm.Qb.apply(null,arguments)},c._crypto_sign_detached=function(){return c.asm.Rb.apply(null,arguments)},c._crypto_sign_ed25519_pk_to_curve25519=function(){return c.asm.Sb.apply(null,arguments)},c._crypto_sign_ed25519_sk_to_curve25519=function(){return c.asm.Tb.apply(null,arguments)},c._crypto_sign_final_create=function(){return c.asm.Ub.apply(null,arguments)},c._crypto_sign_final_verify=function(){return c.asm.Vb.apply(null,arguments)},c._crypto_sign_init=function(){return c.asm.Wb.apply(null,arguments)},c._crypto_sign_keypair=function(){return c.asm.Xb.apply(null,arguments)},c._crypto_sign_messagebytes_max=function(){return c.asm.Yb.apply(null,arguments)},c._crypto_sign_open=function(){return c.asm.Zb.apply(null,arguments)},c._crypto_sign_publickeybytes=function(){return c.asm._b.apply(null,arguments)},c._crypto_sign_secretkeybytes=function(){return c.asm.$b.apply(null,arguments)},c._crypto_sign_seed_keypair=function(){return c.asm.ac.apply(null,arguments)},c._crypto_sign_seedbytes=function(){return c.asm.bc.apply(null,arguments)},c._crypto_sign_statebytes=function(){return c.asm.cc.apply(null,arguments)},c._crypto_sign_update=function(){return c.asm.dc.apply(null,arguments)},c._crypto_sign_verify_detached=function(){return c.asm.ec.apply(null,arguments)},c._free=function(){return c.asm.fc.apply(null,arguments)},c._malloc=function(){return c.asm.gc.apply(null,arguments)},c._randombytes=function(){return c.asm.hc.apply(null,arguments)},c._randombytes_buf=function(){return c.asm.ic.apply(null,arguments)},c._randombytes_buf_deterministic=function(){return c.asm.jc.apply(null,arguments)},c._randombytes_close=function(){return c.asm.kc.apply(null,arguments)},c._randombytes_random=function(){return c.asm.lc.apply(null,arguments)},c._randombytes_seedbytes=function(){return c.asm.mc.apply(null,arguments)},c._randombytes_stir=function(){return c.asm.nc.apply(null,arguments)},c._randombytes_uniform=function(){return c.asm.oc.apply(null,arguments)},c._sodium_base642bin=function(){return c.asm.pc.apply(null,arguments)},c._sodium_base64_encoded_len=function(){return c.asm.qc.apply(null,arguments)},c._sodium_bin2base64=function(){return c.asm.rc.apply(null,arguments)},c._sodium_bin2hex=function(){return c.asm.sc.apply(null,arguments)},c._sodium_hex2bin=function(){return c.asm.tc.apply(null,arguments)},c._sodium_init=function(){return c.asm.uc.apply(null,arguments)},c._sodium_library_minimal=function(){return c.asm.vc.apply(null,arguments)},c._sodium_library_version_major=function(){return c.asm.wc.apply(null,arguments)},c._sodium_library_version_minor=function(){return c.asm.xc.apply(null,arguments)},c._sodium_pad=function(){return c.asm.yc.apply(null,arguments)},c._sodium_unpad=function(){return c.asm.zc.apply(null,arguments)},c._sodium_version_string=function(){return c.asm.Ac.apply(null,arguments)},c.asm=ye,c.setValue=function(e,t,n,r){switch("*"===(n=n||"i8").charAt(n.length-1)&&(n="i32"),n){case"i1":case"i8":P[e>>0]=t;break;case"i16":F[e>>1]=t;break;case"i32":O[e>>2]=t;break;case"i64":oe=[t>>>0,(ae=t,+V(ae)>=1?ae>0?(0|W(+q(ae/4294967296),4294967295))>>>0:~~+z((ae-+(~~ae>>>0))/4294967296)>>>0:0)],O[e>>2]=oe[0],O[e+4>>2]=oe[1];break;case"float":R[e>>2]=t;break;case"double":T[e>>3]=t;break;default:te("invalid type for setValue: "+n)}},c.getValue=function(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return P[e>>0];case"i16":return F[e>>1];case"i32":case"i64":return O[e>>2];case"float":return R[e>>2];case"double":return T[e>>3];default:te("invalid type for getValue: "+t)}return null},c.UTF8ToString=H,ee=function e(){de||ve(),de||(ee=e)},c.run=ve,c.preInit)for("function"==typeof c.preInit&&(c.preInit=[c.preInit]);c.preInit.length>0;)c.preInit.pop()();ve()})).catch((function(){l.useBackupModule()})),"object"==(void 0===i?"undefined":u(i))&&"function"==typeof i.removeAllListeners&&(i.removeAllListeners("uncaughtException"),i.removeAllListeners("unhandledRejection")),s})?s.apply(t,[t]):s)||(e.exports=c)}).call(this,n(8),n(9),"/",n(3).Buffer)},function(e,t,n){"use strict";t.byteLength=function(e){var t=u(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,r=u(e),o=r[0],s=r[1],c=new a(function(e,t,n){return 3*(t+n)/4-n}(0,o,s)),l=0,f=s>0?o-4:o;for(n=0;n>16&255,c[l++]=t>>8&255,c[l++]=255&t;return 2===s&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,c[l++]=255&t),1===s&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t),c},t.fromByteArray=function(e){for(var t,n=e.length,i=n%3,a=[],o=0,s=n-i;os?s:o+16383));return 1===i?(t=e[n-1],a.push(r[t>>2]+r[t<<4&63]+"==")):2===i&&(t=(e[n-2]<<8)+e[n-1],a.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),a.join("")};for(var r=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,c=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var i,a,o=[],s=t;s>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,i){var a,o,s=8*i-r-1,c=(1<>1,l=-7,f=n?i-1:0,A=n?-1:1,h=e[t+f];for(f+=A,a=h&(1<<-l)-1,h>>=-l,l+=s;l>0;a=256*a+e[t+f],f+=A,l-=8);for(o=a&(1<<-l)-1,a>>=-l,l+=r;l>0;o=256*o+e[t+f],f+=A,l-=8);if(0===a)a=1-u;else{if(a===c)return o?NaN:1/0*(h?-1:1);o+=Math.pow(2,r),a-=u}return(h?-1:1)*o*Math.pow(2,a-r)},t.write=function(e,t,n,r,i,a){var o,s,c,u=8*a-i-1,l=(1<>1,A=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:a-1,p=r?1:-1,d=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=l):(o=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-o))<1&&(o--,c*=2),(t+=o+f>=1?A/c:A*Math.pow(2,1-f))*c>=2&&(o++,c/=2),o+f>=l?(s=0,o=l):o+f>=1?(s=(t*c-1)*Math.pow(2,i),o+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;e[n+h]=255&s,h+=p,s/=256,i-=8);for(o=o<0;e[n+h]=255&o,h+=p,o/=256,u-=8);e[n+h-p]|=128*d}},function(e,t){},function(e,t,n){"use strict";var r=n(2).Buffer,i=n(91);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,i=r.allocUnsafe(e>>>0),a=this.head,o=0;a;)t=i,n=o,a.data.copy(t,n),o+=a.data.length,a=a.next;return i},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function a(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new a(i.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new a(i.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(93),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(8))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,i,a,o,s,c=1,u={},l=!1,f=e.document,A=Object.getPrototypeOf&&Object.getPrototypeOf(e);A=A&&A.setTimeout?A:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){p(e)}))}:function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?(o="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(o)&&p(+t.data.slice(o.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),r=function(t){e.postMessage(o+t,"*")}):e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){p(e.data)},r=function(e){a.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(i=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):r=function(e){setTimeout(p,0,e)},A.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n>>2}function l(e,t,n,r){return 0===e?t&n|~t&r:2===e?t&n|t&r|n&r:t^n^r}r(c,i),c.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},c.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,i=0|this._b,a=0|this._c,s=0|this._d,c=0|this._e,f=0;f<16;++f)n[f]=e.readInt32BE(4*f);for(;f<80;++f)n[f]=n[f-3]^n[f-8]^n[f-14]^n[f-16];for(var A=0;A<80;++A){var h=~~(A/20),p=0|((t=r)<<5|t>>>27)+l(h,i,a,s)+c+n[A]+o[h];c=s,s=a,a=u(i),i=r,r=p}this._a=r+this._a|0,this._b=i+this._b|0,this._c=a+this._c|0,this._d=s+this._d|0,this._e=c+this._e|0},c.prototype._hash=function(){var e=a.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=c},function(e,t,n){var r=n(1),i=n(14),a=n(2).Buffer,o=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function c(){this.init(),this._w=s,i.call(this,64,56)}function u(e){return e<<5|e>>>27}function l(e){return e<<30|e>>>2}function f(e,t,n,r){return 0===e?t&n|~t&r:2===e?t&n|t&r|n&r:t^n^r}r(c,i),c.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},c.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,i=0|this._b,a=0|this._c,s=0|this._d,c=0|this._e,A=0;A<16;++A)n[A]=e.readInt32BE(4*A);for(;A<80;++A)n[A]=(t=n[A-3]^n[A-8]^n[A-14]^n[A-16])<<1|t>>>31;for(var h=0;h<80;++h){var p=~~(h/20),d=u(r)+f(p,i,a,s)+c+n[h]+o[p]|0;c=s,s=a,a=l(i),i=r,r=d}this._a=r+this._a|0,this._b=i+this._b|0,this._c=a+this._c|0,this._d=s+this._d|0,this._e=c+this._e|0},c.prototype._hash=function(){var e=a.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=c},function(e,t,n){var r=n(1),i=n(52),a=n(14),o=n(2).Buffer,s=new Array(64);function c(){this.init(),this._w=s,a.call(this,64,56)}r(c,i),c.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},c.prototype._hash=function(){var e=o.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=c},function(e,t,n){var r=n(1),i=n(53),a=n(14),o=n(2).Buffer,s=new Array(160);function c(){this.init(),this._w=s,a.call(this,128,112)}r(c,i),c.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},c.prototype._hash=function(){var e=o.allocUnsafe(48);function t(t,n,r){e.writeInt32BE(t,r),e.writeInt32BE(n,r+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=c},function(e,t,n){"use strict";var r=n(1),i=n(2).Buffer,a=n(11),o=i.alloc(128);function s(e,t){a.call(this,"digest"),"string"==typeof t&&(t=i.from(t)),this._alg=e,this._key=t,t.length>64?t=e(t):t.length<64&&(t=i.concat([t,o],64));for(var n=this._ipad=i.allocUnsafe(64),r=this._opad=i.allocUnsafe(64),s=0;s<64;s++)n[s]=54^t[s],r[s]=92^t[s];this._hash=[n]}r(s,a),s.prototype._update=function(e){this._hash.push(e)},s.prototype._final=function(){var e=this._alg(i.concat(this._hash));return this._alg(i.concat([this._opad,e]))},e.exports=s},function(e,t,n){e.exports=n(56)},function(e,t,n){(function(t,r){var i,a=n(58),o=n(59),s=n(60),c=n(2).Buffer,u=t.crypto&&t.crypto.subtle,l={sha:"SHA-1","sha-1":"SHA-1",sha1:"SHA-1",sha256:"SHA-256","sha-256":"SHA-256",sha384:"SHA-384","sha-384":"SHA-384","sha-512":"SHA-512",sha512:"SHA-512"},f=[];function A(e,t,n,r,i){return u.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]).then((function(e){return u.deriveBits({name:"PBKDF2",salt:t,iterations:n,hash:{name:i}},e,r<<3)})).then((function(e){return c.from(e)}))}e.exports=function(e,n,h,p,d,g){"function"==typeof d&&(g=d,d=void 0);var y=l[(d=d||"sha1").toLowerCase()];if(!y||"function"!=typeof t.Promise)return r.nextTick((function(){var t;try{t=s(e,n,h,p,d)}catch(e){return g(e)}g(null,t)}));if(a(e,n,h,p),"function"!=typeof g)throw new Error("No callback provided to pbkdf2");c.isBuffer(e)||(e=c.from(e,o)),c.isBuffer(n)||(n=c.from(n,o)),function(e,t){e.then((function(e){r.nextTick((function(){t(null,e)}))}),(function(e){r.nextTick((function(){t(e)}))}))}(function(e){if(t.process&&!t.process.browser)return Promise.resolve(!1);if(!u||!u.importKey||!u.deriveBits)return Promise.resolve(!1);if(void 0!==f[e])return f[e];var n=A(i=i||c.alloc(8),i,10,128,e).then((function(){return!0})).catch((function(){return!1}));return f[e]=n,n}(y).then((function(t){return t?A(e,n,h,p,y):s(e,n,h,p,d)})),g)}}).call(this,n(8),n(9))},function(e,t,n){var r=n(108),i=n(35),a=n(36),o=n(121),s=n(23);function c(e,t,n){if(e=e.toLowerCase(),a[e])return i.createCipheriv(e,t,n);if(o[e])return new r({key:t,iv:n,mode:e});throw new TypeError("invalid suite type")}function u(e,t,n){if(e=e.toLowerCase(),a[e])return i.createDecipheriv(e,t,n);if(o[e])return new r({key:t,iv:n,mode:e,decrypt:!0});throw new TypeError("invalid suite type")}t.createCipher=t.Cipher=function(e,t){var n,r;if(e=e.toLowerCase(),a[e])n=a[e].key,r=a[e].iv;else{if(!o[e])throw new TypeError("invalid suite type");n=8*o[e].key,r=o[e].iv}var i=s(t,!1,n,r);return c(e,i.key,i.iv)},t.createCipheriv=t.Cipheriv=c,t.createDecipher=t.Decipher=function(e,t){var n,r;if(e=e.toLowerCase(),a[e])n=a[e].key,r=a[e].iv;else{if(!o[e])throw new TypeError("invalid suite type");n=8*o[e].key,r=o[e].iv}var i=s(t,!1,n,r);return u(e,i.key,i.iv)},t.createDecipheriv=t.Decipheriv=u,t.listCiphers=t.getCiphers=function(){return Object.keys(o).concat(i.getCiphers())}},function(e,t,n){var r=n(11),i=n(109),a=n(1),o=n(2).Buffer,s={"des-ede3-cbc":i.CBC.instantiate(i.EDE),"des-ede3":i.EDE,"des-ede-cbc":i.CBC.instantiate(i.EDE),"des-ede":i.EDE,"des-cbc":i.CBC.instantiate(i.DES),"des-ecb":i.DES};function c(e){r.call(this);var t,n=e.mode.toLowerCase(),i=s[n];t=e.decrypt?"decrypt":"encrypt";var a=e.key;o.isBuffer(a)||(a=o.from(a)),"des-ede"!==n&&"des-ede-cbc"!==n||(a=o.concat([a,a.slice(0,8)]));var c=e.iv;o.isBuffer(c)||(c=o.from(c)),this._des=i.create({key:a,iv:c,type:t})}s.des=s["des-cbc"],s.des3=s["des-ede3-cbc"],e.exports=c,a(c,r),c.prototype._update=function(e){return o.from(this._des.update(e))},c.prototype._final=function(){return o.from(this._des.final())}},function(e,t,n){"use strict";t.utils=n(61),t.Cipher=n(34),t.DES=n(62),t.CBC=n(110),t.EDE=n(111)},function(e,t,n){"use strict";var r=n(6),i=n(1),a={};function o(e){r.equal(e.length,8,"Invalid IV length"),this.iv=new Array(8);for(var t=0;t15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},A.prototype.flush=function(){for(var e=16-this.cache.length,t=a.allocUnsafe(e),n=-1;++n>o%8,e._prev=a(e._prev,n?r:i);return s}function a(e,t){var n=e.length,i=-1,a=r.allocUnsafe(e.length);for(e=r.concat([e,r.from([t])]);++i>7;return a}t.encrypt=function(e,t,n){for(var a=t.length,o=r.allocUnsafe(a),s=-1;++s>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function o(e){this.h=e,this.state=r.alloc(16,0),this.cache=r.allocUnsafe(0)}o.prototype.ghash=function(e){for(var t=-1;++t0;t--)r[t]=r[t]>>>1|(1&r[t-1])<<31;r[0]=r[0]>>>1,n&&(r[0]=r[0]^225<<24)}this.state=a(i)},o.prototype.update=function(e){var t;for(this.cache=r.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},o.prototype.final=function(e,t){return this.cache.length&&this.ghash(r.concat([this.cache,i],16)),this.ghash(a([0,e,0,t])),this.state},e.exports=o},function(e,t,n){var r=n(66),i=n(2).Buffer,a=n(36),o=n(67),s=n(11),c=n(22),u=n(23);function l(e,t,n){s.call(this),this._cache=new f,this._last=void 0,this._cipher=new c.AES(t),this._prev=i.from(n),this._mode=e,this._autopadding=!0}function f(){this.cache=i.allocUnsafe(0)}function A(e,t,n){var s=a[e.toLowerCase()];if(!s)throw new TypeError("invalid suite type");if("string"==typeof n&&(n=i.from(n)),"GCM"!==s.mode&&n.length!==s.iv)throw new TypeError("invalid iv length "+n.length);if("string"==typeof t&&(t=i.from(t)),t.length!==s.key/8)throw new TypeError("invalid key length "+t.length);return"stream"===s.type?new o(s.module,t,n,!0):"auth"===s.type?new r(s.module,t,n,!0):new l(s.module,t,n)}n(1)(l,s),l.prototype._update=function(e){var t,n;this._cache.add(e);for(var r=[];t=this._cache.get(this._autopadding);)n=this._mode.decrypt(this,t),r.push(n);return i.concat(r)},l.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return function(e){var t=e[15];if(t<1||t>16)throw new Error("unable to decrypt data");for(var n=-1;++n16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},f.prototype.flush=function(){if(this.cache.length)return this.cache},t.createDecipher=function(e,t){var n=a[e.toLowerCase()];if(!n)throw new TypeError("invalid suite type");var r=u(t,!1,n.key,n.iv);return A(e,r.key,r.iv)},t.createDecipheriv=A},function(e,t){t["des-ecb"]={key:8,iv:0},t["des-cbc"]=t.des={key:8,iv:8},t["des-ede3-cbc"]=t.des3={key:24,iv:8},t["des-ede3"]={key:24,iv:0},t["des-ede-cbc"]={key:16,iv:8},t["des-ede"]={key:16,iv:0}},function(e,t,n){(function(e){var r=n(68),i=n(125),a=n(126),o={binary:!0,hex:!0,base64:!0};t.DiffieHellmanGroup=t.createDiffieHellmanGroup=t.getDiffieHellman=function(t){var n=new e(i[t].prime,"hex"),r=new e(i[t].gen,"hex");return new a(n,r)},t.createDiffieHellman=t.DiffieHellman=function t(n,i,s,c){return e.isBuffer(i)||void 0===o[i]?t(n,"binary",i,s):(i=i||"binary",c=c||"binary",s=s||new e([2]),e.isBuffer(s)||(s=new e(s,c)),"number"==typeof n?new a(r(n,s),s,!0):(e.isBuffer(n)||(n=new e(n,i)),new a(n,s,!0)))}}).call(this,n(3).Buffer)},function(e,t){},function(e,t){},function(e){e.exports=JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}')},function(e,t,n){(function(t){var r=n(4),i=new(n(69)),a=new r(24),o=new r(11),s=new r(10),c=new r(3),u=new r(7),l=n(68),f=n(13);function A(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this._pub=new r(e),this}function h(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this._priv=new r(e),this}e.exports=d;var p={};function d(e,t,n){this.setGenerator(t),this.__prime=new r(e),this._prime=r.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,n?(this.setPublicKey=A,this.setPrivateKey=h):this._primeCode=8}function g(e,n){var r=new t(e.toArray());return n?r.toString(n):r}Object.defineProperty(d.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function(e,t){var n=t.toString("hex"),r=[n,e.toString(16)].join("_");if(r in p)return p[r];var f,A=0;if(e.isEven()||!l.simpleSieve||!l.fermatTest(e)||!i.test(e))return A+=1,A+="02"===n||"05"===n?8:4,p[r]=A,A;switch(i.test(e.shrn(1))||(A+=2),n){case"02":e.mod(a).cmp(o)&&(A+=8);break;case"05":(f=e.mod(s)).cmp(c)&&f.cmp(u)&&(A+=8);break;default:A+=4}return p[r]=A,A}(this.__prime,this.__gen)),this._primeCode}}),d.prototype.generateKeys=function(){return this._priv||(this._priv=new r(f(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},d.prototype.computeSecret=function(e){var n=(e=(e=new r(e)).toRed(this._prime)).redPow(this._priv).fromRed(),i=new t(n.toArray()),a=this.getPrime();if(i.length0&&n.ishrn(r),n}function f(e,n,i){var a,o;do{for(a=new t(0);8*a.length=0&&(o=t,s=n),r.negative&&(r=r.neg(),a=a.neg()),o.negative&&(o=o.neg(),s=s.neg()),[{a:r,b:a},{a:o,b:s}]},c.prototype._endoSplit=function(e){var t=this.endo.basis,n=t[0],r=t[1],i=r.b.mul(e).divRound(this.n),a=n.b.neg().mul(e).divRound(this.n),o=i.mul(n.a),s=a.mul(r.a),c=i.mul(n.b),u=a.mul(r.b);return{k1:e.sub(o).sub(s),k2:c.add(u).neg()}},c.prototype.pointFromX=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),r=n.redSqrt();if(0!==r.redSqr().redSub(n).cmp(this.zero))throw new Error("invalid point");var a=r.fromRed().isOdd();return(t&&!a||!t&&a)&&(r=r.redNeg()),this.point(e,r)},c.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,n=e.y,r=this.a.redMul(t),i=t.redSqr().redMul(t).redIAdd(r).redIAdd(this.b);return 0===n.redSqr().redISub(i).cmpn(0)},c.prototype._endoWnafMulAdd=function(e,t,n){for(var r=this._endoWnafT1,i=this._endoWnafT2,a=0;a":""},u.prototype.isInfinity=function(){return this.inf},u.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var n=t.redSqr().redISub(this.x).redISub(e.x),r=t.redMul(this.x.redSub(n)).redISub(this.y);return this.curve.point(n,r)},u.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,n=this.x.redSqr(),r=e.redInvm(),i=n.redAdd(n).redIAdd(n).redIAdd(t).redMul(r),a=i.redSqr().redISub(this.x.redAdd(this.x)),o=i.redMul(this.x.redSub(a)).redISub(this.y);return this.curve.point(a,o)},u.prototype.getX=function(){return this.x.fromRed()},u.prototype.getY=function(){return this.y.fromRed()},u.prototype.mul=function(e){return e=new i(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function(e,t,n){var r=[this,t],i=[e,n];return this.curve.endo?this.curve._endoWnafMulAdd(r,i):this.curve._wnafMulAdd(1,r,i,2)},u.prototype.jmulAdd=function(e,t,n){var r=[this,t],i=[e,n];return this.curve.endo?this.curve._endoWnafMulAdd(r,i,!0):this.curve._wnafMulAdd(1,r,i,2,!0)},u.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},u.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var n=this.precomputed,r=function(e){return e.neg()};t.precomputed={naf:n.naf&&{wnd:n.naf.wnd,points:n.naf.points.map(r)},doubles:n.doubles&&{step:n.doubles.step,points:n.doubles.points.map(r)}}}return t},u.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},a(l,o.BasePoint),c.prototype.jpoint=function(e,t,n){return new l(this,e,t,n)},l.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),n=this.x.redMul(t),r=this.y.redMul(t).redMul(e);return this.curve.point(n,r)},l.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},l.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),n=this.z.redSqr(),r=this.x.redMul(t),i=e.x.redMul(n),a=this.y.redMul(t.redMul(e.z)),o=e.y.redMul(n.redMul(this.z)),s=r.redSub(i),c=a.redSub(o);if(0===s.cmpn(0))return 0!==c.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=s.redSqr(),l=u.redMul(s),f=r.redMul(u),A=c.redSqr().redIAdd(l).redISub(f).redISub(f),h=c.redMul(f.redISub(A)).redISub(a.redMul(l)),p=this.z.redMul(e.z).redMul(s);return this.curve.jpoint(A,h,p)},l.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),n=this.x,r=e.x.redMul(t),i=this.y,a=e.y.redMul(t).redMul(this.z),o=n.redSub(r),s=i.redSub(a);if(0===o.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=o.redSqr(),u=c.redMul(o),l=n.redMul(c),f=s.redSqr().redIAdd(u).redISub(l).redISub(l),A=s.redMul(l.redISub(f)).redISub(i.redMul(u)),h=this.z.redMul(o);return this.curve.jpoint(f,A,h)},l.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,n=0;n=0)return!1;if(n.redIAdd(i),0===this.x.cmp(n))return!0}},l.prototype.inspect=function(){return this.isInfinity()?"":""},l.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(e,t,n){"use strict";var r=n(4),i=n(1),a=n(24),o=n(7);function s(e){a.call(this,"mont",e),this.a=new r(e.a,16).toRed(this.red),this.b=new r(e.b,16).toRed(this.red),this.i4=new r(4).toRed(this.red).redInvm(),this.two=new r(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function c(e,t,n){a.BasePoint.call(this,e,"projective"),null===t&&null===n?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new r(t,16),this.z=new r(n,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}i(s,a),e.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,n=t.redSqr(),r=n.redMul(t).redAdd(n.redMul(this.a)).redAdd(t);return 0===r.redSqrt().redSqr().cmp(r)},i(c,a.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(o.toArray(e,t),1)},s.prototype.point=function(e,t){return new c(this,e,t)},s.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},c.prototype.precompute=function(){},c.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},c.fromJSON=function(e,t){return new c(e,t[0],t[1]||e.one)},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},c.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),n=e.redSub(t),r=e.redMul(t),i=n.redMul(t.redAdd(this.curve.a24.redMul(n)));return this.curve.point(r,i)},c.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.diffAdd=function(e,t){var n=this.x.redAdd(this.z),r=this.x.redSub(this.z),i=e.x.redAdd(e.z),a=e.x.redSub(e.z).redMul(n),o=i.redMul(r),s=t.z.redMul(a.redAdd(o).redSqr()),c=t.x.redMul(a.redISub(o).redSqr());return this.curve.point(s,c)},c.prototype.mul=function(e){for(var t=e.clone(),n=this,r=this.curve.point(null,null),i=[];0!==t.cmpn(0);t.iushrn(1))i.push(t.andln(1));for(var a=i.length-1;a>=0;a--)0===i[a]?(n=n.diffAdd(r,this),r=r.dbl()):(r=n.diffAdd(r,this),n=n.dbl());return r},c.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},c.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(e,t,n){"use strict";var r=n(7),i=n(4),a=n(1),o=n(24),s=r.assert;function c(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,o.call(this,"edwards",e),this.a=new i(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new i(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new i(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),s(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function u(e,t,n,r,a){o.BasePoint.call(this,e,"projective"),null===t&&null===n&&null===r?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new i(t,16),this.y=new i(n,16),this.z=r?new i(r,16):this.curve.one,this.t=a&&new i(a,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}a(c,o),e.exports=c,c.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},c.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},c.prototype.jpoint=function(e,t,n,r){return this.point(e,t,n,r)},c.prototype.pointFromX=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr(),r=this.c2.redSub(this.a.redMul(n)),a=this.one.redSub(this.c2.redMul(this.d).redMul(n)),o=r.redMul(a.redInvm()),s=o.redSqrt();if(0!==s.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");var c=s.fromRed().isOdd();return(t&&!c||!t&&c)&&(s=s.redNeg()),this.point(e,s)},c.prototype.pointFromY=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr(),r=n.redSub(this.c2),a=n.redMul(this.d).redMul(this.c2).redSub(this.a),o=r.redMul(a.redInvm());if(0===o.cmp(this.zero)){if(t)throw new Error("invalid point");return this.point(this.zero,e)}var s=o.redSqrt();if(0!==s.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");return s.fromRed().isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},c.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),n=e.y.redSqr(),r=t.redMul(this.a).redAdd(n),i=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(n)));return 0===r.cmp(i)},a(u,o.BasePoint),c.prototype.pointFromJSON=function(e){return u.fromJSON(this,e)},c.prototype.point=function(e,t,n,r){return new u(this,e,t,n,r)},u.fromJSON=function(e,t){return new u(e,t[0],t[1],t[2])},u.prototype.inspect=function(){return this.isInfinity()?"":""},u.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},u.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),n=this.z.redSqr();n=n.redIAdd(n);var r=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),a=r.redAdd(t),o=a.redSub(n),s=r.redSub(t),c=i.redMul(o),u=a.redMul(s),l=i.redMul(s),f=o.redMul(a);return this.curve.point(c,u,f,l)},u.prototype._projDbl=function(){var e,t,n,r=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),a=this.y.redSqr();if(this.curve.twisted){var o=(u=this.curve._mulA(i)).redAdd(a);if(this.zOne)e=r.redSub(i).redSub(a).redMul(o.redSub(this.curve.two)),t=o.redMul(u.redSub(a)),n=o.redSqr().redSub(o).redSub(o);else{var s=this.z.redSqr(),c=o.redSub(s).redISub(s);e=r.redSub(i).redISub(a).redMul(c),t=o.redMul(u.redSub(a)),n=o.redMul(c)}}else{var u=i.redAdd(a);s=this.curve._mulC(this.z).redSqr(),c=u.redSub(s).redSub(s),e=this.curve._mulC(r.redISub(u)).redMul(c),t=this.curve._mulC(u).redMul(i.redISub(a)),n=u.redMul(c)}return this.curve.point(e,t,n)},u.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),n=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),r=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),a=n.redSub(t),o=i.redSub(r),s=i.redAdd(r),c=n.redAdd(t),u=a.redMul(o),l=s.redMul(c),f=a.redMul(c),A=o.redMul(s);return this.curve.point(u,l,A,f)},u.prototype._projAdd=function(e){var t,n,r=this.z.redMul(e.z),i=r.redSqr(),a=this.x.redMul(e.x),o=this.y.redMul(e.y),s=this.curve.d.redMul(a).redMul(o),c=i.redSub(s),u=i.redAdd(s),l=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(a).redISub(o),f=r.redMul(c).redMul(l);return this.curve.twisted?(t=r.redMul(u).redMul(o.redSub(this.curve._mulA(a))),n=c.redMul(u)):(t=r.redMul(u).redMul(o.redSub(a)),n=this.curve._mulC(c).redMul(u)),this.curve.point(f,t,n)},u.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},u.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function(e,t,n){return this.curve._wnafMulAdd(1,[this,t],[e,n],2,!1)},u.prototype.jmulAdd=function(e,t,n){return this.curve._wnafMulAdd(1,[this,t],[e,n],2,!0)},u.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},u.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u.prototype.getX=function(){return this.normalize(),this.x.fromRed()},u.prototype.getY=function(){return this.normalize(),this.y.fromRed()},u.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},u.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var n=e.clone(),r=this.curve.redN.redMul(this.z);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(r),0===this.x.cmp(t))return!0}},u.prototype.toP=u.prototype.normalize,u.prototype.mixedAdd=u.prototype.add},function(e,t,n){"use strict";t.sha1=n(134),t.sha224=n(135),t.sha256=n(73),t.sha384=n(136),t.sha512=n(74)},function(e,t,n){"use strict";var r=n(10),i=n(18),a=n(72),o=r.rotl32,s=r.sum32,c=r.sum32_5,u=a.ft_1,l=i.BlockHash,f=[1518500249,1859775393,2400959708,3395469782];function A(){if(!(this instanceof A))return new A;l.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}r.inherits(A,l),e.exports=A,A.blockSize=512,A.outSize=160,A.hmacStrength=80,A.padLength=64,A.prototype._update=function(e,t){for(var n=this.W,r=0;r<16;r++)n[r]=e[t+r];for(;rthis.blockSize&&(e=(new this.Hash).update(e).digest()),i(e.length<=this.blockSize);for(var t=e.length;t0))return o.iaddn(1),this.keyFromPrivate(o)}},A.prototype._truncateToN=function(e,t){var n=8*e.byteLength()-this.n.bitLength();return n>0&&(e=e.ushrn(n)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},A.prototype.sign=function(e,t,n,o){"object"===r(n)&&(o=n,n=null),o||(o={}),t=this.keyFromPrivate(t,n),e=this._truncateToN(new i(e,16));for(var s=this.n.byteLength(),c=t.getPrivate().toArray("be",s),u=e.toArray("be",s),l=new a({hash:this.hash,entropy:c,nonce:u,pers:o.pers,persEnc:o.persEnc||"utf8"}),A=this.n.sub(new i(1)),h=0;;h++){var p=o.k?o.k(h):new i(l.generate(this.n.byteLength()));if(!((p=this._truncateToN(p,!0)).cmpn(1)<=0||p.cmp(A)>=0)){var d=this.g.mul(p);if(!d.isInfinity()){var g=d.getX(),y=g.umod(this.n);if(0!==y.cmpn(0)){var v=p.invm(this.n).mul(y.mul(t.getPrivate()).iadd(e));if(0!==(v=v.umod(this.n)).cmpn(0)){var b=(d.getY().isOdd()?1:0)|(0!==g.cmp(y)?2:0);return o.canonical&&v.cmp(this.nh)>0&&(v=this.n.sub(v),b^=1),new f({r:y,s:v,recoveryParam:b})}}}}}},A.prototype.verify=function(e,t,n,r){e=this._truncateToN(new i(e,16)),n=this.keyFromPublic(n,r);var a=(t=new f(t,"hex")).r,o=t.s;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;var s,c=o.invm(this.n),u=c.mul(e).umod(this.n),l=c.mul(a).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(u,n.getPublic(),l)).isInfinity()&&s.eqXToP(a):!(s=this.g.mulAdd(u,n.getPublic(),l)).isInfinity()&&0===s.getX().umod(this.n).cmp(a)},A.prototype.recoverPubKey=function(e,t,n,r){u((3&n)===n,"The recovery param is more than two bits"),t=new f(t,r);var a=this.n,o=new i(e),s=t.r,c=t.s,l=1&n,A=n>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&A)throw new Error("Unable to find sencond key candinate");s=A?this.curve.pointFromX(s.add(this.curve.n),l):this.curve.pointFromX(s,l);var h=t.r.invm(a),p=a.sub(o).mul(h).umod(a),d=c.mul(h).umod(a);return this.g.mulAdd(p,s,d)},A.prototype.getKeyRecoveryParam=function(e,t,n,r){if(null!==(t=new f(t,r)).recoveryParam)return t.recoveryParam;for(var i=0;i<4;i++){var a;try{a=this.recoverPubKey(e,t,i)}catch(e){continue}if(a.eq(n))return i}throw new Error("Unable to find valid recovery factor")}},function(e,t,n){"use strict";var r=n(41),i=n(70),a=n(6);function o(e){if(!(this instanceof o))return new o(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=i.toArray(e.entropy,e.entropyEnc||"hex"),n=i.toArray(e.nonce,e.nonceEnc||"hex"),r=i.toArray(e.pers,e.persEnc||"hex");a(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,n,r)}e.exports=o,o.prototype._init=function(e,t,n){var r=e.concat(t).concat(n);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(n||[])),this._reseed=1},o.prototype.generate=function(e,t,n,r){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof t&&(r=n,n=t,t=null),n&&(n=i.toArray(n,r||"hex"),this._update(n));for(var a=[];a.length"}},function(e,t,n){"use strict";var r=n(4),i=n(7),a=i.assert;function o(e,t){if(e instanceof o)return e;this._importDER(e,t)||(a(e.r&&e.s,"Signature without r or s"),this.r=new r(e.r,16),this.s=new r(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function s(){this.place=0}function c(e,t){var n=e[t.place++];if(!(128&n))return n;for(var r=15&n,i=0,a=0,o=t.place;a>>3);for(e.push(128|n);--n;)e.push(t>>>(n<<3)&255);e.push(t)}}e.exports=o,o.prototype._importDER=function(e,t){e=i.toArray(e,t);var n=new s;if(48!==e[n.place++])return!1;if(c(e,n)+n.place!==e.length)return!1;if(2!==e[n.place++])return!1;var a=c(e,n),o=e.slice(n.place,a+n.place);if(n.place+=a,2!==e[n.place++])return!1;var u=c(e,n);if(e.length!==u+n.place)return!1;var l=e.slice(n.place,u+n.place);return 0===o[0]&&128&o[1]&&(o=o.slice(1)),0===l[0]&&128&l[1]&&(l=l.slice(1)),this.r=new r(o),this.s=new r(l),this.recoveryParam=null,!0},o.prototype.toDER=function(e){var t=this.r.toArray(),n=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&n[0]&&(n=[0].concat(n)),t=u(t),n=u(n);!(n[0]||128&n[1]);)n=n.slice(1);var r=[2];l(r,t.length),(r=r.concat(t)).push(2),l(r,n.length);var a=r.concat(n),o=[48];return l(o,a.length),o=o.concat(a),i.encode(o,e)}},function(e,t,n){"use strict";var r=n(41),i=n(40),a=n(7),o=a.assert,s=a.parseBytes,c=n(145),u=n(146);function l(e){if(o("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof l))return new l(e);e=i[e].curve,this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=r.sha512}e.exports=l,l.prototype.sign=function(e,t){e=s(e);var n=this.keyFromSecret(t),r=this.hashInt(n.messagePrefix(),e),i=this.g.mul(r),a=this.encodePoint(i),o=this.hashInt(a,n.pubBytes(),e).mul(n.priv()),c=r.add(o).umod(this.curve.n);return this.makeSignature({R:i,S:c,Rencoded:a})},l.prototype.verify=function(e,t,n){e=s(e),t=this.makeSignature(t);var r=this.keyFromPublic(n),i=this.hashInt(t.Rencoded(),r.pubBytes(),e),a=this.g.mul(t.S());return t.R().add(r.pub().mul(i)).eq(a)},l.prototype.hashInt=function(){for(var e=this.hash(),t=0;t=t)throw new Error("invalid sig")}e.exports=function(e,n,c,u,l){var f=a(c);if("ec"===f.type){if("ecdsa"!==u&&"ecdsa/rsa"!==u)throw new Error("wrong public key type");return function(e,t,n){var r=o[n.data.algorithm.curve.join(".")];if(!r)throw new Error("unknown curve "+n.data.algorithm.curve.join("."));var a=new i(r),s=n.data.subjectPrivateKey.data;return a.verify(t,e,s)}(e,n,f)}if("dsa"===f.type){if("dsa"!==u)throw new Error("wrong public key type");return function(e,t,n){var i=n.data.p,o=n.data.q,c=n.data.g,u=n.data.pub_key,l=a.signature.decode(e,"der"),f=l.s,A=l.r;s(f,o),s(A,o);var h=r.mont(i),p=f.invm(o);return 0===c.toRed(h).redPow(new r(t).mul(p).mod(o)).fromRed().mul(u.toRed(h).redPow(A.mul(p).mod(o)).fromRed()).mod(i).mod(o).cmp(A)}(e,n,f)}if("rsa"!==u&&"ecdsa/rsa"!==u)throw new Error("wrong public key type");n=t.concat([l,n]);for(var A=f.modulus.byteLength(),h=[1],p=0;n.length+h.length+2n-A-2)throw new Error("message too long");var h=f.alloc(n-r-A-2),p=n-l-1,d=i(l),g=s(f.concat([u,h,f.alloc(1,1),t],p),o(d,p)),y=s(d,o(g,l));return new c(f.concat([f.alloc(1),y,g],n))}(p,t);else if(1===A)h=function(e,t,n){var r,a=t.length,o=e.modulus.byteLength();if(a>o-11)throw new Error("message too long");return r=n?f.alloc(o-a-3,255):function(e){for(var t,n=f.allocUnsafe(e),r=0,a=i(2*e),o=0;r=0)throw new Error("data too long for modulus")}return n?l(h,p):u(h,p)}},function(e,t,n){var r=n(25),i=n(80),a=n(81),o=n(4),s=n(38),c=n(15),u=n(82),l=n(2).Buffer;e.exports=function(e,t,n){var f;f=e.padding?e.padding:n?1:4;var A,h=r(e),p=h.modulus.byteLength();if(t.length>p||new o(t).cmp(h.modulus)>=0)throw new Error("decryption error");A=n?u(new o(t),h):s(t,h);var d=l.alloc(p-A.length);if(A=l.concat([d,A],p),4===f)return function(e,t){var n=e.modulus.byteLength(),r=c("sha1").update(l.alloc(0)).digest(),o=r.length;if(0!==t[0])throw new Error("decryption error");var s=t.slice(1,o+1),u=t.slice(o+1),f=a(s,i(u,o)),A=a(u,i(f,n-o-1));if(function(e,t){e=l.from(e),t=l.from(t);var n=0,r=e.length;e.length!==t.length&&(n++,r=Math.min(e.length,t.length));for(var i=-1;++i=t.length){a++;break}var o=t.slice(2,i-1);if(("0002"!==r.toString("hex")&&!n||"0001"!==r.toString("hex")&&n)&&a++,o.length<8&&a++,a)throw new Error("decryption error");return t.slice(i)}(0,A,n);if(3===f)return A;throw new Error("unknown padding")}},function(e,t,n){"use strict";(function(e,r){function i(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var a=n(2),o=n(13),s=a.Buffer,c=a.kMaxLength,u=e.crypto||e.msCrypto,l=Math.pow(2,32)-1;function f(e,t){if("number"!=typeof e||e!=e)throw new TypeError("offset must be a number");if(e>l||e<0)throw new TypeError("offset must be a uint32");if(e>c||e>t)throw new RangeError("offset out of range")}function A(e,t,n){if("number"!=typeof e||e!=e)throw new TypeError("size must be a number");if(e>l||e<0)throw new TypeError("size must be a uint32");if(e+t>n||e>c)throw new RangeError("buffer too small")}function h(e,t,n,i){if(r.browser){var a=e.buffer,s=new Uint8Array(a,t,n);return u.getRandomValues(s),i?void r.nextTick((function(){i(null,e)})):e}if(!i)return o(n).copy(e,t),e;o(n,(function(n,r){if(n)return i(n);r.copy(e,t),i(null,e)}))}u&&u.getRandomValues||!r.browser?(t.randomFill=function(t,n,r,i){if(!(s.isBuffer(t)||t instanceof e.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof n)i=n,n=0,r=t.length;else if("function"==typeof r)i=r,r=t.length-n;else if("function"!=typeof i)throw new TypeError('"cb" argument must be a function');return f(n,t.length),A(r,n,t.length),h(t,n,r,i)},t.randomFillSync=function(t,n,r){if(void 0===n&&(n=0),!(s.isBuffer(t)||t instanceof e.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return f(n,t.length),void 0===r&&(r=t.length-n),A(r,n,t.length),h(t,n,r)}):(t.randomFill=i,t.randomFillSync=i)}).call(this,n(8),n(9))},function(e,t){e.exports=i,i.strict=a,i.loose=o;var n=Object.prototype.toString,r={"[object Int8Array]":!0,"[object Int16Array]":!0,"[object Int32Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Uint16Array]":!0,"[object Uint32Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0};function i(e){return a(e)||o(e)}function a(e){return e instanceof Int8Array||e instanceof Int16Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Uint16Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array}function o(e){return r[n.call(e)]}},function(e,t,n){"use strict";n.r(t),n.d(t,"SNWebCrypto",(function(){return $})),n.d(t,"isWebCryptoAvailable",(function(){return p})),n.d(t,"Buffer",(function(){return l.Buffer})),n.d(t,"stringToArrayBuffer",(function(){return y})),n.d(t,"arrayBufferToString",(function(){return b})),n.d(t,"arrayBufferToHexString",(function(){return I})),n.d(t,"hexStringToArrayBuffer",(function(){return C})),n.d(t,"base64ToArrayBuffer",(function(){return E})),n.d(t,"arrayBufferToBase64",(function(){return _})),n.d(t,"hexToBase64",(function(){return Q})),n.d(t,"base64ToHex",(function(){return D})),n.d(t,"base64Encode",(function(){return M})),n.d(t,"base64Decode",(function(){return O})),n.d(t,"toBuffer",(function(){return T}));var r={};n.r(r),n.d(r,"ready",(function(){return s.ready})),n.d(r,"crypto_pwhash",(function(){return s.crypto_pwhash})),n.d(r,"crypto_pwhash_ALG_DEFAULT",(function(){return s.crypto_pwhash_ALG_DEFAULT})),n.d(r,"crypto_aead_xchacha20poly1305_ietf_encrypt",(function(){return s.crypto_aead_xchacha20poly1305_ietf_encrypt})),n.d(r,"crypto_aead_xchacha20poly1305_ietf_decrypt",(function(){return s.crypto_aead_xchacha20poly1305_ietf_decrypt})),n.d(r,"to_base64",(function(){return s.to_base64})),n.d(r,"from_base64",(function(){return s.from_base64})),n.d(r,"base64_variants",(function(){return s.base64_variants})),n.d(r,"from_hex",(function(){return s.from_hex})),n.d(r,"to_hex",(function(){return s.to_hex})),n.d(r,"from_string",(function(){return s.from_string})),n.d(r,"to_string",(function(){return s.to_string}));var i,a=n(0),o=n.n(a),s=n(5),c=n(83),u=n.n(c),l=n(3);function f(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function A(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){f(a,r,i,o,s,"next",e)}function s(e){f(a,r,i,o,s,"throw",e)}o(void 0)}))}}function h(){return window}function p(){return!("undefined"!=typeof document&&document.documentMode||/Edge/.test(navigator.userAgent))&&h().crypto&&!!h().crypto.subtle}function d(){var e=h(),t=e.crypto||e.msCrypto;if(t){var n=new Uint32Array(4);t.getRandomValues(n);var r=-1;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){r++;var t=n[r>>3]>>r%8*4&15;return("x"===e?t:3&t|8).toString(16)}))}var i=(new Date).getTime();return e.performance&&"function"==typeof e.performance.now&&(i+=performance.now()),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=(i+16*Math.random())%16|0;return i=Math.floor(i/16),("x"===e?t:3&t|8).toString(16)}))}function g(e){return"string"==typeof e||e instanceof String}function y(e){return v.apply(this,arguments)}function v(){return(v=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(g(t)){e.next=2;break}throw Error("Attempting to convert non-string to arrayBuffer");case 2:return e.next=4,s.ready;case 4:return e.abrupt("return",Object(s.from_string)(t));case 5:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function b(e){return m.apply(this,arguments)}function m(){return(m=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.to_string)(t));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function I(e){return w.apply(this,arguments)}function w(){return(w=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.to_hex)(l.Buffer.from(t)));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function C(e){return B.apply(this,arguments)}function B(){return(B=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.from_hex)(t));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function E(e){return k.apply(this,arguments)}function k(){return(k=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.from_base64)(t,s.base64_variants.ORIGINAL));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function _(e){return S.apply(this,arguments)}function S(){return(S=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.to_base64)(l.Buffer.from(t),s.base64_variants.ORIGINAL));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Q(e){return x.apply(this,arguments)}function x(){return(x=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.to_base64)(Object(s.from_hex)(t),s.base64_variants.ORIGINAL));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function D(e){return P.apply(this,arguments)}function P(){return(P=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.to_hex)(Object(s.from_base64)(t,s.base64_variants.ORIGINAL)));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function M(e){return F.apply(this,arguments)}function F(){return(F=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.to_base64)(t,s.base64_variants.ORIGINAL));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function O(e){return R.apply(this,arguments)}function R(){return(R=A(o.a.mark((function e(t){return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.ready;case 2:return e.abrupt("return",Object(s.to_string)(Object(s.from_base64)(t,s.base64_variants.ORIGINAL)));case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function T(e){return j.apply(this,arguments)}function j(){return(j=A(o.a.mark((function e(t){var n,r=arguments;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.length>1&&void 0!==r[1]?r[1]:i.Binary,!l.Buffer.isBuffer(t)){e.next=5;break}return e.abrupt("return",t);case 5:if(null!==t){e.next=9;break}return e.abrupt("return",null);case 9:if("string"!=typeof t){e.next=13;break}return e.abrupt("return",l.Buffer.from(t,n));case 13:if(!(t instanceof Uint8Array)){e.next=17;break}return e.abrupt("return",u()(t));case 17:throw new TypeError("Invalid type; string or buffer expected");case 18:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function H(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function N(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function o(e){H(a,r,i,o,s,"next",e)}function s(e){H(a,r,i,o,s,"throw",e)}o(void 0)}))}}function U(e,t){for(var n=0;n0}function i(e,n){n=n||Error;var r="https://errors.angularjs.org/1.7.9/",i=r.replace(".","\\.")+"[\\s\\S]*",a=new RegExp(i,"g");return function(){var i,o,s=arguments[0],c=arguments[1],u="["+(e?e+":":"")+s+"] ",l=fe(arguments,2).map((function(e){return He(e,t.objectMaxDepth)}));if(u+=c.replace(/\{\d+\}/g,(function(e){var t=+e.slice(1,-1);return t=0&&t-1 in e||"function"==typeof e.item)}function x(e,t,n){var r,i;if(e)if(K(e))for(r in e)"prototype"!==r&&"length"!==r&&"name"!==r&&e.hasOwnProperty(r)&&t.call(n,e[r],r,e);else if(V(e)||w(e)){var a="object"!=typeof e;for(r=0,i=e.length;r=0&&e.splice(n,1),n}function ae(e,t,n){var i,a,o=[],s=[];if(n=r(n)?n:NaN,t){if((a=t)&&H(a.length)&&X.test(m.call(a))||(i=t,"[object ArrayBuffer]"===m.call(i)))throw g("cpta","Can't copy! TypedArray destination cannot be mutated.");if(e===t)throw g("cpi","Can't copy! Source and destination are identical.");return V(t)?t.length=0:x(t,(function(e,n){"$$hashKey"!==n&&delete t[n]})),o.push(e),s.push(t),c(e,t,n)}return u(e,n);function c(e,t,n){if(--n<0)return"...";var r,i=t.$$hashKey;if(V(e))for(var a=0,o=e.length;a2?fe(arguments,2):[];return!K(t)||t instanceof RegExp?t:n.length?function(){return arguments.length?t.apply(e,le(n,arguments,0)):t.apply(e,n)}:function(){return arguments.length?t.apply(e,arguments):t.call(e)}}function de(t,n){var r=n;return"string"==typeof t&&"$"===t.charAt(0)&&"$"===t.charAt(1)?r=void 0:J(n)?r="$WINDOW":n&&e.document===n?r="$DOCUMENT":G(n)&&(r="$SCOPE"),r}function he(e,t){if(!F(e))return H(t)||(t=t?2:null),JSON.stringify(e,de,t)}function ve(e){return B(e)?JSON.parse(e):e}var me=/:/g;function ye(e,t){e=e.replace(me,"");var n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return E(n)?t:n}function ge(e,t){return(e=new Date(e.getTime())).setMinutes(e.getMinutes()+t),e}function be(e,t,n){n=n?-1:1;var r=e.getTimezoneOffset();return ge(e,n*(ye(t,r)-r))}function ke(e){e=o(e).clone().empty();var t=o("

").append(e).html();try{return e[0].nodeType===Ue?f(t):t.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,(function(e,t){return"<"+f(t)}))}catch(e){return f(t)}}function we(e){try{return decodeURIComponent(e)}catch(e){}}function xe(e){var t={};return x((e||"").split("&"),(function(e){var n,r,i;e&&(r=e=e.replace(/\+/g,"%20"),-1!==(n=e.indexOf("="))&&(r=e.substring(0,n),i=e.substring(n+1)),N(r=we(r))&&(i=!N(i)||we(i),l.call(t,r)?V(t[r])?t[r].push(i):t[r]=[t[r],i]:t[r]=i))})),t}function Se(e){return $e(e,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function $e(e,t){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,t?"%20":"+")}var _e=["ng-","data-ng-","ng:","x-ng-"];var Me=function(t){var n=t.currentScript;if(!n)return!0;if(!(n instanceof e.HTMLScriptElement||n instanceof e.SVGScriptElement))return!1;var r=n.attributes;return[r.getNamedItem("src"),r.getNamedItem("href"),r.getNamedItem("xlink:href")].every((function(e){if(!e)return!0;if(!e.value)return!1;var n=t.createElement("a");if(n.href=e.value,t.location.origin===n.origin)return!0;switch(n.protocol){case"http:":case"https:":case"ftp:":case"blob:":case"file:":case"data:":return!0;default:return!1}}))}(e.document);function Ce(t,n){var r,i,a={};if(x(_e,(function(e){var n=e+"app";!r&&t.hasAttribute&&t.hasAttribute(n)&&(r=t,i=t.getAttribute(n))})),x(_e,(function(e){var n,a=e+"app";!r&&(n=t.querySelector("["+a.replace(":","\\:")+"]"))&&(r=n,i=n.getAttribute(a))})),r){if(!Me)return void e.console.error("AngularJS: disabling automatic bootstrap. @@ -39,7 +39,7 @@ - + diff --git a/package-lock.json b/package-lock.json index ae96eea2e..e8b3a38b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "standard-notes-web", - "version": "3.3.6", + "version": "3.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/cli": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.8.4.tgz", - "integrity": "sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.10.4.tgz", + "integrity": "sha512-xX99K4V1BzGJdQANK5cwK+EpF1vP9gvqhn+iWvG+TubCjecplW7RSQimJ2jcCvu6fnK5pY6mZMdu6EWTj32QVA==", "dev": true, "requires": { "chokidar": "^2.1.8", @@ -31,33 +31,34 @@ } }, "@babel/compat-data": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.4.tgz", - "integrity": "sha512-lHLhlsvFjJAqNU71b7k6Vv9ewjmTXKvqaMv7n0G1etdCabWLw3nEYE8mmgoVOxMIFE07xOvo7H7XBASirX6Rrg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz", + "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==", "dev": true, "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.12.0", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz", - "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.4.tgz", + "integrity": "sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.4", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -65,107 +66,107 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.10.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -188,21 +189,21 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz", + "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.8.7", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -213,21 +214,21 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", - "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -235,462 +236,220 @@ } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", - "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } } } }, - "@babel/helper-call-delegate": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz", - "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", - "dev": true - }, - "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, "@babel/helper-compilation-targets": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz", - "integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", + "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.4", - "browserslist": "^4.8.5", + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", "invariant": "^2.2.4", "levenary": "^1.1.1", "semver": "^5.5.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz", - "integrity": "sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz", + "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" + "@babel/highlight": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz", - "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz", - "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", "dev": true, "requires": { - "@babel/helper-regex": "^7.8.3", - "regexpu-core": "^4.6.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", - "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz", + "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/types": "^7.8.3", + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.4", "lodash": "^4.17.13" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -698,117 +457,117 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", - "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", + "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", "dev": true, "requires": { - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.10.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -831,20 +590,20 @@ } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -855,18 +614,18 @@ } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -877,21 +636,21 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", - "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -899,21 +658,21 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", + "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -921,21 +680,21 @@ } }, "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -943,72 +702,73 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz", - "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz", + "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4", "lodash": "^4.17.13" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1016,21 +776,21 @@ } }, "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1038,135 +798,135 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true }, "@babel/helper-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", - "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz", + "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==", "dev": true, "requires": { "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", - "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", + "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-wrap-function": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.10.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1189,119 +949,119 @@ } }, "@babel/helper-replace-supers": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz", - "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.10.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1324,59 +1084,59 @@ } }, "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "dev": true, "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1384,18 +1144,18 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1405,120 +1165,126 @@ } } }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, "@babel/helper-wrap-function": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", - "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.10.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1541,118 +1307,118 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "dev": true, "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.10.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1723,108 +1489,121 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz", + "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", - "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz", + "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", - "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true - } + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", - "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", - "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.0" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", + "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", + "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", - "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", + "@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-async-generators": { @@ -1836,6 +1615,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -1863,6 +1651,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -1891,142 +1688,151 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", - "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", + "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", - "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", - "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", - "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", - "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz", + "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz", - "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-define-map": "^7.8.3", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "dev": true, "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", "dev": true }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -2034,69 +1840,494 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", - "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", - "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", - "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", - "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", - "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz", - "integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", - "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "dev": true + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz", + "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz", + "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz", + "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", + "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz", + "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.4.tgz", + "integrity": "sha512-3WpXIKDJl/MHoAN0fNkSr7iHdUMHZoppXjf2HJ9/ed5Xht5wNIsXllJXdityKOxeA3Z8heYRb1D3p2H5rfCdPw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-typescript": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", + "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.10.4", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.10.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.10.4", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.10.4", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.10.4", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-typescript": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz", + "integrity": "sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.10.4" + } + }, + "@babel/runtime": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", + "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" }, "dependencies": { "@babel/code-frame": { @@ -2108,26 +2339,6 @@ "@babel/highlight": "^7.8.3" } }, - "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, "@babel/highlight": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", @@ -2139,358 +2350,10 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", - "dev": true - }, - "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", - "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", - "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-simple-access": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", - "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", - "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", - "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz", - "integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.8.3", - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - }, - "dependencies": { - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", - "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz", - "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", - "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", - "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", - "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", - "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", - "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-regex": "^7.8.3" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", - "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", - "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", - "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/preset-env": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz", - "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.8.4", - "@babel/helper-compilation-targets": "^7.8.4", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.3", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.4", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.4", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.3", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.3", - "browserslist": "^4.8.5", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -2501,26 +2364,46 @@ } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", + "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.6", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" }, "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -2564,6 +2447,12 @@ } } }, + "@types/angular": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.7.0.tgz", + "integrity": "sha512-zneUmi5I6oSkGBqkRP9rxbWX1mi6Yj7gNV+WNffmJLf8x4cnV0MGqXFNSP90NZ1kRRLCOdKBf9RIVD1TMg4aog==", + "dev": true + }, "@types/babel-types": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", @@ -2579,6 +2468,18 @@ "@types/babel-types": "*" } }, + "@types/chai": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", + "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", + "dev": true + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -2596,18 +2497,135 @@ "@types/node": "*" } }, + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.149", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", + "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "@types/node": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.0.tgz", - "integrity": "sha512-0ARSQootUG1RljH2HncpsY2TJBfGQIKOOi7kxzUY6z54ePu/ZD+wJA8zI2Q6v8rol2qpG/rvqsReco8zNMPvhQ==", + "@types/mocha": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", + "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", "dev": true }, + "@types/node": { + "version": "12.12.35", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.35.tgz", + "integrity": "sha512-ASYsaKecA7TUsDrqIGPNk3JeEox0z/0XR/WsJJ8BIX/9+SkMSImQXKWfU/yBrSyc7ZSE/NPqLu36Nur0miCFfQ==", + "dev": true + }, + "@types/pug": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.4.tgz", + "integrity": "sha1-h3L80EGOPNLMFxVV1zAHQVBR9LI=", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.27.0.tgz", + "integrity": "sha512-/my+vVHRN7zYgcp0n4z5A6HAK7bvKGBiswaM5zIlOQczsxj/aiD7RcgD+dvVFuwFaGh5+kM7XA6Q6PN0bvb1tw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.27.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + }, + "dependencies": { + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.27.0.tgz", + "integrity": "sha512-vOsYzjwJlY6E0NJRXPTeCGqjv5OHgRU1kzxHKWJVPjDYGbPgLudBXjIlc+OD1hDBZ4l1DLbOc5VjofKahsu9Jw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.27.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", + "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.27.0.tgz", + "integrity": "sha512-HFUXZY+EdwrJXZo31DW4IS1ujQW3krzlRjBrFRrJcMDh0zCu107/nRfhk/uBasO8m0NVDbBF5WZKcIUMRO7vPg==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.27.0", + "@typescript-eslint/typescript-estree": "2.27.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.27.0.tgz", + "integrity": "sha512-t2miCCJIb/FU8yArjAvxllxbTiyNqaXJag7UOpB5DVoM3+xnjeOngtqlJkLRnMtzaRcJhe3CIR9RmL40omubhg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^6.3.0", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@webassemblyjs/ast": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", @@ -3180,23 +3198,34 @@ "dev": true }, "babel-eslint": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", - "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", "eslint-visitor-keys": "^1.0.0", "resolve": "^1.12.0" }, "dependencies": { + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -3205,22 +3234,93 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "dev": true, "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } } } }, @@ -3236,9 +3336,9 @@ } }, "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { "object.assign": "^4.1.0" @@ -3607,14 +3707,15 @@ } }, "browserslist": { - "version": "4.8.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.6.tgz", - "integrity": "sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", + "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001023", - "electron-to-chromium": "^1.3.341", - "node-releases": "^1.1.47" + "caniuse-lite": "^1.0.30001093", + "electron-to-chromium": "^1.3.488", + "escalade": "^3.0.1", + "node-releases": "^1.1.58" } }, "buffer": { @@ -3764,9 +3865,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001023", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001023.tgz", - "integrity": "sha512-C5TDMiYG11EOhVOA62W1p3UsJ2z4DsHtMBQtjzp3ZsUglcQn62WOUgW0y795c7A5uZ+GCEIvzkMatLIlAsbNTA==", + "version": "1.0.30001099", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001099.tgz", + "integrity": "sha512-sdS9A+sQTk7wKoeuZBN/YMAHVztUfVnjDi4/UV3sDE8xoh7YR12hKW+pIdB3oqKGwr9XaFL2ovfzt9w8eUI5CA==", "dev": true }, "caseless": { @@ -3852,9 +3953,9 @@ } }, "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "chrome-trace-event": { @@ -3948,12 +4049,6 @@ "wrap-ansi": "^5.1.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -3964,15 +4059,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -4036,9 +4122,9 @@ } }, "commander": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.0.tgz", - "integrity": "sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true }, "commondir": { @@ -4212,12 +4298,12 @@ "dev": true }, "core-js-compat": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", - "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "dev": true, "requires": { - "browserslist": "^4.8.3", + "browserslist": "^4.8.5", "semver": "7.0.0" }, "dependencies": { @@ -4637,9 +4723,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.344", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.344.tgz", - "integrity": "sha512-tvbx2Wl8WBR+ym3u492D0L6/jH+8NoQXqe46+QhbWH3voVPauGuZYeb1QAXYoOAWuiP2dbSvlBx0kQ1F3hu/Mw==", + "version": "1.3.496", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.496.tgz", + "integrity": "sha512-TXY4mwoyowwi4Lsrq9vcTUYBThyc1b2hXaTZI13p8/FRhY2CTaq5lK+DVjhYkKiTLsKt569Xes+0J5JsVXFurQ==", "dev": true }, "elliptic": { @@ -4766,6 +4852,12 @@ "is-symbol": "^1.0.2" } }, + "escalade": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", + "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4896,9 +4988,9 @@ }, "dependencies": { "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -4955,9 +5047,9 @@ } }, "eslint-plugin-import": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz", - "integrity": "sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", + "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -4985,9 +5077,9 @@ } }, "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -5452,13 +5544,47 @@ } }, "file-loader": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-5.0.2.tgz", - "integrity": "sha512-QMiQ+WBkGLejKe81HU8SZ9PovsU/5uaLo0JdTCEXOYv7i7jfAjHZi1tcwp9tSASJPOmmHZtbdCervFmXMH/Dcg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-5.1.0.tgz", + "integrity": "sha512-u/VkLGskw3Ue59nyOwUwXI/6nuBCo7KBkniB/l7ICwr/7cPNGsL1WCXUp3GB0qgOOKU1TiP49bv4DZF/LJqprg==", "dev": true, "requires": { - "loader-utils": "^1.2.3", + "loader-utils": "^1.4.0", "schema-utils": "^2.5.0" + }, + "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } } }, "file-uri-to-path": { @@ -5562,6 +5688,18 @@ } } }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, "flat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", @@ -6458,9 +6596,9 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true } } @@ -7323,18 +7461,18 @@ "dev": true }, "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -7481,17 +7619,18 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true }, "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "^2.4.2" } }, "loglevel": { @@ -7911,9 +8050,9 @@ } }, "mocha": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.1.tgz", - "integrity": "sha512-9eWmWTdHLXh72rGrdZjNbG3aa1/3NRPpul1z0D979QpEnFdCG0Q5tv834N+94QEN2cysfV72YocQ3fn87s70fg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.0.tgz", + "integrity": "sha512-MymHK8UkU0K15Q/zX7uflZgVoRWiTjy0fXE/QjKts6mowUvGxOdPhZ2qj3b0iZdUrNZlW9LAIMFHB4IW+2b3EQ==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -7927,7 +8066,7 @@ "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.13.1", - "log-symbols": "2.2.0", + "log-symbols": "3.0.0", "minimatch": "3.0.4", "mkdirp": "0.5.1", "ms": "2.1.1", @@ -8351,21 +8490,10 @@ } }, "node-releases": { - "version": "1.1.47", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.47.tgz", - "integrity": "sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } + "version": "1.1.59", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz", + "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==", + "dev": true }, "node-sass": { "version": "4.13.1", @@ -8925,15 +9053,6 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", @@ -9138,12 +9257,6 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -9538,6 +9651,17 @@ "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", "path-type": "^2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + } } }, "read-pkg-up": { @@ -9587,33 +9711,33 @@ } }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", "dev": true }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", "dev": true }, "regenerator-transform": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", - "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -9643,29 +9767,29 @@ "dev": true }, "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", - "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -10388,9 +10512,9 @@ } }, "sn-stylekit": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/sn-stylekit/-/sn-stylekit-2.0.22.tgz", - "integrity": "sha512-35BZbKCQQoYunmFMrMGA7OP7gkGoBJvNixfwlPXu7ep/ZhC+8NShrs7m+zYEvToZJG3Hc/709UgrzbgMYEz6FA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sn-stylekit/-/sn-stylekit-2.1.0.tgz", + "integrity": "sha512-H7Ml3rMSTGSveM7YRd574gPAIw/HINdnkQjk/TxQ9Vt457im+z6lZq9AerXn+9NiYWfY88B5LrOTihKOwTGYgw==", "dev": true }, "snapdragon": { @@ -10501,14 +10625,13 @@ "kind-of": "^3.2.0" } }, + "sncrypto": { + "version": "github:standardnotes/sncrypto#7e76ab9977f85039d9399b935aecfe495a951edb", + "from": "github:standardnotes/sncrypto#7e76ab9977f85039d9399b935aecfe495a951edb" + }, "snjs": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/snjs/-/snjs-1.0.7.tgz", - "integrity": "sha512-61OkFgjvhfr21EvpdYtSHp+cFmhyx71etr8J7a6T5XqKHLG4zuBV9LaRd6Wb4eYYlrh6GbG0Bui/kDsvdHTZyw==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } + "version": "github:standardnotes/snjs#1c43ab79fb548962837c1061d6ec3bc2a8af2b4f", + "from": "github:standardnotes/snjs#1c43ab79fb548962837c1061d6ec3bc2a8af2b4f" }, "sockjs": { "version": "0.3.19", @@ -11011,9 +11134,9 @@ } }, "terser": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz", - "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.6.tgz", + "integrity": "sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g==", "dev": true, "requires": { "commander": "^2.20.0", @@ -11208,12 +11331,85 @@ "glob": "^7.1.2" } }, + "ts-loader": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.1.tgz", + "integrity": "sha512-I9Nmly0ufJoZRMuAT9d5ijsC2B7oSPvUnOJt/GhgoATlPGYfa17VicDKPcqwUCrHpOkCxr/ybLYwbnS4cOxmvQ==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -11272,6 +11468,18 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz", + "integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==", + "dev": true + }, + "typescript-eslint": { + "version": "0.0.1-alpha.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-0.0.1-alpha.0.tgz", + "integrity": "sha512-1hNKM37dAWML/2ltRXupOq2uqcdRQyDFphl+341NTPXFLLLiDhErXx8VtaSLh3xP7SyHZdcCgpt9boYYVb3fQg==", + "dev": true + }, "uglify-to-browserify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", @@ -11296,15 +11504,15 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, "union-value": { @@ -11557,9 +11765,9 @@ } }, "webpack": { - "version": "4.41.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", - "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", + "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", @@ -11588,9 +11796,9 @@ }, "dependencies": { "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, "eslint-scope": { @@ -11617,9 +11825,9 @@ } }, "webpack-cli": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", - "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz", + "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==", "dev": true, "requires": { "chalk": "2.4.2", @@ -11635,56 +11843,6 @@ "yargs": "13.2.4" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "enhanced-resolve": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", @@ -11705,18 +11863,6 @@ "locate-path": "^3.0.0" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", @@ -11754,15 +11900,6 @@ "strip-ansi": "^5.1.0" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -12093,6 +12230,15 @@ "uuid": "^3.3.2" } }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, "webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -12123,9 +12269,9 @@ } }, "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, "which": { @@ -12235,21 +12381,6 @@ "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -12260,15 +12391,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -12362,14 +12484,6 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "yargs-unparser": { diff --git a/package.json b/package.json index 82642176c..9d8c2f86a 100644 --- a/package.json +++ b/package.json @@ -1,32 +1,38 @@ { "name": "standard-notes-web", - "version": "3.3.6", + "version": "3.5.0", "license": "AGPL-3.0-or-later", "repository": { "type": "git", "url": "https://github.com/standardnotes/web" }, "scripts": { - "start": "webpack-dev-server --progress", - "bundle": "webpack --mode production", - "precompile:assets": "bundle exec rails assets:precompile", - "postinstall": "npm run precompile:assets", - "build": "bundle install && npm ci && npm run precompile:assets && npm run bundle", + "start": "webpack-dev-server --progress --config webpack.dev.js", + "watch": "webpack -w --config webpack.dev.js", + "bundle": "webpack --config webpack.prod.js", + "build": "bundle install && npm install && npm run bundle", "submodules": "git submodule update --init --force --remote", - "test": "karma start karma.conf.js --single-run", - "lint": "eslint --fix app/assets/javascripts/**/*.js" + "lint": "eslint --fix app/assets/javascripts/**/*.js", + "tsc": "tsc --project app/assets/javascripts/tsconfig.json" }, "devDependencies": { - "@babel/cli": "^7.8.4", - "@babel/core": "^7.8.4", - "@babel/plugin-proposal-class-properties": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.8.3", - "@babel/preset-env": "^7.8.4", - "@babel/runtime": "^7.8.4", + "@babel/cli": "^7.10.4", + "@babel/core": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@babel/preset-typescript": "^7.10.4", + "@types/angular": "^1.7.0", + "@types/chai": "^4.2.11", + "@types/lodash": "^4.14.149", + "@types/mocha": "^7.0.2", + "@types/node": "^12.12.30", + "@types/pug": "^2.0.4", + "@typescript-eslint/eslint-plugin": "^2.23.0", + "@typescript-eslint/parser": "^2.23.0", "angular": "1.7.9", "apply-loader": "^2.0.0", - "babel-eslint": "^10.0.3", - "babel-loader": "^8.0.6", + "babel-eslint": "^10.1.0", + "babel-loader": "^8.1.0", "babel-plugin-angularjs-annotate": "^0.10.0", "chai": "^4.2.0", "connect": "^3.7.0", @@ -35,26 +41,31 @@ "eslint-config-prettier": "^6.10.0", "eslint-config-semistandard": "^15.0.0", "eslint-config-standard": "^14.1.0", - "eslint-plugin-import": "^2.20.0", + "eslint-plugin-import": "^2.20.1", "eslint-plugin-node": "^11.0.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.1", - "file-loader": "^5.0.2", + "file-loader": "^5.1.0", + "lodash": "^4.17.15", "mini-css-extract-plugin": "^0.9.0", - "mocha": "^7.0.1", + "mocha": "^7.1.0", "ng-cache-loader": "0.0.26", "node-sass": "^4.13.1", "pug": "^2.0.4", "pug-loader": "^2.4.0", "sass-loader": "^8.0.2", "serve-static": "^1.14.1", - "sn-stylekit": "2.0.22", - "snjs": "1.0.7", - "webpack": "^4.41.5", - "webpack-cli": "^3.3.10", - "webpack-dev-server": "^3.10.3" + "sn-stylekit": "2.1.0", + "ts-loader": "^8.0.1", + "typescript": "^3.9.6", + "typescript-eslint": "0.0.1-alpha.0", + "webpack": "^4.42.0", + "webpack-cli": "^3.3.11", + "webpack-dev-server": "^3.10.3", + "webpack-merge": "^4.2.2" }, "dependencies": { - "lodash": "^4.17.19" + "sncrypto": "github:standardnotes/sncrypto#7e76ab9977f85039d9399b935aecfe495a951edb", + "snjs": "github:standardnotes/snjs#1c43ab79fb548962837c1061d6ec3bc2a8af2b4f" } } diff --git a/public/dist/libsodium.bundle.js b/public/dist/libsodium.bundle.js new file mode 100644 index 000000000..519f4b881 --- /dev/null +++ b/public/dist/libsodium.bundle.js @@ -0,0 +1,85 @@ +(window["webpackJsonpSNCrypto"] = window["webpackJsonpSNCrypto"] || []).push([["libsodium"],{ + +/***/ "./lib/libsodium.js": +/*!**************************!*\ + !*** ./lib/libsodium.js ***! + \**************************/ +/*! exports provided: ready, crypto_pwhash, crypto_pwhash_ALG_DEFAULT, crypto_aead_xchacha20poly1305_ietf_encrypt, crypto_aead_xchacha20poly1305_ietf_decrypt */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var libsodium_wrappers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! libsodium-wrappers */ "./node_modules/libsodium-wrappers/dist/modules/libsodium-wrappers.js"); +/* harmony import */ var libsodium_wrappers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(libsodium_wrappers__WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ready", function() { return libsodium_wrappers__WEBPACK_IMPORTED_MODULE_0__["ready"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "crypto_pwhash", function() { return libsodium_wrappers__WEBPACK_IMPORTED_MODULE_0__["crypto_pwhash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "crypto_pwhash_ALG_DEFAULT", function() { return libsodium_wrappers__WEBPACK_IMPORTED_MODULE_0__["crypto_pwhash_ALG_DEFAULT"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "crypto_aead_xchacha20poly1305_ietf_encrypt", function() { return libsodium_wrappers__WEBPACK_IMPORTED_MODULE_0__["crypto_aead_xchacha20poly1305_ietf_encrypt"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "crypto_aead_xchacha20poly1305_ietf_decrypt", function() { return libsodium_wrappers__WEBPACK_IMPORTED_MODULE_0__["crypto_aead_xchacha20poly1305_ietf_decrypt"]; }); + +/* eslint-disable camelcase */ + + +/***/ }), + +/***/ 0: +/*!********************!*\ + !*** fs (ignored) ***! + \********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }), + +/***/ 1: +/*!**********************!*\ + !*** util (ignored) ***! + \**********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }), + +/***/ 2: +/*!**********************!*\ + !*** util (ignored) ***! + \**********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }), + +/***/ 3: +/*!************************!*\ + !*** buffer (ignored) ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }), + +/***/ 4: +/*!************************!*\ + !*** crypto (ignored) ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }) + +}]); +//# sourceMappingURL=libsodium.bundle.js.map \ No newline at end of file diff --git a/public/dist/vendors~libsodium.bundle.js b/public/dist/vendors~libsodium.bundle.js new file mode 100644 index 000000000..560be763f --- /dev/null +++ b/public/dist/vendors~libsodium.bundle.js @@ -0,0 +1,30596 @@ +(window["webpackJsonpSNCrypto"] = window["webpackJsonpSNCrypto"] || []).push([["vendors~libsodium"],{ + +/***/ "./node_modules/asn1.js/lib/asn1.js": +/*!******************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var asn1 = exports; +asn1.bignum = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); +asn1.define = __webpack_require__(/*! ./asn1/api */ "./node_modules/asn1.js/lib/asn1/api.js").define; +asn1.base = __webpack_require__(/*! ./asn1/base */ "./node_modules/asn1.js/lib/asn1/base/index.js"); +asn1.constants = __webpack_require__(/*! ./asn1/constants */ "./node_modules/asn1.js/lib/asn1/constants/index.js"); +asn1.decoders = __webpack_require__(/*! ./asn1/decoders */ "./node_modules/asn1.js/lib/asn1/decoders/index.js"); +asn1.encoders = __webpack_require__(/*! ./asn1/encoders */ "./node_modules/asn1.js/lib/asn1/encoders/index.js"); + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/api.js": +/*!**********************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/api.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var asn1 = __webpack_require__(/*! ../asn1 */ "./node_modules/asn1.js/lib/asn1.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var api = exports; + +api.define = function define(name, body) { + return new Entity(name, body); +}; + +function Entity(name, body) { + this.name = name; + this.body = body; + this.decoders = {}; + this.encoders = {}; +} + +; + +Entity.prototype._createNamed = function createNamed(base) { + var named; + + try { + named = __webpack_require__(/*! vm */ "./node_modules/vm-browserify/index.js").runInThisContext('(function ' + this.name + '(entity) {\n' + ' this._initNamed(entity);\n' + '})'); + } catch (e) { + named = function named(entity) { + this._initNamed(entity); + }; + } + + inherits(named, base); + + named.prototype._initNamed = function initnamed(entity) { + base.call(this, entity); + }; + + return new named(this); +}; + +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; // Lazily create decoder + + if (!this.decoders.hasOwnProperty(enc)) this.decoders[enc] = this._createNamed(asn1.decoders[enc]); + return this.decoders[enc]; +}; + +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); +}; + +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; // Lazily create encoder + + if (!this.encoders.hasOwnProperty(enc)) this.encoders[enc] = this._createNamed(asn1.encoders[enc]); + return this.encoders[enc]; +}; + +Entity.prototype.encode = function encode(data, enc, +/* internal */ +reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/base/buffer.js": +/*!******************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/base/buffer.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Reporter = __webpack_require__(/*! ../base */ "./node_modules/asn1.js/lib/asn1/base/index.js").Reporter; + +var Buffer = __webpack_require__(/*! buffer */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer; + +function DecoderBuffer(base, options) { + Reporter.call(this, options); + + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + + this.base = base; + this.offset = 0; + this.length = base.length; +} + +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; + +DecoderBuffer.prototype.save = function save() { + return { + offset: this.offset, + reporter: Reporter.prototype.save.call(this) + }; +}; + +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + var res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + return res; +}; + +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; + +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) return this.base.readUInt8(this.offset++, true);else return this.error(fail || 'DecoderBuffer overrun'); +}; + +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) return this.error(fail || 'DecoderBuffer overrun'); + var res = new DecoderBuffer(this.base); // Share reporter state + + res._reporterState = this._reporterState; + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; +}; + +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); +}; + +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function (item) { + if (!(item instanceof EncoderBuffer)) item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + _typeof(value)); + } +} + +exports.EncoderBuffer = EncoderBuffer; + +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) out = new Buffer(this.length); + if (!offset) offset = 0; + if (this.length === 0) return out; + + if (Array.isArray(this.value)) { + this.value.forEach(function (item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') out[offset] = this.value;else if (typeof this.value === 'string') out.write(this.value, offset);else if (Buffer.isBuffer(this.value)) this.value.copy(out, offset); + offset += this.length; + } + + return out; +}; + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/base/index.js": +/*!*****************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/base/index.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var base = exports; +base.Reporter = __webpack_require__(/*! ./reporter */ "./node_modules/asn1.js/lib/asn1/base/reporter.js").Reporter; +base.DecoderBuffer = __webpack_require__(/*! ./buffer */ "./node_modules/asn1.js/lib/asn1/base/buffer.js").DecoderBuffer; +base.EncoderBuffer = __webpack_require__(/*! ./buffer */ "./node_modules/asn1.js/lib/asn1/base/buffer.js").EncoderBuffer; +base.Node = __webpack_require__(/*! ./node */ "./node_modules/asn1.js/lib/asn1/base/node.js"); + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/base/node.js": +/*!****************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/base/node.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var Reporter = __webpack_require__(/*! ../base */ "./node_modules/asn1.js/lib/asn1/base/index.js").Reporter; + +var EncoderBuffer = __webpack_require__(/*! ../base */ "./node_modules/asn1.js/lib/asn1/base/index.js").EncoderBuffer; + +var DecoderBuffer = __webpack_require__(/*! ../base */ "./node_modules/asn1.js/lib/asn1/base/index.js").DecoderBuffer; + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); // Supported tags + + +var tags = ['seq', 'seqof', 'set', 'setof', 'objid', 'bool', 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr']; // Public methods list + +var methods = ['key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', 'any', 'contains'].concat(tags); // Overrided methods list + +var overrided = ['_peekTag', '_decodeTag', '_use', '_decodeStr', '_decodeObjid', '_decodeTime', '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', '_encodeNull', '_encodeInt', '_encodeBool']; + +function Node(enc, parent) { + var state = {}; + this._baseState = state; + state.enc = enc; + state.parent = parent || null; + state.children = null; // State + + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; // Should create new instance on each method + + if (!state.parent) { + state.children = []; + + this._wrap(); + } +} + +module.exports = Node; +var stateProps = ['enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', 'implicit', 'contains']; + +Node.prototype.clone = function clone() { + var state = this._baseState; + var cstate = {}; + stateProps.forEach(function (prop) { + cstate[prop] = state[prop]; + }); + var res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; +}; + +Node.prototype._wrap = function wrap() { + var state = this._baseState; + methods.forEach(function (method) { + this[method] = function _wrappedMethod() { + var clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); + }; + }, this); +}; + +Node.prototype._init = function init(body) { + var state = this._baseState; + assert(state.parent === null); + body.call(this); // Filter children + + state.children = state.children.filter(function (child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); +}; + +Node.prototype._useArgs = function useArgs(args) { + var state = this._baseState; // Filter children and args + + var children = args.filter(function (arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function (arg) { + return !(arg instanceof this.constructor); + }, this); + + if (children.length !== 0) { + assert(state.children === null); + state.children = children; // Replace parent to maintain backward link + + children.forEach(function (child) { + child._baseState.parent = this; + }, this); + } + + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function (arg) { + if (_typeof(arg) !== 'object' || arg.constructor !== Object) return arg; + var res = {}; + Object.keys(arg).forEach(function (key) { + if (key == (key | 0)) key |= 0; + var value = arg[key]; + res[value] = key; + }); + return res; + }); + } +}; // +// Overrided methods +// + + +overrided.forEach(function (method) { + Node.prototype[method] = function _overrided() { + var state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; +}); // +// Public methods +// + +tags.forEach(function (tag) { + Node.prototype[tag] = function _tagMethod() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + assert(state.tag === null); + state.tag = tag; + + this._useArgs(args); + + return this; + }; +}); + +Node.prototype.use = function use(item) { + assert(item); + var state = this._baseState; + assert(state.use === null); + state.use = item; + return this; +}; + +Node.prototype.optional = function optional() { + var state = this._baseState; + state.optional = true; + return this; +}; + +Node.prototype.def = function def(val) { + var state = this._baseState; + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + return this; +}; + +Node.prototype.explicit = function explicit(num) { + var state = this._baseState; + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + return this; +}; + +Node.prototype.implicit = function implicit(num) { + var state = this._baseState; + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + return this; +}; + +Node.prototype.obj = function obj() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + state.obj = true; + if (args.length !== 0) this._useArgs(args); + return this; +}; + +Node.prototype.key = function key(newKey) { + var state = this._baseState; + assert(state.key === null); + state.key = newKey; + return this; +}; + +Node.prototype.any = function any() { + var state = this._baseState; + state.any = true; + return this; +}; + +Node.prototype.choice = function choice(obj) { + var state = this._baseState; + assert(state.choice === null); + state.choice = obj; + + this._useArgs(Object.keys(obj).map(function (key) { + return obj[key]; + })); + + return this; +}; + +Node.prototype.contains = function contains(item) { + var state = this._baseState; + assert(state.use === null); + state.contains = item; + return this; +}; // +// Decoding +// + + +Node.prototype._decode = function decode(input, options) { + var state = this._baseState; // Decode root node + + if (state.parent === null) return input.wrapResult(state.children[0]._decode(input, options)); + var result = state['default']; + var present = true; + var prevKey = null; + if (state.key !== null) prevKey = input.enterKey(state.key); // Check if tag is there + + if (state.optional) { + var tag = null; + if (state.explicit !== null) tag = state.explicit;else if (state.implicit !== null) tag = state.implicit;else if (state.tag !== null) tag = state.tag; + + if (tag === null && !state.any) { + // Trial and Error + var save = input.save(); + + try { + if (state.choice === null) this._decodeGeneric(state.tag, input, options);else this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + if (input.isError(present)) return present; + } + } // Push object on stack + + + var prevObj; + if (state.obj && present) prevObj = input.enterObject(); + + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + var explicit = this._decodeTag(input, state.explicit); + + if (input.isError(explicit)) return explicit; + input = explicit; + } + + var start = input.offset; // Unwrap implicit and normal values + + if (state.use === null && state.choice === null) { + if (state.any) var save = input.save(); + + var body = this._decodeTag(input, state.implicit !== null ? state.implicit : state.tag, state.any); + + if (input.isError(body)) return body; + if (state.any) result = input.raw(save);else input = body; + } + + if (options && options.track && state.tag !== null) options.track(input.path(), start, input.length, 'tagged'); + if (options && options.track && state.tag !== null) options.track(input.path(), input.offset, input.length, 'content'); // Select proper method for tag + + if (state.any) result = result;else if (state.choice === null) result = this._decodeGeneric(state.tag, input, options);else result = this._decodeChoice(input, options); + if (input.isError(result)) return result; // Decode children + + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); + } // Decode contained/encoded by schema, only in bit or octet strings + + + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + var data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj)._decode(data, options); + } + } // Pop object + + + if (state.obj && present) result = input.leaveObject(prevObj); // Set key + + if (state.key !== null && (result !== null || present === true)) input.leaveKey(prevKey, state.key, result);else if (prevKey !== null) input.exitKey(prevKey); + return result; +}; + +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + var state = this._baseState; + if (tag === 'seq' || tag === 'set') return null; + if (tag === 'seqof' || tag === 'setof') return this._decodeList(input, tag, state.args[0], options);else if (/str$/.test(tag)) return this._decodeStr(input, tag, options);else if (tag === 'objid' && state.args) return this._decodeObjid(input, state.args[0], state.args[1], options);else if (tag === 'objid') return this._decodeObjid(input, null, null, options);else if (tag === 'gentime' || tag === 'utctime') return this._decodeTime(input, tag, options);else if (tag === 'null_') return this._decodeNull(input, options);else if (tag === 'bool') return this._decodeBool(input, options);else if (tag === 'objDesc') return this._decodeStr(input, tag, options);else if (tag === 'int' || tag === 'enum') return this._decodeInt(input, state.args && state.args[0], options); + + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj)._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } +}; + +Node.prototype._getUse = function _getUse(entity, obj) { + var state = this._baseState; // Create altered use decoder if implicit is set + + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + + return state.useDecoder; +}; + +Node.prototype._decodeChoice = function decodeChoice(input, options) { + var state = this._baseState; + var result = null; + var match = false; + Object.keys(state.choice).some(function (key) { + var save = input.save(); + var node = state.choice[key]; + + try { + var value = node._decode(input, options); + + if (input.isError(value)) return false; + result = { + type: key, + value: value + }; + match = true; + } catch (e) { + input.restore(save); + return false; + } + + return true; + }, this); + if (!match) return input.error('Choice not matched'); + return result; +}; // +// Encoding +// + + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); +}; + +Node.prototype._encode = function encode(data, reporter, parent) { + var state = this._baseState; + if (state['default'] !== null && state['default'] === data) return; + + var result = this._encodeValue(data, reporter, parent); + + if (result === undefined) return; + if (this._skipDefault(result, reporter, parent)) return; + return result; +}; + +Node.prototype._encodeValue = function encode(data, reporter, parent) { + var state = this._baseState; // Decode root node + + if (state.parent === null) return state.children[0]._encode(data, reporter || new Reporter()); + var result = null; // Set reporter to share it with a child class + + this.reporter = reporter; // Check if data is there + + if (state.optional && data === undefined) { + if (state['default'] !== null) data = state['default'];else return; + } // Encode children first + + + var content = null; + var primitive = false; + + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function (child) { + if (child._baseState.tag === 'null_') return child._encode(null, reporter, data); + if (child._baseState.key === null) return reporter.error('Child should have a key'); + var prevKey = reporter.enterKey(child._baseState.key); + if (_typeof(data) !== 'object') return reporter.error('Child expected, but input is not object'); + + var res = child._encode(data[child._baseState.key], reporter, data); + + reporter.leaveKey(prevKey); + return res; + }, this).filter(function (child) { + return child; + }); + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) return reporter.error('Too many args for : ' + state.tag); + if (!Array.isArray(data)) return reporter.error('seqof/setof, but data is not Array'); + var child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function (item) { + var state = this._baseState; + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; + } + } // Encode data itself + + + var result; + + if (!state.any && state.choice === null) { + var tag = state.implicit !== null ? state.implicit : state.tag; + var cls = state.implicit === null ? 'universal' : 'context'; + + if (tag === null) { + if (state.use === null) reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) result = this._encodeComposite(tag, primitive, cls, content); + } + } // Wrap in explicit + + + if (state.explicit !== null) result = this._encodeComposite(state.explicit, false, 'context', result); + return result; +}; + +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + var state = this._baseState; + var node = state.choice[data.type]; + + if (!node) { + assert(false, data.type + ' not found in ' + JSON.stringify(Object.keys(state.choice))); + } + + return node._encode(data.value, reporter); +}; + +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + var state = this._baseState; + if (/str$/.test(tag)) return this._encodeStr(data, tag);else if (tag === 'objid' && state.args) return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);else if (tag === 'objid') return this._encodeObjid(data, null, null);else if (tag === 'gentime' || tag === 'utctime') return this._encodeTime(data, tag);else if (tag === 'null_') return this._encodeNull();else if (tag === 'int' || tag === 'enum') return this._encodeInt(data, state.args && state.reverseArgs[0]);else if (tag === 'bool') return this._encodeBool(data);else if (tag === 'objDesc') return this._encodeStr(data, tag);else throw new Error('Unsupported tag: ' + tag); +}; + +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); +}; + +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); +}; + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/base/reporter.js": +/*!********************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/base/reporter.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} + +exports.Reporter = Reporter; + +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; +}; + +Reporter.prototype.save = function save() { + var state = this._reporterState; + return { + obj: state.obj, + pathLen: state.path.length + }; +}; + +Reporter.prototype.restore = function restore(data) { + var state = this._reporterState; + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); +}; + +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; + +Reporter.prototype.exitKey = function exitKey(index) { + var state = this._reporterState; + state.path = state.path.slice(0, index - 1); +}; + +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + var state = this._reporterState; + this.exitKey(index); + if (state.obj !== null) state.obj[key] = value; +}; + +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; + +Reporter.prototype.enterObject = function enterObject() { + var state = this._reporterState; + var prev = state.obj; + state.obj = {}; + return prev; +}; + +Reporter.prototype.leaveObject = function leaveObject(prev) { + var state = this._reporterState; + var now = state.obj; + state.obj = prev; + return now; +}; + +Reporter.prototype.error = function error(msg) { + var err; + var state = this._reporterState; + var inherited = msg instanceof ReporterError; + + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function (elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + + if (!state.options.partial) throw err; + if (!inherited) state.errors.push(err); + return err; +}; + +Reporter.prototype.wrapResult = function wrapResult(result) { + var state = this._reporterState; + if (!state.options.partial) return result; + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; +}; + +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); +} + +; +inherits(ReporterError, Error); + +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) Error.captureStackTrace(this, ReporterError); + + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + } + + return this; +}; + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/constants/der.js": +/*!********************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/constants/der.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var constants = __webpack_require__(/*! ../constants */ "./node_modules/asn1.js/lib/asn1/constants/index.js"); + +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' +}; +exports.tagClassByName = constants._reverse(exports.tagClass); +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' +}; +exports.tagByName = constants._reverse(exports.tag); + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/constants/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/constants/index.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var constants = exports; // Helper + +constants._reverse = function reverse(map) { + var res = {}; + Object.keys(map).forEach(function (key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) key = key | 0; + var value = map[key]; + res[value] = key; + }); + return res; +}; + +constants.der = __webpack_require__(/*! ./der */ "./node_modules/asn1.js/lib/asn1/constants/der.js"); + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/decoders/der.js": +/*!*******************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/decoders/der.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var asn1 = __webpack_require__(/*! ../../asn1 */ "./node_modules/asn1.js/lib/asn1.js"); + +var base = asn1.base; +var bignum = asn1.bignum; // Import DER constants + +var der = asn1.constants.der; + +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; // Construct base tree + + this.tree = new DERNode(); + + this.tree._init(entity.body); +} + +; +module.exports = DERDecoder; + +DERDecoder.prototype.decode = function decode(data, options) { + if (!(data instanceof base.DecoderBuffer)) data = new base.DecoderBuffer(data, options); + return this.tree._decode(data, options); +}; // Tree methods + + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} + +inherits(DERNode, base.Node); + +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) return false; + var state = buffer.save(); + var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) return decodedTag; + buffer.restore(state); + return decodedTag.tag === tag || decodedTag.tagStr === tag || decodedTag.tagStr + 'of' === tag || any; +}; + +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + var decodedTag = derDecodeTag(buffer, 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) return decodedTag; + var len = derDecodeLen(buffer, decodedTag.primitive, 'Failed to get length of "' + tag + '"'); // Failure + + if (buffer.isError(len)) return len; + + if (!any && decodedTag.tag !== tag && decodedTag.tagStr !== tag && decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + + if (decodedTag.primitive || len !== null) return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); // Indefinite length... find END tag + + var state = buffer.save(); + + var res = this._skipUntilEnd(buffer, 'Failed to skip indefinite length body: "' + this.tag + '"'); + + if (buffer.isError(res)) return res; + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; + +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + while (true) { + var tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) return tag; + var len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) return len; + var res; + if (tag.primitive || len !== null) res = buffer.skip(len);else res = this._skipUntilEnd(buffer, fail); // Failure + + if (buffer.isError(res)) return res; + if (tag.tagStr === 'end') break; + } +}; + +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, options) { + var result = []; + + while (!buffer.isEmpty()) { + var possibleEnd = this._peekTag(buffer, 'end'); + + if (buffer.isError(possibleEnd)) return possibleEnd; + var res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) break; + result.push(res); + } + + return result; +}; + +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + var unused = buffer.readUInt8(); + if (buffer.isError(unused)) return unused; + return { + unused: unused, + data: buffer.raw() + }; + } else if (tag === 'bmpstr') { + var raw = buffer.raw(); + if (raw.length % 2 === 1) return buffer.error('Decoding of string type: bmpstr length mismatch'); + var str = ''; + + for (var i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); + } + + return str; + } else if (tag === 'numstr') { + var numstr = buffer.raw().toString('ascii'); + + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + 'numstr unsupported characters'); + } + + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + var printstr = buffer.raw().toString('ascii'); + + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + 'printstr unsupported characters'); + } + + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } +}; + +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + var result; + var identifiers = []; + var ident = 0; + + while (!buffer.isEmpty()) { + var subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; + } + } + + if (subident & 0x80) identifiers.push(ident); + var first = identifiers[0] / 40 | 0; + var second = identifiers[0] % 40; + if (relative) result = identifiers;else result = [first, second].concat(identifiers.slice(1)); + + if (values) { + var tmp = values[result.join(' ')]; + if (tmp === undefined) tmp = values[result.join('.')]; + if (tmp !== undefined) result = tmp; + } + + return result; +}; + +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + var str = buffer.raw().toString(); + + if (tag === 'gentime') { + var year = str.slice(0, 4) | 0; + var mon = str.slice(4, 6) | 0; + var day = str.slice(6, 8) | 0; + var hour = str.slice(8, 10) | 0; + var min = str.slice(10, 12) | 0; + var sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + var year = str.slice(0, 2) | 0; + var mon = str.slice(2, 4) | 0; + var day = str.slice(4, 6) | 0; + var hour = str.slice(6, 8) | 0; + var min = str.slice(8, 10) | 0; + var sec = str.slice(10, 12) | 0; + if (year < 70) year = 2000 + year;else year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +}; + +DERNode.prototype._decodeNull = function decodeNull(buffer) { + return null; +}; + +DERNode.prototype._decodeBool = function decodeBool(buffer) { + var res = buffer.readUInt8(); + if (buffer.isError(res)) return res;else return res !== 0; +}; + +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + var raw = buffer.raw(); + var res = new bignum(raw); + if (values) res = values[res.toString(10)] || res; + return res; +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') entity = entity(obj); + return entity._getDecoder('der').tree; +}; // Utility methods + + +function derDecodeTag(buf, fail) { + var tag = buf.readUInt8(fail); + if (buf.isError(tag)) return tag; + var cls = der.tagClass[tag >> 6]; + var primitive = (tag & 0x20) === 0; // Multi-octet tag - load + + if ((tag & 0x1f) === 0x1f) { + var oct = tag; + tag = 0; + + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) return oct; + tag <<= 7; + tag |= oct & 0x7f; + } + } else { + tag &= 0x1f; + } + + var tagStr = der.tag[tag]; + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} + +function derDecodeLen(buf, primitive, fail) { + var len = buf.readUInt8(fail); + if (buf.isError(len)) return len; // Indefinite form + + if (!primitive && len === 0x80) return null; // Definite form + + if ((len & 0x80) === 0) { + // Short form + return len; + } // Long form + + + var num = len & 0x7f; + if (num > 4) return buf.error('length octect is too long'); + len = 0; + + for (var i = 0; i < num; i++) { + len <<= 8; + var j = buf.readUInt8(fail); + if (buf.isError(j)) return j; + len |= j; + } + + return len; +} + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/decoders/index.js": +/*!*********************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/decoders/index.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var decoders = exports; +decoders.der = __webpack_require__(/*! ./der */ "./node_modules/asn1.js/lib/asn1/decoders/der.js"); +decoders.pem = __webpack_require__(/*! ./pem */ "./node_modules/asn1.js/lib/asn1/decoders/pem.js"); + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/decoders/pem.js": +/*!*******************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/decoders/pem.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Buffer = __webpack_require__(/*! buffer */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer; + +var DERDecoder = __webpack_require__(/*! ./der */ "./node_modules/asn1.js/lib/asn1/decoders/der.js"); + +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; +} + +; +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; + +PEMDecoder.prototype.decode = function decode(data, options) { + var lines = data.toString().split(/[\r\n]+/g); + var label = options.label.toUpperCase(); + var re = /^-----(BEGIN|END) ([^-]+)-----$/; + var start = -1; + var end = -1; + + for (var i = 0; i < lines.length; i++) { + var match = lines[i].match(re); + if (match === null) continue; + if (match[2] !== label) continue; + + if (start === -1) { + if (match[1] !== 'BEGIN') break; + start = i; + } else { + if (match[1] !== 'END') break; + end = i; + break; + } + } + + if (start === -1 || end === -1) throw new Error('PEM section not found for: ' + label); + var base64 = lines.slice(start + 1, end).join(''); // Remove excessive symbols + + base64.replace(/[^a-z0-9\+\/=]+/gi, ''); + var input = new Buffer(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); +}; + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/encoders/der.js": +/*!*******************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/encoders/der.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Buffer = __webpack_require__(/*! buffer */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer; + +var asn1 = __webpack_require__(/*! ../../asn1 */ "./node_modules/asn1.js/lib/asn1.js"); + +var base = asn1.base; // Import DER constants + +var der = asn1.constants.der; + +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; // Construct base tree + + this.tree = new DERNode(); + + this.tree._init(entity.body); +} + +; +module.exports = DEREncoder; + +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); +}; // Tree methods + + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} + +inherits(DERNode, base.Node); + +DERNode.prototype._encodeComposite = function encodeComposite(tag, primitive, cls, content) { + var encodedTag = encodeTag(tag, primitive, cls, this.reporter); // Short form + + if (content.length < 0x80) { + var header = new Buffer(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([header, content]); + } // Long form + // Count octets required to store length + + + var lenOctets = 1; + + for (var i = content.length; i >= 0x100; i >>= 8) { + lenOctets++; + } + + var header = new Buffer(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + + for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) { + header[i] = j & 0xff; + } + + return this._createEncoderBuffer([header, content]); +}; + +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([str.unused | 0, str.data]); + } else if (tag === 'bmpstr') { + var buf = new Buffer(str.length * 2); + + for (var i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + 'only digits and space'); + } + + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + 'only latin upper and lower case letters, ' + 'digits, space, apostrophe, left and rigth ' + 'parenthesis, plus sign, comma, hyphen, ' + 'dot, slash, colon, equal sign, ' + 'question mark'); + } + + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + ' unsupported'); + } +}; + +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s\.]+/g); + + for (var i = 0; i < id.length; i++) { + id[i] |= 0; + } + } else if (Array.isArray(id)) { + id = id.slice(); + + for (var i = 0; i < id.length; i++) { + id[i] |= 0; + } + } + + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + 'got: ' + JSON.stringify(id)); + } + + if (!relative) { + if (id[1] >= 40) return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } // Count number of octets + + + var size = 0; + + for (var i = 0; i < id.length; i++) { + var ident = id[i]; + + for (size++; ident >= 0x80; ident >>= 7) { + size++; + } + } + + var objid = new Buffer(size); + var offset = objid.length - 1; + + for (var i = id.length - 1; i >= 0; i--) { + var ident = id[i]; + objid[offset--] = ident & 0x7f; + + while ((ident >>= 7) > 0) { + objid[offset--] = 0x80 | ident & 0x7f; + } + } + + return this._createEncoderBuffer(objid); +}; + +function two(num) { + if (num < 10) return '0' + num;else return num; +} + +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + var str; + var date = new Date(time); + + if (tag === 'gentime') { + str = [two(date.getFullYear()), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join(''); + } else if (tag === 'utctime') { + str = [two(date.getFullYear() % 100), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + + return this._encodeStr(str, 'octstr'); +}; + +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); +}; + +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) return this.reporter.error('String int or enum given, but no values map'); + + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + JSON.stringify(num)); + } + + num = values[num]; + } // Bignum, assume big endian + + + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + var numArray = num.toArray(); + + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); + } + + num = new Buffer(numArray); + } + + if (Buffer.isBuffer(num)) { + var size = num.length; + if (num.length === 0) size++; + var out = new Buffer(size); + num.copy(out); + if (num.length === 0) out[0] = 0; + return this._createEncoderBuffer(out); + } + + if (num < 0x80) return this._createEncoderBuffer(num); + if (num < 0x100) return this._createEncoderBuffer([0, num]); + var size = 1; + + for (var i = num; i >= 0x100; i >>= 8) { + size++; + } + + var out = new Array(size); + + for (var i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + + if (out[0] & 0x80) { + out.unshift(0); + } + + return this._createEncoderBuffer(new Buffer(out)); +}; + +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') entity = entity(obj); + return entity._getEncoder('der').tree; +}; + +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + var state = this._baseState; + var i; + if (state['default'] === null) return false; + var data = dataBuffer.join(); + if (state.defaultBuffer === undefined) state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + if (data.length !== state.defaultBuffer.length) return false; + + for (i = 0; i < data.length; i++) { + if (data[i] !== state.defaultBuffer[i]) return false; + } + + return true; +}; // Utility methods + + +function encodeTag(tag, primitive, cls, reporter) { + var res; + if (tag === 'seqof') tag = 'seq';else if (tag === 'setof') tag = 'set'; + if (der.tagByName.hasOwnProperty(tag)) res = der.tagByName[tag];else if (typeof tag === 'number' && (tag | 0) === tag) res = tag;else return reporter.error('Unknown tag: ' + tag); + if (res >= 0x1f) return reporter.error('Multi-octet tag encoding unsupported'); + if (!primitive) res |= 0x20; + res |= der.tagClassByName[cls || 'universal'] << 6; + return res; +} + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/encoders/index.js": +/*!*********************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/encoders/index.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var encoders = exports; +encoders.der = __webpack_require__(/*! ./der */ "./node_modules/asn1.js/lib/asn1/encoders/der.js"); +encoders.pem = __webpack_require__(/*! ./pem */ "./node_modules/asn1.js/lib/asn1/encoders/pem.js"); + +/***/ }), + +/***/ "./node_modules/asn1.js/lib/asn1/encoders/pem.js": +/*!*******************************************************!*\ + !*** ./node_modules/asn1.js/lib/asn1/encoders/pem.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var DEREncoder = __webpack_require__(/*! ./der */ "./node_modules/asn1.js/lib/asn1/encoders/der.js"); + +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; +} + +; +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; + +PEMEncoder.prototype.encode = function encode(data, options) { + var buf = DEREncoder.prototype.encode.call(this, data); + var p = buf.toString('base64'); + var out = ['-----BEGIN ' + options.label + '-----']; + + for (var i = 0; i < p.length; i += 64) { + out.push(p.slice(i, i + 64)); + } + + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); +}; + +/***/ }), + +/***/ "./node_modules/bn.js/lib/bn.js": +/*!**************************************!*\ + !*** ./node_modules/bn.js/lib/bn.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +(function (module, exports) { + 'use strict'; // Utils + + function assert(val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } // Could use `inherits` module, but don't want to move from single file + // architecture yet. + + + function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + + var TempCtor = function TempCtor() {}; + + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } // BN + + + function BN(number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; // Reduction context + + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + + if (_typeof(module) === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + var Buffer; + + try { + Buffer = __webpack_require__(/*! buffer */ 3).Buffer; + } catch (e) {} + + BN.isBN = function isBN(num) { + if (num instanceof BN) { + return true; + } + + return num !== null && _typeof(num) === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max(left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min(left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init(number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (_typeof(number) === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + + assert(base === (base | 0) && base >= 2 && base <= 36); + number = number.toString().replace(/\s+/g, ''); + var start = 0; + + if (number[0] === '-') { + start++; + } + + if (base === 16) { + this._parseHex(number, start); + } else { + this._parseBase(number, base, start); + } + + if (number[0] === '-') { + this.negative = 1; + } + + this.strip(); + if (endian !== 'le') return; + + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initNumber = function _initNumber(number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + + if (number < 0x4000000) { + this.words = [number & 0x3ffffff]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1]; + this.length = 3; + } + + if (endian !== 'le') return; // Reverse the bytes + + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray(number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + + if (number.length <= 0) { + this.words = [0]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | number[i - 1] << 8 | number[i - 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | number[i + 1] << 8 | number[i + 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + + if (off >= 26) { + off -= 26; + j++; + } + } + } + + return this.strip(); + }; + + function parseHex(str, start, end) { + var r = 0; + var len = Math.min(str.length, end); + + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + r <<= 4; // 'a' - 'f' + + if (c >= 49 && c <= 54) { + r |= c - 49 + 0xa; // 'A' - 'F' + } else if (c >= 17 && c <= 22) { + r |= c - 17 + 0xa; // '0' - '9' + } else { + r |= c & 0xf; + } + } + + return r; + } + + BN.prototype._parseHex = function _parseHex(number, start) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; // Scan 24-bit chunks and add them to the number + + var off = 0; + + for (i = number.length - 6, j = 0; i >= start; i -= 6) { + w = parseHex(number, i, i + 6); + this.words[j] |= w << off & 0x3ffffff; // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb + + this.words[j + 1] |= w >>> 26 - off & 0x3fffff; + off += 24; + + if (off >= 26) { + off -= 26; + j++; + } + } + + if (i + 6 !== start) { + w = parseHex(number, start, i + 6); + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] |= w >>> 26 - off & 0x3fffff; + } + + this.strip(); + }; + + function parseBase(str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + r *= mul; // 'a' + + if (c >= 49) { + r += c - 49 + 0xa; // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; // '0' - '9' + } else { + r += c; + } + } + + return r; + } + + BN.prototype._parseBase = function _parseBase(number, base, start) { + // Initialize as zero + this.words = [0]; + this.length = 1; // Find length of limb in base + + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + + limbLen--; + limbPow = limbPow / base | 0; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + var word = 0; + + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + this.imuln(limbPow); + + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + }; + + BN.prototype.copy = function copy(dest) { + dest.words = new Array(this.length); + + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone() { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand(size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + + return this; + }; // Remove leading `0` from `this` + + + BN.prototype.strip = function strip() { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign() { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + + return this; + }; + + BN.prototype.inspect = function inspect() { + return (this.red ? ''; + }; + /* + var zeros = []; + var groupSizes = []; + var groupBases = []; + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + */ + + + var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000']; + var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]; + var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176]; + + BN.prototype.toString = function toString(base, padding) { + base = base || 10; + padding = padding | 0 || 1; + var out; + + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = ((w << off | carry) & 0xffffff).toString(16); + carry = w >>> 24 - off & 0xffffff; + + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + + off += 2; + + if (off >= 26) { + off -= 26; + i--; + } + } + + if (carry !== 0) { + out = carry.toString(16) + out; + } + + while (out.length % padding !== 0) { + out = '0' + out; + } + + if (this.negative !== 0) { + out = '-' + out; + } + + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; // var groupBase = Math.pow(base, groupSize); + + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + + if (this.isZero()) { + out = '0' + out; + } + + while (out.length % padding !== 0) { + out = '0' + out; + } + + if (this.negative !== 0) { + out = '-' + out; + } + + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber() { + var ret = this.words[0]; + + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + this.words[1] * 0x4000000; + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + + return this.negative !== 0 ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON() { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer(endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray(endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + var b, i; + var q = this.clone(); + + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits(w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits(w) { + var t = w; + var r = 0; + + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits(w) { + // Short-cut + if (w === 0) return 26; + var t = w; + var r = 0; + + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + + if ((t & 0x1) === 0) { + r++; + } + + return r; + }; // Return number of used bits in a BN + + + BN.prototype.bitLength = function bitLength() { + var w = this.words[this.length - 1]; + + var hi = this._countBits(w); + + return (this.length - 1) * 26 + hi; + }; + + function toBitArray(num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = bit / 26 | 0; + var wbit = bit % 26; + w[bit] = (num.words[off] & 1 << wbit) >>> wbit; + } + + return w; + } // Number of trailing zero bits + + + BN.prototype.zeroBits = function zeroBits() { + if (this.isZero()) return 0; + var r = 0; + + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + + r += b; + if (b !== 26) break; + } + + return r; + }; + + BN.prototype.byteLength = function byteLength() { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos(width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos(width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg() { + return this.negative !== 0; + }; // Return negative clone of `this` + + + BN.prototype.neg = function neg() { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg() { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; // Or `num` with `this` in-place + + + BN.prototype.iuor = function iuor(num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior(num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; // Or `num` with `this` + + + BN.prototype.or = function or(num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor(num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; // And `num` with `this` in-place + + + BN.prototype.iuand = function iuand(num) { + // b = min-length(num, this) + var b; + + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + return this.strip(); + }; + + BN.prototype.iand = function iand(num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; // And `num` with `this` + + + BN.prototype.and = function and(num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand(num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; // Xor `num` with `this` in-place + + + BN.prototype.iuxor = function iuxor(num) { + // a.length > b.length + var a; + var b; + + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + return this.strip(); + }; + + BN.prototype.ixor = function ixor(num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; // Xor `num` with `this` + + + BN.prototype.xor = function xor(num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor(num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; // Not ``this`` with ``width`` bitwidth + + + BN.prototype.inotn = function inotn(width) { + assert(typeof width === 'number' && width >= 0); + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; // Extend the buffer with leading zeroes + + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } // Handle complete words + + + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } // Handle the residue + + + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft; + } // And remove leading zeroes + + + return this.strip(); + }; + + BN.prototype.notn = function notn(width) { + return this.clone().inotn(width); + }; // Set `bit` of `this` + + + BN.prototype.setn = function setn(bit, val) { + assert(typeof bit === 'number' && bit >= 0); + var off = bit / 26 | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | 1 << wbit; + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; // Add `num` to `this` in-place + + + BN.prototype.iadd = function iadd(num) { + var r; // negative + positive + + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } // a.length > b.length + + + var a, b; + + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; // Add `num` to `this` + + + BN.prototype.add = function add(num) { + var res; + + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + return num.clone().iadd(this); + }; // Subtract `num` from `this` in-place + + + BN.prototype.isub = function isub(num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } // At this point both numbers are positive + + + var cmp = this.cmp(num); // Optimization - zeroify + + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } // a > b + + + var a, b; + + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } // Copy rest of the words + + + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; // Subtract `num` from `this` + + + BN.prototype.sub = function sub(num) { + return this.clone().isub(num); + }; + + function smallMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + var len = self.length + num.length | 0; + out.length = len; + len = len - 1 | 0; // Peel one iteration (compiler can't do it, because of code complexity) + + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + var carry = r / 0x4000000 | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += r / 0x4000000 | 0; + rword = r & 0x3ffffff; + } + + out.words[k] = rword | 0; + carry = ncarry | 0; + } + + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + + + var comb10MulTo = function comb10MulTo(self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = mid + Math.imul(ah0, bl0) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = mid + Math.imul(ah1, bl0) | 0; + hi = Math.imul(ah1, bh0); + lo = lo + Math.imul(al0, bl1) | 0; + mid = mid + Math.imul(al0, bh1) | 0; + mid = mid + Math.imul(ah0, bl1) | 0; + hi = hi + Math.imul(ah0, bh1) | 0; + var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = mid + Math.imul(ah2, bl0) | 0; + hi = Math.imul(ah2, bh0); + lo = lo + Math.imul(al1, bl1) | 0; + mid = mid + Math.imul(al1, bh1) | 0; + mid = mid + Math.imul(ah1, bl1) | 0; + hi = hi + Math.imul(ah1, bh1) | 0; + lo = lo + Math.imul(al0, bl2) | 0; + mid = mid + Math.imul(al0, bh2) | 0; + mid = mid + Math.imul(ah0, bl2) | 0; + hi = hi + Math.imul(ah0, bh2) | 0; + var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = mid + Math.imul(ah3, bl0) | 0; + hi = Math.imul(ah3, bh0); + lo = lo + Math.imul(al2, bl1) | 0; + mid = mid + Math.imul(al2, bh1) | 0; + mid = mid + Math.imul(ah2, bl1) | 0; + hi = hi + Math.imul(ah2, bh1) | 0; + lo = lo + Math.imul(al1, bl2) | 0; + mid = mid + Math.imul(al1, bh2) | 0; + mid = mid + Math.imul(ah1, bl2) | 0; + hi = hi + Math.imul(ah1, bh2) | 0; + lo = lo + Math.imul(al0, bl3) | 0; + mid = mid + Math.imul(al0, bh3) | 0; + mid = mid + Math.imul(ah0, bl3) | 0; + hi = hi + Math.imul(ah0, bh3) | 0; + var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = mid + Math.imul(ah4, bl0) | 0; + hi = Math.imul(ah4, bh0); + lo = lo + Math.imul(al3, bl1) | 0; + mid = mid + Math.imul(al3, bh1) | 0; + mid = mid + Math.imul(ah3, bl1) | 0; + hi = hi + Math.imul(ah3, bh1) | 0; + lo = lo + Math.imul(al2, bl2) | 0; + mid = mid + Math.imul(al2, bh2) | 0; + mid = mid + Math.imul(ah2, bl2) | 0; + hi = hi + Math.imul(ah2, bh2) | 0; + lo = lo + Math.imul(al1, bl3) | 0; + mid = mid + Math.imul(al1, bh3) | 0; + mid = mid + Math.imul(ah1, bl3) | 0; + hi = hi + Math.imul(ah1, bh3) | 0; + lo = lo + Math.imul(al0, bl4) | 0; + mid = mid + Math.imul(al0, bh4) | 0; + mid = mid + Math.imul(ah0, bl4) | 0; + hi = hi + Math.imul(ah0, bh4) | 0; + var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = mid + Math.imul(ah5, bl0) | 0; + hi = Math.imul(ah5, bh0); + lo = lo + Math.imul(al4, bl1) | 0; + mid = mid + Math.imul(al4, bh1) | 0; + mid = mid + Math.imul(ah4, bl1) | 0; + hi = hi + Math.imul(ah4, bh1) | 0; + lo = lo + Math.imul(al3, bl2) | 0; + mid = mid + Math.imul(al3, bh2) | 0; + mid = mid + Math.imul(ah3, bl2) | 0; + hi = hi + Math.imul(ah3, bh2) | 0; + lo = lo + Math.imul(al2, bl3) | 0; + mid = mid + Math.imul(al2, bh3) | 0; + mid = mid + Math.imul(ah2, bl3) | 0; + hi = hi + Math.imul(ah2, bh3) | 0; + lo = lo + Math.imul(al1, bl4) | 0; + mid = mid + Math.imul(al1, bh4) | 0; + mid = mid + Math.imul(ah1, bl4) | 0; + hi = hi + Math.imul(ah1, bh4) | 0; + lo = lo + Math.imul(al0, bl5) | 0; + mid = mid + Math.imul(al0, bh5) | 0; + mid = mid + Math.imul(ah0, bl5) | 0; + hi = hi + Math.imul(ah0, bh5) | 0; + var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = mid + Math.imul(ah6, bl0) | 0; + hi = Math.imul(ah6, bh0); + lo = lo + Math.imul(al5, bl1) | 0; + mid = mid + Math.imul(al5, bh1) | 0; + mid = mid + Math.imul(ah5, bl1) | 0; + hi = hi + Math.imul(ah5, bh1) | 0; + lo = lo + Math.imul(al4, bl2) | 0; + mid = mid + Math.imul(al4, bh2) | 0; + mid = mid + Math.imul(ah4, bl2) | 0; + hi = hi + Math.imul(ah4, bh2) | 0; + lo = lo + Math.imul(al3, bl3) | 0; + mid = mid + Math.imul(al3, bh3) | 0; + mid = mid + Math.imul(ah3, bl3) | 0; + hi = hi + Math.imul(ah3, bh3) | 0; + lo = lo + Math.imul(al2, bl4) | 0; + mid = mid + Math.imul(al2, bh4) | 0; + mid = mid + Math.imul(ah2, bl4) | 0; + hi = hi + Math.imul(ah2, bh4) | 0; + lo = lo + Math.imul(al1, bl5) | 0; + mid = mid + Math.imul(al1, bh5) | 0; + mid = mid + Math.imul(ah1, bl5) | 0; + hi = hi + Math.imul(ah1, bh5) | 0; + lo = lo + Math.imul(al0, bl6) | 0; + mid = mid + Math.imul(al0, bh6) | 0; + mid = mid + Math.imul(ah0, bl6) | 0; + hi = hi + Math.imul(ah0, bh6) | 0; + var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = mid + Math.imul(ah7, bl0) | 0; + hi = Math.imul(ah7, bh0); + lo = lo + Math.imul(al6, bl1) | 0; + mid = mid + Math.imul(al6, bh1) | 0; + mid = mid + Math.imul(ah6, bl1) | 0; + hi = hi + Math.imul(ah6, bh1) | 0; + lo = lo + Math.imul(al5, bl2) | 0; + mid = mid + Math.imul(al5, bh2) | 0; + mid = mid + Math.imul(ah5, bl2) | 0; + hi = hi + Math.imul(ah5, bh2) | 0; + lo = lo + Math.imul(al4, bl3) | 0; + mid = mid + Math.imul(al4, bh3) | 0; + mid = mid + Math.imul(ah4, bl3) | 0; + hi = hi + Math.imul(ah4, bh3) | 0; + lo = lo + Math.imul(al3, bl4) | 0; + mid = mid + Math.imul(al3, bh4) | 0; + mid = mid + Math.imul(ah3, bl4) | 0; + hi = hi + Math.imul(ah3, bh4) | 0; + lo = lo + Math.imul(al2, bl5) | 0; + mid = mid + Math.imul(al2, bh5) | 0; + mid = mid + Math.imul(ah2, bl5) | 0; + hi = hi + Math.imul(ah2, bh5) | 0; + lo = lo + Math.imul(al1, bl6) | 0; + mid = mid + Math.imul(al1, bh6) | 0; + mid = mid + Math.imul(ah1, bl6) | 0; + hi = hi + Math.imul(ah1, bh6) | 0; + lo = lo + Math.imul(al0, bl7) | 0; + mid = mid + Math.imul(al0, bh7) | 0; + mid = mid + Math.imul(ah0, bl7) | 0; + hi = hi + Math.imul(ah0, bh7) | 0; + var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = mid + Math.imul(ah8, bl0) | 0; + hi = Math.imul(ah8, bh0); + lo = lo + Math.imul(al7, bl1) | 0; + mid = mid + Math.imul(al7, bh1) | 0; + mid = mid + Math.imul(ah7, bl1) | 0; + hi = hi + Math.imul(ah7, bh1) | 0; + lo = lo + Math.imul(al6, bl2) | 0; + mid = mid + Math.imul(al6, bh2) | 0; + mid = mid + Math.imul(ah6, bl2) | 0; + hi = hi + Math.imul(ah6, bh2) | 0; + lo = lo + Math.imul(al5, bl3) | 0; + mid = mid + Math.imul(al5, bh3) | 0; + mid = mid + Math.imul(ah5, bl3) | 0; + hi = hi + Math.imul(ah5, bh3) | 0; + lo = lo + Math.imul(al4, bl4) | 0; + mid = mid + Math.imul(al4, bh4) | 0; + mid = mid + Math.imul(ah4, bl4) | 0; + hi = hi + Math.imul(ah4, bh4) | 0; + lo = lo + Math.imul(al3, bl5) | 0; + mid = mid + Math.imul(al3, bh5) | 0; + mid = mid + Math.imul(ah3, bl5) | 0; + hi = hi + Math.imul(ah3, bh5) | 0; + lo = lo + Math.imul(al2, bl6) | 0; + mid = mid + Math.imul(al2, bh6) | 0; + mid = mid + Math.imul(ah2, bl6) | 0; + hi = hi + Math.imul(ah2, bh6) | 0; + lo = lo + Math.imul(al1, bl7) | 0; + mid = mid + Math.imul(al1, bh7) | 0; + mid = mid + Math.imul(ah1, bl7) | 0; + hi = hi + Math.imul(ah1, bh7) | 0; + lo = lo + Math.imul(al0, bl8) | 0; + mid = mid + Math.imul(al0, bh8) | 0; + mid = mid + Math.imul(ah0, bl8) | 0; + hi = hi + Math.imul(ah0, bh8) | 0; + var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = mid + Math.imul(ah9, bl0) | 0; + hi = Math.imul(ah9, bh0); + lo = lo + Math.imul(al8, bl1) | 0; + mid = mid + Math.imul(al8, bh1) | 0; + mid = mid + Math.imul(ah8, bl1) | 0; + hi = hi + Math.imul(ah8, bh1) | 0; + lo = lo + Math.imul(al7, bl2) | 0; + mid = mid + Math.imul(al7, bh2) | 0; + mid = mid + Math.imul(ah7, bl2) | 0; + hi = hi + Math.imul(ah7, bh2) | 0; + lo = lo + Math.imul(al6, bl3) | 0; + mid = mid + Math.imul(al6, bh3) | 0; + mid = mid + Math.imul(ah6, bl3) | 0; + hi = hi + Math.imul(ah6, bh3) | 0; + lo = lo + Math.imul(al5, bl4) | 0; + mid = mid + Math.imul(al5, bh4) | 0; + mid = mid + Math.imul(ah5, bl4) | 0; + hi = hi + Math.imul(ah5, bh4) | 0; + lo = lo + Math.imul(al4, bl5) | 0; + mid = mid + Math.imul(al4, bh5) | 0; + mid = mid + Math.imul(ah4, bl5) | 0; + hi = hi + Math.imul(ah4, bh5) | 0; + lo = lo + Math.imul(al3, bl6) | 0; + mid = mid + Math.imul(al3, bh6) | 0; + mid = mid + Math.imul(ah3, bl6) | 0; + hi = hi + Math.imul(ah3, bh6) | 0; + lo = lo + Math.imul(al2, bl7) | 0; + mid = mid + Math.imul(al2, bh7) | 0; + mid = mid + Math.imul(ah2, bl7) | 0; + hi = hi + Math.imul(ah2, bh7) | 0; + lo = lo + Math.imul(al1, bl8) | 0; + mid = mid + Math.imul(al1, bh8) | 0; + mid = mid + Math.imul(ah1, bl8) | 0; + hi = hi + Math.imul(ah1, bh8) | 0; + lo = lo + Math.imul(al0, bl9) | 0; + mid = mid + Math.imul(al0, bh9) | 0; + mid = mid + Math.imul(ah0, bl9) | 0; + hi = hi + Math.imul(ah0, bh9) | 0; + var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = mid + Math.imul(ah9, bl1) | 0; + hi = Math.imul(ah9, bh1); + lo = lo + Math.imul(al8, bl2) | 0; + mid = mid + Math.imul(al8, bh2) | 0; + mid = mid + Math.imul(ah8, bl2) | 0; + hi = hi + Math.imul(ah8, bh2) | 0; + lo = lo + Math.imul(al7, bl3) | 0; + mid = mid + Math.imul(al7, bh3) | 0; + mid = mid + Math.imul(ah7, bl3) | 0; + hi = hi + Math.imul(ah7, bh3) | 0; + lo = lo + Math.imul(al6, bl4) | 0; + mid = mid + Math.imul(al6, bh4) | 0; + mid = mid + Math.imul(ah6, bl4) | 0; + hi = hi + Math.imul(ah6, bh4) | 0; + lo = lo + Math.imul(al5, bl5) | 0; + mid = mid + Math.imul(al5, bh5) | 0; + mid = mid + Math.imul(ah5, bl5) | 0; + hi = hi + Math.imul(ah5, bh5) | 0; + lo = lo + Math.imul(al4, bl6) | 0; + mid = mid + Math.imul(al4, bh6) | 0; + mid = mid + Math.imul(ah4, bl6) | 0; + hi = hi + Math.imul(ah4, bh6) | 0; + lo = lo + Math.imul(al3, bl7) | 0; + mid = mid + Math.imul(al3, bh7) | 0; + mid = mid + Math.imul(ah3, bl7) | 0; + hi = hi + Math.imul(ah3, bh7) | 0; + lo = lo + Math.imul(al2, bl8) | 0; + mid = mid + Math.imul(al2, bh8) | 0; + mid = mid + Math.imul(ah2, bl8) | 0; + hi = hi + Math.imul(ah2, bh8) | 0; + lo = lo + Math.imul(al1, bl9) | 0; + mid = mid + Math.imul(al1, bh9) | 0; + mid = mid + Math.imul(ah1, bl9) | 0; + hi = hi + Math.imul(ah1, bh9) | 0; + var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = mid + Math.imul(ah9, bl2) | 0; + hi = Math.imul(ah9, bh2); + lo = lo + Math.imul(al8, bl3) | 0; + mid = mid + Math.imul(al8, bh3) | 0; + mid = mid + Math.imul(ah8, bl3) | 0; + hi = hi + Math.imul(ah8, bh3) | 0; + lo = lo + Math.imul(al7, bl4) | 0; + mid = mid + Math.imul(al7, bh4) | 0; + mid = mid + Math.imul(ah7, bl4) | 0; + hi = hi + Math.imul(ah7, bh4) | 0; + lo = lo + Math.imul(al6, bl5) | 0; + mid = mid + Math.imul(al6, bh5) | 0; + mid = mid + Math.imul(ah6, bl5) | 0; + hi = hi + Math.imul(ah6, bh5) | 0; + lo = lo + Math.imul(al5, bl6) | 0; + mid = mid + Math.imul(al5, bh6) | 0; + mid = mid + Math.imul(ah5, bl6) | 0; + hi = hi + Math.imul(ah5, bh6) | 0; + lo = lo + Math.imul(al4, bl7) | 0; + mid = mid + Math.imul(al4, bh7) | 0; + mid = mid + Math.imul(ah4, bl7) | 0; + hi = hi + Math.imul(ah4, bh7) | 0; + lo = lo + Math.imul(al3, bl8) | 0; + mid = mid + Math.imul(al3, bh8) | 0; + mid = mid + Math.imul(ah3, bl8) | 0; + hi = hi + Math.imul(ah3, bh8) | 0; + lo = lo + Math.imul(al2, bl9) | 0; + mid = mid + Math.imul(al2, bh9) | 0; + mid = mid + Math.imul(ah2, bl9) | 0; + hi = hi + Math.imul(ah2, bh9) | 0; + var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = mid + Math.imul(ah9, bl3) | 0; + hi = Math.imul(ah9, bh3); + lo = lo + Math.imul(al8, bl4) | 0; + mid = mid + Math.imul(al8, bh4) | 0; + mid = mid + Math.imul(ah8, bl4) | 0; + hi = hi + Math.imul(ah8, bh4) | 0; + lo = lo + Math.imul(al7, bl5) | 0; + mid = mid + Math.imul(al7, bh5) | 0; + mid = mid + Math.imul(ah7, bl5) | 0; + hi = hi + Math.imul(ah7, bh5) | 0; + lo = lo + Math.imul(al6, bl6) | 0; + mid = mid + Math.imul(al6, bh6) | 0; + mid = mid + Math.imul(ah6, bl6) | 0; + hi = hi + Math.imul(ah6, bh6) | 0; + lo = lo + Math.imul(al5, bl7) | 0; + mid = mid + Math.imul(al5, bh7) | 0; + mid = mid + Math.imul(ah5, bl7) | 0; + hi = hi + Math.imul(ah5, bh7) | 0; + lo = lo + Math.imul(al4, bl8) | 0; + mid = mid + Math.imul(al4, bh8) | 0; + mid = mid + Math.imul(ah4, bl8) | 0; + hi = hi + Math.imul(ah4, bh8) | 0; + lo = lo + Math.imul(al3, bl9) | 0; + mid = mid + Math.imul(al3, bh9) | 0; + mid = mid + Math.imul(ah3, bl9) | 0; + hi = hi + Math.imul(ah3, bh9) | 0; + var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = mid + Math.imul(ah9, bl4) | 0; + hi = Math.imul(ah9, bh4); + lo = lo + Math.imul(al8, bl5) | 0; + mid = mid + Math.imul(al8, bh5) | 0; + mid = mid + Math.imul(ah8, bl5) | 0; + hi = hi + Math.imul(ah8, bh5) | 0; + lo = lo + Math.imul(al7, bl6) | 0; + mid = mid + Math.imul(al7, bh6) | 0; + mid = mid + Math.imul(ah7, bl6) | 0; + hi = hi + Math.imul(ah7, bh6) | 0; + lo = lo + Math.imul(al6, bl7) | 0; + mid = mid + Math.imul(al6, bh7) | 0; + mid = mid + Math.imul(ah6, bl7) | 0; + hi = hi + Math.imul(ah6, bh7) | 0; + lo = lo + Math.imul(al5, bl8) | 0; + mid = mid + Math.imul(al5, bh8) | 0; + mid = mid + Math.imul(ah5, bl8) | 0; + hi = hi + Math.imul(ah5, bh8) | 0; + lo = lo + Math.imul(al4, bl9) | 0; + mid = mid + Math.imul(al4, bh9) | 0; + mid = mid + Math.imul(ah4, bl9) | 0; + hi = hi + Math.imul(ah4, bh9) | 0; + var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = mid + Math.imul(ah9, bl5) | 0; + hi = Math.imul(ah9, bh5); + lo = lo + Math.imul(al8, bl6) | 0; + mid = mid + Math.imul(al8, bh6) | 0; + mid = mid + Math.imul(ah8, bl6) | 0; + hi = hi + Math.imul(ah8, bh6) | 0; + lo = lo + Math.imul(al7, bl7) | 0; + mid = mid + Math.imul(al7, bh7) | 0; + mid = mid + Math.imul(ah7, bl7) | 0; + hi = hi + Math.imul(ah7, bh7) | 0; + lo = lo + Math.imul(al6, bl8) | 0; + mid = mid + Math.imul(al6, bh8) | 0; + mid = mid + Math.imul(ah6, bl8) | 0; + hi = hi + Math.imul(ah6, bh8) | 0; + lo = lo + Math.imul(al5, bl9) | 0; + mid = mid + Math.imul(al5, bh9) | 0; + mid = mid + Math.imul(ah5, bl9) | 0; + hi = hi + Math.imul(ah5, bh9) | 0; + var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = mid + Math.imul(ah9, bl6) | 0; + hi = Math.imul(ah9, bh6); + lo = lo + Math.imul(al8, bl7) | 0; + mid = mid + Math.imul(al8, bh7) | 0; + mid = mid + Math.imul(ah8, bl7) | 0; + hi = hi + Math.imul(ah8, bh7) | 0; + lo = lo + Math.imul(al7, bl8) | 0; + mid = mid + Math.imul(al7, bh8) | 0; + mid = mid + Math.imul(ah7, bl8) | 0; + hi = hi + Math.imul(ah7, bh8) | 0; + lo = lo + Math.imul(al6, bl9) | 0; + mid = mid + Math.imul(al6, bh9) | 0; + mid = mid + Math.imul(ah6, bl9) | 0; + hi = hi + Math.imul(ah6, bh9) | 0; + var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = mid + Math.imul(ah9, bl7) | 0; + hi = Math.imul(ah9, bh7); + lo = lo + Math.imul(al8, bl8) | 0; + mid = mid + Math.imul(al8, bh8) | 0; + mid = mid + Math.imul(ah8, bl8) | 0; + hi = hi + Math.imul(ah8, bh8) | 0; + lo = lo + Math.imul(al7, bl9) | 0; + mid = mid + Math.imul(al7, bh9) | 0; + mid = mid + Math.imul(ah7, bl9) | 0; + hi = hi + Math.imul(ah7, bh9) | 0; + var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = mid + Math.imul(ah9, bl8) | 0; + hi = Math.imul(ah9, bh8); + lo = lo + Math.imul(al8, bl9) | 0; + mid = mid + Math.imul(al8, bh9) | 0; + mid = mid + Math.imul(ah8, bl9) | 0; + hi = hi + Math.imul(ah8, bh9) | 0; + var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = mid + Math.imul(ah9, bl9) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + + if (c !== 0) { + o[19] = c; + out.length++; + } + + return out; + }; // Polyfill comb + + + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + var carry = 0; + var hncarry = 0; + + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + ncarry = ncarry + (r / 0x4000000 | 0) | 0; + lo = lo + rword | 0; + rword = lo & 0x3ffffff; + ncarry = ncarry + (lo >>> 26) | 0; + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo(self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo(num, out) { + var res; + var len = this.length + num.length; + + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + + function FFTM(x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT(N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; // Returns binary-reversed representation of `x` + + + FFTM.prototype.revBin = function revBin(x, l, N) { + if (x === 0 || x === N - 1) return x; + var rb = 0; + + for (var i = 0; i < l; i++) { + rb |= (x & 1) << l - i - 1; + x >>= 1; + } + + return rb; + }; // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + + + FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + var rx = rtwdf_ * ro - itwdf_ * io; + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + /* jshint maxdepth : false */ + + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b(n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate(rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + t = iws[i]; + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b(ws, N) { + var carry = 0; + + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry; + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) { + var carry = 0; + + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + rws[2 * i] = carry & 0x1fff; + carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; + carry = carry >>> 13; + } // Pad with zeroes + + + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub(N) { + var ph = new Array(N); + + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp(x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + var rmws = out.words; + rmws.length = N; + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; // Multiply `this` by `num` + + + BN.prototype.mul = function mul(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; // Multiply employing FFT + + + BN.prototype.mulf = function mulf(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; // In-place Multiplication + + + BN.prototype.imul = function imul(num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); // Carry + + var carry = 0; + + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += w / 0x4000000 | 0; // NOTE: lo is 27bit maximum + + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln(num) { + return this.clone().imuln(num); + }; // `this` * `this` + + + BN.prototype.sqr = function sqr() { + return this.mul(this); + }; // `this` * `this` in-place + + + BN.prototype.isqr = function isqr() { + return this.imul(this.clone()); + }; // Math.pow(`this`, `num`) + + + BN.prototype.pow = function pow(num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); // Skip leading zeroes + + var res = this; + + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + res = res.mul(q); + } + } + + return res; + }; // Shift-left in-place + + + BN.prototype.iushln = function iushln(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = 0x3ffffff >>> 26 - r << 26 - r; + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = (this.words[i] | 0) - newCarry << r; + this.words[i] = c | carry; + carry = newCarry >>> 26 - r; + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln(bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + + + BN.prototype.iushrn = function iushrn(bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + + if (hint) { + h = (hint - hint % 26) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + var maskedWords = extended; + h -= s; + h = Math.max(0, h); // Extended mode, copy masked part + + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + + maskedWords.length = s; + } + + if (s === 0) {// No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = carry << 26 - r | word >>> r; + carry = word & mask; + } // Push carried bits as a mask + + + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn(bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; // Shift-left + + + BN.prototype.shln = function shln(bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln(bits) { + return this.clone().iushln(bits); + }; // Shift-right + + + BN.prototype.shrn = function shrn(bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn(bits) { + return this.clone().iushrn(bits); + }; // Test if n bit is set + + + BN.prototype.testn = function testn(bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; // Fast case: bit is much higher than all existing words + + if (this.length <= s) return false; // Check bit and return + + var w = this.words[s]; + return !!(w & q); + }; // Return only lowers bits of number (in-place) + + + BN.prototype.imaskn = function imaskn(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; // Return only lowers bits of number + + + BN.prototype.maskn = function maskn(bits) { + return this.clone().imaskn(bits); + }; // Add plain number `num` to `this` + + + BN.prototype.iaddn = function iaddn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); // Possible sign change + + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } // Add without checks + + + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn(num) { + this.words[0] += num; // Carry + + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + + this.length = Math.max(this.length, i + 1); + return this; + }; // Subtract plain number `num` from `this` + + + BN.prototype.isubn = function isubn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn(num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn(num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs() { + this.negative = 0; + return this; + }; + + BN.prototype.abs = function abs() { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - (right / 0x4000000 | 0); + this.words[i + shift] = w & 0x3ffffff; + } + + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); // Subtraction overflow + + assert(carry === -1); + carry = 0; + + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + + this.negative = 1; + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv(num, mode) { + var shift = this.length - num.length; + var a = this.clone(); + var b = num; // Normalize + + var bhi = b.words[b.length - 1] | 0; + + var bhiBits = this._countBits(bhi); + + shift = 26 - bhiBits; + + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } // Initialize quotient + + + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + + if (diff.negative === 0) { + a = diff; + + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + + qj = Math.min(qj / bhi | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + + while (a.negative !== 0) { + qj--; + a.negative = 0; + + a._ishlnsubmul(b, 1, j); + + if (!a.isZero()) { + a.negative ^= 1; + } + } + + if (q) { + q.words[j] = qj; + } + } + + if (q) { + q.strip(); + } + + a.strip(); // Denormalize + + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a + }; + }; // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + + + BN.prototype.divmod = function divmod(num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + + return { + div: res.div, + mod: mod + }; + } // Both numbers are positive at this point + // Strip both numbers to approximate shift value + + + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } // Very short reduction + + + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; // Find `this` / `num` + + + BN.prototype.div = function div(num) { + return this.divmod(num, 'div', false).div; + }; // Find `this` % `num` + + + BN.prototype.mod = function mod(num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod(num) { + return this.divmod(num, 'mod', true).mod; + }; // Find Round(`this` / `num`) + + + BN.prototype.divRound = function divRound(num) { + var dm = this.divmod(num); // Fast case - exact division + + if (dm.mod.isZero()) return dm.div; + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); // Round down + + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; // Round up + + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn(num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + var acc = 0; + + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; // In-place division by number + + + BN.prototype.idivn = function idivn(num) { + assert(num <= 0x3ffffff); + var carry = 0; + + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = w / num | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn(num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } // A * x + B * y = x + + + var A = new BN(1); + var B = new BN(0); // C * x + D * y = y + + var C = new BN(0); + var D = new BN(1); + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1) { + ; + } + + if (i > 0) { + x.iushrn(i); + + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); + } + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) { + ; + } + + if (j > 0) { + y.iushrn(j); + + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); + } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + + + BN.prototype._invmp = function _invmp(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1) { + ; + } + + if (i > 0) { + a.iushrn(i); + + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); + } + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) { + ; + } + + if (j > 0) { + b.iushrn(j); + + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd(num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; // Remove common factor of two + + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; // Invert number in the field F(num) + + + BN.prototype.invm = function invm(num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven() { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd() { + return (this.words[0] & 1) === 1; + }; // And first word and num + + + BN.prototype.andln = function andln(num) { + return this.words[0] & num; + }; // Increment at the bit position in-line + + + BN.prototype.bincn = function bincn(bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; // Fast case: bit is much higher than all existing words + + if (this.length <= s) { + this._expand(s + 1); + + this.words[s] |= q; + return this; + } // Add bit and propagate, if needed + + + var carry = q; + + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.isZero = function isZero() { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn(num) { + var negative = num < 0; + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + this.strip(); + var res; + + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + + if (this.negative !== 0) return -res | 0; + return res; + }; // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + + + BN.prototype.cmp = function cmp(num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; // Unsigned comparison + + + BN.prototype.ucmp = function ucmp(num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + var res = 0; + + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + if (a === b) continue; + + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + + break; + } + + return res; + }; + + BN.prototype.gtn = function gtn(num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt(num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten(num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte(num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn(num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt(num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten(num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte(num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn(num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq(num) { + return this.cmp(num) === 0; + }; // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + + + BN.red = function red(num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed() { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed(ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd(num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd(num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub(num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub(num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl(num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul(num) { + assert(this.red, 'redMul works only with red numbers'); + + this.red._verify2(this, num); + + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul(num) { + assert(this.red, 'redMul works only with red numbers'); + + this.red._verify2(this, num); + + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr() { + assert(this.red, 'redSqr works only with red numbers'); + + this.red._verify1(this); + + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr() { + assert(this.red, 'redISqr works only with red numbers'); + + this.red._verify1(this); + + return this.red.isqr(this); + }; // Square root over p + + + BN.prototype.redSqrt = function redSqrt() { + assert(this.red, 'redSqrt works only with red numbers'); + + this.red._verify1(this); + + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm() { + assert(this.red, 'redInvm works only with red numbers'); + + this.red._verify1(this); + + return this.red.invm(this); + }; // Return negative clone of `this` % `red modulo` + + + BN.prototype.redNeg = function redNeg() { + assert(this.red, 'redNeg works only with red numbers'); + + this.red._verify1(this); + + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow(num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + + this.red._verify1(this); + + return this.red.pow(this, num); + }; // Prime numbers with efficient reduction + + + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; // Pseudo-Mersenne prime + + function MPrime(name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp() { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce(num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + r.strip(); + } + + return r; + }; + + MPrime.prototype.split = function split(input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK(num) { + return num.imul(this.k); + }; + + function K256() { + MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + + inherits(K256, MPrime); + + K256.prototype.split = function split(input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + var outLen = Math.min(input.length, 9); + + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } // Shift by 9 limbs + + + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = (next & mask) << 4 | prev >>> 22; + prev = next; + } + + prev >>>= 22; + input.words[i - 10] = prev; + + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK(num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + + var lo = 0; + + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + (lo / 0x4000000 | 0); + } // Fast length reduction + + + if (num.words[num.length - 1] === 0) { + num.length--; + + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + + return num; + }; + + function P224() { + MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + + inherits(P224, MPrime); + + function P192() { + MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + + inherits(P192, MPrime); + + function P25519() { + // 2 ^ 255 - 19 + MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK(num) { + // K = 0x13 + var carry = 0; + + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + num.words[i] = lo; + carry = hi; + } + + if (carry !== 0) { + num.words[num.length++] = carry; + } + + return num; + }; // Exported mostly for testing purposes, use plain name instead + + + BN._prime = function prime(name) { + // Cached version of prime + if (primes[name]) return primes[name]; + var prime; + + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + + primes[name] = prime; + return prime; + }; // + // Base reduction engine + // + + + function Red(m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1(a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2(a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod(a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg(a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add(a, b) { + this._verify2(a, b); + + var res = a.add(b); + + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd(a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + + return res; + }; + + Red.prototype.sub = function sub(a, b) { + this._verify2(a, b); + + var res = a.sub(b); + + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + + return res._forceRed(this); + }; + + Red.prototype.isub = function isub(a, b) { + this._verify2(a, b); + + var res = a.isub(b); + + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + + return res; + }; + + Red.prototype.shl = function shl(a, num) { + this._verify1(a); + + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul(a, b) { + this._verify2(a, b); + + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul(a, b) { + this._verify2(a, b); + + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr(a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr(a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt(a) { + if (a.isZero()) return a.clone(); + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); // Fast case + + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + + + var q = this.m.subn(1); + var s = 0; + + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + + assert(!q.isZero()); + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + + while (t.cmp(one) !== 0) { + var tmp = t; + + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm(a) { + var inv = a._invmp(this.m); + + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow(a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + + for (var j = start - 1; j >= 0; j--) { + var bit = word >> j & 1; + + if (res !== wnd[0]) { + res = this.sqr(res); + } + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo(num) { + var r = num.umod(this.m); + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom(num) { + var res = num.clone(); + res.red = null; + return res; + }; // + // Montgomery method engine + // + + + BN.mont = function mont(num) { + return new Mont(num); + }; + + function Mont(m) { + Red.call(this, m); + this.shift = this.m.bitLength(); + + if (this.shift % 26 !== 0) { + this.shift += 26 - this.shift % 26; + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo(num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom(num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul(a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul(a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm(a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) + +/***/ }), + +/***/ "./node_modules/brorand/index.js": +/*!***************************************!*\ + !*** ./node_modules/brorand/index.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var r; + +module.exports = function rand(len) { + if (!r) r = new Rand(null); + return r.generate(len); +}; + +function Rand(rand) { + this.rand = rand; +} + +module.exports.Rand = Rand; + +Rand.prototype.generate = function generate(len) { + return this._rand(len); +}; // Emulate crypto API using randy + + +Rand.prototype._rand = function _rand(n) { + if (this.rand.getBytes) return this.rand.getBytes(n); + var res = new Uint8Array(n); + + for (var i = 0; i < res.length; i++) { + res[i] = this.rand.getByte(); + } + + return res; +}; + +if ((typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object') { + if (self.crypto && self.crypto.getRandomValues) { + // Modern browsers + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.crypto.getRandomValues(arr); + return arr; + }; + } else if (self.msCrypto && self.msCrypto.getRandomValues) { + // IE + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.msCrypto.getRandomValues(arr); + return arr; + }; // Safari's WebWorkers do not have `crypto` + + } else if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object') { + // Old junk + Rand.prototype._rand = function () { + throw new Error('Not implemented yet'); + }; + } +} else { + // Node.js or Web worker with no crypto support + try { + var crypto = __webpack_require__(/*! crypto */ 4); + + if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported'); + + Rand.prototype._rand = function _rand(n) { + return crypto.randomBytes(n); + }; + } catch (e) {} +} + +/***/ }), + +/***/ "./node_modules/browserify-aes/aes.js": +/*!********************************************!*\ + !*** ./node_modules/browserify-aes/aes.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +function asUInt32Array(buf) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf); + var len = buf.length / 4 | 0; + var out = new Array(len); + + for (var i = 0; i < len; i++) { + out[i] = buf.readUInt32BE(i * 4); + } + + return out; +} + +function scrubVec(v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0; + } +} + +function cryptBlock(M, keySchedule, SUB_MIX, SBOX, nRounds) { + var SUB_MIX0 = SUB_MIX[0]; + var SUB_MIX1 = SUB_MIX[1]; + var SUB_MIX2 = SUB_MIX[2]; + var SUB_MIX3 = SUB_MIX[3]; + var s0 = M[0] ^ keySchedule[0]; + var s1 = M[1] ^ keySchedule[1]; + var s2 = M[2] ^ keySchedule[2]; + var s3 = M[3] ^ keySchedule[3]; + var t0, t1, t2, t3; + var ksRow = 4; + + for (var round = 1; round < nRounds; round++) { + t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[s1 >>> 16 & 0xff] ^ SUB_MIX2[s2 >>> 8 & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]; + t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[s2 >>> 16 & 0xff] ^ SUB_MIX2[s3 >>> 8 & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]; + t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[s3 >>> 16 & 0xff] ^ SUB_MIX2[s0 >>> 8 & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]; + t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[s0 >>> 16 & 0xff] ^ SUB_MIX2[s1 >>> 8 & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]; + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + t0 = t0 >>> 0; + t1 = t1 >>> 0; + t2 = t2 >>> 0; + t3 = t3 >>> 0; + return [t0, t1, t2, t3]; +} // AES constants + + +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + +var G = function () { + // Compute double table + var d = new Array(256); + + for (var j = 0; j < 256; j++) { + if (j < 128) { + d[j] = j << 1; + } else { + d[j] = j << 1 ^ 0x11b; + } + } + + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX = [[], [], [], []]; + var INV_SUB_MIX = [[], [], [], []]; // Walk GF(2^8) + + var x = 0; + var xi = 0; + + for (var i = 0; i < 256; ++i) { + // Compute sbox + var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4; + sx = sx >>> 8 ^ sx & 0xff ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; // Compute multiplication + + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; // Compute sub bytes, mix columns tables + + var t = d[sx] * 0x101 ^ sx * 0x1010100; + SUB_MIX[0][x] = t << 24 | t >>> 8; + SUB_MIX[1][x] = t << 16 | t >>> 16; + SUB_MIX[2][x] = t << 8 | t >>> 24; + SUB_MIX[3][x] = t; // Compute inv sub bytes, inv mix columns tables + + t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100; + INV_SUB_MIX[0][sx] = t << 24 | t >>> 8; + INV_SUB_MIX[1][sx] = t << 16 | t >>> 16; + INV_SUB_MIX[2][sx] = t << 8 | t >>> 24; + INV_SUB_MIX[3][sx] = t; + + if (x === 0) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + + return { + SBOX: SBOX, + INV_SBOX: INV_SBOX, + SUB_MIX: SUB_MIX, + INV_SUB_MIX: INV_SUB_MIX + }; +}(); + +function AES(key) { + this._key = asUInt32Array(key); + + this._reset(); +} + +AES.blockSize = 4 * 4; +AES.keySize = 256 / 8; +AES.prototype.blockSize = AES.blockSize; +AES.prototype.keySize = AES.keySize; + +AES.prototype._reset = function () { + var keyWords = this._key; + var keySize = keyWords.length; + var nRounds = keySize + 6; + var ksRows = (nRounds + 1) * 4; + var keySchedule = []; + + for (var k = 0; k < keySize; k++) { + keySchedule[k] = keyWords[k]; + } + + for (k = keySize; k < ksRows; k++) { + var t = keySchedule[k - 1]; + + if (k % keySize === 0) { + t = t << 8 | t >>> 24; + t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff]; + t ^= RCON[k / keySize | 0] << 24; + } else if (keySize > 6 && k % keySize === 4) { + t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff]; + } + + keySchedule[k] = keySchedule[k - keySize] ^ t; + } + + var invKeySchedule = []; + + for (var ik = 0; ik < ksRows; ik++) { + var ksR = ksRows - ik; + var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]; + + if (ik < 4 || ksR <= 4) { + invKeySchedule[ik] = tt; + } else { + invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[tt >>> 16 & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[tt >>> 8 & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]; + } + } + + this._nRounds = nRounds; + this._keySchedule = keySchedule; + this._invKeySchedule = invKeySchedule; +}; + +AES.prototype.encryptBlockRaw = function (M) { + M = asUInt32Array(M); + return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds); +}; + +AES.prototype.encryptBlock = function (M) { + var out = this.encryptBlockRaw(M); + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0], 0); + buf.writeUInt32BE(out[1], 4); + buf.writeUInt32BE(out[2], 8); + buf.writeUInt32BE(out[3], 12); + return buf; +}; + +AES.prototype.decryptBlock = function (M) { + M = asUInt32Array(M); // swap + + var m1 = M[1]; + M[1] = M[3]; + M[3] = m1; + var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds); + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0], 0); + buf.writeUInt32BE(out[3], 4); + buf.writeUInt32BE(out[2], 8); + buf.writeUInt32BE(out[1], 12); + return buf; +}; + +AES.prototype.scrub = function () { + scrubVec(this._keySchedule); + scrubVec(this._invKeySchedule); + scrubVec(this._key); +}; + +module.exports.AES = AES; + +/***/ }), + +/***/ "./node_modules/browserify-aes/authCipher.js": +/*!***************************************************!*\ + !*** ./node_modules/browserify-aes/authCipher.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var aes = __webpack_require__(/*! ./aes */ "./node_modules/browserify-aes/aes.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var Transform = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var GHASH = __webpack_require__(/*! ./ghash */ "./node_modules/browserify-aes/ghash.js"); + +var xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js"); + +var incr32 = __webpack_require__(/*! ./incr32 */ "./node_modules/browserify-aes/incr32.js"); + +function xorTest(a, b) { + var out = 0; + if (a.length !== b.length) out++; + var len = Math.min(a.length, b.length); + + for (var i = 0; i < len; ++i) { + out += a[i] ^ b[i]; + } + + return out; +} + +function calcIv(self, iv, ck) { + if (iv.length === 12) { + self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]); + return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]); + } + + var ghash = new GHASH(ck); + var len = iv.length; + var toPad = len % 16; + ghash.update(iv); + + if (toPad) { + toPad = 16 - toPad; + ghash.update(Buffer.alloc(toPad, 0)); + } + + ghash.update(Buffer.alloc(8, 0)); + var ivBits = len * 8; + var tail = Buffer.alloc(8); + tail.writeUIntBE(ivBits, 0, 8); + ghash.update(tail); + self._finID = ghash.state; + var out = Buffer.from(self._finID); + incr32(out); + return out; +} + +function StreamCipher(mode, key, iv, decrypt) { + Transform.call(this); + var h = Buffer.alloc(4, 0); + this._cipher = new aes.AES(key); + + var ck = this._cipher.encryptBlock(h); + + this._ghash = new GHASH(ck); + iv = calcIv(this, iv, ck); + this._prev = Buffer.from(iv); + this._cache = Buffer.allocUnsafe(0); + this._secCache = Buffer.allocUnsafe(0); + this._decrypt = decrypt; + this._alen = 0; + this._len = 0; + this._mode = mode; + this._authTag = null; + this._called = false; +} + +inherits(StreamCipher, Transform); + +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - this._alen % 16; + + if (rump < 16) { + rump = Buffer.alloc(rump, 0); + + this._ghash.update(rump); + } + } + + this._called = true; + + var out = this._mode.encrypt(this, chunk); + + if (this._decrypt) { + this._ghash.update(chunk); + } else { + this._ghash.update(out); + } + + this._len += chunk.length; + return out; +}; + +StreamCipher.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data'); + var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)); + if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data'); + this._authTag = tag; + + this._cipher.scrub(); +}; + +StreamCipher.prototype.getAuthTag = function getAuthTag() { + if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state'); + return this._authTag; +}; + +StreamCipher.prototype.setAuthTag = function setAuthTag(tag) { + if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state'); + this._authTag = tag; +}; + +StreamCipher.prototype.setAAD = function setAAD(buf) { + if (this._called) throw new Error('Attempting to set AAD in unsupported state'); + + this._ghash.update(buf); + + this._alen += buf.length; +}; + +module.exports = StreamCipher; + +/***/ }), + +/***/ "./node_modules/browserify-aes/browser.js": +/*!************************************************!*\ + !*** ./node_modules/browserify-aes/browser.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var ciphers = __webpack_require__(/*! ./encrypter */ "./node_modules/browserify-aes/encrypter.js"); + +var deciphers = __webpack_require__(/*! ./decrypter */ "./node_modules/browserify-aes/decrypter.js"); + +var modes = __webpack_require__(/*! ./modes/list.json */ "./node_modules/browserify-aes/modes/list.json"); + +function getCiphers() { + return Object.keys(modes); +} + +exports.createCipher = exports.Cipher = ciphers.createCipher; +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv; +exports.createDecipher = exports.Decipher = deciphers.createDecipher; +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv; +exports.listCiphers = exports.getCiphers = getCiphers; + +/***/ }), + +/***/ "./node_modules/browserify-aes/decrypter.js": +/*!**************************************************!*\ + !*** ./node_modules/browserify-aes/decrypter.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var AuthCipher = __webpack_require__(/*! ./authCipher */ "./node_modules/browserify-aes/authCipher.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var MODES = __webpack_require__(/*! ./modes */ "./node_modules/browserify-aes/modes/index.js"); + +var StreamCipher = __webpack_require__(/*! ./streamCipher */ "./node_modules/browserify-aes/streamCipher.js"); + +var Transform = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js"); + +var aes = __webpack_require__(/*! ./aes */ "./node_modules/browserify-aes/aes.js"); + +var ebtk = __webpack_require__(/*! evp_bytestokey */ "./node_modules/evp_bytestokey/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +function Decipher(mode, key, iv) { + Transform.call(this); + this._cache = new Splitter(); + this._last = void 0; + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._mode = mode; + this._autopadding = true; +} + +inherits(Decipher, Transform); + +Decipher.prototype._update = function (data) { + this._cache.add(data); + + var chunk; + var thing; + var out = []; + + while (chunk = this._cache.get(this._autopadding)) { + thing = this._mode.decrypt(this, chunk); + out.push(thing); + } + + return Buffer.concat(out); +}; + +Decipher.prototype._final = function () { + var chunk = this._cache.flush(); + + if (this._autopadding) { + return unpad(this._mode.decrypt(this, chunk)); + } else if (chunk) { + throw new Error('data not multiple of block length'); + } +}; + +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo; + return this; +}; + +function Splitter() { + this.cache = Buffer.allocUnsafe(0); +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]); +}; + +Splitter.prototype.get = function (autoPadding) { + var out; + + if (autoPadding) { + if (this.cache.length > 16) { + out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + } else { + if (this.cache.length >= 16) { + out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + } + + return null; +}; + +Splitter.prototype.flush = function () { + if (this.cache.length) return this.cache; +}; + +function unpad(last) { + var padded = last[15]; + + if (padded < 1 || padded > 16) { + throw new Error('unable to decrypt data'); + } + + var i = -1; + + while (++i < padded) { + if (last[i + (16 - padded)] !== padded) { + throw new Error('unable to decrypt data'); + } + } + + if (padded === 16) return; + return last.slice(0, 16 - padded); +} + +function createDecipheriv(suite, password, iv) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + if (typeof iv === 'string') iv = Buffer.from(iv); + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length); + if (typeof password === 'string') password = Buffer.from(password); + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length); + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv, true); + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv, true); + } + + return new Decipher(config.module, password, iv); +} + +function createDecipher(suite, password) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + var keys = ebtk(password, false, config.key, config.iv); + return createDecipheriv(suite, keys.key, keys.iv); +} + +exports.createDecipher = createDecipher; +exports.createDecipheriv = createDecipheriv; + +/***/ }), + +/***/ "./node_modules/browserify-aes/encrypter.js": +/*!**************************************************!*\ + !*** ./node_modules/browserify-aes/encrypter.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var MODES = __webpack_require__(/*! ./modes */ "./node_modules/browserify-aes/modes/index.js"); + +var AuthCipher = __webpack_require__(/*! ./authCipher */ "./node_modules/browserify-aes/authCipher.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var StreamCipher = __webpack_require__(/*! ./streamCipher */ "./node_modules/browserify-aes/streamCipher.js"); + +var Transform = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js"); + +var aes = __webpack_require__(/*! ./aes */ "./node_modules/browserify-aes/aes.js"); + +var ebtk = __webpack_require__(/*! evp_bytestokey */ "./node_modules/evp_bytestokey/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +function Cipher(mode, key, iv) { + Transform.call(this); + this._cache = new Splitter(); + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._mode = mode; + this._autopadding = true; +} + +inherits(Cipher, Transform); + +Cipher.prototype._update = function (data) { + this._cache.add(data); + + var chunk; + var thing; + var out = []; + + while (chunk = this._cache.get()) { + thing = this._mode.encrypt(this, chunk); + out.push(thing); + } + + return Buffer.concat(out); +}; + +var PADDING = Buffer.alloc(16, 0x10); + +Cipher.prototype._final = function () { + var chunk = this._cache.flush(); + + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk); + + this._cipher.scrub(); + + return chunk; + } + + if (!chunk.equals(PADDING)) { + this._cipher.scrub(); + + throw new Error('data not multiple of block length'); + } +}; + +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo; + return this; +}; + +function Splitter() { + this.cache = Buffer.allocUnsafe(0); +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]); +}; + +Splitter.prototype.get = function () { + if (this.cache.length > 15) { + var out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + + return null; +}; + +Splitter.prototype.flush = function () { + var len = 16 - this.cache.length; + var padBuff = Buffer.allocUnsafe(len); + var i = -1; + + while (++i < len) { + padBuff.writeUInt8(len, i); + } + + return Buffer.concat([this.cache, padBuff]); +}; + +function createCipheriv(suite, password, iv) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + if (typeof password === 'string') password = Buffer.from(password); + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length); + if (typeof iv === 'string') iv = Buffer.from(iv); + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length); + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv); + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv); + } + + return new Cipher(config.module, password, iv); +} + +function createCipher(suite, password) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + var keys = ebtk(password, false, config.key, config.iv); + return createCipheriv(suite, keys.key, keys.iv); +} + +exports.createCipheriv = createCipheriv; +exports.createCipher = createCipher; + +/***/ }), + +/***/ "./node_modules/browserify-aes/ghash.js": +/*!**********************************************!*\ + !*** ./node_modules/browserify-aes/ghash.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var ZEROES = Buffer.alloc(16, 0); + +function toArray(buf) { + return [buf.readUInt32BE(0), buf.readUInt32BE(4), buf.readUInt32BE(8), buf.readUInt32BE(12)]; +} + +function fromArray(out) { + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0] >>> 0, 0); + buf.writeUInt32BE(out[1] >>> 0, 4); + buf.writeUInt32BE(out[2] >>> 0, 8); + buf.writeUInt32BE(out[3] >>> 0, 12); + return buf; +} + +function GHASH(key) { + this.h = key; + this.state = Buffer.alloc(16, 0); + this.cache = Buffer.allocUnsafe(0); +} // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua + + +GHASH.prototype.ghash = function (block) { + var i = -1; + + while (++i < block.length) { + this.state[i] ^= block[i]; + } + + this._multiply(); +}; + +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h); + var Zi = [0, 0, 0, 0]; + var j, xi, lsbVi; + var i = -1; + + while (++i < 128) { + xi = (this.state[~~(i / 8)] & 1 << 7 - i % 8) !== 0; + + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi[0] ^= Vi[0]; + Zi[1] ^= Vi[1]; + Zi[2] ^= Vi[2]; + Zi[3] ^= Vi[3]; + } // Store the value of LSB(V_i) + + + lsbVi = (Vi[3] & 1) !== 0; // V_i+1 = V_i >> 1 + + for (j = 3; j > 0; j--) { + Vi[j] = Vi[j] >>> 1 | (Vi[j - 1] & 1) << 31; + } + + Vi[0] = Vi[0] >>> 1; // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + + if (lsbVi) { + Vi[0] = Vi[0] ^ 0xe1 << 24; + } + } + + this.state = fromArray(Zi); +}; + +GHASH.prototype.update = function (buf) { + this.cache = Buffer.concat([this.cache, buf]); + var chunk; + + while (this.cache.length >= 16) { + chunk = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + this.ghash(chunk); + } +}; + +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, ZEROES], 16)); + } + + this.ghash(fromArray([0, abl, 0, bl])); + return this.state; +}; + +module.exports = GHASH; + +/***/ }), + +/***/ "./node_modules/browserify-aes/incr32.js": +/*!***********************************************!*\ + !*** ./node_modules/browserify-aes/incr32.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function incr32(iv) { + var len = iv.length; + var item; + + while (len--) { + item = iv.readUInt8(len); + + if (item === 255) { + iv.writeUInt8(0, len); + } else { + item++; + iv.writeUInt8(item, len); + break; + } + } +} + +module.exports = incr32; + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/cbc.js": +/*!**************************************************!*\ + !*** ./node_modules/browserify-aes/modes/cbc.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js"); + +exports.encrypt = function (self, block) { + var data = xor(block, self._prev); + self._prev = self._cipher.encryptBlock(data); + return self._prev; +}; + +exports.decrypt = function (self, block) { + var pad = self._prev; + self._prev = block; + + var out = self._cipher.decryptBlock(block); + + return xor(out, pad); +}; + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/cfb.js": +/*!**************************************************!*\ + !*** ./node_modules/browserify-aes/modes/cfb.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js"); + +function encryptStart(self, data, decrypt) { + var len = data.length; + var out = xor(data, self._cache); + self._cache = self._cache.slice(len); + self._prev = Buffer.concat([self._prev, decrypt ? data : out]); + return out; +} + +exports.encrypt = function (self, data, decrypt) { + var out = Buffer.allocUnsafe(0); + var len; + + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev); + self._prev = Buffer.allocUnsafe(0); + } + + if (self._cache.length <= data.length) { + len = self._cache.length; + out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]); + data = data.slice(len); + } else { + out = Buffer.concat([out, encryptStart(self, data, decrypt)]); + break; + } + } + + return out; +}; + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/cfb1.js": +/*!***************************************************!*\ + !*** ./node_modules/browserify-aes/modes/cfb1.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +function encryptByte(self, byteParam, decrypt) { + var pad; + var i = -1; + var len = 8; + var out = 0; + var bit, value; + + while (++i < len) { + pad = self._cipher.encryptBlock(self._prev); + bit = byteParam & 1 << 7 - i ? 0x80 : 0; + value = pad[0] ^ bit; + out += (value & 0x80) >> i % 8; + self._prev = shiftIn(self._prev, decrypt ? bit : value); + } + + return out; +} + +function shiftIn(buffer, value) { + var len = buffer.length; + var i = -1; + var out = Buffer.allocUnsafe(buffer.length); + buffer = Buffer.concat([buffer, Buffer.from([value])]); + + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> 7; + } + + return out; +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length; + var out = Buffer.allocUnsafe(len); + var i = -1; + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt); + } + + return out; +}; + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/cfb8.js": +/*!***************************************************!*\ + !*** ./node_modules/browserify-aes/modes/cfb8.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +function encryptByte(self, byteParam, decrypt) { + var pad = self._cipher.encryptBlock(self._prev); + + var out = pad[0] ^ byteParam; + self._prev = Buffer.concat([self._prev.slice(1), Buffer.from([decrypt ? byteParam : out])]); + return out; +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length; + var out = Buffer.allocUnsafe(len); + var i = -1; + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt); + } + + return out; +}; + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/ctr.js": +/*!**************************************************!*\ + !*** ./node_modules/browserify-aes/modes/ctr.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var incr32 = __webpack_require__(/*! ../incr32 */ "./node_modules/browserify-aes/incr32.js"); + +function getBlock(self) { + var out = self._cipher.encryptBlockRaw(self._prev); + + incr32(self._prev); + return out; +} + +var blockSize = 16; + +exports.encrypt = function (self, chunk) { + var chunkNum = Math.ceil(chunk.length / blockSize); + var start = self._cache.length; + self._cache = Buffer.concat([self._cache, Buffer.allocUnsafe(chunkNum * blockSize)]); + + for (var i = 0; i < chunkNum; i++) { + var out = getBlock(self); + var offset = start + i * blockSize; + + self._cache.writeUInt32BE(out[0], offset + 0); + + self._cache.writeUInt32BE(out[1], offset + 4); + + self._cache.writeUInt32BE(out[2], offset + 8); + + self._cache.writeUInt32BE(out[3], offset + 12); + } + + var pad = self._cache.slice(0, chunk.length); + + self._cache = self._cache.slice(chunk.length); + return xor(chunk, pad); +}; + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/ecb.js": +/*!**************************************************!*\ + !*** ./node_modules/browserify-aes/modes/ecb.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block); +}; + +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block); +}; + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/index.js": +/*!****************************************************!*\ + !*** ./node_modules/browserify-aes/modes/index.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var modeModules = { + ECB: __webpack_require__(/*! ./ecb */ "./node_modules/browserify-aes/modes/ecb.js"), + CBC: __webpack_require__(/*! ./cbc */ "./node_modules/browserify-aes/modes/cbc.js"), + CFB: __webpack_require__(/*! ./cfb */ "./node_modules/browserify-aes/modes/cfb.js"), + CFB8: __webpack_require__(/*! ./cfb8 */ "./node_modules/browserify-aes/modes/cfb8.js"), + CFB1: __webpack_require__(/*! ./cfb1 */ "./node_modules/browserify-aes/modes/cfb1.js"), + OFB: __webpack_require__(/*! ./ofb */ "./node_modules/browserify-aes/modes/ofb.js"), + CTR: __webpack_require__(/*! ./ctr */ "./node_modules/browserify-aes/modes/ctr.js"), + GCM: __webpack_require__(/*! ./ctr */ "./node_modules/browserify-aes/modes/ctr.js") +}; + +var modes = __webpack_require__(/*! ./list.json */ "./node_modules/browserify-aes/modes/list.json"); + +for (var key in modes) { + modes[key].module = modeModules[modes[key].mode]; +} + +module.exports = modes; + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/list.json": +/*!*****************************************************!*\ + !*** ./node_modules/browserify-aes/modes/list.json ***! + \*****************************************************/ +/*! exports provided: aes-128-ecb, aes-192-ecb, aes-256-ecb, aes-128-cbc, aes-192-cbc, aes-256-cbc, aes128, aes192, aes256, aes-128-cfb, aes-192-cfb, aes-256-cfb, aes-128-cfb8, aes-192-cfb8, aes-256-cfb8, aes-128-cfb1, aes-192-cfb1, aes-256-cfb1, aes-128-ofb, aes-192-ofb, aes-256-ofb, aes-128-ctr, aes-192-ctr, aes-256-ctr, aes-128-gcm, aes-192-gcm, aes-256-gcm, default */ +/***/ (function(module) { + +module.exports = JSON.parse("{\"aes-128-ecb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-192-ecb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-256-ecb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":0,\"mode\":\"ECB\",\"type\":\"block\"},\"aes-128-cbc\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-192-cbc\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-256-cbc\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes128\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes192\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes256\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CBC\",\"type\":\"block\"},\"aes-128-cfb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-192-cfb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-256-cfb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB\",\"type\":\"stream\"},\"aes-128-cfb8\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-192-cfb8\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-256-cfb8\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB8\",\"type\":\"stream\"},\"aes-128-cfb1\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-192-cfb1\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-256-cfb1\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CFB1\",\"type\":\"stream\"},\"aes-128-ofb\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-192-ofb\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-256-ofb\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"OFB\",\"type\":\"stream\"},\"aes-128-ctr\":{\"cipher\":\"AES\",\"key\":128,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-192-ctr\":{\"cipher\":\"AES\",\"key\":192,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-256-ctr\":{\"cipher\":\"AES\",\"key\":256,\"iv\":16,\"mode\":\"CTR\",\"type\":\"stream\"},\"aes-128-gcm\":{\"cipher\":\"AES\",\"key\":128,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"},\"aes-192-gcm\":{\"cipher\":\"AES\",\"key\":192,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"},\"aes-256-gcm\":{\"cipher\":\"AES\",\"key\":256,\"iv\":12,\"mode\":\"GCM\",\"type\":\"auth\"}}"); + +/***/ }), + +/***/ "./node_modules/browserify-aes/modes/ofb.js": +/*!**************************************************!*\ + !*** ./node_modules/browserify-aes/modes/ofb.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {var xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js"); + +function getBlock(self) { + self._prev = self._cipher.encryptBlock(self._prev); + return self._prev; +} + +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]); + } + + var pad = self._cache.slice(0, chunk.length); + + self._cache = self._cache.slice(chunk.length); + return xor(chunk, pad); +}; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/browserify-aes/streamCipher.js": +/*!*****************************************************!*\ + !*** ./node_modules/browserify-aes/streamCipher.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var aes = __webpack_require__(/*! ./aes */ "./node_modules/browserify-aes/aes.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var Transform = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +function StreamCipher(mode, key, iv, decrypt) { + Transform.call(this); + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._cache = Buffer.allocUnsafe(0); + this._secCache = Buffer.allocUnsafe(0); + this._decrypt = decrypt; + this._mode = mode; +} + +inherits(StreamCipher, Transform); + +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt); +}; + +StreamCipher.prototype._final = function () { + this._cipher.scrub(); +}; + +module.exports = StreamCipher; + +/***/ }), + +/***/ "./node_modules/browserify-cipher/browser.js": +/*!***************************************************!*\ + !*** ./node_modules/browserify-cipher/browser.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var DES = __webpack_require__(/*! browserify-des */ "./node_modules/browserify-des/index.js"); + +var aes = __webpack_require__(/*! browserify-aes/browser */ "./node_modules/browserify-aes/browser.js"); + +var aesModes = __webpack_require__(/*! browserify-aes/modes */ "./node_modules/browserify-aes/modes/index.js"); + +var desModes = __webpack_require__(/*! browserify-des/modes */ "./node_modules/browserify-des/modes.js"); + +var ebtk = __webpack_require__(/*! evp_bytestokey */ "./node_modules/evp_bytestokey/index.js"); + +function createCipher(suite, password) { + suite = suite.toLowerCase(); + var keyLen, ivLen; + + if (aesModes[suite]) { + keyLen = aesModes[suite].key; + ivLen = aesModes[suite].iv; + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8; + ivLen = desModes[suite].iv; + } else { + throw new TypeError('invalid suite type'); + } + + var keys = ebtk(password, false, keyLen, ivLen); + return createCipheriv(suite, keys.key, keys.iv); +} + +function createDecipher(suite, password) { + suite = suite.toLowerCase(); + var keyLen, ivLen; + + if (aesModes[suite]) { + keyLen = aesModes[suite].key; + ivLen = aesModes[suite].iv; + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8; + ivLen = desModes[suite].iv; + } else { + throw new TypeError('invalid suite type'); + } + + var keys = ebtk(password, false, keyLen, ivLen); + return createDecipheriv(suite, keys.key, keys.iv); +} + +function createCipheriv(suite, key, iv) { + suite = suite.toLowerCase(); + if (aesModes[suite]) return aes.createCipheriv(suite, key, iv); + if (desModes[suite]) return new DES({ + key: key, + iv: iv, + mode: suite + }); + throw new TypeError('invalid suite type'); +} + +function createDecipheriv(suite, key, iv) { + suite = suite.toLowerCase(); + if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv); + if (desModes[suite]) return new DES({ + key: key, + iv: iv, + mode: suite, + decrypt: true + }); + throw new TypeError('invalid suite type'); +} + +function getCiphers() { + return Object.keys(desModes).concat(aes.getCiphers()); +} + +exports.createCipher = exports.Cipher = createCipher; +exports.createCipheriv = exports.Cipheriv = createCipheriv; +exports.createDecipher = exports.Decipher = createDecipher; +exports.createDecipheriv = exports.Decipheriv = createDecipheriv; +exports.listCiphers = exports.getCiphers = getCiphers; + +/***/ }), + +/***/ "./node_modules/browserify-des/index.js": +/*!**********************************************!*\ + !*** ./node_modules/browserify-des/index.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var CipherBase = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js"); + +var des = __webpack_require__(/*! des.js */ "./node_modules/des.js/lib/des.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var modes = { + 'des-ede3-cbc': des.CBC.instantiate(des.EDE), + 'des-ede3': des.EDE, + 'des-ede-cbc': des.CBC.instantiate(des.EDE), + 'des-ede': des.EDE, + 'des-cbc': des.CBC.instantiate(des.DES), + 'des-ecb': des.DES +}; +modes.des = modes['des-cbc']; +modes.des3 = modes['des-ede3-cbc']; +module.exports = DES; +inherits(DES, CipherBase); + +function DES(opts) { + CipherBase.call(this); + var modeName = opts.mode.toLowerCase(); + var mode = modes[modeName]; + var type; + + if (opts.decrypt) { + type = 'decrypt'; + } else { + type = 'encrypt'; + } + + var key = opts.key; + + if (!Buffer.isBuffer(key)) { + key = Buffer.from(key); + } + + if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { + key = Buffer.concat([key, key.slice(0, 8)]); + } + + var iv = opts.iv; + + if (!Buffer.isBuffer(iv)) { + iv = Buffer.from(iv); + } + + this._des = mode.create({ + key: key, + iv: iv, + type: type + }); +} + +DES.prototype._update = function (data) { + return Buffer.from(this._des.update(data)); +}; + +DES.prototype._final = function () { + return Buffer.from(this._des.final()); +}; + +/***/ }), + +/***/ "./node_modules/browserify-des/modes.js": +/*!**********************************************!*\ + !*** ./node_modules/browserify-des/modes.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +exports['des-ecb'] = { + key: 8, + iv: 0 +}; +exports['des-cbc'] = exports.des = { + key: 8, + iv: 8 +}; +exports['des-ede3-cbc'] = exports.des3 = { + key: 24, + iv: 8 +}; +exports['des-ede3'] = { + key: 24, + iv: 0 +}; +exports['des-ede-cbc'] = { + key: 16, + iv: 8 +}; +exports['des-ede'] = { + key: 16, + iv: 0 +}; + +/***/ }), + +/***/ "./node_modules/browserify-rsa/index.js": +/*!**********************************************!*\ + !*** ./node_modules/browserify-rsa/index.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {var bn = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var randomBytes = __webpack_require__(/*! randombytes */ "./node_modules/randombytes/browser.js"); + +module.exports = crt; + +function blind(priv) { + var r = getr(priv); + var blinder = r.toRed(bn.mont(priv.modulus)).redPow(new bn(priv.publicExponent)).fromRed(); + return { + blinder: blinder, + unblinder: r.invm(priv.modulus) + }; +} + +function crt(msg, priv) { + var blinds = blind(priv); + var len = priv.modulus.byteLength(); + var mod = bn.mont(priv.modulus); + var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); + var c1 = blinded.toRed(bn.mont(priv.prime1)); + var c2 = blinded.toRed(bn.mont(priv.prime2)); + var qinv = priv.coefficient; + var p = priv.prime1; + var q = priv.prime2; + var m1 = c1.redPow(priv.exponent1); + var m2 = c2.redPow(priv.exponent2); + m1 = m1.fromRed(); + m2 = m2.fromRed(); + var h = m1.isub(m2).imul(qinv).umod(p); + h.imul(q); + m2.iadd(h); + return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); +} + +crt.getr = getr; + +function getr(priv) { + var len = priv.modulus.byteLength(); + var r = new bn(randomBytes(len)); + + while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { + r = new bn(randomBytes(len)); + } + + return r; +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/browserify-sign/algos.js": +/*!***********************************************!*\ + !*** ./node_modules/browserify-sign/algos.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./browser/algorithms.json */ "./node_modules/browserify-sign/browser/algorithms.json"); + +/***/ }), + +/***/ "./node_modules/browserify-sign/browser/algorithms.json": +/*!**************************************************************!*\ + !*** ./node_modules/browserify-sign/browser/algorithms.json ***! + \**************************************************************/ +/*! exports provided: sha224WithRSAEncryption, RSA-SHA224, sha256WithRSAEncryption, RSA-SHA256, sha384WithRSAEncryption, RSA-SHA384, sha512WithRSAEncryption, RSA-SHA512, RSA-SHA1, ecdsa-with-SHA1, sha256, sha224, sha384, sha512, DSA-SHA, DSA-SHA1, DSA, DSA-WITH-SHA224, DSA-SHA224, DSA-WITH-SHA256, DSA-SHA256, DSA-WITH-SHA384, DSA-SHA384, DSA-WITH-SHA512, DSA-SHA512, DSA-RIPEMD160, ripemd160WithRSA, RSA-RIPEMD160, md5WithRSAEncryption, RSA-MD5, default */ +/***/ (function(module) { + +module.exports = JSON.parse("{\"sha224WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha224\",\"id\":\"302d300d06096086480165030402040500041c\"},\"RSA-SHA224\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha224\",\"id\":\"302d300d06096086480165030402040500041c\"},\"sha256WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha256\",\"id\":\"3031300d060960864801650304020105000420\"},\"RSA-SHA256\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha256\",\"id\":\"3031300d060960864801650304020105000420\"},\"sha384WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha384\",\"id\":\"3041300d060960864801650304020205000430\"},\"RSA-SHA384\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha384\",\"id\":\"3041300d060960864801650304020205000430\"},\"sha512WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"sha512\",\"id\":\"3051300d060960864801650304020305000440\"},\"RSA-SHA512\":{\"sign\":\"ecdsa/rsa\",\"hash\":\"sha512\",\"id\":\"3051300d060960864801650304020305000440\"},\"RSA-SHA1\":{\"sign\":\"rsa\",\"hash\":\"sha1\",\"id\":\"3021300906052b0e03021a05000414\"},\"ecdsa-with-SHA1\":{\"sign\":\"ecdsa\",\"hash\":\"sha1\",\"id\":\"\"},\"sha256\":{\"sign\":\"ecdsa\",\"hash\":\"sha256\",\"id\":\"\"},\"sha224\":{\"sign\":\"ecdsa\",\"hash\":\"sha224\",\"id\":\"\"},\"sha384\":{\"sign\":\"ecdsa\",\"hash\":\"sha384\",\"id\":\"\"},\"sha512\":{\"sign\":\"ecdsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-SHA\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA-SHA1\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA\":{\"sign\":\"dsa\",\"hash\":\"sha1\",\"id\":\"\"},\"DSA-WITH-SHA224\":{\"sign\":\"dsa\",\"hash\":\"sha224\",\"id\":\"\"},\"DSA-SHA224\":{\"sign\":\"dsa\",\"hash\":\"sha224\",\"id\":\"\"},\"DSA-WITH-SHA256\":{\"sign\":\"dsa\",\"hash\":\"sha256\",\"id\":\"\"},\"DSA-SHA256\":{\"sign\":\"dsa\",\"hash\":\"sha256\",\"id\":\"\"},\"DSA-WITH-SHA384\":{\"sign\":\"dsa\",\"hash\":\"sha384\",\"id\":\"\"},\"DSA-SHA384\":{\"sign\":\"dsa\",\"hash\":\"sha384\",\"id\":\"\"},\"DSA-WITH-SHA512\":{\"sign\":\"dsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-SHA512\":{\"sign\":\"dsa\",\"hash\":\"sha512\",\"id\":\"\"},\"DSA-RIPEMD160\":{\"sign\":\"dsa\",\"hash\":\"rmd160\",\"id\":\"\"},\"ripemd160WithRSA\":{\"sign\":\"rsa\",\"hash\":\"rmd160\",\"id\":\"3021300906052b2403020105000414\"},\"RSA-RIPEMD160\":{\"sign\":\"rsa\",\"hash\":\"rmd160\",\"id\":\"3021300906052b2403020105000414\"},\"md5WithRSAEncryption\":{\"sign\":\"rsa\",\"hash\":\"md5\",\"id\":\"3020300c06082a864886f70d020505000410\"},\"RSA-MD5\":{\"sign\":\"rsa\",\"hash\":\"md5\",\"id\":\"3020300c06082a864886f70d020505000410\"}}"); + +/***/ }), + +/***/ "./node_modules/browserify-sign/browser/curves.json": +/*!**********************************************************!*\ + !*** ./node_modules/browserify-sign/browser/curves.json ***! + \**********************************************************/ +/*! exports provided: 1.3.132.0.10, 1.3.132.0.33, 1.2.840.10045.3.1.1, 1.2.840.10045.3.1.7, 1.3.132.0.34, 1.3.132.0.35, default */ +/***/ (function(module) { + +module.exports = JSON.parse("{\"1.3.132.0.10\":\"secp256k1\",\"1.3.132.0.33\":\"p224\",\"1.2.840.10045.3.1.1\":\"p192\",\"1.2.840.10045.3.1.7\":\"p256\",\"1.3.132.0.34\":\"p384\",\"1.3.132.0.35\":\"p521\"}"); + +/***/ }), + +/***/ "./node_modules/browserify-sign/browser/index.js": +/*!*******************************************************!*\ + !*** ./node_modules/browserify-sign/browser/index.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {var createHash = __webpack_require__(/*! create-hash */ "./node_modules/create-hash/browser.js"); + +var stream = __webpack_require__(/*! stream */ "./node_modules/stream-browserify/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var sign = __webpack_require__(/*! ./sign */ "./node_modules/browserify-sign/browser/sign.js"); + +var verify = __webpack_require__(/*! ./verify */ "./node_modules/browserify-sign/browser/verify.js"); + +var algorithms = __webpack_require__(/*! ./algorithms.json */ "./node_modules/browserify-sign/browser/algorithms.json"); + +Object.keys(algorithms).forEach(function (key) { + algorithms[key].id = new Buffer(algorithms[key].id, 'hex'); + algorithms[key.toLowerCase()] = algorithms[key]; +}); + +function Sign(algorithm) { + stream.Writable.call(this); + var data = algorithms[algorithm]; + if (!data) throw new Error('Unknown message digest'); + this._hashType = data.hash; + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} + +inherits(Sign, stream.Writable); + +Sign.prototype._write = function _write(data, _, done) { + this._hash.update(data); + + done(); +}; + +Sign.prototype.update = function update(data, enc) { + if (typeof data === 'string') data = new Buffer(data, enc); + + this._hash.update(data); + + return this; +}; + +Sign.prototype.sign = function signMethod(key, enc) { + this.end(); + + var hash = this._hash.digest(); + + var sig = sign(hash, key, this._hashType, this._signType, this._tag); + return enc ? sig.toString(enc) : sig; +}; + +function Verify(algorithm) { + stream.Writable.call(this); + var data = algorithms[algorithm]; + if (!data) throw new Error('Unknown message digest'); + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} + +inherits(Verify, stream.Writable); + +Verify.prototype._write = function _write(data, _, done) { + this._hash.update(data); + + done(); +}; + +Verify.prototype.update = function update(data, enc) { + if (typeof data === 'string') data = new Buffer(data, enc); + + this._hash.update(data); + + return this; +}; + +Verify.prototype.verify = function verifyMethod(key, sig, enc) { + if (typeof sig === 'string') sig = new Buffer(sig, enc); + this.end(); + + var hash = this._hash.digest(); + + return verify(sig, hash, key, this._signType, this._tag); +}; + +function createSign(algorithm) { + return new Sign(algorithm); +} + +function createVerify(algorithm) { + return new Verify(algorithm); +} + +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +}; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/browserify-sign/browser/sign.js": +/*!******************************************************!*\ + !*** ./node_modules/browserify-sign/browser/sign.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var createHmac = __webpack_require__(/*! create-hmac */ "./node_modules/create-hmac/browser.js"); + +var crt = __webpack_require__(/*! browserify-rsa */ "./node_modules/browserify-rsa/index.js"); + +var EC = __webpack_require__(/*! elliptic */ "./node_modules/elliptic/lib/elliptic.js").ec; + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var parseKeys = __webpack_require__(/*! parse-asn1 */ "./node_modules/parse-asn1/index.js"); + +var curves = __webpack_require__(/*! ./curves.json */ "./node_modules/browserify-sign/browser/curves.json"); + +function sign(hash, key, hashType, signType, tag) { + var priv = parseKeys(key); + + if (priv.curve) { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type'); + return ecSign(hash, priv); + } else if (priv.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong private key type'); + return dsaSign(hash, priv, hashType); + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type'); + } + + hash = Buffer.concat([tag, hash]); + var len = priv.modulus.byteLength(); + var pad = [0, 1]; + + while (hash.length + pad.length + 1 < len) { + pad.push(0xff); + } + + pad.push(0x00); + var i = -1; + + while (++i < hash.length) { + pad.push(hash[i]); + } + + var out = crt(pad, priv); + return out; +} + +function ecSign(hash, priv) { + var curveId = curves[priv.curve.join('.')]; + if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')); + var curve = new EC(curveId); + var key = curve.keyFromPrivate(priv.privateKey); + var out = key.sign(hash); + return new Buffer(out.toDER()); +} + +function dsaSign(hash, priv, algo) { + var x = priv.params.priv_key; + var p = priv.params.p; + var q = priv.params.q; + var g = priv.params.g; + var r = new BN(0); + var k; + var H = bits2int(hash, q).mod(q); + var s = false; + var kv = getKey(x, q, hash, algo); + + while (s === false) { + k = makeKey(q, kv, algo); + r = makeR(g, k, p, q); + s = k.invm(q).imul(H.add(x.mul(r))).mod(q); + + if (s.cmpn(0) === 0) { + s = false; + r = new BN(0); + } + } + + return toDER(r, s); +} + +function toDER(r, s) { + r = r.toArray(); + s = s.toArray(); // Pad values + + if (r[0] & 0x80) r = [0].concat(r); + if (s[0] & 0x80) s = [0].concat(s); + var total = r.length + s.length + 4; + var res = [0x30, total, 0x02, r.length]; + res = res.concat(r, [0x02, s.length], s); + return new Buffer(res); +} + +function getKey(x, q, hash, algo) { + x = new Buffer(x.toArray()); + + if (x.length < q.byteLength()) { + var zeros = new Buffer(q.byteLength() - x.length); + zeros.fill(0); + x = Buffer.concat([zeros, x]); + } + + var hlen = hash.length; + var hbits = bits2octets(hash, q); + var v = new Buffer(hlen); + v.fill(1); + var k = new Buffer(hlen); + k.fill(0); + k = createHmac(algo, k).update(v).update(new Buffer([0])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + k = createHmac(algo, k).update(v).update(new Buffer([1])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + return { + k: k, + v: v + }; +} + +function bits2int(obits, q) { + var bits = new BN(obits); + var shift = (obits.length << 3) - q.bitLength(); + if (shift > 0) bits.ishrn(shift); + return bits; +} + +function bits2octets(bits, q) { + bits = bits2int(bits, q); + bits = bits.mod(q); + var out = new Buffer(bits.toArray()); + + if (out.length < q.byteLength()) { + var zeros = new Buffer(q.byteLength() - out.length); + zeros.fill(0); + out = Buffer.concat([zeros, out]); + } + + return out; +} + +function makeKey(q, kv, algo) { + var t; + var k; + + do { + t = new Buffer(0); + + while (t.length * 8 < q.bitLength()) { + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + t = Buffer.concat([t, kv.v]); + } + + k = bits2int(t, q); + kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([0])).digest(); + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + } while (k.cmp(q) !== -1); + + return k; +} + +function makeR(g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); +} + +module.exports = sign; +module.exports.getKey = getKey; +module.exports.makeKey = makeKey; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/browserify-sign/browser/verify.js": +/*!********************************************************!*\ + !*** ./node_modules/browserify-sign/browser/verify.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var EC = __webpack_require__(/*! elliptic */ "./node_modules/elliptic/lib/elliptic.js").ec; + +var parseKeys = __webpack_require__(/*! parse-asn1 */ "./node_modules/parse-asn1/index.js"); + +var curves = __webpack_require__(/*! ./curves.json */ "./node_modules/browserify-sign/browser/curves.json"); + +function verify(sig, hash, key, signType, tag) { + var pub = parseKeys(key); + + if (pub.type === 'ec') { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type'); + return ecVerify(sig, hash, pub); + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong public key type'); + return dsaVerify(sig, hash, pub); + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type'); + } + + hash = Buffer.concat([tag, hash]); + var len = pub.modulus.byteLength(); + var pad = [1]; + var padNum = 0; + + while (hash.length + pad.length + 2 < len) { + pad.push(0xff); + padNum++; + } + + pad.push(0x00); + var i = -1; + + while (++i < hash.length) { + pad.push(hash[i]); + } + + pad = new Buffer(pad); + var red = BN.mont(pub.modulus); + sig = new BN(sig).toRed(red); + sig = sig.redPow(new BN(pub.publicExponent)); + sig = new Buffer(sig.fromRed().toArray()); + var out = padNum < 8 ? 1 : 0; + len = Math.min(sig.length, pad.length); + if (sig.length !== pad.length) out = 1; + i = -1; + + while (++i < len) { + out |= sig[i] ^ pad[i]; + } + + return out === 0; +} + +function ecVerify(sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')]; + if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); + var curve = new EC(curveId); + var pubkey = pub.data.subjectPrivateKey.data; + return curve.verify(hash, sig, pubkey); +} + +function dsaVerify(sig, hash, pub) { + var p = pub.data.p; + var q = pub.data.q; + var g = pub.data.g; + var y = pub.data.pub_key; + var unpacked = parseKeys.signature.decode(sig, 'der'); + var s = unpacked.s; + var r = unpacked.r; + checkValue(s, q); + checkValue(r, q); + var montp = BN.mont(p); + var w = s.invm(q); + var v = g.toRed(montp).redPow(new BN(hash).mul(w).mod(q)).fromRed().mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()).mod(p).mod(q); + return v.cmp(r) === 0; +} + +function checkValue(b, q) { + if (b.cmpn(0) <= 0) throw new Error('invalid sig'); + if (b.cmp(q) >= q) throw new Error('invalid sig'); +} + +module.exports = verify; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/buffer-xor/index.js": +/*!******************************************!*\ + !*** ./node_modules/buffer-xor/index.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {module.exports = function xor(a, b) { + var length = Math.min(a.length, b.length); + var buffer = new Buffer(length); + + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i]; + } + + return buffer; +}; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/cipher-base/index.js": +/*!*******************************************!*\ + !*** ./node_modules/cipher-base/index.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var Transform = __webpack_require__(/*! stream */ "./node_modules/stream-browserify/index.js").Transform; + +var StringDecoder = __webpack_require__(/*! string_decoder */ "./node_modules/string_decoder/lib/string_decoder.js").StringDecoder; + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +function CipherBase(hashMode) { + Transform.call(this); + this.hashMode = typeof hashMode === 'string'; + + if (this.hashMode) { + this[hashMode] = this._finalOrDigest; + } else { + this.final = this._finalOrDigest; + } + + if (this._final) { + this.__final = this._final; + this._final = null; + } + + this._decoder = null; + this._encoding = null; +} + +inherits(CipherBase, Transform); + +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = Buffer.from(data, inputEnc); + } + + var outData = this._update(data); + + if (this.hashMode) return this; + + if (outputEnc) { + outData = this._toString(outData, outputEnc); + } + + return outData; +}; + +CipherBase.prototype.setAutoPadding = function () {}; + +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state'); +}; + +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state'); +}; + +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state'); +}; + +CipherBase.prototype._transform = function (data, _, next) { + var err; + + try { + if (this.hashMode) { + this._update(data); + } else { + this.push(this._update(data)); + } + } catch (e) { + err = e; + } finally { + next(err); + } +}; + +CipherBase.prototype._flush = function (done) { + var err; + + try { + this.push(this.__final()); + } catch (e) { + err = e; + } + + done(err); +}; + +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this.__final() || Buffer.alloc(0); + + if (outputEnc) { + outData = this._toString(outData, outputEnc, true); + } + + return outData; +}; + +CipherBase.prototype._toString = function (value, enc, fin) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc); + this._encoding = enc; + } + + if (this._encoding !== enc) throw new Error('can\'t switch encodings'); + + var out = this._decoder.write(value); + + if (fin) { + out += this._decoder.end(); + } + + return out; +}; + +module.exports = CipherBase; + +/***/ }), + +/***/ "./node_modules/core-util-is/lib/util.js": +/*!***********************************************!*\ + !*** ./node_modules/core-util-is/lib/util.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + + return objectToString(arg) === '[object Array]'; +} + +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} + +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} + +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} + +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} + +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} + +exports.isString = isString; + +function isSymbol(arg) { + return _typeof(arg) === 'symbol'; +} + +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} + +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} + +exports.isRegExp = isRegExp; + +function isObject(arg) { + return _typeof(arg) === 'object' && arg !== null; +} + +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} + +exports.isDate = isDate; + +function isError(e) { + return objectToString(e) === '[object Error]' || e instanceof Error; +} + +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} + +exports.isPrimitive = isPrimitive; +exports.isBuffer = Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/create-ecdh/browser.js": +/*!*********************************************!*\ + !*** ./node_modules/create-ecdh/browser.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {var elliptic = __webpack_require__(/*! elliptic */ "./node_modules/elliptic/lib/elliptic.js"); + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +module.exports = function createECDH(curve) { + return new ECDH(curve); +}; + +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +}; +aliases.p224 = aliases.secp224r1; +aliases.p256 = aliases.secp256r1 = aliases.prime256v1; +aliases.p192 = aliases.secp192r1 = aliases.prime192v1; +aliases.p384 = aliases.secp384r1; +aliases.p521 = aliases.secp521r1; + +function ECDH(curve) { + this.curveType = aliases[curve]; + + if (!this.curveType) { + this.curveType = { + name: curve + }; + } + + this.curve = new elliptic.ec(this.curveType.name); // eslint-disable-line new-cap + + this.keys = void 0; +} + +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair(); + return this.getPublicKey(enc, format); +}; + +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8'; + + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc); + } + + var otherPub = this.curve.keyFromPublic(other).getPublic(); + var out = otherPub.mul(this.keys.getPrivate()).getX(); + return formatReturnValue(out, enc, this.curveType.byteLength); +}; + +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true); + + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7; + } else { + key[0] = 6; + } + } + + return formatReturnValue(key, enc); +}; + +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc); +}; + +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8'; + + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + + this.keys._importPublic(pub); + + return this; +}; + +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8'; + + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + + var _priv = new BN(priv); + + _priv = _priv.toString(16); + this.keys = this.curve.genKeyPair(); + + this.keys._importPrivate(_priv); + + return this; +}; + +function formatReturnValue(bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray(); + } + + var buf = new Buffer(bn); + + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length); + zeros.fill(0); + buf = Buffer.concat([zeros, buf]); + } + + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/create-hash/browser.js": +/*!*********************************************!*\ + !*** ./node_modules/create-hash/browser.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var MD5 = __webpack_require__(/*! md5.js */ "./node_modules/md5.js/index.js"); + +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "./node_modules/ripemd160/index.js"); + +var sha = __webpack_require__(/*! sha.js */ "./node_modules/sha.js/index.js"); + +var Base = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js"); + +function Hash(hash) { + Base.call(this, 'digest'); + this._hash = hash; +} + +inherits(Hash, Base); + +Hash.prototype._update = function (data) { + this._hash.update(data); +}; + +Hash.prototype._final = function () { + return this._hash.digest(); +}; + +module.exports = function createHash(alg) { + alg = alg.toLowerCase(); + if (alg === 'md5') return new MD5(); + if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160(); + return new Hash(sha(alg)); +}; + +/***/ }), + +/***/ "./node_modules/create-hash/md5.js": +/*!*****************************************!*\ + !*** ./node_modules/create-hash/md5.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var MD5 = __webpack_require__(/*! md5.js */ "./node_modules/md5.js/index.js"); + +module.exports = function (buffer) { + return new MD5().update(buffer).digest(); +}; + +/***/ }), + +/***/ "./node_modules/create-hmac/browser.js": +/*!*********************************************!*\ + !*** ./node_modules/create-hmac/browser.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Legacy = __webpack_require__(/*! ./legacy */ "./node_modules/create-hmac/legacy.js"); + +var Base = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var md5 = __webpack_require__(/*! create-hash/md5 */ "./node_modules/create-hash/md5.js"); + +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "./node_modules/ripemd160/index.js"); + +var sha = __webpack_require__(/*! sha.js */ "./node_modules/sha.js/index.js"); + +var ZEROS = Buffer.alloc(128); + +function Hmac(alg, key) { + Base.call(this, 'digest'); + + if (typeof key === 'string') { + key = Buffer.from(key); + } + + var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64; + this._alg = alg; + this._key = key; + + if (key.length > blocksize) { + var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg); + key = hash.update(key).digest(); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize); + var opad = this._opad = Buffer.allocUnsafe(blocksize); + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + + this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg); + + this._hash.update(ipad); +} + +inherits(Hmac, Base); + +Hmac.prototype._update = function (data) { + this._hash.update(data); +}; + +Hmac.prototype._final = function () { + var h = this._hash.digest(); + + var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg); + return hash.update(this._opad).update(h).digest(); +}; + +module.exports = function createHmac(alg, key) { + alg = alg.toLowerCase(); + + if (alg === 'rmd160' || alg === 'ripemd160') { + return new Hmac('rmd160', key); + } + + if (alg === 'md5') { + return new Legacy(md5, key); + } + + return new Hmac(alg, key); +}; + +/***/ }), + +/***/ "./node_modules/create-hmac/legacy.js": +/*!********************************************!*\ + !*** ./node_modules/create-hmac/legacy.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var Base = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js"); + +var ZEROS = Buffer.alloc(128); +var blocksize = 64; + +function Hmac(alg, key) { + Base.call(this, 'digest'); + + if (typeof key === 'string') { + key = Buffer.from(key); + } + + this._alg = alg; + this._key = key; + + if (key.length > blocksize) { + key = alg(key); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize); + var opad = this._opad = Buffer.allocUnsafe(blocksize); + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + + this._hash = [ipad]; +} + +inherits(Hmac, Base); + +Hmac.prototype._update = function (data) { + this._hash.push(data); +}; + +Hmac.prototype._final = function () { + var h = this._alg(Buffer.concat(this._hash)); + + return this._alg(Buffer.concat([this._opad, h])); +}; + +module.exports = Hmac; + +/***/ }), + +/***/ "./node_modules/crypto-browserify/index.js": +/*!*************************************************!*\ + !*** ./node_modules/crypto-browserify/index.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = __webpack_require__(/*! randombytes */ "./node_modules/randombytes/browser.js"); +exports.createHash = exports.Hash = __webpack_require__(/*! create-hash */ "./node_modules/create-hash/browser.js"); +exports.createHmac = exports.Hmac = __webpack_require__(/*! create-hmac */ "./node_modules/create-hmac/browser.js"); + +var algos = __webpack_require__(/*! browserify-sign/algos */ "./node_modules/browserify-sign/algos.js"); + +var algoKeys = Object.keys(algos); +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys); + +exports.getHashes = function () { + return hashes; +}; + +var p = __webpack_require__(/*! pbkdf2 */ "./node_modules/pbkdf2/browser.js"); + +exports.pbkdf2 = p.pbkdf2; +exports.pbkdf2Sync = p.pbkdf2Sync; + +var aes = __webpack_require__(/*! browserify-cipher */ "./node_modules/browserify-cipher/browser.js"); + +exports.Cipher = aes.Cipher; +exports.createCipher = aes.createCipher; +exports.Cipheriv = aes.Cipheriv; +exports.createCipheriv = aes.createCipheriv; +exports.Decipher = aes.Decipher; +exports.createDecipher = aes.createDecipher; +exports.Decipheriv = aes.Decipheriv; +exports.createDecipheriv = aes.createDecipheriv; +exports.getCiphers = aes.getCiphers; +exports.listCiphers = aes.listCiphers; + +var dh = __webpack_require__(/*! diffie-hellman */ "./node_modules/diffie-hellman/browser.js"); + +exports.DiffieHellmanGroup = dh.DiffieHellmanGroup; +exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup; +exports.getDiffieHellman = dh.getDiffieHellman; +exports.createDiffieHellman = dh.createDiffieHellman; +exports.DiffieHellman = dh.DiffieHellman; + +var sign = __webpack_require__(/*! browserify-sign */ "./node_modules/browserify-sign/browser/index.js"); + +exports.createSign = sign.createSign; +exports.Sign = sign.Sign; +exports.createVerify = sign.createVerify; +exports.Verify = sign.Verify; +exports.createECDH = __webpack_require__(/*! create-ecdh */ "./node_modules/create-ecdh/browser.js"); + +var publicEncrypt = __webpack_require__(/*! public-encrypt */ "./node_modules/public-encrypt/browser.js"); + +exports.publicEncrypt = publicEncrypt.publicEncrypt; +exports.privateEncrypt = publicEncrypt.privateEncrypt; +exports.publicDecrypt = publicEncrypt.publicDecrypt; +exports.privateDecrypt = publicEncrypt.privateDecrypt; // the least I can do is make error messages for the rest of the node.js/crypto api. +// ;[ +// 'createCredentials' +// ].forEach(function (name) { +// exports[name] = function () { +// throw new Error([ +// 'sorry, ' + name + ' is not implemented yet', +// 'we accept pull requests', +// 'https://github.com/crypto-browserify/crypto-browserify' +// ].join('\n')) +// } +// }) + +var rf = __webpack_require__(/*! randomfill */ "./node_modules/randomfill/browser.js"); + +exports.randomFill = rf.randomFill; +exports.randomFillSync = rf.randomFillSync; + +exports.createCredentials = function () { + throw new Error(['sorry, createCredentials is not implemented yet', 'we accept pull requests', 'https://github.com/crypto-browserify/crypto-browserify'].join('\n')); +}; + +exports.constants = { + 'DH_CHECK_P_NOT_SAFE_PRIME': 2, + 'DH_CHECK_P_NOT_PRIME': 1, + 'DH_UNABLE_TO_CHECK_GENERATOR': 4, + 'DH_NOT_SUITABLE_GENERATOR': 8, + 'NPN_ENABLED': 1, + 'ALPN_ENABLED': 1, + 'RSA_PKCS1_PADDING': 1, + 'RSA_SSLV23_PADDING': 2, + 'RSA_NO_PADDING': 3, + 'RSA_PKCS1_OAEP_PADDING': 4, + 'RSA_X931_PADDING': 5, + 'RSA_PKCS1_PSS_PADDING': 6, + 'POINT_CONVERSION_COMPRESSED': 2, + 'POINT_CONVERSION_UNCOMPRESSED': 4, + 'POINT_CONVERSION_HYBRID': 6 +}; + +/***/ }), + +/***/ "./node_modules/des.js/lib/des.js": +/*!****************************************!*\ + !*** ./node_modules/des.js/lib/des.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.utils = __webpack_require__(/*! ./des/utils */ "./node_modules/des.js/lib/des/utils.js"); +exports.Cipher = __webpack_require__(/*! ./des/cipher */ "./node_modules/des.js/lib/des/cipher.js"); +exports.DES = __webpack_require__(/*! ./des/des */ "./node_modules/des.js/lib/des/des.js"); +exports.CBC = __webpack_require__(/*! ./des/cbc */ "./node_modules/des.js/lib/des/cbc.js"); +exports.EDE = __webpack_require__(/*! ./des/ede */ "./node_modules/des.js/lib/des/ede.js"); + +/***/ }), + +/***/ "./node_modules/des.js/lib/des/cbc.js": +/*!********************************************!*\ + !*** ./node_modules/des.js/lib/des/cbc.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var proto = {}; + +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); + this.iv = new Array(8); + + for (var i = 0; i < this.iv.length; i++) { + this.iv[i] = iv[i]; + } +} + +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + + this._cbcInit(); + } + + inherits(CBC, Base); + var keys = Object.keys(proto); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; + } + + CBC.create = function create(options) { + return new CBC(options); + }; + + return CBC; +} + +exports.instantiate = instantiate; + +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; + +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; + var iv = state.iv; + + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) { + iv[i] ^= inp[inOff + i]; + } + + superProto._update.call(this, iv, 0, out, outOff); + + for (var i = 0; i < this.blockSize; i++) { + iv[i] = out[outOff + i]; + } + } else { + superProto._update.call(this, inp, inOff, out, outOff); + + for (var i = 0; i < this.blockSize; i++) { + out[outOff + i] ^= iv[i]; + } + + for (var i = 0; i < this.blockSize; i++) { + iv[i] = inp[inOff + i]; + } + } +}; + +/***/ }), + +/***/ "./node_modules/des.js/lib/des/cipher.js": +/*!***********************************************!*\ + !*** ./node_modules/des.js/lib/des/cipher.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +function Cipher(options) { + this.options = options; + this.type = this.options.type; + this.blockSize = 8; + + this._init(); + + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; +} + +module.exports = Cipher; + +Cipher.prototype._init = function _init() {// Might be overrided +}; + +Cipher.prototype.update = function update(data) { + if (data.length === 0) return []; + if (this.type === 'decrypt') return this._updateDecrypt(data);else return this._updateEncrypt(data); +}; + +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + + for (var i = 0; i < min; i++) { + this.buffer[this.bufferOff + i] = data[off + i]; + } + + this.bufferOff += min; // Shift next + + return min; +}; + +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + + this.bufferOff = 0; + return this.blockSize; +}; + +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + var count = (this.bufferOff + data.length) / this.blockSize | 0; + var out = new Array(count * this.blockSize); + + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + if (this.bufferOff === this.buffer.length) outputOff += this._flushBuffer(out, outputOff); + } // Write blocks + + + var max = data.length - (data.length - inputOff) % this.blockSize; + + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + + outputOff += this.blockSize; + } // Queue rest + + + for (; inputOff < data.length; inputOff++, this.bufferOff++) { + this.buffer[this.bufferOff] = data[inputOff]; + } + + return out; +}; + +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); // TODO(indutny): optimize it, this is far from optimal + + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } // Buffer rest of the input + + + inputOff += this._buffer(data, inputOff); + return out; +}; + +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) first = this.update(buffer); + var last; + if (this.type === 'encrypt') last = this._finalEncrypt();else last = this._finalDecrypt(); + if (first) return first.concat(last);else return last; +}; + +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) return false; + + while (off < buffer.length) { + buffer[off++] = 0; + } + + return true; +}; + +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) return []; + var out = new Array(this.blockSize); + + this._update(this.buffer, 0, out, 0); + + return out; +}; + +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; + +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + + this._flushBuffer(out, 0); + + return this._unpad(out); +}; + +/***/ }), + +/***/ "./node_modules/des.js/lib/des/des.js": +/*!********************************************!*\ + !*** ./node_modules/des.js/lib/des/des.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/des.js/lib/des/utils.js"); + +var Cipher = __webpack_require__(/*! ./cipher */ "./node_modules/des.js/lib/des/cipher.js"); + +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} + +function DES(options) { + Cipher.call(this, options); + var state = new DESState(); + this._desState = state; + this.deriveKeys(state, options.key); +} + +inherits(DES, Cipher); +module.exports = DES; + +DES.create = function create(options) { + return new DES(options); +}; + +var shiftTable = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]; + +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); + assert.equal(key.length, this.blockSize, 'Invalid key length'); + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; + +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); // Initial Permutation + + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + if (this.type === 'encrypt') this._encrypt(state, l, r, state.tmp, 0);else this._decrypt(state, l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; + +DES.prototype._pad = function _pad(buffer, off) { + var value = buffer.length - off; + + for (var i = off; i < buffer.length; i++) { + buffer[i] = value; + } + + return true; +}; + +DES.prototype._unpad = function _unpad(buffer) { + var pad = buffer[buffer.length - 1]; + + for (var i = buffer.length - pad; i < buffer.length; i++) { + assert.equal(buffer[i], pad); + } + + return buffer.slice(0, buffer.length - pad); +}; + +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; // Apply f() x16 times + + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; // f(r, k) + + utils.expand(r, state.tmp, 0); + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + var t = r; + r = (l ^ f) >>> 0; + l = t; + } // Reverse Initial Permutation + + + utils.rip(r, l, out, off); +}; + +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; // Apply f() x16 times + + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; // f(r, k) + + utils.expand(l, state.tmp, 0); + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + var t = l; + l = (r ^ f) >>> 0; + r = t; + } // Reverse Initial Permutation + + + utils.rip(l, r, out, off); +}; + +/***/ }), + +/***/ "./node_modules/des.js/lib/des/ede.js": +/*!********************************************!*\ + !*** ./node_modules/des.js/lib/des/ede.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Cipher = __webpack_require__(/*! ./cipher */ "./node_modules/des.js/lib/des/cipher.js"); + +var DES = __webpack_require__(/*! ./des */ "./node_modules/des.js/lib/des/des.js"); + +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); + + if (type === 'encrypt') { + this.ciphers = [DES.create({ + type: 'encrypt', + key: k1 + }), DES.create({ + type: 'decrypt', + key: k2 + }), DES.create({ + type: 'encrypt', + key: k3 + })]; + } else { + this.ciphers = [DES.create({ + type: 'decrypt', + key: k3 + }), DES.create({ + type: 'encrypt', + key: k2 + }), DES.create({ + type: 'decrypt', + key: k1 + })]; + } +} + +function EDE(options) { + Cipher.call(this, options); + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} + +inherits(EDE, Cipher); +module.exports = EDE; + +EDE.create = function create(options) { + return new EDE(options); +}; + +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; + + state.ciphers[0]._update(inp, inOff, out, outOff); + + state.ciphers[1]._update(out, outOff, out, outOff); + + state.ciphers[2]._update(out, outOff, out, outOff); +}; + +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; + +/***/ }), + +/***/ "./node_modules/des.js/lib/des/utils.js": +/*!**********************************************!*\ + !*** ./node_modules/des.js/lib/des/utils.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = bytes[0 + off] << 24 | bytes[1 + off] << 16 | bytes[2 + off] << 8 | bytes[3 + off]; + return res >>> 0; +}; + +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = value >>> 16 & 0xff; + bytes[2 + off] = value >>> 8 & 0xff; + bytes[3 + off] = value & 0xff; +}; + +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >>> j + i & 1; + } + + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inL >>> j + i & 1; + } + } + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= inR >>> j + i & 1; + } + + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= inL >>> j + i & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= inR >>> j + i & 1; + outL <<= 1; + outL |= inL >>> j + i & 1; + } + } + + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= inR >>> j + i & 1; + outR <<= 1; + outR |= inL >>> j + i & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >> j + i & 1; + } + + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inL >> j + i & 1; + } + } + + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >> j + i & 1; + } // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + + + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inR >> j + i & 1; + } + + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inL >> j + i & 1; + } + } + + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inL >> j + i & 1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.r28shl = function r28shl(num, shift) { + return num << shift & 0xfffffff | num >>> 28 - shift; +}; + +var pc2table = [// inL => outL +14, 11, 17, 4, 27, 23, 25, 0, 13, 22, 7, 18, 5, 9, 16, 24, 2, 20, 12, 21, 1, 8, 15, 26, // inR => outR +15, 4, 25, 19, 9, 1, 26, 16, 5, 11, 23, 8, 12, 7, 17, 0, 22, 3, 10, 14, 6, 20, 27, 24]; + +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; + var len = pc2table.length >>> 1; + + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= inL >>> pc2table[i] & 0x1; + } + + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= inR >>> pc2table[i] & 0x1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; + outL = (r & 1) << 5 | r >>> 27; + + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= r >>> i & 0x3f; + } + + for (var i = 11; i >= 3; i -= 4) { + outR |= r >>> i & 0x3f; + outR <<= 6; + } + + outR |= (r & 0x1f) << 1 | r >>> 31; + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +var sTable = [14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11]; + +exports.substitute = function substitute(inL, inR) { + var out = 0; + + for (var i = 0; i < 4; i++) { + var b = inL >>> 18 - i * 6 & 0x3f; + var sb = sTable[i * 0x40 + b]; + out <<= 4; + out |= sb; + } + + for (var i = 0; i < 4; i++) { + var b = inR >>> 18 - i * 6 & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; + out <<= 4; + out |= sb; + } + + return out >>> 0; +}; + +var permuteTable = [16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7]; + +exports.permute = function permute(num) { + var out = 0; + + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= num >>> permuteTable[i] & 0x1; + } + + return out >>> 0; +}; + +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + + while (str.length < size) { + str = '0' + str; + } + + var out = []; + + for (var i = 0; i < size; i += group) { + out.push(str.slice(i, i + group)); + } + + return out.join(' '); +}; + +/***/ }), + +/***/ "./node_modules/diffie-hellman/browser.js": +/*!************************************************!*\ + !*** ./node_modules/diffie-hellman/browser.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {var generatePrime = __webpack_require__(/*! ./lib/generatePrime */ "./node_modules/diffie-hellman/lib/generatePrime.js"); + +var primes = __webpack_require__(/*! ./lib/primes.json */ "./node_modules/diffie-hellman/lib/primes.json"); + +var DH = __webpack_require__(/*! ./lib/dh */ "./node_modules/diffie-hellman/lib/dh.js"); + +function getDiffieHellman(mod) { + var prime = new Buffer(primes[mod].prime, 'hex'); + var gen = new Buffer(primes[mod].gen, 'hex'); + return new DH(prime, gen); +} + +var ENCODINGS = { + 'binary': true, + 'hex': true, + 'base64': true +}; + +function createDiffieHellman(prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator); + } + + enc = enc || 'binary'; + genc = genc || 'binary'; + generator = generator || new Buffer([2]); + + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc); + } + + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true); + } + + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc); + } + + return new DH(prime, generator, true); +} + +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman; +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/diffie-hellman/lib/dh.js": +/*!***********************************************!*\ + !*** ./node_modules/diffie-hellman/lib/dh.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var MillerRabin = __webpack_require__(/*! miller-rabin */ "./node_modules/miller-rabin/lib/mr.js"); + +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); + +var primes = __webpack_require__(/*! ./generatePrime */ "./node_modules/diffie-hellman/lib/generatePrime.js"); + +var randomBytes = __webpack_require__(/*! randombytes */ "./node_modules/randombytes/browser.js"); + +module.exports = DH; + +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + + this._pub = new BN(pub); + return this; +} + +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + + this._priv = new BN(priv); + return this; +} + +var primeCache = {}; + +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + + if (hex in primeCache) { + return primeCache[hex]; + } + + var error = 0; + + if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; + + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + + primeCache[hex] = error; + return error; + } + + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + + var rem; + + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + + break; + + case '05': + rem = prime.mod(TEN); + + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + + break; + + default: + error += 4; + } + + primeCache[hex] = error; + return error; +} + +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } +} + +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function get() { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + + return this._primeCode; + } +}); + +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; + +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + + return out; +}; + +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; + +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; + +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; + +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; + +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; + +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/diffie-hellman/lib/generatePrime.js": +/*!**********************************************************!*\ + !*** ./node_modules/diffie-hellman/lib/generatePrime.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var randomBytes = __webpack_require__(/*! randombytes */ "./node_modules/randombytes/browser.js"); + +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var TWENTYFOUR = new BN(24); + +var MillerRabin = __webpack_require__(/*! miller-rabin */ "./node_modules/miller-rabin/lib/mr.js"); + +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; + +function _getPrimes() { + if (primes !== null) return primes; + var limit = 0x100000; + var res = []; + res[0] = 2; + + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + + for (var j = 0; j < i && res[j] <= sqrt; j++) { + if (k % res[j] === 0) break; + } + + if (i !== j && res[j] <= sqrt) continue; + res[i++] = k; + } + + primes = res; + return res; +} + +function simpleSieve(p) { + var primes = _getPrimes(); + + for (var i = 0; i < primes.length; i++) { + if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + } + + return true; +} + +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} + +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + + gen = new BN(gen); + var num, n2; + + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + + while (num.bitLength() > bits) { + num.ishrn(1); + } + + if (num.isEven()) { + num.iadd(ONE); + } + + if (!num.testn(1)) { + num.iadd(TWO); + } + + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + + n2 = num.shrn(1); + + if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } +} + +/***/ }), + +/***/ "./node_modules/diffie-hellman/lib/primes.json": +/*!*****************************************************!*\ + !*** ./node_modules/diffie-hellman/lib/primes.json ***! + \*****************************************************/ +/*! exports provided: modp1, modp2, modp5, modp14, modp15, modp16, modp17, modp18, default */ +/***/ (function(module) { + +module.exports = JSON.parse("{\"modp1\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"},\"modp2\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"},\"modp5\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"},\"modp14\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"},\"modp15\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"},\"modp16\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"},\"modp17\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"},\"modp18\":{\"gen\":\"02\",\"prime\":\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"}}"); + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic.js": +/*!***********************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var elliptic = exports; +elliptic.version = __webpack_require__(/*! ../package.json */ "./node_modules/elliptic/package.json").version; +elliptic.utils = __webpack_require__(/*! ./elliptic/utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); +elliptic.rand = __webpack_require__(/*! brorand */ "./node_modules/brorand/index.js"); +elliptic.curve = __webpack_require__(/*! ./elliptic/curve */ "./node_modules/elliptic/lib/elliptic/curve/index.js"); +elliptic.curves = __webpack_require__(/*! ./elliptic/curves */ "./node_modules/elliptic/lib/elliptic/curves.js"); // Protocols + +elliptic.ec = __webpack_require__(/*! ./elliptic/ec */ "./node_modules/elliptic/lib/elliptic/ec/index.js"); +elliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ "./node_modules/elliptic/lib/elliptic/eddsa/index.js"); + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/curve/base.js": +/*!**********************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/curve/base.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; + +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); // Use Montgomery, when there is no fast reduction for the prime + + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); // Useful for many curves + + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); // Curve configuration, optional + + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); // Temporary arrays + + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + this._bitLength = this.n ? this.n.bitLength() : 0; // Generalized Greg Maxwell's trick + + var adjustCount = this.n && this.p.div(this.n); + + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} + +module.exports = BaseCurve; + +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + + var doubles = p._getDoubles(); + + var naf = getNAF(k, 1, this._bitLength); + var I = (1 << doubles.step + 1) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; // Translate into more windowed form + + var repr = []; + + for (var j = 0; j < naf.length; j += doubles.step) { + var nafW = 0; + + for (var k = j + doubles.step - 1; k >= j; k--) { + nafW = (nafW << 1) + naf[k]; + } + + repr.push(nafW); + } + + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + + for (var i = I; i > 0; i--) { + for (var j = 0; j < repr.length; j++) { + var nafW = repr[j]; + if (nafW === i) b = b.mixedAdd(doubles.points[j]);else if (nafW === -i) b = b.mixedAdd(doubles.points[j].neg()); + } + + a = a.add(b); + } + + return a.toP(); +}; + +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; // Precompute window + + var nafPoints = p._getNAFPoints(w); + + w = nafPoints.wnd; + var wnd = nafPoints.points; // Get NAF form + + var naf = getNAF(k, w, this._bitLength); // Add `this`*(N+1) for every w-NAF index + + var acc = this.jpoint(null, null, null); + + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var k = 0; i >= 0 && naf[i] === 0; i--) { + k++; + } + + if (i >= 0) k++; + acc = acc.dblp(k); + if (i < 0) break; + var z = naf[i]; + assert(z !== 0); + + if (p.type === 'affine') { + // J +- P + if (z > 0) acc = acc.mixedAdd(wnd[z - 1 >> 1]);else acc = acc.mixedAdd(wnd[-z - 1 >> 1].neg()); + } else { + // J +- J + if (z > 0) acc = acc.add(wnd[z - 1 >> 1]);else acc = acc.add(wnd[-z - 1 >> 1].neg()); + } + } + + return p.type === 'affine' ? acc.toP() : acc; +}; + +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len, jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; // Fill all arrays + + var max = 0; + + for (var i = 0; i < len; i++) { + var p = points[i]; + + var nafPoints = p._getNAFPoints(defW); + + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } // Comb small window NAFs + + + for (var i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength); + naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + + var comb = [points[a], + /* 1 */ + null, + /* 3 */ + null, + /* 5 */ + points[b] + /* 7 */ + ]; // Try to avoid Projective points, if possible + + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + + var index = [-3, + /* -1 -1 */ + -1, + /* -1 0 */ + -5, + /* -1 1 */ + -7, + /* 0 -1 */ + 0, + /* 0 0 */ + 7, + /* 0 1 */ + 5, + /* 1 -1 */ + 1, + /* 1 0 */ + 3 + /* 1 1 */ + ]; + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + + for (var j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + + for (var i = max; i >= 0; i--) { + var k = 0; + + while (i >= 0) { + var zero = true; + + for (var j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) zero = false; + } + + if (!zero) break; + k++; + i--; + } + + if (i >= 0) k++; + acc = acc.dblp(k); + if (i < 0) break; + + for (var j = 0; j < len; j++) { + var z = tmp[j]; + var p; + if (z === 0) continue;else if (z > 0) p = wnd[j][z - 1 >> 1];else if (z < 0) p = wnd[j][-z - 1 >> 1].neg(); + if (p.type === 'affine') acc = acc.mixedAdd(p);else acc = acc.add(p); + } + } // Zeroify references + + + for (var i = 0; i < len; i++) { + wnd[i] = null; + } + + if (jacobianResult) return acc;else return acc.toP(); +}; + +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} + +BaseCurve.BasePoint = BasePoint; + +BasePoint.prototype.eq = function eq() +/*other*/ +{ + throw new Error('Not implemented'); +}; + +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; + +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + var len = this.p.byteLength(); // uncompressed, hybrid-odd, hybrid-even + + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) assert(bytes[bytes.length - 1] % 2 === 0);else if (bytes[0] === 0x07) assert(bytes[bytes.length - 1] % 2 === 1); + var res = this.point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len)); + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + + throw new Error('Unknown point format'); +}; + +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; + +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + if (compact) return [this.getY().isEven() ? 0x02 : 0x03].concat(x); + return [0x04].concat(x, this.getY().toArray('be', len)); +}; + +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; + +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) return this; + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + return this; +}; + +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) return false; + var doubles = this.precomputed.doubles; + if (!doubles) return false; + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; + +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) return this.precomputed.doubles; + var doubles = [this]; + var acc = this; + + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) { + acc = acc.dbl(); + } + + doubles.push(acc); + } + + return { + step: step, + points: doubles + }; +}; + +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) return this.precomputed.naf; + var res = [this]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + + for (var i = 1; i < max; i++) { + res[i] = res[i - 1].add(dbl); + } + + return { + wnd: wnd, + points: res + }; +}; + +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; + +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + + for (var i = 0; i < k; i++) { + r = r.dbl(); + } + + return r; +}; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/curve/edwards.js": +/*!*************************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/curve/edwards.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Base = __webpack_require__(/*! ./base */ "./node_modules/elliptic/lib/elliptic/curve/base.js"); + +var assert = utils.assert; + +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + Base.call(this, 'edwards', conf); + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} + +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; + +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) return num.redNeg();else return this.a.redMul(num); +}; + +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) return num;else return this.c.redMul(num); +}; // Just for compatibility with Short curve + + +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; + +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) x = x.toRed(this.red); + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); + return this.point(x, y); +}; + +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) y = y.toRed(this.red); // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) + + var y2 = y.redSqr(); + var lhs = y2.redSub(this.c2); + var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); + var x2 = lhs.redMul(rhs.redInvm()); + + if (x2.cmp(this.zero) === 0) { + if (odd) throw new Error('invalid point');else return this.point(this.zero, y); + } + + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) throw new Error('invalid point'); + if (x.fromRed().isOdd() !== odd) x = x.redNeg(); + return this.point(x, y); +}; + +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) return true; // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + + point.normalize(); + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + return lhs.cmp(rhs) === 0; +}; + +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; // Use extended coordinates + + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) this.t = this.t.redMul(this.z.redInvm()); + } + } +} + +inherits(Point, Base.BasePoint); + +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && (this.y.cmp(this.z) === 0 || this.zOne && this.y.cmp(this.curve.c) === 0); +}; + +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + // A = X1^2 + var a = this.x.redSqr(); // B = Y1^2 + + var b = this.y.redSqr(); // C = 2 * Z1^2 + + var c = this.z.redSqr(); + c = c.redIAdd(c); // D = a * A + + var d = this.curve._mulA(a); // E = (X1 + Y1)^2 - A - B + + + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); // G = D + B + + var g = d.redAdd(b); // F = G - C + + var f = g.redSub(c); // H = D - B + + var h = d.redSub(b); // X3 = E * F + + var nx = e.redMul(f); // Y3 = G * H + + var ny = g.redMul(h); // T3 = E * H + + var nt = e.redMul(h); // Z3 = F * G + + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); // C = X1^2 + + var c = this.x.redSqr(); // D = Y1^2 + + var d = this.y.redSqr(); + var nx; + var ny; + var nz; + + if (this.curve.twisted) { + // E = a * C + var e = this.curve._mulA(c); // F = E + D + + + var f = e.redAdd(d); + + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); // Y3 = F * (E - D) + + ny = f.redMul(e.redSub(d)); // Z3 = F^2 - 2 * F + + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + var h = this.z.redSqr(); // J = F - 2 * H + + var j = f.redSub(h).redISub(h); // X3 = (B-C-D)*J + + nx = b.redSub(c).redISub(d).redMul(j); // Y3 = F * (E - D) + + ny = f.redMul(e.redSub(d)); // Z3 = F * J + + nz = f.redMul(j); + } + } else { + // E = C + D + var e = c.redAdd(d); // H = (c * Z1)^2 + + var h = this.curve._mulC(this.z).redSqr(); // J = E - 2 * H + + + var j = e.redSub(h).redSub(h); // X3 = c * (B - E) * J + + nx = this.curve._mulC(b.redISub(e)).redMul(j); // Y3 = c * E * (C - D) + + ny = this.curve._mulC(e).redMul(c.redISub(d)); // Z3 = E * J + + nz = e.redMul(j); + } + + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) return this; // Double in extended coordinates + + if (this.curve.extended) return this._extDbl();else return this._projDbl(); +}; + +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); // B = (Y1 + X1) * (Y2 + X2) + + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); // C = T1 * k * T2 + + var c = this.t.redMul(this.curve.dd).redMul(p.t); // D = Z1 * 2 * Z2 + + var d = this.z.redMul(p.z.redAdd(p.z)); // E = B - A + + var e = b.redSub(a); // F = D - C + + var f = d.redSub(c); // G = D + C + + var g = d.redAdd(c); // H = B + A + + var h = b.redAdd(a); // X3 = E * F + + var nx = e.redMul(f); // Y3 = G * H + + var ny = g.redMul(h); // T3 = E * H + + var nt = e.redMul(h); // Z3 = F * G + + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + // A = Z1 * Z2 + var a = this.z.redMul(p.z); // B = A^2 + + var b = a.redSqr(); // C = X1 * X2 + + var c = this.x.redMul(p.x); // D = Y1 * Y2 + + var d = this.y.redMul(p.y); // E = d * C * D + + var e = this.curve.d.redMul(c).redMul(d); // F = B - E + + var f = b.redSub(e); // G = B + E + + var g = b.redAdd(e); // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); // Z3 = F * G + + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); // Z3 = c * F * G + + nz = this.curve._mulC(f).redMul(g); + } + + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.add = function add(p) { + if (this.isInfinity()) return p; + if (p.isInfinity()) return this; + if (this.curve.extended) return this._extAdd(p);else return this._projAdd(p); +}; + +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, false); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, true); +}; + +Point.prototype.normalize = function normalize() { + if (this.zOne) return this; // Normalize coordinates + + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; + +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), this.y, this.z, this.t && this.t.redNeg()); +}; + +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; + +Point.prototype.eq = function eq(other) { + return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0; +}; + +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) return true; + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) return false; + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) return true; + } +}; // Compatibility with BaseCurve + + +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/curve/index.js": +/*!***********************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/curve/index.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var curve = exports; +curve.base = __webpack_require__(/*! ./base */ "./node_modules/elliptic/lib/elliptic/curve/base.js"); +curve.short = __webpack_require__(/*! ./short */ "./node_modules/elliptic/lib/elliptic/curve/short.js"); +curve.mont = __webpack_require__(/*! ./mont */ "./node_modules/elliptic/lib/elliptic/curve/mont.js"); +curve.edwards = __webpack_require__(/*! ./edwards */ "./node_modules/elliptic/lib/elliptic/curve/edwards.js"); + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/curve/mont.js": +/*!**********************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/curve/mont.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Base = __webpack_require__(/*! ./base */ "./node_modules/elliptic/lib/elliptic/curve/base.js"); + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +function MontCurve(conf) { + Base.call(this, 'mont', conf); + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} + +inherits(MontCurve, Base); +module.exports = MontCurve; + +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + return y.redSqr().cmp(rhs) === 0; +}; + +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + } +} + +inherits(Point, Base.BasePoint); + +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; + +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; + +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +Point.prototype.precompute = function precompute() {// No-op +}; + +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + // A = X1 + Z1 + var a = this.x.redAdd(this.z); // AA = A^2 + + var aa = a.redSqr(); // B = X1 - Z1 + + var b = this.x.redSub(this.z); // BB = B^2 + + var bb = b.redSqr(); // C = AA - BB + + var c = aa.redSub(bb); // X3 = AA * BB + + var nx = aa.redMul(bb); // Z3 = C * (BB + A24 * C) + + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; + +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + // A = X2 + Z2 + var a = this.x.redAdd(this.z); // B = X2 - Z2 + + var b = this.x.redSub(this.z); // C = X3 + Z3 + + var c = p.x.redAdd(p.z); // D = X3 - Z3 + + var d = p.x.redSub(p.z); // DA = D * A + + var da = d.redMul(a); // CB = C * B + + var cb = c.redMul(b); // X5 = Z1 * (DA + CB)^2 + + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); // Z5 = X1 * (DA - CB)^2 + + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; + +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + + var b = this.curve.point(null, null); // (N / 2) * Q + + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) { + bits.push(t.andln(1)); + } + + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); // N * Q = 2 * ((N / 2) * Q + Q)) + + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); // N * Q + Q = 2 * ((N / 2) * Q + Q) + + a = a.dbl(); + } + } + + return b; +}; + +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; + +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; + +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + return this.x.fromRed(); +}; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/curve/short.js": +/*!***********************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/curve/short.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var Base = __webpack_require__(/*! ./base */ "./node_modules/elliptic/lib/elliptic/curve/base.js"); + +var assert = utils.assert; + +function ShortCurve(conf) { + Base.call(this, 'short', conf); + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; // If the curve is endomorphic, precalculate beta and lambda + + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} + +inherits(ShortCurve, Base); +module.exports = ShortCurve; + +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) return; // Compute beta and lambda, that lambda * P = (beta * Px; Py) + + var beta; + var lambda; + + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); // Choose the smallest beta + + + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } // Get basis vectors, used for balanced length-two representation + + + var basis; + + if (conf.basis) { + basis = conf.basis.map(function (vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + + return { + beta: beta, + lambda: lambda, + basis: basis + }; +}; + +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [l1, l2]; +}; + +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + + var a0; + var b0; // First vector + + var a1; + var b1; // Second vector + + var a2; + var b2; + var prevR; + var i = 0; + var r; + var x; + + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + + prevR = r; + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + + a2 = r.neg(); + b2 = x; + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } // Normalize signs + + + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + + return [{ + a: a1, + b: b1 + }, { + a: a2, + b: b2 + }]; +}; + +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); // Calculate answer + + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { + k1: k1, + k2: k2 + }; +}; + +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) x = x.toRed(this.red); + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); + return this.point(x, y); +}; + +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) return true; + var x = point.x; + var y = point.y; + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + + var p = points[i]; + + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); // Clean-up references to points and coefficients + + + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + + return res; +}; + +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); // Force redgomery representation when loading from JSON + + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} + +inherits(Point, Base.BasePoint); + +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; + +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) return; + var pre = this.precomputed; + if (pre && pre.beta) return pre.beta; + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + + if (pre) { + var curve = this.curve; + + var endoMul = function endoMul(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; + } + + return beta; +}; + +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) return [this.x, this.y]; + return [this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + }]; +}; + +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) return res; + + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [res].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [res].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; + +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) return p; // P + O = P + + if (p.inf) return this; // P + P = 2P + + if (this.eq(p)) return this.dbl(); // P + (-P) = O + + if (this.neg().eq(p)) return this.curve.point(null, null); // P + Q = O + + if (this.x.cmp(p.x) === 0) return this.curve.point(null, null); + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.dbl = function dbl() { + if (this.inf) return this; // 2P = O + + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) return this.curve.point(null, null); + var a = this.curve.a; + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; + +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + if (this.isInfinity()) return this;else if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else if (this.curve.endo) return this.curve._endoWnafMulAdd([this], [k]);else return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [this, p2]; + var coeffs = [k1, k2]; + if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs);else return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [this, p2]; + var coeffs = [k1, k2]; + if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs, true);else return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; + +Point.prototype.eq = function eq(p) { + return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) return this; + var res = this.curve.point(this.x, this.y.redNeg()); + + if (_precompute && this.precomputed) { + var pre = this.precomputed; + + var negate = function negate(p) { + return p.neg(); + }; + + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; + } + + return res; +}; + +Point.prototype.toJ = function toJ() { + if (this.inf) return this.curve.jpoint(null, null, null); + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; +} + +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; + +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) return this.curve.point(null, null); + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + return this.curve.point(ax, ay); +}; + +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; + +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) return p; // P + O = P + + if (p.isInfinity()) return this; // 12M + 4S + 7A + + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + var h = u1.redSub(u2); + var r = s1.redSub(s2); + + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) return p.toJ(); // P + O = P + + if (p.isInfinity()) return this; // 8M + 3S + 7A + + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + var h = u1.redSub(u2); + var r = s1.redSub(s2); + + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) return this; + if (this.isInfinity()) return this; + if (!pow) return this.dbl(); + + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + + for (var i = 0; i < pow; i++) { + r = r.dbl(); + } + + return r; + } // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + + + var a = this.curve.a; + var tinv = this.curve.tinv; + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); // Reuse results + + var jyd = jy.redAdd(jy); + + for (var i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) jz4 = jz4.redMul(jyd4); + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; + +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) return this; + if (this.curve.zeroA) return this._zeroDbl();else if (this.curve.threeA) return this._threeDbl();else return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; // Z = 1 + + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + // XX = X1^2 + var xx = this.x.redSqr(); // YY = Y1^2 + + var yy = this.y.redSqr(); // YYYY = YY^2 + + var yyyy = yy.redSqr(); // S = 2 * ((X1 + YY)^2 - XX - YYYY) + + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); // M = 3 * XX + a; a = 0 + + var m = xx.redAdd(xx).redIAdd(xx); // T = M ^ 2 - 2*S + + var t = m.redSqr().redISub(s).redISub(s); // 8 * YYYY + + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); // X3 = T + + nx = t; // Y3 = M * (S - T) - 8 * YYYY + + ny = m.redMul(s.redISub(t)).redISub(yyyy8); // Z3 = 2*Y1 + + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + // A = X1^2 + var a = this.x.redSqr(); // B = Y1^2 + + var b = this.y.redSqr(); // C = B^2 + + var c = b.redSqr(); // D = 2 * ((X1 + B)^2 - A - C) + + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); // E = 3 * A + + var e = a.redAdd(a).redIAdd(a); // F = E^2 + + var f = e.redSqr(); // 8 * C + + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); // X3 = F - 2 * D + + nx = f.redISub(d).redISub(d); // Y3 = E * (D - X3) - 8 * C + + ny = e.redMul(d.redISub(nx)).redISub(c8); // Z3 = 2 * Y1 * Z1 + + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; // Z = 1 + + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + // XX = X1^2 + var xx = this.x.redSqr(); // YY = Y1^2 + + var yy = this.y.redSqr(); // YYYY = YY^2 + + var yyyy = yy.redSqr(); // S = 2 * ((X1 + YY)^2 - XX - YYYY) + + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); // M = 3 * XX + a + + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); // T = M^2 - 2 * S + + var t = m.redSqr().redISub(s).redISub(s); // X3 = T + + nx = t; // Y3 = M * (S - T) - 8 * YYYY + + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); // Z3 = 2 * Y1 + + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + // delta = Z1^2 + var delta = this.z.redSqr(); // gamma = Y1^2 + + var gamma = this.y.redSqr(); // beta = X1 * gamma + + var beta = this.x.redMul(gamma); // alpha = 3 * (X1 - delta) * (X1 + delta) + + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); // X3 = alpha^2 - 8 * beta + + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); // Z3 = (Y1 + Z1)^2 - gamma - delta + + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; // 4M + 6S + 10A + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) return this.dbl().add(this); // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + // XX = X1^2 + + var xx = this.x.redSqr(); // YY = Y1^2 + + var yy = this.y.redSqr(); // ZZ = Z1^2 + + var zz = this.z.redSqr(); // YYYY = YY^2 + + var yyyy = yy.redSqr(); // M = 3 * XX + a * ZZ2; a = 0 + + var m = xx.redAdd(xx).redIAdd(xx); // MM = M^2 + + var mm = m.redSqr(); // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); // EE = E^2 + + var ee = e.redSqr(); // T = 16*YYYY + + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); // U = (M + E)^2 - MM - EE - T + + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); // X3 = 4 * (X1 * EE - 4 * YY * U) + + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); // Z3 = (Z1 + E)^2 - ZZ - EE + + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + return this.curve._wnafMul(this, k); +}; + +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') return this.eq(p.toJ()); + if (this === p) return true; // x1 * z2^2 == x2 * z1^2 + + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) return false; // y1 * z2^3 == y2 * z1^3 + + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; + +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) return true; + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) return false; + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) return true; + } +}; + +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; + +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/curves.js": +/*!******************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/curves.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var curves = exports; + +var hash = __webpack_require__(/*! hash.js */ "./node_modules/hash.js/lib/hash.js"); + +var curve = __webpack_require__(/*! ./curve */ "./node_modules/elliptic/lib/elliptic/curve/index.js"); + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var assert = utils.assert; + +function PresetCurve(options) { + if (options.type === 'short') this.curve = new curve.short(options);else if (options.type === 'edwards') this.curve = new curve.edwards(options);else this.curve = new curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} + +curves.PresetCurve = PresetCurve; + +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function get() { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve + }); + return curve; + } + }); +} + +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: ['188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'] +}); +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: ['b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'] +}); +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: ['6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'] +}); +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: ['aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + '5502f25d bf55296c 3a545e38 72760ab7', '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'] +}); +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: ['000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + '3fad0761 353c7086 a272c240 88be9476 9fd16650'] +}); +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: ['9'] +}); +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: ['216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658'] +}); +var pre; + +try { + pre = __webpack_require__(/*! ./precomputed/secp256k1 */ "./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js"); +} catch (e) { + pre = undefined; +} + +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [{ + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3' + }, { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15' + }], + gRed: false, + g: ['79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', pre] +}); + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/ec/index.js": +/*!********************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/ec/index.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var HmacDRBG = __webpack_require__(/*! hmac-drbg */ "./node_modules/hmac-drbg/lib/hmac-drbg.js"); + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var curves = __webpack_require__(/*! ../curves */ "./node_modules/elliptic/lib/elliptic/curves.js"); + +var rand = __webpack_require__(/*! brorand */ "./node_modules/brorand/index.js"); + +var assert = utils.assert; + +var KeyPair = __webpack_require__(/*! ./key */ "./node_modules/elliptic/lib/elliptic/ec/key.js"); + +var Signature = __webpack_require__(/*! ./signature */ "./node_modules/elliptic/lib/elliptic/ec/signature.js"); + +function EC(options) { + if (!(this instanceof EC)) return new EC(options); // Shortcut `elliptic.ec(curve-name)` + + if (typeof options === 'string') { + assert(curves.hasOwnProperty(options), 'Unknown curve ' + options); + options = curves[options]; + } // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + + + if (options instanceof curves.PresetCurve) options = { + curve: options + }; + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; // Point on curve + + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); // Hash for function for DRBG + + this.hash = options.hash || options.curve.hash; +} + +module.exports = EC; + +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; + +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; + +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; + +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) options = {}; // Instantiate Hmac_DRBG + + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray() + }); + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + + do { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) continue; + priv.iaddn(1); + return this.keyFromPrivate(priv); + } while (true); +}; + +EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) return msg.sub(this.n);else return msg; +}; + +EC.prototype.sign = function sign(msg, key, enc, options) { + if (_typeof(enc) === 'object') { + options = enc; + enc = null; + } + + if (!options) options = {}; + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); // Zero-extend key to provide enough entropy + + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); // Zero-extend nonce to have the same byte size as N + + var nonce = msg.toArray('be', bytes); // Instantiate Hmac_DRBG + + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8' + }); // Number of bytes to generate + + var ns1 = this.n.sub(new BN(1)); + + for (var iter = 0; true; iter++) { + var k = options.k ? options.k(iter) : new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) continue; + var kp = this.g.mul(k); + if (kp.isInfinity()) continue; + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) continue; + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) continue; + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0); // Use complement of `s`, if it is > `n / 2` + + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + + return new Signature({ + r: r, + s: s, + recoveryParam: recoveryParam + }); + } +}; + +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); // Perform primitive values validation + + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) return false; // Validate signature + + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + + if (!this.curve._maxwellTrick) { + var p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) return false; + return p.getX().umod(this.n).cmp(r) === 0; + } // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + + var p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) return false; // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + + return p.eqXToP(r); +}; + +EC.prototype.recoverPubKey = function (msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; // A set LSB signifies that the y-coordinate is odd + + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) throw new Error('Unable to find sencond key candinate'); // 1.1. Let x = r + jn. + + if (isSecondKey) r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);else r = this.curve.pointFromX(r, isYOdd); + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + + return this.g.mulAdd(s1, r, s2); +}; + +EC.prototype.getKeyRecoveryParam = function (e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) return signature.recoveryParam; + + for (var i = 0; i < 4; i++) { + var Qprime; + + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + + if (Qprime.eq(Q)) return i; + } + + throw new Error('Unable to find valid recovery factor'); +}; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/ec/key.js": +/*!******************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/ec/key.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var assert = utils.assert; + +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; // KeyPair(ec, { priv: ..., pub: ... }) + + if (options.priv) this._importPrivate(options.priv, options.privEnc); + if (options.pub) this._importPublic(options.pub, options.pubEnc); +} + +module.exports = KeyPair; + +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) return pub; + return new KeyPair(ec, { + pub: pub, + pubEnc: enc + }); +}; + +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) return priv; + return new KeyPair(ec, { + priv: priv, + privEnc: enc + }); +}; + +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + if (pub.isInfinity()) return { + result: false, + reason: 'Invalid public key' + }; + if (!pub.validate()) return { + result: false, + reason: 'Public key is not a point' + }; + if (!pub.mul(this.ec.curve.n).isInfinity()) return { + result: false, + reason: 'Public key * N != O' + }; + return { + result: true, + reason: null + }; +}; + +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + + if (!this.pub) this.pub = this.ec.g.mul(this.priv); + if (!enc) return this.pub; + return this.pub.encode(enc, compact); +}; + +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') return this.priv.toString(16, 2);else return this.priv; +}; + +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + + this.priv = this.priv.umod(this.ec.curve.n); +}; + +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + + this.pub = this.ec.curve.decodePoint(key, enc); +}; // ECDH + + +KeyPair.prototype.derive = function derive(pub) { + return pub.mul(this.priv).getX(); +}; // ECDSA + + +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; + +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); +}; + +KeyPair.prototype.inspect = function inspect() { + return ''; +}; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/ec/signature.js": +/*!************************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/ec/signature.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var assert = utils.assert; + +function Signature(options, enc) { + if (options instanceof Signature) return options; + if (this._importDER(options, enc)) return; + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) this.recoveryParam = null;else this.recoveryParam = options.recoveryParam; +} + +module.exports = Signature; + +function Position() { + this.place = 0; +} + +function getLength(buf, p) { + var initial = buf[p.place++]; + + if (!(initial & 0x80)) { + return initial; + } + + var octetLen = initial & 0xf; + var val = 0; + + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + } + + p.place = off; + return val; +} + +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + + if (i === 0) { + return buf; + } + + return buf.slice(i); +} + +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + + if (data[p.place++] !== 0x30) { + return false; + } + + var len = getLength(data, p); + + if (len + p.place !== data.length) { + return false; + } + + if (data[p.place++] !== 0x02) { + return false; + } + + var rlen = getLength(data, p); + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + + if (data[p.place++] !== 0x02) { + return false; + } + + var slen = getLength(data, p); + + if (data.length !== slen + p.place) { + return false; + } + + var s = data.slice(p.place, slen + p.place); + + if (r[0] === 0 && r[1] & 0x80) { + r = r.slice(1); + } + + if (s[0] === 0 && s[1] & 0x80) { + s = s.slice(1); + } + + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + return true; +}; + +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + + while (--octets) { + arr.push(len >>> (octets << 3) & 0xff); + } + + arr.push(len); +} + +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); // Pad values + + if (r[0] & 0x80) r = [0].concat(r); // Pad values + + if (s[0] & 0x80) s = [0].concat(s); + r = rmPadding(r); + s = rmPadding(s); + + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + + var arr = [0x02]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [0x30]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/eddsa/index.js": +/*!***********************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/eddsa/index.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var hash = __webpack_require__(/*! hash.js */ "./node_modules/hash.js/lib/hash.js"); + +var curves = __webpack_require__(/*! ../curves */ "./node_modules/elliptic/lib/elliptic/curves.js"); + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var assert = utils.assert; +var parseBytes = utils.parseBytes; + +var KeyPair = __webpack_require__(/*! ./key */ "./node_modules/elliptic/lib/elliptic/eddsa/key.js"); + +var Signature = __webpack_require__(/*! ./signature */ "./node_modules/elliptic/lib/elliptic/eddsa/signature.js"); + +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + if (!(this instanceof EDDSA)) return new EDDSA(curve); + var curve = curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} + +module.exports = EDDSA; +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ + +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message).mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ + R: R, + S: S, + Rencoded: Rencoded + }); +}; +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ + + +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; + +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + + for (var i = 0; i < arguments.length; i++) { + hash.update(arguments[i]); + } + + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; + +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; + +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; + +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) return sig; + return new Signature(this, sig); +}; +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ + + +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; + +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; + +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; + +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; + +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/eddsa/key.js": +/*!*********************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/eddsa/key.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ + +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) this._pub = params.pub;else this._pubBytes = parseBytes(params.pub); +} + +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) return pub; + return new KeyPair(eddsa, { + pub: pub + }); +}; + +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) return secret; + return new KeyPair(eddsa, { + secret: secret + }); +}; + +KeyPair.prototype.secret = function secret() { + return this._secret; +}; + +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + return a; +}); +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); + +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; + +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; + +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; + +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; + +module.exports = KeyPair; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/eddsa/signature.js": +/*!***************************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/eddsa/signature.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/elliptic/lib/elliptic/utils.js"); + +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ + +function Signature(eddsa, sig) { + this.eddsa = eddsa; + if (_typeof(sig) !== 'object') sig = parseBytes(sig); + + if (Array.isArray(sig)) { + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength) + }; + } + + assert(sig.R && sig.S, 'Signature without R or S'); + if (eddsa.isPoint(sig.R)) this._R = sig.R; + if (sig.S instanceof BN) this._S = sig.S; + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} + +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); + +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; + +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; + +module.exports = Signature; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js": +/*!*********************************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + doubles: { + step: 4, + points: [['e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'], ['8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'], ['175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'], ['363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'], ['8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'], ['723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'], ['eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'], ['100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'], ['e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'], ['feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'], ['da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'], ['53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'], ['8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'], ['385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'], ['6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'], ['3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'], ['85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'], ['948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'], ['6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'], ['e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'], ['e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'], ['213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'], ['4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'], ['fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'], ['76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'], ['c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'], ['d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'], ['b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'], ['e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'], ['a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'], ['90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'], ['8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'], ['e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'], ['8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'], ['e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'], ['b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'], ['d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'], ['324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'], ['4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'], ['9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'], ['6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'], ['a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'], ['7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'], ['928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'], ['85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'], ['ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'], ['827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'], ['eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'], ['e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'], ['1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'], ['146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'], ['fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'], ['da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'], ['a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'], ['174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'], ['959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'], ['d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'], ['64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'], ['8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'], ['13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'], ['bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'], ['8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'], ['8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'], ['dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'], ['f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82']] + }, + naf: { + wnd: 7, + points: [['f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'], ['2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'], ['5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'], ['acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'], ['774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'], ['f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'], ['d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'], ['defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'], ['2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'], ['352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'], ['2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'], ['9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'], ['daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'], ['c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'], ['6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'], ['1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'], ['605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'], ['62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'], ['80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'], ['7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'], ['d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'], ['49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'], ['77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'], ['f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'], ['463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'], ['f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'], ['caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'], ['2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'], ['7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'], ['754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'], ['e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'], ['186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'], ['df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'], ['5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'], ['290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'], ['af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'], ['766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'], ['59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'], ['f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'], ['7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'], ['948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'], ['7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'], ['3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'], ['d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'], ['1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'], ['733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'], ['15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'], ['a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'], ['e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'], ['311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'], ['34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'], ['f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'], ['d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'], ['32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'], ['7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'], ['ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'], ['16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'], ['eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'], ['78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'], ['494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'], ['a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'], ['c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'], ['841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'], ['5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'], ['36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'], ['336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'], ['8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'], ['1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'], ['85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'], ['29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'], ['a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'], ['4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'], ['d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'], ['ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'], ['af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'], ['e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'], ['591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'], ['11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'], ['3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'], ['cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'], ['c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'], ['c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'], ['a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'], ['347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'], ['da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'], ['c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'], ['4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'], ['3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'], ['cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'], ['b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'], ['d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'], ['48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'], ['dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'], ['6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'], ['e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'], ['eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'], ['13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'], ['ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'], ['b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'], ['ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'], ['8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'], ['52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'], ['e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'], ['7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'], ['5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'], ['32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'], ['e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'], ['8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'], ['4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'], ['3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'], ['674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'], ['d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'], ['30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'], ['be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'], ['93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'], ['b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'], ['d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'], ['d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'], ['463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'], ['7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'], ['74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'], ['30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'], ['9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'], ['176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'], ['75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'], ['809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'], ['1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9']] + } +}; + +/***/ }), + +/***/ "./node_modules/elliptic/lib/elliptic/utils.js": +/*!*****************************************************!*\ + !*** ./node_modules/elliptic/lib/elliptic/utils.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = exports; + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var minAssert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +var minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ "./node_modules/minimalistic-crypto-utils/lib/utils.js"); + +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; // Represent num in a w-NAF form + +function getNAF(num, w, bits) { + var naf = new Array(Math.max(num.bitLength(), bits) + 1); + naf.fill(0); + var ws = 1 << w + 1; + var k = num.clone(); + + for (var i = 0; i < naf.length; i++) { + var z; + var mod = k.andln(ws - 1); + + if (k.isOdd()) { + if (mod > (ws >> 1) - 1) z = (ws >> 1) - mod;else z = mod; + k.isubn(z); + } else { + z = 0; + } + + naf[i] = z; + k.iushrn(1); + } + + return naf; +} + +utils.getNAF = getNAF; // Represent k1, k2 in a Joint Sparse Form + +function getJSF(k1, k2) { + var jsf = [[], []]; + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + // First phase + var m14 = k1.andln(3) + d1 & 3; + var m24 = k2.andln(3) + d2 & 3; + if (m14 === 3) m14 = -1; + if (m24 === 3) m24 = -1; + var u1; + + if ((m14 & 1) === 0) { + u1 = 0; + } else { + var m8 = k1.andln(7) + d1 & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) u1 = -m14;else u1 = m14; + } + + jsf[0].push(u1); + var u2; + + if ((m24 & 1) === 0) { + u2 = 0; + } else { + var m8 = k2.andln(7) + d2 & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) u2 = -m24;else u2 = m24; + } + + jsf[1].push(u2); // Second phase + + if (2 * d1 === u1 + 1) d1 = 1 - d1; + if (2 * d2 === u2 + 1) d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + + return jsf; +} + +utils.getJSF = getJSF; + +function cachedProperty(obj, name, computer) { + var key = '_' + name; + + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : this[key] = computer.call(this); + }; +} + +utils.cachedProperty = cachedProperty; + +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : bytes; +} + +utils.parseBytes = parseBytes; + +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} + +utils.intFromLE = intFromLE; + +/***/ }), + +/***/ "./node_modules/elliptic/package.json": +/*!********************************************!*\ + !*** ./node_modules/elliptic/package.json ***! + \********************************************/ +/*! exports provided: _args, _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _spec, _where, author, bugs, dependencies, description, devDependencies, files, homepage, keywords, license, main, name, repository, scripts, version, default */ +/***/ (function(module) { + +module.exports = JSON.parse("{\"_args\":[[\"elliptic@6.5.2\",\"/Users/mo/Desktop/sn/dev/snjs\"]],\"_from\":\"elliptic@6.5.2\",\"_id\":\"elliptic@6.5.2\",\"_inBundle\":false,\"_integrity\":\"sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==\",\"_location\":\"/sncrypto/elliptic\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"version\",\"registry\":true,\"raw\":\"elliptic@6.5.2\",\"name\":\"elliptic\",\"escapedName\":\"elliptic\",\"rawSpec\":\"6.5.2\",\"saveSpec\":null,\"fetchSpec\":\"6.5.2\"},\"_requiredBy\":[\"/sncrypto/browserify-sign\",\"/sncrypto/create-ecdh\"],\"_resolved\":\"https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz\",\"_spec\":\"6.5.2\",\"_where\":\"/Users/mo/Desktop/sn/dev/snjs\",\"author\":{\"name\":\"Fedor Indutny\",\"email\":\"fedor@indutny.com\"},\"bugs\":{\"url\":\"https://github.com/indutny/elliptic/issues\"},\"dependencies\":{\"bn.js\":\"^4.4.0\",\"brorand\":\"^1.0.1\",\"hash.js\":\"^1.0.0\",\"hmac-drbg\":\"^1.0.0\",\"inherits\":\"^2.0.1\",\"minimalistic-assert\":\"^1.0.0\",\"minimalistic-crypto-utils\":\"^1.0.0\"},\"description\":\"EC cryptography\",\"devDependencies\":{\"brfs\":\"^1.4.3\",\"coveralls\":\"^3.0.8\",\"grunt\":\"^1.0.4\",\"grunt-browserify\":\"^5.0.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-connect\":\"^1.0.0\",\"grunt-contrib-copy\":\"^1.0.0\",\"grunt-contrib-uglify\":\"^1.0.1\",\"grunt-mocha-istanbul\":\"^3.0.1\",\"grunt-saucelabs\":\"^9.0.1\",\"istanbul\":\"^0.4.2\",\"jscs\":\"^3.0.7\",\"jshint\":\"^2.10.3\",\"mocha\":\"^6.2.2\"},\"files\":[\"lib\"],\"homepage\":\"https://github.com/indutny/elliptic\",\"keywords\":[\"EC\",\"Elliptic\",\"curve\",\"Cryptography\"],\"license\":\"MIT\",\"main\":\"lib/elliptic.js\",\"name\":\"elliptic\",\"repository\":{\"type\":\"git\",\"url\":\"git+ssh://git@github.com/indutny/elliptic.git\"},\"scripts\":{\"jscs\":\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\"jshint\":\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\"lint\":\"npm run jscs && npm run jshint\",\"test\":\"npm run lint && npm run unit\",\"unit\":\"istanbul test _mocha --reporter=spec test/index.js\",\"version\":\"grunt dist && git add dist/\"},\"version\":\"6.5.2\"}"); + +/***/ }), + +/***/ "./node_modules/events/events.js": +/*!***************************************!*\ + !*** ./node_modules/events/events.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var R = (typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === 'object' ? Reflect : null; +var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); +}; +var ReflectOwnKeys; + +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys; +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +}; + +function EventEmitter() { + EventEmitter.init.call(this); +} + +module.exports = EventEmitter; // Backwards-compat with node 0.10.x + +EventEmitter.EventEmitter = EventEmitter; +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. + +var defaultMaxListeners = 10; + +function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + _typeof(listener)); + } +} + +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function get() { + return defaultMaxListeners; + }, + set: function set(arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function () { + if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; // Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. + + +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + + this._maxListeners = n; + return this; +}; + +function _getMaxListeners(that) { + if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); +}; + +EventEmitter.prototype.emit = function emit(type) { + var args = []; + + for (var i = 1; i < arguments.length; i++) { + args.push(arguments[i]); + } + + var doError = type === 'error'; + var events = this._events; + if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw. + + if (doError) { + var er; + if (args.length > 0) er = args[0]; + + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } // At least give some kind of context to the user + + + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + if (handler === undefined) return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + + for (var i = 0; i < len; ++i) { + ReflectApply(listeners[i], this, args); + } + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + checkListener(listener); + events = target._events; + + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + + events = target._events; + } + + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } // Check for listener leak + + + m = _getMaxListeners(target); + + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + + var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = function prependListener(type, listener) { + return _addListener(this, type, listener, true); +}; + +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (arguments.length === 0) return this.listener.call(this.target); + return this.listener.apply(this.target, arguments); + } +} + +function _onceWrap(target, type, listener) { + var state = { + fired: false, + wrapFn: undefined, + target: target, + type: type, + listener: listener + }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + checkListener(listener); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { + checkListener(listener); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; +}; // Emits a 'removeListener' event if and only if the listener was removed. + + +EventEmitter.prototype.removeListener = function removeListener(type, listener) { + var list, events, position, i, originalListener; + checkListener(listener); + events = this._events; + if (events === undefined) return this; + list = events[type]; + if (list === undefined) return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) this._events = Object.create(null);else { + delete events[type]; + if (events.removeListener) this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) return this; + if (position === 0) list.shift();else { + spliceOne(list, position); + } + if (list.length === 1) events[type] = list[0]; + if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener); + } + + return this; +}; + +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + +EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { + var listeners, events, i; + events = this._events; + if (events === undefined) return this; // not listening for removeListener, no need to emit + + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type]; + } + + return this; + } // emit removeListener for all listeners on all events + + + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; +}; + +function _listeners(target, type, unwrap) { + var events = target._events; + if (events === undefined) return []; + var evlistener = events[type]; + if (evlistener === undefined) return []; + if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function (emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; + +function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; + } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; +}; + +function arrayClone(arr, n) { + var copy = new Array(n); + + for (var i = 0; i < n; ++i) { + copy[i] = arr[i]; + } + + return copy; +} + +function spliceOne(list, index) { + for (; index + 1 < list.length; index++) { + list[index] = list[index + 1]; + } + + list.pop(); +} + +function unwrapListeners(arr) { + var ret = new Array(arr.length); + + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + + return ret; +} + +/***/ }), + +/***/ "./node_modules/evp_bytestokey/index.js": +/*!**********************************************!*\ + !*** ./node_modules/evp_bytestokey/index.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var MD5 = __webpack_require__(/*! md5.js */ "./node_modules/md5.js/index.js"); +/* eslint-disable camelcase */ + + +function EVP_BytesToKey(password, salt, keyBits, ivLen) { + if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary'); + + if (salt) { + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary'); + if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length'); + } + + var keyLen = keyBits / 8; + var key = Buffer.alloc(keyLen); + var iv = Buffer.alloc(ivLen || 0); + var tmp = Buffer.alloc(0); + + while (keyLen > 0 || ivLen > 0) { + var hash = new MD5(); + hash.update(tmp); + hash.update(password); + if (salt) hash.update(salt); + tmp = hash.digest(); + var used = 0; + + if (keyLen > 0) { + var keyStart = key.length - keyLen; + used = Math.min(keyLen, tmp.length); + tmp.copy(key, keyStart, 0, used); + keyLen -= used; + } + + if (used < tmp.length && ivLen > 0) { + var ivStart = iv.length - ivLen; + var length = Math.min(ivLen, tmp.length - used); + tmp.copy(iv, ivStart, used, used + length); + ivLen -= length; + } + } + + tmp.fill(0); + return { + key: key, + iv: iv + }; +} + +module.exports = EVP_BytesToKey; + +/***/ }), + +/***/ "./node_modules/hash-base/index.js": +/*!*****************************************!*\ + !*** ./node_modules/hash-base/index.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var Transform = __webpack_require__(/*! stream */ "./node_modules/stream-browserify/index.js").Transform; + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +function throwIfNotStringOrBuffer(val, prefix) { + if (!Buffer.isBuffer(val) && typeof val !== 'string') { + throw new TypeError(prefix + ' must be a string or a buffer'); + } +} + +function HashBase(blockSize) { + Transform.call(this); + this._block = Buffer.allocUnsafe(blockSize); + this._blockSize = blockSize; + this._blockOffset = 0; + this._length = [0, 0, 0, 0]; + this._finalized = false; +} + +inherits(HashBase, Transform); + +HashBase.prototype._transform = function (chunk, encoding, callback) { + var error = null; + + try { + this.update(chunk, encoding); + } catch (err) { + error = err; + } + + callback(error); +}; + +HashBase.prototype._flush = function (callback) { + var error = null; + + try { + this.push(this.digest()); + } catch (err) { + error = err; + } + + callback(error); +}; + +HashBase.prototype.update = function (data, encoding) { + throwIfNotStringOrBuffer(data, 'Data'); + if (this._finalized) throw new Error('Digest already called'); + if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding); // consume data + + var block = this._block; + var offset = 0; + + while (this._blockOffset + data.length - offset >= this._blockSize) { + for (var i = this._blockOffset; i < this._blockSize;) { + block[i++] = data[offset++]; + } + + this._update(); + + this._blockOffset = 0; + } + + while (offset < data.length) { + block[this._blockOffset++] = data[offset++]; + } // update length + + + for (var j = 0, carry = data.length * 8; carry > 0; ++j) { + this._length[j] += carry; + carry = this._length[j] / 0x0100000000 | 0; + if (carry > 0) this._length[j] -= 0x0100000000 * carry; + } + + return this; +}; + +HashBase.prototype._update = function () { + throw new Error('_update is not implemented'); +}; + +HashBase.prototype.digest = function (encoding) { + if (this._finalized) throw new Error('Digest already called'); + this._finalized = true; + + var digest = this._digest(); + + if (encoding !== undefined) digest = digest.toString(encoding); // reset state + + this._block.fill(0); + + this._blockOffset = 0; + + for (var i = 0; i < 4; ++i) { + this._length[i] = 0; + } + + return digest; +}; + +HashBase.prototype._digest = function () { + throw new Error('_digest is not implemented'); +}; + +module.exports = HashBase; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash.js": +/*!******************************************!*\ + !*** ./node_modules/hash.js/lib/hash.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var hash = exports; +hash.utils = __webpack_require__(/*! ./hash/utils */ "./node_modules/hash.js/lib/hash/utils.js"); +hash.common = __webpack_require__(/*! ./hash/common */ "./node_modules/hash.js/lib/hash/common.js"); +hash.sha = __webpack_require__(/*! ./hash/sha */ "./node_modules/hash.js/lib/hash/sha.js"); +hash.ripemd = __webpack_require__(/*! ./hash/ripemd */ "./node_modules/hash.js/lib/hash/ripemd.js"); +hash.hmac = __webpack_require__(/*! ./hash/hmac */ "./node_modules/hash.js/lib/hash/hmac.js"); // Proxy hash functions to the main object + +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/common.js": +/*!*************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/common.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} + +exports.BlockHash = BlockHash; + +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) this.pending = msg;else this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; // Enough data, try updating + + if (this.pending.length >= this._delta8) { + msg = this.pending; // Process pending data in blocks + + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) this.pending = null; + msg = utils.join32(msg, 0, msg.length - r, this.endian); + + for (var i = 0; i < msg.length; i += this._delta32) { + this._update(msg, i, i + this._delta32); + } + } + + return this; +}; + +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); + return this._digest(enc); +}; + +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - (len + this.padLength) % bytes; + var res = new Array(k + this.padLength); + res[0] = 0x80; + + for (var i = 1; i < k; i++) { + res[i] = 0; + } // Append length + + + len <<= 3; + + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) { + res[i++] = 0; + } + + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = len >>> 24 & 0xff; + res[i++] = len >>> 16 & 0xff; + res[i++] = len >>> 8 & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = len >>> 8 & 0xff; + res[i++] = len >>> 16 & 0xff; + res[i++] = len >>> 24 & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + + for (t = 8; t < this.padLength; t++) { + res[i++] = 0; + } + } + + return res; +}; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/hmac.js": +/*!***********************************************!*\ + !*** ./node_modules/hash.js/lib/hash/hmac.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; + + this._init(utils.toArray(key, enc)); +} + +module.exports = Hmac; + +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); // Add padding to key + + for (var i = key.length; i < this.blockSize; i++) { + key.push(0); + } + + for (i = 0; i < key.length; i++) { + key[i] ^= 0x36; + } + + this.inner = new this.Hash().update(key); // 0x36 ^ 0x5c = 0x6a + + for (i = 0; i < key.length; i++) { + key[i] ^= 0x6a; + } + + this.outer = new this.Hash().update(key); +}; + +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; + +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/ripemd.js": +/*!*************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/ripemd.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ./utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var common = __webpack_require__(/*! ./common */ "./node_modules/hash.js/lib/hash/common.js"); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; + +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) return new RIPEMD160(); + BlockHash.call(this); + this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + this.endian = 'little'; +} + +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; + +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + + for (var j = 0; j < 80; j++) { + var T = sum32(rotl32(sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]), E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32(rotl32(sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), sh[j]), Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; + +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'little');else return utils.split32(this.h, 'little'); +}; + +function f(j, x, y, z) { + if (j <= 15) return x ^ y ^ z;else if (j <= 31) return x & y | ~x & z;else if (j <= 47) return (x | ~y) ^ z;else if (j <= 63) return x & z | y & ~z;else return x ^ (y | ~z); +} + +function K(j) { + if (j <= 15) return 0x00000000;else if (j <= 31) return 0x5a827999;else if (j <= 47) return 0x6ed9eba1;else if (j <= 63) return 0x8f1bbcdc;else return 0xa953fd4e; +} + +function Kh(j) { + if (j <= 15) return 0x50a28be6;else if (j <= 31) return 0x5c4dd124;else if (j <= 47) return 0x6d703ef3;else if (j <= 63) return 0x7a6d76e9;else return 0x00000000; +} + +var r = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]; +var rh = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]; +var s = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]; +var sh = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/sha.js": +/*!**********************************************!*\ + !*** ./node_modules/hash.js/lib/hash/sha.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.sha1 = __webpack_require__(/*! ./sha/1 */ "./node_modules/hash.js/lib/hash/sha/1.js"); +exports.sha224 = __webpack_require__(/*! ./sha/224 */ "./node_modules/hash.js/lib/hash/sha/224.js"); +exports.sha256 = __webpack_require__(/*! ./sha/256 */ "./node_modules/hash.js/lib/hash/sha/256.js"); +exports.sha384 = __webpack_require__(/*! ./sha/384 */ "./node_modules/hash.js/lib/hash/sha/384.js"); +exports.sha512 = __webpack_require__(/*! ./sha/512 */ "./node_modules/hash.js/lib/hash/sha/512.js"); + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/sha/1.js": +/*!************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/sha/1.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var common = __webpack_require__(/*! ../common */ "./node_modules/hash.js/lib/hash/common.js"); + +var shaCommon = __webpack_require__(/*! ./common */ "./node_modules/hash.js/lib/hash/sha/common.js"); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; +var sha1_K = [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6]; + +function SHA1() { + if (!(this instanceof SHA1)) return new SHA1(); + BlockHash.call(this); + this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + this.W = new Array(80); +} + +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; + +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) { + W[i] = msg[start + i]; + } + + for (; i < W.length; i++) { + W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + } + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; + +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/sha/224.js": +/*!**************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/sha/224.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var SHA256 = __webpack_require__(/*! ./256 */ "./node_modules/hash.js/lib/hash/sha/256.js"); + +function SHA224() { + if (!(this instanceof SHA224)) return new SHA224(); + SHA256.call(this); + this.h = [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]; +} + +utils.inherits(SHA224, SHA256); +module.exports = SHA224; +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; + +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') return utils.toHex32(this.h.slice(0, 7), 'big');else return utils.split32(this.h.slice(0, 7), 'big'); +}; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/sha/256.js": +/*!**************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/sha/256.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var common = __webpack_require__(/*! ../common */ "./node_modules/hash.js/lib/hash/common.js"); + +var shaCommon = __webpack_require__(/*! ./common */ "./node_modules/hash.js/lib/hash/sha/common.js"); + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; +var BlockHash = common.BlockHash; +var sha256_K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; + +function SHA256() { + if (!(this instanceof SHA256)) return new SHA256(); + BlockHash.call(this); + this.h = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]; + this.k = sha256_K; + this.W = new Array(64); +} + +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; + +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) { + W[i] = msg[start + i]; + } + + for (; i < W.length; i++) { + W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); + } + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; + assert(this.k.length === W.length); + + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; + +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/sha/384.js": +/*!**************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/sha/384.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var SHA512 = __webpack_require__(/*! ./512 */ "./node_modules/hash.js/lib/hash/sha/512.js"); + +function SHA384() { + if (!(this instanceof SHA384)) return new SHA384(); + SHA512.call(this); + this.h = [0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939, 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4]; +} + +utils.inherits(SHA384, SHA512); +module.exports = SHA384; +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; + +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h.slice(0, 12), 'big');else return utils.split32(this.h.slice(0, 12), 'big'); +}; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/sha/512.js": +/*!**************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/sha/512.js ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var common = __webpack_require__(/*! ../common */ "./node_modules/hash.js/lib/hash/common.js"); + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; +var BlockHash = common.BlockHash; +var sha512_K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817]; + +function SHA512() { + if (!(this instanceof SHA512)) return new SHA512(); + BlockHash.call(this); + this.h = [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1, 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179]; + this.k = sha512_K; + this.W = new Array(160); +} + +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; + +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; // 32 x 32bit words + + for (var i = 0; i < 32; i++) { + W[i] = msg[start + i]; + } + + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + + var c3_lo = W[i - 31]; + W[i] = sum64_4_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); + W[i + 1] = sum64_4_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); + } +}; + +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); + + var W = this.W; + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; + assert(this.k.length === W.length); + + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; + var T1_hi = sum64_5_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); + var T1_lo = sum64_5_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); + } + + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; + +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; + +function ch64_hi(xh, xl, yh, yl, zh) { + var r = xh & yh ^ ~xh & zh; + if (r < 0) r += 0x100000000; + return r; +} + +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = xl & yl ^ ~xl & zl; + if (r < 0) r += 0x100000000; + return r; +} + +function maj64_hi(xh, xl, yh, yl, zh) { + var r = xh & yh ^ xh & zh ^ yh & zh; + if (r < 0) r += 0x100000000; + return r; +} + +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = xl & yl ^ xl & zl ^ yl & zl; + if (r < 0) r += 0x100000000; + return r; +} + +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + + var c2_hi = rotr64_hi(xl, xh, 7); // 39 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} + +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + + var c2_lo = rotr64_lo(xl, xh, 7); // 39 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} + +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} + +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} + +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} + +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} + +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + + var c2_hi = shr64_hi(xh, xl, 6); + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} + +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + + var c2_lo = shr64_lo(xh, xl, 6); + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/sha/common.js": +/*!*****************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/sha/common.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "./node_modules/hash.js/lib/hash/utils.js"); + +var rotr32 = utils.rotr32; + +function ft_1(s, x, y, z) { + if (s === 0) return ch32(x, y, z); + if (s === 1 || s === 3) return p32(x, y, z); + if (s === 2) return maj32(x, y, z); +} + +exports.ft_1 = ft_1; + +function ch32(x, y, z) { + return x & y ^ ~x & z; +} + +exports.ch32 = ch32; + +function maj32(x, y, z) { + return x & y ^ x & z ^ y & z; +} + +exports.maj32 = maj32; + +function p32(x, y, z) { + return x ^ y ^ z; +} + +exports.p32 = p32; + +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} + +exports.s0_256 = s0_256; + +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} + +exports.s1_256 = s1_256; + +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ x >>> 3; +} + +exports.g0_256 = g0_256; + +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ x >>> 10; +} + +exports.g1_256 = g1_256; + +/***/ }), + +/***/ "./node_modules/hash.js/lib/hash/utils.js": +/*!************************************************!*\ + !*** ./node_modules/hash.js/lib/hash/utils.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +exports.inherits = inherits; + +function isSurrogatePair(msg, i) { + if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { + return false; + } + + if (i < 0 || i + 1 >= msg.length) { + return false; + } + + return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; +} + +function toArray(msg, enc) { + if (Array.isArray(msg)) return msg.slice(); + if (!msg) return []; + var res = []; + + if (typeof msg === 'string') { + if (!enc) { + // Inspired by stringToUtf8ByteArray() in closure-library by Google + // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 + // Apache License 2.0 + // https://github.com/google/closure-library/blob/master/LICENSE + var p = 0; + + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + + if (c < 128) { + res[p++] = c; + } else if (c < 2048) { + res[p++] = c >> 6 | 192; + res[p++] = c & 63 | 128; + } else if (isSurrogatePair(msg, i)) { + c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); + res[p++] = c >> 18 | 240; + res[p++] = c >> 12 & 63 | 128; + res[p++] = c >> 6 & 63 | 128; + res[p++] = c & 63 | 128; + } else { + res[p++] = c >> 12 | 224; + res[p++] = c >> 6 & 63 | 128; + res[p++] = c & 63 | 128; + } + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) msg = '0' + msg; + + for (i = 0; i < msg.length; i += 2) { + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } + } else { + for (i = 0; i < msg.length; i++) { + res[i] = msg[i] | 0; + } + } + + return res; +} + +exports.toArray = toArray; + +function toHex(msg) { + var res = ''; + + for (var i = 0; i < msg.length; i++) { + res += zero2(msg[i].toString(16)); + } + + return res; +} + +exports.toHex = toHex; + +function htonl(w) { + var res = w >>> 24 | w >>> 8 & 0xff00 | w << 8 & 0xff0000 | (w & 0xff) << 24; + return res >>> 0; +} + +exports.htonl = htonl; + +function toHex32(msg, endian) { + var res = ''; + + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') w = htonl(w); + res += zero8(w.toString(16)); + } + + return res; +} + +exports.toHex32 = toHex32; + +function zero2(word) { + if (word.length === 1) return '0' + word;else return word; +} + +exports.zero2 = zero2; + +function zero8(word) { + if (word.length === 7) return '0' + word;else if (word.length === 6) return '00' + word;else if (word.length === 5) return '000' + word;else if (word.length === 4) return '0000' + word;else if (word.length === 3) return '00000' + word;else if (word.length === 2) return '000000' + word;else if (word.length === 1) return '0000000' + word;else return word; +} + +exports.zero8 = zero8; + +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') w = msg[k] << 24 | msg[k + 1] << 16 | msg[k + 2] << 8 | msg[k + 3];else w = msg[k + 3] << 24 | msg[k + 2] << 16 | msg[k + 1] << 8 | msg[k]; + res[i] = w >>> 0; + } + + return res; +} + +exports.join32 = join32; + +function split32(msg, endian) { + var res = new Array(msg.length * 4); + + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = m >>> 16 & 0xff; + res[k + 2] = m >>> 8 & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = m >>> 16 & 0xff; + res[k + 1] = m >>> 8 & 0xff; + res[k] = m & 0xff; + } + } + + return res; +} + +exports.split32 = split32; + +function rotr32(w, b) { + return w >>> b | w << 32 - b; +} + +exports.rotr32 = rotr32; + +function rotl32(w, b) { + return w << b | w >>> 32 - b; +} + +exports.rotl32 = rotl32; + +function sum32(a, b) { + return a + b >>> 0; +} + +exports.sum32 = sum32; + +function sum32_3(a, b, c) { + return a + b + c >>> 0; +} + +exports.sum32_3 = sum32_3; + +function sum32_4(a, b, c, d) { + return a + b + c + d >>> 0; +} + +exports.sum32_4 = sum32_4; + +function sum32_5(a, b, c, d, e) { + return a + b + c + d + e >>> 0; +} + +exports.sum32_5 = sum32_5; + +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; + var lo = al + bl >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} + +exports.sum64 = sum64; + +function sum64_hi(ah, al, bh, bl) { + var lo = al + bl >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} + +exports.sum64_hi = sum64_hi; + +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} + +exports.sum64_lo = sum64_lo; + +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = lo + bl >>> 0; + carry += lo < al ? 1 : 0; + lo = lo + cl >>> 0; + carry += lo < cl ? 1 : 0; + lo = lo + dl >>> 0; + carry += lo < dl ? 1 : 0; + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} + +exports.sum64_4_hi = sum64_4_hi; + +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} + +exports.sum64_4_lo = sum64_4_lo; + +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = lo + bl >>> 0; + carry += lo < al ? 1 : 0; + lo = lo + cl >>> 0; + carry += lo < cl ? 1 : 0; + lo = lo + dl >>> 0; + carry += lo < dl ? 1 : 0; + lo = lo + el >>> 0; + carry += lo < el ? 1 : 0; + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; +} + +exports.sum64_5_hi = sum64_5_hi; + +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; + return lo >>> 0; +} + +exports.sum64_5_lo = sum64_5_lo; + +function rotr64_hi(ah, al, num) { + var r = al << 32 - num | ah >>> num; + return r >>> 0; +} + +exports.rotr64_hi = rotr64_hi; + +function rotr64_lo(ah, al, num) { + var r = ah << 32 - num | al >>> num; + return r >>> 0; +} + +exports.rotr64_lo = rotr64_lo; + +function shr64_hi(ah, al, num) { + return ah >>> num; +} + +exports.shr64_hi = shr64_hi; + +function shr64_lo(ah, al, num) { + var r = ah << 32 - num | al >>> num; + return r >>> 0; +} + +exports.shr64_lo = shr64_lo; + +/***/ }), + +/***/ "./node_modules/hmac-drbg/lib/hmac-drbg.js": +/*!*************************************************!*\ + !*** ./node_modules/hmac-drbg/lib/hmac-drbg.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var hash = __webpack_require__(/*! hash.js */ "./node_modules/hash.js/lib/hash.js"); + +var utils = __webpack_require__(/*! minimalistic-crypto-utils */ "./node_modules/minimalistic-crypto-utils/lib/utils.js"); + +var assert = __webpack_require__(/*! minimalistic-assert */ "./node_modules/minimalistic-assert/index.js"); + +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + + this._init(entropy, nonce, pers); +} + +module.exports = HmacDRBG; + +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + + this._update(seed); + + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 +}; + +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; + +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac().update(this.V).update([0x00]); + + if (seed) kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) return; + this.K = this._hmac().update(this.V).update([0x01]).update(seed).digest(); + this.V = this._hmac().update(this.V).digest(); +}; + +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); + assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + + this._update(entropy.concat(add || [])); + + this._reseed = 1; +}; + +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) throw new Error('Reseed is required'); // Optional encoding + + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } // Optional additional data + + + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + + this._update(add); + } + + var temp = []; + + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + + var res = temp.slice(0, len); + + this._update(add); + + this._reseed++; + return utils.encode(res, enc); +}; + +/***/ }), + +/***/ "./node_modules/inherits/inherits_browser.js": +/*!***************************************************!*\ + !*** ./node_modules/inherits/inherits_browser.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + + var TempCtor = function TempCtor() {}; + + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + }; +} + +/***/ }), + +/***/ "./node_modules/libsodium-wrappers/dist/modules/libsodium-wrappers.js": +/*!****************************************************************************!*\ + !*** ./node_modules/libsodium-wrappers/dist/modules/libsodium-wrappers.js ***! + \****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +!function (e) { + function t(e, t) { + "use strict"; + + var r, + a = "uint8array", + _ = t.ready.then(function () { + function a() { + if (0 !== r._sodium_init()) throw new Error("libsodium was not correctly initialized."); + + for (var t = ["crypto_aead_chacha20poly1305_decrypt", "crypto_aead_chacha20poly1305_decrypt_detached", "crypto_aead_chacha20poly1305_encrypt", "crypto_aead_chacha20poly1305_encrypt_detached", "crypto_aead_chacha20poly1305_ietf_decrypt", "crypto_aead_chacha20poly1305_ietf_decrypt_detached", "crypto_aead_chacha20poly1305_ietf_encrypt", "crypto_aead_chacha20poly1305_ietf_encrypt_detached", "crypto_aead_chacha20poly1305_ietf_keygen", "crypto_aead_chacha20poly1305_keygen", "crypto_aead_xchacha20poly1305_ietf_decrypt", "crypto_aead_xchacha20poly1305_ietf_decrypt_detached", "crypto_aead_xchacha20poly1305_ietf_encrypt", "crypto_aead_xchacha20poly1305_ietf_encrypt_detached", "crypto_aead_xchacha20poly1305_ietf_keygen", "crypto_auth", "crypto_auth_hmacsha256", "crypto_auth_hmacsha256_keygen", "crypto_auth_hmacsha256_verify", "crypto_auth_hmacsha512", "crypto_auth_hmacsha512_keygen", "crypto_auth_hmacsha512_verify", "crypto_auth_keygen", "crypto_auth_verify", "crypto_box_beforenm", "crypto_box_curve25519xchacha20poly1305_keypair", "crypto_box_curve25519xchacha20poly1305_seal", "crypto_box_curve25519xchacha20poly1305_seal_open", "crypto_box_detached", "crypto_box_easy", "crypto_box_easy_afternm", "crypto_box_keypair", "crypto_box_open_detached", "crypto_box_open_easy", "crypto_box_open_easy_afternm", "crypto_box_seal", "crypto_box_seal_open", "crypto_box_seed_keypair", "crypto_core_ristretto255_add", "crypto_core_ristretto255_from_hash", "crypto_core_ristretto255_is_valid_point", "crypto_core_ristretto255_random", "crypto_core_ristretto255_scalar_add", "crypto_core_ristretto255_scalar_complement", "crypto_core_ristretto255_scalar_invert", "crypto_core_ristretto255_scalar_mul", "crypto_core_ristretto255_scalar_negate", "crypto_core_ristretto255_scalar_random", "crypto_core_ristretto255_scalar_reduce", "crypto_core_ristretto255_scalar_sub", "crypto_core_ristretto255_sub", "crypto_generichash", "crypto_generichash_blake2b_salt_personal", "crypto_generichash_final", "crypto_generichash_init", "crypto_generichash_keygen", "crypto_generichash_update", "crypto_hash", "crypto_hash_sha256", "crypto_hash_sha512", "crypto_kdf_derive_from_key", "crypto_kdf_keygen", "crypto_kx_client_session_keys", "crypto_kx_keypair", "crypto_kx_seed_keypair", "crypto_kx_server_session_keys", "crypto_onetimeauth", "crypto_onetimeauth_final", "crypto_onetimeauth_init", "crypto_onetimeauth_keygen", "crypto_onetimeauth_update", "crypto_onetimeauth_verify", "crypto_pwhash", "crypto_pwhash_scryptsalsa208sha256", "crypto_pwhash_scryptsalsa208sha256_ll", "crypto_pwhash_scryptsalsa208sha256_str", "crypto_pwhash_scryptsalsa208sha256_str_verify", "crypto_pwhash_str", "crypto_pwhash_str_verify", "crypto_scalarmult", "crypto_scalarmult_base", "crypto_scalarmult_ristretto255", "crypto_scalarmult_ristretto255_base", "crypto_secretbox_detached", "crypto_secretbox_easy", "crypto_secretbox_keygen", "crypto_secretbox_open_detached", "crypto_secretbox_open_easy", "crypto_secretstream_xchacha20poly1305_init_pull", "crypto_secretstream_xchacha20poly1305_init_push", "crypto_secretstream_xchacha20poly1305_keygen", "crypto_secretstream_xchacha20poly1305_pull", "crypto_secretstream_xchacha20poly1305_push", "crypto_secretstream_xchacha20poly1305_rekey", "crypto_shorthash", "crypto_shorthash_keygen", "crypto_shorthash_siphashx24", "crypto_sign", "crypto_sign_detached", "crypto_sign_ed25519_pk_to_curve25519", "crypto_sign_ed25519_sk_to_curve25519", "crypto_sign_ed25519_sk_to_pk", "crypto_sign_ed25519_sk_to_seed", "crypto_sign_final_create", "crypto_sign_final_verify", "crypto_sign_init", "crypto_sign_keypair", "crypto_sign_open", "crypto_sign_seed_keypair", "crypto_sign_update", "crypto_sign_verify_detached", "crypto_stream_chacha20", "crypto_stream_chacha20_ietf_xor", "crypto_stream_chacha20_ietf_xor_ic", "crypto_stream_chacha20_keygen", "crypto_stream_chacha20_xor", "crypto_stream_chacha20_xor_ic", "crypto_stream_keygen", "crypto_stream_xchacha20_keygen", "crypto_stream_xchacha20_xor", "crypto_stream_xchacha20_xor_ic", "randombytes_buf", "randombytes_buf_deterministic", "randombytes_close", "randombytes_random", "randombytes_set_implementation", "randombytes_stir", "randombytes_uniform", "sodium_version_string"], a = [x, E, w, S, T, Y, A, B, K, I, M, L, N, U, O, R, P, C, G, D, X, V, F, H, z, j, q, W, J, Q, Z, $, ee, te, re, ae, _e, ne, se, ce, he, oe, pe, ye, ie, le, ue, ve, de, ge, be, fe, me, ke, xe, Ee, we, Se, Te, Ye, Ae, Be, Ke, Ie, Me, Le, Ne, Ue, Oe, Re, Pe, Ce, Ge, De, Xe, Ve, Fe, He, ze, je, qe, We, Je, Qe, Ze, $e, et, tt, rt, at, _t, nt, st, ct, ht, ot, pt, yt, it, lt, ut, vt, dt, gt, bt, ft, mt, kt, xt, Et, wt, St, Tt, Yt, At, Bt, Kt, It, Mt, Lt, Nt, Ut, Ot, Rt, Pt, Ct, Gt, Dt, Xt], _ = 0; _ < a.length; _++) { + "function" == typeof r["_" + t[_]] && (e[t[_]] = a[_]); + } + + var n = ["SODIUM_LIBRARY_VERSION_MAJOR", "SODIUM_LIBRARY_VERSION_MINOR", "crypto_aead_chacha20poly1305_ABYTES", "crypto_aead_chacha20poly1305_KEYBYTES", "crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX", "crypto_aead_chacha20poly1305_NPUBBYTES", "crypto_aead_chacha20poly1305_NSECBYTES", "crypto_aead_chacha20poly1305_ietf_ABYTES", "crypto_aead_chacha20poly1305_ietf_KEYBYTES", "crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX", "crypto_aead_chacha20poly1305_ietf_NPUBBYTES", "crypto_aead_chacha20poly1305_ietf_NSECBYTES", "crypto_aead_xchacha20poly1305_ietf_ABYTES", "crypto_aead_xchacha20poly1305_ietf_KEYBYTES", "crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX", "crypto_aead_xchacha20poly1305_ietf_NPUBBYTES", "crypto_aead_xchacha20poly1305_ietf_NSECBYTES", "crypto_auth_BYTES", "crypto_auth_KEYBYTES", "crypto_auth_hmacsha256_BYTES", "crypto_auth_hmacsha256_KEYBYTES", "crypto_auth_hmacsha512_BYTES", "crypto_auth_hmacsha512_KEYBYTES", "crypto_box_BEFORENMBYTES", "crypto_box_MACBYTES", "crypto_box_MESSAGEBYTES_MAX", "crypto_box_NONCEBYTES", "crypto_box_PUBLICKEYBYTES", "crypto_box_SEALBYTES", "crypto_box_SECRETKEYBYTES", "crypto_box_SEEDBYTES", "crypto_box_curve25519xchacha20poly1305_NONCEBYTES", "crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES", "crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES", "crypto_core_hchacha20_CONSTBYTES", "crypto_core_hchacha20_INPUTBYTES", "crypto_core_hchacha20_KEYBYTES", "crypto_core_hchacha20_OUTPUTBYTES", "crypto_core_ristretto255_BYTES", "crypto_core_ristretto255_HASHBYTES", "crypto_core_ristretto255_NONREDUCEDSCALARBYTES", "crypto_core_ristretto255_SCALARBYTES", "crypto_generichash_BYTES", "crypto_generichash_BYTES_MAX", "crypto_generichash_BYTES_MIN", "crypto_generichash_KEYBYTES", "crypto_generichash_KEYBYTES_MAX", "crypto_generichash_KEYBYTES_MIN", "crypto_generichash_blake2b_BYTES", "crypto_generichash_blake2b_BYTES_MAX", "crypto_generichash_blake2b_BYTES_MIN", "crypto_generichash_blake2b_KEYBYTES", "crypto_generichash_blake2b_KEYBYTES_MAX", "crypto_generichash_blake2b_KEYBYTES_MIN", "crypto_generichash_blake2b_PERSONALBYTES", "crypto_generichash_blake2b_SALTBYTES", "crypto_hash_BYTES", "crypto_hash_sha256_BYTES", "crypto_hash_sha512_BYTES", "crypto_kdf_BYTES_MAX", "crypto_kdf_BYTES_MIN", "crypto_kdf_CONTEXTBYTES", "crypto_kdf_KEYBYTES", "crypto_kx_PUBLICKEYBYTES", "crypto_kx_SECRETKEYBYTES", "crypto_kx_SEEDBYTES", "crypto_kx_SESSIONKEYBYTES", "crypto_onetimeauth_BYTES", "crypto_onetimeauth_KEYBYTES", "crypto_pwhash_ALG_ARGON2I13", "crypto_pwhash_ALG_ARGON2ID13", "crypto_pwhash_ALG_DEFAULT", "crypto_pwhash_BYTES_MAX", "crypto_pwhash_BYTES_MIN", "crypto_pwhash_MEMLIMIT_INTERACTIVE", "crypto_pwhash_MEMLIMIT_MAX", "crypto_pwhash_MEMLIMIT_MIN", "crypto_pwhash_MEMLIMIT_MODERATE", "crypto_pwhash_MEMLIMIT_SENSITIVE", "crypto_pwhash_OPSLIMIT_INTERACTIVE", "crypto_pwhash_OPSLIMIT_MAX", "crypto_pwhash_OPSLIMIT_MIN", "crypto_pwhash_OPSLIMIT_MODERATE", "crypto_pwhash_OPSLIMIT_SENSITIVE", "crypto_pwhash_PASSWD_MAX", "crypto_pwhash_PASSWD_MIN", "crypto_pwhash_SALTBYTES", "crypto_pwhash_STRBYTES", "crypto_pwhash_STR_VERIFY", "crypto_pwhash_scryptsalsa208sha256_BYTES_MAX", "crypto_pwhash_scryptsalsa208sha256_BYTES_MIN", "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE", "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX", "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN", "crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE", "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE", "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX", "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN", "crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE", "crypto_pwhash_scryptsalsa208sha256_SALTBYTES", "crypto_pwhash_scryptsalsa208sha256_STRBYTES", "crypto_pwhash_scryptsalsa208sha256_STR_VERIFY", "crypto_scalarmult_BYTES", "crypto_scalarmult_SCALARBYTES", "crypto_scalarmult_ristretto255_BYTES", "crypto_scalarmult_ristretto255_SCALARBYTES", "crypto_secretbox_KEYBYTES", "crypto_secretbox_MACBYTES", "crypto_secretbox_MESSAGEBYTES_MAX", "crypto_secretbox_NONCEBYTES", "crypto_secretstream_xchacha20poly1305_ABYTES", "crypto_secretstream_xchacha20poly1305_HEADERBYTES", "crypto_secretstream_xchacha20poly1305_KEYBYTES", "crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX", "crypto_secretstream_xchacha20poly1305_MESSAGESBYTES_MAX", "crypto_secretstream_xchacha20poly1305_NPUBBYTES", "crypto_secretstream_xchacha20poly1305_TAG_FINAL", "crypto_secretstream_xchacha20poly1305_TAG_MESSAGE", "crypto_secretstream_xchacha20poly1305_TAG_PUSH", "crypto_secretstream_xchacha20poly1305_TAG_REKEY", "crypto_shorthash_BYTES", "crypto_shorthash_KEYBYTES", "crypto_shorthash_siphashx24_BYTES", "crypto_shorthash_siphashx24_KEYBYTES", "crypto_sign_BYTES", "crypto_sign_MESSAGEBYTES_MAX", "crypto_sign_PUBLICKEYBYTES", "crypto_sign_SECRETKEYBYTES", "crypto_sign_SEEDBYTES", "crypto_stream_KEYBYTES", "crypto_stream_MESSAGEBYTES_MAX", "crypto_stream_NONCEBYTES", "crypto_stream_chacha20_KEYBYTES", "crypto_stream_chacha20_NONCEBYTES", "crypto_stream_chacha20_ietf_KEYBYTES", "crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX", "crypto_stream_chacha20_ietf_NONCEBYTES", "crypto_stream_xchacha20_KEYBYTES", "crypto_stream_xchacha20_MESSAGEBYTES_MAX", "crypto_stream_xchacha20_NONCEBYTES", "randombytes_SEEDBYTES"]; + + for (_ = 0; _ < n.length; _++) { + "function" == typeof (c = r["_" + n[_].toLowerCase()]) && (e[n[_]] = c()); + } + + var s = ["SODIUM_VERSION_STRING", "crypto_pwhash_STRPREFIX", "crypto_pwhash_scryptsalsa208sha256_STRPREFIX"]; + + for (_ = 0; _ < s.length; _++) { + var c; + "function" == typeof (c = r["_" + s[_].toLowerCase()]) && (e[s[_]] = r.UTF8ToString(c())); + } + } + + r = t; + + try { + a(); + + var _ = new Uint8Array([98, 97, 108, 108, 115]), + n = e.randombytes_buf(e.crypto_secretbox_NONCEBYTES), + s = e.randombytes_buf(e.crypto_secretbox_KEYBYTES), + c = e.crypto_secretbox_easy(_, n, s), + h = e.crypto_secretbox_open_easy(c, n, s); + + if (e.memcmp(_, h)) return; + } catch (e) { + if (null == r.useBackupModule) throw new Error("Both wasm and asm failed to load" + e); + } + + r.useBackupModule(), a(); + }); + + function n(e) { + if ("function" == typeof TextEncoder) return new TextEncoder().encode(e); + e = unescape(encodeURIComponent(e)); + + for (var t = new Uint8Array(e.length), r = 0, a = e.length; r < a; r++) { + t[r] = e.charCodeAt(r); + } + + return t; + } + + function s(e) { + if ("function" == typeof TextDecoder) return new TextDecoder("utf-8", { + fatal: !0 + }).decode(e); + var t = Math.ceil(e.length / 8192); + if (t <= 1) try { + return decodeURIComponent(escape(String.fromCharCode.apply(null, e))); + } catch (e) { + throw new TypeError("The encoded data was not valid."); + } + + for (var r = "", a = 0, _ = 0; _ < t; _++) { + var n = Array.prototype.slice.call(e, 8192 * _ + a, 8192 * (_ + 1) + a); + + if (0 != n.length) { + var c, + h = n.length, + o = 0; + + do { + var p = n[--h]; + p >= 240 ? (o = 4, c = !0) : p >= 224 ? (o = 3, c = !0) : p >= 192 ? (o = 2, c = !0) : p < 128 && (o = 1, c = !0); + } while (!c); + + for (var y = o - (n.length - h), i = 0; i < y; i++) { + a--, n.pop(); + } + + r += s(n); + } + } + + return r; + } + + function c(e) { + e = k(null, e, "input"); + + for (var t, r, a, _ = "", n = 0; n < e.length; n++) { + a = 87 + (r = 15 & e[n]) + (r - 10 >> 8 & -39) << 8 | 87 + (t = e[n] >>> 4) + (t - 10 >> 8 & -39), _ += String.fromCharCode(255 & a) + String.fromCharCode(a >>> 8); + } + + return _; + } + + var h = { + ORIGINAL: 1, + ORIGINAL_NO_PADDING: 3, + URLSAFE: 5, + URLSAFE_NO_PADDING: 7 + }; + + function o(e) { + if (null == e) return h.URLSAFE_NO_PADDING; + if (e !== h.ORIGINAL && e !== h.ORIGINAL_NO_PADDING && e !== h.URLSAFE && e != h.URLSAFE_NO_PADDING) throw new Error("unsupported base64 variant"); + return e; + } + + function p(e, t) { + t = o(t), e = k(_, e, "input"); + var a, + _ = [], + n = 0 | Math.floor(e.length / 3), + c = e.length - 3 * n, + h = 4 * n + (0 !== c ? 0 == (2 & t) ? 4 : 2 + (c >>> 1) : 0), + p = new u(h + 1), + y = v(e); + return _.push(y), _.push(p.address), 0 === r._sodium_bin2base64(p.address, p.length, y, e.length, t) && b(_, "conversion failed"), p.length = h, a = s(p.to_Uint8Array()), g(_), a; + } + + function y(e, t) { + var r = t || a; + if (!i(r)) throw new Error(r + " output format is not available"); + + if (e instanceof u) { + if ("uint8array" === r) return e.to_Uint8Array(); + if ("text" === r) return s(e.to_Uint8Array()); + if ("hex" === r) return c(e.to_Uint8Array()); + if ("base64" === r) return p(e.to_Uint8Array(), h.URLSAFE_NO_PADDING); + throw new Error('What is output format "' + r + '"?'); + } + + if ("object" == _typeof(e)) { + for (var _ = Object.keys(e), n = {}, o = 0; o < _.length; o++) { + n[_[o]] = y(e[_[o]], r); + } + + return n; + } + + if ("string" == typeof e) return e; + throw new TypeError("Cannot format output"); + } + + function i(e) { + for (var t = ["uint8array", "text", "hex", "base64"], r = 0; r < t.length; r++) { + if (t[r] === e) return !0; + } + + return !1; + } + + function l(e) { + if (e) { + if ("string" != typeof e) throw new TypeError("When defined, the output format must be a string"); + if (!i(e)) throw new Error(e + " is not a supported output format"); + } + } + + function u(e) { + this.length = e, this.address = d(e); + } + + function v(e) { + var t = d(e.length); + return r.HEAPU8.set(e, t), t; + } + + function d(e) { + var t = r._malloc(e); + + if (0 === t) throw { + message: "_malloc() failed", + length: e + }; + return t; + } + + function g(e) { + if (e) for (var t = 0; t < e.length; t++) { + a = e[t], r._free(a); + } + var a; + } + + function b(e, t) { + throw g(e), new Error(t); + } + + function f(e, t) { + throw g(e), new TypeError(t); + } + + function m(e, t, r) { + null == t && f(e, r + " cannot be null or undefined"); + } + + function k(e, t, r) { + return m(e, t, r), t instanceof Uint8Array ? t : "string" == typeof t ? n(t) : void f(e, "unsupported input type for " + r); + } + + function x(e, t, a, _, n, s) { + var c = []; + l(s); + var h = null; + null != e && (h = v(e = k(c, e, "secret_nonce")), e.length, c.push(h)), t = k(c, t, "ciphertext"); + + var o, + p = r._crypto_aead_chacha20poly1305_abytes(), + i = t.length; + + i < p && f(c, "ciphertext is too short"), o = v(t), c.push(o); + var d = null, + m = 0; + null != a && (d = v(a = k(c, a, "additional_data")), m = a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var x, + E = 0 | r._crypto_aead_chacha20poly1305_npubbytes(); + + _.length !== E && f(c, "invalid public_nonce length"), x = v(_), c.push(x), n = k(c, n, "key"); + + var w, + S = 0 | r._crypto_aead_chacha20poly1305_keybytes(); + + n.length !== S && f(c, "invalid key length"), w = v(n), c.push(w); + var T = new u(i - r._crypto_aead_chacha20poly1305_abytes() | 0), + Y = T.address; + + if (c.push(Y), 0 === r._crypto_aead_chacha20poly1305_decrypt(Y, null, h, o, i, 0, d, m, 0, x, w)) { + var A = y(T, s); + return g(c), A; + } + + b(c, "ciphertext cannot be decrypted using that key"); + } + + function E(e, t, a, _, n, s, c) { + var h = []; + l(c); + var o = null; + null != e && (o = v(e = k(h, e, "secret_nonce")), e.length, h.push(o)); + var p = v(t = k(h, t, "ciphertext")), + i = t.length; + h.push(p), a = k(h, a, "mac"); + + var d, + m = 0 | r._crypto_box_macbytes(); + + a.length !== m && f(h, "invalid mac length"), d = v(a), h.push(d); + var x = null, + E = 0; + null != _ && (x = v(_ = k(h, _, "additional_data")), E = _.length, h.push(x)), n = k(h, n, "public_nonce"); + + var w, + S = 0 | r._crypto_aead_chacha20poly1305_npubbytes(); + + n.length !== S && f(h, "invalid public_nonce length"), w = v(n), h.push(w), s = k(h, s, "key"); + + var T, + Y = 0 | r._crypto_aead_chacha20poly1305_keybytes(); + + s.length !== Y && f(h, "invalid key length"), T = v(s), h.push(T); + var A = new u(0 | i), + B = A.address; + + if (h.push(B), 0 === r._crypto_aead_chacha20poly1305_decrypt_detached(B, o, p, i, 0, d, x, E, 0, w, T)) { + var K = y(A, c); + return g(h), K; + } + + b(h, "ciphertext cannot be decrypted using that key"); + } + + function w(e, t, a, _, n, s) { + var c = []; + l(s); + var h = v(e = k(c, e, "message")), + o = e.length; + c.push(h); + var p = null, + i = 0; + null != t && (p = v(t = k(c, t, "additional_data")), i = t.length, c.push(p)); + var d = null; + null != a && (d = v(a = k(c, a, "secret_nonce")), a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var m, + x = 0 | r._crypto_aead_chacha20poly1305_npubbytes(); + + _.length !== x && f(c, "invalid public_nonce length"), m = v(_), c.push(m), n = k(c, n, "key"); + + var E, + w = 0 | r._crypto_aead_chacha20poly1305_keybytes(); + + n.length !== w && f(c, "invalid key length"), E = v(n), c.push(E); + var S = new u(o + r._crypto_aead_chacha20poly1305_abytes() | 0), + T = S.address; + + if (c.push(T), 0 === r._crypto_aead_chacha20poly1305_encrypt(T, null, h, o, 0, p, i, 0, d, m, E)) { + var Y = y(S, s); + return g(c), Y; + } + + b(c, "invalid usage"); + } + + function S(e, t, a, _, n, s) { + var c = []; + l(s); + var h = v(e = k(c, e, "message")), + o = e.length; + c.push(h); + var p = null, + i = 0; + null != t && (p = v(t = k(c, t, "additional_data")), i = t.length, c.push(p)); + var d = null; + null != a && (d = v(a = k(c, a, "secret_nonce")), a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var m, + x = 0 | r._crypto_aead_chacha20poly1305_npubbytes(); + + _.length !== x && f(c, "invalid public_nonce length"), m = v(_), c.push(m), n = k(c, n, "key"); + + var E, + w = 0 | r._crypto_aead_chacha20poly1305_keybytes(); + + n.length !== w && f(c, "invalid key length"), E = v(n), c.push(E); + var S = new u(0 | o), + T = S.address; + c.push(T); + var Y = new u(0 | r._crypto_aead_chacha20poly1305_abytes()), + A = Y.address; + + if (c.push(A), 0 === r._crypto_aead_chacha20poly1305_encrypt_detached(T, A, null, h, o, 0, p, i, 0, d, m, E)) { + var B = y({ + ciphertext: S, + mac: Y + }, s); + return g(c), B; + } + + b(c, "invalid usage"); + } + + function T(e, t, a, _, n, s) { + var c = []; + l(s); + var h = null; + null != e && (h = v(e = k(c, e, "secret_nonce")), e.length, c.push(h)), t = k(c, t, "ciphertext"); + + var o, + p = r._crypto_aead_chacha20poly1305_ietf_abytes(), + i = t.length; + + i < p && f(c, "ciphertext is too short"), o = v(t), c.push(o); + var d = null, + m = 0; + null != a && (d = v(a = k(c, a, "additional_data")), m = a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var x, + E = 0 | r._crypto_aead_chacha20poly1305_ietf_npubbytes(); + + _.length !== E && f(c, "invalid public_nonce length"), x = v(_), c.push(x), n = k(c, n, "key"); + + var w, + S = 0 | r._crypto_aead_chacha20poly1305_ietf_keybytes(); + + n.length !== S && f(c, "invalid key length"), w = v(n), c.push(w); + var T = new u(i - r._crypto_aead_chacha20poly1305_ietf_abytes() | 0), + Y = T.address; + + if (c.push(Y), 0 === r._crypto_aead_chacha20poly1305_ietf_decrypt(Y, null, h, o, i, 0, d, m, 0, x, w)) { + var A = y(T, s); + return g(c), A; + } + + b(c, "ciphertext cannot be decrypted using that key"); + } + + function Y(e, t, a, _, n, s, c) { + var h = []; + l(c); + var o = null; + null != e && (o = v(e = k(h, e, "secret_nonce")), e.length, h.push(o)); + var p = v(t = k(h, t, "ciphertext")), + i = t.length; + h.push(p), a = k(h, a, "mac"); + + var d, + m = 0 | r._crypto_box_macbytes(); + + a.length !== m && f(h, "invalid mac length"), d = v(a), h.push(d); + var x = null, + E = 0; + null != _ && (x = v(_ = k(h, _, "additional_data")), E = _.length, h.push(x)), n = k(h, n, "public_nonce"); + + var w, + S = 0 | r._crypto_aead_chacha20poly1305_ietf_npubbytes(); + + n.length !== S && f(h, "invalid public_nonce length"), w = v(n), h.push(w), s = k(h, s, "key"); + + var T, + Y = 0 | r._crypto_aead_chacha20poly1305_ietf_keybytes(); + + s.length !== Y && f(h, "invalid key length"), T = v(s), h.push(T); + var A = new u(0 | i), + B = A.address; + + if (h.push(B), 0 === r._crypto_aead_chacha20poly1305_ietf_decrypt_detached(B, o, p, i, 0, d, x, E, 0, w, T)) { + var K = y(A, c); + return g(h), K; + } + + b(h, "ciphertext cannot be decrypted using that key"); + } + + function A(e, t, a, _, n, s) { + var c = []; + l(s); + var h = v(e = k(c, e, "message")), + o = e.length; + c.push(h); + var p = null, + i = 0; + null != t && (p = v(t = k(c, t, "additional_data")), i = t.length, c.push(p)); + var d = null; + null != a && (d = v(a = k(c, a, "secret_nonce")), a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var m, + x = 0 | r._crypto_aead_chacha20poly1305_ietf_npubbytes(); + + _.length !== x && f(c, "invalid public_nonce length"), m = v(_), c.push(m), n = k(c, n, "key"); + + var E, + w = 0 | r._crypto_aead_chacha20poly1305_ietf_keybytes(); + + n.length !== w && f(c, "invalid key length"), E = v(n), c.push(E); + var S = new u(o + r._crypto_aead_chacha20poly1305_ietf_abytes() | 0), + T = S.address; + + if (c.push(T), 0 === r._crypto_aead_chacha20poly1305_ietf_encrypt(T, null, h, o, 0, p, i, 0, d, m, E)) { + var Y = y(S, s); + return g(c), Y; + } + + b(c, "invalid usage"); + } + + function B(e, t, a, _, n, s) { + var c = []; + l(s); + var h = v(e = k(c, e, "message")), + o = e.length; + c.push(h); + var p = null, + i = 0; + null != t && (p = v(t = k(c, t, "additional_data")), i = t.length, c.push(p)); + var d = null; + null != a && (d = v(a = k(c, a, "secret_nonce")), a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var m, + x = 0 | r._crypto_aead_chacha20poly1305_ietf_npubbytes(); + + _.length !== x && f(c, "invalid public_nonce length"), m = v(_), c.push(m), n = k(c, n, "key"); + + var E, + w = 0 | r._crypto_aead_chacha20poly1305_ietf_keybytes(); + + n.length !== w && f(c, "invalid key length"), E = v(n), c.push(E); + var S = new u(0 | o), + T = S.address; + c.push(T); + var Y = new u(0 | r._crypto_aead_chacha20poly1305_ietf_abytes()), + A = Y.address; + + if (c.push(A), 0 === r._crypto_aead_chacha20poly1305_ietf_encrypt_detached(T, A, null, h, o, 0, p, i, 0, d, m, E)) { + var B = y({ + ciphertext: S, + mac: Y + }, s); + return g(c), B; + } + + b(c, "invalid usage"); + } + + function K(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_aead_chacha20poly1305_ietf_keybytes()), + _ = a.address; + t.push(_), r._crypto_aead_chacha20poly1305_ietf_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function I(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_aead_chacha20poly1305_keybytes()), + _ = a.address; + t.push(_), r._crypto_aead_chacha20poly1305_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function M(e, t, a, _, n, s) { + var c = []; + l(s); + var h = null; + null != e && (h = v(e = k(c, e, "secret_nonce")), e.length, c.push(h)), t = k(c, t, "ciphertext"); + + var o, + p = r._crypto_aead_xchacha20poly1305_ietf_abytes(), + i = t.length; + + i < p && f(c, "ciphertext is too short"), o = v(t), c.push(o); + var d = null, + m = 0; + null != a && (d = v(a = k(c, a, "additional_data")), m = a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var x, + E = 0 | r._crypto_aead_xchacha20poly1305_ietf_npubbytes(); + + _.length !== E && f(c, "invalid public_nonce length"), x = v(_), c.push(x), n = k(c, n, "key"); + + var w, + S = 0 | r._crypto_aead_xchacha20poly1305_ietf_keybytes(); + + n.length !== S && f(c, "invalid key length"), w = v(n), c.push(w); + var T = new u(i - r._crypto_aead_xchacha20poly1305_ietf_abytes() | 0), + Y = T.address; + + if (c.push(Y), 0 === r._crypto_aead_xchacha20poly1305_ietf_decrypt(Y, null, h, o, i, 0, d, m, 0, x, w)) { + var A = y(T, s); + return g(c), A; + } + + b(c, "ciphertext cannot be decrypted using that key"); + } + + function L(e, t, a, _, n, s, c) { + var h = []; + l(c); + var o = null; + null != e && (o = v(e = k(h, e, "secret_nonce")), e.length, h.push(o)); + var p = v(t = k(h, t, "ciphertext")), + i = t.length; + h.push(p), a = k(h, a, "mac"); + + var d, + m = 0 | r._crypto_box_macbytes(); + + a.length !== m && f(h, "invalid mac length"), d = v(a), h.push(d); + var x = null, + E = 0; + null != _ && (x = v(_ = k(h, _, "additional_data")), E = _.length, h.push(x)), n = k(h, n, "public_nonce"); + + var w, + S = 0 | r._crypto_aead_xchacha20poly1305_ietf_npubbytes(); + + n.length !== S && f(h, "invalid public_nonce length"), w = v(n), h.push(w), s = k(h, s, "key"); + + var T, + Y = 0 | r._crypto_aead_xchacha20poly1305_ietf_keybytes(); + + s.length !== Y && f(h, "invalid key length"), T = v(s), h.push(T); + var A = new u(0 | i), + B = A.address; + + if (h.push(B), 0 === r._crypto_aead_xchacha20poly1305_ietf_decrypt_detached(B, o, p, i, 0, d, x, E, 0, w, T)) { + var K = y(A, c); + return g(h), K; + } + + b(h, "ciphertext cannot be decrypted using that key"); + } + + function N(e, t, a, _, n, s) { + var c = []; + l(s); + var h = v(e = k(c, e, "message")), + o = e.length; + c.push(h); + var p = null, + i = 0; + null != t && (p = v(t = k(c, t, "additional_data")), i = t.length, c.push(p)); + var d = null; + null != a && (d = v(a = k(c, a, "secret_nonce")), a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var m, + x = 0 | r._crypto_aead_xchacha20poly1305_ietf_npubbytes(); + + _.length !== x && f(c, "invalid public_nonce length"), m = v(_), c.push(m), n = k(c, n, "key"); + + var E, + w = 0 | r._crypto_aead_xchacha20poly1305_ietf_keybytes(); + + n.length !== w && f(c, "invalid key length"), E = v(n), c.push(E); + var S = new u(o + r._crypto_aead_xchacha20poly1305_ietf_abytes() | 0), + T = S.address; + + if (c.push(T), 0 === r._crypto_aead_xchacha20poly1305_ietf_encrypt(T, null, h, o, 0, p, i, 0, d, m, E)) { + var Y = y(S, s); + return g(c), Y; + } + + b(c, "invalid usage"); + } + + function U(e, t, a, _, n, s) { + var c = []; + l(s); + var h = v(e = k(c, e, "message")), + o = e.length; + c.push(h); + var p = null, + i = 0; + null != t && (p = v(t = k(c, t, "additional_data")), i = t.length, c.push(p)); + var d = null; + null != a && (d = v(a = k(c, a, "secret_nonce")), a.length, c.push(d)), _ = k(c, _, "public_nonce"); + + var m, + x = 0 | r._crypto_aead_xchacha20poly1305_ietf_npubbytes(); + + _.length !== x && f(c, "invalid public_nonce length"), m = v(_), c.push(m), n = k(c, n, "key"); + + var E, + w = 0 | r._crypto_aead_xchacha20poly1305_ietf_keybytes(); + + n.length !== w && f(c, "invalid key length"), E = v(n), c.push(E); + var S = new u(0 | o), + T = S.address; + c.push(T); + var Y = new u(0 | r._crypto_aead_xchacha20poly1305_ietf_abytes()), + A = Y.address; + + if (c.push(A), 0 === r._crypto_aead_xchacha20poly1305_ietf_encrypt_detached(T, A, null, h, o, 0, p, i, 0, d, m, E)) { + var B = y({ + ciphertext: S, + mac: Y + }, s); + return g(c), B; + } + + b(c, "invalid usage"); + } + + function O(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_aead_xchacha20poly1305_ietf_keybytes()), + _ = a.address; + t.push(_), r._crypto_aead_xchacha20poly1305_ietf_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function R(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "key"); + + var c, + h = 0 | r._crypto_auth_keybytes(); + + t.length !== h && f(_, "invalid key length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_auth_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_auth(p, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function P(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "key"); + + var c, + h = 0 | r._crypto_auth_hmacsha256_keybytes(); + + t.length !== h && f(_, "invalid key length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_auth_hmacsha256_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_auth_hmacsha256(p, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function C(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_auth_hmacsha256_keybytes()), + _ = a.address; + t.push(_), r._crypto_auth_hmacsha256_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function G(e, t, a) { + var _ = []; + e = k(_, e, "tag"); + + var n, + s = 0 | r._crypto_auth_hmacsha256_bytes(); + + e.length !== s && f(_, "invalid tag length"), n = v(e), _.push(n); + var c = v(t = k(_, t, "message")), + h = t.length; + _.push(c), a = k(_, a, "key"); + + var o, + p = 0 | r._crypto_auth_hmacsha256_keybytes(); + + a.length !== p && f(_, "invalid key length"), o = v(a), _.push(o); + + var y = 0 == (0 | r._crypto_auth_hmacsha256_verify(n, c, h, 0, o)); + + return g(_), y; + } + + function D(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "key"); + + var c, + h = 0 | r._crypto_auth_hmacsha512_keybytes(); + + t.length !== h && f(_, "invalid key length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_auth_hmacsha512_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_auth_hmacsha512(p, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function X(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_auth_hmacsha512_keybytes()), + _ = a.address; + t.push(_), r._crypto_auth_hmacsha512_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function V(e, t, a) { + var _ = []; + e = k(_, e, "tag"); + + var n, + s = 0 | r._crypto_auth_hmacsha512_bytes(); + + e.length !== s && f(_, "invalid tag length"), n = v(e), _.push(n); + var c = v(t = k(_, t, "message")), + h = t.length; + _.push(c), a = k(_, a, "key"); + + var o, + p = 0 | r._crypto_auth_hmacsha512_keybytes(); + + a.length !== p && f(_, "invalid key length"), o = v(a), _.push(o); + + var y = 0 == (0 | r._crypto_auth_hmacsha512_verify(n, c, h, 0, o)); + + return g(_), y; + } + + function F(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_auth_keybytes()), + _ = a.address; + t.push(_), r._crypto_auth_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function H(e, t, a) { + var _ = []; + e = k(_, e, "tag"); + + var n, + s = 0 | r._crypto_auth_bytes(); + + e.length !== s && f(_, "invalid tag length"), n = v(e), _.push(n); + var c = v(t = k(_, t, "message")), + h = t.length; + _.push(c), a = k(_, a, "key"); + + var o, + p = 0 | r._crypto_auth_keybytes(); + + a.length !== p && f(_, "invalid key length"), o = v(a), _.push(o); + + var y = 0 == (0 | r._crypto_auth_verify(n, c, h, 0, o)); + + return g(_), y; + } + + function z(e, t, a) { + var _ = []; + l(a), e = k(_, e, "publicKey"); + + var n, + s = 0 | r._crypto_box_publickeybytes(); + + e.length !== s && f(_, "invalid publicKey length"), n = v(e), _.push(n), t = k(_, t, "privateKey"); + + var c, + h = 0 | r._crypto_box_secretkeybytes(); + + t.length !== h && f(_, "invalid privateKey length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_box_beforenmbytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_box_beforenm(p, n, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function j(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_box_curve25519xchacha20poly1305_publickeybytes()), + _ = a.address; + t.push(_); + var n = new u(0 | r._crypto_box_curve25519xchacha20poly1305_secretkeybytes()), + s = n.address; + t.push(s), r._crypto_box_curve25519xchacha20poly1305_keypair(_, s); + var c = y({ + publicKey: a, + privateKey: n, + keyType: "curve25519" + }, e); + return g(t), c; + } + + function q(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "publicKey"); + + var c, + h = 0 | r._crypto_box_curve25519xchacha20poly1305_publickeybytes(); + + t.length !== h && f(_, "invalid publicKey length"), c = v(t), _.push(c); + var o = new u(s + r._crypto_box_curve25519xchacha20poly1305_sealbytes() | 0), + p = o.address; + _.push(p), r._crypto_box_curve25519xchacha20poly1305_seal(p, n, s, 0, c); + var i = y(o, a); + return g(_), i; + } + + function W(e, t, a, _) { + var n = []; + l(_), e = k(n, e, "ciphertext"); + + var s, + c = r._crypto_box_curve25519xchacha20poly1305_sealbytes(), + h = e.length; + + h < c && f(n, "ciphertext is too short"), s = v(e), n.push(s), t = k(n, t, "publicKey"); + + var o, + p = 0 | r._crypto_box_curve25519xchacha20poly1305_publickeybytes(); + + t.length !== p && f(n, "invalid publicKey length"), o = v(t), n.push(o), a = k(n, a, "secretKey"); + + var i, + d = 0 | r._crypto_box_curve25519xchacha20poly1305_secretkeybytes(); + + a.length !== d && f(n, "invalid secretKey length"), i = v(a), n.push(i); + var b = new u(h - r._crypto_box_curve25519xchacha20poly1305_sealbytes() | 0), + m = b.address; + n.push(m), r._crypto_box_curve25519xchacha20poly1305_seal_open(m, s, h, 0, o, i); + var x = y(b, _); + return g(n), x; + } + + function J(e, t, a, _, n) { + var s = []; + l(n); + var c = v(e = k(s, e, "message")), + h = e.length; + s.push(c), t = k(s, t, "nonce"); + + var o, + p = 0 | r._crypto_box_noncebytes(); + + t.length !== p && f(s, "invalid nonce length"), o = v(t), s.push(o), a = k(s, a, "publicKey"); + + var i, + d = 0 | r._crypto_box_publickeybytes(); + + a.length !== d && f(s, "invalid publicKey length"), i = v(a), s.push(i), _ = k(s, _, "privateKey"); + + var m, + x = 0 | r._crypto_box_secretkeybytes(); + + _.length !== x && f(s, "invalid privateKey length"), m = v(_), s.push(m); + var E = new u(0 | h), + w = E.address; + s.push(w); + var S = new u(0 | r._crypto_box_macbytes()), + T = S.address; + + if (s.push(T), 0 == (0 | r._crypto_box_detached(w, T, c, h, 0, o, i, m))) { + var Y = y({ + ciphertext: E, + mac: S + }, n); + return g(s), Y; + } + + b(s, "invalid usage"); + } + + function Q(e, t, a, _, n) { + var s = []; + l(n); + var c = v(e = k(s, e, "message")), + h = e.length; + s.push(c), t = k(s, t, "nonce"); + + var o, + p = 0 | r._crypto_box_noncebytes(); + + t.length !== p && f(s, "invalid nonce length"), o = v(t), s.push(o), a = k(s, a, "publicKey"); + + var i, + d = 0 | r._crypto_box_publickeybytes(); + + a.length !== d && f(s, "invalid publicKey length"), i = v(a), s.push(i), _ = k(s, _, "privateKey"); + + var m, + x = 0 | r._crypto_box_secretkeybytes(); + + _.length !== x && f(s, "invalid privateKey length"), m = v(_), s.push(m); + var E = new u(h + r._crypto_box_macbytes() | 0), + w = E.address; + + if (s.push(w), 0 == (0 | r._crypto_box_easy(w, c, h, 0, o, i, m))) { + var S = y(E, n); + return g(s), S; + } + + b(s, "invalid usage"); + } + + function Z(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "message")), + c = e.length; + n.push(s), t = k(n, t, "nonce"); + + var h, + o = 0 | r._crypto_box_noncebytes(); + + t.length !== o && f(n, "invalid nonce length"), h = v(t), n.push(h), a = k(n, a, "sharedKey"); + + var p, + i = 0 | r._crypto_box_beforenmbytes(); + + a.length !== i && f(n, "invalid sharedKey length"), p = v(a), n.push(p); + var d = new u(c + r._crypto_box_macbytes() | 0), + m = d.address; + + if (n.push(m), 0 == (0 | r._crypto_box_easy_afternm(m, s, c, 0, h, p))) { + var x = y(d, _); + return g(n), x; + } + + b(n, "invalid usage"); + } + + function $(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_box_publickeybytes()), + _ = a.address; + t.push(_); + var n = new u(0 | r._crypto_box_secretkeybytes()), + s = n.address; + + if (t.push(s), 0 == (0 | r._crypto_box_keypair(_, s))) { + var c = { + publicKey: y(a, e), + privateKey: y(n, e), + keyType: "x25519" + }; + return g(t), c; + } + + b(t, "internal error"); + } + + function ee(e, t, a, _, n, s) { + var c = []; + l(s); + var h = v(e = k(c, e, "ciphertext")), + o = e.length; + c.push(h), t = k(c, t, "mac"); + + var p, + i = 0 | r._crypto_box_macbytes(); + + t.length !== i && f(c, "invalid mac length"), p = v(t), c.push(p), a = k(c, a, "nonce"); + + var d, + m = 0 | r._crypto_box_noncebytes(); + + a.length !== m && f(c, "invalid nonce length"), d = v(a), c.push(d), _ = k(c, _, "publicKey"); + + var x, + E = 0 | r._crypto_box_publickeybytes(); + + _.length !== E && f(c, "invalid publicKey length"), x = v(_), c.push(x), n = k(c, n, "privateKey"); + + var w, + S = 0 | r._crypto_box_secretkeybytes(); + + n.length !== S && f(c, "invalid privateKey length"), w = v(n), c.push(w); + var T = new u(0 | o), + Y = T.address; + + if (c.push(Y), 0 == (0 | r._crypto_box_open_detached(Y, h, p, o, 0, d, x, w))) { + var A = y(T, s); + return g(c), A; + } + + b(c, "incorrect key pair for the given ciphertext"); + } + + function te(e, t, a, _, n) { + var s = []; + l(n), e = k(s, e, "ciphertext"); + + var c, + h = r._crypto_box_macbytes(), + o = e.length; + + o < h && f(s, "ciphertext is too short"), c = v(e), s.push(c), t = k(s, t, "nonce"); + + var p, + i = 0 | r._crypto_box_noncebytes(); + + t.length !== i && f(s, "invalid nonce length"), p = v(t), s.push(p), a = k(s, a, "publicKey"); + + var d, + m = 0 | r._crypto_box_publickeybytes(); + + a.length !== m && f(s, "invalid publicKey length"), d = v(a), s.push(d), _ = k(s, _, "privateKey"); + + var x, + E = 0 | r._crypto_box_secretkeybytes(); + + _.length !== E && f(s, "invalid privateKey length"), x = v(_), s.push(x); + var w = new u(o - r._crypto_box_macbytes() | 0), + S = w.address; + + if (s.push(S), 0 == (0 | r._crypto_box_open_easy(S, c, o, 0, p, d, x))) { + var T = y(w, n); + return g(s), T; + } + + b(s, "incorrect key pair for the given ciphertext"); + } + + function re(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "ciphertext")), + c = e.length; + n.push(s), t = k(n, t, "nonce"); + + var h, + o = 0 | r._crypto_box_noncebytes(); + + t.length !== o && f(n, "invalid nonce length"), h = v(t), n.push(h), a = k(n, a, "sharedKey"); + + var p, + i = 0 | r._crypto_box_beforenmbytes(); + + a.length !== i && f(n, "invalid sharedKey length"), p = v(a), n.push(p); + var d = new u(c - r._crypto_box_macbytes() | 0), + m = d.address; + + if (n.push(m), 0 == (0 | r._crypto_box_open_easy_afternm(m, s, c, 0, h, p))) { + var x = y(d, _); + return g(n), x; + } + + b(n, "incorrect secret key for the given ciphertext"); + } + + function ae(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "publicKey"); + + var c, + h = 0 | r._crypto_box_publickeybytes(); + + t.length !== h && f(_, "invalid publicKey length"), c = v(t), _.push(c); + var o = new u(s + r._crypto_box_sealbytes() | 0), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_box_seal(p, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function _e(e, t, a, _) { + var n = []; + l(_), e = k(n, e, "ciphertext"); + + var s, + c = r._crypto_box_sealbytes(), + h = e.length; + + h < c && f(n, "ciphertext is too short"), s = v(e), n.push(s), t = k(n, t, "publicKey"); + + var o, + p = 0 | r._crypto_box_publickeybytes(); + + t.length !== p && f(n, "invalid publicKey length"), o = v(t), n.push(o), a = k(n, a, "privateKey"); + + var i, + d = 0 | r._crypto_box_secretkeybytes(); + + a.length !== d && f(n, "invalid privateKey length"), i = v(a), n.push(i); + var m = new u(h - r._crypto_box_sealbytes() | 0), + x = m.address; + + if (n.push(x), 0 == (0 | r._crypto_box_seal_open(x, s, h, 0, o, i))) { + var E = y(m, _); + return g(n), E; + } + + b(n, "incorrect key pair for the given ciphertext"); + } + + function ne(e, t) { + var a = []; + l(t), e = k(a, e, "seed"); + + var _, + n = 0 | r._crypto_box_seedbytes(); + + e.length !== n && f(a, "invalid seed length"), _ = v(e), a.push(_); + var s = new u(0 | r._crypto_box_publickeybytes()), + c = s.address; + a.push(c); + var h = new u(0 | r._crypto_box_secretkeybytes()), + o = h.address; + + if (a.push(o), 0 == (0 | r._crypto_box_seed_keypair(c, o, _))) { + var p = { + publicKey: y(s, t), + privateKey: y(h, t), + keyType: "x25519" + }; + return g(a), p; + } + + b(a, "invalid usage"); + } + + function se(e, t, a) { + var _ = []; + l(a), e = k(_, e, "p"); + + var n, + s = 0 | r._crypto_core_ristretto255_bytes(); + + e.length !== s && f(_, "invalid p length"), n = v(e), _.push(n), t = k(_, t, "q"); + + var c, + h = 0 | r._crypto_core_ristretto255_bytes(); + + t.length !== h && f(_, "invalid q length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_core_ristretto255_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_core_ristretto255_add(p, n, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "inputs is invalid element"); + } + + function ce(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "r")); + + e.length, a.push(_); + var n = new u(0 | r._crypto_core_ristretto255_bytes()), + s = n.address; + + if (a.push(s), 0 == (0 | r._crypto_core_ristretto255_from_hash(s, _))) { + var c = y(n, t); + return g(a), c; + } + + b(a, "invalid usage"); + } + + function he(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "point")); + + e.length, a.push(_); + + var n = 1 == (0 | r._crypto_core_ristretto255_is_valid_point(_)); + + return g(a), n; + } + + function oe(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_core_ristretto255_bytes()), + _ = a.address; + t.push(_), r._crypto_core_ristretto255_random(_); + var n = y(a, e); + return g(t), n; + } + + function pe(e, t, a) { + var _ = []; + l(a), e = k(_, e, "x"); + + var n, + s = 0 | r._crypto_core_ristretto255_scalarbytes(); + + e.length !== s && f(_, "invalid x length"), n = v(e), _.push(n), t = k(_, t, "y"); + + var c, + h = 0 | r._crypto_core_ristretto255_scalarbytes(); + + t.length !== h && f(_, "invalid y length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_core_ristretto255_scalarbytes()), + p = o.address; + _.push(p), r._crypto_core_ristretto255_scalar_add(p, n, c); + var i = y(o, a); + return g(_), i; + } + + function ye(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "s")); + + e.length, a.push(_); + var n = new u(0 | r._crypto_core_ristretto255_scalarbytes()), + s = n.address; + a.push(s), r._crypto_core_ristretto255_scalar_complement(s, _); + var c = y(n, t); + return g(a), c; + } + + function ie(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "s")); + + e.length, a.push(_); + var n = new u(0 | r._crypto_core_ristretto255_scalarbytes()), + s = n.address; + + if (a.push(s), 0 == (0 | r._crypto_core_ristretto255_scalar_invert(s, _))) { + var c = y(n, t); + return g(a), c; + } + + b(a, "invalid reciprocate"); + } + + function le(e, t, a) { + var _ = []; + l(a), e = k(_, e, "x"); + + var n, + s = 0 | r._crypto_core_ristretto255_scalarbytes(); + + e.length !== s && f(_, "invalid x length"), n = v(e), _.push(n), t = k(_, t, "y"); + + var c, + h = 0 | r._crypto_core_ristretto255_scalarbytes(); + + t.length !== h && f(_, "invalid y length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_core_ristretto255_scalarbytes()), + p = o.address; + _.push(p), r._crypto_core_ristretto255_scalar_mul(p, n, c); + var i = y(o, a); + return g(_), i; + } + + function ue(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "s")); + + e.length, a.push(_); + var n = new u(0 | r._crypto_core_ristretto255_scalarbytes()), + s = n.address; + a.push(s), r._crypto_core_ristretto255_scalar_negate(s, _); + var c = y(n, t); + return g(a), c; + } + + function ve(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_core_ristretto255_scalarbytes()), + _ = a.address; + t.push(_), r._crypto_core_ristretto255_random(_); + var n = y(a, e); + return g(t), n; + } + + function de(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "sample")); + + e.length, a.push(_); + var n = new u(0 | r._crypto_core_ristretto255_scalarbytes()), + s = n.address; + a.push(s), r._crypto_core_ristretto255_scalar_reduce(s, _); + var c = y(n, t); + return g(a), c; + } + + function ge(e, t, a) { + var _ = []; + l(a), e = k(_, e, "x"); + + var n, + s = 0 | r._crypto_core_ristretto255_scalarbytes(); + + e.length !== s && f(_, "invalid x length"), n = v(e), _.push(n), t = k(_, t, "y"); + + var c, + h = 0 | r._crypto_core_ristretto255_scalarbytes(); + + t.length !== h && f(_, "invalid y length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_core_ristretto255_scalarbytes()), + p = o.address; + _.push(p), r._crypto_core_ristretto255_scalar_sub(p, n, c); + var i = y(o, a); + return g(_), i; + } + + function be(e, t, a) { + var _ = []; + l(a), e = k(_, e, "p"); + + var n, + s = 0 | r._crypto_core_ristretto255_bytes(); + + e.length !== s && f(_, "invalid p length"), n = v(e), _.push(n), t = k(_, t, "q"); + + var c, + h = 0 | r._crypto_core_ristretto255_bytes(); + + t.length !== h && f(_, "invalid q length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_core_ristretto255_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_core_ristretto255_sub(p, n, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "inputs is invalid element"); + } + + function fe(e, t, a, _) { + var n = []; + l(_), m(n, e, "hash_length"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(n, "hash_length must be an unsigned integer"); + var s = v(t = k(n, t, "message")), + c = t.length; + n.push(s); + var h = null, + o = 0; + null != a && (h = v(a = k(n, a, "key")), o = a.length, n.push(h)); + var p = new u(e |= 0), + i = p.address; + + if (n.push(i), 0 == (0 | r._crypto_generichash(i, e, s, c, 0, h, o))) { + var d = y(p, _); + return g(n), d; + } + + b(n, "invalid usage"); + } + + function me(e, t, a, _, n) { + var s = []; + l(n), m(s, e, "subkey_len"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(s, "subkey_len must be an unsigned integer"); + var c = null, + h = 0; + null != t && (c = v(t = k(s, t, "key")), h = t.length, s.push(c)), a = k(s, a, "id"); + + var o, + p = 0 | r._crypto_generichash_blake2b_saltbytes(); + + a.length !== p && f(s, "invalid id length"), o = v(a), s.push(o), _ = k(s, _, "ctx"); + + var i, + d = 0 | r._crypto_generichash_blake2b_personalbytes(); + + _.length !== d && f(s, "invalid ctx length"), i = v(_), s.push(i); + var x = new u(0 | e), + E = x.address; + + if (s.push(E), 0 == (0 | r._crypto_generichash_blake2b_salt_personal(E, e, null, 0, 0, c, h, o, i))) { + var w = y(x, n); + return g(s), w; + } + + b(s, "invalid usage"); + } + + function ke(e, t, a) { + var _ = []; + l(a), m(_, e, "state_address"), m(_, t, "hash_length"), ("number" != typeof t || (0 | t) !== t || t < 0) && f(_, "hash_length must be an unsigned integer"); + var n = new u(t |= 0), + s = n.address; + + if (_.push(s), 0 == (0 | r._crypto_generichash_final(e, s, t))) { + var c = (r._free(e), y(n, a)); + return g(_), c; + } + + b(_, "invalid usage"); + } + + function xe(e, t, a) { + var _ = []; + l(a); + var n = null, + s = 0; + null != e && (n = v(e = k(_, e, "key")), s = e.length, _.push(n)), m(_, t, "hash_length"), ("number" != typeof t || (0 | t) !== t || t < 0) && f(_, "hash_length must be an unsigned integer"); + var c = new u(357).address; + + if (0 == (0 | r._crypto_generichash_init(c, n, s, t))) { + var h = c; + return g(_), h; + } + + b(_, "invalid usage"); + } + + function Ee(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_generichash_keybytes()), + _ = a.address; + t.push(_), r._crypto_generichash_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function we(e, t, a) { + var _ = []; + l(a), m(_, e, "state_address"); + var n = v(t = k(_, t, "message_chunk")), + s = t.length; + _.push(n), 0 != (0 | r._crypto_generichash_update(e, n, s)) && b(_, "invalid usage"), g(_); + } + + function Se(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "message")), + n = e.length; + + a.push(_); + var s = new u(0 | r._crypto_hash_bytes()), + c = s.address; + + if (a.push(c), 0 == (0 | r._crypto_hash(c, _, n, 0))) { + var h = y(s, t); + return g(a), h; + } + + b(a, "invalid usage"); + } + + function Te(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "message")), + n = e.length; + + a.push(_); + var s = new u(0 | r._crypto_hash_sha256_bytes()), + c = s.address; + + if (a.push(c), 0 == (0 | r._crypto_hash_sha256(c, _, n, 0))) { + var h = y(s, t); + return g(a), h; + } + + b(a, "invalid usage"); + } + + function Ye(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "message")), + n = e.length; + + a.push(_); + var s = new u(0 | r._crypto_hash_sha512_bytes()), + c = s.address; + + if (a.push(c), 0 == (0 | r._crypto_hash_sha512(c, _, n, 0))) { + var h = y(s, t); + return g(a), h; + } + + b(a, "invalid usage"); + } + + function Ae(e, t, a, _, s) { + var c = []; + l(s), m(c, e, "subkey_len"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(c, "subkey_len must be an unsigned integer"), m(c, t, "subkey_id"), ("number" != typeof t || (0 | t) !== t || t < 0) && f(c, "subkey_id must be an unsigned integer"), "string" != typeof a && f(c, "ctx must be a string"); + var h = v(a = n(a + "\0")); + a.length, c.push(h), _ = k(c, _, "key"); + + var o, + p = 0 | r._crypto_kdf_keybytes(); + + _.length !== p && f(c, "invalid key length"), o = v(_), c.push(o); + var i = new u(0 | e), + d = i.address; + c.push(d), r._crypto_kdf_derive_from_key(d, e, t, t >>> 24 >>> 8, h, o); + var b = y(i, s); + return g(c), b; + } + + function Be(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_kdf_keybytes()), + _ = a.address; + t.push(_), r._crypto_kdf_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function Ke(e, t, a, _) { + var n = []; + l(_), e = k(n, e, "clientPublicKey"); + + var s, + c = 0 | r._crypto_kx_publickeybytes(); + + e.length !== c && f(n, "invalid clientPublicKey length"), s = v(e), n.push(s), t = k(n, t, "clientSecretKey"); + + var h, + o = 0 | r._crypto_kx_secretkeybytes(); + + t.length !== o && f(n, "invalid clientSecretKey length"), h = v(t), n.push(h), a = k(n, a, "serverPublicKey"); + + var p, + i = 0 | r._crypto_kx_publickeybytes(); + + a.length !== i && f(n, "invalid serverPublicKey length"), p = v(a), n.push(p); + var d = new u(0 | r._crypto_kx_sessionkeybytes()), + m = d.address; + n.push(m); + var x = new u(0 | r._crypto_kx_sessionkeybytes()), + E = x.address; + + if (n.push(E), 0 == (0 | r._crypto_kx_client_session_keys(m, E, s, h, p))) { + var w = y({ + sharedRx: d, + sharedTx: x + }, _); + return g(n), w; + } + + b(n, "invalid usage"); + } + + function Ie(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_kx_publickeybytes()), + _ = a.address; + t.push(_); + var n = new u(0 | r._crypto_kx_secretkeybytes()), + s = n.address; + + if (t.push(s), 0 == (0 | r._crypto_kx_keypair(_, s))) { + var c = { + publicKey: y(a, e), + privateKey: y(n, e), + keyType: "x25519" + }; + return g(t), c; + } + + b(t, "internal error"); + } + + function Me(e, t) { + var a = []; + l(t), e = k(a, e, "seed"); + + var _, + n = 0 | r._crypto_kx_seedbytes(); + + e.length !== n && f(a, "invalid seed length"), _ = v(e), a.push(_); + var s = new u(0 | r._crypto_kx_publickeybytes()), + c = s.address; + a.push(c); + var h = new u(0 | r._crypto_kx_secretkeybytes()), + o = h.address; + + if (a.push(o), 0 == (0 | r._crypto_kx_seed_keypair(c, o, _))) { + var p = { + publicKey: y(s, t), + privateKey: y(h, t), + keyType: "x25519" + }; + return g(a), p; + } + + b(a, "internal error"); + } + + function Le(e, t, a, _) { + var n = []; + l(_), e = k(n, e, "serverPublicKey"); + + var s, + c = 0 | r._crypto_kx_publickeybytes(); + + e.length !== c && f(n, "invalid serverPublicKey length"), s = v(e), n.push(s), t = k(n, t, "serverSecretKey"); + + var h, + o = 0 | r._crypto_kx_secretkeybytes(); + + t.length !== o && f(n, "invalid serverSecretKey length"), h = v(t), n.push(h), a = k(n, a, "clientPublicKey"); + + var p, + i = 0 | r._crypto_kx_publickeybytes(); + + a.length !== i && f(n, "invalid clientPublicKey length"), p = v(a), n.push(p); + var d = new u(0 | r._crypto_kx_sessionkeybytes()), + m = d.address; + n.push(m); + var x = new u(0 | r._crypto_kx_sessionkeybytes()), + E = x.address; + + if (n.push(E), 0 == (0 | r._crypto_kx_server_session_keys(m, E, s, h, p))) { + var w = y({ + sharedRx: d, + sharedTx: x + }, _); + return g(n), w; + } + + b(n, "invalid usage"); + } + + function Ne(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "key"); + + var c, + h = 0 | r._crypto_onetimeauth_keybytes(); + + t.length !== h && f(_, "invalid key length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_onetimeauth_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_onetimeauth(p, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function Ue(e, t) { + var a = []; + l(t), m(a, e, "state_address"); + + var _ = new u(0 | r._crypto_onetimeauth_bytes()), + n = _.address; + + if (a.push(n), 0 == (0 | r._crypto_onetimeauth_final(e, n))) { + var s = (r._free(e), y(_, t)); + return g(a), s; + } + + b(a, "invalid usage"); + } + + function Oe(e, t) { + var a = []; + l(t); + var _ = null; + null != e && (_ = v(e = k(a, e, "key")), e.length, a.push(_)); + var n = new u(144).address; + + if (0 == (0 | r._crypto_onetimeauth_init(n, _))) { + var s = n; + return g(a), s; + } + + b(a, "invalid usage"); + } + + function Re(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_onetimeauth_keybytes()), + _ = a.address; + t.push(_), r._crypto_onetimeauth_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function Pe(e, t, a) { + var _ = []; + l(a), m(_, e, "state_address"); + var n = v(t = k(_, t, "message_chunk")), + s = t.length; + _.push(n), 0 != (0 | r._crypto_onetimeauth_update(e, n, s)) && b(_, "invalid usage"), g(_); + } + + function Ce(e, t, a) { + var _ = []; + e = k(_, e, "hash"); + + var n, + s = 0 | r._crypto_onetimeauth_bytes(); + + e.length !== s && f(_, "invalid hash length"), n = v(e), _.push(n); + var c = v(t = k(_, t, "message")), + h = t.length; + _.push(c), a = k(_, a, "key"); + + var o, + p = 0 | r._crypto_onetimeauth_keybytes(); + + a.length !== p && f(_, "invalid key length"), o = v(a), _.push(o); + + var y = 0 == (0 | r._crypto_onetimeauth_verify(n, c, h, 0, o)); + + return g(_), y; + } + + function Ge(e, t, a, _, n, s, c) { + var h = []; + l(c), m(h, e, "keyLength"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(h, "keyLength must be an unsigned integer"); + var o = v(t = k(h, t, "password")), + p = t.length; + h.push(o), a = k(h, a, "salt"); + + var i, + d = 0 | r._crypto_pwhash_saltbytes(); + + a.length !== d && f(h, "invalid salt length"), i = v(a), h.push(i), m(h, _, "opsLimit"), ("number" != typeof _ || (0 | _) !== _ || _ < 0) && f(h, "opsLimit must be an unsigned integer"), m(h, n, "memLimit"), ("number" != typeof n || (0 | n) !== n || n < 0) && f(h, "memLimit must be an unsigned integer"), m(h, s, "algorithm"), ("number" != typeof s || (0 | s) !== s || s < 0) && f(h, "algorithm must be an unsigned integer"); + var x = new u(0 | e), + E = x.address; + + if (h.push(E), 0 == (0 | r._crypto_pwhash(E, e, 0, o, p, 0, i, _, 0, n, s))) { + var w = y(x, c); + return g(h), w; + } + + b(h, "invalid usage"); + } + + function De(e, t, a, _, n, s) { + var c = []; + l(s), m(c, e, "keyLength"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(c, "keyLength must be an unsigned integer"); + var h = v(t = k(c, t, "password")), + o = t.length; + c.push(h), a = k(c, a, "salt"); + + var p, + i = 0 | r._crypto_pwhash_scryptsalsa208sha256_saltbytes(); + + a.length !== i && f(c, "invalid salt length"), p = v(a), c.push(p), m(c, _, "opsLimit"), ("number" != typeof _ || (0 | _) !== _ || _ < 0) && f(c, "opsLimit must be an unsigned integer"), m(c, n, "memLimit"), ("number" != typeof n || (0 | n) !== n || n < 0) && f(c, "memLimit must be an unsigned integer"); + var d = new u(0 | e), + x = d.address; + + if (c.push(x), 0 == (0 | r._crypto_pwhash_scryptsalsa208sha256(x, e, 0, h, o, 0, p, _, 0, n))) { + var E = y(d, s); + return g(c), E; + } + + b(c, "invalid usage"); + } + + function Xe(e, t, a, _, n, s, c) { + var h = []; + l(c); + var o = v(e = k(h, e, "password")), + p = e.length; + h.push(o); + var i = v(t = k(h, t, "salt")), + d = t.length; + h.push(i), m(h, a, "opsLimit"), ("number" != typeof a || (0 | a) !== a || a < 0) && f(h, "opsLimit must be an unsigned integer"), m(h, _, "r"), ("number" != typeof _ || (0 | _) !== _ || _ < 0) && f(h, "r must be an unsigned integer"), m(h, n, "p"), ("number" != typeof n || (0 | n) !== n || n < 0) && f(h, "p must be an unsigned integer"), m(h, s, "keyLength"), ("number" != typeof s || (0 | s) !== s || s < 0) && f(h, "keyLength must be an unsigned integer"); + var x = new u(0 | s), + E = x.address; + + if (h.push(E), 0 == (0 | r._crypto_pwhash_scryptsalsa208sha256_ll(o, p, i, d, a, 0, _, n, E, s))) { + var w = y(x, c); + return g(h), w; + } + + b(h, "invalid usage"); + } + + function Ve(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "password")), + c = e.length; + n.push(s), m(n, t, "opsLimit"), ("number" != typeof t || (0 | t) !== t || t < 0) && f(n, "opsLimit must be an unsigned integer"), m(n, a, "memLimit"), ("number" != typeof a || (0 | a) !== a || a < 0) && f(n, "memLimit must be an unsigned integer"); + var h = new u(0 | r._crypto_pwhash_scryptsalsa208sha256_strbytes()).address; + + if (n.push(h), 0 == (0 | r._crypto_pwhash_scryptsalsa208sha256_str(h, s, c, 0, t, 0, a))) { + var o = r.UTF8ToString(h); + return g(n), o; + } + + b(n, "invalid usage"); + } + + function Fe(e, t, a) { + var _ = []; + l(a), "string" != typeof e && f(_, "hashed_password must be a string"); + var s = v(e = n(e + "\0")); + e.length, _.push(s); + var c = v(t = k(_, t, "password")), + h = t.length; + + _.push(c); + + var o = 0 == (0 | r._crypto_pwhash_scryptsalsa208sha256_str_verify(s, c, h, 0)); + + return g(_), o; + } + + function He(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "password")), + c = e.length; + n.push(s), m(n, t, "opsLimit"), ("number" != typeof t || (0 | t) !== t || t < 0) && f(n, "opsLimit must be an unsigned integer"), m(n, a, "memLimit"), ("number" != typeof a || (0 | a) !== a || a < 0) && f(n, "memLimit must be an unsigned integer"); + var h = new u(0 | r._crypto_pwhash_strbytes()).address; + + if (n.push(h), 0 == (0 | r._crypto_pwhash_str(h, s, c, 0, t, 0, a))) { + var o = r.UTF8ToString(h); + return g(n), o; + } + + b(n, "invalid usage"); + } + + function ze(e, t, a) { + var _ = []; + l(a), "string" != typeof e && f(_, "hashed_password must be a string"); + var s = v(e = n(e + "\0")); + e.length, _.push(s); + var c = v(t = k(_, t, "password")), + h = t.length; + + _.push(c); + + var o = 0 == (0 | r._crypto_pwhash_str_verify(s, c, h, 0)); + + return g(_), o; + } + + function je(e, t, a) { + var _ = []; + l(a), e = k(_, e, "privateKey"); + + var n, + s = 0 | r._crypto_scalarmult_scalarbytes(); + + e.length !== s && f(_, "invalid privateKey length"), n = v(e), _.push(n), t = k(_, t, "publicKey"); + + var c, + h = 0 | r._crypto_scalarmult_scalarbytes(); + + t.length !== h && f(_, "invalid publicKey length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_scalarmult_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_scalarmult(p, n, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "weak public key"); + } + + function qe(e, t) { + var a = []; + l(t), e = k(a, e, "privateKey"); + + var _, + n = 0 | r._crypto_scalarmult_scalarbytes(); + + e.length !== n && f(a, "invalid privateKey length"), _ = v(e), a.push(_); + var s = new u(0 | r._crypto_scalarmult_scalarbytes()), + c = s.address; + + if (a.push(c), 0 == (0 | r._crypto_scalarmult_base(c, _))) { + var h = y(s, t); + return g(a), h; + } + + b(a, "insecure scalar"); + } + + function We(e, t, a) { + var _ = []; + l(a), e = k(_, e, "scalar"); + + var n, + s = 0 | r._crypto_scalarmult_ristretto255_scalarbytes(); + + e.length !== s && f(_, "invalid scalar length"), n = v(e), _.push(n), t = k(_, t, "privateKey"); + + var c, + h = 0 | r._crypto_scalarmult_ristretto255_bytes(); + + t.length !== h && f(_, "invalid privateKey length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_scalarmult_ristretto255_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_scalarmult_ristretto255(p, n, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "input is zero element"); + } + + function Je(e, t) { + var a = []; + l(t); + + var _ = v(e = k(a, e, "scalar")); + + e.length, a.push(_); + var n = new u(0 | r._crypto_core_ristretto255_bytes()), + s = n.address; + + if (a.push(s), 0 == (0 | r._crypto_scalarmult_ristretto255_base(s, _))) { + var c = y(n, t); + return g(a), c; + } + + b(a, "scalar is 0"); + } + + function Qe(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "message")), + c = e.length; + n.push(s), t = k(n, t, "nonce"); + + var h, + o = 0 | r._crypto_secretbox_noncebytes(); + + t.length !== o && f(n, "invalid nonce length"), h = v(t), n.push(h), a = k(n, a, "key"); + + var p, + i = 0 | r._crypto_secretbox_keybytes(); + + a.length !== i && f(n, "invalid key length"), p = v(a), n.push(p); + var d = new u(0 | c), + m = d.address; + n.push(m); + var x = new u(0 | r._crypto_secretbox_macbytes()), + E = x.address; + + if (n.push(E), 0 == (0 | r._crypto_secretbox_detached(m, E, s, c, 0, h, p))) { + var w = y({ + mac: x, + cipher: d + }, _); + return g(n), w; + } + + b(n, "invalid usage"); + } + + function Ze(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "message")), + c = e.length; + n.push(s), t = k(n, t, "nonce"); + + var h, + o = 0 | r._crypto_secretbox_noncebytes(); + + t.length !== o && f(n, "invalid nonce length"), h = v(t), n.push(h), a = k(n, a, "key"); + + var p, + i = 0 | r._crypto_secretbox_keybytes(); + + a.length !== i && f(n, "invalid key length"), p = v(a), n.push(p); + var d = new u(c + r._crypto_secretbox_macbytes() | 0), + m = d.address; + + if (n.push(m), 0 == (0 | r._crypto_secretbox_easy(m, s, c, 0, h, p))) { + var x = y(d, _); + return g(n), x; + } + + b(n, "invalid usage"); + } + + function $e(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_secretbox_keybytes()), + _ = a.address; + t.push(_), r._crypto_secretbox_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function et(e, t, a, _, n) { + var s = []; + l(n); + var c = v(e = k(s, e, "ciphertext")), + h = e.length; + s.push(c), t = k(s, t, "mac"); + + var o, + p = 0 | r._crypto_secretbox_macbytes(); + + t.length !== p && f(s, "invalid mac length"), o = v(t), s.push(o), a = k(s, a, "nonce"); + + var i, + d = 0 | r._crypto_secretbox_noncebytes(); + + a.length !== d && f(s, "invalid nonce length"), i = v(a), s.push(i), _ = k(s, _, "key"); + + var m, + x = 0 | r._crypto_secretbox_keybytes(); + + _.length !== x && f(s, "invalid key length"), m = v(_), s.push(m); + var E = new u(0 | h), + w = E.address; + + if (s.push(w), 0 == (0 | r._crypto_secretbox_open_detached(w, c, o, h, 0, i, m))) { + var S = y(E, n); + return g(s), S; + } + + b(s, "wrong secret key for the given ciphertext"); + } + + function tt(e, t, a, _) { + var n = []; + l(_), e = k(n, e, "ciphertext"); + + var s, + c = r._crypto_secretbox_macbytes(), + h = e.length; + + h < c && f(n, "ciphertext is too short"), s = v(e), n.push(s), t = k(n, t, "nonce"); + + var o, + p = 0 | r._crypto_secretbox_noncebytes(); + + t.length !== p && f(n, "invalid nonce length"), o = v(t), n.push(o), a = k(n, a, "key"); + + var i, + d = 0 | r._crypto_secretbox_keybytes(); + + a.length !== d && f(n, "invalid key length"), i = v(a), n.push(i); + var m = new u(h - r._crypto_secretbox_macbytes() | 0), + x = m.address; + + if (n.push(x), 0 == (0 | r._crypto_secretbox_open_easy(x, s, h, 0, o, i))) { + var E = y(m, _); + return g(n), E; + } + + b(n, "wrong secret key for the given ciphertext"); + } + + function rt(e, t, a) { + var _ = []; + l(a), e = k(_, e, "header"); + + var n, + s = 0 | r._crypto_secretstream_xchacha20poly1305_headerbytes(); + + e.length !== s && f(_, "invalid header length"), n = v(e), _.push(n), t = k(_, t, "key"); + + var c, + h = 0 | r._crypto_secretstream_xchacha20poly1305_keybytes(); + + t.length !== h && f(_, "invalid key length"), c = v(t), _.push(c); + var o = new u(52).address; + + if (0 == (0 | r._crypto_secretstream_xchacha20poly1305_init_pull(o, n, c))) { + var p = o; + return g(_), p; + } + + b(_, "invalid usage"); + } + + function at(e, t) { + var a = []; + l(t), e = k(a, e, "key"); + + var _, + n = 0 | r._crypto_secretstream_xchacha20poly1305_keybytes(); + + e.length !== n && f(a, "invalid key length"), _ = v(e), a.push(_); + var s = new u(52).address, + c = new u(0 | r._crypto_secretstream_xchacha20poly1305_headerbytes()), + h = c.address; + + if (a.push(h), 0 == (0 | r._crypto_secretstream_xchacha20poly1305_init_push(s, h, _))) { + var o = { + state: s, + header: y(c, t) + }; + return g(a), o; + } + + b(a, "invalid usage"); + } + + function _t(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_secretstream_xchacha20poly1305_keybytes()), + _ = a.address; + t.push(_), r._crypto_secretstream_xchacha20poly1305_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function nt(e, t, a, _) { + var n = []; + l(_), m(n, e, "state_address"), t = k(n, t, "cipher"); + + var s, + c = r._crypto_secretstream_xchacha20poly1305_abytes(), + h = t.length; + + h < c && f(n, "cipher is too short"), s = v(t), n.push(s); + var o = null, + p = 0; + null != a && (o = v(a = k(n, a, "ad")), p = a.length, n.push(o)); + var i = new u(h - r._crypto_secretstream_xchacha20poly1305_abytes() | 0), + b = i.address; + n.push(b); + var x, + E = (x = d(1), n.push(x), (E = 0 === r._crypto_secretstream_xchacha20poly1305_pull(e, b, 0, x, s, h, 0, o, p) && { + tag: r.HEAPU8[x], + message: i + }) && { + message: y(E.message, _), + tag: E.tag + }); + return g(n), E; + } + + function st(e, t, a, _, n) { + var s = []; + l(n), m(s, e, "state_address"); + var c = v(t = k(s, t, "message_chunk")), + h = t.length; + s.push(c); + var o = null, + p = 0; + null != a && (o = v(a = k(s, a, "ad")), p = a.length, s.push(o)), m(s, _, "tag"), ("number" != typeof _ || (0 | _) !== _ || _ < 0) && f(s, "tag must be an unsigned integer"); + var i = new u(h + r._crypto_secretstream_xchacha20poly1305_abytes() | 0), + d = i.address; + + if (s.push(d), 0 == (0 | r._crypto_secretstream_xchacha20poly1305_push(e, d, 0, c, h, 0, o, p, 0, _))) { + var x = y(i, n); + return g(s), x; + } + + b(s, "invalid usage"); + } + + function ct(e, t) { + var a = []; + return l(t), m(a, e, "state_address"), r._crypto_secretstream_xchacha20poly1305_rekey(e), g(a), !0; + } + + function ht(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "key"); + + var c, + h = 0 | r._crypto_shorthash_keybytes(); + + t.length !== h && f(_, "invalid key length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_shorthash_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_shorthash(p, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function ot(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_shorthash_keybytes()), + _ = a.address; + t.push(_), r._crypto_shorthash_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function pt(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "key"); + + var c, + h = 0 | r._crypto_shorthash_siphashx24_keybytes(); + + t.length !== h && f(_, "invalid key length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_shorthash_siphashx24_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_shorthash_siphashx24(p, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function yt(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "privateKey"); + + var c, + h = 0 | r._crypto_sign_secretkeybytes(); + + t.length !== h && f(_, "invalid privateKey length"), c = v(t), _.push(c); + var o = new u(e.length + r._crypto_sign_bytes() | 0), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_sign(p, null, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function it(e, t, a) { + var _ = []; + l(a); + var n = v(e = k(_, e, "message")), + s = e.length; + _.push(n), t = k(_, t, "privateKey"); + + var c, + h = 0 | r._crypto_sign_secretkeybytes(); + + t.length !== h && f(_, "invalid privateKey length"), c = v(t), _.push(c); + var o = new u(0 | r._crypto_sign_bytes()), + p = o.address; + + if (_.push(p), 0 == (0 | r._crypto_sign_detached(p, null, n, s, 0, c))) { + var i = y(o, a); + return g(_), i; + } + + b(_, "invalid usage"); + } + + function lt(e, t) { + var a = []; + l(t), e = k(a, e, "edPk"); + + var _, + n = 0 | r._crypto_sign_publickeybytes(); + + e.length !== n && f(a, "invalid edPk length"), _ = v(e), a.push(_); + var s = new u(0 | r._crypto_scalarmult_scalarbytes()), + c = s.address; + + if (a.push(c), 0 == (0 | r._crypto_sign_ed25519_pk_to_curve25519(c, _))) { + var h = y(s, t); + return g(a), h; + } + + b(a, "invalid key"); + } + + function ut(e, t) { + var a = []; + l(t), e = k(a, e, "edSk"); + + var _, + n = 0 | r._crypto_sign_secretkeybytes(); + + e.length !== n && f(a, "invalid edSk length"), _ = v(e), a.push(_); + var s = new u(0 | r._crypto_scalarmult_scalarbytes()), + c = s.address; + + if (a.push(c), 0 == (0 | r._crypto_sign_ed25519_sk_to_curve25519(c, _))) { + var h = y(s, t); + return g(a), h; + } + + b(a, "invalid key"); + } + + function vt(e, t) { + var a = []; + l(t), e = k(a, e, "privateKey"); + + var _, + n = 0 | r._crypto_sign_secretkeybytes(); + + e.length !== n && f(a, "invalid privateKey length"), _ = v(e), a.push(_); + var s = new u(0 | r._crypto_sign_publickeybytes()), + c = s.address; + + if (a.push(c), 0 == (0 | r._crypto_sign_ed25519_sk_to_pk(c, _))) { + var h = y(s, t); + return g(a), h; + } + + b(a, "invalid key"); + } + + function dt(e, t) { + var a = []; + l(t), e = k(a, e, "privateKey"); + + var _, + n = 0 | r._crypto_sign_secretkeybytes(); + + e.length !== n && f(a, "invalid privateKey length"), _ = v(e), a.push(_); + var s = new u(0 | r._crypto_sign_seedbytes()), + c = s.address; + + if (a.push(c), 0 == (0 | r._crypto_sign_ed25519_sk_to_seed(c, _))) { + var h = y(s, t); + return g(a), h; + } + + b(a, "invalid key"); + } + + function gt(e, t, a) { + var _ = []; + l(a), m(_, e, "state_address"), t = k(_, t, "privateKey"); + + var n, + s = 0 | r._crypto_sign_secretkeybytes(); + + t.length !== s && f(_, "invalid privateKey length"), n = v(t), _.push(n); + var c = new u(0 | r._crypto_sign_bytes()), + h = c.address; + + if (_.push(h), 0 == (0 | r._crypto_sign_final_create(e, h, null, n))) { + var o = (r._free(e), y(c, a)); + return g(_), o; + } + + b(_, "invalid usage"); + } + + function bt(e, t, a, _) { + var n = []; + l(_), m(n, e, "state_address"), t = k(n, t, "signature"); + + var s, + c = 0 | r._crypto_sign_bytes(); + + t.length !== c && f(n, "invalid signature length"), s = v(t), n.push(s), a = k(n, a, "publicKey"); + + var h, + o = 0 | r._crypto_sign_publickeybytes(); + + a.length !== o && f(n, "invalid publicKey length"), h = v(a), n.push(h); + + var p = 0 == (0 | r._crypto_sign_final_verify(e, s, h)); + + return g(n), p; + } + + function ft(e) { + var t = []; + l(e); + var a = new u(208).address; + + if (0 == (0 | r._crypto_sign_init(a))) { + var _ = a; + return g(t), _; + } + + b(t, "internal error"); + } + + function mt(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_sign_publickeybytes()), + _ = a.address; + t.push(_); + var n = new u(0 | r._crypto_sign_secretkeybytes()), + s = n.address; + + if (t.push(s), 0 == (0 | r._crypto_sign_keypair(_, s))) { + var c = { + publicKey: y(a, e), + privateKey: y(n, e), + keyType: "ed25519" + }; + return g(t), c; + } + + b(t, "internal error"); + } + + function kt(e, t, a) { + var _ = []; + l(a), e = k(_, e, "signedMessage"); + + var n, + s = r._crypto_sign_bytes(), + c = e.length; + + c < s && f(_, "signedMessage is too short"), n = v(e), _.push(n), t = k(_, t, "publicKey"); + + var h, + o = 0 | r._crypto_sign_publickeybytes(); + + t.length !== o && f(_, "invalid publicKey length"), h = v(t), _.push(h); + var p = new u(c - r._crypto_sign_bytes() | 0), + i = p.address; + + if (_.push(i), 0 == (0 | r._crypto_sign_open(i, null, n, c, 0, h))) { + var d = y(p, a); + return g(_), d; + } + + b(_, "incorrect signature for the given public key"); + } + + function xt(e, t) { + var a = []; + l(t), e = k(a, e, "seed"); + + var _, + n = 0 | r._crypto_sign_seedbytes(); + + e.length !== n && f(a, "invalid seed length"), _ = v(e), a.push(_); + var s = new u(0 | r._crypto_sign_publickeybytes()), + c = s.address; + a.push(c); + var h = new u(0 | r._crypto_sign_secretkeybytes()), + o = h.address; + + if (a.push(o), 0 == (0 | r._crypto_sign_seed_keypair(c, o, _))) { + var p = { + publicKey: y(s, t), + privateKey: y(h, t), + keyType: "ed25519" + }; + return g(a), p; + } + + b(a, "invalid usage"); + } + + function Et(e, t, a) { + var _ = []; + l(a), m(_, e, "state_address"); + var n = v(t = k(_, t, "message_chunk")), + s = t.length; + _.push(n), 0 != (0 | r._crypto_sign_update(e, n, s)) && b(_, "invalid usage"), g(_); + } + + function wt(e, t, a) { + var _ = []; + e = k(_, e, "signature"); + + var n, + s = 0 | r._crypto_sign_bytes(); + + e.length !== s && f(_, "invalid signature length"), n = v(e), _.push(n); + var c = v(t = k(_, t, "message")), + h = t.length; + _.push(c), a = k(_, a, "publicKey"); + + var o, + p = 0 | r._crypto_sign_publickeybytes(); + + a.length !== p && f(_, "invalid publicKey length"), o = v(a), _.push(o); + + var y = 0 == (0 | r._crypto_sign_verify_detached(n, c, h, 0, o)); + + return g(_), y; + } + + function St(e, t, a, _) { + var n = []; + l(_), m(n, e, "outLength"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(n, "outLength must be an unsigned integer"), t = k(n, t, "key"); + + var s, + c = 0 | r._crypto_stream_chacha20_keybytes(); + + t.length !== c && f(n, "invalid key length"), s = v(t), n.push(s), a = k(n, a, "nonce"); + + var h, + o = 0 | r._crypto_stream_chacha20_noncebytes(); + + a.length !== o && f(n, "invalid nonce length"), h = v(a), n.push(h); + var p = new u(0 | e), + i = p.address; + n.push(i), r._crypto_stream_chacha20(i, e, 0, h, s); + var d = y(p, _); + return g(n), d; + } + + function Tt(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "input_message")), + c = e.length; + n.push(s), t = k(n, t, "nonce"); + + var h, + o = 0 | r._crypto_stream_chacha20_ietf_noncebytes(); + + t.length !== o && f(n, "invalid nonce length"), h = v(t), n.push(h), a = k(n, a, "key"); + + var p, + i = 0 | r._crypto_stream_chacha20_ietf_keybytes(); + + a.length !== i && f(n, "invalid key length"), p = v(a), n.push(p); + var d = new u(0 | c), + m = d.address; + + if (n.push(m), 0 === r._crypto_stream_chacha20_ietf_xor(m, s, c, 0, h, p)) { + var x = y(d, _); + return g(n), x; + } + + b(n, "invalid usage"); + } + + function Yt(e, t, a, _, n) { + var s = []; + l(n); + var c = v(e = k(s, e, "input_message")), + h = e.length; + s.push(c), t = k(s, t, "nonce"); + + var o, + p = 0 | r._crypto_stream_chacha20_ietf_noncebytes(); + + t.length !== p && f(s, "invalid nonce length"), o = v(t), s.push(o), m(s, a, "nonce_increment"), ("number" != typeof a || (0 | a) !== a || a < 0) && f(s, "nonce_increment must be an unsigned integer"), _ = k(s, _, "key"); + + var i, + d = 0 | r._crypto_stream_chacha20_ietf_keybytes(); + + _.length !== d && f(s, "invalid key length"), i = v(_), s.push(i); + var x = new u(0 | h), + E = x.address; + + if (s.push(E), 0 === r._crypto_stream_chacha20_ietf_xor_ic(E, c, h, 0, o, a, 0, i)) { + var w = y(x, n); + return g(s), w; + } + + b(s, "invalid usage"); + } + + function At(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_stream_chacha20_keybytes()), + _ = a.address; + t.push(_), r._crypto_stream_chacha20_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function Bt(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "input_message")), + c = e.length; + n.push(s), t = k(n, t, "nonce"); + + var h, + o = 0 | r._crypto_stream_chacha20_noncebytes(); + + t.length !== o && f(n, "invalid nonce length"), h = v(t), n.push(h), a = k(n, a, "key"); + + var p, + i = 0 | r._crypto_stream_chacha20_keybytes(); + + a.length !== i && f(n, "invalid key length"), p = v(a), n.push(p); + var d = new u(0 | c), + m = d.address; + + if (n.push(m), 0 === r._crypto_stream_chacha20_xor(m, s, c, 0, h, p)) { + var x = y(d, _); + return g(n), x; + } + + b(n, "invalid usage"); + } + + function Kt(e, t, a, _, n) { + var s = []; + l(n); + var c = v(e = k(s, e, "input_message")), + h = e.length; + s.push(c), t = k(s, t, "nonce"); + + var o, + p = 0 | r._crypto_stream_chacha20_noncebytes(); + + t.length !== p && f(s, "invalid nonce length"), o = v(t), s.push(o), m(s, a, "nonce_increment"), ("number" != typeof a || (0 | a) !== a || a < 0) && f(s, "nonce_increment must be an unsigned integer"), _ = k(s, _, "key"); + + var i, + d = 0 | r._crypto_stream_chacha20_keybytes(); + + _.length !== d && f(s, "invalid key length"), i = v(_), s.push(i); + var x = new u(0 | h), + E = x.address; + + if (s.push(E), 0 === r._crypto_stream_chacha20_xor_ic(E, c, h, 0, o, a, 0, i)) { + var w = y(x, n); + return g(s), w; + } + + b(s, "invalid usage"); + } + + function It(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_stream_keybytes()), + _ = a.address; + t.push(_), r._crypto_stream_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function Mt(e) { + var t = []; + l(e); + var a = new u(0 | r._crypto_stream_xchacha20_keybytes()), + _ = a.address; + t.push(_), r._crypto_stream_xchacha20_keygen(_); + var n = y(a, e); + return g(t), n; + } + + function Lt(e, t, a, _) { + var n = []; + l(_); + var s = v(e = k(n, e, "input_message")), + c = e.length; + n.push(s), t = k(n, t, "nonce"); + + var h, + o = 0 | r._crypto_stream_xchacha20_noncebytes(); + + t.length !== o && f(n, "invalid nonce length"), h = v(t), n.push(h), a = k(n, a, "key"); + + var p, + i = 0 | r._crypto_stream_xchacha20_keybytes(); + + a.length !== i && f(n, "invalid key length"), p = v(a), n.push(p); + var d = new u(0 | c), + m = d.address; + + if (n.push(m), 0 === r._crypto_stream_xchacha20_xor(m, s, c, 0, h, p)) { + var x = y(d, _); + return g(n), x; + } + + b(n, "invalid usage"); + } + + function Nt(e, t, a, _, n) { + var s = []; + l(n); + var c = v(e = k(s, e, "input_message")), + h = e.length; + s.push(c), t = k(s, t, "nonce"); + + var o, + p = 0 | r._crypto_stream_xchacha20_noncebytes(); + + t.length !== p && f(s, "invalid nonce length"), o = v(t), s.push(o), m(s, a, "nonce_increment"), ("number" != typeof a || (0 | a) !== a || a < 0) && f(s, "nonce_increment must be an unsigned integer"), _ = k(s, _, "key"); + + var i, + d = 0 | r._crypto_stream_xchacha20_keybytes(); + + _.length !== d && f(s, "invalid key length"), i = v(_), s.push(i); + var x = new u(0 | h), + E = x.address; + + if (s.push(E), 0 === r._crypto_stream_xchacha20_xor_ic(E, c, h, 0, o, a, 0, i)) { + var w = y(x, n); + return g(s), w; + } + + b(s, "invalid usage"); + } + + function Ut(e, t) { + var a = []; + l(t), m(a, e, "length"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(a, "length must be an unsigned integer"); + + var _ = new u(0 | e), + n = _.address; + + a.push(n), r._randombytes_buf(n, e); + var s = y(_, t); + return g(a), s; + } + + function Ot(e, t, a) { + var _ = []; + l(a), m(_, e, "length"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(_, "length must be an unsigned integer"), t = k(_, t, "seed"); + + var n, + s = 0 | r._randombytes_seedbytes(); + + t.length !== s && f(_, "invalid seed length"), n = v(t), _.push(n); + var c = new u(0 | e), + h = c.address; + _.push(h), r._randombytes_buf_deterministic(h, e, n); + var o = y(c, a); + return g(_), o; + } + + function Rt(e) { + l(e), r._randombytes_close(); + } + + function Pt(e) { + l(e); + var t = r._randombytes_random() >>> 0; + return g([]), t; + } + + function Ct(e, t) { + var a = []; + l(t); + + for (var _ = r._malloc(24), n = 0; n < 6; n++) { + r.setValue(_ + 4 * n, r.Runtime.addFunction(e[["implementation_name", "random", "stir", "uniform", "buf", "close"][n]]), "i32"); + } + + 0 != (0 | r._randombytes_set_implementation(_)) && b(a, "unsupported implementation"), g(a); + } + + function Gt(e) { + l(e), r._randombytes_stir(); + } + + function Dt(e, t) { + var a = []; + l(t), m(a, e, "upper_bound"), ("number" != typeof e || (0 | e) !== e || e < 0) && f(a, "upper_bound must be an unsigned integer"); + + var _ = r._randombytes_uniform(e) >>> 0; + + return g(a), _; + } + + function Xt() { + var e = r._sodium_version_string(), + t = r.UTF8ToString(e); + + return g([]), t; + } + + return u.prototype.to_Uint8Array = function () { + var e = new Uint8Array(this.length); + return e.set(r.HEAPU8.subarray(this.address, this.address + this.length)), e; + }, e.add = function (e, t) { + if (!(e instanceof Uint8Array && t instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can added"); + var r = e.length, + a = 0, + _ = 0; + if (t.length != e.length) throw new TypeError("Arguments must have the same length"); + + for (_ = 0; _ < r; _++) { + a >>= 8, a += e[_] + t[_], e[_] = 255 & a; + } + }, e.base64_variants = h, e.compare = function (e, t) { + if (!(e instanceof Uint8Array && t instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be compared"); + if (e.length !== t.length) throw new TypeError("Only instances of identical length can be compared"); + + for (var r = 0, a = 1, _ = e.length; _-- > 0;) { + r |= t[_] - e[_] >> 8 & a, a &= (t[_] ^ e[_]) - 1 >> 8; + } + + return r + r + a - 1; + }, e.from_base64 = function (e, t) { + t = o(t); + var a, + _ = [], + n = new u(3 * (e = k(_, e, "input")).length / 4), + s = v(e), + c = d(4), + h = d(4); + return _.push(s), _.push(n.address), _.push(n.result_bin_len_p), _.push(n.b64_end_p), 0 !== r._sodium_base642bin(n.address, n.length, s, e.length, 0, c, h, t) && b(_, "invalid input"), r.getValue(h, "i32") - s !== e.length && b(_, "incomplete input"), n.length = r.getValue(c, "i32"), a = n.to_Uint8Array(), g(_), a; + }, e.from_hex = function (e) { + var t, + a = [], + _ = new u((e = k(a, e, "input")).length / 2), + n = v(e), + s = d(4); + + return a.push(n), a.push(_.address), a.push(_.hex_end_p), 0 !== r._sodium_hex2bin(_.address, _.length, n, e.length, 0, 0, s) && b(a, "invalid input"), r.getValue(s, "i32") - n !== e.length && b(a, "incomplete input"), t = _.to_Uint8Array(), g(a), t; + }, e.from_string = n, e.increment = function (e) { + if (!(e instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be incremented"); + + for (var t = 256, r = 0, a = e.length; r < a; r++) { + t >>= 8, t += e[r], e[r] = 255 & t; + } + }, e.is_zero = function (e) { + if (!(e instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be checked"); + + for (var t = 0, r = 0, a = e.length; r < a; r++) { + t |= e[r]; + } + + return 0 === t; + }, e.libsodium = t, e.memcmp = function (e, t) { + if (!(e instanceof Uint8Array && t instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be compared"); + if (e.length !== t.length) throw new TypeError("Only instances of identical length can be compared"); + + for (var r = 0, a = 0, _ = e.length; a < _; a++) { + r |= e[a] ^ t[a]; + } + + return 0 === r; + }, e.memzero = function (e) { + if (!(e instanceof Uint8Array)) throw new TypeError("Only Uint8Array instances can be wiped"); + + for (var t = 0, r = e.length; t < r; t++) { + e[t] = 0; + } + }, e.output_formats = function () { + return ["uint8array", "text", "hex", "base64"]; + }, e.pad = function (e, t) { + if (!(e instanceof Uint8Array)) throw new TypeError("buffer must be a Uint8Array"); + if ((t |= 0) <= 0) throw new Error("block size must be > 0"); + var a, + _ = [], + n = d(4), + s = 1, + c = 0, + h = 0 | e.length, + o = new u(h + t); + _.push(n), _.push(o.address); + + for (var p = o.address, y = o.address + h + t; p < y; p++) { + r.HEAPU8[p] = e[c], c += s = 1 & ~((65535 & ((h -= s) >>> 48 | h >>> 32 | h >>> 16 | h)) - 1 >> 16); + } + + return 0 !== r._sodium_pad(n, o.address, e.length, t, o.length) && b(_, "internal error"), o.length = r.getValue(n, "i32"), a = o.to_Uint8Array(), g(_), a; + }, e.unpad = function (e, t) { + if (!(e instanceof Uint8Array)) throw new TypeError("buffer must be a Uint8Array"); + if ((t |= 0) <= 0) throw new Error("block size must be > 0"); + + var a = [], + _ = v(e), + n = d(4); + + return a.push(_), a.push(n), 0 !== r._sodium_unpad(n, _, e.length, t) && b(a, "unsupported/invalid padding"), e = (e = new Uint8Array(e)).subarray(0, r.getValue(n, "i32")), g(a), e; + }, e.ready = _, e.symbols = function () { + return Object.keys(e).sort(); + }, e.to_base64 = p, e.to_hex = c, e.to_string = s, e; + } + + var r = "object" == _typeof(e.sodium) && "function" == typeof e.sodium.onload ? e.sodium.onload : null; + true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(/*! libsodium */ "./node_modules/libsodium/dist/modules/libsodium.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (t), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined, r && e.sodium.ready.then(function () { + r(e.sodium); + }); +}(this); + +/***/ }), + +/***/ "./node_modules/libsodium/dist/modules/libsodium.js": +/*!**********************************************************!*\ + !*** ./node_modules/libsodium/dist/modules/libsodium.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global, process, __dirname, Buffer) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +!function (A) { + function I(A) { + "use strict"; + + var I; + void 0 === (I = A) && (I = {}); + var g = I; + "object" != _typeof(g.sodium) && ("object" == (typeof global === "undefined" ? "undefined" : _typeof(global)) ? g = global : "object" == (typeof window === "undefined" ? "undefined" : _typeof(window)) && (g = window)), "object" == _typeof(g.sodium) && "number" == typeof g.sodium.totalMemory && (I.TOTAL_MEMORY = g.sodium.totalMemory); + var B = I; + return I.ready = new Promise(function (A, I) { + (C = B).onAbort = I, C.print = function (A) {}, C.printErr = function (A) {}, C.onRuntimeInitialized = function () { + try { + C._crypto_secretbox_keybytes(), A(); + } catch (A) { + I(A); + } + }, C.useBackupModule = function () { + var A, + I = void 0 !== (I = {}) ? I : {}, + g = {}; + + for (A in I) { + I.hasOwnProperty(A) && (g[A] = I[A]); + } + + var C, + Q, + E, + i, + e = [], + o = !1; + C = "object" == (typeof window === "undefined" ? "undefined" : _typeof(window)), Q = "function" == typeof importScripts, E = "object" == (typeof process === "undefined" ? "undefined" : _typeof(process)) && "object" == _typeof(process.versions) && "string" == typeof process.versions.node, o = E && !C && !Q, i = !C && !o && !Q; + var c, + a, + n, + r, + t, + f = ""; + o ? (f = __dirname + "/", c = function c(A, I) { + var g; + return (g = iA(A)) || (r || (r = __webpack_require__(/*! fs */ 0)), t || (t = __webpack_require__(/*! path */ "./node_modules/path-browserify/index.js")), A = t.normalize(A), g = r.readFileSync(A)), I ? g : g.toString(); + }, n = function n(A) { + var I = c(A, !0); + return I.buffer || (I = new Uint8Array(I)), D(I.buffer), I; + }, process.argv.length > 1 && process.argv[1].replace(/\\/g, "/"), e = process.argv.slice(2), true && (module.exports = I), process.on("unhandledRejection", j), I.inspect = function () { + return "[Emscripten Module object]"; + }) : i ? ("undefined" != typeof read && (c = function c(A) { + var I = iA(A); + return I ? QA(I) : read(A); + }), n = function n(A) { + var I; + return (I = iA(A)) ? I : "function" == typeof readbuffer ? new Uint8Array(readbuffer(A)) : (D("object" == _typeof(I = read(A, "binary"))), I); + }, "undefined" != typeof scriptArgs ? e = scriptArgs : void 0 !== arguments && (e = arguments), "undefined" != typeof print && ("undefined" == typeof console && (console = {}), console.log = print, console.warn = console.error = "undefined" != typeof printErr ? printErr : print)) : (C || Q) && (Q ? f = self.location.href : document.currentScript && (f = document.currentScript.src), f = 0 !== f.indexOf("blob:") ? f.substr(0, f.lastIndexOf("/") + 1) : "", c = function c(A) { + try { + var I = new XMLHttpRequest(); + return I.open("GET", A, !1), I.send(null), I.responseText; + } catch (I) { + var g = iA(A); + if (g) return QA(g); + throw I; + } + }, Q && (n = function n(A) { + try { + var I = new XMLHttpRequest(); + return I.open("GET", A, !1), I.responseType = "arraybuffer", I.send(null), new Uint8Array(I.response); + } catch (I) { + var g = iA(A); + if (g) return g; + throw I; + } + }), a = function a(A, I, g) { + var B = new XMLHttpRequest(); + B.open("GET", A, !0), B.responseType = "arraybuffer", B.onload = function () { + if (200 == B.status || 0 == B.status && B.response) I(B.response);else { + var C = iA(A); + C ? I(C.buffer) : g(); + } + }, B.onerror = g, B.send(null); + }); + var w = I.print || void 0, + y = I.printErr || void 0; + + for (A in g) { + g.hasOwnProperty(A) && (I[A] = g[A]); + } + + g = null, I.arguments && (e = I.arguments), I.thisProgram && I.thisProgram, I.quit && I.quit, new Array(8); + var s = 0; + I.wasmBinary && I.wasmBinary, I.noExitRuntime && I.noExitRuntime; + var h = !1; + + function D(A, I) { + A || j("Assertion failed: " + I); + } + + var F, + p, + u, + H, + k, + l, + _, + G = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0; + + function _d(A, I) { + return A ? function (A, I, g) { + for (var B = I + g, C = I; A[C] && !(C >= B);) { + ++C; + } + + if (C - I > 16 && A.subarray && G) return G.decode(A.subarray(I, C)); + + for (var Q = ""; I < C;) { + var E = A[I++]; + + if (128 & E) { + var i = 63 & A[I++]; + + if (192 != (224 & E)) { + var e = 63 & A[I++]; + if ((E = 224 == (240 & E) ? (15 & E) << 12 | i << 6 | e : (7 & E) << 18 | i << 12 | e << 6 | 63 & A[I++]) < 65536) Q += String.fromCharCode(E);else { + var o = E - 65536; + Q += String.fromCharCode(55296 | o >> 10, 56320 | 1023 & o); + } + } else Q += String.fromCharCode((31 & E) << 6 | i); + } else Q += String.fromCharCode(E); + } + + return Q; + }(u, A, I) : ""; + } + + function Y(A, I) { + return A % I > 0 && (A += I - A % I), A; + } + + function M(A) { + F = A, I.HEAP8 = p = new Int8Array(A), I.HEAP16 = H = new Int16Array(A), I.HEAP32 = k = new Int32Array(A), I.HEAPU8 = u = new Uint8Array(A), I.HEAPU16 = new Uint16Array(A), I.HEAPU32 = new Uint32Array(A), I.HEAPF32 = l = new Float32Array(A), I.HEAPF64 = _ = new Float64Array(A); + } + + "undefined" != typeof TextDecoder && new TextDecoder("utf-16le"); + var S = I.TOTAL_MEMORY || 16777216; + + function U(A) { + for (; A.length > 0;) { + var g = A.shift(); + + if ("function" != typeof g) { + var B = g.func; + "number" == typeof B ? void 0 === g.arg ? I.dynCall_v(B) : I.dynCall_vi(B, g.arg) : B(void 0 === g.arg ? null : g.arg); + } else g(); + } + } + + S = (F = I.buffer ? I.buffer : new ArrayBuffer(S)).byteLength, M(F), k[8808] = 5278304; + var v = [], + b = [], + J = [], + P = [], + R = Math.abs, + N = Math.ceil, + m = Math.floor, + L = Math.min, + x = 0, + K = null, + X = null; + + function j(A) { + throw I.onAbort && I.onAbort(A), w(A += ""), y(A), h = !0, "abort(" + A + "). Build with -s ASSERTIONS=1 for more info."; + } + + I.preloadedImages = {}, I.preloadedAudios = {}; + var T, + q, + V = null, + z = "data:application/octet-stream;base64,"; + + function W(A) { + return String.prototype.startsWith ? A.startsWith(z) : 0 === A.indexOf(z); + } + + var O = [function () { + return I.getRandomValue(); + }, function () { + if (void 0 === I.getRandomValue) try { + var A = "object" == (typeof window === "undefined" ? "undefined" : _typeof(window)) ? window : self, + g = void 0 !== A.crypto ? A.crypto : A.msCrypto, + B = function B() { + var A = new Uint32Array(1); + return g.getRandomValues(A), A[0] >>> 0; + }; + + B(), I.getRandomValue = B; + } catch (A) { + try { + var C = __webpack_require__(/*! crypto */ "./node_modules/crypto-browserify/index.js"), + Q = function Q() { + var A = C.randomBytes(4); + return (A[0] << 24 | A[1] << 16 | A[2] << 8 | A[3]) >>> 0; + }; + + Q(), I.getRandomValue = Q; + } catch (A) { + throw "No secure random number generator found"; + } + } + }]; + + function Z(A) { + return A; + } + + function $(A) { + return A.replace(/\b__Z[\w\d_]+/g, function (A) { + var I = Z(A); + return A === I ? A : I + " [" + A + "]"; + }); + } + + function AA() { + var A = new Error(); + + if (!A.stack) { + try { + throw new Error(0); + } catch (I) { + A = I; + } + + if (!A.stack) return "(no stack trace available)"; + } + + return A.stack.toString(); + } + + function IA() { + return p.length; + } + + function gA(A) { + try { + var I = new ArrayBuffer(A); + if (I.byteLength != A) return; + return new Int8Array(I).set(p), aA(I), M(I), 1; + } catch (A) {} + } + + function BA(A) { + return I.___errno_location && (k[I.___errno_location() >> 2] = A), A; + } + + V = "data:application/octet-stream;base64,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v2xF/xZF9QEXy7IAqmOqAEH4bwAlbJn/QCVFAABYPv5ZlJD/v0TgAfEnNQApy+3/kX7C/90q/f8ZY5cAYf3fAUpzMf8Gr0j/O7DLAHy3+QHk5GMAgQzP/qjAw//MsBD+mOqrAE0lVf8heIf/jsLjAR/WOgDVu33/6C48/750Kv6XshP/Mz7t/szswQDC6DwArCKd/70QuP5nA1//jekk/ikZC/8Vw6YAdvUtAEPVlf+fDBL/u6TjAaAZBQAMTsMBK8XhADCOKf7Emzz/38cSAZGInAD8dan+keLuAO8XawBttbz/5nAx/kmq7f/nt+P/UNwUAMJrfwF/zWUALjTFAdKrJP9YA1r/OJeNAGC7//8qTsgA/kZGAfR9qADMRIoBfNdGAGZCyP4RNOQAddyP/sv4ewA4Eq7/upek/zPo0AGg5Cv/+R0ZAUS+PwANAAAAAP8AAAAA9QAAAAAAAPsAAAAAAAD9AAAAAPMAAAAABwAAAAAAAwAAAADzAAAAAAUAAAAAAAAAAAsAAAAAAAsAAAAA8wAAAAAAAP0AAAAAAP8AAAAAAwAAAAD1AAAAAAAAAA8AAAAAAP8AAAAA/wAAAAAHAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbolY/CsiewRcP0ifLvmPDV36wF08YzObE4AohtU/wFxxdqcD1N2E+6PAt2DRBnDyogU/osOczGTsf9d5KsA3rs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////3/t0/VcGmMSWNac96Le+d4UAAAAAAAAAAAAAAAAAAAAEAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuABfnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8RV+z///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f1NpZ0VkMjU1MTkgbm8gRWQyNTUxOSBjb2xsaXNpb25zAQAAAAAAAAAAAAAAAAAAAFMtPmJ1ZmxlbiA8PSBCTEFLRTJCX0JMT0NLQllURVMAY3J5cHRvX2dlbmVyaWNoYXNoL2JsYWtlMmIvcmVmL2JsYWtlMmItcmVmLmMAYmxha2UyYl9maW5hbABvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAJGFyZ29uMmlkACRhcmdvbjJpACR2PQAkbT0ALHQ9ACxwPQAkYXJnb24yaWQkdj0AJGFyZ29uMmkkdj0AJGFyZ29uMmlkJAAkYXJnb24yaSQAInsgcmV0dXJuIE1vZHVsZS5nZXRSYW5kb21WYWx1ZSgpOyB9IgB7IGlmIChNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPT09IHVuZGVmaW5lZCkgeyB0cnkgeyB2YXIgd2luZG93XyA9ICdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogc2VsZjsgdmFyIGNyeXB0b18gPSB0eXBlb2Ygd2luZG93Xy5jcnlwdG8gIT09ICd1bmRlZmluZWQnID8gd2luZG93Xy5jcnlwdG8gOiB3aW5kb3dfLm1zQ3J5cHRvOyB2YXIgcmFuZG9tVmFsdWVzU3RhbmRhcmQgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IG5ldyBVaW50MzJBcnJheSgxKTsgY3J5cHRvXy5nZXRSYW5kb21WYWx1ZXMoYnVmKTsgcmV0dXJuIGJ1ZlswXSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVzU3RhbmRhcmQoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVzU3RhbmRhcmQ7IH0gY2F0Y2ggKGUpIHsgdHJ5IHsgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB2YXIgcmFuZG9tVmFsdWVOb2RlSlMgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IGNyeXB0b1sncmFuZG9tQnl0ZXMnXSg0KTsgcmV0dXJuIChidWZbMF0gPDwgMjQgfCBidWZbMV0gPDwgMTYgfCBidWZbMl0gPDwgOCB8IGJ1ZlszXSkgPj4+IDA7IH07IHJhbmRvbVZhbHVlTm9kZUpTKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlTm9kZUpTOyB9IGNhdGNoIChlKSB7IHRocm93ICdObyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm91bmQnOyB9IH0gfSB9AExpYnNvZGl1bURSR2J1Zl9sZW4gPD0gU0laRV9NQVgAcmFuZG9tYnl0ZXMvcmFuZG9tYnl0ZXMuYwByYW5kb21ieXRlcwBiNjRfcG9zIDw9IGI2NF9sZW4Ac29kaXVtL2NvZGVjcy5jAHNvZGl1bV9iaW4yYmFzZTY0ADEuMC4xOA=="; + var CA = !1; + + function QA(A) { + for (var I = [], g = 0; g < A.length; g++) { + var B = A[g]; + B > 255 && (CA && D(!1, "Character code " + B + " (" + String.fromCharCode(B) + ") at offset " + g + " not in 0x00-0xFF."), B &= 255), I.push(String.fromCharCode(B)); + } + + return I.join(""); + } + + var EA = "function" == typeof atob ? atob : function (A) { + var I, + g, + B, + C, + Q, + E, + i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + e = "", + o = 0; + A = A.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + do { + I = i.indexOf(A.charAt(o++)) << 2 | (C = i.indexOf(A.charAt(o++))) >> 4, g = (15 & C) << 4 | (Q = i.indexOf(A.charAt(o++))) >> 2, B = (3 & Q) << 6 | (E = i.indexOf(A.charAt(o++))), e += String.fromCharCode(I), 64 !== Q && (e += String.fromCharCode(g)), 64 !== E && (e += String.fromCharCode(B)); + } while (o < A.length); + + return e; + }; + + function iA(A) { + if (W(A)) return function (A) { + if ("boolean" == typeof o && o) { + var I; + + try { + I = Buffer.from(A, "base64"); + } catch (g) { + I = new Buffer(A, "base64"); + } + + return new Uint8Array(I.buffer, I.byteOffset, I.byteLength); + } + + try { + for (var g = EA(A), B = new Uint8Array(g.length), C = 0; C < g.length; ++C) { + B[C] = g.charCodeAt(C); + } + + return B; + } catch (A) { + throw new Error("Converting base64 string to bytes failed."); + } + }(A.slice(z.length)); + } + + var eA, + oA, + cA = function (A, I, g) { + "almost asm"; + + var B = new A.Int8Array(g), + C = new A.Int32Array(g), + Q = new A.Uint8Array(g), + E = A.Math.imul, + i = A.Math.clz32, + e = I.b, + o = I.c, + c = I.d, + a = I.f, + n = I.g, + r = I.h, + t = I.i, + f = I.j, + w = I.k, + y = 35424; + + function s(A, I) { + A |= 0, I |= 0; + var g, + E, + i, + e, + c, + a, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0, + m = 0, + L = 0, + x = 0, + K = 0, + X = 0, + j = 0, + T = 0, + q = 0, + V = 0, + z = 0, + W = 0, + O = 0, + Z = 0, + $ = 0, + AA = 0, + IA = 0, + gA = 0, + BA = 0, + CA = 0, + QA = 0, + EA = 0, + iA = 0, + eA = 0, + oA = 0, + cA = 0, + aA = 0, + nA = 0, + rA = 0, + tA = 0, + fA = 0, + wA = 0, + yA = 0, + sA = 0; + g = y, E = y = y + 63 & -64, y = y + 256 | 0, n = 0; + + do { + f = 0 | qI(I + (n << 3) | 0), t = 0 | o(), C[(r = E + 128 + (n << 3) | 0) >> 2] = f, C[r + 4 >> 2] = t, n = n + 1 | 0; + } while (16 != (0 | n)); + + n = A, r = (I = E) + 64 | 0; + + do { + B[I >> 0] = 0 | B[n >> 0], I = I + 1 | 0, n = n + 1 | 0; + } while ((0 | I) < (0 | r)); + + for (C[E + 88 >> 2] = 1595750129, C[E + 88 + 4 >> 2] = -1521486534, X = -1377402159 ^ (Q[A + 64 >> 0] | Q[A + 64 + 1 >> 0] << 8 | Q[A + 64 + 2 >> 0] << 16 | Q[A + 64 + 3 >> 0] << 24), K = 1359893119 ^ (Q[A + 64 + 4 >> 0] | Q[A + 64 + 4 + 1 >> 0] << 8 | Q[A + 64 + 4 + 2 >> 0] << 16 | Q[A + 64 + 4 + 3 >> 0] << 24), S = 725511199 ^ (Q[A + 72 >> 0] | Q[A + 72 + 1 >> 0] << 8 | Q[A + 72 + 2 >> 0] << 16 | Q[A + 72 + 3 >> 0] << 24), U = -1694144372 ^ (Q[A + 72 + 4 >> 0] | Q[A + 72 + 4 + 1 >> 0] << 8 | Q[A + 72 + 4 + 2 >> 0] << 16 | Q[A + 72 + 4 + 3 >> 0] << 24), u = -79577749 ^ (Q[A + 80 >> 0] | Q[A + 80 + 1 >> 0] << 8 | Q[A + 80 + 2 >> 0] << 16 | Q[A + 80 + 3 >> 0] << 24), H = 528734635 ^ (Q[A + 80 + 4 >> 0] | Q[A + 80 + 4 + 1 >> 0] << 8 | Q[A + 80 + 4 + 2 >> 0] << 16 | Q[A + 80 + 4 + 3 >> 0] << 24), AA = 327033209 ^ (Q[A + 88 >> 0] | Q[A + 88 + 1 >> 0] << 8 | Q[A + 88 + 2 >> 0] << 16 | Q[A + 88 + 3 >> 0] << 24), $ = 1541459225 ^ (Q[A + 88 + 4 >> 0] | Q[A + 88 + 4 + 1 >> 0] << 8 | Q[A + 88 + 4 + 2 >> 0] << 16 | Q[A + 88 + 4 + 3 >> 0] << 24), h = 0 | C[E + 32 >> 2], D = 0 | C[E + 32 + 4 >> 2], D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (yA = 0 | vg(0 | (j = 0 | C[E + 128 >> 2]), 0 | (T = 0 | C[E + 128 + 4 >> 2]), 0 | h, 0 | D)), 0 | (wA = 0 | o()), 0 | C[E >> 2], 0 | C[E + 4 >> 2])) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), -205731576, 1779033703)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), IA = 0 | C[E + 128 + 8 >> 2], gA = 0 | C[E + 128 + 8 + 4 >> 2], X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | D, 0 | h, 0 | wA, 0 | yA)), 0 | o(), 0 | IA, 0 | gA)) ^ K, (wA = 0 | o()) ^ X, 16), K = 0 | o(), C[E + 96 >> 2] = X, C[E + 96 + 4 >> 2] = K, f = 0 | vg(0 | X, 0 | K, 0 | I, 0 | f), I = 0 | o(), C[E + 64 >> 2] = f, C[E + 64 + 4 >> 2] = I, h = 0 | ZI(f ^ D, I ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, W = 0 | C[E + 40 >> 2], O = 0 | C[E + 40 + 4 >> 2], O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI((nA = 0 | vg(0 | (aA = 0 | vg(0 | (r = 0 | C[E + 128 + 16 >> 2]), 0 | (n = 0 | C[E + 128 + 16 + 4 >> 2]), 0 | W, 0 | O)), 0 | (nA = 0 | o()), 0 | C[E + 8 >> 2], 0 | C[E + 8 + 4 >> 2])) ^ S, (aA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), -2067093701, -1150833019)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), p = 0 | C[E + 128 + 24 >> 2], k = 0 | C[E + 128 + 24 + 4 >> 2], S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | O, 0 | W, 0 | nA, 0 | aA)), 0 | o(), 0 | p, 0 | k)) ^ U, (nA = 0 | o()) ^ S, 16), U = 0 | o(), C[E + 104 >> 2] = S, C[E + 104 + 4 >> 2] = U, F = 0 | vg(0 | S, 0 | U, 0 | s, 0 | F), s = 0 | o(), C[E + 72 >> 2] = F, C[E + 72 + 4 >> 2] = s, W = 0 | ZI(F ^ O, s ^ W, 63), O = 0 | o(), m = 0 | C[E + 48 >> 2], L = 0 | C[E + 48 + 4 >> 2], L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI((oA = 0 | vg(0 | (eA = 0 | vg(0 | (a = 0 | C[E + 128 + 32 >> 2]), 0 | (rA = 0 | C[E + 128 + 32 + 4 >> 2]), 0 | m, 0 | L)), 0 | (oA = 0 | o()), 0 | C[E + 16 >> 2], 0 | C[E + 16 + 4 >> 2])) ^ u, (eA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), -23791573, 1013904242)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), i = 0 | C[E + 128 + 40 >> 2], G = 0 | C[E + 128 + 40 + 4 >> 2], m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | L, 0 | m, 0 | oA, 0 | eA)), 0 | o(), 0 | i, 0 | G)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), Y = 0 | C[E + 56 >> 2], d = 0 | C[E + 56 + 4 >> 2], d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (QA = 0 | vg(0 | (_ = 0 | C[E + 128 + 48 >> 2]), 0 | (l = 0 | C[E + 128 + 48 + 4 >> 2]), 0 | Y, 0 | d)), 0 | (EA = 0 | o()), 0 | C[E + 24 >> 2], 0 | C[E + 24 + 4 >> 2])) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 1595750129, -1521486534)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), M = 0 | C[E + 128 + 56 >> 2], v = 0 | C[E + 128 + 56 + 4 >> 2], Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | d, 0 | Y, 0 | EA, 0 | QA)), 0 | o(), 0 | M, 0 | v)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), q = 0 | C[E + 128 + 64 >> 2], V = 0 | C[E + 128 + 64 + 4 >> 2], O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | W, 0 | O, 0 | yA, 0 | wA)), 0 | o(), 0 | q, 0 | V)) ^ AA, (yA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), c = 0 | C[E + 128 + 72 >> 2], cA = 0 | C[E + 128 + 72 + 4 >> 2], AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | O, 0 | W, 0 | wA, 0 | yA)), 0 | o(), 0 | c, 0 | cA)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z), z = 0 | o(), C[E + 80 >> 2] = Z, C[E + 80 + 4 >> 2] = z, W = 0 | ZI(Z ^ O, z ^ W, 63), O = 0 | o(), BA = 0 | C[E + 128 + 80 >> 2], CA = 0 | C[E + 128 + 80 + 4 >> 2], L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | m, 0 | L, 0 | aA, 0 | nA)), 0 | o(), 0 | BA, 0 | CA)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), b = 0 | C[E + 128 + 88 >> 2], J = 0 | C[E + 128 + 88 + 4 >> 2], m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | L, 0 | m, 0 | nA, 0 | aA)), 0 | o(), 0 | b, 0 | J)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), t = 0 | C[E + 128 + 96 >> 2], w = 0 | C[E + 128 + 96 + 4 >> 2], d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | Y, 0 | d, 0 | eA, 0 | oA)), 0 | o(), 0 | t, 0 | w)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), e = 0 | C[E + 128 + 104 >> 2], iA = 0 | C[E + 128 + 104 + 4 >> 2], Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | d, 0 | Y, 0 | oA, 0 | eA)), 0 | o(), 0 | e, 0 | iA)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), tA = 0 | C[E + 128 + 112 >> 2], fA = 0 | C[E + 128 + 112 + 4 >> 2], D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (EA = 0 | vg(0 | QA, 0 | EA, 0 | h, 0 | D)), 0 | o(), 0 | tA, 0 | fA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), P = 0 | C[E + 128 + 120 >> 2], R = 0 | C[E + 128 + 120 + 4 >> 2], h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | D, 0 | h, 0 | EA, 0 | QA)), 0 | o(), 0 | P, 0 | R)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | tA, 0 | fA, 0 | yA, 0 | wA)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | BA, 0 | CA)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | a, 0 | rA)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | q, 0 | V)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | c, 0 | cA)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | P, 0 | R, 0 | oA, 0 | eA)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | e, 0 | iA)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | _, 0 | l)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | IA, 0 | gA)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | t, 0 | w)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | j, 0 | T)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | r, 0 | n)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | b, 0 | J)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | M, 0 | v)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | i, 0 | G)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | p, 0 | k)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | b, 0 | J)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | q, 0 | V)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | t, 0 | w)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | j, 0 | T)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | i, 0 | G)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | r, 0 | n)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | P, 0 | R)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | e, 0 | iA)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | BA, 0 | CA)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | tA, 0 | fA)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | p, 0 | k)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | _, 0 | l)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | M, 0 | v)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | IA, 0 | gA)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | c, 0 | cA)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | a, 0 | rA)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | M, 0 | v)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | c, 0 | cA)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | p, 0 | k)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | IA, 0 | gA)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | e, 0 | iA)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | t, 0 | w)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | b, 0 | J)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | tA, 0 | fA)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | r, 0 | n)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | _, 0 | l)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | i, 0 | G)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | BA, 0 | CA)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | a, 0 | rA)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | j, 0 | T)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | P, 0 | R)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | q, 0 | V)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | c, 0 | cA)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | j, 0 | T)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | i, 0 | G)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | M, 0 | v)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | r, 0 | n)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | a, 0 | rA)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | BA, 0 | CA)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | P, 0 | R)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | tA, 0 | fA)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | IA, 0 | gA)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | b, 0 | J)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | t, 0 | w)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | _, 0 | l)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | q, 0 | V)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | p, 0 | k)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | e, 0 | iA)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | r, 0 | n)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | t, 0 | w)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | _, 0 | l)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | BA, 0 | CA)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | j, 0 | T)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | b, 0 | J)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | q, 0 | V)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | p, 0 | k)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | a, 0 | rA)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | e, 0 | iA)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | M, 0 | v)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | i, 0 | G)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | P, 0 | R)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | tA, 0 | fA)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | IA, 0 | gA)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | c, 0 | cA)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | t, 0 | w)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | i, 0 | G)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | IA, 0 | gA)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | P, 0 | R)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | tA, 0 | fA)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | e, 0 | iA)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | a, 0 | rA)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | BA, 0 | CA)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | j, 0 | T)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | M, 0 | v)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | _, 0 | l)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | p, 0 | k)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | c, 0 | cA)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | r, 0 | n)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | q, 0 | V)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | b, 0 | J)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | e, 0 | iA)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | b, 0 | J)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | M, 0 | v)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | tA, 0 | fA)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | t, 0 | w)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | IA, 0 | gA)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | p, 0 | k)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | c, 0 | cA)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | i, 0 | G)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | j, 0 | T)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | P, 0 | R)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | a, 0 | rA)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | q, 0 | V)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | _, 0 | l)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | r, 0 | n)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | BA, 0 | CA)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | _, 0 | l)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | P, 0 | R)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | tA, 0 | fA)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | c, 0 | cA)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | b, 0 | J)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | p, 0 | k)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | j, 0 | T)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | q, 0 | V)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | t, 0 | w)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | r, 0 | n)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | e, 0 | iA)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | M, 0 | v)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | IA, 0 | gA)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | a, 0 | rA)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | BA, 0 | CA)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | i, 0 | G)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | BA, 0 | CA)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | r, 0 | n)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | q, 0 | V)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | a, 0 | rA)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | M, 0 | v)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | _, 0 | l)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | IA, 0 | gA)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | i, 0 | G)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | P, 0 | R)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | b, 0 | J)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | c, 0 | cA)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | tA, 0 | fA)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | p, 0 | k)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | t, 0 | w)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | e, 0 | iA)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | j, 0 | T)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | j, 0 | T)), 0 | o(), 0 | h, 0 | D)) ^ X, (yA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | IA, 0 | gA)), 0 | o(), 0 | D, 0 | h)) ^ K, (wA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (sA = 0 | vg(0 | W, 0 | O, 0 | r, 0 | n)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | p, 0 | k)), 0 | o(), 0 | O, 0 | W)) ^ U, (nA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (sA = 0 | vg(0 | m, 0 | L, 0 | a, 0 | rA)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | i, 0 | G)), 0 | o(), 0 | L, 0 | m)) ^ H, (oA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | Y, 0 | d, 0 | _, 0 | l)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | M, 0 | v)), 0 | o(), 0 | d, 0 | Y)) ^ $, (EA = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (wA = 0 | vg(0 | (wA = 0 | vg(0 | yA, 0 | wA, 0 | q, 0 | V)), 0 | o(), 0 | W, 0 | O)), $ ^ (yA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), AA = 0 | ZI((yA = 0 | vg(0 | (yA = 0 | vg(0 | wA, 0 | yA, 0 | c, 0 | cA)), 0 | o(), 0 | O, 0 | W)) ^ $, (wA = 0 | o()) ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, W = 0 | ZI((Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z)) ^ O, (z = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((nA = 0 | vg(0 | (nA = 0 | vg(0 | aA, 0 | nA, 0 | BA, 0 | CA)), 0 | o(), 0 | m, 0 | L)) ^ X, (aA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((x = 0 | vg(0 | (X = 0 | ZI((aA = 0 | vg(0 | (aA = 0 | vg(0 | nA, 0 | aA, 0 | b, 0 | J)), 0 | o(), 0 | L, 0 | m)) ^ K, (nA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | N, 0 | x)) ^ L, (N = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((oA = 0 | vg(0 | (oA = 0 | vg(0 | eA, 0 | oA, 0 | t, 0 | w)), 0 | o(), 0 | Y, 0 | d)) ^ S, (eA = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((f = 0 | vg(0 | (S = 0 | ZI((eA = 0 | vg(0 | (eA = 0 | vg(0 | oA, 0 | eA, 0 | e, 0 | iA)), 0 | o(), 0 | d, 0 | Y)) ^ U, (oA = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | I, 0 | f)) ^ d, (I = 0 | o()) ^ Y, 63), d = 0 | o(), D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((EA = 0 | vg(0 | (sA = 0 | vg(0 | h, 0 | D, 0 | tA, 0 | fA)), 0 | o(), 0 | QA, 0 | EA)) ^ u, (QA = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((F = 0 | vg(0 | (u = 0 | ZI((QA = 0 | vg(0 | (QA = 0 | vg(0 | EA, 0 | QA, 0 | P, 0 | R)), 0 | o(), 0 | D, 0 | h)) ^ H, (EA = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | s, 0 | F)) ^ D, (s = 0 | o()) ^ h, 63), D = 0 | o(), D = 0 | ZI((I = 0 | vg(0 | (K = 0 | ZI((fA = 0 | vg(0 | (fA = 0 | vg(0 | yA, 0 | wA, 0 | tA, 0 | fA)), 0 | o(), 0 | h, 0 | D)) ^ X, (tA = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | f, 0 | I)) ^ h, (f = 0 | o()) ^ D, 24), h = 0 | o(), h = 0 | ZI((f = 0 | vg(0 | (X = 0 | ZI((CA = 0 | vg(0 | (CA = 0 | vg(0 | fA, 0 | tA, 0 | BA, 0 | CA)), 0 | o(), 0 | D, 0 | h)) ^ K, (BA = 0 | o()) ^ X, 16)), 0 | (K = 0 | o()), 0 | I, 0 | f)) ^ D, (I = 0 | o()) ^ h, 63), D = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = D, O = 0 | ZI((s = 0 | vg(0 | (U = 0 | ZI(S ^ (nA = 0 | vg(0 | (rA = 0 | vg(0 | W, 0 | O, 0 | a, 0 | rA)), 0 | o(), 0 | aA, 0 | nA)), U ^ (aA = 0 | o()), 32)), 0 | (S = 0 | o()), 0 | F, 0 | s)) ^ W, (F = 0 | o()) ^ O, 24), W = 0 | o(), W = 0 | ZI((F = 0 | vg(0 | (S = 0 | ZI((V = 0 | vg(0 | (V = 0 | vg(0 | nA, 0 | aA, 0 | q, 0 | V)), 0 | o(), 0 | O, 0 | W)) ^ U, (q = 0 | o()) ^ S, 16)), 0 | (U = 0 | o()), 0 | s, 0 | F)) ^ O, (s = 0 | o()) ^ W, 63), O = 0 | o(), L = 0 | ZI((z = 0 | vg(0 | (H = 0 | ZI(u ^ (oA = 0 | vg(0 | (cA = 0 | vg(0 | m, 0 | L, 0 | c, 0 | cA)), 0 | o(), 0 | eA, 0 | oA)), H ^ (eA = 0 | o()), 32)), 0 | (u = 0 | o()), 0 | Z, 0 | z)) ^ m, (Z = 0 | o()) ^ L, 24), m = 0 | o(), m = 0 | ZI((Z = 0 | vg(0 | (u = 0 | ZI((R = 0 | vg(0 | (R = 0 | vg(0 | oA, 0 | eA, 0 | P, 0 | R)), 0 | o(), 0 | L, 0 | m)) ^ H, (P = 0 | o()) ^ u, 16)), 0 | (H = 0 | o()), 0 | z, 0 | Z)) ^ L, (z = 0 | o()) ^ m, 63), L = 0 | o(), d = 0 | ZI((N = 0 | vg(0 | ($ = 0 | ZI((EA = 0 | vg(0 | (iA = 0 | vg(0 | Y, 0 | d, 0 | e, 0 | iA)), 0 | o(), 0 | QA, 0 | EA)) ^ AA, (QA = 0 | o()) ^ $, 32)), 0 | (AA = 0 | o()), 0 | x, 0 | N)) ^ Y, (x = 0 | o()) ^ d, 24), Y = 0 | o(), Y = 0 | ZI((x = 0 | vg(0 | (AA = 0 | ZI((l = 0 | vg(0 | (l = 0 | vg(0 | EA, 0 | QA, 0 | _, 0 | l)), 0 | o(), 0 | d, 0 | Y)) ^ $, (_ = 0 | o()) ^ AA, 16)), 0 | ($ = 0 | o()), 0 | N, 0 | x)) ^ d, (N = 0 | o()) ^ Y, 63), d = 0 | o(), O = 0 | ZI((z = 0 | vg(0 | ($ = 0 | ZI(AA ^ (gA = 0 | vg(0 | (gA = 0 | vg(0 | CA, 0 | BA, 0 | IA, 0 | gA)), 0 | o(), 0 | W, 0 | O)), $ ^ (IA = 0 | o()), 32)), 0 | (AA = 0 | o()), 0 | Z, 0 | z)) ^ W, (Z = 0 | o()) ^ O, 24), W = 0 | o(), w = 0 | vg(0 | (w = 0 | vg(0 | gA, 0 | IA, 0 | t, 0 | w)), 0 | o(), 0 | O, 0 | W), t = 0 | o(), C[E >> 2] = w, C[E + 4 >> 2] = t, AA = 0 | ZI(w ^ $, t ^ AA, 16), $ = 0 | o(), C[E + 120 >> 2] = AA, C[E + 120 + 4 >> 2] = $, Z = 0 | vg(0 | AA, 0 | $, 0 | z, 0 | Z), z = 0 | o(), C[E + 80 >> 2] = Z, C[E + 80 + 4 >> 2] = z, W = 0 | ZI(Z ^ O, z ^ W, 63), z = 0 | o(), C[E + 40 >> 2] = W, C[E + 40 + 4 >> 2] = z, L = 0 | ZI((N = 0 | vg(0 | (K = 0 | ZI((T = 0 | vg(0 | (T = 0 | vg(0 | V, 0 | q, 0 | j, 0 | T)), 0 | o(), 0 | m, 0 | L)) ^ X, (j = 0 | o()) ^ K, 32)), 0 | (X = 0 | o()), 0 | x, 0 | N)) ^ m, (x = 0 | o()) ^ L, 24), m = 0 | o(), n = 0 | vg(0 | (n = 0 | vg(0 | T, 0 | j, 0 | r, 0 | n)), 0 | o(), 0 | L, 0 | m), r = 0 | o(), C[E + 8 >> 2] = n, C[E + 8 + 4 >> 2] = r, X = 0 | ZI(n ^ K, r ^ X, 16), K = 0 | o(), C[E + 96 >> 2] = X, C[E + 96 + 4 >> 2] = K, x = 0 | vg(0 | X, 0 | K, 0 | N, 0 | x), N = 0 | o(), C[E + 88 >> 2] = x, C[E + 88 + 4 >> 2] = N, m = 0 | ZI(x ^ L, N ^ m, 63), N = 0 | o(), C[E + 48 >> 2] = m, C[E + 48 + 4 >> 2] = N, d = 0 | ZI((I = 0 | vg(0 | (U = 0 | ZI((J = 0 | vg(0 | (J = 0 | vg(0 | R, 0 | P, 0 | b, 0 | J)), 0 | o(), 0 | Y, 0 | d)) ^ S, (b = 0 | o()) ^ U, 32)), 0 | (S = 0 | o()), 0 | f, 0 | I)) ^ Y, (f = 0 | o()) ^ d, 24), Y = 0 | o(), v = 0 | vg(0 | (v = 0 | vg(0 | J, 0 | b, 0 | M, 0 | v)), 0 | o(), 0 | d, 0 | Y), M = 0 | o(), C[E + 16 >> 2] = v, C[E + 16 + 4 >> 2] = M, S = 0 | ZI(v ^ U, M ^ S, 16), M = 0 | o(), C[E + 104 >> 2] = S, C[E + 104 + 4 >> 2] = M, f = 0 | vg(0 | S, 0 | M, 0 | I, 0 | f), I = 0 | o(), C[E + 64 >> 2] = f, C[E + 64 + 4 >> 2] = I, Y = 0 | ZI(f ^ d, I ^ Y, 63), d = 0 | o(), C[E + 56 >> 2] = Y, C[E + 56 + 4 >> 2] = d, D = 0 | ZI((s = 0 | vg(0 | (H = 0 | ZI((_ = 0 | vg(0 | (G = 0 | vg(0 | h, 0 | D, 0 | i, 0 | G)), 0 | o(), 0 | l, 0 | _)) ^ u, (l = 0 | o()) ^ H, 32)), 0 | (u = 0 | o()), 0 | F, 0 | s)) ^ h, (F = 0 | o()) ^ D, 24), h = 0 | o(), k = 0 | vg(0 | (k = 0 | vg(0 | _, 0 | l, 0 | p, 0 | k)), 0 | o(), 0 | D, 0 | h), p = 0 | o(), C[E + 24 >> 2] = k, C[E + 24 + 4 >> 2] = p, u = 0 | ZI(k ^ H, p ^ u, 16), p = 0 | o(), C[E + 112 >> 2] = u, C[E + 112 + 4 >> 2] = p, F = 0 | vg(0 | u, 0 | p, 0 | s, 0 | F), s = 0 | o(), C[E + 72 >> 2] = F, C[E + 72 + 4 >> 2] = s, h = 0 | ZI(F ^ D, s ^ h, 63), s = 0 | o(), C[E + 32 >> 2] = h, C[E + 32 + 4 >> 2] = s, f = w ^ (Q[A >> 0] | Q[A + 1 >> 0] << 8 | Q[A + 2 >> 0] << 16 | Q[A + 3 >> 0] << 24) ^ f, I = t ^ (Q[A + 4 >> 0] | Q[A + 4 + 1 >> 0] << 8 | Q[A + 4 + 2 >> 0] << 16 | Q[A + 4 + 3 >> 0] << 24) ^ I, B[A >> 0] = f, B[A + 1 >> 0] = f >> 8, B[A + 2 >> 0] = f >> 16, B[A + 3 >> 0] = f >> 24, B[A + 4 >> 0] = I, B[A + 4 + 1 >> 0] = I >> 8, B[A + 4 + 2 >> 0] = I >> 16, B[A + 4 + 3 >> 0] = I >> 24, I = 1; yA = E + (I + 8 << 3) | 0, wA = n ^ (Q[(sA = A + (I << 3) | 0) >> 0] | Q[sA + 1 >> 0] << 8 | Q[sA + 2 >> 0] << 16 | Q[sA + 3 >> 0] << 24) ^ C[yA >> 2], yA = r ^ (Q[sA + 4 >> 0] | Q[sA + 4 + 1 >> 0] << 8 | Q[sA + 4 + 2 >> 0] << 16 | Q[sA + 4 + 3 >> 0] << 24) ^ C[yA + 4 >> 2], B[sA >> 0] = wA, B[sA + 1 >> 0] = wA >> 8, B[sA + 2 >> 0] = wA >> 16, B[sA + 3 >> 0] = wA >> 24, B[sA + 4 >> 0] = yA, B[sA + 4 + 1 >> 0] = yA >> 8, B[sA + 4 + 2 >> 0] = yA >> 16, B[sA + 4 + 3 >> 0] = yA >> 24, 8 != (0 | (I = I + 1 | 0));) { + n = 0 | C[E + (I << 3) >> 2], r = 0 | C[E + (I << 3) + 4 >> 2]; + } + + y = g; + } + + function h(A, I, g, C) { + A |= 0, g |= 0, C |= 0; + var Q, + E, + i, + e, + c, + a, + n, + r, + t, + f, + w, + y, + s, + h, + D, + F, + p, + u, + H, + k, + l, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0, + m = 0, + L = 0, + x = 0, + K = 0, + X = 0, + j = 0, + T = 0, + q = 0, + V = 0, + z = 0, + W = 0, + O = 0, + Z = 0, + $ = 0, + AA = 0, + IA = 0, + gA = 0, + BA = 0, + CA = 0, + QA = 0, + EA = 0, + iA = 0, + eA = 0, + oA = 0, + cA = 0, + aA = 0, + nA = 0, + rA = 0, + tA = 0, + fA = 0, + wA = 0, + yA = 0, + sA = 0, + hA = 0, + DA = 0, + FA = 0, + pA = 0, + uA = 0, + HA = 0, + kA = 0, + lA = 0, + _A = 0, + GA = 0, + dA = 0, + YA = 0, + MA = 0, + SA = 0, + UA = 0, + vA = 0, + bA = 0, + JA = 0, + PA = 0, + RA = 0, + NA = 0, + mA = 0, + LA = 0, + xA = 0, + KA = 0, + XA = 0, + jA = 0, + TA = 0, + qA = 0, + VA = 0, + zA = 0, + WA = 0, + OA = 0, + ZA = 0, + $A = 0, + AI = 0, + II = 0, + gI = 0, + BI = 0, + CI = 0, + QI = 0, + EI = 0, + iI = 0, + eI = 0, + oI = 0, + cI = 0, + aI = 0, + nI = 0, + rI = 0, + tI = 0, + fI = 0, + wI = 0, + yI = 0, + sI = 0, + hI = 0, + DI = 0, + FI = 0, + pI = 0, + uI = 0, + HI = 0, + lI = 0, + _I = 0, + GI = 0, + dI = 0, + YI = 0, + MI = 0, + SI = 0, + UI = 0, + vI = 0, + bI = 0, + JI = 0, + PI = 0, + RI = 0, + NI = 0, + mI = 0, + LI = 0, + xI = 0, + KI = 0, + XI = 0, + jI = 0, + TI = 0, + qI = 0, + VI = 0, + zI = 0, + WI = 0, + OI = 0, + ZI = 0, + $I = 0, + Ag = 0, + Ig = 0, + gg = 0, + Cg = 0, + Eg = 0, + eg = 0, + og = 0, + cg = 0, + ag = 0, + ng = 0, + tg = 0, + fg = 0, + wg = 0, + sg = 0, + hg = 0, + Dg = 0, + Fg = 0, + pg = 0, + ug = 0; + wA = 0 | Bg(0 | B[(I |= 0) >> 0], 0 | B[I + 1 >> 0], 0 | B[I + 2 >> 0]), o(), UI = 0 | yg(0 | (UI = 0 | kI(I + 2 | 0)), 0 | o(), 5), o(), uI = 0 | yg(0 | (uI = 0 | Bg(0 | B[I + 5 >> 0], 0 | B[I + 6 >> 0], 0 | B[I + 7 >> 0])), 0 | o(), 2), o(), SI = 0 | yg(0 | (SI = 0 | kI(I + 7 | 0)), 0 | o(), 7), o(), yI = 0 | yg(0 | (yI = 0 | kI(I + 10 | 0)), 0 | o(), 4), o(), CA = 0 | yg(0 | (CA = 0 | Bg(0 | B[I + 13 >> 0], 0 | B[I + 14 >> 0], 0 | B[I + 15 >> 0])), 0 | o(), 1), o(), FA = 0 | yg(0 | (FA = 0 | kI(I + 15 | 0)), 0 | o(), 6), o(), _ = 0 | yg(0 | (_ = 0 | Bg(0 | B[I + 18 >> 0], 0 | B[I + 19 >> 0], 0 | B[I + 20 >> 0])), 0 | o(), 3), o(), QA = 0 | Bg(0 | B[I + 21 >> 0], 0 | B[I + 22 >> 0], 0 | B[I + 23 >> 0]), o(), q = 0 | yg(0 | (q = 0 | kI(I + 23 | 0)), 0 | o(), 5), o(), HA = 0 | yg(0 | (HA = 0 | Bg(0 | B[I + 26 >> 0], 0 | B[I + 27 >> 0], 0 | B[I + 28 >> 0])), 0 | o(), 2), o(), GA = 0 | yg(0 | (GA = 0 | kI(I + 28 | 0)), 0 | o(), 7), dA = 0 | o(), XI = 0 | Bg(0 | B[g >> 0], 0 | B[g + 1 >> 0], 0 | B[g + 2 >> 0]), o(), hI = 0 | yg(0 | (hI = 0 | kI(g + 2 | 0)), 0 | o(), 5), o(), gI = 0 | yg(0 | (gI = 0 | Bg(0 | B[g + 5 >> 0], 0 | B[g + 6 >> 0], 0 | B[g + 7 >> 0])), 0 | o(), 2), o(), G = 0 | yg(0 | (G = 0 | kI(g + 7 | 0)), 0 | o(), 7), o(), d = 0 | yg(0 | (d = 0 | kI(g + 10 | 0)), 0 | o(), 4), o(), x = 0 | yg(0 | (x = 0 | Bg(0 | B[g + 13 >> 0], 0 | B[g + 14 >> 0], 0 | B[g + 15 >> 0])), 0 | o(), 1), o(), zA = 0 | yg(0 | (zA = 0 | kI(g + 15 | 0)), 0 | o(), 6), o(), sA = 0 | yg(0 | (sA = 0 | Bg(0 | B[g + 18 >> 0], 0 | B[g + 19 >> 0], 0 | B[g + 20 >> 0])), 0 | o(), 3), o(), RA = 0 | Bg(0 | B[g + 21 >> 0], 0 | B[g + 22 >> 0], 0 | B[g + 23 >> 0]), o(), IA = 0 | yg(0 | (IA = 0 | kI(g + 23 | 0)), 0 | o(), 5), o(), NI = 0 | yg(0 | (NI = 0 | Bg(0 | B[g + 26 >> 0], 0 | B[g + 27 >> 0], 0 | B[g + 28 >> 0])), 0 | o(), 2), o(), rA = 0 | yg(0 | (rA = 0 | kI(g + 28 | 0)), 0 | o(), 7), nA = 0 | o(), LA = 0 | Bg(0 | B[C >> 0], 0 | B[C + 1 >> 0], 0 | B[C + 2 >> 0]), o(), BA = 0 | yg(0 | (BA = 0 | kI(C + 2 | 0)), 0 | o(), 5), o(), KA = 0 | yg(0 | (KA = 0 | Bg(0 | B[C + 5 >> 0], 0 | B[C + 6 >> 0], 0 | B[C + 7 >> 0])), 0 | o(), 2), o(), bA = 0 | yg(0 | (bA = 0 | kI(C + 7 | 0)), 0 | o(), 7), o(), PA = 0 | yg(0 | (PA = 0 | kI(C + 10 | 0)), 0 | o(), 4), o(), WA = 0 | yg(0 | (WA = 0 | Bg(0 | B[C + 13 >> 0], 0 | B[C + 14 >> 0], 0 | B[C + 15 >> 0])), 0 | o(), 1), o(), _I = 0 | yg(0 | (_I = 0 | kI(C + 15 | 0)), 0 | o(), 6), o(), U = 0 | yg(0 | (U = 0 | Bg(0 | B[C + 18 >> 0], 0 | B[C + 19 >> 0], 0 | B[C + 20 >> 0])), 0 | o(), 3), o(), cI = 0 | Bg(0 | B[C + 21 >> 0], 0 | B[C + 22 >> 0], 0 | B[C + 23 >> 0]), o(), TA = 0 | yg(0 | (TA = 0 | kI(C + 23 | 0)), 0 | o(), 5), o(), tA = 0 | yg(0 | (tA = 0 | Bg(0 | B[C + 26 >> 0], 0 | B[C + 27 >> 0], 0 | B[C + 28 >> 0])), 0 | o(), 2), o(), FI = 0 | yg(0 | (FI = 0 | kI(C + 28 | 0)), 0 | o(), 7), GI = 0 | o(), mA = 0 | vg(2097151 & LA | 0, 0, 0 | (mA = 0 | Qg(2097151 & XI | 0, 0, 2097151 & wA | 0, 0)), 0 | o()), LA = 0 | o(), F = 0 | Qg(2097151 & hI | 0, 0, 2097151 & wA | 0, 0), D = 0 | o(), h = 0 | Qg(2097151 & XI | 0, 0, 2097151 & UI | 0, 0), $A = 0 | o(), Z = 0 | Qg(2097151 & gI | 0, 0, 2097151 & wA | 0, 0), xA = 0 | o(), KA = 0 | vg(0 | (xA = 0 | vg(0 | (vA = 0 | vg(0 | (O = 0 | Qg(2097151 & hI | 0, 0, 2097151 & UI | 0, 0)), 0 | o(), 0 | (vA = 0 | Qg(2097151 & XI | 0, 0, 2097151 & uI | 0, 0)), 0 | o())), 0 | o(), 0 | Z, 0 | xA)), 0 | o(), 2097151 & KA | 0, 0), xA = 0 | o(), Z = 0 | Qg(2097151 & G | 0, 0, 2097151 & wA | 0, 0), vA = 0 | o(), l = 0 | Qg(2097151 & gI | 0, 0, 2097151 & UI | 0, 0), O = 0 | o(), s = 0 | Qg(2097151 & hI | 0, 0, 2097151 & uI | 0, 0), y = 0 | o(), w = 0 | Qg(2097151 & XI | 0, 0, 2097151 & SI | 0, 0), ug = 0 | o(), aA = 0 | Qg(2097151 & d | 0, 0, 2097151 & wA | 0, 0), JA = 0 | o(), sg = 0 | Qg(2097151 & G | 0, 0, 2097151 & UI | 0, 0), OA = 0 | o(), Dg = 0 | Qg(2097151 & gI | 0, 0, 2097151 & uI | 0, 0), P = 0 | o(), PA = 0 | vg(0 | (JA = 0 | vg(0 | (OA = 0 | vg(0 | (P = 0 | vg(0 | (hg = 0 | vg(0 | (Fg = 0 | Qg(2097151 & hI | 0, 0, 2097151 & SI | 0, 0)), 0 | o(), 0 | (hg = 0 | Qg(2097151 & XI | 0, 0, 2097151 & yI | 0, 0)), 0 | o())), 0 | o(), 0 | Dg, 0 | P)), 0 | o(), 0 | sg, 0 | OA)), 0 | o(), 0 | aA, 0 | JA)), 0 | o(), 2097151 & PA | 0, 0), JA = 0 | o(), aA = 0 | Qg(2097151 & x | 0, 0, 2097151 & wA | 0, 0), OA = 0 | o(), sg = 0 | Qg(2097151 & d | 0, 0, 2097151 & UI | 0, 0), P = 0 | o(), Dg = 0 | Qg(2097151 & G | 0, 0, 2097151 & uI | 0, 0), hg = 0 | o(), k = 0 | Qg(2097151 & gI | 0, 0, 2097151 & SI | 0, 0), Fg = 0 | o(), f = 0 | Qg(2097151 & hI | 0, 0, 2097151 & yI | 0, 0), t = 0 | o(), r = 0 | Qg(2097151 & XI | 0, 0, 2097151 & CA | 0, 0), pg = 0 | o(), I = 0 | Qg(2097151 & zA | 0, 0, 2097151 & wA | 0, 0), DI = 0 | o(), Eg = 0 | Qg(2097151 & x | 0, 0, 2097151 & UI | 0, 0), Y = 0 | o(), og = 0 | Qg(2097151 & d | 0, 0, 2097151 & uI | 0, 0), S = 0 | o(), ag = 0 | Qg(2097151 & G | 0, 0, 2097151 & SI | 0, 0), eg = 0 | o(), tg = 0 | Qg(2097151 & gI | 0, 0, 2097151 & yI | 0, 0), cg = 0 | o(), _I = 0 | vg(0 | (DI = 0 | vg(0 | (Y = 0 | vg(0 | (S = 0 | vg(0 | (eg = 0 | vg(0 | (cg = 0 | vg(0 | (ng = 0 | vg(0 | (fg = 0 | Qg(2097151 & hI | 0, 0, 2097151 & CA | 0, 0)), 0 | o(), 0 | (ng = 0 | Qg(2097151 & XI | 0, 0, 2097151 & FA | 0, 0)), 0 | o())), 0 | o(), 0 | tg, 0 | cg)), 0 | o(), 0 | ag, 0 | eg)), 0 | o(), 0 | og, 0 | S)), 0 | o(), 0 | Eg, 0 | Y)), 0 | o(), 0 | I, 0 | DI)), 0 | o(), 2097151 & _I | 0, 0), DI = 0 | o(), I = 0 | Qg(2097151 & sA | 0, 0, 2097151 & wA | 0, 0), Y = 0 | o(), Eg = 0 | Qg(2097151 & zA | 0, 0, 2097151 & UI | 0, 0), S = 0 | o(), og = 0 | Qg(2097151 & x | 0, 0, 2097151 & uI | 0, 0), eg = 0 | o(), ag = 0 | Qg(2097151 & d | 0, 0, 2097151 & SI | 0, 0), cg = 0 | o(), tg = 0 | Qg(2097151 & G | 0, 0, 2097151 & yI | 0, 0), ng = 0 | o(), H = 0 | Qg(2097151 & gI | 0, 0, 2097151 & CA | 0, 0), fg = 0 | o(), n = 0 | Qg(2097151 & hI | 0, 0, 2097151 & FA | 0, 0), a = 0 | o(), c = 0 | Qg(2097151 & XI | 0, 0, 2097151 & _ | 0, 0), wg = 0 | o(), qI = 0 | Qg(2097151 & RA | 0, 0, 2097151 & wA | 0, 0), M = 0 | o(), T = 0 | Qg(2097151 & sA | 0, 0, 2097151 & UI | 0, 0), aI = 0 | o(), jI = 0 | Qg(2097151 & zA | 0, 0, 2097151 & uI | 0, 0), TI = 0 | o(), zI = 0 | Qg(2097151 & x | 0, 0, 2097151 & SI | 0, 0), j = 0 | o(), OI = 0 | Qg(2097151 & d | 0, 0, 2097151 & yI | 0, 0), VI = 0 | o(), $I = 0 | Qg(2097151 & G | 0, 0, 2097151 & CA | 0, 0), WI = 0 | o(), Ig = 0 | Qg(2097151 & gI | 0, 0, 2097151 & FA | 0, 0), ZI = 0 | o(), cI = 0 | vg(0 | (aI = 0 | vg(0 | (M = 0 | vg(0 | (TI = 0 | vg(0 | (j = 0 | vg(0 | (VI = 0 | vg(0 | (WI = 0 | vg(0 | (ZI = 0 | vg(0 | (Ag = 0 | vg(0 | (gg = 0 | Qg(2097151 & hI | 0, 0, 2097151 & _ | 0, 0)), 0 | o(), 0 | (Ag = 0 | Qg(2097151 & XI | 0, 0, 2097151 & QA | 0, 0)), 0 | o())), 0 | o(), 0 | Ig, 0 | ZI)), 0 | o(), 0 | $I, 0 | WI)), 0 | o(), 0 | OI, 0 | VI)), 0 | o(), 0 | zI, 0 | j)), 0 | o(), 0 | jI, 0 | TI)), 0 | o(), 0 | qI, 0 | M)), 0 | o(), 0 | T, 0 | aI)), 0 | o(), 2097151 & cI | 0, 0), aI = 0 | o(), T = 0 | Qg(2097151 & IA | 0, 0, 2097151 & wA | 0, 0), M = 0 | o(), qI = 0 | Qg(2097151 & RA | 0, 0, 2097151 & UI | 0, 0), TI = 0 | o(), jI = 0 | Qg(2097151 & sA | 0, 0, 2097151 & uI | 0, 0), j = 0 | o(), zI = 0 | Qg(2097151 & zA | 0, 0, 2097151 & SI | 0, 0), VI = 0 | o(), OI = 0 | Qg(2097151 & x | 0, 0, 2097151 & yI | 0, 0), WI = 0 | o(), $I = 0 | Qg(2097151 & d | 0, 0, 2097151 & CA | 0, 0), ZI = 0 | o(), Ig = 0 | Qg(2097151 & G | 0, 0, 2097151 & FA | 0, 0), Ag = 0 | o(), u = 0 | Qg(2097151 & gI | 0, 0, 2097151 & _ | 0, 0), gg = 0 | o(), e = 0 | Qg(2097151 & hI | 0, 0, 2097151 & QA | 0, 0), i = 0 | o(), E = 0 | Qg(2097151 & XI | 0, 0, 2097151 & q | 0, 0), Cg = 0 | o(), yA = 0 | Qg(2097151 & NI | 0, 0, 2097151 & wA | 0, 0), fA = 0 | o(), W = 0 | Qg(2097151 & IA | 0, 0, 2097151 & UI | 0, 0), z = 0 | o(), iI = 0 | Qg(2097151 & RA | 0, 0, 2097151 & uI | 0, 0), EI = 0 | o(), JI = 0 | Qg(2097151 & sA | 0, 0, 2097151 & SI | 0, 0), bI = 0 | o(), EA = 0 | Qg(2097151 & zA | 0, 0, 2097151 & yI | 0, 0), b = 0 | o(), lI = 0 | Qg(2097151 & x | 0, 0, 2097151 & CA | 0, 0), HI = 0 | o(), II = 0 | Qg(2097151 & d | 0, 0, 2097151 & FA | 0, 0), AI = 0 | o(), rI = 0 | Qg(2097151 & G | 0, 0, 2097151 & _ | 0, 0), nI = 0 | o(), V = 0 | Qg(2097151 & gI | 0, 0, 2097151 & QA | 0, 0), C = 0 | o(), tA = 0 | vg(0 | (fA = 0 | vg(0 | (z = 0 | vg(0 | (bI = 0 | vg(0 | (EI = 0 | vg(0 | (b = 0 | vg(0 | (HI = 0 | vg(0 | (AI = 0 | vg(0 | (nI = 0 | vg(0 | (C = 0 | vg(0 | (xI = 0 | vg(0 | Qg(2097151 & hI | 0, 0, 2097151 & q | 0, 0), 0 | (LI = 0 | o()), 0 | (xI = 0 | Qg(2097151 & XI | 0, 0, 2097151 & HA | 0, 0)), 0 | o())), 0 | o(), 0 | V, 0 | C)), 0 | o(), 0 | rI, 0 | nI)), 0 | o(), 0 | II, 0 | AI)), 0 | o(), 0 | lI, 0 | HI)), 0 | o(), 0 | EA, 0 | b)), 0 | o(), 0 | iI, 0 | EI)), 0 | o(), 0 | JI, 0 | bI)), 0 | o(), 0 | W, 0 | z)), 0 | o(), 0 | yA, 0 | fA)), 0 | o(), 2097151 & tA | 0, 0), fA = 0 | o(), wA = 0 | Qg(0 | rA, 0 | nA, 2097151 & wA | 0, 0), yA = 0 | o(), z = 0 | Qg(2097151 & NI | 0, 0, 2097151 & UI | 0, 0), W = 0 | o(), bI = 0 | Qg(2097151 & IA | 0, 0, 2097151 & uI | 0, 0), JI = 0 | o(), EI = 0 | Qg(2097151 & RA | 0, 0, 2097151 & SI | 0, 0), iI = 0 | o(), b = 0 | Qg(2097151 & sA | 0, 0, 2097151 & yI | 0, 0), EA = 0 | o(), HI = 0 | Qg(2097151 & zA | 0, 0, 2097151 & CA | 0, 0), lI = 0 | o(), AI = 0 | Qg(2097151 & x | 0, 0, 2097151 & FA | 0, 0), II = 0 | o(), nI = 0 | Qg(2097151 & d | 0, 0, 2097151 & _ | 0, 0), rI = 0 | o(), C = 0 | Qg(2097151 & G | 0, 0, 2097151 & QA | 0, 0), V = 0 | o(), xI = 0 | Qg(2097151 & gI | 0, 0, 2097151 & q | 0, 0), LI = 0 | o(), p = 0 | Qg(2097151 & hI | 0, 0, 2097151 & HA | 0, 0), Q = 0 | o(), XI = 0 | Qg(2097151 & XI | 0, 0, 0 | GA, 0 | dA), KI = 0 | o(), UI = 0 | Qg(0 | rA, 0 | nA, 2097151 & UI | 0, 0), vI = 0 | o(), hA = 0 | Qg(2097151 & NI | 0, 0, 2097151 & uI | 0, 0), pI = 0 | o(), PI = 0 | Qg(2097151 & IA | 0, 0, 2097151 & SI | 0, 0), N = 0 | o(), uA = 0 | Qg(2097151 & RA | 0, 0, 2097151 & yI | 0, 0), cA = 0 | o(), oA = 0 | Qg(2097151 & sA | 0, 0, 2097151 & CA | 0, 0), RI = 0 | o(), SA = 0 | Qg(2097151 & zA | 0, 0, 2097151 & FA | 0, 0), L = 0 | o(), kA = 0 | Qg(2097151 & x | 0, 0, 2097151 & _ | 0, 0), UA = 0 | o(), fI = 0 | Qg(2097151 & d | 0, 0, 2097151 & QA | 0, 0), YA = 0 | o(), sI = 0 | Qg(2097151 & G | 0, 0, 2097151 & q | 0, 0), tI = 0 | o(), vI = 0 | vg(0 | (pI = 0 | vg(0 | (N = 0 | vg(0 | (RI = 0 | vg(0 | (cA = 0 | vg(0 | (L = 0 | vg(0 | (UA = 0 | vg(0 | (YA = 0 | vg(0 | (tI = 0 | vg(0 | (hI = 0 | vg(0 | (MI = 0 | Qg(2097151 & gI | 0, 0, 2097151 & HA | 0, 0)), 0 | (BI = 0 | o()), 0 | (hI = 0 | Qg(2097151 & hI | 0, 0, 0 | GA, 0 | dA)), 0 | o())), 0 | o(), 0 | sI, 0 | tI)), 0 | o(), 0 | fI, 0 | YA)), 0 | o(), 0 | kA, 0 | UA)), 0 | o(), 0 | SA, 0 | L)), 0 | o(), 0 | uA, 0 | cA)), 0 | o(), 0 | oA, 0 | RI)), 0 | o(), 0 | PI, 0 | N)), 0 | o(), 0 | hA, 0 | pI)), 0 | o(), 0 | UI, 0 | vI), UI = 0 | o(), uI = 0 | Qg(0 | rA, 0 | nA, 2097151 & uI | 0, 0), pI = 0 | o(), hA = 0 | Qg(2097151 & NI | 0, 0, 2097151 & SI | 0, 0), N = 0 | o(), PI = 0 | Qg(2097151 & IA | 0, 0, 2097151 & yI | 0, 0), RI = 0 | o(), oA = 0 | Qg(2097151 & RA | 0, 0, 2097151 & CA | 0, 0), cA = 0 | o(), uA = 0 | Qg(2097151 & sA | 0, 0, 2097151 & FA | 0, 0), L = 0 | o(), SA = 0 | Qg(2097151 & zA | 0, 0, 2097151 & _ | 0, 0), UA = 0 | o(), kA = 0 | Qg(2097151 & x | 0, 0, 2097151 & QA | 0, 0), YA = 0 | o(), fI = 0 | Qg(2097151 & d | 0, 0, 2097151 & q | 0, 0), tI = 0 | o(), sI = 0 | Qg(2097151 & G | 0, 0, 2097151 & HA | 0, 0), hI = 0 | o(), gI = 0 | Qg(2097151 & gI | 0, 0, 0 | GA, 0 | dA), BI = 0 | o(), SI = 0 | Qg(0 | rA, 0 | nA, 2097151 & SI | 0, 0), MI = 0 | o(), dI = 0 | Qg(2097151 & NI | 0, 0, 2097151 & yI | 0, 0), wI = 0 | o(), K = 0 | Qg(2097151 & IA | 0, 0, 2097151 & CA | 0, 0), YI = 0 | o(), qA = 0 | Qg(2097151 & RA | 0, 0, 2097151 & FA | 0, 0), $ = 0 | o(), J = 0 | Qg(2097151 & sA | 0, 0, 2097151 & _ | 0, 0), g = 0 | o(), v = 0 | Qg(2097151 & zA | 0, 0, 2097151 & QA | 0, 0), ZA = 0 | o(), pA = 0 | Qg(2097151 & x | 0, 0, 2097151 & q | 0, 0), DA = 0 | o(), MI = 0 | vg(0 | (wI = 0 | vg(0 | (YI = 0 | vg(0 | (g = 0 | vg(0 | ($ = 0 | vg(0 | (ZA = 0 | vg(0 | (DA = 0 | vg(0 | (G = 0 | vg(0 | (mI = 0 | Qg(2097151 & d | 0, 0, 2097151 & HA | 0, 0)), 0 | (m = 0 | o()), 0 | (G = 0 | Qg(2097151 & G | 0, 0, 0 | GA, 0 | dA)), 0 | o())), 0 | o(), 0 | pA, 0 | DA)), 0 | o(), 0 | v, 0 | ZA)), 0 | o(), 0 | qA, 0 | $)), 0 | o(), 0 | J, 0 | g)), 0 | o(), 0 | K, 0 | YI)), 0 | o(), 0 | dI, 0 | wI)), 0 | o(), 0 | SI, 0 | MI), SI = 0 | o(), yI = 0 | Qg(0 | rA, 0 | nA, 2097151 & yI | 0, 0), wI = 0 | o(), dI = 0 | Qg(2097151 & NI | 0, 0, 2097151 & CA | 0, 0), YI = 0 | o(), K = 0 | Qg(2097151 & IA | 0, 0, 2097151 & FA | 0, 0), g = 0 | o(), J = 0 | Qg(2097151 & RA | 0, 0, 2097151 & _ | 0, 0), $ = 0 | o(), qA = 0 | Qg(2097151 & sA | 0, 0, 2097151 & QA | 0, 0), ZA = 0 | o(), v = 0 | Qg(2097151 & zA | 0, 0, 2097151 & q | 0, 0), DA = 0 | o(), pA = 0 | Qg(2097151 & x | 0, 0, 2097151 & HA | 0, 0), G = 0 | o(), d = 0 | Qg(2097151 & d | 0, 0, 0 | GA, 0 | dA), m = 0 | o(), CA = 0 | Qg(0 | rA, 0 | nA, 2097151 & CA | 0, 0), mI = 0 | o(), QI = 0 | Qg(2097151 & NI | 0, 0, 2097151 & FA | 0, 0), gA = 0 | o(), _A = 0 | Qg(2097151 & IA | 0, 0, 2097151 & _ | 0, 0), CI = 0 | o(), X = 0 | Qg(2097151 & RA | 0, 0, 2097151 & QA | 0, 0), iA = 0 | o(), eA = 0 | Qg(2097151 & sA | 0, 0, 2097151 & q | 0, 0), lA = 0 | o(), mI = 0 | vg(0 | (gA = 0 | vg(0 | (CI = 0 | vg(0 | (lA = 0 | vg(0 | (iA = 0 | vg(0 | (x = 0 | vg(0 | (R = 0 | Qg(2097151 & zA | 0, 0, 2097151 & HA | 0, 0)), 0 | (VA = 0 | o()), 0 | (x = 0 | Qg(2097151 & x | 0, 0, 0 | GA, 0 | dA)), 0 | o())), 0 | o(), 0 | X, 0 | iA)), 0 | o(), 0 | eA, 0 | lA)), 0 | o(), 0 | _A, 0 | CI)), 0 | o(), 0 | QI, 0 | gA)), 0 | o(), 0 | CA, 0 | mI), CA = 0 | o(), FA = 0 | Qg(0 | rA, 0 | nA, 2097151 & FA | 0, 0), gA = 0 | o(), QI = 0 | Qg(2097151 & NI | 0, 0, 2097151 & _ | 0, 0), CI = 0 | o(), _A = 0 | Qg(2097151 & IA | 0, 0, 2097151 & QA | 0, 0), lA = 0 | o(), eA = 0 | Qg(2097151 & RA | 0, 0, 2097151 & q | 0, 0), iA = 0 | o(), X = 0 | Qg(2097151 & sA | 0, 0, 2097151 & HA | 0, 0), x = 0 | o(), zA = 0 | Qg(2097151 & zA | 0, 0, 0 | GA, 0 | dA), VA = 0 | o(), _ = 0 | Qg(0 | rA, 0 | nA, 2097151 & _ | 0, 0), R = 0 | o(), XA = 0 | Qg(2097151 & NI | 0, 0, 2097151 & QA | 0, 0), AA = 0 | o(), oI = 0 | Qg(2097151 & IA | 0, 0, 2097151 & q | 0, 0), jA = 0 | o(), NA = 0 | Qg(2097151 & RA | 0, 0, 2097151 & HA | 0, 0), eI = 0 | o(), R = 0 | vg(0 | (AA = 0 | vg(0 | (jA = 0 | vg(0 | (eI = 0 | vg(0 | (sA = 0 | Qg(2097151 & sA | 0, 0, 0 | GA, 0 | dA)), 0 | o(), 0 | NA, 0 | eI)), 0 | o(), 0 | oI, 0 | jA)), 0 | o(), 0 | XA, 0 | AA)), 0 | o(), 0 | _, 0 | R), _ = 0 | o(), QA = 0 | Qg(0 | rA, 0 | nA, 2097151 & QA | 0, 0), AA = 0 | o(), XA = 0 | Qg(2097151 & NI | 0, 0, 2097151 & q | 0, 0), jA = 0 | o(), oI = 0 | Qg(2097151 & IA | 0, 0, 2097151 & HA | 0, 0), eI = 0 | o(), RA = 0 | Qg(2097151 & RA | 0, 0, 0 | GA, 0 | dA), NA = 0 | o(), q = 0 | Qg(0 | rA, 0 | nA, 2097151 & q | 0, 0), sA = 0 | o(), sA = 0 | vg(0 | (IA = 0 | vg(0 | Qg(2097151 & NI | 0, 0, 2097151 & HA | 0, 0), 0 | (MA = 0 | o()), 0 | (IA = 0 | Qg(2097151 & IA | 0, 0, 0 | GA, 0 | dA)), 0 | o())), 0 | o(), 0 | q, 0 | sA), q = 0 | o(), NI = 0 | vg(0 | (HA = 0 | Qg(0 | rA, 0 | nA, 2097151 & HA | 0, 0)), 0 | (IA = 0 | o()), 0 | (NI = 0 | Qg(2097151 & NI | 0, 0, 0 | GA, 0 | dA)), 0 | o()), IA = 0 | o(), dA = 0 | Qg(0 | rA, 0 | nA, 0 | GA, 0 | dA), GA = 0 | o(), HA = 0 | yg(0 | (nA = 0 | vg(0 | mA, 0 | LA, 1048576, 0)), 0 | (rA = 0 | o()), 21), MA = 0 | o(), MA = 0 | vg(0 | (BA = 0 | vg(0 | ($A = 0 | vg(0 | F, 0 | D, 0 | h, 0 | $A)), 0 | o(), 2097151 & BA | 0, 0)), 0 | o(), 0 | HA, 0 | MA), HA = 0 | o(), rA = 0 | Ug(0 | mA, 0 | LA, -2097152 & nA | 0, 4095 & rA | 0), nA = 0 | o(), BA = 0 | yg(0 | (LA = 0 | vg(0 | KA, 0 | xA, 1048576, 0)), 0 | (mA = 0 | o()), 21), $A = 0 | o(), $A = 0 | vg(0 | (bA = 0 | vg(0 | (vA = 0 | vg(0 | (O = 0 | vg(0 | (ug = 0 | vg(0 | s, 0 | y, 0 | w, 0 | ug)), 0 | o(), 0 | l, 0 | O)), 0 | o(), 0 | Z, 0 | vA)), 0 | o(), 2097151 & bA | 0, 0)), 0 | o(), 0 | BA, 0 | $A), BA = 0 | o(), Z = 0 | ig(0 | (bA = 0 | vg(0 | PA, 0 | JA, 1048576, 0)), 0 | (vA = 0 | o()), 21), O = 0 | o(), O = 0 | vg(0 | (WA = 0 | vg(0 | (OA = 0 | vg(0 | (P = 0 | vg(0 | (hg = 0 | vg(0 | (Fg = 0 | vg(0 | (pg = 0 | vg(0 | f, 0 | t, 0 | r, 0 | pg)), 0 | o(), 0 | k, 0 | Fg)), 0 | o(), 0 | Dg, 0 | hg)), 0 | o(), 0 | sg, 0 | P)), 0 | o(), 0 | aA, 0 | OA)), 0 | o(), 2097151 & WA | 0, 0)), 0 | o(), 0 | Z, 0 | O), Z = 0 | o(), aA = 0 | ig(0 | (WA = 0 | vg(0 | _I, 0 | DI, 1048576, 0)), 0 | (OA = 0 | o()), 21), P = 0 | o(), P = 0 | vg(0 | (U = 0 | vg(0 | (Y = 0 | vg(0 | (S = 0 | vg(0 | (eg = 0 | vg(0 | (cg = 0 | vg(0 | (ng = 0 | vg(0 | (fg = 0 | vg(0 | (wg = 0 | vg(0 | n, 0 | a, 0 | c, 0 | wg)), 0 | o(), 0 | H, 0 | fg)), 0 | o(), 0 | tg, 0 | ng)), 0 | o(), 0 | ag, 0 | cg)), 0 | o(), 0 | og, 0 | eg)), 0 | o(), 0 | Eg, 0 | S)), 0 | o(), 0 | I, 0 | Y)), 0 | o(), 2097151 & U | 0, 0)), 0 | o(), 0 | aA, 0 | P), aA = 0 | o(), I = 0 | ig(0 | (U = 0 | vg(0 | cI, 0 | aI, 1048576, 0)), 0 | (Y = 0 | o()), 21), S = 0 | o(), S = 0 | vg(0 | (TA = 0 | vg(0 | (M = 0 | vg(0 | (j = 0 | vg(0 | (TI = 0 | vg(0 | (VI = 0 | vg(0 | (WI = 0 | vg(0 | (ZI = 0 | vg(0 | (Ag = 0 | vg(0 | (gg = 0 | vg(0 | (Cg = 0 | vg(0 | e, 0 | i, 0 | E, 0 | Cg)), 0 | o(), 0 | u, 0 | gg)), 0 | o(), 0 | Ig, 0 | Ag)), 0 | o(), 0 | $I, 0 | ZI)), 0 | o(), 0 | OI, 0 | WI)), 0 | o(), 0 | zI, 0 | VI)), 0 | o(), 0 | qI, 0 | TI)), 0 | o(), 0 | jI, 0 | j)), 0 | o(), 0 | T, 0 | M)), 0 | o(), 2097151 & TA | 0, 0)), 0 | o(), 0 | I, 0 | S), I = 0 | o(), T = 0 | ig(0 | (TA = 0 | vg(0 | tA, 0 | fA, 1048576, 0)), 0 | (M = 0 | o()), 21), j = 0 | o(), j = 0 | vg(0 | (GI = 0 | vg(0 | (W = 0 | vg(0 | (yA = 0 | vg(0 | (JI = 0 | vg(0 | (EA = 0 | vg(0 | (iI = 0 | vg(0 | (lI = 0 | vg(0 | (II = 0 | vg(0 | (rI = 0 | vg(0 | (V = 0 | vg(0 | (LI = 0 | vg(0 | (KI = 0 | vg(0 | p, 0 | Q, 0 | XI, 0 | KI)), 0 | o(), 0 | xI, 0 | LI)), 0 | o(), 0 | C, 0 | V)), 0 | o(), 0 | nI, 0 | rI)), 0 | o(), 0 | AI, 0 | II)), 0 | o(), 0 | HI, 0 | lI)), 0 | o(), 0 | EI, 0 | iI)), 0 | o(), 0 | b, 0 | EA)), 0 | o(), 0 | bI, 0 | JI)), 0 | o(), 0 | wA, 0 | yA)), 0 | o(), 0 | z, 0 | W)), 0 | o(), 0 | FI, 0 | GI)), 0 | o(), 0 | T, 0 | j), T = 0 | o(), W = 0 | ig(0 | (GI = 0 | vg(0 | vI, 0 | UI, 1048576, 0)), 0 | (FI = 0 | o()), 21), z = 0 | o(), z = 0 | vg(0 | (pI = 0 | vg(0 | (N = 0 | vg(0 | (RI = 0 | vg(0 | (L = 0 | vg(0 | (cA = 0 | vg(0 | (UA = 0 | vg(0 | (YA = 0 | vg(0 | (tI = 0 | vg(0 | (BI = 0 | vg(0 | sI, 0 | hI, 0 | gI, 0 | BI)), 0 | o(), 0 | fI, 0 | tI)), 0 | o(), 0 | kA, 0 | YA)), 0 | o(), 0 | SA, 0 | UA)), 0 | o(), 0 | oA, 0 | cA)), 0 | o(), 0 | uA, 0 | L)), 0 | o(), 0 | PI, 0 | RI)), 0 | o(), 0 | hA, 0 | N)), 0 | o(), 0 | uI, 0 | pI)), 0 | o(), 0 | W, 0 | z), W = 0 | o(), N = 0 | ig(0 | (pI = 0 | vg(0 | MI, 0 | SI, 1048576, 0)), 0 | (uI = 0 | o()), 21), hA = 0 | o(), hA = 0 | vg(0 | (wI = 0 | vg(0 | (YI = 0 | vg(0 | (g = 0 | vg(0 | (ZA = 0 | vg(0 | ($ = 0 | vg(0 | (DA = 0 | vg(0 | (m = 0 | vg(0 | pA, 0 | G, 0 | d, 0 | m)), 0 | o(), 0 | v, 0 | DA)), 0 | o(), 0 | J, 0 | $)), 0 | o(), 0 | qA, 0 | ZA)), 0 | o(), 0 | K, 0 | g)), 0 | o(), 0 | dI, 0 | YI)), 0 | o(), 0 | yI, 0 | wI)), 0 | o(), 0 | N, 0 | hA), N = 0 | o(), YI = 0 | ig(0 | (wI = 0 | vg(0 | mI, 0 | CA, 1048576, 0)), 0 | (yI = 0 | o()), 21), dI = 0 | o(), dI = 0 | vg(0 | (gA = 0 | vg(0 | (CI = 0 | vg(0 | (lA = 0 | vg(0 | (x = 0 | vg(0 | (VA = 0 | vg(0 | eA, 0 | iA, 0 | zA, 0 | VA)), 0 | o(), 0 | X, 0 | x)), 0 | o(), 0 | _A, 0 | lA)), 0 | o(), 0 | QI, 0 | CI)), 0 | o(), 0 | FA, 0 | gA)), 0 | o(), 0 | YI, 0 | dI), YI = 0 | o(), CI = 0 | ig(0 | (gA = 0 | vg(0 | R, 0 | _, 1048576, 0)), 0 | (FA = 0 | o()), 21), QI = 0 | o(), QI = 0 | vg(0 | (AA = 0 | vg(0 | (jA = 0 | vg(0 | (NA = 0 | vg(0 | oI, 0 | eI, 0 | RA, 0 | NA)), 0 | o(), 0 | XA, 0 | jA)), 0 | o(), 0 | QA, 0 | AA)), 0 | o(), 0 | CI, 0 | QI), CI = 0 | o(), FA = 0 | Ug(0 | R, 0 | _, -2097152 & gA | 0, 0 | FA), gA = 0 | o(), AA = 0 | vg(0 | NI, 0 | IA, 0 | (AA = 0 | ig(0 | (_ = 0 | vg(0 | sA, 0 | q, 1048576, 0)), 0 | (R = 0 | o()), 21)), 0 | o()), IA = 0 | o(), R = 0 | Ug(0 | sA, 0 | q, -2097152 & _ | 0, 0 | R), _ = 0 | o(), NI = 0 | ig(0 | (q = 0 | vg(0 | dA, 0 | GA, 1048576, 0)), 0 | (sA = 0 | o()), 21), QA = 0 | o(), sA = 0 | Ug(0 | dA, 0 | GA, -2097152 & q | 0, 0 | sA), q = 0 | o(), jA = 0 | yg(0 | (GA = 0 | vg(0 | MA, 0 | HA, 1048576, 0)), 0 | (dA = 0 | o()), 21), XA = 0 | o(), dA = 0 | Ug(0 | MA, 0 | HA, -2097152 & GA | 0, 0 | dA), GA = 0 | o(), NA = 0 | ig(0 | (HA = 0 | vg(0 | $A, 0 | BA, 1048576, 0)), 0 | (MA = 0 | o()), 21), RA = 0 | o(), MA = 0 | Ug(0 | $A, 0 | BA, -2097152 & HA | 0, 0 | MA), HA = 0 | o(), eI = 0 | ig(0 | (BA = 0 | vg(0 | O, 0 | Z, 1048576, 0)), 0 | ($A = 0 | o()), 21), oI = 0 | o(), $A = 0 | Ug(0 | O, 0 | Z, -2097152 & BA | 0, 0 | $A), BA = 0 | o(), lA = 0 | ig(0 | (Z = 0 | vg(0 | P, 0 | aA, 1048576, 0)), 0 | (O = 0 | o()), 21), _A = 0 | o(), VA = 0 | ig(0 | (x = 0 | vg(0 | S, 0 | I, 1048576, 0)), 0 | (X = 0 | o()), 21), zA = 0 | o(), g = 0 | ig(0 | (iA = 0 | vg(0 | j, 0 | T, 1048576, 0)), 0 | (eA = 0 | o()), 21), K = 0 | o(), $ = 0 | ig(0 | (ZA = 0 | vg(0 | z, 0 | W, 1048576, 0)), 0 | (qA = 0 | o()), 21), J = 0 | o(), m = 0 | ig(0 | (DA = 0 | vg(0 | hA, 0 | N, 1048576, 0)), 0 | (v = 0 | o()), 21), d = 0 | o(), gA = 0 | vg(0 | (RI = 0 | ig(0 | (G = 0 | vg(0 | dI, 0 | YI, 1048576, 0)), 0 | (pA = 0 | o()), 21)), 0 | o(), 0 | FA, 0 | gA), FA = 0 | o(), pA = 0 | Ug(0 | dI, 0 | YI, -2097152 & G | 0, 0 | pA), G = 0 | o(), _ = 0 | vg(0 | (RI = 0 | ig(0 | (YI = 0 | vg(0 | QI, 0 | CI, 1048576, 0)), 0 | (dI = 0 | o()), 21)), 0 | o(), 0 | R, 0 | _), R = 0 | o(), dI = 0 | Ug(0 | QI, 0 | CI, -2097152 & YI | 0, 0 | dI), YI = 0 | o(), q = 0 | vg(0 | (RI = 0 | ig(0 | (CI = 0 | vg(0 | AA, 0 | IA, 1048576, 0)), 0 | (QI = 0 | o()), 21)), 0 | o(), 0 | sA, 0 | q), sA = 0 | o(), QI = 0 | Ug(0 | AA, 0 | IA, -2097152 & CI | 0, 0 | QI), CI = 0 | o(), IA = 0 | Qg(0 | NI, 0 | QA, 666643, 0), AA = 0 | o(), RI = 0 | Qg(0 | NI, 0 | QA, 470296, 0), PI = 0 | o(), L = 0 | Qg(0 | NI, 0 | QA, 654183, 0), uA = 0 | o(), cA = 0 | Qg(0 | NI, 0 | QA, -997805, -1), oA = 0 | o(), UA = 0 | Qg(0 | NI, 0 | QA, 136657, 0), SA = 0 | o(), d = 0 | vg(0 | (yI = 0 | Ug(0 | (QA = 0 | vg(0 | mI, 0 | CA, 0 | (QA = 0 | Qg(0 | NI, 0 | QA, -683901, -1)), 0 | o())), 0 | o(), -2097152 & wI | 0, 0 | yI)), 0 | o(), 0 | m, 0 | d), m = 0 | o(), yI = 0 | Qg(0 | q, 0 | sA, 666643, 0), wI = 0 | o(), QA = 0 | Qg(0 | q, 0 | sA, 470296, 0), CA = 0 | o(), mI = 0 | Qg(0 | q, 0 | sA, 654183, 0), NI = 0 | o(), YA = 0 | Qg(0 | q, 0 | sA, -997805, -1), kA = 0 | o(), tI = 0 | Qg(0 | q, 0 | sA, 136657, 0), fI = 0 | o(), sA = 0 | Qg(0 | q, 0 | sA, -683901, -1), q = 0 | o(), BI = 0 | Qg(0 | QI, 0 | CI, 666643, 0), gI = 0 | o(), hI = 0 | Qg(0 | QI, 0 | CI, 470296, 0), sI = 0 | o(), yA = 0 | Qg(0 | QI, 0 | CI, 654183, 0), wA = 0 | o(), JI = 0 | Qg(0 | QI, 0 | CI, -997805, -1), bI = 0 | o(), EA = 0 | Qg(0 | QI, 0 | CI, 136657, 0), b = 0 | o(), CI = 0 | Qg(0 | QI, 0 | CI, -683901, -1), QI = 0 | o(), J = 0 | vg(0 | (uI = 0 | Ug(0 | (QI = 0 | vg(0 | (fI = 0 | vg(0 | (oA = 0 | vg(0 | MI, 0 | SI, 0 | cA, 0 | oA)), 0 | o(), 0 | tI, 0 | fI)), 0 | o(), 0 | CI, 0 | QI)), 0 | o(), -2097152 & pI | 0, 0 | uI)), 0 | o(), 0 | $, 0 | J), $ = 0 | o(), uI = 0 | Qg(0 | _, 0 | R, 666643, 0), pI = 0 | o(), QI = 0 | Qg(0 | _, 0 | R, 470296, 0), CI = 0 | o(), fI = 0 | Qg(0 | _, 0 | R, 654183, 0), tI = 0 | o(), oA = 0 | Qg(0 | _, 0 | R, -997805, -1), cA = 0 | o(), SI = 0 | Qg(0 | _, 0 | R, 136657, 0), MI = 0 | o(), R = 0 | Qg(0 | _, 0 | R, -683901, -1), _ = 0 | o(), iI = 0 | Qg(0 | dI, 0 | YI, 666643, 0), EI = 0 | o(), lI = 0 | Qg(0 | dI, 0 | YI, 470296, 0), HI = 0 | o(), II = 0 | Qg(0 | dI, 0 | YI, 654183, 0), AI = 0 | o(), rI = 0 | Qg(0 | dI, 0 | YI, -997805, -1), nI = 0 | o(), V = 0 | Qg(0 | dI, 0 | YI, 136657, 0), C = 0 | o(), YI = 0 | Qg(0 | dI, 0 | YI, -683901, -1), dI = 0 | o(), K = 0 | vg(0 | (FI = 0 | Ug(0 | (dI = 0 | vg(0 | (MI = 0 | vg(0 | (UI = 0 | vg(0 | (bI = 0 | vg(0 | (PI = 0 | vg(0 | mI, 0 | NI, 0 | RI, 0 | PI)), 0 | o(), 0 | JI, 0 | bI)), 0 | o(), 0 | vI, 0 | UI)), 0 | o(), 0 | SI, 0 | MI)), 0 | o(), 0 | YI, 0 | dI)), 0 | o(), -2097152 & GI | 0, 0 | FI)), 0 | o(), 0 | g, 0 | K), g = 0 | o(), OA = 0 | Ug(0 | (oI = 0 | vg(0 | (FI = 0 | vg(0 | _I, 0 | DI, 0 | (FI = 0 | Qg(0 | gA, 0 | FA, 666643, 0)), 0 | o())), 0 | o(), 0 | eI, 0 | oI)), 0 | o(), -2097152 & WA | 0, 0 | OA), WA = 0 | o(), oI = 0 | Qg(0 | gA, 0 | FA, 470296, 0), eI = 0 | o(), FI = 0 | Qg(0 | gA, 0 | FA, 654183, 0), DI = 0 | o(), _A = 0 | vg(0 | (Y = 0 | Ug(0 | (aI = 0 | vg(0 | (DI = 0 | vg(0 | (pI = 0 | vg(0 | lI, 0 | HI, 0 | uI, 0 | pI)), 0 | o(), 0 | FI, 0 | DI)), 0 | o(), 0 | cI, 0 | aI)), 0 | o(), -2097152 & U | 0, 0 | Y)), 0 | o(), 0 | lA, 0 | _A), lA = 0 | o(), Y = 0 | Qg(0 | gA, 0 | FA, -997805, -1), U = 0 | o(), aI = 0 | Qg(0 | gA, 0 | FA, 136657, 0), cI = 0 | o(), M = 0 | Ug(0 | (zA = 0 | vg(0 | (fA = 0 | vg(0 | (cI = 0 | vg(0 | (nI = 0 | vg(0 | (tI = 0 | vg(0 | (wI = 0 | vg(0 | hI, 0 | sI, 0 | yI, 0 | wI)), 0 | o(), 0 | fI, 0 | tI)), 0 | o(), 0 | rI, 0 | nI)), 0 | o(), 0 | aI, 0 | cI)), 0 | o(), 0 | tA, 0 | fA)), 0 | o(), 0 | VA, 0 | zA)), 0 | o(), -2097152 & TA | 0, 0 | M), TA = 0 | o(), FA = 0 | Qg(0 | gA, 0 | FA, -683901, -1), gA = 0 | o(), fA = 0 | ig(0 | (zA = 0 | vg(0 | OA, 0 | WA, 1048576, 0)), 0 | (VA = 0 | o()), 21), tA = 0 | o(), tA = 0 | vg(0 | (O = 0 | Ug(0 | (aA = 0 | vg(0 | (EI = 0 | vg(0 | oI, 0 | eI, 0 | iI, 0 | EI)), 0 | o(), 0 | P, 0 | aA)), 0 | o(), -2097152 & Z | 0, 0 | O)), 0 | o(), 0 | fA, 0 | tA), fA = 0 | o(), aA = 0 | ig(0 | (O = 0 | vg(0 | _A, 0 | lA, 1048576, 0)), 0 | (Z = 0 | o()), 21), P = 0 | o(), P = 0 | vg(0 | (X = 0 | Ug(0 | (I = 0 | vg(0 | (U = 0 | vg(0 | (AI = 0 | vg(0 | (gI = 0 | vg(0 | QI, 0 | CI, 0 | BI, 0 | gI)), 0 | o(), 0 | II, 0 | AI)), 0 | o(), 0 | Y, 0 | U)), 0 | o(), 0 | S, 0 | I)), 0 | o(), -2097152 & x | 0, 0 | X)), 0 | o(), 0 | aA, 0 | P), aA = 0 | o(), I = 0 | ig(0 | (X = 0 | vg(0 | M, 0 | TA, 1048576, 0)), 0 | (x = 0 | o()), 21), S = 0 | o(), S = 0 | vg(0 | (eA = 0 | Ug(0 | (T = 0 | vg(0 | (gA = 0 | vg(0 | (C = 0 | vg(0 | (cA = 0 | vg(0 | (wA = 0 | vg(0 | (AA = 0 | vg(0 | QA, 0 | CA, 0 | IA, 0 | AA)), 0 | o(), 0 | yA, 0 | wA)), 0 | o(), 0 | oA, 0 | cA)), 0 | o(), 0 | V, 0 | C)), 0 | o(), 0 | FA, 0 | gA)), 0 | o(), 0 | j, 0 | T)), 0 | o(), -2097152 & iA | 0, 0 | eA)), 0 | o(), 0 | I, 0 | S), I = 0 | o(), T = 0 | ig(0 | (eA = 0 | vg(0 | K, 0 | g, 1048576, 0)), 0 | (iA = 0 | o()), 21), j = 0 | o(), j = 0 | vg(0 | (qA = 0 | Ug(0 | (W = 0 | vg(0 | (_ = 0 | vg(0 | (b = 0 | vg(0 | (uA = 0 | vg(0 | YA, 0 | kA, 0 | L, 0 | uA)), 0 | o(), 0 | EA, 0 | b)), 0 | o(), 0 | R, 0 | _)), 0 | o(), 0 | z, 0 | W)), 0 | o(), -2097152 & ZA | 0, 0 | qA)), 0 | o(), 0 | T, 0 | j), T = 0 | o(), iA = 0 | Ug(0 | K, 0 | g, -2097152 & eA | 0, 0 | iA), eA = 0 | o(), qA = 0 | ig(0 | (g = 0 | vg(0 | J, 0 | $, 1048576, 0)), 0 | (K = 0 | o()), 21), ZA = 0 | o(), ZA = 0 | vg(0 | (v = 0 | Ug(0 | (N = 0 | vg(0 | (SA = 0 | vg(0 | sA, 0 | q, 0 | UA, 0 | SA)), 0 | o(), 0 | hA, 0 | N)), 0 | o(), -2097152 & DA | 0, 0 | v)), 0 | o(), 0 | qA, 0 | ZA), qA = 0 | o(), K = 0 | Ug(0 | J, 0 | $, -2097152 & g | 0, 0 | K), g = 0 | o(), G = 0 | vg(0 | (v = 0 | ig(0 | ($ = 0 | vg(0 | d, 0 | m, 1048576, 0)), 0 | (J = 0 | o()), 21)), 0 | o(), 0 | pA, 0 | G), pA = 0 | o(), J = 0 | Ug(0 | d, 0 | m, -2097152 & $ | 0, 0 | J), $ = 0 | o(), v = 0 | ig(0 | (m = 0 | vg(0 | tA, 0 | fA, 1048576, 0)), 0 | (d = 0 | o()), 21), DA = 0 | o(), SA = 0 | ig(0 | (N = 0 | vg(0 | P, 0 | aA, 1048576, 0)), 0 | (hA = 0 | o()), 21), UA = 0 | o(), eA = 0 | vg(0 | (W = 0 | ig(0 | (q = 0 | vg(0 | S, 0 | I, 1048576, 0)), 0 | (sA = 0 | o()), 21)), 0 | o(), 0 | iA, 0 | eA), iA = 0 | o(), sA = 0 | Ug(0 | S, 0 | I, -2097152 & q | 0, 0 | sA), q = 0 | o(), g = 0 | vg(0 | (W = 0 | ig(0 | (I = 0 | vg(0 | j, 0 | T, 1048576, 0)), 0 | (S = 0 | o()), 21)), 0 | o(), 0 | K, 0 | g), K = 0 | o(), S = 0 | Ug(0 | j, 0 | T, -2097152 & I | 0, 0 | S), I = 0 | o(), $ = 0 | vg(0 | (W = 0 | ig(0 | (T = 0 | vg(0 | ZA, 0 | qA, 1048576, 0)), 0 | (j = 0 | o()), 21)), 0 | o(), 0 | J, 0 | $), J = 0 | o(), j = 0 | Ug(0 | ZA, 0 | qA, -2097152 & T | 0, 0 | j), T = 0 | o(), qA = 0 | vg(0 | $A, 0 | BA, 0 | (qA = 0 | Qg(0 | G, 0 | pA, 666643, 0)), 0 | o()), BA = 0 | o(), $A = 0 | Qg(0 | G, 0 | pA, 470296, 0), ZA = 0 | o(), W = 0 | Qg(0 | G, 0 | pA, 654183, 0), z = 0 | o(), _ = 0 | Qg(0 | G, 0 | pA, -997805, -1), R = 0 | o(), b = 0 | Qg(0 | G, 0 | pA, 136657, 0), EA = 0 | o(), x = 0 | Ug(0 | (UA = 0 | vg(0 | (pA = 0 | vg(0 | M, 0 | TA, 0 | (pA = 0 | Qg(0 | G, 0 | pA, -683901, -1)), 0 | o())), 0 | o(), 0 | SA, 0 | UA)), 0 | o(), -2097152 & X | 0, 0 | x), X = 0 | o(), UA = 0 | Qg(0 | $, 0 | J, 666643, 0), SA = 0 | o(), pA = 0 | vg(0 | qA, 0 | BA, 0 | (pA = 0 | Qg(0 | $, 0 | J, 470296, 0)), 0 | o()), BA = 0 | o(), qA = 0 | Qg(0 | $, 0 | J, 654183, 0), TA = 0 | o(), M = 0 | Qg(0 | $, 0 | J, -997805, -1), G = 0 | o(), uA = 0 | Qg(0 | $, 0 | J, 136657, 0), L = 0 | o(), J = 0 | Qg(0 | $, 0 | J, -683901, -1), $ = 0 | o(), kA = 0 | vg(0 | MA, 0 | HA, 0 | (kA = 0 | Qg(0 | j, 0 | T, 666643, 0)), 0 | o()), HA = 0 | o(), MA = 0 | Qg(0 | j, 0 | T, 470296, 0), YA = 0 | o(), gA = 0 | vg(0 | pA, 0 | BA, 0 | (gA = 0 | Qg(0 | j, 0 | T, 654183, 0)), 0 | o()), BA = 0 | o(), pA = 0 | Qg(0 | j, 0 | T, -997805, -1), FA = 0 | o(), C = 0 | Qg(0 | j, 0 | T, 136657, 0), V = 0 | o(), T = 0 | Qg(0 | j, 0 | T, -683901, -1), j = 0 | o(), j = 0 | vg(0 | (L = 0 | vg(0 | (Z = 0 | Ug(0 | (DA = 0 | vg(0 | (R = 0 | vg(0 | _A, 0 | lA, 0 | _, 0 | R)), 0 | o(), 0 | v, 0 | DA)), 0 | o(), -2097152 & O | 0, 0 | Z)), 0 | o(), 0 | uA, 0 | L)), 0 | o(), 0 | T, 0 | j), T = 0 | o(), L = 0 | Qg(0 | g, 0 | K, 666643, 0), uA = 0 | o(), Z = 0 | Qg(0 | g, 0 | K, 470296, 0), O = 0 | o(), DA = 0 | Qg(0 | g, 0 | K, 654183, 0), v = 0 | o(), R = 0 | Qg(0 | g, 0 | K, -997805, -1), _ = 0 | o(), lA = 0 | Qg(0 | g, 0 | K, 136657, 0), _A = 0 | o(), K = 0 | Qg(0 | g, 0 | K, -683901, -1), g = 0 | o(), cA = 0 | Qg(0 | S, 0 | I, 666643, 0), oA = 0 | o(), wA = 0 | Qg(0 | S, 0 | I, 470296, 0), yA = 0 | o(), AA = 0 | Qg(0 | S, 0 | I, 654183, 0), IA = 0 | o(), CA = 0 | Qg(0 | S, 0 | I, -997805, -1), QA = 0 | o(), U = 0 | Qg(0 | S, 0 | I, 136657, 0), Y = 0 | o(), I = 0 | Qg(0 | S, 0 | I, -683901, -1), S = 0 | o(), S = 0 | vg(0 | (_A = 0 | vg(0 | (FA = 0 | vg(0 | (TA = 0 | vg(0 | (VA = 0 | Ug(0 | (WA = 0 | vg(0 | $A, 0 | ZA, 0 | OA, 0 | WA)), 0 | o(), -2097152 & zA | 0, 0 | VA)), 0 | o(), 0 | qA, 0 | TA)), 0 | o(), 0 | pA, 0 | FA)), 0 | o(), 0 | lA, 0 | _A)), 0 | o(), 0 | I, 0 | S), I = 0 | o(), nA = 0 | vg(0 | (_A = 0 | Qg(0 | eA, 0 | iA, 666643, 0)), 0 | o(), 0 | rA, 0 | nA), rA = 0 | o(), _A = 0 | Qg(0 | eA, 0 | iA, 470296, 0), lA = 0 | o(), FA = 0 | Qg(0 | eA, 0 | iA, 654183, 0), pA = 0 | o(), yA = 0 | vg(0 | (uA = 0 | vg(0 | (pA = 0 | vg(0 | (mA = 0 | Ug(0 | (xA = 0 | vg(0 | jA, 0 | XA, 0 | KA, 0 | xA)), 0 | o(), -2097152 & LA | 0, 0 | mA)), 0 | o(), 0 | FA, 0 | pA)), 0 | o(), 0 | L, 0 | uA)), 0 | o(), 0 | wA, 0 | yA), wA = 0 | o(), uA = 0 | Qg(0 | eA, 0 | iA, -997805, -1), L = 0 | o(), pA = 0 | Qg(0 | eA, 0 | iA, 136657, 0), FA = 0 | o(), QA = 0 | vg(0 | (v = 0 | vg(0 | (FA = 0 | vg(0 | (YA = 0 | vg(0 | (SA = 0 | vg(0 | (vA = 0 | Ug(0 | (JA = 0 | vg(0 | NA, 0 | RA, 0 | PA, 0 | JA)), 0 | o(), -2097152 & bA | 0, 0 | vA)), 0 | o(), 0 | UA, 0 | SA)), 0 | o(), 0 | MA, 0 | YA)), 0 | o(), 0 | pA, 0 | FA)), 0 | o(), 0 | DA, 0 | v)), 0 | o(), 0 | CA, 0 | QA), CA = 0 | o(), iA = 0 | Qg(0 | eA, 0 | iA, -683901, -1), eA = 0 | o(), FA = 0 | ig(0 | (v = 0 | vg(0 | nA, 0 | rA, 1048576, 0)), 0 | (DA = 0 | o()), 21), pA = 0 | o(), pA = 0 | vg(0 | (oA = 0 | vg(0 | (lA = 0 | vg(0 | dA, 0 | GA, 0 | _A, 0 | lA)), 0 | o(), 0 | cA, 0 | oA)), 0 | o(), 0 | FA, 0 | pA), FA = 0 | o(), DA = 0 | Ug(0 | nA, 0 | rA, -2097152 & v | 0, 0 | DA), v = 0 | o(), oA = 0 | ig(0 | (rA = 0 | vg(0 | yA, 0 | wA, 1048576, 0)), 0 | (nA = 0 | o()), 21), cA = 0 | o(), cA = 0 | vg(0 | (IA = 0 | vg(0 | (O = 0 | vg(0 | (L = 0 | vg(0 | kA, 0 | HA, 0 | uA, 0 | L)), 0 | o(), 0 | Z, 0 | O)), 0 | o(), 0 | AA, 0 | IA)), 0 | o(), 0 | oA, 0 | cA), oA = 0 | o(), O = 0 | ig(0 | (IA = 0 | vg(0 | QA, 0 | CA, 1048576, 0)), 0 | (AA = 0 | o()), 21), Z = 0 | o(), Z = 0 | vg(0 | (Y = 0 | vg(0 | (_ = 0 | vg(0 | (eA = 0 | vg(0 | gA, 0 | BA, 0 | iA, 0 | eA)), 0 | o(), 0 | R, 0 | _)), 0 | o(), 0 | U, 0 | Y)), 0 | o(), 0 | O, 0 | Z), O = 0 | o(), _ = 0 | ig(0 | (Y = 0 | vg(0 | S, 0 | I, 1048576, 0)), 0 | (U = 0 | o()), 21), R = 0 | o(), R = 0 | vg(0 | (g = 0 | vg(0 | (V = 0 | vg(0 | (G = 0 | vg(0 | (d = 0 | Ug(0 | (z = 0 | vg(0 | tA, 0 | fA, 0 | W, 0 | z)), 0 | o(), -2097152 & m | 0, 0 | d)), 0 | o(), 0 | M, 0 | G)), 0 | o(), 0 | C, 0 | V)), 0 | o(), 0 | K, 0 | g)), 0 | o(), 0 | _, 0 | R), _ = 0 | o(), U = 0 | Ug(0 | S, 0 | I, -2097152 & Y | 0, 0 | U), Y = 0 | o(), g = 0 | ig(0 | (I = 0 | vg(0 | j, 0 | T, 1048576, 0)), 0 | (S = 0 | o()), 21), K = 0 | o(), K = 0 | vg(0 | (hA = 0 | Ug(0 | (aA = 0 | vg(0 | (EA = 0 | vg(0 | J, 0 | $, 0 | b, 0 | EA)), 0 | o(), 0 | P, 0 | aA)), 0 | o(), -2097152 & N | 0, 0 | hA)), 0 | o(), 0 | g, 0 | K), g = 0 | o(), S = 0 | Ug(0 | j, 0 | T, -2097152 & I | 0, 0 | S), I = 0 | o(), hA = 0 | vg(0 | sA, 0 | q, 0 | (hA = 0 | ig(0 | (T = 0 | vg(0 | x, 0 | X, 1048576, 0)), 0 | (j = 0 | o()), 21)), 0 | o()), q = 0 | o(), aA = 0 | ig(0 | (sA = 0 | vg(0 | pA, 0 | FA, 1048576, 0)), 0 | (N = 0 | o()), 21), P = 0 | o(), $ = 0 | ig(0 | (EA = 0 | vg(0 | cA, 0 | oA, 1048576, 0)), 0 | (b = 0 | o()), 21), J = 0 | o(), G = 0 | vg(0 | U, 0 | Y, 0 | (G = 0 | ig(0 | (V = 0 | vg(0 | Z, 0 | O, 1048576, 0)), 0 | (C = 0 | o()), 21)), 0 | o()), Y = 0 | o(), d = 0 | vg(0 | S, 0 | I, 0 | (d = 0 | ig(0 | (U = 0 | vg(0 | R, 0 | _, 1048576, 0)), 0 | (M = 0 | o()), 21)), 0 | o()), I = 0 | o(), M = 0 | Ug(0 | R, 0 | _, -2097152 & U | 0, 0 | M), U = 0 | o(), S = 0 | ig(0 | (_ = 0 | vg(0 | K, 0 | g, 1048576, 0)), 0 | (R = 0 | o()), 21), m = 0 | o(), R = 0 | Ug(0 | K, 0 | g, -2097152 & _ | 0, 0 | R), _ = 0 | o(), z = 0 | ig(0 | (g = 0 | vg(0 | hA, 0 | q, 1048576, 0)), 0 | (K = 0 | o()), 21), W = 0 | o(), K = 0 | Ug(0 | hA, 0 | q, -2097152 & g | 0, 0 | K), g = 0 | o(), q = 0 | vg(0 | DA, 0 | v, 0 | (q = 0 | Qg(0 | z, 0 | W, 666643, 0)), 0 | o()), v = 0 | o(), DA = 0 | Qg(0 | z, 0 | W, 470296, 0), hA = 0 | o(), fA = 0 | Qg(0 | z, 0 | W, 654183, 0), tA = 0 | o(), eA = 0 | Qg(0 | z, 0 | W, -997805, -1), iA = 0 | o(), BA = 0 | Qg(0 | z, 0 | W, 136657, 0), gA = 0 | o(), W = 0 | Qg(0 | z, 0 | W, -683901, -1), z = 0 | o(), v = 0 | ig(0 | q, 0 | v, 21), L = 0 | o(), v = 0 | ig(0 | (L = 0 | vg(0 | (N = 0 | Ug(0 | (hA = 0 | vg(0 | pA, 0 | FA, 0 | DA, 0 | hA)), 0 | o(), -2097152 & sA | 0, 0 | N)), 0 | o(), 0 | v, 0 | L)), 0 | o(), 21), N = 0 | o(), v = 0 | ig(0 | (N = 0 | vg(0 | (P = 0 | vg(0 | (nA = 0 | Ug(0 | (tA = 0 | vg(0 | yA, 0 | wA, 0 | fA, 0 | tA)), 0 | o(), -2097152 & rA | 0, 0 | nA)), 0 | o(), 0 | aA, 0 | P)), 0 | o(), 0 | v, 0 | N)), 0 | o(), 21), P = 0 | o(), v = 0 | ig(0 | (P = 0 | vg(0 | (b = 0 | Ug(0 | (iA = 0 | vg(0 | cA, 0 | oA, 0 | eA, 0 | iA)), 0 | o(), -2097152 & EA | 0, 0 | b)), 0 | o(), 0 | v, 0 | P)), 0 | o(), 21), b = 0 | o(), v = 0 | ig(0 | (b = 0 | vg(0 | (J = 0 | vg(0 | (AA = 0 | Ug(0 | (gA = 0 | vg(0 | QA, 0 | CA, 0 | BA, 0 | gA)), 0 | o(), -2097152 & IA | 0, 0 | AA)), 0 | o(), 0 | $, 0 | J)), 0 | o(), 0 | v, 0 | b)), 0 | o(), 21), J = 0 | o(), R = 0 | ig(0 | (_ = 0 | vg(0 | (I = 0 | ig(0 | (M = 0 | vg(0 | d, 0 | I, 0 | (M = 0 | ig(0 | (U = 0 | vg(0 | (Y = 0 | ig(0 | (v = 0 | vg(0 | G, 0 | Y, 0 | (v = 0 | ig(0 | (J = 0 | vg(0 | (C = 0 | Ug(0 | (z = 0 | vg(0 | Z, 0 | O, 0 | W, 0 | z)), 0 | o(), -2097152 & V | 0, 0 | C)), 0 | o(), 0 | v, 0 | J)), 0 | o(), 21)), 0 | o())), 0 | o(), 21)), 0 | o(), 0 | M, 0 | U)), 0 | o(), 21)), 0 | o())), 0 | o(), 21)), 0 | o(), 0 | R, 0 | _)), 0 | o(), 21), I = 0 | o(), q = 0 | vg(0 | (j = 0 | Qg(0 | (K = 0 | ig(0 | (g = 0 | vg(0 | (R = 0 | ig(0 | (I = 0 | vg(0 | (j = 0 | Ug(0 | (X = 0 | vg(0 | S, 0 | m, 0 | x, 0 | X)), 0 | o(), -2097152 & T | 0, 0 | j)), 0 | o(), 0 | R, 0 | I)), 0 | o(), 21)), 0 | o(), 0 | K, 0 | g)), 0 | o(), 21)), 0 | (R = 0 | o()), 666643, 0)), 0 | o(), 2097151 & q | 0, 0), j = 0 | o(), L = 0 | vg(0 | (T = 0 | Qg(0 | K, 0 | R, 470296, 0)), 0 | o(), 2097151 & L | 0, 0), T = 0 | o(), N = 0 | vg(0 | (X = 0 | Qg(0 | K, 0 | R, 654183, 0)), 0 | o(), 2097151 & N | 0, 0), X = 0 | o(), P = 0 | vg(0 | (x = 0 | Qg(0 | K, 0 | R, -997805, -1)), 0 | o(), 2097151 & P | 0, 0), x = 0 | o(), b = 0 | vg(0 | (m = 0 | Qg(0 | K, 0 | R, 136657, 0)), 0 | o(), 2097151 & b | 0, 0), m = 0 | o(), g = 0 | vg(0 | (C = 0 | ig(0 | (I = 0 | vg(0 | (G = 0 | ig(0 | (_ = 0 | vg(0 | (Y = 0 | ig(0 | (M = 0 | vg(0 | (d = 0 | ig(0 | (U = 0 | vg(0 | (S = 0 | ig(0 | (v = 0 | vg(0 | (J = 0 | ig(0 | (b = 0 | vg(0 | (J = 0 | vg(0 | (R = 0 | Qg(0 | K, 0 | R, -683901, -1)), 0 | o(), 2097151 & J | 0, 0)), 0 | (R = 0 | o()), 0 | (b = 0 | ig(0 | (P = 0 | vg(0 | b, 0 | m, 0 | (P = 0 | ig(0 | (N = 0 | vg(0 | P, 0 | x, 0 | (N = 0 | ig(0 | (L = 0 | vg(0 | N, 0 | X, 0 | (L = 0 | ig(0 | (K = 0 | vg(0 | L, 0 | T, 0 | (K = 0 | ig(0 | q, 0 | j, 21)), 0 | o())), 0 | (T = 0 | o()), 21)), 0 | o())), 0 | (X = 0 | o()), 21)), 0 | o())), 0 | (x = 0 | o()), 21)), 0 | o())), 0 | (m = 0 | o()), 21)), 0 | o())), 0 | (R = 0 | o()), 21)), 0 | o(), 2097151 & v | 0, 0)), 0 | (J = 0 | o()), 21)), 0 | o(), 2097151 & U | 0, 0)), 0 | (S = 0 | o()), 21)), 0 | o(), 2097151 & M | 0, 0)), 0 | (d = 0 | o()), 21)), 0 | o(), 2097151 & _ | 0, 0)), 0 | (Y = 0 | o()), 21)), 0 | o(), 2097151 & I | 0, 0)), 0 | (G = 0 | o()), 21)), 0 | o(), 2097151 & g | 0, 0), C = 0 | o(), B[A >> 0] = q, V = 0 | yg(0 | q, 0 | j, 8), o(), B[A + 1 >> 0] = V, j = 0 | yg(0 | q, 0 | j, 16), o(), q = 0 | rg(2097151 & K | 0, 0, 5), o(), B[A + 2 >> 0] = q | 31 & j, j = 0 | yg(0 | K, 0 | T, 3), o(), B[A + 3 >> 0] = j, T = 0 | yg(0 | K, 0 | T, 11), o(), B[A + 4 >> 0] = T, K = 0 | yg(2097151 & K | 0, 0, 19), T = 0 | o(), j = 0 | rg(2097151 & L | 0, 0, 2), o(), B[A + 5 >> 0] = j | K, X = 0 | yg(0 | L, 0 | X, 6), o(), B[A + 6 >> 0] = X, L = 0 | yg(2097151 & L | 0, 0, 14), X = 0 | o(), K = 0 | rg(2097151 & N | 0, 0, 7), o(), B[A + 7 >> 0] = K | L, L = 0 | yg(0 | N, 0 | x, 1), o(), B[A + 8 >> 0] = L, x = 0 | yg(0 | N, 0 | x, 9), o(), B[A + 9 >> 0] = x, N = 0 | yg(2097151 & N | 0, 0, 17), x = 0 | o(), L = 0 | rg(2097151 & P | 0, 0, 4), o(), B[A + 10 >> 0] = L | N, N = 0 | yg(0 | P, 0 | m, 4), o(), B[A + 11 >> 0] = N, m = 0 | yg(0 | P, 0 | m, 12), o(), B[A + 12 >> 0] = m, P = 0 | yg(2097151 & P | 0, 0, 20), m = 0 | o(), N = 0 | rg(2097151 & b | 0, 0, 1), o(), B[A + 13 >> 0] = N | P, R = 0 | yg(0 | b, 0 | R, 7), o(), B[A + 14 >> 0] = R, b = 0 | yg(2097151 & b | 0, 0, 15), R = 0 | o(), P = 0 | rg(2097151 & v | 0, 0, 6), o(), B[A + 15 >> 0] = P | b, b = 0 | yg(0 | v, 0 | J, 2), o(), B[A + 16 >> 0] = b, J = 0 | yg(0 | v, 0 | J, 10), o(), B[A + 17 >> 0] = J, v = 0 | yg(2097151 & v | 0, 0, 18), J = 0 | o(), b = 0 | rg(0 | U, 0 | S, 3), o(), B[A + 18 >> 0] = b | v, v = 0 | yg(0 | U, 0 | S, 5), o(), B[A + 19 >> 0] = v, S = 0 | yg(0 | U, 0 | S, 13), o(), B[A + 20 >> 0] = S, B[A + 21 >> 0] = M, S = 0 | yg(0 | M, 0 | d, 8), o(), B[A + 22 >> 0] = S, d = 0 | yg(0 | M, 0 | d, 16), o(), M = 0 | rg(2097151 & _ | 0, 0, 5), o(), B[A + 23 >> 0] = M | 31 & d, d = 0 | yg(0 | _, 0 | Y, 3), o(), B[A + 24 >> 0] = d, Y = 0 | yg(0 | _, 0 | Y, 11), o(), B[A + 25 >> 0] = Y, _ = 0 | yg(2097151 & _ | 0, 0, 19), Y = 0 | o(), d = 0 | rg(2097151 & I | 0, 0, 2), o(), B[A + 26 >> 0] = d | _, G = 0 | yg(0 | I, 0 | G, 6), o(), B[A + 27 >> 0] = G, I = 0 | yg(2097151 & I | 0, 0, 14), G = 0 | o(), _ = 0 | rg(0 | g, 0 | C, 7), o(), B[A + 28 >> 0] = _ | I, I = 0 | yg(0 | g, 0 | C, 1), o(), B[A + 29 >> 0] = I, I = 0 | yg(0 | g, 0 | C, 9), o(), B[A + 30 >> 0] = I, C = 0 | ig(0 | g, 0 | C, 17), o(), B[A + 31 >> 0] = C; + } + + function D(A, I, g, B) { + A |= 0, B |= 0; + var Q = 0, + E = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0, + m = 0, + L = 0, + x = 0, + K = 0, + X = 0; + !function (A, I) { + A |= 0, I |= 0; + var g = 0, + B = 0, + Q = 0, + E = 0; + g = 0; + + do { + E = 0 | jA(I + (g << 3) | 0), Q = 0 | o(), C[(B = A + (g << 3) | 0) >> 2] = E, C[B + 4 >> 2] = Q, g = g + 1 | 0; + } while (16 != (0 | g)); + }(g |= 0, I |= 0), Q = A, E = (I = B) + 64 | 0; + + do { + C[I >> 2] = C[Q >> 2], I = I + 4 | 0, Q = Q + 4 | 0; + } while ((0 | I) < (0 | E)); + + I = 0 | C[g >> 2], Q = 0 | C[g + 4 >> 2], D = 0; + + do { + if (y = 0 | ZI(H = 0 | C[B + 32 >> 2], e = 0 | C[B + 32 + 4 >> 2], 14), r = 0 | o(), G = 0 | ZI(H, e, 18), r = (0 | o()) ^ r, L = 0 | ZI(H, e, 41), r ^= 0 | o(), b = 0 | C[B + 40 >> 2], i = 0 | C[B + 40 + 4 >> 2], h = 0 | C[B + 48 >> 2], E = 0 | C[B + 48 + 4 >> 2], c = 0 | C[(P = 32416 + (D << 3) | 0) >> 2], P = 0 | C[P + 4 >> 2], t = 0 | C[B + 56 >> 2], u = 0 | C[B + 56 + 4 >> 2], P = 0 | vg(0 | (u = 0 | vg(0 | (P = 0 | vg(0 | (P = 0 | vg(0 | (r = 0 | vg(0 | I, 0 | Q, G ^ y ^ L | 0, 0 | r)), 0 | o(), 0 | c, 0 | P)), 0 | o(), (h ^ b) & H ^ h | 0, (E ^ i) & e ^ E | 0)), 0 | o(), 0 | t, 0 | u)), 0 | (t = 0 | o()), 0 | C[B + 24 >> 2], 0 | C[B + 24 + 4 >> 2]), c = 0 | o(), C[B + 24 >> 2] = P, C[B + 24 + 4 >> 2] = c, y = 0 | ZI(r = 0 | C[B >> 2], L = 0 | C[B + 4 >> 2], 28), I = 0 | o(), G = 0 | ZI(r, L, 34), I = (0 | o()) ^ I, U = 0 | ZI(r, L, 39), I ^= 0 | o(), n = 0 | C[B + 8 >> 2], m = 0 | C[B + 8 + 4 >> 2], a = 0 | C[B + 16 >> 2], N = 0 | C[B + 16 + 4 >> 2], t = 0 | vg(0 | (t = 0 | vg(G ^ y ^ U | 0, 0 | I, 0 | u, 0 | t)), 0 | o(), (a | n) & r | a & n | 0, (N | m) & L | N & m | 0), u = 0 | o(), C[B + 56 >> 2] = t, C[B + 56 + 4 >> 2] = u, I = 0 | ZI(P, c, 14), U = 0 | o(), y = 0 | ZI(P, c, 18), U = (0 | o()) ^ U, G = 0 | ZI(P, c, 41), U ^= 0 | o(), f = 0 | C[g + ((w = 1 | D) << 3) >> 2], Q = 0 | C[g + (w << 3) + 4 >> 2], s = 0 | C[32416 + (w << 3) >> 2], d = 0 | C[32416 + (w << 3) + 4 >> 2], N = 0 | vg(0 | (d = 0 | vg(0 | (Q = 0 | vg(0 | (U = 0 | vg(0 | (E = 0 | vg(P & (b ^ H) ^ b | 0, c & (i ^ e) ^ i | 0, 0 | h, 0 | E)), 0 | o(), y ^ I ^ G | 0, 0 | U)), 0 | o(), 0 | f, 0 | Q)), 0 | o(), 0 | s, 0 | d)), 0 | (s = 0 | o()), 0 | a, 0 | N), a = 0 | o(), C[B + 16 >> 2] = N, C[B + 16 + 4 >> 2] = a, Q = 0 | ZI(t, u, 28), f = 0 | o(), U = 0 | ZI(t, u, 34), f = (0 | o()) ^ f, G = 0 | ZI(t, u, 39), f ^= 0 | o(), f = 0 | vg(0 | (s = 0 | vg(0 | d, 0 | s, t & (n | r) | n & r | 0, u & (m | L) | m & L | 0)), 0 | o(), U ^ Q ^ G | 0, 0 | f), G = 0 | o(), C[B + 48 >> 2] = f, C[B + 48 + 4 >> 2] = G, Q = 0 | ZI(N, a, 14), U = 0 | o(), s = 0 | ZI(N, a, 18), U = (0 | o()) ^ U, d = 0 | ZI(N, a, 41), U ^= 0 | o(), y = 0 | C[g + ((I = 2 | D) << 3) >> 2], E = 0 | C[g + (I << 3) + 4 >> 2], h = 0 | C[32416 + (I << 3) >> 2], Y = 0 | C[32416 + (I << 3) + 4 >> 2], m = 0 | vg(0 | (Y = 0 | vg(0 | (E = 0 | vg(0 | (U = 0 | vg(0 | (i = 0 | vg(N & (P ^ H) ^ H | 0, a & (c ^ e) ^ e | 0, 0 | b, 0 | i)), 0 | o(), s ^ Q ^ d | 0, 0 | U)), 0 | o(), 0 | y, 0 | E)), 0 | o(), 0 | h, 0 | Y)), 0 | (h = 0 | o()), 0 | n, 0 | m), n = 0 | o(), C[B + 8 >> 2] = m, C[B + 8 + 4 >> 2] = n, E = 0 | ZI(f, G, 28), y = 0 | o(), U = 0 | ZI(f, G, 34), y = (0 | o()) ^ y, d = 0 | ZI(f, G, 39), y ^= 0 | o(), y = 0 | vg(0 | (h = 0 | vg(0 | Y, 0 | h, f & (t | r) | t & r | 0, G & (u | L) | u & L | 0)), 0 | o(), U ^ E ^ d | 0, 0 | y), d = 0 | o(), C[B + 40 >> 2] = y, C[B + 40 + 4 >> 2] = d, E = 0 | ZI(m, n, 14), U = 0 | o(), h = 0 | ZI(m, n, 18), U = (0 | o()) ^ U, Y = 0 | ZI(m, n, 41), U ^= 0 | o(), s = 0 | C[g + ((Q = 3 | D) << 3) >> 2], i = 0 | C[g + (Q << 3) + 4 >> 2], b = 0 | C[32416 + (Q << 3) >> 2], F = 0 | C[32416 + (Q << 3) + 4 >> 2], L = 0 | vg(0 | (F = 0 | vg(0 | (i = 0 | vg(0 | (U = 0 | vg(0 | (e = 0 | vg(m & (N ^ P) ^ P | 0, n & (a ^ c) ^ c | 0, 0 | H, 0 | e)), 0 | o(), h ^ E ^ Y | 0, 0 | U)), 0 | o(), 0 | s, 0 | i)), 0 | o(), 0 | b, 0 | F)), 0 | (b = 0 | o()), 0 | r, 0 | L), r = 0 | o(), C[B >> 2] = L, C[B + 4 >> 2] = r, i = 0 | ZI(y, d, 28), s = 0 | o(), U = 0 | ZI(y, d, 34), s = (0 | o()) ^ s, Y = 0 | ZI(y, d, 39), s ^= 0 | o(), s = 0 | vg(0 | (b = 0 | vg(0 | F, 0 | b, y & (f | t) | f & t | 0, d & (G | u) | G & u | 0)), 0 | o(), U ^ i ^ Y | 0, 0 | s), Y = 0 | o(), C[B + 32 >> 2] = s, C[B + 32 + 4 >> 2] = Y, i = 0 | ZI(L, r, 14), U = 0 | o(), b = 0 | ZI(L, r, 18), U = (0 | o()) ^ U, F = 0 | ZI(L, r, 41), U ^= 0 | o(), h = 0 | C[g + ((E = 4 | D) << 3) >> 2], e = 0 | C[g + (E << 3) + 4 >> 2], H = 0 | C[32416 + (E << 3) >> 2], J = 0 | C[32416 + (E << 3) + 4 >> 2], u = 0 | vg(0 | (J = 0 | vg(0 | (e = 0 | vg(0 | (U = 0 | vg(0 | (c = 0 | vg(L & (m ^ N) ^ N | 0, r & (n ^ a) ^ a | 0, 0 | P, 0 | c)), 0 | o(), b ^ i ^ F | 0, 0 | U)), 0 | o(), 0 | h, 0 | e)), 0 | o(), 0 | H, 0 | J)), 0 | (H = 0 | o()), 0 | t, 0 | u), t = 0 | o(), C[B + 56 >> 2] = u, C[B + 56 + 4 >> 2] = t, e = 0 | ZI(s, Y, 28), h = 0 | o(), U = 0 | ZI(s, Y, 34), h = (0 | o()) ^ h, F = 0 | ZI(s, Y, 39), h ^= 0 | o(), h = 0 | vg(0 | (H = 0 | vg(0 | J, 0 | H, s & (y | f) | y & f | 0, Y & (d | G) | d & G | 0)), 0 | o(), U ^ e ^ F | 0, 0 | h), F = 0 | o(), C[B + 24 >> 2] = h, C[B + 24 + 4 >> 2] = F, e = 0 | ZI(u, t, 14), U = 0 | o(), H = 0 | ZI(u, t, 18), U = (0 | o()) ^ U, J = 0 | ZI(u, t, 41), U ^= 0 | o(), b = 0 | C[g + ((i = 5 | D) << 3) >> 2], c = 0 | C[g + (i << 3) + 4 >> 2], P = 0 | C[32416 + (i << 3) >> 2], M = 0 | C[32416 + (i << 3) + 4 >> 2], G = 0 | vg(0 | (M = 0 | vg(0 | (c = 0 | vg(0 | (U = 0 | vg(0 | (a = 0 | vg(u & (L ^ m) ^ m | 0, t & (r ^ n) ^ n | 0, 0 | N, 0 | a)), 0 | o(), H ^ e ^ J | 0, 0 | U)), 0 | o(), 0 | b, 0 | c)), 0 | o(), 0 | P, 0 | M)), 0 | (P = 0 | o()), 0 | f, 0 | G), f = 0 | o(), C[B + 48 >> 2] = G, C[B + 48 + 4 >> 2] = f, c = 0 | ZI(h, F, 28), b = 0 | o(), U = 0 | ZI(h, F, 34), b = (0 | o()) ^ b, J = 0 | ZI(h, F, 39), b ^= 0 | o(), b = 0 | vg(0 | (P = 0 | vg(0 | M, 0 | P, h & (s | y) | s & y | 0, F & (Y | d) | Y & d | 0)), 0 | o(), U ^ c ^ J | 0, 0 | b), J = 0 | o(), C[B + 16 >> 2] = b, C[B + 16 + 4 >> 2] = J, c = 0 | ZI(G, f, 14), U = 0 | o(), P = 0 | ZI(G, f, 18), U = (0 | o()) ^ U, M = 0 | ZI(G, f, 41), U ^= 0 | o(), H = 0 | C[g + ((e = 6 | D) << 3) >> 2], a = 0 | C[g + (e << 3) + 4 >> 2], N = 0 | C[32416 + (e << 3) >> 2], R = 0 | C[32416 + (e << 3) + 4 >> 2], d = 0 | vg(0 | (R = 0 | vg(0 | (a = 0 | vg(0 | (U = 0 | vg(0 | (n = 0 | vg(G & (u ^ L) ^ L | 0, f & (t ^ r) ^ r | 0, 0 | m, 0 | n)), 0 | o(), P ^ c ^ M | 0, 0 | U)), 0 | o(), 0 | H, 0 | a)), 0 | o(), 0 | N, 0 | R)), 0 | (N = 0 | o()), 0 | y, 0 | d), y = 0 | o(), C[B + 40 >> 2] = d, C[B + 40 + 4 >> 2] = y, a = 0 | ZI(b, J, 28), H = 0 | o(), U = 0 | ZI(b, J, 34), H = (0 | o()) ^ H, M = 0 | ZI(b, J, 39), H ^= 0 | o(), H = 0 | vg(0 | (N = 0 | vg(0 | R, 0 | N, b & (h | s) | h & s | 0, J & (F | Y) | F & Y | 0)), 0 | o(), U ^ a ^ M | 0, 0 | H), M = 0 | o(), C[B + 8 >> 2] = H, C[B + 8 + 4 >> 2] = M, a = 0 | ZI(d, y, 14), U = 0 | o(), N = 0 | ZI(d, y, 18), U = (0 | o()) ^ U, R = 0 | ZI(d, y, 41), U ^= 0 | o(), P = 0 | C[g + ((c = 7 | D) << 3) >> 2], n = 0 | C[g + (c << 3) + 4 >> 2], m = 0 | C[32416 + (c << 3) >> 2], x = 0 | C[32416 + (c << 3) + 4 >> 2], Y = 0 | vg(0 | (x = 0 | vg(0 | (n = 0 | vg(0 | (U = 0 | vg(0 | (r = 0 | vg(d & (G ^ u) ^ u | 0, y & (f ^ t) ^ t | 0, 0 | L, 0 | r)), 0 | o(), N ^ a ^ R | 0, 0 | U)), 0 | o(), 0 | P, 0 | n)), 0 | o(), 0 | m, 0 | x)), 0 | (m = 0 | o()), 0 | s, 0 | Y), s = 0 | o(), C[B + 32 >> 2] = Y, C[B + 32 + 4 >> 2] = s, n = 0 | ZI(H, M, 28), P = 0 | o(), U = 0 | ZI(H, M, 34), P = (0 | o()) ^ P, R = 0 | ZI(H, M, 39), P ^= 0 | o(), P = 0 | vg(0 | (m = 0 | vg(0 | x, 0 | m, H & (b | h) | b & h | 0, M & (J | F) | J & F | 0)), 0 | o(), U ^ n ^ R | 0, 0 | P), R = 0 | o(), C[B >> 2] = P, C[B + 4 >> 2] = R, n = 0 | ZI(Y, s, 14), U = 0 | o(), m = 0 | ZI(Y, s, 18), U = (0 | o()) ^ U, x = 0 | ZI(Y, s, 41), U ^= 0 | o(), N = 0 | C[g + ((a = 8 | D) << 3) >> 2], r = 0 | C[g + (a << 3) + 4 >> 2], L = 0 | C[32416 + (a << 3) >> 2], K = 0 | C[32416 + (a << 3) + 4 >> 2], F = 0 | vg(0 | (K = 0 | vg(0 | (r = 0 | vg(0 | (U = 0 | vg(0 | (t = 0 | vg(Y & (d ^ G) ^ G | 0, s & (y ^ f) ^ f | 0, 0 | u, 0 | t)), 0 | o(), m ^ n ^ x | 0, 0 | U)), 0 | o(), 0 | N, 0 | r)), 0 | o(), 0 | L, 0 | K)), 0 | (L = 0 | o()), 0 | h, 0 | F), h = 0 | o(), C[B + 24 >> 2] = F, C[B + 24 + 4 >> 2] = h, r = 0 | ZI(P, R, 28), N = 0 | o(), U = 0 | ZI(P, R, 34), N = (0 | o()) ^ N, x = 0 | ZI(P, R, 39), N ^= 0 | o(), N = 0 | vg(0 | (L = 0 | vg(0 | K, 0 | L, P & (H | b) | H & b | 0, R & (M | J) | M & J | 0)), 0 | o(), U ^ r ^ x | 0, 0 | N), x = 0 | o(), C[B + 56 >> 2] = N, C[B + 56 + 4 >> 2] = x, r = 0 | ZI(F, h, 14), U = 0 | o(), L = 0 | ZI(F, h, 18), U = (0 | o()) ^ U, K = 0 | ZI(F, h, 41), U ^= 0 | o(), m = 0 | C[g + ((n = 9 | D) << 3) >> 2], t = 0 | C[g + (n << 3) + 4 >> 2], u = 0 | C[32416 + (n << 3) >> 2], X = 0 | C[32416 + (n << 3) + 4 >> 2], J = 0 | vg(0 | (X = 0 | vg(0 | (t = 0 | vg(0 | (U = 0 | vg(0 | (f = 0 | vg(F & (Y ^ d) ^ d | 0, h & (s ^ y) ^ y | 0, 0 | G, 0 | f)), 0 | o(), L ^ r ^ K | 0, 0 | U)), 0 | o(), 0 | m, 0 | t)), 0 | o(), 0 | u, 0 | X)), 0 | (u = 0 | o()), 0 | b, 0 | J), b = 0 | o(), C[B + 16 >> 2] = J, C[B + 16 + 4 >> 2] = b, t = 0 | ZI(N, x, 28), m = 0 | o(), U = 0 | ZI(N, x, 34), m = (0 | o()) ^ m, K = 0 | ZI(N, x, 39), m ^= 0 | o(), m = 0 | vg(0 | (u = 0 | vg(0 | X, 0 | u, N & (P | H) | P & H | 0, x & (R | M) | R & M | 0)), 0 | o(), U ^ t ^ K | 0, 0 | m), K = 0 | o(), C[B + 48 >> 2] = m, C[B + 48 + 4 >> 2] = K, t = 0 | ZI(J, b, 14), U = 0 | o(), u = 0 | ZI(J, b, 18), U = (0 | o()) ^ U, X = 0 | ZI(J, b, 41), U ^= 0 | o(), L = 0 | C[g + ((r = 10 | D) << 3) >> 2], f = 0 | C[g + (r << 3) + 4 >> 2], G = 0 | C[32416 + (r << 3) >> 2], p = 0 | C[32416 + (r << 3) + 4 >> 2], M = 0 | vg(0 | (p = 0 | vg(0 | (f = 0 | vg(0 | (U = 0 | vg(0 | (y = 0 | vg(J & (F ^ Y) ^ Y | 0, b & (h ^ s) ^ s | 0, 0 | d, 0 | y)), 0 | o(), u ^ t ^ X | 0, 0 | U)), 0 | o(), 0 | L, 0 | f)), 0 | o(), 0 | G, 0 | p)), 0 | (G = 0 | o()), 0 | H, 0 | M), H = 0 | o(), C[B + 8 >> 2] = M, C[B + 8 + 4 >> 2] = H, f = 0 | ZI(m, K, 28), L = 0 | o(), U = 0 | ZI(m, K, 34), L = (0 | o()) ^ L, X = 0 | ZI(m, K, 39), L ^= 0 | o(), L = 0 | vg(0 | (G = 0 | vg(0 | p, 0 | G, m & (N | P) | N & P | 0, K & (x | R) | x & R | 0)), 0 | o(), U ^ f ^ X | 0, 0 | L), X = 0 | o(), C[B + 40 >> 2] = L, C[B + 40 + 4 >> 2] = X, f = 0 | ZI(M, H, 14), U = 0 | o(), G = 0 | ZI(M, H, 18), U = (0 | o()) ^ U, p = 0 | ZI(M, H, 41), U ^= 0 | o(), u = 0 | C[g + ((t = 11 | D) << 3) >> 2], y = 0 | C[g + (t << 3) + 4 >> 2], d = 0 | C[32416 + (t << 3) >> 2], k = 0 | C[32416 + (t << 3) + 4 >> 2], R = 0 | vg(0 | (k = 0 | vg(0 | (y = 0 | vg(0 | (U = 0 | vg(0 | (s = 0 | vg(M & (J ^ F) ^ F | 0, H & (b ^ h) ^ h | 0, 0 | Y, 0 | s)), 0 | o(), G ^ f ^ p | 0, 0 | U)), 0 | o(), 0 | u, 0 | y)), 0 | o(), 0 | d, 0 | k)), 0 | (d = 0 | o()), 0 | P, 0 | R), P = 0 | o(), C[B >> 2] = R, C[B + 4 >> 2] = P, y = 0 | ZI(L, X, 28), u = 0 | o(), U = 0 | ZI(L, X, 34), u = (0 | o()) ^ u, p = 0 | ZI(L, X, 39), u ^= 0 | o(), u = 0 | vg(0 | (d = 0 | vg(0 | k, 0 | d, L & (m | N) | m & N | 0, X & (K | x) | K & x | 0)), 0 | o(), U ^ y ^ p | 0, 0 | u), p = 0 | o(), C[B + 32 >> 2] = u, C[B + 32 + 4 >> 2] = p, y = 0 | ZI(R, P, 14), U = 0 | o(), d = 0 | ZI(R, P, 18), U = (0 | o()) ^ U, k = 0 | ZI(R, P, 41), U ^= 0 | o(), G = 0 | C[g + ((f = 12 | D) << 3) >> 2], s = 0 | C[g + (f << 3) + 4 >> 2], Y = 0 | C[32416 + (f << 3) >> 2], l = 0 | C[32416 + (f << 3) + 4 >> 2], x = 0 | vg(0 | (l = 0 | vg(0 | (s = 0 | vg(0 | (U = 0 | vg(0 | (h = 0 | vg(R & (M ^ J) ^ J | 0, P & (H ^ b) ^ b | 0, 0 | F, 0 | h)), 0 | o(), d ^ y ^ k | 0, 0 | U)), 0 | o(), 0 | G, 0 | s)), 0 | o(), 0 | Y, 0 | l)), 0 | (Y = 0 | o()), 0 | N, 0 | x), N = 0 | o(), C[B + 56 >> 2] = x, C[B + 56 + 4 >> 2] = N, s = 0 | ZI(u, p, 28), G = 0 | o(), U = 0 | ZI(u, p, 34), G = (0 | o()) ^ G, k = 0 | ZI(u, p, 39), G ^= 0 | o(), G = 0 | vg(0 | (Y = 0 | vg(0 | l, 0 | Y, u & (L | m) | L & m | 0, p & (X | K) | X & K | 0)), 0 | o(), U ^ s ^ k | 0, 0 | G), k = 0 | o(), C[B + 24 >> 2] = G, C[B + 24 + 4 >> 2] = k, s = 0 | ZI(x, N, 14), U = 0 | o(), Y = 0 | ZI(x, N, 18), U = (0 | o()) ^ U, l = 0 | ZI(x, N, 41), U ^= 0 | o(), d = 0 | C[g + ((y = 13 | D) << 3) >> 2], h = 0 | C[g + (y << 3) + 4 >> 2], F = 0 | C[32416 + (y << 3) >> 2], _ = 0 | C[32416 + (y << 3) + 4 >> 2], K = 0 | vg(0 | (_ = 0 | vg(0 | (h = 0 | vg(0 | (U = 0 | vg(0 | (b = 0 | vg(x & (R ^ M) ^ M | 0, N & (P ^ H) ^ H | 0, 0 | J, 0 | b)), 0 | o(), Y ^ s ^ l | 0, 0 | U)), 0 | o(), 0 | d, 0 | h)), 0 | o(), 0 | F, 0 | _)), 0 | (F = 0 | o()), 0 | m, 0 | K), m = 0 | o(), C[B + 48 >> 2] = K, C[B + 48 + 4 >> 2] = m, h = 0 | ZI(G, k, 28), d = 0 | o(), U = 0 | ZI(G, k, 34), d = (0 | o()) ^ d, l = 0 | ZI(G, k, 39), d ^= 0 | o(), d = 0 | vg(0 | (F = 0 | vg(0 | _, 0 | F, G & (u | L) | u & L | 0, k & (p | X) | p & X | 0)), 0 | o(), U ^ h ^ l | 0, 0 | d), l = 0 | o(), C[B + 16 >> 2] = d, C[B + 16 + 4 >> 2] = l, h = 0 | ZI(K, m, 14), U = 0 | o(), F = 0 | ZI(K, m, 18), U = (0 | o()) ^ U, _ = 0 | ZI(K, m, 41), U ^= 0 | o(), Y = 0 | C[g + ((s = 14 | D) << 3) >> 2], b = 0 | C[g + (s << 3) + 4 >> 2], J = 0 | C[32416 + (s << 3) >> 2], v = 0 | C[32416 + (s << 3) + 4 >> 2], X = 0 | vg(0 | (v = 0 | vg(0 | (b = 0 | vg(0 | (U = 0 | vg(0 | (H = 0 | vg(K & (x ^ R) ^ R | 0, m & (N ^ P) ^ P | 0, 0 | M, 0 | H)), 0 | o(), F ^ h ^ _ | 0, 0 | U)), 0 | o(), 0 | Y, 0 | b)), 0 | o(), 0 | J, 0 | v)), 0 | (J = 0 | o()), 0 | L, 0 | X), L = 0 | o(), C[B + 40 >> 2] = X, C[B + 40 + 4 >> 2] = L, b = 0 | ZI(d, l, 28), Y = 0 | o(), U = 0 | ZI(d, l, 34), Y = (0 | o()) ^ Y, _ = 0 | ZI(d, l, 39), Y ^= 0 | o(), Y = 0 | vg(0 | (J = 0 | vg(0 | v, 0 | J, d & (G | u) | G & u | 0, l & (k | p) | k & p | 0)), 0 | o(), U ^ b ^ _ | 0, 0 | Y), _ = 0 | o(), C[B + 8 >> 2] = Y, C[B + 8 + 4 >> 2] = _, b = 0 | ZI(X, L, 14), U = 0 | o(), J = 0 | ZI(X, L, 18), U = (0 | o()) ^ U, v = 0 | ZI(X, L, 41), U ^= 0 | o(), F = 0 | C[g + ((h = 15 | D) << 3) >> 2], H = 0 | C[g + (h << 3) + 4 >> 2], M = 0 | C[32416 + (h << 3) >> 2], S = 0 | C[32416 + (h << 3) + 4 >> 2], p = 0 | vg(0 | (S = 0 | vg(0 | (H = 0 | vg(0 | (U = 0 | vg(0 | (P = 0 | vg(X & (K ^ x) ^ x | 0, L & (m ^ N) ^ N | 0, 0 | R, 0 | P)), 0 | o(), J ^ b ^ v | 0, 0 | U)), 0 | o(), 0 | F, 0 | H)), 0 | o(), 0 | M, 0 | S)), 0 | (M = 0 | o()), 0 | u, 0 | p), u = 0 | o(), C[B + 32 >> 2] = p, C[B + 32 + 4 >> 2] = u, u = 0 | ZI(Y, _, 28), p = 0 | o(), H = 0 | ZI(Y, _, 34), p = (0 | o()) ^ p, F = 0 | ZI(Y, _, 39), p ^= 0 | o(), p = 0 | vg(0 | (k = 0 | vg(0 | S, 0 | M, Y & (d | G) | d & G | 0, _ & (l | k) | l & k | 0)), 0 | o(), H ^ u ^ F | 0, 0 | p), F = 0 | o(), C[B >> 2] = p, C[B + 4 >> 2] = F, 64 == (0 | D)) break; + d = 0 | ZI(K = 0 | C[g + (s << 3) >> 2], X = 0 | C[g + (s << 3) + 4 >> 2], 19), N = 0 | o(), H = 0 | ZI(K, X, 61), k = 0 | o(), k = 0 | vg((R = 0 | yg(0 | K, 0 | X, 6)) ^ d ^ H | 0, 0 | (k = (0 | o()) ^ N ^ k), 0 | (N = 0 | C[g + (n << 3) >> 2]), 0 | (Y = 0 | C[g + (n << 3) + 4 >> 2])), H = 0 | o(), b = 0 | ZI(d = 0 | C[g + (w << 3) >> 2], R = 0 | C[g + (w << 3) + 4 >> 2], 1), p = 0 | o(), m = 0 | ZI(d, R, 8), P = 0 | o(), J = 0 | yg(0 | d, 0 | R, 7), P = (0 | o()) ^ p ^ P, P = 0 | vg(0 | (p = 0 | vg(0 | k, 0 | H, 0 | C[(p = g + (D << 3) | 0) >> 2], 0 | C[p + 4 >> 2])), 0 | o(), J ^ b ^ m | 0, 0 | P), m = 0 | o(), C[(b = g + ((D = D + 16 | 0) << 3) | 0) >> 2] = P, C[b + 4 >> 2] = m, p = 0 | ZI(b = 0 | C[g + (h << 3) >> 2], J = 0 | C[g + (h << 3) + 4 >> 2], 19), H = 0 | o(), k = 0 | ZI(b, J, 61), l = 0 | o(), F = 0 | yg(0 | b, 0 | J, 6), l = (0 | o()) ^ H ^ l, H = 0 | C[g + (w + 9 << 3) >> 2], L = 0 | C[g + (w + 9 << 3) + 4 >> 2], u = 0 | ZI(_ = 0 | C[g + (w + 1 << 3) >> 2], M = 0 | C[g + (w + 1 << 3) + 4 >> 2], 1), U = 0 | o(), G = 0 | ZI(_, M, 8), S = 0 | o(), v = 0 | yg(0 | _, 0 | M, 7), S = (0 | o()) ^ U ^ S, S = 0 | vg(0 | (l = 0 | vg(0 | (R = 0 | vg(0 | H, 0 | L, 0 | d, 0 | R)), 0 | o(), F ^ p ^ k | 0, 0 | l)), 0 | o(), v ^ u ^ G | 0, 0 | S), G = 0 | o(), C[g + (w + 16 << 3) >> 2] = S, C[g + (w + 16 << 3) + 4 >> 2] = G, u = 0 | ZI(P, m, 19), v = 0 | o(), l = 0 | ZI(P, m, 61), w = 0 | o(), w = 0 | vg((m = 0 | yg(0 | P, 0 | m, 6)) ^ u ^ l | 0, 0 | (w = (0 | o()) ^ v ^ w), 0 | (v = 0 | C[g + (t << 3) >> 2]), 0 | (P = 0 | C[g + (t << 3) + 4 >> 2])), l = 0 | o(), k = 0 | ZI(u = 0 | C[g + (Q << 3) >> 2], m = 0 | C[g + (Q << 3) + 4 >> 2], 1), p = 0 | o(), F = 0 | ZI(u, m, 8), R = 0 | o(), d = 0 | yg(0 | u, 0 | m, 7), R = (0 | o()) ^ p ^ R, R = 0 | vg(0 | (M = 0 | vg(0 | w, 0 | l, 0 | _, 0 | M)), 0 | o(), d ^ k ^ F | 0, 0 | R), F = 0 | o(), C[g + (I + 16 << 3) >> 2] = R, C[g + (I + 16 << 3) + 4 >> 2] = F, k = 0 | ZI(S, G, 19), d = 0 | o(), M = 0 | ZI(S, G, 61), _ = 0 | o(), G = 0 | yg(0 | S, 0 | G, 6), _ = (0 | o()) ^ d ^ _, d = 0 | C[g + (Q + 9 << 3) >> 2], S = 0 | C[g + (Q + 9 << 3) + 4 >> 2], w = 0 | ZI(l = 0 | C[g + (Q + 1 << 3) >> 2], I = 0 | C[g + (Q + 1 << 3) + 4 >> 2], 1), p = 0 | o(), L = 0 | ZI(l, I, 8), H = 0 | o(), U = 0 | yg(0 | l, 0 | I, 7), H = (0 | o()) ^ p ^ H, H = 0 | vg(0 | (_ = 0 | vg(0 | (m = 0 | vg(0 | d, 0 | S, 0 | u, 0 | m)), 0 | o(), G ^ k ^ M | 0, 0 | _)), 0 | o(), U ^ w ^ L | 0, 0 | H), L = 0 | o(), C[g + (Q + 16 << 3) >> 2] = H, C[g + (Q + 16 << 3) + 4 >> 2] = L, w = 0 | ZI(R, F, 19), U = 0 | o(), _ = 0 | ZI(R, F, 61), M = 0 | o(), M = 0 | vg((F = 0 | yg(0 | R, 0 | F, 6)) ^ w ^ _ | 0, 0 | (M = (0 | o()) ^ U ^ M), 0 | (U = 0 | C[g + (y << 3) >> 2]), 0 | (R = 0 | C[g + (y << 3) + 4 >> 2])), _ = 0 | o(), k = 0 | ZI(w = 0 | C[g + (i << 3) >> 2], F = 0 | C[g + (i << 3) + 4 >> 2], 1), G = 0 | o(), m = 0 | ZI(w, F, 8), u = 0 | o(), S = 0 | yg(0 | w, 0 | F, 7), u = (0 | o()) ^ G ^ u, u = 0 | vg(0 | (I = 0 | vg(0 | M, 0 | _, 0 | l, 0 | I)), 0 | o(), S ^ k ^ m | 0, 0 | u), m = 0 | o(), C[g + (E + 16 << 3) >> 2] = u, C[g + (E + 16 << 3) + 4 >> 2] = m, k = 0 | ZI(H, L, 19), S = 0 | o(), I = 0 | ZI(H, L, 61), l = 0 | o(), L = 0 | yg(0 | H, 0 | L, 6), l = (0 | o()) ^ S ^ l, S = 0 | C[g + (i + 9 << 3) >> 2], H = 0 | C[g + (i + 9 << 3) + 4 >> 2], G = 0 | ZI(_ = 0 | C[g + (i + 1 << 3) >> 2], M = 0 | C[g + (i + 1 << 3) + 4 >> 2], 1), d = 0 | o(), p = 0 | ZI(_, M, 8), x = 0 | o(), Q = 0 | yg(0 | _, 0 | M, 7), x = (0 | o()) ^ d ^ x, x = 0 | vg(0 | (l = 0 | vg(0 | (F = 0 | vg(0 | S, 0 | H, 0 | w, 0 | F)), 0 | o(), L ^ k ^ I | 0, 0 | l)), 0 | o(), Q ^ G ^ p | 0, 0 | x), p = 0 | o(), C[g + (i + 16 << 3) >> 2] = x, C[g + (i + 16 << 3) + 4 >> 2] = p, G = 0 | ZI(u, m, 19), Q = 0 | o(), l = 0 | ZI(u, m, 61), I = 0 | o(), I = 0 | vg((m = 0 | yg(0 | u, 0 | m, 6)) ^ G ^ l | 0, (0 | o()) ^ Q ^ I | 0, 0 | b, 0 | J), Q = 0 | o(), m = 0 | ZI(l = 0 | C[g + (c << 3) >> 2], G = 0 | C[g + (c << 3) + 4 >> 2], 1), u = 0 | o(), k = 0 | ZI(l, G, 8), L = 0 | o(), F = 0 | yg(0 | l, 0 | G, 7), L = (0 | o()) ^ u ^ L, L = 0 | vg(0 | (M = 0 | vg(0 | I, 0 | Q, 0 | _, 0 | M)), 0 | o(), F ^ m ^ k | 0, 0 | L), k = 0 | o(), C[g + (e + 16 << 3) >> 2] = L, C[g + (e + 16 << 3) + 4 >> 2] = k, m = 0 | ZI(x, p, 19), F = 0 | o(), M = 0 | ZI(x, p, 61), _ = 0 | o(), p = 0 | yg(0 | x, 0 | p, 6), _ = (0 | o()) ^ F ^ _, F = 0 | C[g + (c + 9 << 3) >> 2], x = 0 | C[g + (c + 9 << 3) + 4 >> 2], u = 0 | ZI(Q = 0 | C[g + (c + 1 << 3) >> 2], I = 0 | C[g + (c + 1 << 3) + 4 >> 2], 1), w = 0 | o(), H = 0 | ZI(Q, I, 8), S = 0 | o(), d = 0 | yg(0 | Q, 0 | I, 7), S = (0 | o()) ^ w ^ S, S = 0 | vg(0 | (_ = 0 | vg(0 | (G = 0 | vg(0 | F, 0 | x, 0 | l, 0 | G)), 0 | o(), p ^ m ^ M | 0, 0 | _)), 0 | o(), d ^ u ^ H | 0, 0 | S), H = 0 | o(), C[g + (c + 16 << 3) >> 2] = S, C[g + (c + 16 << 3) + 4 >> 2] = H, u = 0 | ZI(L, k, 19), d = 0 | o(), _ = 0 | ZI(L, k, 61), M = 0 | o(), M = 0 | vg((k = 0 | yg(0 | L, 0 | k, 6)) ^ u ^ _ | 0, 0 | (M = (0 | o()) ^ d ^ M), 0 | C[g + (a + 9 << 3) >> 2], 0 | C[g + (a + 9 << 3) + 4 >> 2]), _ = 0 | o(), u = 0 | ZI(N, Y, 1), k = 0 | o(), d = 0 | ZI(N, Y, 8), L = 0 | o(), m = 0 | yg(0 | N, 0 | Y, 7), L = k ^ (0 | o()) ^ L, L = 0 | vg(0 | (I = 0 | vg(0 | M, 0 | _, 0 | Q, 0 | I)), 0 | o(), u ^ m ^ d | 0, 0 | L), d = 0 | o(), C[g + (a + 16 << 3) >> 2] = L, C[g + (a + 16 << 3) + 4 >> 2] = d, m = 0 | ZI(S, H, 19), u = 0 | o(), I = 0 | ZI(S, H, 61), Q = 0 | o(), H = 0 | yg(0 | S, 0 | H, 6), Q = (0 | o()) ^ u ^ Q, u = 0 | C[g + (n + 9 << 3) >> 2], S = 0 | C[g + (n + 9 << 3) + 4 >> 2], k = 0 | ZI(_ = 0 | C[g + (n + 1 << 3) >> 2], M = 0 | C[g + (n + 1 << 3) + 4 >> 2], 1), p = 0 | o(), G = 0 | ZI(_, M, 8), l = 0 | o(), x = 0 | yg(0 | _, 0 | M, 7), l = (0 | o()) ^ p ^ l, l = 0 | vg(0 | (Q = 0 | vg(0 | (Y = 0 | vg(0 | u, 0 | S, 0 | N, 0 | Y)), 0 | o(), H ^ m ^ I | 0, 0 | Q)), 0 | o(), x ^ k ^ G | 0, 0 | l), G = 0 | o(), C[g + (n + 16 << 3) >> 2] = l, C[g + (n + 16 << 3) + 4 >> 2] = G, k = 0 | ZI(L, d, 19), x = 0 | o(), Q = 0 | ZI(L, d, 61), I = 0 | o(), I = 0 | vg((d = 0 | yg(0 | L, 0 | d, 6)) ^ k ^ Q | 0, 0 | (I = (0 | o()) ^ x ^ I), 0 | C[g + (r + 9 << 3) >> 2], 0 | C[g + (r + 9 << 3) + 4 >> 2]), Q = 0 | o(), k = 0 | ZI(v, P, 1), d = 0 | o(), x = 0 | ZI(v, P, 8), L = 0 | o(), m = 0 | yg(0 | v, 0 | P, 7), L = d ^ (0 | o()) ^ L, L = 0 | vg(0 | (M = 0 | vg(0 | I, 0 | Q, 0 | _, 0 | M)), 0 | o(), k ^ m ^ x | 0, 0 | L), x = 0 | o(), C[g + (r + 16 << 3) >> 2] = L, C[g + (r + 16 << 3) + 4 >> 2] = x, m = 0 | ZI(l, G, 19), k = 0 | o(), M = 0 | ZI(l, G, 61), _ = 0 | o(), G = 0 | yg(0 | l, 0 | G, 6), _ = (0 | o()) ^ k ^ _, k = 0 | C[g + (t + 9 << 3) >> 2], l = 0 | C[g + (t + 9 << 3) + 4 >> 2], d = 0 | ZI(Q = 0 | C[g + (t + 1 << 3) >> 2], I = 0 | C[g + (t + 1 << 3) + 4 >> 2], 1), H = 0 | o(), Y = 0 | ZI(Q, I, 8), N = 0 | o(), S = 0 | yg(0 | Q, 0 | I, 7), N = (0 | o()) ^ H ^ N, N = 0 | vg(0 | (_ = 0 | vg(0 | (P = 0 | vg(0 | k, 0 | l, 0 | v, 0 | P)), 0 | o(), G ^ m ^ M | 0, 0 | _)), 0 | o(), S ^ d ^ Y | 0, 0 | N), Y = 0 | o(), C[g + (t + 16 << 3) >> 2] = N, C[g + (t + 16 << 3) + 4 >> 2] = Y, d = 0 | ZI(L, x, 19), S = 0 | o(), _ = 0 | ZI(L, x, 61), M = 0 | o(), M = 0 | vg((x = 0 | yg(0 | L, 0 | x, 6)) ^ d ^ _ | 0, 0 | (M = (0 | o()) ^ S ^ M), 0 | C[g + (f + 9 << 3) >> 2], 0 | C[g + (f + 9 << 3) + 4 >> 2]), _ = 0 | o(), d = 0 | ZI(U, R, 1), x = 0 | o(), S = 0 | ZI(U, R, 8), L = 0 | o(), m = 0 | yg(0 | U, 0 | R, 7), L = x ^ (0 | o()) ^ L, L = 0 | vg(0 | (I = 0 | vg(0 | M, 0 | _, 0 | Q, 0 | I)), 0 | o(), d ^ m ^ S | 0, 0 | L), S = 0 | o(), C[g + (f + 16 << 3) >> 2] = L, C[g + (f + 16 << 3) + 4 >> 2] = S, m = 0 | ZI(N, Y, 19), d = 0 | o(), I = 0 | ZI(N, Y, 61), Q = 0 | o(), Y = 0 | yg(0 | N, 0 | Y, 6), Q = (0 | o()) ^ d ^ Q, d = 0 | C[g + (y + 9 << 3) >> 2], N = 0 | C[g + (y + 9 << 3) + 4 >> 2], x = 0 | ZI(_ = 0 | C[g + (y + 1 << 3) >> 2], M = 0 | C[g + (y + 1 << 3) + 4 >> 2], 1), G = 0 | o(), P = 0 | ZI(_, M, 8), v = 0 | o(), M = 0 | yg(0 | _, 0 | M, 7), v = (0 | o()) ^ G ^ v, v = 0 | vg(0 | (Q = 0 | vg(0 | (R = 0 | vg(0 | d, 0 | N, 0 | U, 0 | R)), 0 | o(), Y ^ m ^ I | 0, 0 | Q)), 0 | o(), M ^ x ^ P | 0, 0 | v), P = 0 | o(), C[g + (y + 16 << 3) >> 2] = v, C[g + (y + 16 << 3) + 4 >> 2] = P, x = 0 | ZI(L, S, 19), M = 0 | o(), Q = 0 | ZI(L, S, 61), I = 0 | o(), S = 0 | yg(0 | L, 0 | S, 6), I = (0 | o()) ^ M ^ I, M = 0 | C[g + (s + 9 << 3) >> 2], L = 0 | C[g + (s + 9 << 3) + 4 >> 2], m = 0 | ZI(b, J, 1), Y = 0 | o(), R = 0 | ZI(b, J, 8), U = 0 | o(), N = 0 | yg(0 | b, 0 | J, 7), U = Y ^ (0 | o()) ^ U, U = 0 | vg(0 | (I = 0 | vg(0 | (X = 0 | vg(0 | M, 0 | L, 0 | K, 0 | X)), 0 | o(), S ^ x ^ Q | 0, 0 | I)), 0 | o(), m ^ N ^ R | 0, 0 | U), R = 0 | o(), C[g + (s + 16 << 3) >> 2] = U, C[g + (s + 16 << 3) + 4 >> 2] = R, R = 0 | ZI(v, P, 19), U = 0 | o(), N = 0 | ZI(v, P, 61), m = 0 | o(), P = 0 | yg(0 | v, 0 | P, 6), m = (0 | o()) ^ U ^ m, U = 0 | C[g + (h + 9 << 3) >> 2], v = 0 | C[g + (h + 9 << 3) + 4 >> 2], x = 0 | ZI(I = 0 | C[g + (h + 1 << 3) >> 2], Q = 0 | C[g + (h + 1 << 3) + 4 >> 2], 1), S = 0 | o(), X = 0 | ZI(I, Q, 8), K = 0 | o(), L = 0 | yg(0 | I, 0 | Q, 7), K = (0 | o()) ^ S ^ K, K = 0 | vg(0 | (m = 0 | vg(0 | (J = 0 | vg(0 | U, 0 | v, 0 | b, 0 | J)), 0 | o(), P ^ R ^ N | 0, 0 | m)), 0 | o(), L ^ x ^ X | 0, 0 | K), X = 0 | o(), C[g + (h + 16 << 3) >> 2] = K, C[g + (h + 16 << 3) + 4 >> 2] = X; + } while (D >>> 0 < 80); + + I = 0; + + do { + x = B + (I << 3) | 0, x = 0 | vg(0 | C[(X = A + (I << 3) | 0) >> 2], 0 | C[X + 4 >> 2], 0 | C[x >> 2], 0 | C[x + 4 >> 2]), K = 0 | o(), C[X >> 2] = x, C[X + 4 >> 2] = K, I = I + 1 | 0; + } while (8 != (0 | I)); + } + + function F(A) { + A |= 0; + var I, + g = 0, + B = 0, + Q = 0, + E = 0, + i = 0, + e = 0, + o = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0; + I = y, f = y = y + 63 & -64, y = y + 16 | 0; + + do { + if (A >>> 0 < 245) { + if (t = A >>> 0 < 11 ? 16 : A + 11 & -8, (n = 0 | C[8679]) >>> (t >>> 3) & 3 | 0) return A = 0 | C[8 + (B = 34756 + ((n >>> (t >>> 3) & 1 ^ 1) + (t >>> 3) << 1 << 2) | 0) >> 2], (0 | (g = 0 | C[A + 8 >> 2])) == (0 | B) ? C[8679] = n & ~(1 << (n >>> (t >>> 3) & 1 ^ 1) + (t >>> 3)) : (C[g + 12 >> 2] = B, C[B + 8 >> 2] = g), u = (n >>> (t >>> 3) & 1 ^ 1) + (t >>> 3) << 3, C[A + 4 >> 2] = 3 | u, C[A + u + 4 >> 2] = 1 | C[A + u + 4 >> 2], y = I, 0 | A + 8; + + if (t >>> 0 > (r = 0 | C[8681]) >>> 0) { + if (n >>> (t >>> 3) | 0) return Q = 0 | C[34756 + ((E = ((Q = (((A = n >>> (t >>> 3) << (t >>> 3) & (2 << (t >>> 3) | 0 - (2 << (t >>> 3)))) & 0 - A) - 1 | 0) >>> (((A & 0 - A) - 1 | 0) >>> 12 & 16)) >>> 5 & 8 | ((A & 0 - A) - 1 | 0) >>> 12 & 16 | Q >>> (Q >>> 5 & 8) >>> 2 & 4 | (E = Q >>> (Q >>> 5 & 8) >>> (Q >>> (Q >>> 5 & 8) >>> 2 & 4)) >>> 1 & 2 | E >>> (E >>> 1 & 2) >>> 1 & 1) + (E >>> (E >>> 1 & 2) >>> (E >>> (E >>> 1 & 2) >>> 1 & 1)) | 0) << 1 << 2) + 8 >> 2], (0 | (A = 0 | C[Q + 8 >> 2])) == (34756 + (E << 1 << 2) | 0) ? (C[8679] = n & ~(1 << E), A = n & ~(1 << E)) : (C[A + 12 >> 2] = 34756 + (E << 1 << 2), C[34756 + (E << 1 << 2) + 8 >> 2] = A, A = n), C[Q + 4 >> 2] = 3 | t, C[Q + t + 4 >> 2] = (E << 3) - t | 1, C[Q + (E << 3) >> 2] = (E << 3) - t, 0 | r && (B = 0 | C[8684], A & 1 << (r >>> 3) ? (A = 34756 + (r >>> 3 << 1 << 2) + 8 | 0, g = 0 | C[34756 + (r >>> 3 << 1 << 2) + 8 >> 2]) : (C[8679] = A | 1 << (r >>> 3), A = 34756 + (r >>> 3 << 1 << 2) + 8 | 0, g = 34756 + (r >>> 3 << 1 << 2) | 0), C[A >> 2] = B, C[g + 12 >> 2] = B, C[B + 8 >> 2] = g, C[B + 12 >> 2] = 34756 + (r >>> 3 << 1 << 2)), C[8681] = (E << 3) - t, C[8684] = Q + t, y = I, 0 | Q + 8; + + if (e = 0 | C[8680]) { + for (a = 0 | C[35020 + (((c = ((e & 0 - e) - 1 | 0) >>> (((e & 0 - e) - 1 | 0) >>> 12 & 16)) >>> 5 & 8 | ((e & 0 - e) - 1 | 0) >>> 12 & 16 | c >>> (c >>> 5 & 8) >>> 2 & 4 | (a = c >>> (c >>> 5 & 8) >>> (c >>> (c >>> 5 & 8) >>> 2 & 4)) >>> 1 & 2 | a >>> (a >>> 1 & 2) >>> 1 & 1) + (a >>> (a >>> 1 & 2) >>> (a >>> (a >>> 1 & 2) >>> 1 & 1)) << 2) >> 2], c = (-8 & C[a + 4 >> 2]) - t | 0, g = a; (A = 0 | C[g + 16 >> 2]) || (A = 0 | C[g + 20 >> 2]);) { + c = (o = (g = (-8 & C[A + 4 >> 2]) - t | 0) >>> 0 < c >>> 0) ? g : c, g = A, a = o ? A : a; + } + + if ((o = a + t | 0) >>> 0 > a >>> 0) { + E = 0 | C[a + 24 >> 2], A = 0 | C[a + 12 >> 2]; + + do { + if ((0 | A) == (0 | a)) { + if (!(A = 0 | C[(g = a + 20 | 0) >> 2]) && !(A = 0 | C[(g = a + 16 | 0) >> 2])) { + g = 0; + break; + } + + for (;;) { + if (B = 0 | C[(Q = A + 20 | 0) >> 2]) A = B, g = Q;else { + if (!(B = 0 | C[(Q = A + 16 | 0) >> 2])) break; + A = B, g = Q; + } + } + + C[g >> 2] = 0, g = A; + } else g = 0 | C[a + 8 >> 2], C[g + 12 >> 2] = A, C[A + 8 >> 2] = g, g = A; + } while (0); + + do { + if (0 | E) { + if (A = 0 | C[a + 28 >> 2], (0 | a) == (0 | C[35020 + (A << 2) >> 2])) { + if (C[35020 + (A << 2) >> 2] = g, !g) { + C[8680] = e & ~(1 << A); + break; + } + } else if (C[((0 | C[E + 16 >> 2]) == (0 | a) ? E + 16 | 0 : E + 20 | 0) >> 2] = g, !g) break; + + C[g + 24 >> 2] = E, 0 | (A = 0 | C[a + 16 >> 2]) && (C[g + 16 >> 2] = A, C[A + 24 >> 2] = g), 0 | (A = 0 | C[a + 20 >> 2]) && (C[g + 20 >> 2] = A, C[A + 24 >> 2] = g); + } + } while (0); + + return c >>> 0 < 16 ? (u = c + t | 0, C[a + 4 >> 2] = 3 | u, C[(u = a + u + 4 | 0) >> 2] = 1 | C[u >> 2]) : (C[a + 4 >> 2] = 3 | t, C[o + 4 >> 2] = 1 | c, C[o + c >> 2] = c, 0 | r && (B = 0 | C[8684], 1 << (r >>> 3) & n ? (A = 34756 + (r >>> 3 << 1 << 2) + 8 | 0, g = 0 | C[34756 + (r >>> 3 << 1 << 2) + 8 >> 2]) : (C[8679] = 1 << (r >>> 3) | n, A = 34756 + (r >>> 3 << 1 << 2) + 8 | 0, g = 34756 + (r >>> 3 << 1 << 2) | 0), C[A >> 2] = B, C[g + 12 >> 2] = B, C[B + 8 >> 2] = g, C[B + 12 >> 2] = 34756 + (r >>> 3 << 1 << 2)), C[8681] = c, C[8684] = o), y = I, 0 | a + 8; + } + } + } + } else if (A >>> 0 <= 4294967231) { + if (t = A + 11 & -8, Q = 0 | C[8680]) { + c = (A + 11 | 0) >>> 8 ? t >>> 0 > 16777215 ? 31 : t >>> (7 + (c = 14 - ((520192 + (c = (A + 11 | 0) >>> 8 << ((1048320 + ((A + 11 | 0) >>> 8) | 0) >>> 16 & 8)) | 0) >>> 16 & 4 | (1048320 + ((A + 11 | 0) >>> 8) | 0) >>> 16 & 8 | (245760 + (c << ((c + 520192 | 0) >>> 16 & 4)) | 0) >>> 16 & 2) + (c << ((c + 520192 | 0) >>> 16 & 4) << ((245760 + (c << ((c + 520192 | 0) >>> 16 & 4)) | 0) >>> 16 & 2) >>> 15) | 0) | 0) & 1 | c << 1 : 0, A = 0 | C[35020 + (c << 2) >> 2]; + + A: do { + if (A) for (B = 0 - t | 0, g = 0, o = t << (31 == (0 | c) ? 0 : 25 - (c >>> 1) | 0), e = 0;;) { + if ((E = (-8 & C[A + 4 >> 2]) - t | 0) >>> 0 < B >>> 0) { + if (!E) { + B = 0, g = A, h = 65; + break A; + } + + B = E, e = A; + } + + if (g = 0 == (0 | (h = 0 | C[A + 20 >> 2])) | (0 | h) == (0 | (A = 0 | C[A + 16 + (o >>> 31 << 2) >> 2])) ? g : h, !A) { + A = e, h = 61; + break; + } + + o <<= 1; + } else B = 0 - t | 0, g = 0, A = 0, h = 61; + } while (0); + + if (61 == (0 | h)) { + if (0 == (0 | g) & 0 == (0 | A)) { + if (!(((A = 2 << c) | 0 - A) & Q)) break; + g = 0 | C[35020 + (((r = ((A | 0 - A) & Q & 0 - ((A | 0 - A) & Q)) - 1 | 0) >>> (r >>> 12 & 16) >>> 5 & 8 | r >>> 12 & 16 | (A = r >>> (r >>> 12 & 16) >>> (r >>> (r >>> 12 & 16) >>> 5 & 8)) >>> 2 & 4 | A >>> (A >>> 2 & 4) >>> 1 & 2 | (g = A >>> (A >>> 2 & 4) >>> (A >>> (A >>> 2 & 4) >>> 1 & 2)) >>> 1 & 1) + (g >>> (g >>> 1 & 1)) << 2) >> 2], A = 0; + } + + g ? h = 65 : (e = B, o = A); + } + + if (65 == (0 | h)) for (;;) { + if (B = (E = (r = (-8 & C[g + 4 >> 2]) - t | 0) >>> 0 < B >>> 0) ? r : B, E = E ? g : A, (A = 0 | C[g + 16 >> 2]) || (A = 0 | C[g + 20 >> 2]), !A) { + e = B, o = E; + break; + } + + g = A, A = E; + } + + if (0 != (0 | o) && e >>> 0 < ((0 | C[8681]) - t | 0) >>> 0 && (a = o + t | 0) >>> 0 > o >>> 0) { + i = 0 | C[o + 24 >> 2], A = 0 | C[o + 12 >> 2]; + + do { + if ((0 | A) == (0 | o)) { + if (!(A = 0 | C[(g = o + 20 | 0) >> 2]) && !(A = 0 | C[(g = o + 16 | 0) >> 2])) { + A = 0; + break; + } + + for (;;) { + if (B = 0 | C[(E = A + 20 | 0) >> 2]) A = B, g = E;else { + if (!(B = 0 | C[(E = A + 16 | 0) >> 2])) break; + A = B, g = E; + } + } + + C[g >> 2] = 0; + } else u = 0 | C[o + 8 >> 2], C[u + 12 >> 2] = A, C[A + 8 >> 2] = u; + } while (0); + + do { + if (i) { + if (g = 0 | C[o + 28 >> 2], (0 | o) == (0 | C[35020 + (g << 2) >> 2])) { + if (C[35020 + (g << 2) >> 2] = A, !A) { + C[8680] = Q & ~(1 << g), Q &= ~(1 << g); + break; + } + } else if (C[((0 | C[i + 16 >> 2]) == (0 | o) ? i + 16 | 0 : i + 20 | 0) >> 2] = A, !A) break; + + C[A + 24 >> 2] = i, 0 | (g = 0 | C[o + 16 >> 2]) && (C[A + 16 >> 2] = g, C[g + 24 >> 2] = A), (g = 0 | C[o + 20 >> 2]) && (C[A + 20 >> 2] = g, C[g + 24 >> 2] = A); + } + } while (0); + + A: do { + if (e >>> 0 < 16) u = e + t | 0, C[o + 4 >> 2] = 3 | u, C[(u = o + u + 4 | 0) >> 2] = 1 | C[u >> 2];else { + if (C[o + 4 >> 2] = 3 | t, C[a + 4 >> 2] = 1 | e, C[a + e >> 2] = e, B = e >>> 3, e >>> 0 < 256) { + (A = 0 | C[8679]) & 1 << B ? (A = 34756 + (B << 1 << 2) + 8 | 0, g = 0 | C[34756 + (B << 1 << 2) + 8 >> 2]) : (C[8679] = A | 1 << B, A = 34756 + (B << 1 << 2) + 8 | 0, g = 34756 + (B << 1 << 2) | 0), C[A >> 2] = a, C[g + 12 >> 2] = a, C[a + 8 >> 2] = g, C[a + 12 >> 2] = 34756 + (B << 1 << 2); + break; + } + + if (A = 35020 + ((B = (A = e >>> 8) ? e >>> 0 > 16777215 ? 31 : e >>> (7 + (B = 14 - ((520192 + (A << ((A + 1048320 | 0) >>> 16 & 8)) | 0) >>> 16 & 4 | (A + 1048320 | 0) >>> 16 & 8 | (245760 + (B = A << ((A + 1048320 | 0) >>> 16 & 8) << ((520192 + (A << ((A + 1048320 | 0) >>> 16 & 8)) | 0) >>> 16 & 4)) | 0) >>> 16 & 2) + (B << ((B + 245760 | 0) >>> 16 & 2) >>> 15) | 0) | 0) & 1 | B << 1 : 0) << 2) | 0, C[a + 28 >> 2] = B, C[a + 16 + 4 >> 2] = 0, C[a + 16 >> 2] = 0, !(Q & (g = 1 << B))) { + C[8680] = Q | g, C[A >> 2] = a, C[a + 24 >> 2] = A, C[a + 12 >> 2] = a, C[a + 8 >> 2] = a; + break; + } + + A = 0 | C[A >> 2]; + + I: do { + if ((-8 & C[A + 4 >> 2] | 0) != (0 | e)) { + for (Q = e << (31 == (0 | B) ? 0 : 25 - (B >>> 1) | 0); g = 0 | C[(B = A + 16 + (Q >>> 31 << 2) | 0) >> 2];) { + if ((-8 & C[g + 4 >> 2] | 0) == (0 | e)) { + A = g; + break I; + } + + Q <<= 1, A = g; + } + + C[B >> 2] = a, C[a + 24 >> 2] = A, C[a + 12 >> 2] = a, C[a + 8 >> 2] = a; + break A; + } + } while (0); + + u = 0 | C[(p = A + 8 | 0) >> 2], C[u + 12 >> 2] = a, C[p >> 2] = a, C[a + 8 >> 2] = u, C[a + 12 >> 2] = A, C[a + 24 >> 2] = 0; + } + } while (0); + + return y = I, 0 | o + 8; + } + } + } else t = -1; + } while (0); + + if ((B = 0 | C[8681]) >>> 0 >= t >>> 0) return g = B - t | 0, A = 0 | C[8684], g >>> 0 > 15 ? (u = A + t | 0, C[8684] = u, C[8681] = g, C[u + 4 >> 2] = 1 | g, C[A + B >> 2] = g, C[A + 4 >> 2] = 3 | t) : (C[8681] = 0, C[8684] = 0, C[A + 4 >> 2] = 3 | B, C[A + B + 4 >> 2] = 1 | C[A + B + 4 >> 2]), y = I, 0 | A + 8; + if ((E = 0 | C[8682]) >>> 0 > t >>> 0) return F = E - t | 0, C[8682] = F, p = (u = 0 | C[8685]) + t | 0, C[8685] = p, C[p + 4 >> 2] = 1 | F, C[u + 4 >> 2] = 3 | t, y = I, 0 | u + 8; + if (0 | C[8797] ? A = 0 | C[8799] : (C[8799] = 4096, C[8798] = 4096, C[8800] = -1, C[8801] = -1, C[8802] = 0, C[8790] = 0, C[8797] = -16 & f ^ 1431655768, A = 4096), e = t + 48 | 0, ((a = A + (o = t + 47 | 0) | 0) & (c = 0 - A | 0)) >>> 0 <= t >>> 0) return y = I, 0; + if (0 | (A = 0 | C[8789]) && (((f = 0 | C[8787]) + (a & c) | 0) >>> 0 <= f >>> 0 || (f + (a & c) | 0) >>> 0 > A >>> 0)) return y = I, 0; + + A: do { + if (4 & C[8790]) A = 0, h = 143;else { + g = 0 | C[8685]; + + I: do { + if (g) { + for (B = 35164; !((A = 0 | C[B >> 2]) >>> 0 <= g >>> 0 && (A + (0 | C[(s = B + 4 | 0) >> 2]) | 0) >>> 0 > g >>> 0);) { + if (!(A = 0 | C[B + 8 >> 2])) { + h = 128; + break I; + } + + B = A; + } + + if ((a - E & c) >>> 0 < 2147483647) { + if ((0 | (A = 0 | bI(a - E & c))) == ((0 | C[B >> 2]) + (0 | C[s >> 2]) | 0)) { + if (-1 != (0 | A)) { + e = A, i = a - E & c, h = 145; + break A; + } + + A = a - E & c; + } else Q = A, B = a - E & c, h = 136; + } else A = 0; + } else h = 128; + } while (0); + + do { + if (128 == (0 | h)) if (-1 != (0 | (g = 0 | bI(0))) && (i = (0 == ((i = 0 | C[8798]) - 1 & g | 0) ? 0 : (i + -1 + g & 0 - i) - g | 0) + (a & c) | 0, w = 0 | C[8787], i >>> 0 > t >>> 0 & i >>> 0 < 2147483647)) { + if (0 | (s = 0 | C[8789]) && (i + w | 0) >>> 0 <= w >>> 0 | (i + w | 0) >>> 0 > s >>> 0) { + A = 0; + break; + } + + if ((0 | (A = 0 | bI(i))) == (0 | g)) { + e = g, h = 145; + break A; + } + + Q = A, B = i, h = 136; + } else A = 0; + } while (0); + + do { + if (136 == (0 | h)) { + if (g = 0 - B | 0, !(e >>> 0 > B >>> 0 & B >>> 0 < 2147483647 & -1 != (0 | Q))) { + if (-1 == (0 | Q)) { + A = 0; + break; + } + + e = Q, i = B, h = 145; + break A; + } + + if ((A = o - B + (A = 0 | C[8799]) & 0 - A) >>> 0 >= 2147483647) { + e = Q, i = B, h = 145; + break A; + } + + if (-1 == (0 | bI(A))) { + bI(g), A = 0; + break; + } + + e = Q, i = A + B | 0, h = 145; + break A; + } + } while (0); + + C[8790] = 4 | C[8790], h = 143; + } + } while (0); + + if (143 == (0 | h) && (a & c) >>> 0 < 2147483647 && !(-1 == (0 | (D = 0 | bI(a & c))) | 1 ^ (p = ((F = 0 | bI(0)) - D | 0) >>> 0 > (t + 40 | 0) >>> 0) | D >>> 0 < F >>> 0 & -1 != (0 | D) & -1 != (0 | F) ^ 1) && (e = D, i = p ? F - D | 0 : A, h = 145), 145 == (0 | h)) { + A = (0 | C[8787]) + i | 0, C[8787] = A, A >>> 0 > (0 | C[8788]) >>> 0 && (C[8788] = A), c = 0 | C[8685]; + + A: do { + if (c) { + for (E = 35164;;) { + if ((0 | e) == ((A = 0 | C[E >> 2]) + (g = 0 | C[(Q = E + 4 | 0) >> 2]) | 0)) { + h = 154; + break; + } + + if (!(B = 0 | C[E + 8 >> 2])) break; + E = B; + } + + if (154 == (0 | h) && 0 == (8 & C[E + 12 >> 2] | 0) && e >>> 0 > c >>> 0 & A >>> 0 <= c >>> 0) { + C[Q >> 2] = g + i, u = (0 | C[8682]) + i | 0, p = 0 == (c + 8 & 7 | 0) ? 0 : 0 - (c + 8) & 7, C[8685] = c + p, C[8682] = u - p, C[c + p + 4 >> 2] = u - p | 1, C[c + u + 4 >> 2] = 40, C[8686] = C[8801]; + break; + } + + for (e >>> 0 < (0 | C[8683]) >>> 0 && (C[8683] = e), B = e + i | 0, g = 35164;;) { + if ((0 | C[g >> 2]) == (0 | B)) { + h = 162; + break; + } + + if (!(A = 0 | C[g + 8 >> 2])) break; + g = A; + } + + if (162 == (0 | h) && 0 == (8 & C[g + 12 >> 2] | 0)) { + C[g >> 2] = e, C[(n = g + 4 | 0) >> 2] = (0 | C[n >> 2]) + i, a = (n = e + (0 == (7 & (n = e + 8 | 0) | 0) ? 0 : 0 - n & 7) | 0) + t | 0, o = (A = B + (0 == (B + 8 & 7 | 0) ? 0 : 0 - (B + 8) & 7) | 0) - n - t | 0, C[n + 4 >> 2] = 3 | t; + + I: do { + if ((0 | c) == (0 | A)) u = (0 | C[8682]) + o | 0, C[8682] = u, C[8685] = a, C[a + 4 >> 2] = 1 | u;else { + if ((0 | C[8684]) == (0 | A)) { + u = (0 | C[8681]) + o | 0, C[8681] = u, C[8684] = a, C[a + 4 >> 2] = 1 | u, C[a + u >> 2] = u; + break; + } + + if (1 == (3 & (e = 0 | C[A + 4 >> 2]) | 0)) { + g: do { + if (e >>> 0 < 256) { + if (g = 0 | C[A + 8 >> 2], (0 | (B = 0 | C[A + 12 >> 2])) == (0 | g)) { + C[8679] = C[8679] & ~(1 << (e >>> 3)); + break; + } + + C[g + 12 >> 2] = B, C[B + 8 >> 2] = g; + break; + } + + i = 0 | C[A + 24 >> 2], g = 0 | C[A + 12 >> 2]; + + do { + if ((0 | g) == (0 | A)) { + if (g = 0 | C[A + 16 + 4 >> 2]) B = A + 16 + 4 | 0;else { + if (!(g = 0 | C[A + 16 >> 2])) { + g = 0; + break; + } + + B = A + 16 | 0; + } + + for (;;) { + if (Q = 0 | C[(E = g + 20 | 0) >> 2]) g = Q, B = E;else { + if (!(Q = 0 | C[(E = g + 16 | 0) >> 2])) break; + g = Q, B = E; + } + } + + C[B >> 2] = 0; + } else u = 0 | C[A + 8 >> 2], C[u + 12 >> 2] = g, C[g + 8 >> 2] = u; + } while (0); + + if (!i) break; + B = 0 | C[A + 28 >> 2]; + + do { + if ((0 | C[35020 + (B << 2) >> 2]) == (0 | A)) { + if (C[35020 + (B << 2) >> 2] = g, 0 | g) break; + C[8680] = C[8680] & ~(1 << B); + break g; + } + + if (C[((0 | C[i + 16 >> 2]) == (0 | A) ? i + 16 | 0 : i + 20 | 0) >> 2] = g, !g) break g; + } while (0); + + if (C[g + 24 >> 2] = i, 0 | (B = 0 | C[A + 16 >> 2]) && (C[g + 16 >> 2] = B, C[B + 24 >> 2] = g), !(B = 0 | C[A + 16 + 4 >> 2])) break; + C[g + 20 >> 2] = B, C[B + 24 >> 2] = g; + } while (0); + + A = A + (-8 & e) | 0, E = (-8 & e) + o | 0; + } else E = o; + + if (C[(B = A + 4 | 0) >> 2] = -2 & C[B >> 2], C[a + 4 >> 2] = 1 | E, C[a + E >> 2] = E, B = E >>> 3, E >>> 0 < 256) { + (A = 0 | C[8679]) & 1 << B ? (A = 34756 + (B << 1 << 2) + 8 | 0, g = 0 | C[34756 + (B << 1 << 2) + 8 >> 2]) : (C[8679] = A | 1 << B, A = 34756 + (B << 1 << 2) + 8 | 0, g = 34756 + (B << 1 << 2) | 0), C[A >> 2] = a, C[g + 12 >> 2] = a, C[a + 8 >> 2] = g, C[a + 12 >> 2] = 34756 + (B << 1 << 2); + break; + } + + A = E >>> 8; + + do { + if (A) { + if (E >>> 0 > 16777215) { + Q = 31; + break; + } + + Q = E >>> (7 + (Q = 14 - ((520192 + (A << ((A + 1048320 | 0) >>> 16 & 8)) | 0) >>> 16 & 4 | (A + 1048320 | 0) >>> 16 & 8 | (245760 + (Q = A << ((A + 1048320 | 0) >>> 16 & 8) << ((520192 + (A << ((A + 1048320 | 0) >>> 16 & 8)) | 0) >>> 16 & 4)) | 0) >>> 16 & 2) + (Q << ((Q + 245760 | 0) >>> 16 & 2) >>> 15) | 0) | 0) & 1 | Q << 1; + } else Q = 0; + } while (0); + + if (g = 35020 + (Q << 2) | 0, C[a + 28 >> 2] = Q, C[a + 16 + 4 >> 2] = 0, C[a + 16 >> 2] = 0, !((A = 0 | C[8680]) & (B = 1 << Q))) { + C[8680] = A | B, C[g >> 2] = a, C[a + 24 >> 2] = g, C[a + 12 >> 2] = a, C[a + 8 >> 2] = a; + break; + } + + A = 0 | C[g >> 2]; + + g: do { + if ((-8 & C[A + 4 >> 2] | 0) != (0 | E)) { + for (Q = E << (31 == (0 | Q) ? 0 : 25 - (Q >>> 1) | 0); g = 0 | C[(B = A + 16 + (Q >>> 31 << 2) | 0) >> 2];) { + if ((-8 & C[g + 4 >> 2] | 0) == (0 | E)) { + A = g; + break g; + } + + Q <<= 1, A = g; + } + + C[B >> 2] = a, C[a + 24 >> 2] = A, C[a + 12 >> 2] = a, C[a + 8 >> 2] = a; + break I; + } + } while (0); + + u = 0 | C[(p = A + 8 | 0) >> 2], C[u + 12 >> 2] = a, C[p >> 2] = a, C[a + 8 >> 2] = u, C[a + 12 >> 2] = A, C[a + 24 >> 2] = 0; + } + } while (0); + + return y = I, 0 | n + 8; + } + + for (g = 35164; !((A = 0 | C[g >> 2]) >>> 0 <= c >>> 0 && (u = A + (0 | C[g + 4 >> 2]) | 0) >>> 0 > c >>> 0);) { + g = 0 | C[g + 8 >> 2]; + } + + E = (E = u + -47 + (0 == (u + -47 + 8 & 7 | 0) ? 0 : 0 - (u + -47 + 8) & 7) | 0) >>> 0 < (c + 16 | 0) >>> 0 ? c : E, A = i + -40 | 0, p = e + (F = 0 == (7 & (F = e + 8 | 0) | 0) ? 0 : 0 - F & 7) | 0, C[8685] = p, C[8682] = A - F, C[p + 4 >> 2] = A - F | 1, C[e + A + 4 >> 2] = 40, C[8686] = C[8801], C[E + 4 >> 2] = 27, C[E + 8 >> 2] = C[8791], C[E + 8 + 4 >> 2] = C[8792], C[E + 8 + 8 >> 2] = C[8793], C[E + 8 + 12 >> 2] = C[8794], C[8791] = e, C[8792] = i, C[8794] = 0, C[8793] = E + 8, A = E + 24 | 0; + + do { + p = A, C[(A = A + 4 | 0) >> 2] = 7; + } while ((p + 8 | 0) >>> 0 < u >>> 0); + + if ((0 | E) != (0 | c)) { + if (C[E + 4 >> 2] = -2 & C[E + 4 >> 2], C[c + 4 >> 2] = E - c | 1, C[E >> 2] = E - c, (E - c | 0) >>> 0 < 256) { + B = 34756 + ((E - c | 0) >>> 3 << 1 << 2) | 0, (A = 0 | C[8679]) & 1 << ((E - c | 0) >>> 3) ? (A = B + 8 | 0, g = 0 | C[B + 8 >> 2]) : (C[8679] = A | 1 << ((E - c | 0) >>> 3), A = B + 8 | 0, g = B), C[A >> 2] = c, C[g + 12 >> 2] = c, C[c + 8 >> 2] = g, C[c + 12 >> 2] = B; + break; + } + + if (g = 35020 + ((Q = (E - c | 0) >>> 8 ? (E - c | 0) >>> 0 > 16777215 ? 31 : (E - c | 0) >>> (7 + (Q = 14 - ((520192 + (Q = (E - c | 0) >>> 8 << ((1048320 + ((E - c | 0) >>> 8) | 0) >>> 16 & 8)) | 0) >>> 16 & 4 | (1048320 + ((E - c | 0) >>> 8) | 0) >>> 16 & 8 | (245760 + (Q << ((Q + 520192 | 0) >>> 16 & 4)) | 0) >>> 16 & 2) + (Q << ((Q + 520192 | 0) >>> 16 & 4) << ((245760 + (Q << ((Q + 520192 | 0) >>> 16 & 4)) | 0) >>> 16 & 2) >>> 15) | 0) | 0) & 1 | Q << 1 : 0) << 2) | 0, C[c + 28 >> 2] = Q, C[c + 20 >> 2] = 0, C[c + 16 >> 2] = 0, !((A = 0 | C[8680]) & (B = 1 << Q))) { + C[8680] = A | B, C[g >> 2] = c, C[c + 24 >> 2] = g, C[c + 12 >> 2] = c, C[c + 8 >> 2] = c; + break; + } + + A = 0 | C[g >> 2]; + + I: do { + if ((-8 & C[A + 4 >> 2] | 0) != (E - c | 0)) { + for (Q = E - c << (31 == (0 | Q) ? 0 : 25 - (Q >>> 1) | 0); g = 0 | C[(B = A + 16 + (Q >>> 31 << 2) | 0) >> 2];) { + if ((-8 & C[g + 4 >> 2] | 0) == (E - c | 0)) { + A = g; + break I; + } + + Q <<= 1, A = g; + } + + C[B >> 2] = c, C[c + 24 >> 2] = A, C[c + 12 >> 2] = c, C[c + 8 >> 2] = c; + break A; + } + } while (0); + + u = 0 | C[(p = A + 8 | 0) >> 2], C[u + 12 >> 2] = c, C[p >> 2] = c, C[c + 8 >> 2] = u, C[c + 12 >> 2] = A, C[c + 24 >> 2] = 0; + } + } else 0 == (0 | (u = 0 | C[8683])) | e >>> 0 < u >>> 0 && (C[8683] = e), C[8791] = e, C[8792] = i, C[8794] = 0, C[8688] = C[8797], C[8687] = -1, C[8692] = 34756, C[8691] = 34756, C[8694] = 34764, C[8693] = 34764, C[8696] = 34772, C[8695] = 34772, C[8698] = 34780, C[8697] = 34780, C[8700] = 34788, C[8699] = 34788, C[8702] = 34796, C[8701] = 34796, C[8704] = 34804, C[8703] = 34804, C[8706] = 34812, C[8705] = 34812, C[8708] = 34820, C[8707] = 34820, C[8710] = 34828, C[8709] = 34828, C[8712] = 34836, C[8711] = 34836, C[8714] = 34844, C[8713] = 34844, C[8716] = 34852, C[8715] = 34852, C[8718] = 34860, C[8717] = 34860, C[8720] = 34868, C[8719] = 34868, C[8722] = 34876, C[8721] = 34876, C[8724] = 34884, C[8723] = 34884, C[8726] = 34892, C[8725] = 34892, C[8728] = 34900, C[8727] = 34900, C[8730] = 34908, C[8729] = 34908, C[8732] = 34916, C[8731] = 34916, C[8734] = 34924, C[8733] = 34924, C[8736] = 34932, C[8735] = 34932, C[8738] = 34940, C[8737] = 34940, C[8740] = 34948, C[8739] = 34948, C[8742] = 34956, C[8741] = 34956, C[8744] = 34964, C[8743] = 34964, C[8746] = 34972, C[8745] = 34972, C[8748] = 34980, C[8747] = 34980, C[8750] = 34988, C[8749] = 34988, C[8752] = 34996, C[8751] = 34996, C[8754] = 35004, C[8753] = 35004, u = i + -40 | 0, p = e + (F = 0 == (7 & (F = e + 8 | 0) | 0) ? 0 : 0 - F & 7) | 0, C[8685] = p, C[8682] = u - F, C[p + 4 >> 2] = u - F | 1, C[e + u + 4 >> 2] = 40, C[8686] = C[8801]; + } while (0); + + if ((A = 0 | C[8682]) >>> 0 > t >>> 0) return F = A - t | 0, C[8682] = F, p = (u = 0 | C[8685]) + t | 0, C[8685] = p, C[p + 4 >> 2] = 1 | F, C[u + 4 >> 2] = 3 | t, y = I, 0 | u + 8; + } + + return C[8678] = 48, y = I, 0; + } + + function p(A) { + var I, + g, + C, + Q, + E = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0, + m = 0, + L = 0, + x = 0, + K = 0, + X = 0, + j = 0, + T = 0, + q = 0, + V = 0, + z = 0, + W = 0, + O = 0, + Z = 0, + $ = 0, + AA = 0, + IA = 0, + gA = 0, + BA = 0, + CA = 0, + QA = 0, + EA = 0, + iA = 0, + eA = 0, + oA = 0, + cA = 0, + aA = 0, + nA = 0, + rA = 0, + tA = 0, + fA = 0, + wA = 0, + yA = 0; + j = 0 | Bg(0 | B[(A |= 0) >> 0], 0 | B[A + 1 >> 0], 0 | B[A + 2 >> 0]), o(), V = 0 | yg(0 | (V = 0 | kI(A + 2 | 0)), 0 | o(), 5), o(), J = 0 | yg(0 | (J = 0 | Bg(0 | B[A + 5 >> 0], 0 | B[A + 6 >> 0], 0 | B[A + 7 >> 0])), 0 | o(), 2), o(), y = 0 | yg(0 | (y = 0 | kI(A + 7 | 0)), 0 | o(), 7), o(), T = 0 | yg(0 | (T = 0 | kI(A + 10 | 0)), 0 | o(), 4), o(), Z = 0 | yg(0 | (Z = 0 | Bg(0 | B[A + 13 >> 0], 0 | B[A + 14 >> 0], 0 | B[A + 15 >> 0])), 0 | o(), 1), o(), l = 0 | yg(0 | (l = 0 | kI(A + 15 | 0)), 0 | o(), 6), o(), oA = 0 | yg(0 | (oA = 0 | Bg(0 | B[A + 18 >> 0], 0 | B[A + 19 >> 0], 0 | B[A + 20 >> 0])), 0 | o(), 3), o(), rA = 0 | Bg(0 | B[A + 21 >> 0], 0 | B[A + 22 >> 0], 0 | B[A + 23 >> 0]), o(), EA = 0 | yg(0 | (EA = 0 | kI(A + 23 | 0)), 0 | o(), 5), o(), nA = 0 | yg(0 | (nA = 0 | Bg(0 | B[A + 26 >> 0], 0 | B[A + 27 >> 0], 0 | B[A + 28 >> 0])), 0 | o(), 2), o(), gA = 0 | yg(0 | (gA = 0 | kI(A + 28 | 0)), 0 | o(), 7), o(), wA = 0 | yg(0 | (wA = 0 | kI(A + 31 | 0)), 0 | o(), 4), o(), Y = 0 | yg(0 | (Y = 0 | Bg(0 | B[A + 34 >> 0], 0 | B[A + 35 >> 0], 0 | B[A + 36 >> 0])), 0 | o(), 1), o(), K = 0 | yg(0 | (K = 0 | kI(A + 36 | 0)), 0 | o(), 6), o(), p = 0 | yg(0 | (p = 0 | Bg(0 | B[A + 39 >> 0], 0 | B[A + 40 >> 0], 0 | B[A + 41 >> 0])), 0 | o(), 3), o(), e = 0 | Bg(0 | B[A + 42 >> 0], 0 | B[A + 43 >> 0], 0 | B[A + 44 >> 0]), o(), L = 0 | yg(0 | (L = 0 | kI(A + 44 | 0)), 0 | o(), 5), o(), CA = 0 | yg(0 | (CA = 0 | Bg(0 | B[A + 47 >> 0], 0 | B[A + 48 >> 0], 0 | B[A + 49 >> 0])), 0 | o(), 2), o(), yA = 0 | yg(0 | (yA = 0 | kI(A + 49 | 0)), 0 | o(), 7), o(), f = 0 | yg(0 | (f = 0 | kI(A + 52 | 0)), 0 | o(), 4), o(), G = 0 | yg(0 | (G = 0 | Bg(0 | B[A + 55 >> 0], 0 | B[A + 56 >> 0], 0 | B[A + 57 >> 0])), 0 | o(), 1), o(), U = 0 | yg(0 | (U = 0 | kI(A + 57 | 0)), 0 | o(), 6), o(), r = 0 | Qg(0 | (q = 0 | yg(0 | (q = 0 | kI(A + 60 | 0)), 0 | o(), 3)), 0 | (c = 0 | o()), 666643, 0), F = 0 | o(), aA = 0 | Qg(0 | q, 0 | c, 470296, 0), u = 0 | o(), M = 0 | Qg(0 | q, 0 | c, 654183, 0), a = 0 | o(), _ = 0 | Qg(0 | q, 0 | c, -997805, -1), t = 0 | o(), p = 0 | vg(0 | (E = 0 | Qg(0 | q, 0 | c, 136657, 0)), 0 | o(), 2097151 & p | 0, 0), E = 0 | o(), e = 0 | vg(0 | (c = 0 | Qg(0 | q, 0 | c, -683901, -1)), 0 | o(), 2097151 & e | 0, 0), c = 0 | o(), q = 0 | Qg(2097151 & U | 0, 0, 666643, 0), x = 0 | o(), k = 0 | Qg(2097151 & U | 0, 0, 470296, 0), IA = 0 | o(), v = 0 | Qg(2097151 & U | 0, 0, 654183, 0), i = 0 | o(), W = 0 | Qg(2097151 & U | 0, 0, -997805, -1), z = 0 | o(), X = 0 | Qg(2097151 & U | 0, 0, 136657, 0), D = 0 | o(), U = 0 | vg(0 | p, 0 | E, 0 | (U = 0 | Qg(2097151 & U | 0, 0, -683901, -1)), 0 | o()), E = 0 | o(), p = 0 | Qg(2097151 & G | 0, 0, 666643, 0), O = 0 | o(), d = 0 | Qg(2097151 & G | 0, 0, 470296, 0), BA = 0 | o(), m = 0 | Qg(2097151 & G | 0, 0, 654183, 0), n = 0 | o(), tA = 0 | Qg(2097151 & G | 0, 0, -997805, -1), cA = 0 | o(), AA = 0 | Qg(2097151 & G | 0, 0, 136657, 0), b = 0 | o(), D = 0 | vg(0 | (t = 0 | vg(0 | (K = 0 | vg(0 | (G = 0 | Qg(2097151 & G | 0, 0, -683901, -1)), 0 | o(), 2097151 & K | 0, 0)), 0 | o(), 0 | _, 0 | t)), 0 | o(), 0 | X, 0 | D), X = 0 | o(), t = 0 | Qg(2097151 & f | 0, 0, 666643, 0), _ = 0 | o(), K = 0 | Qg(2097151 & f | 0, 0, 470296, 0), G = 0 | o(), s = 0 | Qg(2097151 & f | 0, 0, 654183, 0), $ = 0 | o(), P = 0 | Qg(2097151 & f | 0, 0, -997805, -1), R = 0 | o(), Q = 0 | Qg(2097151 & f | 0, 0, 136657, 0), fA = 0 | o(), f = 0 | Qg(2097151 & f | 0, 0, -683901, -1), w = 0 | o(), h = 0 | Qg(2097151 & yA | 0, 0, 666643, 0), S = 0 | o(), iA = 0 | Qg(2097151 & yA | 0, 0, 470296, 0), eA = 0 | o(), g = 0 | Qg(2097151 & yA | 0, 0, 654183, 0), QA = 0 | o(), C = 0 | Qg(2097151 & yA | 0, 0, -997805, -1), N = 0 | o(), I = 0 | Qg(2097151 & yA | 0, 0, 136657, 0), H = 0 | o(), i = 0 | vg(0 | (u = 0 | vg(0 | (cA = 0 | vg(0 | (fA = 0 | vg(0 | (wA = 0 | vg(0 | (yA = 0 | Qg(2097151 & yA | 0, 0, -683901, -1)), 0 | o(), 2097151 & wA | 0, 0)), 0 | o(), 0 | Q, 0 | fA)), 0 | o(), 0 | tA, 0 | cA)), 0 | o(), 0 | aA, 0 | u)), 0 | o(), 0 | v, 0 | i), v = 0 | o(), l = 0 | vg(0 | (u = 0 | Qg(2097151 & CA | 0, 0, 666643, 0)), 0 | o(), 2097151 & l | 0, 0), u = 0 | o(), aA = 0 | Qg(2097151 & CA | 0, 0, 470296, 0), cA = 0 | o(), _ = 0 | vg(0 | (eA = 0 | vg(0 | (rA = 0 | vg(0 | (tA = 0 | Qg(2097151 & CA | 0, 0, 654183, 0)), 0 | o(), 2097151 & rA | 0, 0)), 0 | o(), 0 | iA, 0 | eA)), 0 | o(), 0 | t, 0 | _), t = 0 | o(), eA = 0 | Qg(2097151 & CA | 0, 0, -997805, -1), iA = 0 | o(), x = 0 | vg(0 | (BA = 0 | vg(0 | ($ = 0 | vg(0 | (N = 0 | vg(0 | (nA = 0 | vg(0 | (rA = 0 | Qg(2097151 & CA | 0, 0, 136657, 0)), 0 | o(), 2097151 & nA | 0, 0)), 0 | o(), 0 | C, 0 | N)), 0 | o(), 0 | s, 0 | $)), 0 | o(), 0 | d, 0 | BA)), 0 | o(), 0 | q, 0 | x), q = 0 | o(), CA = 0 | Qg(2097151 & CA | 0, 0, -683901, -1), BA = 0 | o(), s = 0 | yg(0 | (d = 0 | vg(0 | l, 0 | u, 1048576, 0)), 0 | ($ = 0 | o()), 21), N = 0 | o(), N = 0 | vg(0 | (S = 0 | vg(0 | (oA = 0 | vg(0 | aA, 0 | cA, 2097151 & oA | 0, 0)), 0 | o(), 0 | h, 0 | S)), 0 | o(), 0 | s, 0 | N), s = 0 | o(), $ = 0 | Ug(0 | l, 0 | u, -2097152 & d | 0, 2047 & $ | 0), d = 0 | o(), S = 0 | yg(0 | (u = 0 | vg(0 | _, 0 | t, 1048576, 0)), 0 | (l = 0 | o()), 21), h = 0 | o(), h = 0 | vg(0 | (O = 0 | vg(0 | (G = 0 | vg(0 | (QA = 0 | vg(0 | (EA = 0 | vg(0 | eA, 0 | iA, 2097151 & EA | 0, 0)), 0 | o(), 0 | g, 0 | QA)), 0 | o(), 0 | K, 0 | G)), 0 | o(), 0 | p, 0 | O)), 0 | o(), 0 | S, 0 | h), S = 0 | o(), G = 0 | ig(0 | (O = 0 | vg(0 | x, 0 | q, 1048576, 0)), 0 | (p = 0 | o()), 21), K = 0 | o(), K = 0 | vg(0 | (IA = 0 | vg(0 | (F = 0 | vg(0 | (n = 0 | vg(0 | (R = 0 | vg(0 | (H = 0 | vg(0 | (gA = 0 | vg(0 | CA, 0 | BA, 2097151 & gA | 0, 0)), 0 | o(), 0 | I, 0 | H)), 0 | o(), 0 | P, 0 | R)), 0 | o(), 0 | m, 0 | n)), 0 | o(), 0 | r, 0 | F)), 0 | o(), 0 | k, 0 | IA)), 0 | o(), 0 | G, 0 | K), G = 0 | o(), F = 0 | ig(0 | (IA = 0 | vg(0 | i, 0 | v, 1048576, 0)), 0 | (k = 0 | o()), 21), r = 0 | o(), r = 0 | vg(0 | (z = 0 | vg(0 | (a = 0 | vg(0 | (b = 0 | vg(0 | (Y = 0 | vg(0 | f, 0 | w, 2097151 & Y | 0, 0)), 0 | o(), 0 | AA, 0 | b)), 0 | o(), 0 | M, 0 | a)), 0 | o(), 0 | W, 0 | z)), 0 | o(), 0 | F, 0 | r), F = 0 | o(), k = 0 | Ug(0 | i, 0 | v, -2097152 & IA | 0, 0 | k), IA = 0 | o(), z = 0 | vg(0 | U, 0 | E, 0 | (z = 0 | ig(0 | (v = 0 | vg(0 | D, 0 | X, 1048576, 0)), 0 | (i = 0 | o()), 21)), 0 | o()), E = 0 | o(), i = 0 | Ug(0 | D, 0 | X, -2097152 & v | 0, 0 | i), v = 0 | o(), L = 0 | vg(0 | (U = 0 | ig(0 | (X = 0 | vg(0 | e, 0 | c, 1048576, 0)), 0 | (D = 0 | o()), 21)), 0 | o(), 2097151 & L | 0, 0), U = 0 | o(), D = 0 | Ug(0 | e, 0 | c, -2097152 & X | 0, 0 | D), X = 0 | o(), W = 0 | yg(0 | (c = 0 | vg(0 | N, 0 | s, 1048576, 0)), 0 | (e = 0 | o()), 21), a = 0 | o(), e = 0 | Ug(0 | N, 0 | s, -2097152 & c | 0, 0 | e), c = 0 | o(), M = 0 | ig(0 | (s = 0 | vg(0 | h, 0 | S, 1048576, 0)), 0 | (N = 0 | o()), 21), b = 0 | o(), IA = 0 | vg(0 | (w = 0 | ig(0 | (AA = 0 | vg(0 | K, 0 | G, 1048576, 0)), 0 | (Y = 0 | o()), 21)), 0 | o(), 0 | k, 0 | IA), k = 0 | o(), Y = 0 | Ug(0 | K, 0 | G, -2097152 & AA | 0, 0 | Y), AA = 0 | o(), v = 0 | vg(0 | (w = 0 | ig(0 | (G = 0 | vg(0 | r, 0 | F, 1048576, 0)), 0 | (K = 0 | o()), 21)), 0 | o(), 0 | i, 0 | v), i = 0 | o(), K = 0 | Ug(0 | r, 0 | F, -2097152 & G | 0, 0 | K), G = 0 | o(), X = 0 | vg(0 | (w = 0 | ig(0 | (F = 0 | vg(0 | z, 0 | E, 1048576, 0)), 0 | (r = 0 | o()), 21)), 0 | o(), 0 | D, 0 | X), D = 0 | o(), r = 0 | Ug(0 | z, 0 | E, -2097152 & F | 0, 0 | r), F = 0 | o(), Z = 0 | vg(0 | (E = 0 | Qg(0 | L, 0 | U, 666643, 0)), 0 | o(), 2097151 & Z | 0, 0), E = 0 | o(), z = 0 | vg(0 | $, 0 | d, 0 | (z = 0 | Qg(0 | L, 0 | U, 470296, 0)), 0 | o()), d = 0 | o(), $ = 0 | vg(0 | e, 0 | c, 0 | ($ = 0 | Qg(0 | L, 0 | U, 654183, 0)), 0 | o()), c = 0 | o(), e = 0 | Qg(0 | L, 0 | U, -997805, -1), w = 0 | o(), f = 0 | Qg(0 | L, 0 | U, 136657, 0), n = 0 | o(), p = 0 | Ug(0 | (b = 0 | vg(0 | (q = 0 | vg(0 | (U = 0 | Qg(0 | L, 0 | U, -683901, -1)), 0 | o(), 0 | x, 0 | q)), 0 | o(), 0 | M, 0 | b)), 0 | o(), -2097152 & O | 0, 0 | p), O = 0 | o(), T = 0 | vg(0 | (b = 0 | Qg(0 | X, 0 | D, 666643, 0)), 0 | o(), 2097151 & T | 0, 0), b = 0 | o(), M = 0 | vg(0 | Z, 0 | E, 0 | (M = 0 | Qg(0 | X, 0 | D, 470296, 0)), 0 | o()), E = 0 | o(), Z = 0 | vg(0 | z, 0 | d, 0 | (Z = 0 | Qg(0 | X, 0 | D, 654183, 0)), 0 | o()), d = 0 | o(), z = 0 | vg(0 | $, 0 | c, 0 | (z = 0 | Qg(0 | X, 0 | D, -997805, -1)), 0 | o()), c = 0 | o(), $ = 0 | Qg(0 | X, 0 | D, 136657, 0), q = 0 | o(), D = 0 | Qg(0 | X, 0 | D, -683901, -1), X = 0 | o(), y = 0 | vg(0 | (x = 0 | Qg(0 | r, 0 | F, 666643, 0)), 0 | o(), 2097151 & y | 0, 0), x = 0 | o(), U = 0 | vg(0 | T, 0 | b, 0 | (U = 0 | Qg(0 | r, 0 | F, 470296, 0)), 0 | o()), b = 0 | o(), T = 0 | vg(0 | M, 0 | E, 0 | (T = 0 | Qg(0 | r, 0 | F, 654183, 0)), 0 | o()), E = 0 | o(), M = 0 | vg(0 | Z, 0 | d, 0 | (M = 0 | Qg(0 | r, 0 | F, -997805, -1)), 0 | o()), d = 0 | o(), Z = 0 | vg(0 | z, 0 | c, 0 | (Z = 0 | Qg(0 | r, 0 | F, 136657, 0)), 0 | o()), c = 0 | o(), F = 0 | Qg(0 | r, 0 | F, -683901, -1), r = 0 | o(), r = 0 | vg(0 | (q = 0 | vg(0 | (w = 0 | vg(0 | (l = 0 | Ug(0 | (t = 0 | vg(0 | W, 0 | a, 0 | _, 0 | t)), 0 | o(), -2097152 & u | 0, 0 | l)), 0 | o(), 0 | e, 0 | w)), 0 | o(), 0 | $, 0 | q)), 0 | o(), 0 | F, 0 | r), F = 0 | o(), J = 0 | vg(0 | (q = 0 | Qg(0 | v, 0 | i, 666643, 0)), 0 | o(), 2097151 & J | 0, 0), q = 0 | o(), $ = 0 | vg(0 | y, 0 | x, 0 | ($ = 0 | Qg(0 | v, 0 | i, 470296, 0)), 0 | o()), x = 0 | o(), y = 0 | vg(0 | U, 0 | b, 0 | (y = 0 | Qg(0 | v, 0 | i, 654183, 0)), 0 | o()), b = 0 | o(), U = 0 | vg(0 | T, 0 | E, 0 | (U = 0 | Qg(0 | v, 0 | i, -997805, -1)), 0 | o()), E = 0 | o(), T = 0 | vg(0 | M, 0 | d, 0 | (T = 0 | Qg(0 | v, 0 | i, 136657, 0)), 0 | o()), d = 0 | o(), i = 0 | vg(0 | Z, 0 | c, 0 | (i = 0 | Qg(0 | v, 0 | i, -683901, -1)), 0 | o()), c = 0 | o(), V = 0 | vg(0 | (Z = 0 | Qg(0 | K, 0 | G, 666643, 0)), 0 | o(), 2097151 & V | 0, 0), Z = 0 | o(), v = 0 | vg(0 | J, 0 | q, 0 | (v = 0 | Qg(0 | K, 0 | G, 470296, 0)), 0 | o()), q = 0 | o(), J = 0 | vg(0 | $, 0 | x, 0 | (J = 0 | Qg(0 | K, 0 | G, 654183, 0)), 0 | o()), x = 0 | o(), $ = 0 | vg(0 | y, 0 | b, 0 | ($ = 0 | Qg(0 | K, 0 | G, -997805, -1)), 0 | o()), b = 0 | o(), y = 0 | vg(0 | U, 0 | E, 0 | (y = 0 | Qg(0 | K, 0 | G, 136657, 0)), 0 | o()), E = 0 | o(), G = 0 | vg(0 | T, 0 | d, 0 | (G = 0 | Qg(0 | K, 0 | G, -683901, -1)), 0 | o()), d = 0 | o(), j = 0 | vg(0 | (T = 0 | Qg(0 | IA, 0 | k, 666643, 0)), 0 | o(), 2097151 & j | 0, 0), T = 0 | o(), K = 0 | vg(0 | V, 0 | Z, 0 | (K = 0 | Qg(0 | IA, 0 | k, 470296, 0)), 0 | o()), Z = 0 | o(), V = 0 | vg(0 | v, 0 | q, 0 | (V = 0 | Qg(0 | IA, 0 | k, 654183, 0)), 0 | o()), q = 0 | o(), v = 0 | vg(0 | J, 0 | x, 0 | (v = 0 | Qg(0 | IA, 0 | k, -997805, -1)), 0 | o()), x = 0 | o(), J = 0 | vg(0 | $, 0 | b, 0 | (J = 0 | Qg(0 | IA, 0 | k, 136657, 0)), 0 | o()), b = 0 | o(), k = 0 | vg(0 | y, 0 | E, 0 | (k = 0 | Qg(0 | IA, 0 | k, -683901, -1)), 0 | o()), E = 0 | o(), $ = 0 | vg(0 | K, 0 | Z, 0 | ($ = 0 | ig(0 | (y = 0 | vg(0 | j, 0 | T, 1048576, 0)), 0 | (IA = 0 | o()), 21)), 0 | o()), Z = 0 | o(), IA = 0 | Ug(0 | j, 0 | T, -2097152 & y | 0, 0 | IA), y = 0 | o(), K = 0 | vg(0 | v, 0 | x, 0 | (K = 0 | ig(0 | (T = 0 | vg(0 | V, 0 | q, 1048576, 0)), 0 | (j = 0 | o()), 21)), 0 | o()), x = 0 | o(), M = 0 | vg(0 | k, 0 | E, 0 | (M = 0 | ig(0 | (v = 0 | vg(0 | J, 0 | b, 1048576, 0)), 0 | (U = 0 | o()), 21)), 0 | o()), E = 0 | o(), e = 0 | vg(0 | i, 0 | c, 0 | (e = 0 | ig(0 | (k = 0 | vg(0 | G, 0 | d, 1048576, 0)), 0 | (w = 0 | o()), 21)), 0 | o()), c = 0 | o(), w = 0 | Ug(0 | G, 0 | d, -2097152 & k | 0, 0 | w), k = 0 | o(), i = 0 | ig(0 | (d = 0 | vg(0 | r, 0 | F, 1048576, 0)), 0 | (G = 0 | o()), 21), l = 0 | o(), l = 0 | vg(0 | (X = 0 | vg(0 | (N = 0 | Ug(0 | (S = 0 | vg(0 | f, 0 | n, 0 | h, 0 | S)), 0 | o(), -2097152 & s | 0, 0 | N)), 0 | o(), 0 | D, 0 | X)), 0 | o(), 0 | i, 0 | l), i = 0 | o(), G = 0 | Ug(0 | r, 0 | F, -2097152 & d | 0, 0 | G), d = 0 | o(), AA = 0 | vg(0 | (X = 0 | ig(0 | (F = 0 | vg(0 | p, 0 | O, 1048576, 0)), 0 | (r = 0 | o()), 21)), 0 | o(), 0 | Y, 0 | AA), Y = 0 | o(), r = 0 | Ug(0 | p, 0 | O, -2097152 & F | 0, 0 | r), F = 0 | o(), X = 0 | ig(0 | (O = 0 | vg(0 | $, 0 | Z, 1048576, 0)), 0 | (p = 0 | o()), 21), D = 0 | o(), S = 0 | ig(0 | (N = 0 | vg(0 | K, 0 | x, 1048576, 0)), 0 | (s = 0 | o()), 21), h = 0 | o(), u = 0 | vg(0 | w, 0 | k, 0 | (u = 0 | ig(0 | (n = 0 | vg(0 | M, 0 | E, 1048576, 0)), 0 | (f = 0 | o()), 21)), 0 | o()), k = 0 | o(), _ = 0 | vg(0 | G, 0 | d, 0 | (_ = 0 | ig(0 | (w = 0 | vg(0 | e, 0 | c, 1048576, 0)), 0 | (t = 0 | o()), 21)), 0 | o()), d = 0 | o(), t = 0 | Ug(0 | e, 0 | c, -2097152 & w | 0, 0 | t), w = 0 | o(), G = 0 | vg(0 | r, 0 | F, 0 | (G = 0 | ig(0 | (c = 0 | vg(0 | l, 0 | i, 1048576, 0)), 0 | (e = 0 | o()), 21)), 0 | o()), F = 0 | o(), e = 0 | Ug(0 | l, 0 | i, -2097152 & c | 0, 0 | e), c = 0 | o(), r = 0 | ig(0 | (i = 0 | vg(0 | AA, 0 | Y, 1048576, 0)), 0 | (l = 0 | o()), 21), a = 0 | o(), l = 0 | Ug(0 | AA, 0 | Y, -2097152 & i | 0, 0 | l), i = 0 | o(), Y = 0 | vg(0 | IA, 0 | y, 0 | (Y = 0 | Qg(0 | r, 0 | a, 666643, 0)), 0 | o()), y = 0 | o(), IA = 0 | Qg(0 | r, 0 | a, 470296, 0), AA = 0 | o(), W = 0 | Qg(0 | r, 0 | a, 654183, 0), z = 0 | o(), L = 0 | Qg(0 | r, 0 | a, -997805, -1), m = 0 | o(), R = 0 | Qg(0 | r, 0 | a, 136657, 0), P = 0 | o(), a = 0 | Qg(0 | r, 0 | a, -683901, -1), r = 0 | o(), y = 0 | ig(0 | Y, 0 | y, 21), H = 0 | o(), y = 0 | ig(0 | (H = 0 | vg(0 | (p = 0 | Ug(0 | (Z = 0 | vg(0 | IA, 0 | AA, 0 | $, 0 | Z)), 0 | o(), -2097152 & O | 0, 0 | p)), 0 | o(), 0 | y, 0 | H)), 0 | o(), 21), p = 0 | o(), y = 0 | ig(0 | (p = 0 | vg(0 | (D = 0 | vg(0 | (j = 0 | Ug(0 | (q = 0 | vg(0 | W, 0 | z, 0 | V, 0 | q)), 0 | o(), -2097152 & T | 0, 0 | j)), 0 | o(), 0 | X, 0 | D)), 0 | o(), 0 | y, 0 | p)), 0 | o(), 21), D = 0 | o(), y = 0 | ig(0 | (D = 0 | vg(0 | (s = 0 | Ug(0 | (m = 0 | vg(0 | K, 0 | x, 0 | L, 0 | m)), 0 | o(), -2097152 & N | 0, 0 | s)), 0 | o(), 0 | y, 0 | D)), 0 | o(), 21), s = 0 | o(), y = 0 | ig(0 | (s = 0 | vg(0 | (h = 0 | vg(0 | (U = 0 | Ug(0 | (b = 0 | vg(0 | R, 0 | P, 0 | J, 0 | b)), 0 | o(), -2097152 & v | 0, 0 | U)), 0 | o(), 0 | S, 0 | h)), 0 | o(), 0 | y, 0 | s)), 0 | o(), 21), h = 0 | o(), Y = 0 | vg(0 | (G = 0 | Qg(0 | (l = 0 | ig(0 | (i = 0 | vg(0 | (F = 0 | ig(0 | (e = 0 | vg(0 | G, 0 | F, 0 | (e = 0 | ig(0 | (c = 0 | vg(0 | (d = 0 | ig(0 | (t = 0 | vg(0 | _, 0 | d, 0 | (t = 0 | ig(0 | (w = 0 | vg(0 | (k = 0 | ig(0 | (y = 0 | vg(0 | u, 0 | k, 0 | (y = 0 | ig(0 | (h = 0 | vg(0 | (f = 0 | Ug(0 | (r = 0 | vg(0 | M, 0 | E, 0 | a, 0 | r)), 0 | o(), -2097152 & n | 0, 0 | f)), 0 | o(), 0 | y, 0 | h)), 0 | o(), 21)), 0 | o())), 0 | o(), 21)), 0 | o(), 0 | t, 0 | w)), 0 | o(), 21)), 0 | o())), 0 | o(), 21)), 0 | o(), 0 | e, 0 | c)), 0 | o(), 21)), 0 | o())), 0 | o(), 21)), 0 | o(), 0 | l, 0 | i)), 0 | o(), 21)), 0 | (F = 0 | o()), 666643, 0)), 0 | o(), 2097151 & Y | 0, 0), G = 0 | o(), H = 0 | vg(0 | (d = 0 | Qg(0 | l, 0 | F, 470296, 0)), 0 | o(), 2097151 & H | 0, 0), d = 0 | o(), p = 0 | vg(0 | (_ = 0 | Qg(0 | l, 0 | F, 654183, 0)), 0 | o(), 2097151 & p | 0, 0), _ = 0 | o(), D = 0 | vg(0 | (k = 0 | Qg(0 | l, 0 | F, -997805, -1)), 0 | o(), 2097151 & D | 0, 0), k = 0 | o(), s = 0 | vg(0 | (u = 0 | Qg(0 | l, 0 | F, 136657, 0)), 0 | o(), 2097151 & s | 0, 0), u = 0 | o(), i = 0 | vg(0 | (E = 0 | ig(0 | (e = 0 | vg(0 | (a = 0 | ig(0 | (c = 0 | vg(0 | (r = 0 | ig(0 | (t = 0 | vg(0 | (n = 0 | ig(0 | (w = 0 | vg(0 | (f = 0 | ig(0 | (y = 0 | vg(0 | (h = 0 | ig(0 | (s = 0 | vg(0 | (h = 0 | vg(0 | (F = 0 | Qg(0 | l, 0 | F, -683901, -1)), 0 | o(), 2097151 & h | 0, 0)), 0 | (F = 0 | o()), 0 | (s = 0 | ig(0 | (D = 0 | vg(0 | s, 0 | u, 0 | (D = 0 | ig(0 | (p = 0 | vg(0 | D, 0 | k, 0 | (p = 0 | ig(0 | (H = 0 | vg(0 | p, 0 | _, 0 | (H = 0 | ig(0 | (l = 0 | vg(0 | H, 0 | d, 0 | (l = 0 | ig(0 | Y, 0 | G, 21)), 0 | o())), 0 | (d = 0 | o()), 21)), 0 | o())), 0 | (_ = 0 | o()), 21)), 0 | o())), 0 | (k = 0 | o()), 21)), 0 | o())), 0 | (u = 0 | o()), 21)), 0 | o())), 0 | (F = 0 | o()), 21)), 0 | o(), 2097151 & y | 0, 0)), 0 | (h = 0 | o()), 21)), 0 | o(), 2097151 & w | 0, 0)), 0 | (f = 0 | o()), 21)), 0 | o(), 2097151 & t | 0, 0)), 0 | (n = 0 | o()), 21)), 0 | o(), 2097151 & c | 0, 0)), 0 | (r = 0 | o()), 21)), 0 | o(), 2097151 & e | 0, 0)), 0 | (a = 0 | o()), 21)), 0 | o(), 2097151 & i | 0, 0), E = 0 | o(), B[A >> 0] = Y, M = 0 | yg(0 | Y, 0 | G, 8), o(), B[A + 1 >> 0] = M, G = 0 | yg(0 | Y, 0 | G, 16), o(), Y = 0 | rg(2097151 & l | 0, 0, 5), o(), B[A + 2 >> 0] = Y | 31 & G, G = 0 | yg(0 | l, 0 | d, 3), o(), B[A + 3 >> 0] = G, d = 0 | yg(0 | l, 0 | d, 11), o(), B[A + 4 >> 0] = d, l = 0 | yg(2097151 & l | 0, 0, 19), d = 0 | o(), G = 0 | rg(2097151 & H | 0, 0, 2), o(), B[A + 5 >> 0] = G | l, _ = 0 | yg(0 | H, 0 | _, 6), o(), B[A + 6 >> 0] = _, H = 0 | yg(2097151 & H | 0, 0, 14), _ = 0 | o(), l = 0 | rg(2097151 & p | 0, 0, 7), o(), B[A + 7 >> 0] = l | H, H = 0 | yg(0 | p, 0 | k, 1), o(), B[A + 8 >> 0] = H, k = 0 | yg(0 | p, 0 | k, 9), o(), B[A + 9 >> 0] = k, p = 0 | yg(2097151 & p | 0, 0, 17), k = 0 | o(), H = 0 | rg(2097151 & D | 0, 0, 4), o(), B[A + 10 >> 0] = H | p, p = 0 | yg(0 | D, 0 | u, 4), o(), B[A + 11 >> 0] = p, u = 0 | yg(0 | D, 0 | u, 12), o(), B[A + 12 >> 0] = u, D = 0 | yg(2097151 & D | 0, 0, 20), u = 0 | o(), p = 0 | rg(2097151 & s | 0, 0, 1), o(), B[A + 13 >> 0] = p | D, F = 0 | yg(0 | s, 0 | F, 7), o(), B[A + 14 >> 0] = F, s = 0 | yg(2097151 & s | 0, 0, 15), F = 0 | o(), D = 0 | rg(2097151 & y | 0, 0, 6), o(), B[A + 15 >> 0] = D | s, s = 0 | yg(0 | y, 0 | h, 2), o(), B[A + 16 >> 0] = s, h = 0 | yg(0 | y, 0 | h, 10), o(), B[A + 17 >> 0] = h, y = 0 | yg(2097151 & y | 0, 0, 18), h = 0 | o(), s = 0 | rg(0 | w, 0 | f, 3), o(), B[A + 18 >> 0] = s | y, y = 0 | yg(0 | w, 0 | f, 5), o(), B[A + 19 >> 0] = y, f = 0 | yg(0 | w, 0 | f, 13), o(), B[A + 20 >> 0] = f, B[A + 21 >> 0] = t, f = 0 | yg(0 | t, 0 | n, 8), o(), B[A + 22 >> 0] = f, n = 0 | yg(0 | t, 0 | n, 16), o(), t = 0 | rg(2097151 & c | 0, 0, 5), o(), B[A + 23 >> 0] = t | 31 & n, n = 0 | yg(0 | c, 0 | r, 3), o(), B[A + 24 >> 0] = n, r = 0 | yg(0 | c, 0 | r, 11), o(), B[A + 25 >> 0] = r, c = 0 | yg(2097151 & c | 0, 0, 19), r = 0 | o(), n = 0 | rg(2097151 & e | 0, 0, 2), o(), B[A + 26 >> 0] = n | c, a = 0 | yg(0 | e, 0 | a, 6), o(), B[A + 27 >> 0] = a, e = 0 | yg(2097151 & e | 0, 0, 14), a = 0 | o(), c = 0 | rg(0 | i, 0 | E, 7), o(), B[A + 28 >> 0] = c | e, e = 0 | yg(0 | i, 0 | E, 1), o(), B[A + 29 >> 0] = e, e = 0 | yg(0 | i, 0 | E, 9), o(), B[A + 30 >> 0] = e, E = 0 | ig(0 | i, 0 | E, 17), o(), B[A + 31 >> 0] = E; + } + + function u(A, I, g) { + A |= 0, g |= 0; + + var B, + Q, + E, + i, + e, + c, + a, + n, + r, + t, + f, + w, + y, + s, + h, + D, + F, + p, + u, + H, + k, + l, + _, + G, + d, + Y, + M, + S, + U, + v, + b, + J, + P, + R, + N, + m, + L, + x, + K, + X, + j, + T, + q, + V, + z, + W, + O, + Z, + $, + AA, + IA, + gA, + BA, + CA, + QA, + EA, + iA, + eA, + oA, + cA, + aA, + nA, + rA, + tA, + fA, + wA, + yA, + sA, + hA, + DA, + FA, + pA, + uA, + HA, + kA, + lA, + _A, + GA, + dA, + YA, + MA, + SA, + UA, + vA, + bA, + JA, + PA, + RA, + NA, + mA = 0, + LA = 0, + xA = 0, + KA = 0, + XA = 0, + jA = 0, + TA = 0, + qA = 0, + VA = 0, + zA = 0, + WA = 0, + OA = 0, + ZA = 0, + $A = 0, + AI = 0, + II = 0, + gI = 0, + BI = 0, + CI = 0, + QI = 0, + EI = 0, + iI = 0, + eI = 0, + oI = 0, + cI = 0, + aI = 0, + nI = 0, + rI = 0, + tI = 0, + fI = 0, + wI = 0, + yI = 0, + sI = 0, + hI = 0, + DI = 0, + FI = 0, + pI = 0, + uI = 0, + HI = 0, + kI = 0, + lI = 0, + _I = 0, + GI = 0, + dI = 0, + YI = 0, + MI = 0, + SI = 0, + UI = 0, + vI = 0, + bI = 0, + JI = 0, + PI = 0, + RI = 0, + NI = 0, + mI = 0, + LI = 0, + xI = 0, + KI = 0, + XI = 0, + jI = 0, + TI = 0, + qI = 0, + VI = 0, + zI = 0, + WI = 0, + OI = 0, + ZI = 0, + $I = 0, + Ag = 0, + Ig = 0, + gg = 0, + Bg = 0, + Cg = 0, + Eg = 0, + eg = 0, + og = 0, + cg = 0, + ag = 0, + ng = 0, + rg = 0, + tg = 0, + fg = 0, + wg = 0, + sg = 0, + hg = 0, + Dg = 0, + Fg = 0, + pg = 0, + ug = 0, + Hg = 0, + kg = 0, + lg = 0, + _g = 0, + Gg = 0, + dg = 0, + Yg = 0, + Mg = 0, + Sg = 0, + bg = 0, + Jg = 0, + Pg = 0, + Rg = 0, + Ng = 0, + mg = 0, + Lg = 0, + xg = 0, + Kg = 0, + Xg = 0, + jg = 0, + Tg = 0; + + AI = 0 | C[(I |= 0) >> 2], qA = 0 | C[I + 4 >> 2], jA = 0 | C[I + 8 >> 2], ZA = 0 | C[I + 12 >> 2], SI = 0 | C[I + 16 >> 2], OA = 0 | C[I + 20 >> 2], eg = 0 | C[I + 24 >> 2], mA = 0 | C[I + 28 >> 2], pI = 0 | C[I + 32 >> 2], nI = 0 | C[I + 36 >> 2], oI = 0 | C[g >> 2], Tg = 0 | C[g + 4 >> 2], lg = 0 | C[g + 8 >> 2], Bg = 0 | C[g + 12 >> 2], RI = 0 | C[g + 16 >> 2], Yg = 0 | C[g + 20 >> 2], ag = 0 | C[g + 24 >> 2], KI = 0 | C[g + 28 >> 2], uI = 0 | C[g + 32 >> 2], NA = 0 | C[g + 36 >> 2], PA = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), jg = 0 | o(), dA = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), GA = 0 | o(), gA = 0 | Qg(0 | lg, ((0 | lg) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), Cg = 0 | o(), P = 0 | Qg(0 | Bg, ((0 | Bg) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), NI = 0 | o(), pA = 0 | Qg(0 | RI, ((0 | RI) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), Sg = 0 | o(), eA = 0 | Qg(0 | Yg, ((0 | Yg) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), rg = 0 | o(), K = 0 | Qg(0 | ag, ((0 | ag) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), jI = 0 | o(), H = 0 | Qg(0 | KI, ((0 | KI) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), kI = 0 | o(), t = 0 | Qg(0 | uI, ((0 | uI) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), rI = 0 | o(), AI = 0 | Qg(0 | NA, ((0 | NA) < 0) << 31 >> 31 | 0, 0 | AI, ((0 | AI) < 0) << 31 >> 31 | 0), $A = 0 | o(), _g = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | qA, ((0 | qA) < 0) << 31 >> 31 | 0), Gg = 0 | o(), QA = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, qA << 1 | 0, ((qA << 1 | 0) < 0) << 31 >> 31 | 0), CA = 0 | o(), R = 0 | Qg(0 | lg, ((0 | lg) < 0) << 31 >> 31 | 0, 0 | qA, ((0 | qA) < 0) << 31 >> 31 | 0), mI = 0 | o(), uA = 0 | Qg(0 | Bg, ((0 | Bg) < 0) << 31 >> 31 | 0, qA << 1 | 0, ((qA << 1 | 0) < 0) << 31 >> 31 | 0), bg = 0 | o(), oA = 0 | Qg(0 | RI, ((0 | RI) < 0) << 31 >> 31 | 0, 0 | qA, ((0 | qA) < 0) << 31 >> 31 | 0), tg = 0 | o(), X = 0 | Qg(0 | Yg, ((0 | Yg) < 0) << 31 >> 31 | 0, qA << 1 | 0, ((qA << 1 | 0) < 0) << 31 >> 31 | 0), TI = 0 | o(), k = 0 | Qg(0 | ag, ((0 | ag) < 0) << 31 >> 31 | 0, 0 | qA, ((0 | qA) < 0) << 31 >> 31 | 0), lI = 0 | o(), f = 0 | Qg(0 | KI, ((0 | KI) < 0) << 31 >> 31 | 0, qA << 1 | 0, ((qA << 1 | 0) < 0) << 31 >> 31 | 0), tI = 0 | o(), B = 0 | Qg(0 | uI, ((0 | uI) < 0) << 31 >> 31 | 0, 0 | qA, ((0 | qA) < 0) << 31 >> 31 | 0), II = 0 | o(), qA = 0 | Qg(19 * NA | 0, 0 | (aI = ((19 * NA | 0) < 0) << 31 >> 31), qA << 1 | 0, ((qA << 1 | 0) < 0) << 31 >> 31 | 0), I = 0 | o(), BA = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), Eg = 0 | o(), L = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), m = 0 | o(), HA = 0 | Qg(0 | lg, ((0 | lg) < 0) << 31 >> 31 | 0, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), Jg = 0 | o(), cA = 0 | Qg(0 | Bg, ((0 | Bg) < 0) << 31 >> 31 | 0, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), fg = 0 | o(), j = 0 | Qg(0 | RI, ((0 | RI) < 0) << 31 >> 31 | 0, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), qI = 0 | o(), l = 0 | Qg(0 | Yg, ((0 | Yg) < 0) << 31 >> 31 | 0, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), _I = 0 | o(), w = 0 | Qg(0 | ag, ((0 | ag) < 0) << 31 >> 31 | 0, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), fI = 0 | o(), Q = 0 | Qg(0 | KI, ((0 | KI) < 0) << 31 >> 31 | 0, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), gI = 0 | o(), YA = 0 | Qg(19 * uI | 0, 0 | (HI = ((19 * uI | 0) < 0) << 31 >> 31), 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), Rg = 0 | o(), jA = 0 | Qg(19 * NA | 0, 0 | aI, 0 | jA, ((0 | jA) < 0) << 31 >> 31 | 0), TA = 0 | o(), N = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | ZA, ((0 | ZA) < 0) << 31 >> 31 | 0), LI = 0 | o(), _A = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, ZA << 1 | 0, ((ZA << 1 | 0) < 0) << 31 >> 31 | 0), lA = 0 | o(), aA = 0 | Qg(0 | lg, ((0 | lg) < 0) << 31 >> 31 | 0, 0 | ZA, ((0 | ZA) < 0) << 31 >> 31 | 0), wg = 0 | o(), T = 0 | Qg(0 | Bg, ((0 | Bg) < 0) << 31 >> 31 | 0, ZA << 1 | 0, ((ZA << 1 | 0) < 0) << 31 >> 31 | 0), VI = 0 | o(), _ = 0 | Qg(0 | RI, ((0 | RI) < 0) << 31 >> 31 | 0, 0 | ZA, ((0 | ZA) < 0) << 31 >> 31 | 0), GI = 0 | o(), y = 0 | Qg(0 | Yg, ((0 | Yg) < 0) << 31 >> 31 | 0, ZA << 1 | 0, ((ZA << 1 | 0) < 0) << 31 >> 31 | 0), wI = 0 | o(), E = 0 | Qg(0 | ag, ((0 | ag) < 0) << 31 >> 31 | 0, 0 | ZA, ((0 | ZA) < 0) << 31 >> 31 | 0), BI = 0 | o(), MA = 0 | Qg(19 * KI | 0, 0 | (XI = ((19 * KI | 0) < 0) << 31 >> 31), ZA << 1 | 0, ((ZA << 1 | 0) < 0) << 31 >> 31 | 0), Ng = 0 | o(), fA = 0 | Qg(19 * uI | 0, 0 | HI, 0 | ZA, ((0 | ZA) < 0) << 31 >> 31 | 0), hg = 0 | o(), ZA = 0 | Qg(19 * NA | 0, 0 | aI, ZA << 1 | 0, ((ZA << 1 | 0) < 0) << 31 >> 31 | 0), XA = 0 | o(), kA = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), Pg = 0 | o(), tA = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), rA = 0 | o(), q = 0 | Qg(0 | lg, ((0 | lg) < 0) << 31 >> 31 | 0, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), zI = 0 | o(), G = 0 | Qg(0 | Bg, ((0 | Bg) < 0) << 31 >> 31 | 0, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), dI = 0 | o(), s = 0 | Qg(0 | RI, ((0 | RI) < 0) << 31 >> 31 | 0, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), yI = 0 | o(), i = 0 | Qg(0 | Yg, ((0 | Yg) < 0) << 31 >> 31 | 0, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), CI = 0 | o(), SA = 0 | Qg(19 * ag | 0, 0 | (ng = ((19 * ag | 0) < 0) << 31 >> 31), 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), mg = 0 | o(), wA = 0 | Qg(19 * KI | 0, 0 | XI, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), Dg = 0 | o(), O = 0 | Qg(19 * uI | 0, 0 | HI, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), OI = 0 | o(), SI = 0 | Qg(19 * NA | 0, 0 | aI, 0 | SI, ((0 | SI) < 0) << 31 >> 31 | 0), xA = 0 | o(), nA = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | OA, ((0 | OA) < 0) << 31 >> 31 | 0), sg = 0 | o(), W = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, OA << 1 | 0, ((OA << 1 | 0) < 0) << 31 >> 31 | 0), z = 0 | o(), d = 0 | Qg(0 | lg, ((0 | lg) < 0) << 31 >> 31 | 0, 0 | OA, ((0 | OA) < 0) << 31 >> 31 | 0), YI = 0 | o(), h = 0 | Qg(0 | Bg, ((0 | Bg) < 0) << 31 >> 31 | 0, OA << 1 | 0, ((OA << 1 | 0) < 0) << 31 >> 31 | 0), sI = 0 | o(), e = 0 | Qg(0 | RI, ((0 | RI) < 0) << 31 >> 31 | 0, 0 | OA, ((0 | OA) < 0) << 31 >> 31 | 0), QI = 0 | o(), UA = 0 | Qg(19 * Yg | 0, 0 | (Mg = ((19 * Yg | 0) < 0) << 31 >> 31), OA << 1 | 0, ((OA << 1 | 0) < 0) << 31 >> 31 | 0), Lg = 0 | o(), yA = 0 | Qg(19 * ag | 0, 0 | ng, 0 | OA, ((0 | OA) < 0) << 31 >> 31 | 0), Fg = 0 | o(), Z = 0 | Qg(19 * KI | 0, 0 | XI, OA << 1 | 0, ((OA << 1 | 0) < 0) << 31 >> 31 | 0), ZI = 0 | o(), U = 0 | Qg(19 * uI | 0, 0 | HI, 0 | OA, ((0 | OA) < 0) << 31 >> 31 | 0), UI = 0 | o(), OA = 0 | Qg(19 * NA | 0, 0 | aI, OA << 1 | 0, ((OA << 1 | 0) < 0) << 31 >> 31 | 0), LA = 0 | o(), V = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), WI = 0 | o(), S = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), M = 0 | o(), D = 0 | Qg(0 | lg, ((0 | lg) < 0) << 31 >> 31 | 0, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), hI = 0 | o(), c = 0 | Qg(0 | Bg, ((0 | Bg) < 0) << 31 >> 31 | 0, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), EI = 0 | o(), vA = 0 | Qg(19 * RI | 0, ((19 * RI | 0) < 0) << 31 >> 31 | 0, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), xg = 0 | o(), sA = 0 | Qg(19 * Yg | 0, 0 | Mg, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), pg = 0 | o(), $ = 0 | Qg(19 * ag | 0, 0 | ng, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), $I = 0 | o(), v = 0 | Qg(19 * KI | 0, 0 | XI, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), vI = 0 | o(), VA = 0 | Qg(19 * uI | 0, 0 | HI, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), zA = 0 | o(), eg = 0 | Qg(19 * NA | 0, 0 | aI, 0 | eg, ((0 | eg) < 0) << 31 >> 31 | 0), KA = 0 | o(), Y = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | mA, ((0 | mA) < 0) << 31 >> 31 | 0), MI = 0 | o(), u = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, mA << 1 | 0, ((mA << 1 | 0) < 0) << 31 >> 31 | 0), p = 0 | o(), a = 0 | Qg(0 | lg, ((0 | lg) < 0) << 31 >> 31 | 0, 0 | mA, ((0 | mA) < 0) << 31 >> 31 | 0), iI = 0 | o(), bA = 0 | Qg(19 * Bg | 0, ((19 * Bg | 0) < 0) << 31 >> 31 | 0, mA << 1 | 0, ((mA << 1 | 0) < 0) << 31 >> 31 | 0), Kg = 0 | o(), hA = 0 | Qg(19 * RI | 0, ((19 * RI | 0) < 0) << 31 >> 31 | 0, 0 | mA, ((0 | mA) < 0) << 31 >> 31 | 0), ug = 0 | o(), AA = 0 | Qg(19 * Yg | 0, 0 | Mg, mA << 1 | 0, ((mA << 1 | 0) < 0) << 31 >> 31 | 0), Ag = 0 | o(), b = 0 | Qg(19 * ag | 0, 0 | ng, 0 | mA, ((0 | mA) < 0) << 31 >> 31 | 0), bI = 0 | o(), cI = 0 | Qg(19 * KI | 0, 0 | XI, mA << 1 | 0, ((mA << 1 | 0) < 0) << 31 >> 31 | 0), WA = 0 | o(), EA = 0 | Qg(19 * uI | 0, 0 | HI, 0 | mA, ((0 | mA) < 0) << 31 >> 31 | 0), og = 0 | o(), g = 0 | Qg(19 * NA | 0, 0 | aI, mA << 1 | 0, ((mA << 1 | 0) < 0) << 31 >> 31 | 0), mA = 0 | o(), F = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), DI = 0 | o(), r = 0 | Qg(0 | Tg, ((0 | Tg) < 0) << 31 >> 31 | 0, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), n = 0 | o(), JA = 0 | Qg(19 * lg | 0, ((19 * lg | 0) < 0) << 31 >> 31 | 0, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), Xg = 0 | o(), DA = 0 | Qg(19 * Bg | 0, ((19 * Bg | 0) < 0) << 31 >> 31 | 0, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), Hg = 0 | o(), IA = 0 | Qg(19 * RI | 0, ((19 * RI | 0) < 0) << 31 >> 31 | 0, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), Ig = 0 | o(), J = 0 | Qg(19 * Yg | 0, 0 | Mg, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), JI = 0 | o(), FA = 0 | Qg(19 * ag | 0, 0 | ng, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), dg = 0 | o(), iA = 0 | Qg(19 * KI | 0, 0 | XI, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), cg = 0 | o(), x = 0 | Qg(19 * uI | 0, 0 | HI, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), xI = 0 | o(), pI = 0 | Qg(19 * NA | 0, 0 | aI, 0 | pI, ((0 | pI) < 0) << 31 >> 31 | 0), FI = 0 | o(), oI = 0 | Qg(0 | oI, ((0 | oI) < 0) << 31 >> 31 | 0, 0 | nI, ((0 | nI) < 0) << 31 >> 31 | 0), eI = 0 | o(), Tg = 0 | Qg(19 * Tg | 0, ((19 * Tg | 0) < 0) << 31 >> 31 | 0, nI << 1 | 0, ((nI << 1 | 0) < 0) << 31 >> 31 | 0), RA = 0 | o(), lg = 0 | Qg(19 * lg | 0, ((19 * lg | 0) < 0) << 31 >> 31 | 0, 0 | nI, ((0 | nI) < 0) << 31 >> 31 | 0), kg = 0 | o(), Bg = 0 | Qg(19 * Bg | 0, ((19 * Bg | 0) < 0) << 31 >> 31 | 0, nI << 1 | 0, ((nI << 1 | 0) < 0) << 31 >> 31 | 0), gg = 0 | o(), RI = 0 | Qg(19 * RI | 0, ((19 * RI | 0) < 0) << 31 >> 31 | 0, 0 | nI, ((0 | nI) < 0) << 31 >> 31 | 0), PI = 0 | o(), Mg = 0 | Qg(19 * Yg | 0, 0 | Mg, nI << 1 | 0, ((nI << 1 | 0) < 0) << 31 >> 31 | 0), Yg = 0 | o(), ng = 0 | Qg(19 * ag | 0, 0 | ng, 0 | nI, ((0 | nI) < 0) << 31 >> 31 | 0), ag = 0 | o(), XI = 0 | Qg(19 * KI | 0, 0 | XI, nI << 1 | 0, ((nI << 1 | 0) < 0) << 31 >> 31 | 0), KI = 0 | o(), HI = 0 | Qg(19 * uI | 0, 0 | HI, 0 | nI, ((0 | nI) < 0) << 31 >> 31 | 0), uI = 0 | o(), nI = 0 | Qg(19 * NA | 0, 0 | aI, nI << 1 | 0, ((nI << 1 | 0) < 0) << 31 >> 31 | 0), aI = 0 | o(), I = 0 | vg(0 | (Rg = 0 | vg(0 | (Ng = 0 | vg(0 | (mg = 0 | vg(0 | (Lg = 0 | vg(0 | (xg = 0 | vg(0 | (Kg = 0 | vg(0 | (Xg = 0 | vg(0 | (jg = 0 | vg(0 | Tg, 0 | RA, 0 | PA, 0 | jg)), 0 | o(), 0 | JA, 0 | Xg)), 0 | o(), 0 | bA, 0 | Kg)), 0 | o(), 0 | vA, 0 | xg)), 0 | o(), 0 | UA, 0 | Lg)), 0 | o(), 0 | SA, 0 | mg)), 0 | o(), 0 | MA, 0 | Ng)), 0 | o(), 0 | YA, 0 | Rg)), 0 | o(), 0 | qA, 0 | I), qA = 0 | o(), Gg = 0 | vg(0 | dA, 0 | GA, 0 | _g, 0 | Gg), _g = 0 | o(), LA = 0 | vg(0 | (zA = 0 | vg(0 | (WA = 0 | vg(0 | (dg = 0 | vg(0 | (Yg = 0 | vg(0 | (Sg = 0 | vg(0 | (bg = 0 | vg(0 | (Jg = 0 | vg(0 | (Pg = 0 | vg(0 | _A, 0 | lA, 0 | kA, 0 | Pg)), 0 | o(), 0 | HA, 0 | Jg)), 0 | o(), 0 | uA, 0 | bg)), 0 | o(), 0 | pA, 0 | Sg)), 0 | o(), 0 | Mg, 0 | Yg)), 0 | o(), 0 | FA, 0 | dg)), 0 | o(), 0 | cI, 0 | WA)), 0 | o(), 0 | VA, 0 | zA)), 0 | o(), 0 | OA, 0 | LA), OA = 0 | o(), WA = 0 | ig(0 | (zA = 0 | vg(0 | I, 0 | qA, 33554432, 0)), 0 | (VA = 0 | o()), 26), cI = 0 | o(), cI = 0 | vg(0 | (TA = 0 | vg(0 | (hg = 0 | vg(0 | (Dg = 0 | vg(0 | (Fg = 0 | vg(0 | (pg = 0 | vg(0 | (ug = 0 | vg(0 | (Hg = 0 | vg(0 | (kg = 0 | vg(0 | Gg, 0 | _g, 0 | lg, 0 | kg)), 0 | o(), 0 | DA, 0 | Hg)), 0 | o(), 0 | hA, 0 | ug)), 0 | o(), 0 | sA, 0 | pg)), 0 | o(), 0 | yA, 0 | Fg)), 0 | o(), 0 | wA, 0 | Dg)), 0 | o(), 0 | fA, 0 | hg)), 0 | o(), 0 | jA, 0 | TA)), 0 | o(), 0 | WA, 0 | cI), WA = 0 | o(), VA = 0 | Ug(0 | I, 0 | qA, -67108864 & zA | 0, 0 | VA), zA = 0 | o(), TA = 0 | ig(0 | (qA = 0 | vg(0 | LA, 0 | OA, 33554432, 0)), 0 | (I = 0 | o()), 26), jA = 0 | o(), jA = 0 | vg(0 | (KA = 0 | vg(0 | (og = 0 | vg(0 | (cg = 0 | vg(0 | (ag = 0 | vg(0 | (rg = 0 | vg(0 | (tg = 0 | vg(0 | (fg = 0 | vg(0 | (wg = 0 | vg(0 | (sg = 0 | vg(0 | tA, 0 | rA, 0 | nA, 0 | sg)), 0 | o(), 0 | aA, 0 | wg)), 0 | o(), 0 | cA, 0 | fg)), 0 | o(), 0 | oA, 0 | tg)), 0 | o(), 0 | eA, 0 | rg)), 0 | o(), 0 | ng, 0 | ag)), 0 | o(), 0 | iA, 0 | cg)), 0 | o(), 0 | EA, 0 | og)), 0 | o(), 0 | eg, 0 | KA)), 0 | o(), 0 | TA, 0 | jA), TA = 0 | o(), I = 0 | Ug(0 | LA, 0 | OA, -67108864 & qA | 0, 0 | I), qA = 0 | o(), LA = 0 | ig(0 | (OA = 0 | vg(0 | cI, 0 | WA, 16777216, 0)), 0 | o(), 25), KA = 0 | o(), KA = 0 | vg(0 | (XA = 0 | vg(0 | (OI = 0 | vg(0 | (ZI = 0 | vg(0 | ($I = 0 | vg(0 | (Ag = 0 | vg(0 | (Ig = 0 | vg(0 | (gg = 0 | vg(0 | (Cg = 0 | vg(0 | (Eg = 0 | vg(0 | QA, 0 | CA, 0 | BA, 0 | Eg)), 0 | o(), 0 | gA, 0 | Cg)), 0 | o(), 0 | Bg, 0 | gg)), 0 | o(), 0 | IA, 0 | Ig)), 0 | o(), 0 | AA, 0 | Ag)), 0 | o(), 0 | $, 0 | $I)), 0 | o(), 0 | Z, 0 | ZI)), 0 | o(), 0 | O, 0 | OI)), 0 | o(), 0 | ZA, 0 | XA)), 0 | o(), 0 | LA, 0 | KA), LA = 0 | o(), OA = 0 | Ug(0 | cI, 0 | WA, -33554432 & OA | 0, 0), WA = 0 | o(), XA = 0 | ig(0 | (cI = 0 | vg(0 | jA, 0 | TA, 16777216, 0)), 0 | o(), 25), ZA = 0 | o(), ZA = 0 | vg(0 | (mA = 0 | vg(0 | (xI = 0 | vg(0 | (KI = 0 | vg(0 | (jI = 0 | vg(0 | (TI = 0 | vg(0 | (qI = 0 | vg(0 | (VI = 0 | vg(0 | (zI = 0 | vg(0 | (WI = 0 | vg(0 | W, 0 | z, 0 | V, 0 | WI)), 0 | o(), 0 | q, 0 | zI)), 0 | o(), 0 | T, 0 | VI)), 0 | o(), 0 | j, 0 | qI)), 0 | o(), 0 | X, 0 | TI)), 0 | o(), 0 | K, 0 | jI)), 0 | o(), 0 | XI, 0 | KI)), 0 | o(), 0 | x, 0 | xI)), 0 | o(), 0 | g, 0 | mA)), 0 | o(), 0 | XA, 0 | ZA), XA = 0 | o(), cI = 0 | Ug(0 | jA, 0 | TA, -33554432 & cI | 0, 0), TA = 0 | o(), mA = 0 | ig(0 | (jA = 0 | vg(0 | KA, 0 | LA, 33554432, 0)), 0 | o(), 26), g = 0 | o(), g = 0 | vg(0 | (xA = 0 | vg(0 | (UI = 0 | vg(0 | (vI = 0 | vg(0 | (bI = 0 | vg(0 | (JI = 0 | vg(0 | (PI = 0 | vg(0 | (NI = 0 | vg(0 | (mI = 0 | vg(0 | (LI = 0 | vg(0 | L, 0 | m, 0 | N, 0 | LI)), 0 | o(), 0 | R, 0 | mI)), 0 | o(), 0 | P, 0 | NI)), 0 | o(), 0 | RI, 0 | PI)), 0 | o(), 0 | J, 0 | JI)), 0 | o(), 0 | b, 0 | bI)), 0 | o(), 0 | v, 0 | vI)), 0 | o(), 0 | U, 0 | UI)), 0 | o(), 0 | SI, 0 | xA)), 0 | o(), 0 | mA, 0 | g), mA = 0 | o(), jA = 0 | Ug(0 | KA, 0 | LA, -67108864 & jA | 0, 0), o(), KA = 0 | ig(0 | (LA = 0 | vg(0 | ZA, 0 | XA, 33554432, 0)), 0 | o(), 26), xA = 0 | o(), xA = 0 | vg(0 | (FI = 0 | vg(0 | (uI = 0 | vg(0 | (kI = 0 | vg(0 | (lI = 0 | vg(0 | (_I = 0 | vg(0 | (GI = 0 | vg(0 | (dI = 0 | vg(0 | (YI = 0 | vg(0 | (MI = 0 | vg(0 | S, 0 | M, 0 | Y, 0 | MI)), 0 | o(), 0 | d, 0 | YI)), 0 | o(), 0 | G, 0 | dI)), 0 | o(), 0 | _, 0 | GI)), 0 | o(), 0 | l, 0 | _I)), 0 | o(), 0 | k, 0 | lI)), 0 | o(), 0 | H, 0 | kI)), 0 | o(), 0 | HI, 0 | uI)), 0 | o(), 0 | pI, 0 | FI)), 0 | o(), 0 | KA, 0 | xA), KA = 0 | o(), LA = 0 | Ug(0 | ZA, 0 | XA, -67108864 & LA | 0, 0), o(), qA = 0 | vg(0 | (ZA = 0 | ig(0 | (XA = 0 | vg(0 | g, 0 | mA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | I, 0 | qA), I = 0 | o(), XA = 0 | Ug(0 | g, 0 | mA, -33554432 & XA | 0, 0), o(), g = 0 | ig(0 | (mA = 0 | vg(0 | xA, 0 | KA, 16777216, 0)), 0 | o(), 25), ZA = 0 | o(), ZA = 0 | vg(0 | (aI = 0 | vg(0 | (rI = 0 | vg(0 | (tI = 0 | vg(0 | (fI = 0 | vg(0 | (wI = 0 | vg(0 | (yI = 0 | vg(0 | (sI = 0 | vg(0 | (hI = 0 | vg(0 | (DI = 0 | vg(0 | u, 0 | p, 0 | F, 0 | DI)), 0 | o(), 0 | D, 0 | hI)), 0 | o(), 0 | h, 0 | sI)), 0 | o(), 0 | s, 0 | yI)), 0 | o(), 0 | y, 0 | wI)), 0 | o(), 0 | w, 0 | fI)), 0 | o(), 0 | f, 0 | tI)), 0 | o(), 0 | t, 0 | rI)), 0 | o(), 0 | nI, 0 | aI)), 0 | o(), 0 | g, 0 | ZA), g = 0 | o(), mA = 0 | Ug(0 | xA, 0 | KA, -33554432 & mA | 0, 0), o(), xA = 0 | vg(0 | cI, 0 | TA, 0 | (xA = 0 | yg(0 | (KA = 0 | vg(0 | qA, 0 | I, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), KA = 0 | Ug(0 | qA, 0 | I, -67108864 & KA | 0, 0), o(), qA = 0 | ig(0 | (I = 0 | vg(0 | ZA, 0 | g, 33554432, 0)), 0 | o(), 26), TA = 0 | o(), TA = 0 | vg(0 | ($A = 0 | vg(0 | (II = 0 | vg(0 | (gI = 0 | vg(0 | (BI = 0 | vg(0 | (CI = 0 | vg(0 | (QI = 0 | vg(0 | (EI = 0 | vg(0 | (iI = 0 | vg(0 | (eI = 0 | vg(0 | r, 0 | n, 0 | oI, 0 | eI)), 0 | o(), 0 | a, 0 | iI)), 0 | o(), 0 | c, 0 | EI)), 0 | o(), 0 | e, 0 | QI)), 0 | o(), 0 | i, 0 | CI)), 0 | o(), 0 | E, 0 | BI)), 0 | o(), 0 | Q, 0 | gI)), 0 | o(), 0 | B, 0 | II)), 0 | o(), 0 | AI, 0 | $A)), 0 | o(), 0 | qA, 0 | TA), qA = 0 | o(), I = 0 | Ug(0 | ZA, 0 | g, -67108864 & I | 0, 0), o(), zA = 0 | vg(0 | (ZA = 0 | Qg(0 | (ZA = 0 | ig(0 | (g = 0 | vg(0 | TA, 0 | qA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 19, 0)), 0 | o(), 0 | VA, 0 | zA), VA = 0 | o(), g = 0 | Ug(0 | TA, 0 | qA, -33554432 & g | 0, 0), o(), TA = 0 | vg(0 | OA, 0 | WA, 0 | (TA = 0 | yg(0 | (qA = 0 | vg(0 | zA, 0 | VA, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), qA = 0 | Ug(0 | zA, 0 | VA, -67108864 & qA | 0, 0), o(), C[A >> 2] = qA, C[A + 4 >> 2] = TA, C[A + 8 >> 2] = jA, C[A + 12 >> 2] = XA, C[A + 16 >> 2] = KA, C[A + 20 >> 2] = xA, C[A + 24 >> 2] = LA, C[A + 28 >> 2] = mA, C[A + 32 >> 2] = I, C[A + 36 >> 2] = g; + } + + function H(A, I, g) { + A |= 0, g |= 0; + var B, + Q, + E = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0; + B = y, Q = y = y + 63 & -64, y = y + 2048 | 0, fB(Q + 1024 | 0, I |= 0), SI(Q + 1024 | 0, A), fB(Q, Q + 1024 | 0), SI(Q, g), A = 0; + + do { + i = 0 | C[Q + 1024 + ((4 | (I = A << 4)) << 3) >> 2], e = 0 | C[Q + 1024 + ((4 | I) << 3) + 4 >> 2], b = 0 | uI(0 | C[Q + 1024 + (I << 3) >> 2], 0 | C[Q + 1024 + (I << 3) + 4 >> 2], i, e), N = 0 | o(), Y = 0 | ZI(C[Q + 1024 + ((12 | I) << 3) >> 2] ^ b, C[Q + 1024 + ((12 | I) << 3) + 4 >> 2] ^ N, 32), H = 0 | o(), H = 0 | ZI((N = 0 | uI(b, N, e = 0 | ZI((F = 0 | uI(0 | C[Q + 1024 + ((8 | I) << 3) >> 2], 0 | C[Q + 1024 + ((8 | I) << 3) + 4 >> 2], Y, H)) ^ i, (D = 0 | o()) ^ e, 24), i = 0 | o())) ^ Y, (b = 0 | o()) ^ H, 16), Y = 0 | o(), C[Q + 1024 + ((12 | I) << 3) >> 2] = H, C[Q + 1024 + ((12 | I) << 3) + 4 >> 2] = Y, D = 0 | uI(F, D, H, Y), F = 0 | o(), C[Q + 1024 + ((8 | I) << 3) >> 2] = D, C[Q + 1024 + ((8 | I) << 3) + 4 >> 2] = F, i = 0 | ZI(D ^ e, F ^ i, 63), e = 0 | o(), C[Q + 1024 + ((4 | I) << 3) >> 2] = i, C[Q + 1024 + ((4 | I) << 3) + 4 >> 2] = e, U = 0 | C[Q + 1024 + ((5 | I) << 3) >> 2], v = 0 | C[Q + 1024 + ((5 | I) << 3) + 4 >> 2], _ = 0 | uI(0 | C[Q + 1024 + ((1 | I) << 3) >> 2], 0 | C[Q + 1024 + ((1 | I) << 3) + 4 >> 2], U, v), M = 0 | o(), p = 0 | ZI(C[Q + 1024 + ((13 | I) << 3) >> 2] ^ _, C[Q + 1024 + ((13 | I) << 3) + 4 >> 2] ^ M, 32), f = 0 | o(), a = 0 | uI(n = 0 | uI(0 | C[Q + 1024 + ((9 | I) << 3) >> 2], 0 | C[Q + 1024 + ((9 | I) << 3) + 4 >> 2], p, f), a = 0 | o(), f = 0 | ZI((M = 0 | uI(_, M, v = 0 | ZI(n ^ U, a ^ v, 24), U = 0 | o())) ^ p, (_ = 0 | o()) ^ f, 16), p = 0 | o()), n = 0 | o(), C[Q + 1024 + ((9 | I) << 3) >> 2] = a, C[Q + 1024 + ((9 | I) << 3) + 4 >> 2] = n, U = 0 | ZI(a ^ v, n ^ U, 63), v = 0 | o(), k = 0 | C[Q + 1024 + ((6 | I) << 3) >> 2], l = 0 | C[Q + 1024 + ((6 | I) << 3) + 4 >> 2], h = 0 | uI(0 | C[Q + 1024 + ((2 | I) << 3) >> 2], 0 | C[Q + 1024 + ((2 | I) << 3) + 4 >> 2], k, l), u = 0 | o(), r = 0 | ZI(C[Q + 1024 + ((14 | I) << 3) >> 2] ^ h, C[Q + 1024 + ((14 | I) << 3) + 4 >> 2] ^ u, 32), E = 0 | o(), k = 0 | ZI((J = 0 | uI(P = 0 | uI(0 | C[Q + 1024 + ((10 | I) << 3) >> 2], 0 | C[Q + 1024 + ((10 | I) << 3) + 4 >> 2], r, E), J = 0 | o(), E = 0 | ZI((u = 0 | uI(h, u, l = 0 | ZI(P ^ k, J ^ l, 24), k = 0 | o())) ^ r, (h = 0 | o()) ^ E, 16), r = 0 | o())) ^ l, (P = 0 | o()) ^ k, 63), l = 0 | o(), w = 0 | C[Q + 1024 + ((7 | I) << 3) >> 2], s = 0 | C[Q + 1024 + ((7 | I) << 3) + 4 >> 2], c = 0 | uI(0 | C[Q + 1024 + ((3 | I) << 3) >> 2], 0 | C[Q + 1024 + ((3 | I) << 3) + 4 >> 2], w, s), t = 0 | o(), R = 0 | ZI(C[Q + 1024 + ((15 | I) << 3) >> 2] ^ c, C[Q + 1024 + ((15 | I) << 3) + 4 >> 2] ^ t, 32), S = 0 | o(), w = 0 | ZI((G = 0 | uI(d = 0 | uI(0 | C[Q + 1024 + ((11 | I) << 3) >> 2], 0 | C[Q + 1024 + ((11 | I) << 3) + 4 >> 2], R, S), G = 0 | o(), S = 0 | ZI((t = 0 | uI(c, t, s = 0 | ZI(d ^ w, G ^ s, 24), w = 0 | o())) ^ R, (c = 0 | o()) ^ S, 16), R = 0 | o())) ^ s, (d = 0 | o()) ^ w, 63), s = 0 | o(), N = 0 | uI(b = 0 | uI(N, b, U, v), N = 0 | o(), v = 0 | ZI((P = 0 | uI(J, P, R = 0 | ZI(b ^ S, N ^ R, 32), S = 0 | o())) ^ U, (J = 0 | o()) ^ v, 24), U = 0 | o()), b = 0 | o(), C[Q + 1024 + (I << 3) >> 2] = N, C[Q + 1024 + (I << 3) + 4 >> 2] = b, S = 0 | ZI(N ^ R, b ^ S, 16), b = 0 | o(), C[Q + 1024 + ((15 | I) << 3) >> 2] = S, C[Q + 1024 + ((15 | I) << 3) + 4 >> 2] = b, b = 0 | uI(P, J, S, b), S = 0 | o(), C[Q + 1024 + ((10 | I) << 3) >> 2] = b, C[Q + 1024 + ((10 | I) << 3) + 4 >> 2] = S, U = 0 | ZI(b ^ v, S ^ U, 63), S = 0 | o(), C[Q + 1024 + ((5 | I) << 3) >> 2] = U, C[Q + 1024 + ((5 | I) << 3) + 4 >> 2] = S, M = 0 | uI(_ = 0 | uI(M, _, k, l), M = 0 | o(), l = 0 | ZI((d = 0 | uI(G, d, Y = 0 | ZI(_ ^ H, M ^ Y, 32), H = 0 | o())) ^ k, (G = 0 | o()) ^ l, 24), k = 0 | o()), _ = 0 | o(), C[Q + 1024 + ((1 | I) << 3) >> 2] = M, C[Q + 1024 + ((1 | I) << 3) + 4 >> 2] = _, H = 0 | ZI(M ^ Y, _ ^ H, 16), _ = 0 | o(), C[Q + 1024 + ((12 | I) << 3) >> 2] = H, C[Q + 1024 + ((12 | I) << 3) + 4 >> 2] = _, _ = 0 | uI(d, G, H, _), H = 0 | o(), C[Q + 1024 + ((11 | I) << 3) >> 2] = _, C[Q + 1024 + ((11 | I) << 3) + 4 >> 2] = H, k = 0 | ZI(_ ^ l, H ^ k, 63), H = 0 | o(), C[Q + 1024 + ((6 | I) << 3) >> 2] = k, C[Q + 1024 + ((6 | I) << 3) + 4 >> 2] = H, u = 0 | uI(h = 0 | uI(u, h, w, s), u = 0 | o(), s = 0 | ZI((F = 0 | uI(D, F, p = 0 | ZI(h ^ f, u ^ p, 32), f = 0 | o())) ^ w, (D = 0 | o()) ^ s, 24), w = 0 | o()), h = 0 | o(), C[Q + 1024 + ((2 | I) << 3) >> 2] = u, C[Q + 1024 + ((2 | I) << 3) + 4 >> 2] = h, f = 0 | ZI(u ^ p, h ^ f, 16), h = 0 | o(), C[Q + 1024 + ((13 | I) << 3) >> 2] = f, C[Q + 1024 + ((13 | I) << 3) + 4 >> 2] = h, h = 0 | uI(F, D, f, h), f = 0 | o(), C[Q + 1024 + ((8 | I) << 3) >> 2] = h, C[Q + 1024 + ((8 | I) << 3) + 4 >> 2] = f, w = 0 | ZI(h ^ s, f ^ w, 63), f = 0 | o(), C[Q + 1024 + ((7 | I) << 3) >> 2] = w, C[Q + 1024 + ((7 | I) << 3) + 4 >> 2] = f, t = 0 | uI(c = 0 | uI(t, c, i, e), t = 0 | o(), e = 0 | ZI((n = 0 | uI(a, n, r = 0 | ZI(c ^ E, t ^ r, 32), E = 0 | o())) ^ i, (a = 0 | o()) ^ e, 24), i = 0 | o()), c = 0 | o(), C[Q + 1024 + ((3 | I) << 3) >> 2] = t, C[Q + 1024 + ((3 | I) << 3) + 4 >> 2] = c, E = 0 | ZI(t ^ r, c ^ E, 16), c = 0 | o(), C[Q + 1024 + ((14 | I) << 3) >> 2] = E, C[Q + 1024 + ((14 | I) << 3) + 4 >> 2] = c, c = 0 | uI(n, a, E, c), E = 0 | o(), C[Q + 1024 + ((9 | I) << 3) >> 2] = c, C[Q + 1024 + ((9 | I) << 3) + 4 >> 2] = E, i = 0 | ZI(c ^ e, E ^ i, 63), E = 0 | o(), C[Q + 1024 + ((4 | I) << 3) >> 2] = i, C[Q + 1024 + ((4 | I) << 3) + 4 >> 2] = E, A = A + 1 | 0; + } while (8 != (0 | A)); + + A = 0; + + do { + P = 0 | C[(J = Q + 1024 + (32 + (N = A << 1) << 3) | 0) >> 2], J = 0 | C[J + 4 >> 2], c = 0 | uI(0 | C[Q + 1024 + (N << 3) >> 2], 0 | C[Q + 1024 + (N << 3) + 4 >> 2], P, J), I = 0 | o(), f = 0 | ZI(C[(f = Q + 1024 + (N + 96 << 3) | 0) >> 2] ^ c, C[f + 4 >> 2] ^ I, 32), F = 0 | o(), F = 0 | ZI((I = 0 | uI(c, I, J = 0 | ZI((k = 0 | uI(0 | C[(k = Q + 1024 + (N + 64 << 3) | 0) >> 2], 0 | C[k + 4 >> 2], f, F)) ^ P, (l = 0 | o()) ^ J, 24), P = 0 | o())) ^ f, (c = 0 | o()) ^ F, 16), f = 0 | o(), C[(r = Q + 1024 + (N + 96 << 3) | 0) >> 2] = F, C[r + 4 >> 2] = f, l = 0 | uI(k, l, F, f), k = 0 | o(), C[(r = Q + 1024 + (N + 64 << 3) | 0) >> 2] = l, C[r + 4 >> 2] = k, P = 0 | ZI(l ^ J, k ^ P, 63), J = 0 | o(), C[(r = Q + 1024 + (N + 32 << 3) | 0) >> 2] = P, C[r + 4 >> 2] = J, a = 0 | C[(r = Q + 1024 + (N + 33 << 3) | 0) >> 2], r = 0 | C[r + 4 >> 2], h = 0 | uI(0 | C[Q + 1024 + ((1 | N) << 3) >> 2], 0 | C[Q + 1024 + ((1 | N) << 3) + 4 >> 2], a, r), t = 0 | o(), H = 0 | ZI(C[(H = Q + 1024 + (N + 97 << 3) | 0) >> 2] ^ h, C[H + 4 >> 2] ^ t, 32), d = 0 | o(), v = 0 | uI(U = 0 | uI(0 | C[(U = Q + 1024 + (N + 65 << 3) | 0) >> 2], 0 | C[U + 4 >> 2], H, d), v = 0 | o(), d = 0 | ZI((t = 0 | uI(h, t, r = 0 | ZI(U ^ a, v ^ r, 24), a = 0 | o())) ^ H, (h = 0 | o()) ^ d, 16), H = 0 | o()), U = 0 | o(), C[(_ = Q + 1024 + (N + 65 << 3) | 0) >> 2] = v, C[_ + 4 >> 2] = U, a = 0 | ZI(v ^ r, U ^ a, 63), r = 0 | o(), _ = Q + 1024 + (N + 16 << 3) | 0, D = 0 | C[(p = Q + 1024 + (N + 48 << 3) | 0) >> 2], p = 0 | C[p + 4 >> 2], _ = 0 | uI(0 | C[_ >> 2], 0 | C[_ + 4 >> 2], D, p), u = 0 | o(), S = 0 | ZI(C[(S = Q + 1024 + (N + 112 << 3) | 0) >> 2] ^ _, C[S + 4 >> 2] ^ u, 32), R = 0 | o(), D = 0 | ZI((e = 0 | uI(i = 0 | uI(0 | C[(i = Q + 1024 + (N + 80 << 3) | 0) >> 2], 0 | C[i + 4 >> 2], S, R), e = 0 | o(), R = 0 | ZI((u = 0 | uI(_, u, p = 0 | ZI(i ^ D, e ^ p, 24), D = 0 | o())) ^ S, (_ = 0 | o()) ^ R, 16), S = 0 | o())) ^ p, (i = 0 | o()) ^ D, 63), p = 0 | o(), b = Q + 1024 + (N + 17 << 3) | 0, G = 0 | C[(Y = Q + 1024 + (N + 49 << 3) | 0) >> 2], Y = 0 | C[Y + 4 >> 2], b = 0 | uI(0 | C[b >> 2], 0 | C[b + 4 >> 2], G, Y), M = 0 | o(), E = 0 | ZI(C[(E = Q + 1024 + (N + 113 << 3) | 0) >> 2] ^ b, C[E + 4 >> 2] ^ M, 32), n = 0 | o(), G = 0 | ZI((s = 0 | uI(w = 0 | uI(0 | C[(w = Q + 1024 + (N + 81 << 3) | 0) >> 2], 0 | C[w + 4 >> 2], E, n), s = 0 | o(), n = 0 | ZI((M = 0 | uI(b, M, Y = 0 | ZI(w ^ G, s ^ Y, 24), G = 0 | o())) ^ E, (b = 0 | o()) ^ n, 16), E = 0 | o())) ^ Y, (w = 0 | o()) ^ G, 63), Y = 0 | o(), I = 0 | uI(c = 0 | uI(I, c, a, r), I = 0 | o(), r = 0 | ZI((i = 0 | uI(e, i, E = 0 | ZI(c ^ n, I ^ E, 32), n = 0 | o())) ^ a, (e = 0 | o()) ^ r, 24), a = 0 | o()), c = 0 | o(), C[Q + 1024 + (N << 3) >> 2] = I, C[Q + 1024 + (N << 3) + 4 >> 2] = c, n = 0 | ZI(I ^ E, c ^ n, 16), c = 0 | o(), C[(E = Q + 1024 + (N + 113 << 3) | 0) >> 2] = n, C[E + 4 >> 2] = c, c = 0 | uI(i, e, n, c), n = 0 | o(), C[(e = Q + 1024 + (N + 80 << 3) | 0) >> 2] = c, C[e + 4 >> 2] = n, a = 0 | ZI(c ^ r, n ^ a, 63), n = 0 | o(), C[(r = Q + 1024 + (N + 33 << 3) | 0) >> 2] = a, C[r + 4 >> 2] = n, t = 0 | uI(h = 0 | uI(t, h, D, p), t = 0 | o(), p = 0 | ZI((w = 0 | uI(s, w, f = 0 | ZI(h ^ F, t ^ f, 32), F = 0 | o())) ^ D, (s = 0 | o()) ^ p, 24), D = 0 | o()), h = 0 | o(), C[Q + 1024 + ((1 | N) << 3) >> 2] = t, C[Q + 1024 + ((1 | N) << 3) + 4 >> 2] = h, F = 0 | ZI(t ^ f, h ^ F, 16), h = 0 | o(), C[(f = Q + 1024 + (N + 96 << 3) | 0) >> 2] = F, C[f + 4 >> 2] = h, h = 0 | uI(w, s, F, h), F = 0 | o(), C[(s = Q + 1024 + (N + 81 << 3) | 0) >> 2] = h, C[s + 4 >> 2] = F, D = 0 | ZI(h ^ p, F ^ D, 63), F = 0 | o(), C[(p = Q + 1024 + (N + 48 << 3) | 0) >> 2] = D, C[p + 4 >> 2] = F, u = 0 | uI(_ = 0 | uI(u, _, G, Y), u = 0 | o(), Y = 0 | ZI((k = 0 | uI(l, k, H = 0 | ZI(_ ^ d, u ^ H, 32), d = 0 | o())) ^ G, (l = 0 | o()) ^ Y, 24), G = 0 | o()), _ = 0 | o(), C[(p = Q + 1024 + (N + 16 << 3) | 0) >> 2] = u, C[p + 4 >> 2] = _, d = 0 | ZI(u ^ H, _ ^ d, 16), _ = 0 | o(), C[(H = Q + 1024 + (N + 97 << 3) | 0) >> 2] = d, C[H + 4 >> 2] = _, _ = 0 | uI(k, l, d, _), d = 0 | o(), C[(l = Q + 1024 + (N + 64 << 3) | 0) >> 2] = _, C[l + 4 >> 2] = d, G = 0 | ZI(_ ^ Y, d ^ G, 63), d = 0 | o(), C[(Y = Q + 1024 + (N + 49 << 3) | 0) >> 2] = G, C[Y + 4 >> 2] = d, M = 0 | uI(b = 0 | uI(M, b, P, J), M = 0 | o(), J = 0 | ZI((U = 0 | uI(v, U, S = 0 | ZI(b ^ R, M ^ S, 32), R = 0 | o())) ^ P, (v = 0 | o()) ^ J, 24), P = 0 | o()), b = 0 | o(), C[(Y = Q + 1024 + (N + 17 << 3) | 0) >> 2] = M, C[Y + 4 >> 2] = b, R = 0 | ZI(M ^ S, b ^ R, 16), b = 0 | o(), C[(S = Q + 1024 + (N + 112 << 3) | 0) >> 2] = R, C[S + 4 >> 2] = b, b = 0 | uI(U, v, R, b), R = 0 | o(), C[(v = Q + 1024 + (N + 65 << 3) | 0) >> 2] = b, C[v + 4 >> 2] = R, P = 0 | ZI(b ^ J, R ^ P, 63), R = 0 | o(), C[(N = Q + 1024 + (N + 32 << 3) | 0) >> 2] = P, C[N + 4 >> 2] = R, A = A + 1 | 0; + } while (8 != (0 | A)); + + fB(g, Q), SI(g, Q + 1024 | 0), y = B; + } + + function k(A, I, g) { + A |= 0, g |= 0; + var B, + Q, + E = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0; + B = y, Q = y = y + 63 & -64, y = y + 2048 | 0, fB(Q + 1024 | 0, I |= 0), SI(Q + 1024 | 0, A), fB(Q, Q + 1024 | 0), A = 0; + + do { + i = 0 | C[Q + 1024 + ((4 | (I = A << 4)) << 3) >> 2], e = 0 | C[Q + 1024 + ((4 | I) << 3) + 4 >> 2], b = 0 | uI(0 | C[Q + 1024 + (I << 3) >> 2], 0 | C[Q + 1024 + (I << 3) + 4 >> 2], i, e), N = 0 | o(), Y = 0 | ZI(C[Q + 1024 + ((12 | I) << 3) >> 2] ^ b, C[Q + 1024 + ((12 | I) << 3) + 4 >> 2] ^ N, 32), H = 0 | o(), H = 0 | ZI((N = 0 | uI(b, N, e = 0 | ZI((F = 0 | uI(0 | C[Q + 1024 + ((8 | I) << 3) >> 2], 0 | C[Q + 1024 + ((8 | I) << 3) + 4 >> 2], Y, H)) ^ i, (D = 0 | o()) ^ e, 24), i = 0 | o())) ^ Y, (b = 0 | o()) ^ H, 16), Y = 0 | o(), C[Q + 1024 + ((12 | I) << 3) >> 2] = H, C[Q + 1024 + ((12 | I) << 3) + 4 >> 2] = Y, D = 0 | uI(F, D, H, Y), F = 0 | o(), C[Q + 1024 + ((8 | I) << 3) >> 2] = D, C[Q + 1024 + ((8 | I) << 3) + 4 >> 2] = F, i = 0 | ZI(D ^ e, F ^ i, 63), e = 0 | o(), C[Q + 1024 + ((4 | I) << 3) >> 2] = i, C[Q + 1024 + ((4 | I) << 3) + 4 >> 2] = e, U = 0 | C[Q + 1024 + ((5 | I) << 3) >> 2], v = 0 | C[Q + 1024 + ((5 | I) << 3) + 4 >> 2], _ = 0 | uI(0 | C[Q + 1024 + ((1 | I) << 3) >> 2], 0 | C[Q + 1024 + ((1 | I) << 3) + 4 >> 2], U, v), M = 0 | o(), p = 0 | ZI(C[Q + 1024 + ((13 | I) << 3) >> 2] ^ _, C[Q + 1024 + ((13 | I) << 3) + 4 >> 2] ^ M, 32), f = 0 | o(), a = 0 | uI(n = 0 | uI(0 | C[Q + 1024 + ((9 | I) << 3) >> 2], 0 | C[Q + 1024 + ((9 | I) << 3) + 4 >> 2], p, f), a = 0 | o(), f = 0 | ZI((M = 0 | uI(_, M, v = 0 | ZI(n ^ U, a ^ v, 24), U = 0 | o())) ^ p, (_ = 0 | o()) ^ f, 16), p = 0 | o()), n = 0 | o(), C[Q + 1024 + ((9 | I) << 3) >> 2] = a, C[Q + 1024 + ((9 | I) << 3) + 4 >> 2] = n, U = 0 | ZI(a ^ v, n ^ U, 63), v = 0 | o(), k = 0 | C[Q + 1024 + ((6 | I) << 3) >> 2], l = 0 | C[Q + 1024 + ((6 | I) << 3) + 4 >> 2], h = 0 | uI(0 | C[Q + 1024 + ((2 | I) << 3) >> 2], 0 | C[Q + 1024 + ((2 | I) << 3) + 4 >> 2], k, l), u = 0 | o(), r = 0 | ZI(C[Q + 1024 + ((14 | I) << 3) >> 2] ^ h, C[Q + 1024 + ((14 | I) << 3) + 4 >> 2] ^ u, 32), E = 0 | o(), k = 0 | ZI((J = 0 | uI(P = 0 | uI(0 | C[Q + 1024 + ((10 | I) << 3) >> 2], 0 | C[Q + 1024 + ((10 | I) << 3) + 4 >> 2], r, E), J = 0 | o(), E = 0 | ZI((u = 0 | uI(h, u, l = 0 | ZI(P ^ k, J ^ l, 24), k = 0 | o())) ^ r, (h = 0 | o()) ^ E, 16), r = 0 | o())) ^ l, (P = 0 | o()) ^ k, 63), l = 0 | o(), w = 0 | C[Q + 1024 + ((7 | I) << 3) >> 2], s = 0 | C[Q + 1024 + ((7 | I) << 3) + 4 >> 2], c = 0 | uI(0 | C[Q + 1024 + ((3 | I) << 3) >> 2], 0 | C[Q + 1024 + ((3 | I) << 3) + 4 >> 2], w, s), t = 0 | o(), R = 0 | ZI(C[Q + 1024 + ((15 | I) << 3) >> 2] ^ c, C[Q + 1024 + ((15 | I) << 3) + 4 >> 2] ^ t, 32), S = 0 | o(), w = 0 | ZI((G = 0 | uI(d = 0 | uI(0 | C[Q + 1024 + ((11 | I) << 3) >> 2], 0 | C[Q + 1024 + ((11 | I) << 3) + 4 >> 2], R, S), G = 0 | o(), S = 0 | ZI((t = 0 | uI(c, t, s = 0 | ZI(d ^ w, G ^ s, 24), w = 0 | o())) ^ R, (c = 0 | o()) ^ S, 16), R = 0 | o())) ^ s, (d = 0 | o()) ^ w, 63), s = 0 | o(), N = 0 | uI(b = 0 | uI(N, b, U, v), N = 0 | o(), v = 0 | ZI((P = 0 | uI(J, P, R = 0 | ZI(b ^ S, N ^ R, 32), S = 0 | o())) ^ U, (J = 0 | o()) ^ v, 24), U = 0 | o()), b = 0 | o(), C[Q + 1024 + (I << 3) >> 2] = N, C[Q + 1024 + (I << 3) + 4 >> 2] = b, S = 0 | ZI(N ^ R, b ^ S, 16), b = 0 | o(), C[Q + 1024 + ((15 | I) << 3) >> 2] = S, C[Q + 1024 + ((15 | I) << 3) + 4 >> 2] = b, b = 0 | uI(P, J, S, b), S = 0 | o(), C[Q + 1024 + ((10 | I) << 3) >> 2] = b, C[Q + 1024 + ((10 | I) << 3) + 4 >> 2] = S, U = 0 | ZI(b ^ v, S ^ U, 63), S = 0 | o(), C[Q + 1024 + ((5 | I) << 3) >> 2] = U, C[Q + 1024 + ((5 | I) << 3) + 4 >> 2] = S, M = 0 | uI(_ = 0 | uI(M, _, k, l), M = 0 | o(), l = 0 | ZI((d = 0 | uI(G, d, Y = 0 | ZI(_ ^ H, M ^ Y, 32), H = 0 | o())) ^ k, (G = 0 | o()) ^ l, 24), k = 0 | o()), _ = 0 | o(), C[Q + 1024 + ((1 | I) << 3) >> 2] = M, C[Q + 1024 + ((1 | I) << 3) + 4 >> 2] = _, H = 0 | ZI(M ^ Y, _ ^ H, 16), _ = 0 | o(), C[Q + 1024 + ((12 | I) << 3) >> 2] = H, C[Q + 1024 + ((12 | I) << 3) + 4 >> 2] = _, _ = 0 | uI(d, G, H, _), H = 0 | o(), C[Q + 1024 + ((11 | I) << 3) >> 2] = _, C[Q + 1024 + ((11 | I) << 3) + 4 >> 2] = H, k = 0 | ZI(_ ^ l, H ^ k, 63), H = 0 | o(), C[Q + 1024 + ((6 | I) << 3) >> 2] = k, C[Q + 1024 + ((6 | I) << 3) + 4 >> 2] = H, u = 0 | uI(h = 0 | uI(u, h, w, s), u = 0 | o(), s = 0 | ZI((F = 0 | uI(D, F, p = 0 | ZI(h ^ f, u ^ p, 32), f = 0 | o())) ^ w, (D = 0 | o()) ^ s, 24), w = 0 | o()), h = 0 | o(), C[Q + 1024 + ((2 | I) << 3) >> 2] = u, C[Q + 1024 + ((2 | I) << 3) + 4 >> 2] = h, f = 0 | ZI(u ^ p, h ^ f, 16), h = 0 | o(), C[Q + 1024 + ((13 | I) << 3) >> 2] = f, C[Q + 1024 + ((13 | I) << 3) + 4 >> 2] = h, h = 0 | uI(F, D, f, h), f = 0 | o(), C[Q + 1024 + ((8 | I) << 3) >> 2] = h, C[Q + 1024 + ((8 | I) << 3) + 4 >> 2] = f, w = 0 | ZI(h ^ s, f ^ w, 63), f = 0 | o(), C[Q + 1024 + ((7 | I) << 3) >> 2] = w, C[Q + 1024 + ((7 | I) << 3) + 4 >> 2] = f, t = 0 | uI(c = 0 | uI(t, c, i, e), t = 0 | o(), e = 0 | ZI((n = 0 | uI(a, n, r = 0 | ZI(c ^ E, t ^ r, 32), E = 0 | o())) ^ i, (a = 0 | o()) ^ e, 24), i = 0 | o()), c = 0 | o(), C[Q + 1024 + ((3 | I) << 3) >> 2] = t, C[Q + 1024 + ((3 | I) << 3) + 4 >> 2] = c, E = 0 | ZI(t ^ r, c ^ E, 16), c = 0 | o(), C[Q + 1024 + ((14 | I) << 3) >> 2] = E, C[Q + 1024 + ((14 | I) << 3) + 4 >> 2] = c, c = 0 | uI(n, a, E, c), E = 0 | o(), C[Q + 1024 + ((9 | I) << 3) >> 2] = c, C[Q + 1024 + ((9 | I) << 3) + 4 >> 2] = E, i = 0 | ZI(c ^ e, E ^ i, 63), E = 0 | o(), C[Q + 1024 + ((4 | I) << 3) >> 2] = i, C[Q + 1024 + ((4 | I) << 3) + 4 >> 2] = E, A = A + 1 | 0; + } while (8 != (0 | A)); + + A = 0; + + do { + P = 0 | C[(J = Q + 1024 + (32 + (N = A << 1) << 3) | 0) >> 2], J = 0 | C[J + 4 >> 2], c = 0 | uI(0 | C[Q + 1024 + (N << 3) >> 2], 0 | C[Q + 1024 + (N << 3) + 4 >> 2], P, J), I = 0 | o(), f = 0 | ZI(C[(f = Q + 1024 + (N + 96 << 3) | 0) >> 2] ^ c, C[f + 4 >> 2] ^ I, 32), F = 0 | o(), F = 0 | ZI((I = 0 | uI(c, I, J = 0 | ZI((k = 0 | uI(0 | C[(k = Q + 1024 + (N + 64 << 3) | 0) >> 2], 0 | C[k + 4 >> 2], f, F)) ^ P, (l = 0 | o()) ^ J, 24), P = 0 | o())) ^ f, (c = 0 | o()) ^ F, 16), f = 0 | o(), C[(r = Q + 1024 + (N + 96 << 3) | 0) >> 2] = F, C[r + 4 >> 2] = f, l = 0 | uI(k, l, F, f), k = 0 | o(), C[(r = Q + 1024 + (N + 64 << 3) | 0) >> 2] = l, C[r + 4 >> 2] = k, P = 0 | ZI(l ^ J, k ^ P, 63), J = 0 | o(), C[(r = Q + 1024 + (N + 32 << 3) | 0) >> 2] = P, C[r + 4 >> 2] = J, a = 0 | C[(r = Q + 1024 + (N + 33 << 3) | 0) >> 2], r = 0 | C[r + 4 >> 2], h = 0 | uI(0 | C[Q + 1024 + ((1 | N) << 3) >> 2], 0 | C[Q + 1024 + ((1 | N) << 3) + 4 >> 2], a, r), t = 0 | o(), H = 0 | ZI(C[(H = Q + 1024 + (N + 97 << 3) | 0) >> 2] ^ h, C[H + 4 >> 2] ^ t, 32), d = 0 | o(), v = 0 | uI(U = 0 | uI(0 | C[(U = Q + 1024 + (N + 65 << 3) | 0) >> 2], 0 | C[U + 4 >> 2], H, d), v = 0 | o(), d = 0 | ZI((t = 0 | uI(h, t, r = 0 | ZI(U ^ a, v ^ r, 24), a = 0 | o())) ^ H, (h = 0 | o()) ^ d, 16), H = 0 | o()), U = 0 | o(), C[(_ = Q + 1024 + (N + 65 << 3) | 0) >> 2] = v, C[_ + 4 >> 2] = U, a = 0 | ZI(v ^ r, U ^ a, 63), r = 0 | o(), _ = Q + 1024 + (N + 16 << 3) | 0, D = 0 | C[(p = Q + 1024 + (N + 48 << 3) | 0) >> 2], p = 0 | C[p + 4 >> 2], _ = 0 | uI(0 | C[_ >> 2], 0 | C[_ + 4 >> 2], D, p), u = 0 | o(), S = 0 | ZI(C[(S = Q + 1024 + (N + 112 << 3) | 0) >> 2] ^ _, C[S + 4 >> 2] ^ u, 32), R = 0 | o(), D = 0 | ZI((e = 0 | uI(i = 0 | uI(0 | C[(i = Q + 1024 + (N + 80 << 3) | 0) >> 2], 0 | C[i + 4 >> 2], S, R), e = 0 | o(), R = 0 | ZI((u = 0 | uI(_, u, p = 0 | ZI(i ^ D, e ^ p, 24), D = 0 | o())) ^ S, (_ = 0 | o()) ^ R, 16), S = 0 | o())) ^ p, (i = 0 | o()) ^ D, 63), p = 0 | o(), b = Q + 1024 + (N + 17 << 3) | 0, G = 0 | C[(Y = Q + 1024 + (N + 49 << 3) | 0) >> 2], Y = 0 | C[Y + 4 >> 2], b = 0 | uI(0 | C[b >> 2], 0 | C[b + 4 >> 2], G, Y), M = 0 | o(), E = 0 | ZI(C[(E = Q + 1024 + (N + 113 << 3) | 0) >> 2] ^ b, C[E + 4 >> 2] ^ M, 32), n = 0 | o(), G = 0 | ZI((s = 0 | uI(w = 0 | uI(0 | C[(w = Q + 1024 + (N + 81 << 3) | 0) >> 2], 0 | C[w + 4 >> 2], E, n), s = 0 | o(), n = 0 | ZI((M = 0 | uI(b, M, Y = 0 | ZI(w ^ G, s ^ Y, 24), G = 0 | o())) ^ E, (b = 0 | o()) ^ n, 16), E = 0 | o())) ^ Y, (w = 0 | o()) ^ G, 63), Y = 0 | o(), I = 0 | uI(c = 0 | uI(I, c, a, r), I = 0 | o(), r = 0 | ZI((i = 0 | uI(e, i, E = 0 | ZI(c ^ n, I ^ E, 32), n = 0 | o())) ^ a, (e = 0 | o()) ^ r, 24), a = 0 | o()), c = 0 | o(), C[Q + 1024 + (N << 3) >> 2] = I, C[Q + 1024 + (N << 3) + 4 >> 2] = c, n = 0 | ZI(I ^ E, c ^ n, 16), c = 0 | o(), C[(E = Q + 1024 + (N + 113 << 3) | 0) >> 2] = n, C[E + 4 >> 2] = c, c = 0 | uI(i, e, n, c), n = 0 | o(), C[(e = Q + 1024 + (N + 80 << 3) | 0) >> 2] = c, C[e + 4 >> 2] = n, a = 0 | ZI(c ^ r, n ^ a, 63), n = 0 | o(), C[(r = Q + 1024 + (N + 33 << 3) | 0) >> 2] = a, C[r + 4 >> 2] = n, t = 0 | uI(h = 0 | uI(t, h, D, p), t = 0 | o(), p = 0 | ZI((w = 0 | uI(s, w, f = 0 | ZI(h ^ F, t ^ f, 32), F = 0 | o())) ^ D, (s = 0 | o()) ^ p, 24), D = 0 | o()), h = 0 | o(), C[Q + 1024 + ((1 | N) << 3) >> 2] = t, C[Q + 1024 + ((1 | N) << 3) + 4 >> 2] = h, F = 0 | ZI(t ^ f, h ^ F, 16), h = 0 | o(), C[(f = Q + 1024 + (N + 96 << 3) | 0) >> 2] = F, C[f + 4 >> 2] = h, h = 0 | uI(w, s, F, h), F = 0 | o(), C[(s = Q + 1024 + (N + 81 << 3) | 0) >> 2] = h, C[s + 4 >> 2] = F, D = 0 | ZI(h ^ p, F ^ D, 63), F = 0 | o(), C[(p = Q + 1024 + (N + 48 << 3) | 0) >> 2] = D, C[p + 4 >> 2] = F, u = 0 | uI(_ = 0 | uI(u, _, G, Y), u = 0 | o(), Y = 0 | ZI((k = 0 | uI(l, k, H = 0 | ZI(_ ^ d, u ^ H, 32), d = 0 | o())) ^ G, (l = 0 | o()) ^ Y, 24), G = 0 | o()), _ = 0 | o(), C[(p = Q + 1024 + (N + 16 << 3) | 0) >> 2] = u, C[p + 4 >> 2] = _, d = 0 | ZI(u ^ H, _ ^ d, 16), _ = 0 | o(), C[(H = Q + 1024 + (N + 97 << 3) | 0) >> 2] = d, C[H + 4 >> 2] = _, _ = 0 | uI(k, l, d, _), d = 0 | o(), C[(l = Q + 1024 + (N + 64 << 3) | 0) >> 2] = _, C[l + 4 >> 2] = d, G = 0 | ZI(_ ^ Y, d ^ G, 63), d = 0 | o(), C[(Y = Q + 1024 + (N + 49 << 3) | 0) >> 2] = G, C[Y + 4 >> 2] = d, M = 0 | uI(b = 0 | uI(M, b, P, J), M = 0 | o(), J = 0 | ZI((U = 0 | uI(v, U, S = 0 | ZI(b ^ R, M ^ S, 32), R = 0 | o())) ^ P, (v = 0 | o()) ^ J, 24), P = 0 | o()), b = 0 | o(), C[(Y = Q + 1024 + (N + 17 << 3) | 0) >> 2] = M, C[Y + 4 >> 2] = b, R = 0 | ZI(M ^ S, b ^ R, 16), b = 0 | o(), C[(S = Q + 1024 + (N + 112 << 3) | 0) >> 2] = R, C[S + 4 >> 2] = b, b = 0 | uI(U, v, R, b), R = 0 | o(), C[(v = Q + 1024 + (N + 65 << 3) | 0) >> 2] = b, C[v + 4 >> 2] = R, P = 0 | ZI(b ^ J, R ^ P, 63), R = 0 | o(), C[(N = Q + 1024 + (N + 32 << 3) | 0) >> 2] = P, C[N + 4 >> 2] = R, A = A + 1 | 0; + } while (8 != (0 | A)); + + fB(g, Q), SI(g, Q + 1024 | 0), y = B; + } + + function l(A, I) { + A |= 0; + + var g, + B, + Q, + E, + i, + e, + c, + a, + n, + r, + t, + f, + w, + y, + s, + h, + D, + F, + p, + u, + H, + k, + l, + _, + G, + d, + Y, + M, + S, + U, + v, + b, + J, + P, + R, + N, + m, + L, + x, + K, + X, + j, + T, + q, + V, + z, + W, + O, + Z, + $, + AA, + IA, + gA = 0, + BA = 0, + CA = 0, + QA = 0, + EA = 0, + iA = 0, + eA = 0, + oA = 0, + cA = 0, + aA = 0, + nA = 0, + rA = 0, + tA = 0, + fA = 0, + wA = 0, + yA = 0, + sA = 0, + hA = 0, + DA = 0, + FA = 0, + pA = 0, + uA = 0, + HA = 0, + kA = 0, + lA = 0, + _A = 0, + GA = 0, + dA = 0, + YA = 0, + MA = 0, + SA = 0, + UA = 0, + vA = 0, + bA = 0, + JA = 0, + PA = 0, + RA = 0, + NA = 0, + mA = 0, + LA = 0, + xA = 0, + KA = 0, + XA = 0, + jA = 0, + TA = 0, + qA = 0, + VA = 0, + zA = 0, + WA = 0, + OA = 0, + ZA = 0, + $A = 0, + AI = 0, + II = 0, + gI = 0, + BI = 0, + CI = 0; + + oA = 0 | C[(I |= 0) >> 2], wA = 0 | C[I + 4 >> 2], rA = 0 | C[I + 8 >> 2], FA = 0 | C[I + 12 >> 2], BA = 0 | C[I + 16 >> 2], pA = 0 | C[I + 20 >> 2], yA = 0 | C[I + 24 >> 2], iA = 0 | C[I + 28 >> 2], EA = 0 | C[I + 32 >> 2], I = 0 | C[I + 36 >> 2], $ = 0 | Qg(0 | oA, ((0 | oA) < 0) << 31 >> 31 | 0, 0 | oA, ((0 | oA) < 0) << 31 >> 31 | 0), CI = 0 | o(), q = 0 | Qg(oA << 1 | 0, 0 | (cA = ((oA << 1 | 0) < 0) << 31 >> 31), 0 | wA, ((0 | wA) < 0) << 31 >> 31 | 0), AI = 0 | o(), X = 0 | Qg(0 | rA, ((0 | rA) < 0) << 31 >> 31 | 0, oA << 1 | 0, 0 | cA), K = 0 | o(), R = 0 | Qg(0 | FA, ((0 | FA) < 0) << 31 >> 31 | 0, oA << 1 | 0, 0 | cA), P = 0 | o(), Y = 0 | Qg(0 | BA, ((0 | BA) < 0) << 31 >> 31 | 0, oA << 1 | 0, 0 | cA), KA = 0 | o(), k = 0 | Qg(0 | pA, ((0 | pA) < 0) << 31 >> 31 | 0, oA << 1 | 0, 0 | cA), RA = 0 | o(), h = 0 | Qg(0 | yA, ((0 | yA) < 0) << 31 >> 31 | 0, oA << 1 | 0, 0 | cA), vA = 0 | o(), t = 0 | Qg(0 | iA, ((0 | iA) < 0) << 31 >> 31 | 0, oA << 1 | 0, 0 | cA), dA = 0 | o(), i = 0 | Qg(0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0, oA << 1 | 0, 0 | cA), kA = 0 | o(), cA = 0 | Qg(0 | I, ((0 | I) < 0) << 31 >> 31 | 0, oA << 1 | 0, 0 | cA), oA = 0 | o(), x = 0 | Qg(wA << 1 | 0, 0 | (gA = ((wA << 1 | 0) < 0) << 31 >> 31), 0 | wA, ((0 | wA) < 0) << 31 >> 31 | 0), OA = 0 | o(), J = 0 | Qg(wA << 1 | 0, 0 | gA, 0 | rA, ((0 | rA) < 0) << 31 >> 31 | 0), qA = 0 | o(), U = 0 | Qg(FA << 1 | 0, 0 | (CA = ((FA << 1 | 0) < 0) << 31 >> 31), wA << 1 | 0, 0 | gA), S = 0 | o(), G = 0 | Qg(0 | BA, ((0 | BA) < 0) << 31 >> 31 | 0, wA << 1 | 0, 0 | gA), _ = 0 | o(), D = 0 | Qg(pA << 1 | 0, ((pA << 1 | 0) < 0) << 31 >> 31 | 0, wA << 1 | 0, 0 | gA), bA = 0 | o(), f = 0 | Qg(0 | yA, ((0 | yA) < 0) << 31 >> 31 | 0, wA << 1 | 0, 0 | gA), YA = 0 | o(), e = 0 | Qg(iA << 1 | 0, ((iA << 1 | 0) < 0) << 31 >> 31 | 0, wA << 1 | 0, 0 | gA), lA = 0 | o(), aA = 0 | Qg(0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0, wA << 1 | 0, 0 | gA), nA = 0 | o(), gA = 0 | Qg(38 * I | 0, 0 | (fA = ((38 * I | 0) < 0) << 31 >> 31), wA << 1 | 0, 0 | gA), wA = 0 | o(), M = 0 | Qg(0 | rA, ((0 | rA) < 0) << 31 >> 31 | 0, 0 | rA, ((0 | rA) < 0) << 31 >> 31 | 0), XA = 0 | o(), l = 0 | Qg(rA << 1 | 0, ((rA << 1 | 0) < 0) << 31 >> 31 | 0, 0 | FA, ((0 | FA) < 0) << 31 >> 31 | 0), NA = 0 | o(), F = 0 | Qg(0 | BA, ((0 | BA) < 0) << 31 >> 31 | 0, rA << 1 | 0, ((rA << 1 | 0) < 0) << 31 >> 31 | 0), JA = 0 | o(), s = 0 | Qg(0 | pA, ((0 | pA) < 0) << 31 >> 31 | 0, rA << 1 | 0, ((rA << 1 | 0) < 0) << 31 >> 31 | 0), y = 0 | o(), r = 0 | Qg(0 | yA, ((0 | yA) < 0) << 31 >> 31 | 0, rA << 1 | 0, ((rA << 1 | 0) < 0) << 31 >> 31 | 0), n = 0 | o(), g = 0 | Qg(0 | iA, ((0 | iA) < 0) << 31 >> 31 | 0, rA << 1 | 0, ((rA << 1 | 0) < 0) << 31 >> 31 | 0), uA = 0 | o(), W = 0 | Qg(19 * EA | 0, 0 | (UA = ((19 * EA | 0) < 0) << 31 >> 31), rA << 1 | 0, ((rA << 1 | 0) < 0) << 31 >> 31 | 0), II = 0 | o(), rA = 0 | Qg(38 * I | 0, 0 | fA, 0 | rA, ((0 | rA) < 0) << 31 >> 31 | 0), sA = 0 | o(), u = 0 | Qg(FA << 1 | 0, 0 | CA, 0 | FA, ((0 | FA) < 0) << 31 >> 31 | 0), p = 0 | o(), w = 0 | Qg(FA << 1 | 0, 0 | CA, 0 | BA, ((0 | BA) < 0) << 31 >> 31 | 0), MA = 0 | o(), c = 0 | Qg(pA << 1 | 0, ((pA << 1 | 0) < 0) << 31 >> 31 | 0, FA << 1 | 0, 0 | CA), _A = 0 | o(), E = 0 | Qg(0 | yA, ((0 | yA) < 0) << 31 >> 31 | 0, FA << 1 | 0, 0 | CA), Q = 0 | o(), O = 0 | Qg(38 * iA | 0, 0 | (xA = ((38 * iA | 0) < 0) << 31 >> 31), FA << 1 | 0, 0 | CA), gI = 0 | o(), j = 0 | Qg(19 * EA | 0, 0 | UA, FA << 1 | 0, 0 | CA), ZA = 0 | o(), CA = 0 | Qg(38 * I | 0, 0 | fA, FA << 1 | 0, 0 | CA), FA = 0 | o(), a = 0 | Qg(0 | BA, ((0 | BA) < 0) << 31 >> 31 | 0, 0 | BA, ((0 | BA) < 0) << 31 >> 31 | 0), GA = 0 | o(), B = 0 | Qg(BA << 1 | 0, ((BA << 1 | 0) < 0) << 31 >> 31 | 0, 0 | pA, ((0 | pA) < 0) << 31 >> 31 | 0), HA = 0 | o(), Z = 0 | Qg(19 * yA | 0, ((19 * yA | 0) < 0) << 31 >> 31 | 0, BA << 1 | 0, ((BA << 1 | 0) < 0) << 31 >> 31 | 0), BI = 0 | o(), T = 0 | Qg(38 * iA | 0, 0 | xA, 0 | BA, ((0 | BA) < 0) << 31 >> 31 | 0), $A = 0 | o(), N = 0 | Qg(19 * EA | 0, 0 | UA, BA << 1 | 0, ((BA << 1 | 0) < 0) << 31 >> 31 | 0), VA = 0 | o(), BA = 0 | Qg(38 * I | 0, 0 | fA, 0 | BA, ((0 | BA) < 0) << 31 >> 31 | 0), hA = 0 | o(), IA = 0 | Qg(38 * pA | 0, ((38 * pA | 0) < 0) << 31 >> 31 | 0, 0 | pA, ((0 | pA) < 0) << 31 >> 31 | 0), AA = 0 | o(), z = 0 | Qg(19 * yA | 0, ((19 * yA | 0) < 0) << 31 >> 31 | 0, pA << 1 | 0, ((pA << 1 | 0) < 0) << 31 >> 31 | 0), V = 0 | o(), m = 0 | Qg(38 * iA | 0, 0 | xA, pA << 1 | 0, ((pA << 1 | 0) < 0) << 31 >> 31 | 0), zA = 0 | o(), v = 0 | Qg(19 * EA | 0, 0 | UA, pA << 1 | 0, ((pA << 1 | 0) < 0) << 31 >> 31 | 0), jA = 0 | o(), pA = 0 | Qg(38 * I | 0, 0 | fA, pA << 1 | 0, ((pA << 1 | 0) < 0) << 31 >> 31 | 0), tA = 0 | o(), L = 0 | Qg(19 * yA | 0, ((19 * yA | 0) < 0) << 31 >> 31 | 0, 0 | yA, ((0 | yA) < 0) << 31 >> 31 | 0), WA = 0 | o(), b = 0 | Qg(38 * iA | 0, 0 | xA, 0 | yA, ((0 | yA) < 0) << 31 >> 31 | 0), TA = 0 | o(), d = 0 | Qg(19 * EA | 0, 0 | UA, yA << 1 | 0, ((yA << 1 | 0) < 0) << 31 >> 31 | 0), mA = 0 | o(), yA = 0 | Qg(38 * I | 0, 0 | fA, 0 | yA, ((0 | yA) < 0) << 31 >> 31 | 0), eA = 0 | o(), xA = 0 | Qg(38 * iA | 0, 0 | xA, 0 | iA, ((0 | iA) < 0) << 31 >> 31 | 0), LA = 0 | o(), H = 0 | Qg(19 * EA | 0, 0 | UA, iA << 1 | 0, ((iA << 1 | 0) < 0) << 31 >> 31 | 0), PA = 0 | o(), iA = 0 | Qg(38 * I | 0, 0 | fA, iA << 1 | 0, ((iA << 1 | 0) < 0) << 31 >> 31 | 0), DA = 0 | o(), UA = 0 | Qg(19 * EA | 0, 0 | UA, 0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0), SA = 0 | o(), EA = 0 | Qg(38 * I | 0, 0 | fA, 0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0), QA = 0 | o(), I = 0 | Qg(38 * I | 0, 0 | fA, 0 | I, ((0 | I) < 0) << 31 >> 31 | 0), fA = 0 | o(), wA = 0 | vg(0 | (II = 0 | vg(0 | (gI = 0 | vg(0 | (BI = 0 | vg(0 | (CI = 0 | vg(0 | IA, 0 | AA, 0 | $, 0 | CI)), 0 | o(), 0 | Z, 0 | BI)), 0 | o(), 0 | O, 0 | gI)), 0 | o(), 0 | W, 0 | II)), 0 | o(), 0 | gA, 0 | wA), gA = 0 | o(), sA = 0 | vg(0 | (ZA = 0 | vg(0 | ($A = 0 | vg(0 | (AI = 0 | vg(0 | z, 0 | V, 0 | q, 0 | AI)), 0 | o(), 0 | T, 0 | $A)), 0 | o(), 0 | j, 0 | ZA)), 0 | o(), 0 | rA, 0 | sA), rA = 0 | o(), FA = 0 | vg(0 | (VA = 0 | vg(0 | (zA = 0 | vg(0 | (WA = 0 | vg(0 | (OA = 0 | vg(0 | X, 0 | K, 0 | x, 0 | OA)), 0 | o(), 0 | L, 0 | WA)), 0 | o(), 0 | m, 0 | zA)), 0 | o(), 0 | N, 0 | VA)), 0 | o(), 0 | CA, 0 | FA), CA = 0 | o(), hA = 0 | vg(0 | (jA = 0 | vg(0 | (TA = 0 | vg(0 | (qA = 0 | vg(0 | R, 0 | P, 0 | J, 0 | qA)), 0 | o(), 0 | b, 0 | TA)), 0 | o(), 0 | v, 0 | jA)), 0 | o(), 0 | BA, 0 | hA), BA = 0 | o(), tA = 0 | vg(0 | (mA = 0 | vg(0 | (LA = 0 | vg(0 | (KA = 0 | vg(0 | (XA = 0 | vg(0 | U, 0 | S, 0 | M, 0 | XA)), 0 | o(), 0 | Y, 0 | KA)), 0 | o(), 0 | xA, 0 | LA)), 0 | o(), 0 | d, 0 | mA)), 0 | o(), 0 | pA, 0 | tA), pA = 0 | o(), eA = 0 | vg(0 | (PA = 0 | vg(0 | (RA = 0 | vg(0 | (NA = 0 | vg(0 | G, 0 | _, 0 | l, 0 | NA)), 0 | o(), 0 | k, 0 | RA)), 0 | o(), 0 | H, 0 | PA)), 0 | o(), 0 | yA, 0 | eA), yA = 0 | o(), DA = 0 | vg(0 | (SA = 0 | vg(0 | (vA = 0 | vg(0 | (bA = 0 | vg(0 | (JA = 0 | vg(0 | u, 0 | p, 0 | F, 0 | JA)), 0 | o(), 0 | D, 0 | bA)), 0 | o(), 0 | h, 0 | vA)), 0 | o(), 0 | UA, 0 | SA)), 0 | o(), 0 | iA, 0 | DA), iA = 0 | o(), QA = 0 | vg(0 | (dA = 0 | vg(0 | (YA = 0 | vg(0 | (MA = 0 | vg(0 | s, 0 | y, 0 | w, 0 | MA)), 0 | o(), 0 | f, 0 | YA)), 0 | o(), 0 | t, 0 | dA)), 0 | o(), 0 | EA, 0 | QA), EA = 0 | o(), fA = 0 | vg(0 | (kA = 0 | vg(0 | (lA = 0 | vg(0 | (_A = 0 | vg(0 | (GA = 0 | vg(0 | r, 0 | n, 0 | a, 0 | GA)), 0 | o(), 0 | c, 0 | _A)), 0 | o(), 0 | e, 0 | lA)), 0 | o(), 0 | i, 0 | kA)), 0 | o(), 0 | I, 0 | fA), I = 0 | o(), oA = 0 | vg(0 | (nA = 0 | vg(0 | (uA = 0 | vg(0 | (HA = 0 | vg(0 | E, 0 | Q, 0 | B, 0 | HA)), 0 | o(), 0 | g, 0 | uA)), 0 | o(), 0 | aA, 0 | nA)), 0 | o(), 0 | cA, 0 | oA), cA = 0 | o(), gA = 0 | rg(0 | wA, 0 | gA, 1), wA = 0 | o(), rA = 0 | rg(0 | sA, 0 | rA, 1), sA = 0 | o(), CA = 0 | rg(0 | FA, 0 | CA, 1), FA = 0 | o(), BA = 0 | rg(0 | hA, 0 | BA, 1), hA = 0 | o(), pA = 0 | rg(0 | tA, 0 | pA, 1), tA = 0 | o(), yA = 0 | rg(0 | eA, 0 | yA, 1), eA = 0 | o(), iA = 0 | rg(0 | DA, 0 | iA, 1), DA = 0 | o(), EA = 0 | rg(0 | QA, 0 | EA, 1), QA = 0 | o(), I = 0 | rg(0 | fA, 0 | I, 1), fA = 0 | o(), cA = 0 | rg(0 | oA, 0 | cA, 1), oA = 0 | o(), sA = 0 | vg(0 | (uA = 0 | ig(0 | (nA = 0 | vg(0 | gA, 0 | wA, 33554432, 0)), 0 | (aA = 0 | o()), 26)), 0 | o(), 0 | rA, 0 | sA), rA = 0 | o(), aA = 0 | Ug(0 | gA, 0 | wA, -67108864 & nA | 0, 0 | aA), nA = 0 | o(), eA = 0 | vg(0 | (uA = 0 | ig(0 | (wA = 0 | vg(0 | pA, 0 | tA, 33554432, 0)), 0 | (gA = 0 | o()), 26)), 0 | o(), 0 | yA, 0 | eA), yA = 0 | o(), gA = 0 | Ug(0 | pA, 0 | tA, -67108864 & wA | 0, 0 | gA), wA = 0 | o(), FA = 0 | vg(0 | (pA = 0 | ig(0 | (tA = 0 | vg(0 | sA, 0 | rA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | CA, 0 | FA), CA = 0 | o(), tA = 0 | Ug(0 | sA, 0 | rA, -33554432 & tA | 0, 0), rA = 0 | o(), DA = 0 | vg(0 | (pA = 0 | ig(0 | (sA = 0 | vg(0 | eA, 0 | yA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | iA, 0 | DA), iA = 0 | o(), sA = 0 | Ug(0 | eA, 0 | yA, -33554432 & sA | 0, 0), yA = 0 | o(), hA = 0 | vg(0 | (pA = 0 | ig(0 | (eA = 0 | vg(0 | FA, 0 | CA, 33554432, 0)), 0 | o(), 26)), 0 | o(), 0 | BA, 0 | hA), BA = 0 | o(), eA = 0 | Ug(0 | FA, 0 | CA, -67108864 & eA | 0, 0), o(), QA = 0 | vg(0 | (FA = 0 | ig(0 | (CA = 0 | vg(0 | DA, 0 | iA, 33554432, 0)), 0 | o(), 26)), 0 | o(), 0 | EA, 0 | QA), EA = 0 | o(), CA = 0 | Ug(0 | DA, 0 | iA, -67108864 & CA | 0, 0), o(), wA = 0 | vg(0 | (DA = 0 | ig(0 | (iA = 0 | vg(0 | hA, 0 | BA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | gA, 0 | wA), gA = 0 | o(), iA = 0 | Ug(0 | hA, 0 | BA, -33554432 & iA | 0, 0), o(), fA = 0 | vg(0 | (hA = 0 | ig(0 | (BA = 0 | vg(0 | QA, 0 | EA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | I, 0 | fA), I = 0 | o(), BA = 0 | Ug(0 | QA, 0 | EA, -33554432 & BA | 0, 0), o(), QA = 0 | vg(0 | sA, 0 | yA, 0 | (QA = 0 | yg(0 | (EA = 0 | vg(0 | wA, 0 | gA, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), EA = 0 | Ug(0 | wA, 0 | gA, -67108864 & EA | 0, 0), o(), oA = 0 | vg(0 | (wA = 0 | ig(0 | (gA = 0 | vg(0 | fA, 0 | I, 33554432, 0)), 0 | o(), 26)), 0 | o(), 0 | cA, 0 | oA), cA = 0 | o(), gA = 0 | Ug(0 | fA, 0 | I, -67108864 & gA | 0, 0), o(), nA = 0 | vg(0 | (fA = 0 | Qg(0 | (fA = 0 | ig(0 | (I = 0 | vg(0 | oA, 0 | cA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 19, 0)), 0 | o(), 0 | aA, 0 | nA), aA = 0 | o(), I = 0 | Ug(0 | oA, 0 | cA, -33554432 & I | 0, 0), o(), oA = 0 | vg(0 | tA, 0 | rA, 0 | (oA = 0 | yg(0 | (cA = 0 | vg(0 | nA, 0 | aA, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), cA = 0 | Ug(0 | nA, 0 | aA, -67108864 & cA | 0, 0), o(), C[A >> 2] = cA, C[A + 4 >> 2] = oA, C[A + 8 >> 2] = eA, C[A + 12 >> 2] = iA, C[A + 16 >> 2] = EA, C[A + 20 >> 2] = QA, C[A + 24 >> 2] = CA, C[A + 28 >> 2] = BA, C[A + 32 >> 2] = gA, C[A + 36 >> 2] = I; + } + + function _(A, I) { + A |= 0; + + var g, + B, + Q, + E, + i, + e, + c, + a, + n, + r, + t, + f, + w, + y, + s, + h, + D, + F, + p, + u, + H, + k, + l, + _, + G, + d, + Y, + M, + S, + U, + v, + b, + J, + P, + R, + N, + m, + L, + x, + K, + X, + j, + T, + q, + V, + z, + W, + O, + Z, + $, + AA = 0, + IA = 0, + gA = 0, + BA = 0, + CA = 0, + QA = 0, + EA = 0, + iA = 0, + eA = 0, + oA = 0, + cA = 0, + aA = 0, + nA = 0, + rA = 0, + tA = 0, + fA = 0, + wA = 0, + yA = 0, + sA = 0, + hA = 0, + DA = 0, + FA = 0, + pA = 0, + uA = 0, + HA = 0, + kA = 0, + lA = 0, + _A = 0, + GA = 0, + dA = 0, + YA = 0, + MA = 0, + SA = 0, + UA = 0, + vA = 0, + bA = 0, + JA = 0, + PA = 0, + RA = 0, + NA = 0, + mA = 0, + LA = 0, + xA = 0, + KA = 0, + XA = 0, + jA = 0, + TA = 0, + qA = 0, + VA = 0, + zA = 0, + WA = 0, + OA = 0, + ZA = 0, + $A = 0, + AI = 0, + II = 0, + gI = 0, + BI = 0, + CI = 0; + + tA = 0 | C[(I |= 0) >> 2], AA = 0 | C[I + 4 >> 2], EA = 0 | C[I + 8 >> 2], QA = 0 | C[I + 12 >> 2], MA = 0 | C[I + 16 >> 2], nA = 0 | C[I + 20 >> 2], TA = 0 | C[I + 24 >> 2], IA = 0 | C[I + 28 >> 2], _A = 0 | C[I + 32 >> 2], FA = 0 | C[I + 36 >> 2], O = 0 | Qg(0 | tA, ((0 | tA) < 0) << 31 >> 31 | 0, 0 | tA, ((0 | tA) < 0) << 31 >> 31 | 0), CI = 0 | o(), P = 0 | Qg(tA << 1 | 0, 0 | (fA = ((tA << 1 | 0) < 0) << 31 >> 31), 0 | AA, ((0 | AA) < 0) << 31 >> 31 | 0), ZA = 0 | o(), q = 0 | Qg(0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0, tA << 1 | 0, 0 | fA), T = 0 | o(), j = 0 | Qg(0 | QA, ((0 | QA) < 0) << 31 >> 31 | 0, tA << 1 | 0, 0 | fA), X = 0 | o(), m = 0 | Qg(0 | MA, ((0 | MA) < 0) << 31 >> 31 | 0, tA << 1 | 0, 0 | fA), $A = 0 | o(), M = 0 | Qg(0 | nA, ((0 | nA) < 0) << 31 >> 31 | 0, tA << 1 | 0, 0 | fA), VA = 0 | o(), p = 0 | Qg(0 | TA, ((0 | TA) < 0) << 31 >> 31 | 0, tA << 1 | 0, 0 | fA), RA = 0 | o(), f = 0 | Qg(0 | IA, ((0 | IA) < 0) << 31 >> 31 | 0, tA << 1 | 0, 0 | fA), GA = 0 | o(), e = 0 | Qg(0 | _A, ((0 | _A) < 0) << 31 >> 31 | 0, tA << 1 | 0, 0 | fA), pA = 0 | o(), fA = 0 | Qg(0 | FA, ((0 | FA) < 0) << 31 >> 31 | 0, tA << 1 | 0, 0 | fA), tA = 0 | o(), XA = 0 | Qg(AA << 1 | 0, 0 | (eA = ((AA << 1 | 0) < 0) << 31 >> 31), 0 | AA, ((0 | AA) < 0) << 31 >> 31 | 0), jA = 0 | o(), vA = 0 | Qg(AA << 1 | 0, 0 | eA, 0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0), bA = 0 | o(), K = 0 | Qg(QA << 1 | 0, 0 | (rA = ((QA << 1 | 0) < 0) << 31 >> 31), AA << 1 | 0, 0 | eA), x = 0 | o(), v = 0 | Qg(0 | MA, ((0 | MA) < 0) << 31 >> 31 | 0, AA << 1 | 0, 0 | eA), U = 0 | o(), u = 0 | Qg(nA << 1 | 0, ((nA << 1 | 0) < 0) << 31 >> 31 | 0, AA << 1 | 0, 0 | eA), NA = 0 | o(), w = 0 | Qg(0 | TA, ((0 | TA) < 0) << 31 >> 31 | 0, AA << 1 | 0, 0 | eA), dA = 0 | o(), c = 0 | Qg(IA << 1 | 0, ((IA << 1 | 0) < 0) << 31 >> 31 | 0, AA << 1 | 0, 0 | eA), uA = 0 | o(), g = 0 | Qg(0 | _A, ((0 | _A) < 0) << 31 >> 31 | 0, AA << 1 | 0, 0 | eA), wA = 0 | o(), eA = 0 | Qg(38 * FA | 0, 0 | (DA = ((38 * FA | 0) < 0) << 31 >> 31), AA << 1 | 0, 0 | eA), AA = 0 | o(), L = 0 | Qg(0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0, 0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0), AI = 0 | o(), S = 0 | Qg(EA << 1 | 0, ((EA << 1 | 0) < 0) << 31 >> 31 | 0, 0 | QA, ((0 | QA) < 0) << 31 >> 31 | 0), zA = 0 | o(), H = 0 | Qg(0 | MA, ((0 | MA) < 0) << 31 >> 31 | 0, EA << 1 | 0, ((EA << 1 | 0) < 0) << 31 >> 31 | 0), mA = 0 | o(), h = 0 | Qg(0 | nA, ((0 | nA) < 0) << 31 >> 31 | 0, EA << 1 | 0, ((EA << 1 | 0) < 0) << 31 >> 31 | 0), s = 0 | o(), t = 0 | Qg(0 | TA, ((0 | TA) < 0) << 31 >> 31 | 0, EA << 1 | 0, ((EA << 1 | 0) < 0) << 31 >> 31 | 0), r = 0 | o(), B = 0 | Qg(0 | IA, ((0 | IA) < 0) << 31 >> 31 | 0, EA << 1 | 0, ((EA << 1 | 0) < 0) << 31 >> 31 | 0), yA = 0 | o(), V = 0 | Qg(19 * _A | 0, 0 | (PA = ((19 * _A | 0) < 0) << 31 >> 31), EA << 1 | 0, ((EA << 1 | 0) < 0) << 31 >> 31 | 0), II = 0 | o(), EA = 0 | Qg(38 * FA | 0, 0 | DA, 0 | EA, ((0 | EA) < 0) << 31 >> 31 | 0), iA = 0 | o(), l = 0 | Qg(QA << 1 | 0, 0 | rA, 0 | QA, ((0 | QA) < 0) << 31 >> 31 | 0), k = 0 | o(), y = 0 | Qg(QA << 1 | 0, 0 | rA, 0 | MA, ((0 | MA) < 0) << 31 >> 31 | 0), YA = 0 | o(), a = 0 | Qg(nA << 1 | 0, ((nA << 1 | 0) < 0) << 31 >> 31 | 0, QA << 1 | 0, 0 | rA), HA = 0 | o(), i = 0 | Qg(0 | TA, ((0 | TA) < 0) << 31 >> 31 | 0, QA << 1 | 0, 0 | rA), E = 0 | o(), z = 0 | Qg(38 * IA | 0, 0 | (hA = ((38 * IA | 0) < 0) << 31 >> 31), QA << 1 | 0, 0 | rA), gI = 0 | o(), b = 0 | Qg(19 * _A | 0, 0 | PA, QA << 1 | 0, 0 | rA), WA = 0 | o(), rA = 0 | Qg(38 * FA | 0, 0 | DA, QA << 1 | 0, 0 | rA), QA = 0 | o(), n = 0 | Qg(0 | MA, ((0 | MA) < 0) << 31 >> 31 | 0, 0 | MA, ((0 | MA) < 0) << 31 >> 31 | 0), kA = 0 | o(), Q = 0 | Qg(MA << 1 | 0, ((MA << 1 | 0) < 0) << 31 >> 31 | 0, 0 | nA, ((0 | nA) < 0) << 31 >> 31 | 0), sA = 0 | o(), W = 0 | Qg(19 * TA | 0, ((19 * TA | 0) < 0) << 31 >> 31 | 0, MA << 1 | 0, ((MA << 1 | 0) < 0) << 31 >> 31 | 0), BI = 0 | o(), J = 0 | Qg(38 * IA | 0, 0 | hA, 0 | MA, ((0 | MA) < 0) << 31 >> 31 | 0), OA = 0 | o(), _ = 0 | Qg(19 * _A | 0, 0 | PA, MA << 1 | 0, ((MA << 1 | 0) < 0) << 31 >> 31 | 0), LA = 0 | o(), MA = 0 | Qg(38 * FA | 0, 0 | DA, 0 | MA, ((0 | MA) < 0) << 31 >> 31 | 0), BA = 0 | o(), $ = 0 | Qg(38 * nA | 0, ((38 * nA | 0) < 0) << 31 >> 31 | 0, 0 | nA, ((0 | nA) < 0) << 31 >> 31 | 0), Z = 0 | o(), N = 0 | Qg(19 * TA | 0, ((19 * TA | 0) < 0) << 31 >> 31 | 0, nA << 1 | 0, ((nA << 1 | 0) < 0) << 31 >> 31 | 0), R = 0 | o(), G = 0 | Qg(38 * IA | 0, 0 | hA, nA << 1 | 0, ((nA << 1 | 0) < 0) << 31 >> 31 | 0), xA = 0 | o(), D = 0 | Qg(19 * _A | 0, 0 | PA, nA << 1 | 0, ((nA << 1 | 0) < 0) << 31 >> 31 | 0), SA = 0 | o(), nA = 0 | Qg(38 * FA | 0, 0 | DA, nA << 1 | 0, ((nA << 1 | 0) < 0) << 31 >> 31 | 0), gA = 0 | o(), d = 0 | Qg(19 * TA | 0, ((19 * TA | 0) < 0) << 31 >> 31 | 0, 0 | TA, ((0 | TA) < 0) << 31 >> 31 | 0), KA = 0 | o(), F = 0 | Qg(38 * IA | 0, 0 | hA, 0 | TA, ((0 | TA) < 0) << 31 >> 31 | 0), UA = 0 | o(), oA = 0 | Qg(19 * _A | 0, 0 | PA, TA << 1 | 0, ((TA << 1 | 0) < 0) << 31 >> 31 | 0), cA = 0 | o(), TA = 0 | Qg(38 * FA | 0, 0 | DA, 0 | TA, ((0 | TA) < 0) << 31 >> 31 | 0), CA = 0 | o(), hA = 0 | Qg(38 * IA | 0, 0 | hA, 0 | IA, ((0 | IA) < 0) << 31 >> 31 | 0), aA = 0 | o(), Y = 0 | Qg(19 * _A | 0, 0 | PA, IA << 1 | 0, ((IA << 1 | 0) < 0) << 31 >> 31 | 0), qA = 0 | o(), I = 0 | Qg(38 * FA | 0, 0 | DA, IA << 1 | 0, ((IA << 1 | 0) < 0) << 31 >> 31 | 0), IA = 0 | o(), PA = 0 | Qg(19 * _A | 0, 0 | PA, 0 | _A, ((0 | _A) < 0) << 31 >> 31 | 0), JA = 0 | o(), _A = 0 | Qg(38 * FA | 0, 0 | DA, 0 | _A, ((0 | _A) < 0) << 31 >> 31 | 0), lA = 0 | o(), FA = 0 | Qg(38 * FA | 0, 0 | DA, 0 | FA, ((0 | FA) < 0) << 31 >> 31 | 0), DA = 0 | o(), AA = 0 | vg(0 | (II = 0 | vg(0 | (gI = 0 | vg(0 | (BI = 0 | vg(0 | (CI = 0 | vg(0 | $, 0 | Z, 0 | O, 0 | CI)), 0 | o(), 0 | W, 0 | BI)), 0 | o(), 0 | z, 0 | gI)), 0 | o(), 0 | V, 0 | II)), 0 | o(), 0 | eA, 0 | AA), eA = 0 | o(), jA = 0 | vg(0 | q, 0 | T, 0 | XA, 0 | jA), XA = 0 | o(), bA = 0 | vg(0 | j, 0 | X, 0 | vA, 0 | bA), vA = 0 | o(), gA = 0 | vg(0 | (cA = 0 | vg(0 | (aA = 0 | vg(0 | ($A = 0 | vg(0 | (AI = 0 | vg(0 | K, 0 | x, 0 | L, 0 | AI)), 0 | o(), 0 | m, 0 | $A)), 0 | o(), 0 | hA, 0 | aA)), 0 | o(), 0 | oA, 0 | cA)), 0 | o(), 0 | nA, 0 | gA), nA = 0 | o(), aA = 0 | ig(0 | (cA = 0 | vg(0 | AA, 0 | eA, 33554432, 0)), 0 | (oA = 0 | o()), 26), hA = 0 | o(), hA = 0 | vg(0 | (iA = 0 | vg(0 | (WA = 0 | vg(0 | (OA = 0 | vg(0 | (ZA = 0 | vg(0 | N, 0 | R, 0 | P, 0 | ZA)), 0 | o(), 0 | J, 0 | OA)), 0 | o(), 0 | b, 0 | WA)), 0 | o(), 0 | EA, 0 | iA)), 0 | o(), 0 | aA, 0 | hA), aA = 0 | o(), oA = 0 | Ug(0 | AA, 0 | eA, -67108864 & cA | 0, 0 | oA), cA = 0 | o(), iA = 0 | ig(0 | (eA = 0 | vg(0 | gA, 0 | nA, 33554432, 0)), 0 | (AA = 0 | o()), 26), EA = 0 | o(), EA = 0 | vg(0 | (CA = 0 | vg(0 | (qA = 0 | vg(0 | (VA = 0 | vg(0 | (zA = 0 | vg(0 | v, 0 | U, 0 | S, 0 | zA)), 0 | o(), 0 | M, 0 | VA)), 0 | o(), 0 | Y, 0 | qA)), 0 | o(), 0 | TA, 0 | CA)), 0 | o(), 0 | iA, 0 | EA), iA = 0 | o(), AA = 0 | Ug(0 | gA, 0 | nA, -67108864 & eA | 0, 0 | AA), eA = 0 | o(), gA = 0 | ig(0 | (nA = 0 | vg(0 | hA, 0 | aA, 16777216, 0)), 0 | o(), 25), CA = 0 | o(), CA = 0 | vg(0 | (QA = 0 | vg(0 | (LA = 0 | vg(0 | (xA = 0 | vg(0 | (KA = 0 | vg(0 | jA, 0 | XA, 0 | d, 0 | KA)), 0 | o(), 0 | G, 0 | xA)), 0 | o(), 0 | _, 0 | LA)), 0 | o(), 0 | rA, 0 | QA)), 0 | o(), 0 | gA, 0 | CA), gA = 0 | o(), nA = 0 | Ug(0 | hA, 0 | aA, -33554432 & nA | 0, 0), aA = 0 | o(), QA = 0 | ig(0 | (hA = 0 | vg(0 | EA, 0 | iA, 16777216, 0)), 0 | o(), 25), rA = 0 | o(), rA = 0 | vg(0 | (IA = 0 | vg(0 | (JA = 0 | vg(0 | (RA = 0 | vg(0 | (NA = 0 | vg(0 | (mA = 0 | vg(0 | l, 0 | k, 0 | H, 0 | mA)), 0 | o(), 0 | u, 0 | NA)), 0 | o(), 0 | p, 0 | RA)), 0 | o(), 0 | PA, 0 | JA)), 0 | o(), 0 | I, 0 | IA)), 0 | o(), 0 | QA, 0 | rA), QA = 0 | o(), hA = 0 | Ug(0 | EA, 0 | iA, -33554432 & hA | 0, 0), iA = 0 | o(), IA = 0 | ig(0 | (EA = 0 | vg(0 | CA, 0 | gA, 33554432, 0)), 0 | o(), 26), I = 0 | o(), I = 0 | vg(0 | (BA = 0 | vg(0 | (SA = 0 | vg(0 | (UA = 0 | vg(0 | bA, 0 | vA, 0 | F, 0 | UA)), 0 | o(), 0 | D, 0 | SA)), 0 | o(), 0 | MA, 0 | BA)), 0 | o(), 0 | IA, 0 | I), IA = 0 | o(), EA = 0 | Ug(0 | CA, 0 | gA, -67108864 & EA | 0, 0), o(), CA = 0 | ig(0 | (gA = 0 | vg(0 | rA, 0 | QA, 33554432, 0)), 0 | o(), 26), BA = 0 | o(), BA = 0 | vg(0 | (lA = 0 | vg(0 | (GA = 0 | vg(0 | (dA = 0 | vg(0 | (YA = 0 | vg(0 | h, 0 | s, 0 | y, 0 | YA)), 0 | o(), 0 | w, 0 | dA)), 0 | o(), 0 | f, 0 | GA)), 0 | o(), 0 | _A, 0 | lA)), 0 | o(), 0 | CA, 0 | BA), CA = 0 | o(), gA = 0 | Ug(0 | rA, 0 | QA, -67108864 & gA | 0, 0), o(), eA = 0 | vg(0 | (rA = 0 | ig(0 | (QA = 0 | vg(0 | I, 0 | IA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | AA, 0 | eA), AA = 0 | o(), QA = 0 | Ug(0 | I, 0 | IA, -33554432 & QA | 0, 0), o(), I = 0 | ig(0 | (IA = 0 | vg(0 | BA, 0 | CA, 16777216, 0)), 0 | o(), 25), rA = 0 | o(), rA = 0 | vg(0 | (DA = 0 | vg(0 | (pA = 0 | vg(0 | (uA = 0 | vg(0 | (HA = 0 | vg(0 | (kA = 0 | vg(0 | t, 0 | r, 0 | n, 0 | kA)), 0 | o(), 0 | a, 0 | HA)), 0 | o(), 0 | c, 0 | uA)), 0 | o(), 0 | e, 0 | pA)), 0 | o(), 0 | FA, 0 | DA)), 0 | o(), 0 | I, 0 | rA), I = 0 | o(), IA = 0 | Ug(0 | BA, 0 | CA, -33554432 & IA | 0, 0), o(), BA = 0 | vg(0 | hA, 0 | iA, 0 | (BA = 0 | yg(0 | (CA = 0 | vg(0 | eA, 0 | AA, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), CA = 0 | Ug(0 | eA, 0 | AA, -67108864 & CA | 0, 0), o(), eA = 0 | ig(0 | (AA = 0 | vg(0 | rA, 0 | I, 33554432, 0)), 0 | o(), 26), iA = 0 | o(), iA = 0 | vg(0 | (tA = 0 | vg(0 | (wA = 0 | vg(0 | (yA = 0 | vg(0 | (sA = 0 | vg(0 | i, 0 | E, 0 | Q, 0 | sA)), 0 | o(), 0 | B, 0 | yA)), 0 | o(), 0 | g, 0 | wA)), 0 | o(), 0 | fA, 0 | tA)), 0 | o(), 0 | eA, 0 | iA), eA = 0 | o(), AA = 0 | Ug(0 | rA, 0 | I, -67108864 & AA | 0, 0), o(), cA = 0 | vg(0 | (rA = 0 | Qg(0 | (rA = 0 | ig(0 | (I = 0 | vg(0 | iA, 0 | eA, 16777216, 0)), 0 | o(), 25)), 0 | o(), 19, 0)), 0 | o(), 0 | oA, 0 | cA), oA = 0 | o(), I = 0 | Ug(0 | iA, 0 | eA, -33554432 & I | 0, 0), o(), iA = 0 | vg(0 | nA, 0 | aA, 0 | (iA = 0 | yg(0 | (eA = 0 | vg(0 | cA, 0 | oA, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), eA = 0 | Ug(0 | cA, 0 | oA, -67108864 & eA | 0, 0), o(), C[A >> 2] = eA, C[A + 4 >> 2] = iA, C[A + 8 >> 2] = EA, C[A + 12 >> 2] = QA, C[A + 16 >> 2] = CA, C[A + 20 >> 2] = BA, C[A + 24 >> 2] = gA, C[A + 28 >> 2] = IA, C[A + 32 >> 2] = AA, C[A + 36 >> 2] = I; + } + + function G(A, I, g, B, C) { + A |= 0, I |= 0, g |= 0, B |= 0; + var E = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0; + if (n = 0 | qI(C |= 0), t = 0 | o(), E = 0 | qI(C + 8 | 0), i = 0 | o(), B = 0 | rg(0 | g, 0 | B, 56), C = 0 | o(), (I + g + (0 - (7 & g)) | 0) == (0 | I)) y = 2037671283 ^ E, e = 1952801890 ^ i, w = 1886610805 ^ n, r = 1936682341 ^ t, a = 1852075885 ^ E, c = 1685025377 ^ i, F = 1852142177 ^ n, E = 1819895653 ^ t, i = I;else for (D = 2037671283 ^ E, e = 1952801890 ^ i, y = 1886610805 ^ n, r = 1936682341 ^ t, a = 1852075885 ^ E, c = 1685025377 ^ i, i = 1852142177 ^ n, E = 1819895653 ^ t, w = I;;) { + if (u = (s = 0 | qI(w)) ^ D, e ^= h = 0 | o(), F = 0 | vg(0 | y, 0 | r, 0 | a, 0 | c), D = 0 | o(), n = 0 | $I(a, c, 13), a = (0 | o()) ^ D, c = 0 | $I(F, D, 32), D = 0 | o(), t = 0 | vg(0 | u, 0 | e, 0 | i, 0 | E), f = 0 | o(), D = 0 | vg((e = 0 | $I(u, e, 16)) ^ t | 0, 0 | (i = (0 | o()) ^ f), 0 | c, 0 | D), c = 0 | o(), i = 0 | $I(e ^ t, i, 21), e = c ^ (0 | o()), f = 0 | vg(0 | t, 0 | f, n ^ F | 0, 0 | a), t = 0 | o(), a = 0 | $I(n ^ F, a, 17), E = (0 | o()) ^ t, t = 0 | $I(f, t, 32), F = 0 | o(), c = 0 | vg(a ^ f | 0, 0 | E, 0 | D, 0 | c), n = 0 | o(), E = 0 | $I(a ^ f, E, 13), f = (0 | o()) ^ n, n = 0 | $I(c, n, 32), a = 0 | o(), F = 0 | vg(0 | t, 0 | F, D ^ i | 0, 0 | e), t = 0 | o(), a = 0 | vg((e = 0 | $I(D ^ i, e, 16)) ^ F | 0, 0 | (i = (0 | o()) ^ t), 0 | n, 0 | a), n = 0 | o(), i = 0 | $I(e ^ F, i, 21), e = n ^ (0 | o()), t = 0 | vg(E ^ c | 0, 0 | f, 0 | F, 0 | t), F = 0 | o(), f = 0 | $I(E ^ c, f, 17), c = (0 | o()) ^ F, F = 0 | $I(t, F, 32), E = 0 | o(), (0 | (w = w + 8 | 0)) == (I + g + (0 - (7 & g)) | 0)) { + y = a ^ i, w = a ^ s, r = n ^ h, a = f ^ t, i = I + g + (0 - (7 & g)) | 0; + break; + } + + D = a ^ i, y = a ^ s, r = n ^ h, a = f ^ t, i = F; + } + + switch (7 & g) { + case 7: + p = 0 | rg(0 | Q[i + 6 >> 0], 0, 48), C = 0 | o() | C, B |= p, p = 6; + break; + + case 6: + p = 6; + break; + + case 5: + p = 7; + break; + + case 4: + p = 8; + break; + + case 3: + p = 9; + break; + + case 2: + p = 10; + break; + + case 1: + p = 11; + } + + 6 == (0 | p) && (u = 0 | rg(0 | Q[i + 5 >> 0], 0, 40), C = 0 | o() | C, B |= u, p = 7), 7 == (0 | p) && (C = 0 | Q[i + 4 >> 0] | C, p = 8), 8 == (0 | p) && (B |= u = 0 | rg(0 | Q[i + 3 >> 0], 0, 24), C = 0 | o() | C, p = 9), 9 == (0 | p) && (B |= u = 0 | rg(0 | Q[i + 2 >> 0], 0, 16), C = 0 | o() | C, p = 10), 10 == (0 | p) && (B |= u = 0 | rg(0 | Q[i + 1 >> 0], 0, 8), C = 0 | o() | C, p = 11), 11 == (0 | p) && (B = 0 | B | Q[i >> 0]), g = B ^ y, h = C ^ e, w = 0 | vg(0 | w, 0 | r, 0 | a, 0 | c), y = 0 | o(), s = 0 | $I(a, c, 13), I = (0 | o()) ^ y, y = 0 | $I(w, y, 32), p = 0 | o(), F = 0 | vg(0 | g, 0 | h, 0 | F, 0 | E), u = 0 | o(), p = 0 | vg((h = 0 | $I(g, h, 16)) ^ F | 0, 0 | (g = (0 | o()) ^ u), 0 | y, 0 | p), y = 0 | o(), g = 0 | $I(h ^ F, g, 21), h = y ^ (0 | o()), u = 0 | vg(0 | F, 0 | u, s ^ w | 0, 0 | I), F = 0 | o(), I = 0 | $I(s ^ w, I, 17), w = (0 | o()) ^ F, F = 0 | $I(u, F, 32), s = 0 | o(), y = 0 | vg(I ^ u | 0, 0 | w, 0 | p, 0 | y), D = 0 | o(), w = 0 | $I(I ^ u, w, 13), u = (0 | o()) ^ D, D = 0 | $I(y, D, 32), I = 0 | o(), s = 0 | vg(0 | F, 0 | s, p ^ g | 0, 0 | h), F = 0 | o(), I = 0 | vg((h = 0 | $I(p ^ g, h, 16)) ^ s | 0, 0 | (g = (0 | o()) ^ F), 0 | D, 0 | I), D = 0 | o(), g = 0 | $I(h ^ s, g, 21), h = D ^ (0 | o()), F = 0 | vg(w ^ y | 0, 0 | u, 0 | s, 0 | F), s = 0 | o(), u = 0 | $I(w ^ y, u, 17), y = (0 | o()) ^ s, s = 0 | $I(F, s, 32), w = 0 | o(), D = 0 | vg(I ^ B | 0, D ^ C | 0, u ^ F | 0, 0 | y), p = 0 | o(), y = 0 | $I(u ^ F, y, 13), F = (0 | o()) ^ p, p = 0 | $I(D, p, 32), u = 0 | o(), w = 0 | vg(255 ^ s | 0, 0 | w, I ^ g | 0, 0 | h), s = 0 | o(), u = 0 | vg((h = 0 | $I(I ^ g, h, 16)) ^ w | 0, 0 | (g = (0 | o()) ^ s), 0 | p, 0 | u), p = 0 | o(), g = 0 | $I(h ^ w, g, 21), h = p ^ (0 | o()), s = 0 | vg(0 | w, 0 | s, y ^ D | 0, 0 | F), w = 0 | o(), F = 0 | $I(y ^ D, F, 17), D = (0 | o()) ^ w, w = 0 | $I(s, w, 32), y = 0 | o(), p = 0 | vg(F ^ s | 0, 0 | D, 0 | u, 0 | p), I = 0 | o(), D = 0 | $I(F ^ s, D, 13), s = (0 | o()) ^ I, I = 0 | $I(p, I, 32), F = 0 | o(), y = 0 | vg(0 | w, 0 | y, u ^ g | 0, 0 | h), w = 0 | o(), F = 0 | vg((h = 0 | $I(u ^ g, h, 16)) ^ y | 0, 0 | (g = (0 | o()) ^ w), 0 | I, 0 | F), I = 0 | o(), g = 0 | $I(h ^ y, g, 21), h = I ^ (0 | o()), w = 0 | vg(D ^ p | 0, 0 | s, 0 | y, 0 | w), y = 0 | o(), s = 0 | $I(D ^ p, s, 17), p = (0 | o()) ^ y, y = 0 | $I(w, y, 32), D = 0 | o(), I = 0 | vg(s ^ w | 0, 0 | p, 0 | F, 0 | I), u = 0 | o(), p = 0 | $I(s ^ w, p, 13), w = (0 | o()) ^ u, u = 0 | $I(I, u, 32), s = 0 | o(), D = 0 | vg(0 | y, 0 | D, F ^ g | 0, 0 | h), y = 0 | o(), s = 0 | vg((h = 0 | $I(F ^ g, h, 16)) ^ D | 0, 0 | (g = (0 | o()) ^ y), 0 | u, 0 | s), u = 0 | o(), g = 0 | $I(h ^ D, g, 21), h = u ^ (0 | o()), y = 0 | vg(p ^ I | 0, 0 | w, 0 | D, 0 | y), D = 0 | o(), w = 0 | $I(p ^ I, w, 17), I = (0 | o()) ^ D, D = 0 | $I(y, D, 32), p = 0 | o(), u = 0 | vg(w ^ y | 0, 0 | I, 0 | s, 0 | u), F = 0 | o(), I = 0 | $I(w ^ y, I, 13), F = (0 | o()) ^ F, p = 0 | vg(0 | D, 0 | p, s ^ g | 0, 0 | h), D = 0 | o(), h = 0 | $I((h = 0 | $I(s ^ g, h, 16)) ^ p, (0 | o()) ^ D, 21), g = 0 | o(), D = 0 | vg(I ^ u | 0, 0 | F, 0 | p, 0 | D), p = 0 | o(), F = 0 | $I(I ^ u, F, 17), u = 0 | o(), LI(A, h ^ D ^ F ^ (I = 0 | $I(D, p, 32)), g ^ p ^ u ^ (0 | o())); + } + + function d(A) { + var I = 0, + g = 0, + B = 0, + Q = 0, + E = 0, + i = 0, + e = 0, + o = 0, + c = 0; + + if (A |= 0) { + I = 0 | C[8683], c = A + -8 + (-8 & (g = 0 | C[A + -4 >> 2])) | 0; + + do { + if (1 & g) e = A + -8 | 0, o = A + -8 | 0, A = -8 & g;else { + if (B = 0 | C[A + -8 >> 2], !(3 & g)) return; + if (i = B + (-8 & g) | 0, (E = A + -8 + (0 - B) | 0) >>> 0 < I >>> 0) return; + + if ((0 | C[8684]) == (0 | E)) { + if (3 != (3 & (A = 0 | C[c + 4 >> 2]) | 0)) { + e = E, o = E, A = i; + break; + } + + return C[8681] = i, C[c + 4 >> 2] = -2 & A, C[E + 4 >> 2] = 1 | i, void (C[E + i >> 2] = i); + } + + if (B >>> 0 < 256) { + if (A = 0 | C[E + 8 >> 2], (0 | (I = 0 | C[E + 12 >> 2])) == (0 | A)) { + C[8679] = C[8679] & ~(1 << (B >>> 3)), e = E, o = E, A = i; + break; + } + + C[A + 12 >> 2] = I, C[I + 8 >> 2] = A, e = E, o = E, A = i; + break; + } + + Q = 0 | C[E + 24 >> 2], A = 0 | C[E + 12 >> 2]; + + do { + if ((0 | A) == (0 | E)) { + if (A = 0 | C[E + 16 + 4 >> 2]) I = E + 16 + 4 | 0;else { + if (!(A = 0 | C[E + 16 >> 2])) { + A = 0; + break; + } + + I = E + 16 | 0; + } + + for (;;) { + if (g = 0 | C[(B = A + 20 | 0) >> 2]) A = g, I = B;else { + if (!(g = 0 | C[(B = A + 16 | 0) >> 2])) break; + A = g, I = B; + } + } + + C[I >> 2] = 0; + } else o = 0 | C[E + 8 >> 2], C[o + 12 >> 2] = A, C[A + 8 >> 2] = o; + } while (0); + + if (Q) { + if (I = 0 | C[E + 28 >> 2], (0 | C[35020 + (I << 2) >> 2]) == (0 | E)) { + if (C[35020 + (I << 2) >> 2] = A, !A) { + C[8680] = C[8680] & ~(1 << I), e = E, o = E, A = i; + break; + } + } else if (C[((0 | C[Q + 16 >> 2]) == (0 | E) ? Q + 16 | 0 : Q + 20 | 0) >> 2] = A, !A) { + e = E, o = E, A = i; + break; + } + + C[A + 24 >> 2] = Q, 0 | (I = 0 | C[E + 16 >> 2]) && (C[A + 16 >> 2] = I, C[I + 24 >> 2] = A), (I = 0 | C[E + 16 + 4 >> 2]) ? (C[A + 20 >> 2] = I, C[I + 24 >> 2] = A, e = E, o = E, A = i) : (e = E, o = E, A = i); + } else e = E, o = E, A = i; + } + } while (0); + + if (!(e >>> 0 >= c >>> 0) && 1 & (g = 0 | C[c + 4 >> 2])) { + if (2 & g) C[c + 4 >> 2] = -2 & g, C[o + 4 >> 2] = 1 | A, C[e + A >> 2] = A, Q = A;else { + if ((0 | C[8685]) == (0 | c)) { + if (c = (0 | C[8682]) + A | 0, C[8682] = c, C[8685] = o, C[o + 4 >> 2] = 1 | c, (0 | o) != (0 | C[8684])) return; + return C[8684] = 0, void (C[8681] = 0); + } + + if ((0 | C[8684]) == (0 | c)) return c = (0 | C[8681]) + A | 0, C[8681] = c, C[8684] = e, C[o + 4 >> 2] = 1 | c, void (C[e + c >> 2] = c); + Q = (-8 & g) + A | 0; + + do { + if (g >>> 0 < 256) { + if (I = 0 | C[c + 8 >> 2], (0 | (A = 0 | C[c + 12 >> 2])) == (0 | I)) { + C[8679] = C[8679] & ~(1 << (g >>> 3)); + break; + } + + C[I + 12 >> 2] = A, C[A + 8 >> 2] = I; + break; + } + + E = 0 | C[c + 24 >> 2], A = 0 | C[c + 12 >> 2]; + + do { + if ((0 | A) == (0 | c)) { + if (A = 0 | C[c + 16 + 4 >> 2]) I = c + 16 + 4 | 0;else { + if (!(A = 0 | C[c + 16 >> 2])) { + I = 0; + break; + } + + I = c + 16 | 0; + } + + for (;;) { + if (g = 0 | C[(B = A + 20 | 0) >> 2]) A = g, I = B;else { + if (!(g = 0 | C[(B = A + 16 | 0) >> 2])) break; + A = g, I = B; + } + } + + C[I >> 2] = 0, I = A; + } else I = 0 | C[c + 8 >> 2], C[I + 12 >> 2] = A, C[A + 8 >> 2] = I, I = A; + } while (0); + + if (0 | E) { + if (A = 0 | C[c + 28 >> 2], (0 | C[35020 + (A << 2) >> 2]) == (0 | c)) { + if (C[35020 + (A << 2) >> 2] = I, !I) { + C[8680] = C[8680] & ~(1 << A); + break; + } + } else if (C[((0 | C[E + 16 >> 2]) == (0 | c) ? E + 16 | 0 : E + 20 | 0) >> 2] = I, !I) break; + + C[I + 24 >> 2] = E, 0 | (A = 0 | C[c + 16 >> 2]) && (C[I + 16 >> 2] = A, C[A + 24 >> 2] = I), 0 | (A = 0 | C[c + 16 + 4 >> 2]) && (C[I + 20 >> 2] = A, C[A + 24 >> 2] = I); + } + } while (0); + + if (C[o + 4 >> 2] = 1 | Q, C[e + Q >> 2] = Q, (0 | o) == (0 | C[8684])) return void (C[8681] = Q); + } + if (g = Q >>> 3, Q >>> 0 < 256) return (A = 0 | C[8679]) & 1 << g ? (A = 34756 + (g << 1 << 2) + 8 | 0, I = 0 | C[34756 + (g << 1 << 2) + 8 >> 2]) : (C[8679] = A | 1 << g, A = 34756 + (g << 1 << 2) + 8 | 0, I = 34756 + (g << 1 << 2) | 0), C[A >> 2] = o, C[I + 12 >> 2] = o, C[o + 8 >> 2] = I, void (C[o + 12 >> 2] = 34756 + (g << 1 << 2)); + I = 35020 + ((B = (A = Q >>> 8) ? Q >>> 0 > 16777215 ? 31 : Q >>> (7 + (B = 14 - ((520192 + (A << ((A + 1048320 | 0) >>> 16 & 8)) | 0) >>> 16 & 4 | (A + 1048320 | 0) >>> 16 & 8 | (245760 + (B = A << ((A + 1048320 | 0) >>> 16 & 8) << ((520192 + (A << ((A + 1048320 | 0) >>> 16 & 8)) | 0) >>> 16 & 4)) | 0) >>> 16 & 2) + (B << ((B + 245760 | 0) >>> 16 & 2) >>> 15) | 0) | 0) & 1 | B << 1 : 0) << 2) | 0, C[o + 28 >> 2] = B, C[o + 20 >> 2] = 0, C[o + 16 >> 2] = 0, A = 0 | C[8680], g = 1 << B; + + A: do { + if (A & g) { + A = 0 | C[I >> 2]; + + I: do { + if ((-8 & C[A + 4 >> 2] | 0) != (0 | Q)) { + for (B = Q << (31 == (0 | B) ? 0 : 25 - (B >>> 1) | 0); I = 0 | C[(g = A + 16 + (B >>> 31 << 2) | 0) >> 2];) { + if ((-8 & C[I + 4 >> 2] | 0) == (0 | Q)) { + A = I; + break I; + } + + B <<= 1, A = I; + } + + C[g >> 2] = o, C[o + 24 >> 2] = A, C[o + 12 >> 2] = o, C[o + 8 >> 2] = o; + break A; + } + } while (0); + + c = 0 | C[(e = A + 8 | 0) >> 2], C[c + 12 >> 2] = o, C[e >> 2] = o, C[o + 8 >> 2] = c, C[o + 12 >> 2] = A, C[o + 24 >> 2] = 0; + } else C[8680] = A | g, C[I >> 2] = o, C[o + 24 >> 2] = I, C[o + 12 >> 2] = o, C[o + 8 >> 2] = o; + } while (0); + + if (c = (0 | C[8687]) - 1 | 0, C[8687] = c, !(0 | c)) { + for (A = 35172; A = 0 | C[A >> 2];) { + A = A + 8 | 0; + } + + C[8687] = -1; + } + } + } + } + + function Y(A, I) { + I |= 0; + var g = 0, + B = 0, + Q = 0, + E = 0, + i = 0, + e = 0, + o = 0; + g = 0 | C[4 + (A |= 0) >> 2]; + + do { + if (1 & g) o = A, g = I;else { + if (e = 0 | C[A >> 2], !(3 & g)) return; + + if ((0 | C[8684]) == (A + (0 - e) | 0)) { + if (3 != (3 & (g = 0 | C[A + I + 4 >> 2]) | 0)) { + o = A + (0 - e) | 0, g = e + I | 0; + break; + } + + return C[8681] = e + I, C[A + I + 4 >> 2] = -2 & g, C[A + (0 - e) + 4 >> 2] = e + I | 1, void (C[A + I >> 2] = e + I); + } + + if (e >>> 0 < 256) { + if (g = 0 | C[A + (0 - e) + 8 >> 2], (0 | (B = 0 | C[A + (0 - e) + 12 >> 2])) == (0 | g)) { + C[8679] = C[8679] & ~(1 << (e >>> 3)), o = A + (0 - e) | 0, g = e + I | 0; + break; + } + + C[g + 12 >> 2] = B, C[B + 8 >> 2] = g, o = A + (0 - e) | 0, g = e + I | 0; + break; + } + + i = 0 | C[A + (0 - e) + 24 >> 2], g = 0 | C[A + (0 - e) + 12 >> 2]; + + do { + if ((0 | g) == (A + (0 - e) | 0)) { + if (g = 0 | C[4 + (B = A + (0 - e) + 16 | 0) >> 2]) B = B + 4 | 0;else if (!(g = 0 | C[B >> 2])) { + B = 0; + break; + } + + for (;;) { + if (Q = 0 | C[(E = g + 20 | 0) >> 2]) g = Q, B = E;else { + if (!(Q = 0 | C[(E = g + 16 | 0) >> 2])) break; + g = Q, B = E; + } + } + + C[B >> 2] = 0, B = g; + } else B = 0 | C[A + (0 - e) + 8 >> 2], C[B + 12 >> 2] = g, C[g + 8 >> 2] = B, B = g; + } while (0); + + if (i) { + if (g = 0 | C[A + (0 - e) + 28 >> 2], (0 | C[35020 + (g << 2) >> 2]) == (A + (0 - e) | 0)) { + if (C[35020 + (g << 2) >> 2] = B, !B) { + C[8680] = C[8680] & ~(1 << g), o = A + (0 - e) | 0, g = e + I | 0; + break; + } + } else if (C[((0 | C[i + 16 >> 2]) == (A + (0 - e) | 0) ? i + 16 | 0 : i + 20 | 0) >> 2] = B, !B) { + o = A + (0 - e) | 0, g = e + I | 0; + break; + } + + C[B + 24 >> 2] = i, 0 | (g = 0 | C[A + (0 - e) + 16 >> 2]) && (C[B + 16 >> 2] = g, C[g + 24 >> 2] = B), (g = 0 | C[A + (0 - e) + 16 + 4 >> 2]) ? (C[B + 20 >> 2] = g, C[g + 24 >> 2] = B, o = A + (0 - e) | 0, g = e + I | 0) : (o = A + (0 - e) | 0, g = e + I | 0); + } else o = A + (0 - e) | 0, g = e + I | 0; + } + } while (0); + + if (2 & (Q = 0 | C[A + I + 4 >> 2])) C[A + I + 4 >> 2] = -2 & Q, C[o + 4 >> 2] = 1 | g, C[o + g >> 2] = g, i = g;else { + if ((0 | C[8685]) == (A + I | 0)) { + if (I = (0 | C[8682]) + g | 0, C[8682] = I, C[8685] = o, C[o + 4 >> 2] = 1 | I, (0 | o) != (0 | C[8684])) return; + return C[8684] = 0, void (C[8681] = 0); + } + + if ((0 | C[8684]) == (A + I | 0)) return I = (0 | C[8681]) + g | 0, C[8681] = I, C[8684] = o, C[o + 4 >> 2] = 1 | I, void (C[o + I >> 2] = I); + i = (-8 & Q) + g | 0; + + do { + if (Q >>> 0 < 256) { + if (B = 0 | C[A + I + 8 >> 2], (0 | (g = 0 | C[A + I + 12 >> 2])) == (0 | B)) { + C[8679] = C[8679] & ~(1 << (Q >>> 3)); + break; + } + + C[B + 12 >> 2] = g, C[g + 8 >> 2] = B; + break; + } + + e = 0 | C[A + I + 24 >> 2], g = 0 | C[A + I + 12 >> 2]; + + do { + if ((0 | g) == (A + I | 0)) { + if (g = 0 | C[A + I + 16 + 4 >> 2]) B = A + I + 16 + 4 | 0;else { + if (!(g = 0 | C[A + I + 16 >> 2])) { + B = 0; + break; + } + + B = A + I + 16 | 0; + } + + for (;;) { + if (Q = 0 | C[(E = g + 20 | 0) >> 2]) g = Q, B = E;else { + if (!(Q = 0 | C[(E = g + 16 | 0) >> 2])) break; + g = Q, B = E; + } + } + + C[B >> 2] = 0, B = g; + } else B = 0 | C[A + I + 8 >> 2], C[B + 12 >> 2] = g, C[g + 8 >> 2] = B, B = g; + } while (0); + + if (0 | e) { + if (g = 0 | C[A + I + 28 >> 2], (0 | C[35020 + (g << 2) >> 2]) == (A + I | 0)) { + if (C[35020 + (g << 2) >> 2] = B, !B) { + C[8680] = C[8680] & ~(1 << g); + break; + } + } else if (C[((0 | C[e + 16 >> 2]) == (A + I | 0) ? e + 16 | 0 : e + 20 | 0) >> 2] = B, !B) break; + + C[B + 24 >> 2] = e, 0 | (g = 0 | C[A + I + 16 >> 2]) && (C[B + 16 >> 2] = g, C[g + 24 >> 2] = B), 0 | (g = 0 | C[A + I + 16 + 4 >> 2]) && (C[B + 20 >> 2] = g, C[g + 24 >> 2] = B); + } + } while (0); + + if (C[o + 4 >> 2] = 1 | i, C[o + i >> 2] = i, (0 | o) == (0 | C[8684])) return void (C[8681] = i); + } + if (Q = i >>> 3, i >>> 0 < 256) return (g = 0 | C[8679]) & 1 << Q ? (g = 34756 + (Q << 1 << 2) + 8 | 0, B = 0 | C[34756 + (Q << 1 << 2) + 8 >> 2]) : (C[8679] = g | 1 << Q, g = 34756 + (Q << 1 << 2) + 8 | 0, B = 34756 + (Q << 1 << 2) | 0), C[g >> 2] = o, C[B + 12 >> 2] = o, C[o + 8 >> 2] = B, void (C[o + 12 >> 2] = 34756 + (Q << 1 << 2)); + if (B = 35020 + ((E = (g = i >>> 8) ? i >>> 0 > 16777215 ? 31 : i >>> (7 + (E = 14 - ((520192 + (g << ((g + 1048320 | 0) >>> 16 & 8)) | 0) >>> 16 & 4 | (g + 1048320 | 0) >>> 16 & 8 | (245760 + (E = g << ((g + 1048320 | 0) >>> 16 & 8) << ((520192 + (g << ((g + 1048320 | 0) >>> 16 & 8)) | 0) >>> 16 & 4)) | 0) >>> 16 & 2) + (E << ((E + 245760 | 0) >>> 16 & 2) >>> 15) | 0) | 0) & 1 | E << 1 : 0) << 2) | 0, C[o + 28 >> 2] = E, C[o + 20 >> 2] = 0, C[o + 16 >> 2] = 0, !((g = 0 | C[8680]) & (Q = 1 << E))) return C[8680] = g | Q, C[B >> 2] = o, C[o + 24 >> 2] = B, C[o + 12 >> 2] = o, void (C[o + 8 >> 2] = o); + g = 0 | C[B >> 2]; + + A: do { + if ((-8 & C[g + 4 >> 2] | 0) != (0 | i)) { + for (E = i << (31 == (0 | E) ? 0 : 25 - (E >>> 1) | 0); B = 0 | C[(Q = g + 16 + (E >>> 31 << 2) | 0) >> 2];) { + if ((-8 & C[B + 4 >> 2] | 0) == (0 | i)) { + g = B; + break A; + } + + E <<= 1, g = B; + } + + return C[Q >> 2] = o, C[o + 24 >> 2] = g, C[o + 12 >> 2] = o, void (C[o + 8 >> 2] = o); + } + } while (0); + + I = 0 | C[(A = g + 8 | 0) >> 2], C[I + 12 >> 2] = o, C[A >> 2] = o, C[o + 8 >> 2] = I, C[o + 12 >> 2] = g, C[o + 24 >> 2] = 0; + } + + function M(A, I, g, Q, E) { + A |= 0, I |= 0, g |= 0; + var i, + e, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0, + m = 0, + L = 0, + x = 0, + K = 0, + X = 0, + j = 0, + T = 0, + q = 0, + V = 0, + z = 0, + W = 0, + O = 0, + Z = 0, + $ = 0, + AA = 0, + IA = 0, + gA = 0, + BA = 0, + CA = 0, + QA = 0, + EA = 0, + iA = 0, + eA = 0, + oA = 0, + cA = 0, + aA = 0, + nA = 0, + rA = 0; + + if (e = y, i = y = y + 63 & -64, y = y + 64 | 0, !(0 == (0 | (Q |= 0)) & 0 == (0 | (E |= 0)))) { + for (L = 0 | C[A >> 2], x = 0 | C[A + 4 >> 2], K = 0 | C[A + 8 >> 2], X = 0 | C[A + 12 >> 2], j = 0 | C[A + 16 >> 2], S = 0 | C[A + 20 >> 2], U = 0 | C[A + 24 >> 2], v = 0 | C[A + 28 >> 2], b = 0 | C[A + 32 >> 2], J = 0 | C[A + 36 >> 2], P = 0 | C[A + 40 >> 2], R = 0 | C[A + 44 >> 2], N = 0 | C[A + 56 >> 2], m = 0 | C[A + 60 >> 2], a = 0, Y = 0 | C[A + 48 >> 2], M = 0 | C[A + 52 >> 2], n = I;;) { + if (d = E >>> 0 < 0 | 0 == (0 | E) & Q >>> 0 < 64) { + c = (I = i) + 64 | 0; + + do { + C[I >> 2] = 0, I = I + 4 | 0; + } while ((0 | I) < (0 | c)); + + I = 0; + + do { + B[i + I >> 0] = 0 | B[n + I >> 0], I = I + 1 | 0; + } while (E >>> 0 > 0 | 0 == (0 | E) & Q >>> 0 > I >>> 0); + + G = i, a = g, n = i; + } else G = g; + + g = 20, I = L, c = x, r = P, t = R, f = Y, w = M, s = N, h = m, D = K, F = X, p = j, u = S, H = U, k = v, l = b, _ = J; + + do { + W = 0 | wB((AA = 0 | wB((nA = 0 | wB(($ = (AA = 0 | wB((aA = I + p | 0) ^ f, 16)) + l | 0) ^ p, 12)) + aA ^ AA, 8)) + $ ^ nA, 7), rA = 0 | wB((V = 0 | wB((eA = 0 | wB((q = (V = 0 | wB((iA = c + u | 0) ^ w, 16)) + _ | 0) ^ u, 12)) + iA ^ V, 8)) + q ^ eA, 7), oA = 0 | wB((z = 0 | wB((BA = 0 | wB((IA = (z = 0 | wB((gA = D + H | 0) ^ s, 16)) + r | 0) ^ H, 12)) + gA ^ z, 8)) + IA ^ BA, 7), CA = 0 | wB((QA = 0 | wB((Z = 0 | wB((T = (QA = 0 | wB((O = F + k | 0) ^ h, 16)) + t | 0) ^ k, 12)) + O ^ QA, 8)) + T ^ Z, 7), u = 0 | wB((r = (h = 0 | wB((I = (EA = 0 | wB((cA = 0 | wB(QA ^ rA + (nA + aA), 16)) + (z + IA) ^ rA, 12)) + (rA + (nA + aA)) | 0) ^ cA, 8)) + (cA + (z + IA)) | 0) ^ EA, 7), H = 0 | wB((t = (f = 0 | wB((c = (IA = 0 | wB((EA = 0 | wB(oA + (eA + iA) ^ AA, 16)) + (QA + T) ^ oA, 12)) + (oA + (eA + iA)) | 0) ^ EA, 8)) + (EA + (QA + T)) | 0) ^ IA, 7), k = 0 | wB((l = (w = 0 | wB((D = (T = 0 | wB((IA = 0 | wB(CA + (BA + gA) ^ V, 16)) + (AA + $) ^ CA, 12)) + (CA + (BA + gA)) | 0) ^ IA, 8)) + (IA + (AA + $)) | 0) ^ T, 7), p = 0 | wB((_ = (s = 0 | wB((F = (T = 0 | wB((z = 0 | wB(Z + O + W ^ z, 16)) + (V + q) ^ W, 12)) + (Z + O + W) | 0) ^ z, 8)) + (z + (V + q)) | 0) ^ T, 7), g = g + -2 | 0; + } while (0 != (0 | g)); + + if (Z = (0 | Vg(n)) ^ I + L, $ = (0 | Vg(n + 4 | 0)) ^ c + x, AA = (0 | Vg(n + 8 | 0)) ^ D + K, IA = (0 | Vg(n + 12 | 0)) ^ F + X, gA = (0 | Vg(n + 16 | 0)) ^ p + j, BA = (0 | Vg(n + 20 | 0)) ^ u + S, CA = (0 | Vg(n + 24 | 0)) ^ H + U, QA = (0 | Vg(n + 28 | 0)) ^ k + v, EA = (0 | Vg(n + 32 | 0)) ^ l + b, iA = (0 | Vg(n + 36 | 0)) ^ _ + J, eA = (0 | Vg(n + 40 | 0)) ^ r + P, oA = (0 | Vg(n + 44 | 0)) ^ t + R, cA = (0 | Vg(n + 48 | 0)) ^ f + Y, aA = (0 | Vg(n + 52 | 0)) ^ w + M, nA = (0 | Vg(n + 56 | 0)) ^ s + N, rA = (0 | Vg(n + 60 | 0)) ^ h + m, c = M + (0 == (0 | (I = Y + 1 | 0)) & 1) | 0, Pg(G, Z), Pg(G + 4 | 0, $), Pg(G + 8 | 0, AA), Pg(G + 12 | 0, IA), Pg(G + 16 | 0, gA), Pg(G + 20 | 0, BA), Pg(G + 24 | 0, CA), Pg(G + 28 | 0, QA), Pg(G + 32 | 0, EA), Pg(G + 36 | 0, iA), Pg(G + 40 | 0, eA), Pg(G + 44 | 0, oA), Pg(G + 48 | 0, cA), Pg(G + 52 | 0, aA), Pg(G + 56 | 0, nA), Pg(G + 60 | 0, rA), E >>> 0 < 0 | 0 == (0 | E) & Q >>> 0 < 65) break; + g = 0 | vg(0 | Q, 0 | E, -64, -1), E = 0 | o(), Q = g, g = G + 64 | 0, Y = I, M = c, n = n + 64 | 0; + } + + if (d && 0 | Q) { + E = 0; + + do { + B[a + E >> 0] = 0 | B[G + E >> 0], E = E + 1 | 0; + } while ((0 | E) != (0 | Q)); + } + + C[A + 48 >> 2] = I, C[A + 52 >> 2] = c; + } + + y = e; + } + + function S(A, I, g, Q) { + I |= 0, g |= 0, Q |= 0; + var E, + i, + e, + c, + a, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0; + if (a = 0 == (0 | B[80 + (A |= 0) >> 0]) ? 16777216 : 0, E = 0 | C[A + 4 >> 2], i = 0 | C[A + 8 >> 2], e = 0 | C[A + 12 >> 2], c = 0 | C[A + 16 >> 2], w = 0 | C[A + 20 >> 2], f = 0 | C[A + 24 >> 2], t = 0 | C[A + 28 >> 2], r = 0 | C[A + 32 >> 2], n = 0 | C[A + 36 >> 2], Q >>> 0 > 0 | 0 == (0 | Q) & g >>> 0 > 15) for (D = 0 | C[A >> 2];;) { + if (k = (67108863 & (0 | Vg(I))) + w | 0, l = ((0 | Vg(I + 3 | 0)) >>> 2 & 67108863) + f | 0, H = ((0 | Vg(I + 6 | 0)) >>> 4 & 67108863) + t | 0, u = ((0 | Vg(I + 9 | 0)) >>> 6) + r | 0, w = ((0 | Vg(I + 12 | 0)) >>> 8 | a) + n | 0, n = 0 | Qg(0 | k, 0, 0 | D, 0), y = 0 | o(), t = 0 | vg(0 | (y = 0 | vg(0 | (t = 0 | vg(0 | (y = 0 | vg(0 | (t = 0 | Qg(0 | l, 0, 5 * c | 0, 0)), 0 | o(), 0 | n, 0 | y)), 0 | (n = 0 | o()), 0 | (t = 0 | Qg(0 | H, 0, 5 * e | 0, 0)), 0 | o())), 0 | (n = 0 | o()), 0 | (y = 0 | Qg(0 | u, 0, 5 * i | 0, 0)), 0 | o())), 0 | (n = 0 | o()), 0 | (t = 0 | Qg(0 | w, 0, 5 * E | 0, 0)), 0 | o()), n = 0 | o(), y = 0 | Qg(0 | k, 0, 0 | E, 0), s = 0 | o(), p = 0 | vg(0 | (s = 0 | vg(0 | (p = 0 | vg(0 | (s = 0 | vg(0 | (p = 0 | Qg(0 | l, 0, 0 | D, 0)), 0 | o(), 0 | y, 0 | s)), 0 | (y = 0 | o()), 0 | (p = 0 | Qg(0 | H, 0, 5 * c | 0, 0)), 0 | o())), 0 | (y = 0 | o()), 0 | (s = 0 | Qg(0 | u, 0, 5 * e | 0, 0)), 0 | o())), 0 | (y = 0 | o()), 0 | (p = 0 | Qg(0 | w, 0, 5 * i | 0, 0)), 0 | o()), y = 0 | o(), s = 0 | Qg(0 | k, 0, 0 | i, 0), h = 0 | o(), F = 0 | vg(0 | (h = 0 | vg(0 | (F = 0 | vg(0 | (h = 0 | vg(0 | (F = 0 | Qg(0 | l, 0, 0 | E, 0)), 0 | o(), 0 | s, 0 | h)), 0 | (s = 0 | o()), 0 | (F = 0 | Qg(0 | H, 0, 0 | D, 0)), 0 | o())), 0 | (s = 0 | o()), 0 | (h = 0 | Qg(0 | u, 0, 5 * c | 0, 0)), 0 | o())), 0 | (s = 0 | o()), 0 | (F = 0 | Qg(0 | w, 0, 5 * e | 0, 0)), 0 | o()), s = 0 | o(), h = 0 | Qg(0 | k, 0, 0 | e, 0), r = 0 | o(), f = 0 | vg(0 | (r = 0 | vg(0 | (f = 0 | vg(0 | (r = 0 | vg(0 | (f = 0 | Qg(0 | l, 0, 0 | i, 0)), 0 | o(), 0 | h, 0 | r)), 0 | (h = 0 | o()), 0 | (f = 0 | Qg(0 | H, 0, 0 | E, 0)), 0 | o())), 0 | (h = 0 | o()), 0 | (r = 0 | Qg(0 | u, 0, 0 | D, 0)), 0 | o())), 0 | (h = 0 | o()), 0 | (f = 0 | Qg(0 | w, 0, 5 * c | 0, 0)), 0 | o()), h = 0 | o(), r = 0 | Qg(0 | k, 0, 0 | c, 0), k = 0 | o(), w = 0 | vg(0 | (u = 0 | vg(0 | (H = 0 | vg(0 | (k = 0 | vg(0 | (l = 0 | Qg(0 | l, 0, 0 | e, 0)), 0 | o(), 0 | r, 0 | k)), 0 | (r = 0 | o()), 0 | (H = 0 | Qg(0 | H, 0, 0 | i, 0)), 0 | o())), 0 | (r = 0 | o()), 0 | (u = 0 | Qg(0 | u, 0, 0 | E, 0)), 0 | o())), 0 | (r = 0 | o()), 0 | (w = 0 | Qg(0 | w, 0, 0 | D, 0)), 0 | o()), r = 0 | o(), n = 0 | yg(0 | t, 0 | n, 26), o(), y = 0 | yg(0 | (n = 0 | vg(0 | p, 0 | y, 0 | n, 0)), 0 | o(), 26), o(), s = 0 | yg(0 | (y = 0 | vg(0 | F, 0 | s, 0 | y, 0)), 0 | o(), 26), o(), h = 0 | yg(0 | (s = 0 | vg(0 | f, 0 | h, 0 | s, 0)), 0 | o(), 26), o(), r = 0 | yg(0 | (h = 0 | vg(0 | w, 0 | r, 0 | h, 0)), 0 | o(), 26), o(), g = 0 | vg(0 | g, 0 | Q, -16, -1), !((Q = 0 | o()) >>> 0 > 0 | 0 == (0 | Q) & g >>> 0 > 15)) { + g = (5 * r | 0) + (67108863 & t) & 67108863, f = (((5 * r | 0) + (67108863 & t) | 0) >>> 26) + (67108863 & n) | 0, t = 67108863 & y, r = 67108863 & s, n = 67108863 & h; + break; + } + + w = (5 * r | 0) + (67108863 & t) & 67108863, f = (((5 * r | 0) + (67108863 & t) | 0) >>> 26) + (67108863 & n) | 0, t = 67108863 & y, r = 67108863 & s, n = 67108863 & h, I = I + 16 | 0; + } else g = w; + C[A + 20 >> 2] = g, C[A + 24 >> 2] = f, C[A + 28 >> 2] = t, C[A + 32 >> 2] = r, C[A + 36 >> 2] = n; + } + + function U(A, I) { + A |= 0; + var g = 0, + Q = 0, + E = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0; + a = 0 | kI(I |= 0), c = 0 | o(), u = 0 | rg(0 | (u = 0 | Bg(0 | B[I + 4 >> 0], 0 | B[I + 5 >> 0], 0 | B[I + 6 >> 0])), 0 | o(), 6), H = 0 | o(), e = 0 | rg(0 | (e = 0 | Bg(0 | B[I + 7 >> 0], 0 | B[I + 8 >> 0], 0 | B[I + 9 >> 0])), 0 | o(), 5), i = 0 | o(), F = 0 | rg(0 | (F = 0 | Bg(0 | B[I + 10 >> 0], 0 | B[I + 11 >> 0], 0 | B[I + 12 >> 0])), 0 | o(), 3), p = 0 | o(), E = 0 | rg(0 | (E = 0 | Bg(0 | B[I + 13 >> 0], 0 | B[I + 14 >> 0], 0 | B[I + 15 >> 0])), 0 | o(), 2), Q = 0 | o(), h = 0 | kI(I + 16 | 0), D = 0 | o(), n = 0 | rg(0 | (n = 0 | Bg(0 | B[I + 20 >> 0], 0 | B[I + 21 >> 0], 0 | B[I + 22 >> 0])), 0 | o(), 7), g = 0 | o(), r = 0 | rg(0 | (r = 0 | Bg(0 | B[I + 23 >> 0], 0 | B[I + 24 >> 0], 0 | B[I + 25 >> 0])), 0 | o(), 5), s = 0 | o(), t = 0 | rg(0 | (t = 0 | Bg(0 | B[I + 26 >> 0], 0 | B[I + 27 >> 0], 0 | B[I + 28 >> 0])), 0 | o(), 4), f = 0 | o(), w = 0 | rg(0 | (w = 0 | Bg(0 | B[I + 29 >> 0], 0 | B[I + 30 >> 0], 0 | B[I + 31 >> 0])), 0 | o(), 2), o(), k = 0 | Ug(0, 0, 0 | (k = 0 | yg(0 | (y = 0 | vg(33554428 & w | 0, 0, 16777216, 0)), 0 | o(), 25)), 0 | o()), o(), c = 0 | vg(19 & k | 0, 0, 0 | a, 0 | c), a = 0 | o(), y = 0 | Ug(33554428 & w | 0, 0, 33554432 & y | 0, 0), w = 0 | o(), i = 0 | vg(0 | (I = 0 | ig(0 | (k = 0 | vg(0 | u, 0 | H, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | e, 0 | i), e = 0 | o(), k = 0 | Ug(0 | u, 0 | H, -33554432 & k | 0, 0), H = 0 | o(), Q = 0 | vg(0 | (I = 0 | ig(0 | (u = 0 | vg(0 | F, 0 | p, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | E, 0 | Q), E = 0 | o(), u = 0 | Ug(0 | F, 0 | p, -33554432 & u | 0, 0), p = 0 | o(), I = 0 | vg(0 | n, 0 | g, 0 | (I = 0 | ig(0 | (F = 0 | vg(0 | h, 0 | D, 16777216, 0)), 0 | o(), 25)), 0 | o()), g = 0 | o(), F = 0 | Ug(0 | h, 0 | D, -33554432 & F | 0, 0), D = 0 | o(), f = 0 | vg(0 | (n = 0 | ig(0 | (h = 0 | vg(0 | r, 0 | s, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | t, 0 | f), t = 0 | o(), h = 0 | Ug(0 | r, 0 | s, -33554432 & h | 0, 0), s = 0 | o(), n = 0 | vg(0 | k, 0 | H, 0 | (n = 0 | yg(0 | (r = 0 | vg(0 | c, 0 | a, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), r = 0 | Ug(0 | c, 0 | a, -67108864 & r | 0, 0), o(), c = 0 | vg(0 | u, 0 | p, 0 | (c = 0 | yg(0 | (a = 0 | vg(0 | i, 0 | e, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), a = 0 | Ug(0 | i, 0 | e, -67108864 & a | 0, 0), o(), i = 0 | vg(0 | F, 0 | D, 0 | (i = 0 | yg(0 | (e = 0 | vg(0 | Q, 0 | E, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), e = 0 | Ug(0 | Q, 0 | E, -67108864 & e | 0, 0), o(), Q = 0 | vg(0 | h, 0 | s, 0 | (Q = 0 | yg(0 | (E = 0 | vg(0 | I, 0 | g, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), E = 0 | Ug(0 | I, 0 | g, -67108864 & E | 0, 0), o(), I = 0 | vg(0 | y, 0 | w, 0 | (I = 0 | yg(0 | (g = 0 | vg(0 | f, 0 | t, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), g = 0 | Ug(0 | f, 0 | t, -67108864 & g | 0, 0), o(), C[A >> 2] = r, C[A + 4 >> 2] = n, C[A + 8 >> 2] = a, C[A + 12 >> 2] = c, C[A + 16 >> 2] = e, C[A + 20 >> 2] = i, C[A + 24 >> 2] = E, C[A + 28 >> 2] = Q, C[A + 32 >> 2] = g, C[A + 36 >> 2] = I; + } + + function v(A, I) { + A |= 0; + var g = 0, + B = 0, + Q = 0, + E = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0; + c = 0 | C[(I |= 0) >> 2], p = 0 | C[I + 4 >> 2], i = 0 | C[I + 8 >> 2], D = 0 | C[I + 12 >> 2], Q = 0 | C[I + 16 >> 2], s = 0 | C[I + 20 >> 2], g = 0 | C[I + 24 >> 2], n = 0 | C[I + 28 >> 2], r = 0 | C[I + 32 >> 2], H = 0 | C[I + 36 >> 2], c = 0 | Qg(0 | c, ((0 | c) < 0) << 31 >> 31 | 0, 121666, 0), e = 0 | o(), p = 0 | Qg(0 | p, ((0 | p) < 0) << 31 >> 31 | 0, 121666, 0), u = 0 | o(), i = 0 | Qg(0 | i, ((0 | i) < 0) << 31 >> 31 | 0, 121666, 0), E = 0 | o(), D = 0 | Qg(0 | D, ((0 | D) < 0) << 31 >> 31 | 0, 121666, 0), F = 0 | o(), Q = 0 | Qg(0 | Q, ((0 | Q) < 0) << 31 >> 31 | 0, 121666, 0), B = 0 | o(), s = 0 | Qg(0 | s, ((0 | s) < 0) << 31 >> 31 | 0, 121666, 0), h = 0 | o(), g = 0 | Qg(0 | g, ((0 | g) < 0) << 31 >> 31 | 0, 121666, 0), I = 0 | o(), n = 0 | Qg(0 | n, ((0 | n) < 0) << 31 >> 31 | 0, 121666, 0), y = 0 | o(), r = 0 | Qg(0 | r, ((0 | r) < 0) << 31 >> 31 | 0, 121666, 0), t = 0 | o(), e = 0 | vg(0 | (a = 0 | Qg(0 | (a = 0 | ig(0 | (w = 0 | vg(0 | (H = 0 | Qg(0 | H, ((0 | H) < 0) << 31 >> 31 | 0, 121666, 0)), 0 | (f = 0 | o()), 16777216, 0)), 0 | o(), 25)), 0 | o(), 19, 0)), 0 | o(), 0 | c, 0 | e), c = 0 | o(), w = 0 | Ug(0 | H, 0 | f, -33554432 & w | 0, 0), f = 0 | o(), E = 0 | vg(0 | (a = 0 | ig(0 | (H = 0 | vg(0 | p, 0 | u, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | i, 0 | E), i = 0 | o(), H = 0 | Ug(0 | p, 0 | u, -33554432 & H | 0, 0), u = 0 | o(), B = 0 | vg(0 | (a = 0 | ig(0 | (p = 0 | vg(0 | D, 0 | F, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | Q, 0 | B), Q = 0 | o(), p = 0 | Ug(0 | D, 0 | F, -33554432 & p | 0, 0), F = 0 | o(), I = 0 | vg(0 | (a = 0 | ig(0 | (D = 0 | vg(0 | s, 0 | h, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | g, 0 | I), g = 0 | o(), D = 0 | Ug(0 | s, 0 | h, -33554432 & D | 0, 0), h = 0 | o(), t = 0 | vg(0 | (a = 0 | ig(0 | (s = 0 | vg(0 | n, 0 | y, 16777216, 0)), 0 | o(), 25)), 0 | o(), 0 | r, 0 | t), r = 0 | o(), s = 0 | Ug(0 | n, 0 | y, -33554432 & s | 0, 0), y = 0 | o(), a = 0 | vg(0 | H, 0 | u, 0 | (a = 0 | yg(0 | (n = 0 | vg(0 | e, 0 | c, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), n = 0 | Ug(0 | e, 0 | c, -67108864 & n | 0, 0), o(), e = 0 | vg(0 | p, 0 | F, 0 | (e = 0 | yg(0 | (c = 0 | vg(0 | E, 0 | i, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), c = 0 | Ug(0 | E, 0 | i, -67108864 & c | 0, 0), o(), E = 0 | vg(0 | D, 0 | h, 0 | (E = 0 | yg(0 | (i = 0 | vg(0 | B, 0 | Q, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), i = 0 | Ug(0 | B, 0 | Q, -67108864 & i | 0, 0), o(), B = 0 | vg(0 | s, 0 | y, 0 | (B = 0 | yg(0 | (Q = 0 | vg(0 | I, 0 | g, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), Q = 0 | Ug(0 | I, 0 | g, -67108864 & Q | 0, 0), o(), I = 0 | vg(0 | w, 0 | f, 0 | (I = 0 | yg(0 | (g = 0 | vg(0 | t, 0 | r, 33554432, 0)), 0 | o(), 26)), 0 | o()), o(), g = 0 | Ug(0 | t, 0 | r, -67108864 & g | 0, 0), o(), C[A >> 2] = n, C[A + 4 >> 2] = a, C[A + 8 >> 2] = c, C[A + 12 >> 2] = e, C[A + 16 >> 2] = i, C[A + 20 >> 2] = E, C[A + 24 >> 2] = Q, C[A + 28 >> 2] = B, C[A + 32 >> 2] = g, C[A + 36 >> 2] = I; + } + + function b(A, I, g) { + A |= 0, I |= 0; + var C, + E, + i = 0, + e = 0, + o = 0; + + if (E = y, C = y = y + 63 & -64, y = y + 64 | 0, (g |= 0) << 24 >> 24 && (255 & g) <= 64) { + if (0 | function (A, I) { + return 1 & (0 != (0 | (A |= 0)) | 0 != (0 | (I |= 0))) | 0; + }(Q[A + 80 >> 0] | Q[A + 80 + 1 >> 0] << 8 | Q[A + 80 + 2 >> 0] << 16 | Q[A + 80 + 3 >> 0] << 24, Q[A + 80 + 4 >> 0] | Q[A + 80 + 4 + 1 >> 0] << 8 | Q[A + 80 + 4 + 2 >> 0] << 16 | Q[A + 80 + 4 + 3 >> 0] << 24)) i = -1;else { + i = Q[A + 352 >> 0] | Q[A + 352 + 1 >> 0] << 8 | Q[A + 352 + 2 >> 0] << 16 | Q[A + 352 + 3 >> 0] << 24; + + do { + if (i >>> 0 > 128) { + if (aA(A, 128, 0), s(A, A + 96 | 0), i = (Q[A + 352 >> 0] | Q[A + 352 + 1 >> 0] << 8 | Q[A + 352 + 2 >> 0] << 16 | Q[A + 352 + 3 >> 0] << 24) - 128 | 0, B[A + 352 >> 0] = i, B[A + 352 + 1 >> 0] = i >> 8, B[A + 352 + 2 >> 0] = i >> 16, B[A + 352 + 3 >> 0] = i >> 24, i >>> 0 < 129) { + BA(A + 96 | 0, A + 224 | 0, 0 | i), e = Q[A + 352 >> 0] | Q[A + 352 + 1 >> 0] << 8 | Q[A + 352 + 2 >> 0] << 16 | Q[A + 352 + 3 >> 0] << 24, o = A + 96 | 0; + break; + } + + c(33456, 33488, 306, 33533); + } else e = i, o = A + 96 | 0; + } while (0); + + aA(A, e, 0), function (A) { + 0 | B[356 + (A |= 0) >> 0] && function (A) { + B[88 + (A |= 0) >> 0] = -1, B[A + 88 + 1 >> 0] = -1, B[A + 88 + 2 >> 0] = -1, B[A + 88 + 3 >> 0] = -1, B[A + 88 + 4 >> 0] = -1, B[A + 88 + 4 + 1 >> 0] = -1, B[A + 88 + 4 + 2 >> 0] = -1, B[A + 88 + 4 + 3 >> 0] = -1; + }(A), B[A + 80 >> 0] = -1, B[A + 80 + 1 >> 0] = -1, B[A + 80 + 2 >> 0] = -1, B[A + 80 + 3 >> 0] = -1, B[A + 80 + 4 >> 0] = -1, B[A + 80 + 4 + 1 >> 0] = -1, B[A + 80 + 4 + 2 >> 0] = -1, B[A + 80 + 4 + 3 >> 0] = -1; + }(A), YA(A + 96 + (i = Q[A + 352 >> 0] | Q[A + 352 + 1 >> 0] << 8 | Q[A + 352 + 2 >> 0] << 16 | Q[A + 352 + 3 >> 0] << 24) | 0, 0, 256 - i | 0), s(A, o), LI(C, Q[A >> 0] | Q[A + 1 >> 0] << 8 | Q[A + 2 >> 0] << 16 | Q[A + 3 >> 0] << 24, Q[A + 4 >> 0] | Q[A + 4 + 1 >> 0] << 8 | Q[A + 4 + 2 >> 0] << 16 | Q[A + 4 + 3 >> 0] << 24), LI(C + 8 | 0, Q[A + 8 >> 0] | Q[A + 8 + 1 >> 0] << 8 | Q[A + 8 + 2 >> 0] << 16 | Q[A + 8 + 3 >> 0] << 24, Q[A + 8 + 4 >> 0] | Q[A + 8 + 4 + 1 >> 0] << 8 | Q[A + 8 + 4 + 2 >> 0] << 16 | Q[A + 8 + 4 + 3 >> 0] << 24), LI(C + 16 | 0, Q[A + 16 >> 0] | Q[A + 16 + 1 >> 0] << 8 | Q[A + 16 + 2 >> 0] << 16 | Q[A + 16 + 3 >> 0] << 24, Q[A + 16 + 4 >> 0] | Q[A + 16 + 4 + 1 >> 0] << 8 | Q[A + 16 + 4 + 2 >> 0] << 16 | Q[A + 16 + 4 + 3 >> 0] << 24), LI(C + 24 | 0, Q[A + 24 >> 0] | Q[A + 24 + 1 >> 0] << 8 | Q[A + 24 + 2 >> 0] << 16 | Q[A + 24 + 3 >> 0] << 24, Q[A + 24 + 4 >> 0] | Q[A + 24 + 4 + 1 >> 0] << 8 | Q[A + 24 + 4 + 2 >> 0] << 16 | Q[A + 24 + 4 + 3 >> 0] << 24), LI(C + 32 | 0, Q[A + 32 >> 0] | Q[A + 32 + 1 >> 0] << 8 | Q[A + 32 + 2 >> 0] << 16 | Q[A + 32 + 3 >> 0] << 24, Q[A + 32 + 4 >> 0] | Q[A + 32 + 4 + 1 >> 0] << 8 | Q[A + 32 + 4 + 2 >> 0] << 16 | Q[A + 32 + 4 + 3 >> 0] << 24), LI(C + 40 | 0, Q[A + 40 >> 0] | Q[A + 40 + 1 >> 0] << 8 | Q[A + 40 + 2 >> 0] << 16 | Q[A + 40 + 3 >> 0] << 24, Q[A + 40 + 4 >> 0] | Q[A + 40 + 4 + 1 >> 0] << 8 | Q[A + 40 + 4 + 2 >> 0] << 16 | Q[A + 40 + 4 + 3 >> 0] << 24), LI(C + 48 | 0, Q[A + 48 >> 0] | Q[A + 48 + 1 >> 0] << 8 | Q[A + 48 + 2 >> 0] << 16 | Q[A + 48 + 3 >> 0] << 24, Q[A + 48 + 4 >> 0] | Q[A + 48 + 4 + 1 >> 0] << 8 | Q[A + 48 + 4 + 2 >> 0] << 16 | Q[A + 48 + 4 + 3 >> 0] << 24), LI(C + 56 | 0, Q[A + 56 >> 0] | Q[A + 56 + 1 >> 0] << 8 | Q[A + 56 + 2 >> 0] << 16 | Q[A + 56 + 3 >> 0] << 24, Q[A + 56 + 4 >> 0] | Q[A + 56 + 4 + 1 >> 0] << 8 | Q[A + 56 + 4 + 2 >> 0] << 16 | Q[A + 56 + 4 + 3 >> 0] << 24), BA(0 | I, 0 | C, 255 & g | 0), MI(A, 64), MI(o, 256), i = 0; + } + return y = E, 0 | i; + } + + return SB(), 0; + } + + function J(A, I, g, Q) { + A |= 0, I |= 0, g |= 0; + var E, + i, + e = 0, + o = 0, + c = 0, + a = 0, + n = 0, + r = 0; + + switch (i = y, E = y = y + 63 & -64, y = y + 16 | 0, 0 | (Q |= 0)) { + case 2: + if (I >>> 0 < 13) Q = -31;else { + e = 33688, o = (Q = A) + 13 | 0; + + do { + B[Q >> 0] = 0 | B[e >> 0], Q = Q + 1 | 0, e = e + 1 | 0; + } while ((0 | Q) < (0 | o)); + + A = A + 12 | 0, o = I + -12 | 0, e = 6; + } + break; + + case 1: + if (I >>> 0 < 12) Q = -31;else { + e = 33701, o = (Q = A) + 12 | 0; + + do { + B[Q >> 0] = 0 | B[e >> 0], Q = Q + 1 | 0, e = e + 1 | 0; + } while ((0 | Q) < (0 | o)); + + A = A + 11 | 0, o = I + -11 | 0, e = 6; + } + break; + + default: + Q = -31; + } + + do { + if (6 == (0 | e) && !(Q = 0 | oA(g))) { + if (cI(E, 19), e = A + (Q = 0 | ZA(E)) | 0, a = o - Q | 0, o >>> 0 <= Q >>> 0) { + Q = -31; + break; + } + + if (BA(0 | A, 0 | E, Q + 1 | 0), a >>> 0 >= 4) { + if (B[e >> 0] = 36, B[e + 1 >> 0] = 109, B[e + 2 >> 0] = 61, B[e + 3 >> 0] = 0, cI(E, 0 | C[g + 44 >> 2]), o = e + 3 + (A = 0 | ZA(E)) | 0, (a + -3 | 0) >>> 0 <= A >>> 0) { + Q = -31; + break; + } + + if (BA(e + 3 | 0, 0 | E, A + 1 | 0), (a + -3 - A | 0) >>> 0 >= 4) { + if (B[o >> 0] = 44, B[o + 1 >> 0] = 116, B[o + 2 >> 0] = 61, B[o + 3 >> 0] = 0, cI(E, 0 | C[g + 40 >> 2]), I = o + 3 + (Q = 0 | ZA(E)) | 0, c = a + -3 - A - 3 - Q | 0, (a + -3 - A - 3 | 0) >>> 0 <= Q >>> 0) { + Q = -31; + break; + } + + if (BA(o + 3 | 0, 0 | E, Q + 1 | 0), c >>> 0 >= 4) { + if (B[I >> 0] = 44, B[I + 1 >> 0] = 112, B[I + 2 >> 0] = 61, B[I + 3 >> 0] = 0, cI(E, 0 | C[g + 48 >> 2]), (c + -3 | 0) >>> 0 <= (e = 0 | ZA(E)) >>> 0) { + Q = -31; + break; + } + + if (BA(I + 3 | 0, 0 | E, e + 1 | 0), Q = I + 3 + e + 1 | 0, (c + -3 - e | 0) >>> 0 >= 2 && (B[I + 3 + e >> 0] = 36, B[I + 3 + e + 1 >> 0] = 0, q(Q, c + -3 - e - 1 | 0, 0 | C[g + 16 >> 2], 0 | C[g + 20 >> 2], 3), (r = c + -3 - e - 1 - (n = 0 | ZA(Q)) | 0) >>> 0 >= 2)) return B[Q + n >> 0] = 36, B[Q + n + 1 >> 0] = 0, q(Q + n + 1 | 0, r + -1 | 0, 0 | C[g >> 2], 0 | C[g + 4 >> 2], 3), y = i, 0; + Q = -31; + } else Q = -31; + } else Q = -31; + } else Q = -31; + } + } while (0); + + return y = i, 0 | Q; + } + + function P(A, I, g, Q) { + A |= 0, I |= 0, g |= 0, Q |= 0; + var E, + i, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + s = 0; + i = y, E = y = y + 63 & -64, y = y + 704 | 0; + + A: do { + if (!(0 == (0 | g) & 0 == (0 | Q))) { + if (r = 0 | yg(0 | (s = 0 | C[A + 72 >> 2]), 0 | (f = 0 | C[A + 72 + 4 >> 2]), 3), o(), t = 0 | rg(0 | g, 0 | Q, 3), w = 0 | o(), a = 0 | yg(0 | g, 0 | Q, 61), n = 0 | o(), f = 0 | vg(0 | s, 0 | f, 0 | t, 0 | w), s = 0 | o(), C[A + 72 >> 2] = f, C[A + 72 + 4 >> 2] = s, e = 0 | C[A + 64 >> 2], c = 0 | C[A + 64 + 4 >> 2], s >>> 0 < w >>> 0 | (0 | s) == (0 | w) & f >>> 0 < t >>> 0 && (e = 0 | vg(0 | e, 0 | c, 1, 0), c = 0 | o(), C[A + 64 >> 2] = e, C[A + 64 + 4 >> 2] = c), e = 0 | vg(0 | e, 0 | c, 0 | a, 0 | n), n = 0 | o(), C[A + 64 >> 2] = e, C[A + 64 + 4 >> 2] = n, n = 0 | Ug(128, 0, 127 & r | 0, 0), (e = 0 | o()) >>> 0 > Q >>> 0 | (0 | e) == (0 | Q) & n >>> 0 > g >>> 0) for (e = 0, c = 0;;) { + if (w = 0 | B[I + e >> 0], s = 0 | vg(0 | e, 0 | c, 127 & r | 0, 0), o(), B[A + 80 + s >> 0] = w, e = 0 | vg(0 | e, 0 | c, 1, 0), !((c = 0 | o()) >>> 0 < Q >>> 0 | (0 | c) == (0 | Q) & e >>> 0 < g >>> 0)) break A; + } + + if (!(0 == (0 | n) & 0 == (0 | e))) { + c = 0, a = 0; + + do { + w = 0 | B[I + c >> 0], s = 0 | vg(0 | c, 0 | a, 127 & r | 0, 0), o(), B[A + 80 + s >> 0] = w, c = 0 | vg(0 | c, 0 | a, 1, 0), a = 0 | o(); + } while (a >>> 0 < e >>> 0 | (0 | a) == (0 | e) & c >>> 0 < n >>> 0); + } + + if (D(A, A + 80 | 0, E, E + 640 | 0), e = 0 | Ug(0 | g, 0 | Q, 0 | n, 0 | e), (a = 0 | o()) >>> 0 > 0 | 0 == (0 | a) & e >>> 0 > 127) { + c = I + n | 0; + + do { + D(A, c, E, E + 640 | 0), c = c + 128 | 0, e = 0 | vg(0 | e, 0 | a, -128, -1), a = 0 | o(); + } while (a >>> 0 > 0 | 0 == (0 | a) & e >>> 0 > 127); + } else c = I + n | 0; + + if (!(0 == (0 | (n = 127 & e)) & !0)) { + e = 0, a = 0; + + do { + B[A + 80 + e >> 0] = 0 | B[c + e >> 0], e = 0 | vg(0 | e, 0 | a, 1, 0), a = 0 | o(); + } while (a >>> 0 < 0 | 0 == (0 | a) & e >>> 0 < n >>> 0); + } + + MI(E, 704); + } + } while (0); + + y = i; + } + + function R(A, I, g) { + A |= 0, I |= 0; + var B = 0, + C = 0, + Q = 0, + E = 0, + i = 0, + e = 0, + o = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0; + C = 0 | Vg(g |= 0), Q = 0 | Vg(g + 4 | 0), E = 0 | Vg(g + 8 | 0), i = 0 | Vg(g + 12 | 0), e = 0 | Vg(g + 16 | 0), o = 0 | Vg(g + 20 | 0), r = 0 | Vg(g + 24 | 0), t = 0 | Vg(g + 28 | 0), f = 0 | Vg(I), w = 0 | Vg(I + 4 | 0), y = 0 | Vg(I + 8 | 0), c = 0, a = 1634760805, n = 857760878, g = 0 | Vg(I + 12 | 0), I = 2036477234, B = 1797285236; + + do { + p = 0 | wB((l = 0 | wB((R = 0 | wB((k = (l = 0 | wB(f ^ (P = C + a | 0), 16)) + e | 0) ^ C, 12)) + P ^ l, 8)) + k ^ R, 7), N = 0 | wB((D = 0 | wB((v = 0 | wB((h = (D = 0 | wB(w ^ (U = Q + n | 0), 16)) + o | 0) ^ Q, 12)) + U ^ D, 8)) + h ^ v, 7), b = 0 | wB((F = 0 | wB((d = 0 | wB((_ = (F = 0 | wB(y ^ (G = E + I | 0), 16)) + r | 0) ^ E, 12)) + G ^ F, 8)) + _ ^ d, 7), Y = 0 | wB((M = 0 | wB((H = 0 | wB((s = (M = 0 | wB(g ^ (u = i + B | 0), 16)) + t | 0) ^ i, 12)) + u ^ M, 8)) + s ^ H, 7), Q = 0 | wB((r = (g = 0 | wB((a = (S = 0 | wB((J = 0 | wB(M ^ N + (R + P), 16)) + (F + _) ^ N, 12)) + (N + (R + P)) | 0) ^ J, 8)) + (J + (F + _)) | 0) ^ S, 7), E = 0 | wB((t = (f = 0 | wB((n = (_ = 0 | wB((S = 0 | wB(b + (v + U) ^ l, 16)) + (M + s) ^ b, 12)) + (b + (v + U)) | 0) ^ S, 8)) + (S + (M + s)) | 0) ^ _, 7), i = 0 | wB((e = (w = 0 | wB((I = (s = 0 | wB((_ = 0 | wB(Y + (d + G) ^ D, 16)) + (l + k) ^ Y, 12)) + (Y + (d + G)) | 0) ^ _, 8)) + (_ + (l + k)) | 0) ^ s, 7), C = 0 | wB((o = (y = 0 | wB((B = (s = 0 | wB((F = 0 | wB(H + u + p ^ F, 16)) + (D + h) ^ p, 12)) + (H + u + p) | 0) ^ F, 8)) + (F + (D + h)) | 0) ^ s, 7), c = c + 1 | 0; + } while (10 != (0 | c)); + + Pg(A, a), Pg(A + 4 | 0, n), Pg(A + 8 | 0, I), Pg(A + 12 | 0, B), Pg(A + 16 | 0, f), Pg(A + 20 | 0, w), Pg(A + 24 | 0, y), Pg(A + 28 | 0, g); + } + + function N(A, I, g, C) { + A |= 0, g |= 0, C |= 0; + var Q, + E, + i = 0, + e = 0; + + for (Q = y, E = y = y + 63 & -64, y = y + 2272 | 0, yA(E + 1536 | 0, I |= 0), yA(E + 1280 | 0, C), eg(E, g), og(E + 2112 | 0, g), Eg(E + 1792 | 0, E + 2112 | 0), gI(E + 2112 | 0, E + 1792 | 0, E), Eg(E + 1952 | 0, E + 2112 | 0), eg(E + 160 | 0, E + 1952 | 0), gI(E + 2112 | 0, E + 1792 | 0, E + 160 | 0), Eg(E + 1952 | 0, E + 2112 | 0), eg(E + 320 | 0, E + 1952 | 0), gI(E + 2112 | 0, E + 1792 | 0, E + 320 | 0), Eg(E + 1952 | 0, E + 2112 | 0), eg(E + 480 | 0, E + 1952 | 0), gI(E + 2112 | 0, E + 1792 | 0, E + 480 | 0), Eg(E + 1952 | 0, E + 2112 | 0), eg(E + 640 | 0, E + 1952 | 0), gI(E + 2112 | 0, E + 1792 | 0, E + 640 | 0), Eg(E + 1952 | 0, E + 2112 | 0), eg(E + 800 | 0, E + 1952 | 0), gI(E + 2112 | 0, E + 1792 | 0, E + 800 | 0), Eg(E + 1952 | 0, E + 2112 | 0), eg(E + 960 | 0, E + 1952 | 0), gI(E + 2112 | 0, E + 1792 | 0, E + 960 | 0), Eg(E + 1952 | 0, E + 2112 | 0), eg(E + 1120 | 0, E + 1952 | 0), function (A) { + Kg(A |= 0), Sg(A + 40 | 0), Sg(A + 80 | 0); + }(A), g = 255;;) { + if (0 | B[E + 1536 + g >> 0]) { + i = g, e = 5; + break; + } + + if (0 | B[E + 1280 + g >> 0]) { + i = g, e = 5; + break; + } + + if (!g) break; + g = g + -1 | 0; + } + + if (5 == (0 | e) && (0 | i) > -1) for (; aI(E + 2112 | 0, A), (g = 0 | B[E + 1536 + i >> 0]) << 24 >> 24 <= 0 ? g << 24 >> 24 < 0 && (Eg(E + 1952 | 0, E + 2112 | 0), II(E + 2112 | 0, E + 1952 | 0, E + (160 * (((g << 24 >> 24) / -2 | 0) << 24 >> 24) | 0) | 0)) : (Eg(E + 1952 | 0, E + 2112 | 0), gI(E + 2112 | 0, E + 1952 | 0, E + (160 * ((255 & g) >>> 1 & 255) | 0) | 0)), (g = 0 | B[E + 1280 + i >> 0]) << 24 >> 24 <= 0 ? g << 24 >> 24 < 0 && (Eg(E + 1952 | 0, E + 2112 | 0), BI(E + 2112 | 0, E + 1952 | 0, 160 + (120 * (((g << 24 >> 24) / -2 | 0) << 24 >> 24) | 0) | 0)) : (Eg(E + 1952 | 0, E + 2112 | 0), CI(E + 2112 | 0, E + 1952 | 0, 160 + (120 * ((255 & g) >>> 1 & 255) | 0) | 0)), Hg(A, E + 2112 | 0), (0 | i) > 0;) { + i = i + -1 | 0; + } + y = Q; + } + + function m(A, I, g, Q, E, i, e, o) { + A |= 0, I |= 0, g |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, o |= 0; + var c, + a, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + s = 0, + h = 0; + + if (a = y, c = y = y + 63 & -64, y = y + 16 | 0, C[c >> 2] = 0, EB(o), Q) { + f = 0, r = 0, t = 0, n = 0; + + A: for (;;) { + for (s = n; n = 0 | B[g + s >> 0], 255 == (0 | (w = 4 & o ? 0 | VA(n) : 0 | zA(n)));) { + if (!E) { + w = 18; + break A; + } + + if (!(0 | qg(E, n))) { + w = 19; + break A; + } + + if (!((n = s + 1 | 0) >>> 0 < Q >>> 0)) { + w = 17; + break A; + } + + s = n; + } + + if (f = w + (f << 6) | 0, (n = r + 6 | 0) >>> 0 > 7) { + if (r = r + -2 | 0, t >>> 0 >= I >>> 0) { + w = 13; + break; + } + + B[A + t >> 0] = f >>> r, t = t + 1 | 0; + } else r = n; + + if ((n = s + 1 | 0) >>> 0 >= Q >>> 0) { + w = 16; + break; + } + } + + 13 == (0 | w) ? (C[c >> 2] = s, C[8678] = 68, n = -1) : 16 == (0 | w) ? (C[c >> 2] = n, n = 0) : 17 == (0 | w) ? (C[c >> 2] = n, n = 0) : 18 == (0 | w) ? (C[c >> 2] = s, n = 0) : 19 == (0 | w) && (C[c >> 2] = s, n = 0), r >>> 0 > 4 ? (t = 0, n = -1) : w = 21; + } else f = 0, r = 0, t = 0, n = 0, w = 21; + + do { + if (21 == (0 | w)) if ((1 << r) - 1 & f) t = 0, n = -1;else if (n | 2 & o || (n = 0 | mA(g, Q, c, E, r >>> 1)), n) t = 0;else if (0 != (0 | E) && (h = 0 | C[c >> 2]) >>> 0 < Q >>> 0) { + for (n = h;;) { + if (!(0 | qg(E, 0 | B[g + n >> 0]))) { + w = 31; + break; + } + + if ((n = n + 1 | 0) >>> 0 >= Q >>> 0) { + w = 30; + break; + } + } + + if (30 == (0 | w)) { + C[c >> 2] = n, n = 0; + break; + } + + if (31 == (0 | w)) { + C[c >> 2] = n, n = 0; + break; + } + } else n = 0; + } while (0); + + return r = 0 | C[c >> 2], e ? C[e >> 2] = g + r : (0 | r) != (0 | Q) && (C[8678] = 28, n = -1), 0 | i && (C[i >> 2] = t), y = a, 0 | n; + } + + function L(A, I, g) { + I |= 0, g |= 0; + var Q, + E, + i, + e = 0, + o = 0, + c = 0; + + switch (i = y, E = y = y + 63 & -64, y = y + 16 | 0, c = 0 | C[20 + (A |= 0) >> 2], Q = 0 | C[A + 4 >> 2], C[A + 20 >> 2] = 0, C[A + 4 >> 2] = 0, 0 | g) { + case 2: + 0 | oI(I, 33653, 9) ? I = -32 : (I = I + 9 | 0, o = 4); + break; + + case 1: + 0 | oI(I, 33663, 8) ? I = -32 : (I = I + 8 | 0, o = 4); + break; + + default: + I = -26; + } + + do { + if (4 == (0 | o)) if (0 == (0 | oI(I, 33672, 3)) && 0 != (0 | (e = 0 | qA(I + 3 | 0, E + 4 | 0)))) { + if (19 == (0 | C[E + 4 >> 2])) { + if (0 | oI(e, 33676, 3)) I = -32;else { + if (!(I = 0 | qA(e + 3 | 0, E + 4 | 0))) { + I = -32; + break; + } + + if (C[A + 44 >> 2] = C[E + 4 >> 2], 0 | oI(I, 33680, 3)) I = -32;else { + if (!(I = 0 | qA(I + 3 | 0, E + 4 | 0))) { + I = -32; + break; + } + + if (C[A + 40 >> 2] = C[E + 4 >> 2], 0 | oI(I, 33684, 3)) I = -32;else { + if (!(I = 0 | qA(I + 3 | 0, E + 4 | 0))) { + I = -32; + break; + } + + if (o = 0 | C[E + 4 >> 2], C[A + 48 >> 2] = o, C[A + 52 >> 2] = o, I = (o = 36 == (0 | B[I >> 0])) ? I + 1 | 0 : I, o) { + if (C[E + 4 >> 2] = c, 0 | m(o = 0 | C[A + 16 >> 2], c, I, 0 | ZA(I), 0, E + 4 | 0, E, 3)) { + I = -32; + break; + } + + if (C[A + 20 >> 2] = C[E + 4 >> 2], I = 0 | C[E >> 2], I = (c = 36 == (0 | B[I >> 0])) ? I + 1 | 0 : I, c) { + if (C[E + 4 >> 2] = Q, 0 | m(c = 0 | C[A >> 2], Q, I, 0 | ZA(I), 0, E + 4 | 0, E, 3)) { + I = -32; + break; + } + + C[A + 4 >> 2] = C[E + 4 >> 2], g = 0 | C[E >> 2], (I = 0 | oA(A)) || (I = 0 == (0 | B[g >> 0]) ? 0 : -32); + } else I = -32; + } else I = -32; + } + } + } + } else I = -26; + } else I = -32; + } while (0); + + return y = i, 0 | I; + } + + function x(A, I, g) { + A |= 0, I |= 0; + var B = 0, + C = 0, + Q = 0, + E = 0, + i = 0, + e = 0, + o = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0; + Q = 0 | Vg(g |= 0), n = 0 | Vg(g + 4 | 0), r = 0 | Vg(g + 8 | 0), t = 0 | Vg(g + 12 | 0), i = 0 | Vg(g + 16 | 0), e = 0 | Vg(g + 20 | 0), o = 0 | Vg(g + 24 | 0), c = 0 | Vg(g + 28 | 0), w = 0 | Vg(I), y = 0 | Vg(I + 4 | 0), s = 0 | Vg(I + 8 | 0), B = 20, C = 1634760805, E = 2036477234, a = 1797285236, f = 857760878, g = 0 | Vg(I + 12 | 0); + + do { + Y = (0 | wB((F = (0 | wB((H = (0 | wB((_ = (0 | wB(e + C | 0, 7)) ^ t) + C | 0, 9)) ^ s) + _ | 0, 13)) ^ e) + H | 0, 18)) ^ C, l = (0 | wB((U = (0 | wB((D = (0 | wB((u = (0 | wB(f + Q | 0, 7)) ^ g) + f | 0, 9)) ^ o) + u | 0, 13)) ^ Q) + D | 0, 18)) ^ f, p = (0 | wB((d = (0 | wB((S = (0 | wB((h = (0 | wB(E + w | 0, 7)) ^ c) + E | 0, 9)) ^ n) + h | 0, 13)) ^ w) + S | 0, 18)) ^ E, I = (0 | wB((k = (0 | wB((G = (0 | wB((M = (0 | wB(a + i | 0, 7)) ^ r) + a | 0, 9)) ^ y) + M | 0, 13)) ^ i) + G | 0, 18)) ^ a, C = (0 | wB((r = (0 | wB((n = (0 | wB((Q = (0 | wB(M + Y | 0, 7)) ^ U) + Y | 0, 9)) ^ S) + Q | 0, 13)) ^ M) + n | 0, 18)) ^ Y, f = (0 | wB((t = (0 | wB((y = (0 | wB((w = (0 | wB(l + _ | 0, 7)) ^ d) + l | 0, 9)) ^ G) + w | 0, 13)) ^ _) + y | 0, 18)) ^ l, E = (0 | wB((g = (0 | wB((s = (0 | wB((i = (0 | wB(p + u | 0, 7)) ^ k) + p | 0, 9)) ^ H) + i | 0, 13)) ^ u) + s | 0, 18)) ^ p, a = (0 | wB((c = (0 | wB((o = (0 | wB((e = (0 | wB(I + h | 0, 7)) ^ F) + I | 0, 9)) ^ D) + e | 0, 13)) ^ h) + o | 0, 18)) ^ I, B = B + -2 | 0; + } while (0 != (0 | B)); + + Pg(A, C), Pg(A + 4 | 0, f), Pg(A + 8 | 0, E), Pg(A + 12 | 0, a), Pg(A + 16 | 0, w), Pg(A + 20 | 0, y), Pg(A + 24 | 0, s), Pg(A + 28 | 0, g); + } + + function K(A, I, g, Q) { + I |= 0, g |= 0, Q |= 0; + var E = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0; + if (0 == (0 | (i = 0 | C[56 + (A |= 0) >> 2])) & 0 == (0 | (E = 0 | C[A + 56 + 4 >> 2]))) r = 7;else { + if (c = 0 | Ug(16, 0, 0 | i, 0 | E), !(0 == (0 | (n = (a = 0 | o()) >>> 0 > Q >>> 0 | (0 | a) == (0 | Q) & c >>> 0 > g >>> 0 ? g : c)) & 0 == (0 | (a = a >>> 0 > Q >>> 0 | (0 | a) == (0 | Q) & c >>> 0 > g >>> 0 ? Q : a)))) { + c = 0, e = 0; + + do { + t = 0 | B[I + c >> 0], i = 0 | vg(0 | i, 0 | E, 0 | c, 0 | e), o(), B[A + 64 + i >> 0] = t, c = 0 | vg(0 | c, 0 | e, 1, 0), e = 0 | o(), i = 0 | C[A + 56 >> 2], E = 0 | C[A + 56 + 4 >> 2]; + } while (e >>> 0 < a >>> 0 | (0 | e) == (0 | a) & c >>> 0 < n >>> 0); + } + + t = 0 | vg(0 | i, 0 | E, 0 | n, 0 | a), c = 0 | o(), C[A + 56 >> 2] = t, C[A + 56 + 4 >> 2] = c, c >>> 0 < 0 | 0 == (0 | c) & t >>> 0 < 16 || (g = 0 | Ug(0 | g, 0 | Q, 0 | n, 0 | a), Q = 0 | o(), S(A, A + 64 | 0, 16, 0), C[A + 56 >> 2] = 0, C[A + 56 + 4 >> 2] = 0, I = I + n | 0, r = 7); + } + + if (7 == (0 | r) && (E = -16 & g, Q >>> 0 > 0 | 0 == (0 | Q) & g >>> 0 > 15 ? (i = 0 | Ug(0 | g, 0 | Q, 0 | E, 0 | Q), t = 0 | o(), S(A, I, E, Q), Q = t, I = I + E | 0) : i = g, !(0 == (0 | i) & 0 == (0 | Q)))) { + E = 0, g = 0; + + do { + r = 0 | B[I + E >> 0], t = 0 | vg(0 | C[A + 56 >> 2], 0 | C[A + 56 + 4 >> 2], 0 | E, 0 | g), o(), B[A + 64 + t >> 0] = r, E = 0 | vg(0 | E, 0 | g, 1, 0), g = 0 | o(); + } while (g >>> 0 < Q >>> 0 | (0 | g) == (0 | Q) & E >>> 0 < i >>> 0); + + r = 0 | vg(0 | C[A + 56 >> 2], 0 | C[A + 56 + 4 >> 2], 0 | i, 0 | Q), t = 0 | o(), C[A + 56 >> 2] = r, C[A + 56 + 4 >> 2] = t; + } + } + + function X(A, I) { + A |= 0, I |= 0; + var g = 0, + i = 0, + e = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0; + + A: do { + if (0 | A) { + do { + if (2 == (0 | C[A + 36 >> 2])) { + if (0 == (0 | (g = 0 | C[I >> 2])) && (0 | Q[I + 8 >> 0]) <= 1) { + i = 6; + break; + } + + t = 0 | C[A + 4 >> 2], r = 0; + } else i = 6; + } while (0); + + if (6 == (0 | i) && (QA(A, I, t = 0 | C[A + 4 >> 2]), g = 0 | C[I >> 2], r = 1), g = 0 == (0 | g) & (e = 0 | B[I + 8 >> 0]) << 24 >> 24 == 0 ? 2 : 0, i = 0 | C[A + 24 >> 2], a = 0 | E(i, 0 | C[I + 4 >> 2]), n = 0 | C[A + 20 >> 2], e = a + g + (0 | E(n, 255 & e)) | 0, g >>> 0 < n >>> 0) for (c = i, n = e, i = (0 == (0 | (e >>> 0) % (i >>> 0)) ? i + -1 | 0 : -1) + e | 0;;) { + if (a = 1 == (0 | (n >>> 0) % (c >>> 0)) ? n + -1 | 0 : i, i = r ? t + (g << 3) | 0 : (0 | C[4 + (0 | C[A >> 2]) >> 2]) + (a << 10) | 0, y = 0 | C[(c = i) >> 2], c = 0 | Ag(0 | C[c + 4 >> 2], 0, 0 | C[A + 28 >> 2], 0), e = 0 | o(), f = 0 | C[I >> 2], i = 0 | B[I + 8 >> 0], w = 0 | C[I + 4 >> 2], c = 0 == (0 | f) & i << 24 >> 24 == 0 ? w : c, C[I + 12 >> 2] = g, e = 0 | DA(A, f, i, g, y, 1 & ((0 | c) == (0 | w) ? 0 == (0 | (0 == (0 | f) & i << 24 >> 24 == 0 ? 0 : e)) : 0)), e = (i = 0 | C[4 + (0 | C[A >> 2]) >> 2]) + ((0 | E(0 | C[A + 24 >> 2], c)) << 10) + (e << 10) | 0, c = i + (n << 10) | 0, f ? H(i + (a << 10) | 0, e, c) : k(i + (a << 10) | 0, e, c), (g = g + 1 | 0) >>> 0 >= (0 | C[A + 20 >> 2]) >>> 0) break A; + c = 0 | C[A + 24 >> 2], n = n + 1 | 0, i = a + 1 | 0; + } + } + } while (0); + } + + function j(A, I, g) { + var B, Q; + g |= 0, B = y, Q = y = y + 63 & -64, y = y + 400 | 0, 0 == (0 | (A |= 0)) | 0 == (0 | (I |= 0)) || (HI(Q, 0, 0, 64), Pg(Q + 384 | 0, 0 | C[I + 48 >> 2]), Xg(Q, Q + 384 | 0, 4, 0), Pg(Q + 384 | 0, 0 | C[I + 4 >> 2]), Xg(Q, Q + 384 | 0, 4, 0), Pg(Q + 384 | 0, 0 | C[I + 44 >> 2]), Xg(Q, Q + 384 | 0, 4, 0), Pg(Q + 384 | 0, 0 | C[I + 40 >> 2]), Xg(Q, Q + 384 | 0, 4, 0), Pg(Q + 384 | 0, 19), Xg(Q, Q + 384 | 0, 4, 0), Pg(Q + 384 | 0, g), Xg(Q, Q + 384 | 0, 4, 0), Pg(Q + 384 | 0, 0 | C[I + 12 >> 2]), Xg(Q, Q + 384 | 0, 4, 0), 0 | (g = 0 | C[I + 8 >> 2]) && (Xg(Q, g, 0 | C[I + 12 >> 2], 0), 1 & C[I + 56 >> 2] | 0) && (MI(0 | C[I + 8 >> 2], 0 | C[I + 12 >> 2]), C[I + 12 >> 2] = 0), Pg(Q + 384 | 0, 0 | C[I + 20 >> 2]), Xg(Q, Q + 384 | 0, 4, 0), 0 | (g = 0 | C[I + 16 >> 2]) && Xg(Q, g, 0 | C[I + 20 >> 2], 0), Pg(Q + 384 | 0, 0 | C[I + 28 >> 2]), Xg(Q, Q + 384 | 0, 4, 0), 0 | (g = 0 | C[I + 24 >> 2]) && (Xg(Q, g, 0 | C[I + 28 >> 2], 0), 2 & C[I + 56 >> 2] | 0) && (MI(0 | C[I + 24 >> 2], 0 | C[I + 28 >> 2]), C[I + 28 >> 2] = 0), Pg(Q + 384 | 0, 0 | C[I + 36 >> 2]), Xg(Q, Q + 384 | 0, 4, 0), 0 | (g = 0 | C[I + 32 >> 2]) && Xg(Q, g, 0 | C[I + 36 >> 2], 0), fg(Q, A, 64)), y = B; + } + + function T(A, I, g, Q) { + A |= 0, I |= 0, g |= 0, Q |= 0; + var E, + i, + e = 0, + o = 0, + c = 0; + if (E = y, i = y = y + 63 & -64, y = y + 528 | 0, C[i + 512 >> 2] = 0, Pg(i + 512 | 0, I), I >>> 0 < 65) (0 | HI(i, 0, 0, I)) >= 0 && (Xg(i, i + 512 | 0, 4, 0), Xg(i, g, Q, 0), fg(i, A, I));else A: do { + if ((0 | HI(i, 0, 0, 64)) >= 0 && (Xg(i, i + 512 | 0, 4, 0), Xg(i, g, Q, 0), (0 | fg(i, i + 448 | 0, 64)) >= 0)) { + o = i + 448 | 0, c = (e = A) + 32 | 0; + + do { + B[e >> 0] = 0 | B[o >> 0], e = e + 1 | 0, o = o + 1 | 0; + } while ((0 | e) < (0 | c)); + + o = i + 448 | 0, c = 64 + (e = i + 384 | 0) | 0; + + do { + C[e >> 2] = C[o >> 2], e = e + 4 | 0, o = o + 4 | 0; + } while ((0 | e) < (0 | c)); + + if ((I + -32 | 0) >>> 0 > 64) { + Q = A + 32 | 0, g = I + -32 | 0; + + do { + if ((0 | TI(i + 448 | 0, 64, i + 384 | 0, 64, 0, 0, 0)) < 0) break A; + o = i + 448 | 0, c = (e = Q) + 32 | 0; + + do { + B[e >> 0] = 0 | B[o >> 0], e = e + 1 | 0, o = o + 1 | 0; + } while ((0 | e) < (0 | c)); + + g = g + -32 | 0, Q = Q + 32 | 0, o = i + 448 | 0, c = 64 + (e = i + 384 | 0) | 0; + + do { + C[e >> 2] = C[o >> 2], e = e + 4 | 0, o = o + 4 | 0; + } while ((0 | e) < (0 | c)); + } while (g >>> 0 > 64); + } else Q = A + 32 | 0, g = I + -32 | 0; + + (0 | TI(i + 448 | 0, g, i + 384 | 0, 64, 0, 0, 0)) >= 0 && BA(0 | Q, i + 448 | 0, 0 | g); + } + } while (0); + MI(i, 384), y = E; + } + + function q(A, I, g, C, i) { + A |= 0, I |= 0, g |= 0, C |= 0; + var e = 0, + o = 0, + a = 0, + n = 0, + r = 0, + t = 0; + EB(i |= 0), o = (0 | E((C >>> 0) / 3 | 0, -3)) + C | 0, e = ((C >>> 0) / 3 | 0) << 2; + + do { + if (o) { + if (2 & i) { + e = (2 | e) + (o >>> 1) | 0; + break; + } + + e = e + 4 | 0; + break; + } + } while (0); + + if (e >>> 0 >= I >>> 0 && SB(), 4 & i) { + if (0 | C) { + n = 0, i = 0, o = 0, r = 0; + + do { + if (t = r, r = r + 1 | 0, n = n << 8 | 0 | Q[g + t >> 0], (i = i + 8 | 0) >>> 0 > 5) for (;;) { + if (t = 255 & (0 | XI(n >>> (i = i + -6 | 0) & 63)), a = o + 1 | 0, B[A + o >> 0] = t, !(i >>> 0 > 5)) { + o = a; + break; + } + + o = a; + } + } while ((0 | r) != (0 | C)); + + i && (t = 255 & (0 | XI(n << 6 - i & 63)), B[A + o >> 0] = t, o = o + 1 | 0); + } else o = 0; + } else if (0 | C) { + n = 0, i = 0, o = 0, r = 0; + + do { + if (a = r, r = r + 1 | 0, n = n << 8 | 0 | Q[g + a >> 0], (i = i + 8 | 0) >>> 0 > 5) for (;;) { + if (t = 255 & (0 | jI(n >>> (i = i + -6 | 0) & 63)), a = o + 1 | 0, B[A + o >> 0] = t, !(i >>> 0 > 5)) { + o = a; + break; + } + + o = a; + } + } while ((0 | r) != (0 | C)); + + i && (t = 255 & (0 | jI(n << 6 - i & 63)), B[A + o >> 0] = t, o = o + 1 | 0); + } else o = 0; + return e >>> 0 < o >>> 0 && c(34564, 34583, 230, 34599), e >>> 0 > o >>> 0 ? YA(A + o | 0, 61, e - o | 0) : e = o, YA(A + e | 0, 0, ((t = e + 1 | 0) >>> 0 < I >>> 0 ? I : t) - e | 0), 0 | A; + } + + function V(A, I, g, E, i, e, c, a) { + A |= 0, I |= 0, i |= 0, e |= 0, c |= 0, a |= 0; + var n, + r, + t = 0, + f = 0; + + if (n = y, r = y = y + 63 & -64, y = y + 112 | 0, !(0 == (0 | (g |= 0)) & 0 == (0 | (E |= 0)))) { + t = (f = r) + 32 | 0; + + do { + B[f >> 0] = 0 | B[a >> 0], f = f + 1 | 0, a = a + 1 | 0; + } while ((0 | f) < (0 | t)); + + a = Q[i + 4 >> 0] | Q[i + 4 + 1 >> 0] << 8 | Q[i + 4 + 2 >> 0] << 16 | Q[i + 4 + 3 >> 0] << 24, C[r + 96 >> 2] = Q[i >> 0] | Q[i + 1 >> 0] << 8 | Q[i + 2 >> 0] << 16 | Q[i + 3 >> 0] << 24, C[r + 96 + 4 >> 2] = a, a = 8; + + do { + B[r + 96 + a >> 0] = e, e = 0 | yg(0 | e, 0 | c, 8), c = 0 | o(), a = a + 1 | 0; + } while (16 != (0 | a)); + + if (E >>> 0 > 0 | 0 == (0 | E) & g >>> 0 > 63) for (e = E;;) { + iB(r + 32 | 0, r + 96 | 0, r), c = 0; + + do { + B[A + c >> 0] = B[r + 32 + c >> 0] ^ B[I + c >> 0], c = c + 1 | 0; + } while (64 != (0 | c)); + + for (a = 8, c = 1; c = c + (0 | Q[(E = r + 96 + a | 0) >> 0]) | 0, B[E >> 0] = c, 16 != (0 | (a = a + 1 | 0));) { + c >>>= 8; + } + + if (c = 0 | vg(0 | g, 0 | e, -64, -1), A = A + 64 | 0, I = I + 64 | 0, !((a = 0 | o()) >>> 0 > 0 | 0 == (0 | a) & c >>> 0 > 63)) { + e = c; + break; + } + + g = c, e = a; + } else e = g, a = E; + + if (!(0 == (0 | e) & 0 == (0 | a)) && (iB(r + 32 | 0, r + 96 | 0, r), 0 | e)) { + c = 0; + + do { + B[A + c >> 0] = B[r + 32 + c >> 0] ^ B[I + c >> 0], c = c + 1 | 0; + } while ((0 | c) != (0 | e)); + } + + MI(r + 32 | 0, 64), MI(r, 32); + } + + y = n; + } + + function z(A, I) { + I |= 0; + var g, + Q, + E, + i, + e, + c, + a = 0, + n = 0, + r = 0, + t = 0; + 0 == (0 | (n = 0 | C[56 + (A |= 0) >> 2])) & 0 == (0 | (a = 0 | C[A + 56 + 4 >> 2])) || (B[A + 64 + n >> 0] = 1, a = 0 | vg(0 | n, 0 | a, 1, 0), (r = 0 | o()) >>> 0 < 0 | 0 == (0 | r) & a >>> 0 < 16 && YA(A + 64 + a | 0, 0, 14 - n + 1 | 0), B[A + 80 >> 0] = 1, S(A, A + 64 | 0, 16, 0)), n = 0 | C[A + 24 >> 2], t = (E = (-67108864 | (Q = ((t = ((r = (0 | C[A + 28 >> 2]) + (n >>> 26) | 0) >>> 26) + (0 | C[A + 32 >> 2]) | 0) >>> 26) + (0 | C[A + 36 >> 2]) | 0)) + ((((((i = ((c = (5 * (Q >>> 26) | 0) + (0 | C[A + 20 >> 2]) | 0) >>> 26) + (67108863 & n) + ((5 + (67108863 & c) | 0) >>> 26) | 0) >>> 26) + (67108863 & r) | 0) >>> 26) + (67108863 & t) | 0) >>> 26) | 0) >> 31 & 67108863 & t | (e = (E >>> 31) - 1 & 67108863) & (((i >>> 26) + (67108863 & r) | 0) >>> 26) + (67108863 & t), g = 0 | vg(E >> 31 & 67108863 & c | e & 5 + (67108863 & c) | (E >> 31 & (c >>> 26) + (67108863 & n) | e & i) << 26 | 0, 0, 0 | C[A + 40 >> 2], 0), a = 0 | o(), a = 0 | vg(0 | (n = 0 | vg((E >> 31 & (c >>> 26) + (67108863 & n) | e & i) >>> 6 | (E >> 31 & 67108863 & r | e & (i >>> 26) + (67108863 & r)) << 20 | 0, 0, 0 | C[A + 44 >> 2], 0)), 0 | o(), 0 | a, 0), n = 0 | o(), n = 0 | vg(0 | (r = 0 | vg((E >> 31 & 67108863 & r | e & (i >>> 26) + (67108863 & r)) >>> 12 | t << 14 | 0, 0, 0 | C[A + 48 >> 2], 0)), 0 | o(), 0 | n, 0), r = 0 | o(), r = 0 | vg(0 | (t = 0 | vg(((E >>> 31) - 1 & E | E >> 31 & Q) << 8 | t >>> 18 | 0, 0, 0 | C[A + 52 >> 2], 0)), 0 | o(), 0 | r, 0), o(), Pg(I, g), Pg(I + 4 | 0, a), Pg(I + 8 | 0, n), Pg(I + 12 | 0, r), MI(A, 88); + } + + function W(A, I) { + var g, B; + A |= 0, g = y, B = y = y + 63 & -64, y = y + 192 | 0, _(B + 144 | 0, I |= 0), _(B + 96 | 0, B + 144 | 0), _(B + 96 | 0, B + 96 | 0), u(B + 96 | 0, I, B + 96 | 0), u(B + 144 | 0, B + 144 | 0, B + 96 | 0), _(B + 48 | 0, B + 144 | 0), u(B + 96 | 0, B + 96 | 0, B + 48 | 0), _(B + 48 | 0, B + 96 | 0), I = 1; + + do { + _(B + 48 | 0, B + 48 | 0), I = I + 1 | 0; + } while (5 != (0 | I)); + + u(B + 96 | 0, B + 48 | 0, B + 96 | 0), _(B + 48 | 0, B + 96 | 0), I = 1; + + do { + _(B + 48 | 0, B + 48 | 0), I = I + 1 | 0; + } while (10 != (0 | I)); + + u(B + 48 | 0, B + 48 | 0, B + 96 | 0), _(B, B + 48 | 0), I = 1; + + do { + _(B, B), I = I + 1 | 0; + } while (20 != (0 | I)); + + u(B + 48 | 0, B, B + 48 | 0), _(B + 48 | 0, B + 48 | 0), I = 1; + + do { + _(B + 48 | 0, B + 48 | 0), I = I + 1 | 0; + } while (10 != (0 | I)); + + u(B + 96 | 0, B + 48 | 0, B + 96 | 0), _(B + 48 | 0, B + 96 | 0), I = 1; + + do { + _(B + 48 | 0, B + 48 | 0), I = I + 1 | 0; + } while (50 != (0 | I)); + + u(B + 48 | 0, B + 48 | 0, B + 96 | 0), _(B, B + 48 | 0), I = 1; + + do { + _(B, B), I = I + 1 | 0; + } while (100 != (0 | I)); + + u(B + 48 | 0, B, B + 48 | 0), _(B + 48 | 0, B + 48 | 0), I = 1; + + do { + _(B + 48 | 0, B + 48 | 0), I = I + 1 | 0; + } while (50 != (0 | I)); + + u(B + 96 | 0, B + 48 | 0, B + 96 | 0), _(B + 96 | 0, B + 96 | 0), I = 1; + + do { + _(B + 96 | 0, B + 96 | 0), I = I + 1 | 0; + } while (5 != (0 | I)); + + u(A, B + 96 | 0, B + 144 | 0), y = g; + } + + function O(A, I) { + A |= 0; + var g, + C, + Q = 0; + + for (g = y, C = y = y + 63 & -64, y = y + 1760 | 0, eg(C, I |= 0), og(C + 1600 | 0, I), Eg(C + 1280 | 0, C + 1600 | 0), gI(C + 1600 | 0, C + 1280 | 0, C), Eg(C + 1440 | 0, C + 1600 | 0), eg(C + 160 | 0, C + 1440 | 0), gI(C + 1600 | 0, C + 1280 | 0, C + 160 | 0), Eg(C + 1440 | 0, C + 1600 | 0), eg(C + 320 | 0, C + 1440 | 0), gI(C + 1600 | 0, C + 1280 | 0, C + 320 | 0), Eg(C + 1440 | 0, C + 1600 | 0), eg(C + 480 | 0, C + 1440 | 0), gI(C + 1600 | 0, C + 1280 | 0, C + 480 | 0), Eg(C + 1440 | 0, C + 1600 | 0), eg(C + 640 | 0, C + 1440 | 0), gI(C + 1600 | 0, C + 1280 | 0, C + 640 | 0), Eg(C + 1440 | 0, C + 1600 | 0), eg(C + 800 | 0, C + 1440 | 0), gI(C + 1600 | 0, C + 1280 | 0, C + 800 | 0), Eg(C + 1440 | 0, C + 1600 | 0), eg(C + 960 | 0, C + 1440 | 0), gI(C + 1600 | 0, C + 1280 | 0, C + 960 | 0), Eg(C + 1440 | 0, C + 1600 | 0), eg(C + 1120 | 0, C + 1440 | 0), Og(A), Q = 252; og(C + 1600 | 0, A), (I = 0 | B[31840 + Q >> 0]) << 24 >> 24 <= 0 ? I << 24 >> 24 < 0 && (Eg(C + 1440 | 0, C + 1600 | 0), II(C + 1600 | 0, C + 1440 | 0, C + (160 * (((I << 24 >> 24) / -2 | 0) << 24 >> 24) | 0) | 0)) : (Eg(C + 1440 | 0, C + 1600 | 0), gI(C + 1600 | 0, C + 1440 | 0, C + (160 * ((255 & I) >>> 1 & 255) | 0) | 0)), Eg(A, C + 1600 | 0), Q;) { + Q = Q + -1 | 0; + } + + y = g; + } + + function Z(A, I, g, B, Q, E, i) { + A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0; + var e, + c, + a = 0, + n = 0; + return e = y, c = y = y + 63 & -64, y = y + 352 | 0, x(c, E |= 0, i |= 0), A >>> 0 > g >>> 0 && 0 < Q >>> 0 | 0 == (0 | Q) & (A - g | 0) >>> 0 < B >>> 0 ? n = 5 : g >>> 0 > A >>> 0 && 0 < Q >>> 0 | 0 == (0 | Q) & (g - A | 0) >>> 0 < B >>> 0 ? n = 5 : a = g, 5 == (0 | n) && (YI(0 | A, 0 | g, 0 | B), a = A), C[c + 32 >> 2] = 0, C[c + 32 + 4 >> 2] = 0, C[c + 32 + 8 >> 2] = 0, C[c + 32 + 12 >> 2] = 0, C[c + 32 + 16 >> 2] = 0, C[c + 32 + 20 >> 2] = 0, C[c + 32 + 24 >> 2] = 0, C[c + 32 + 28 >> 2] = 0, 0 == (0 | (i = Q >>> 0 > 0 | 0 == (0 | Q) & B >>> 0 > 32 ? 32 : B)) & 0 == (0 | (g = Q >>> 0 > 0 | 0 == (0 | Q) & B >>> 0 > 32 ? 0 : Q)) || BA(c + 32 + 32 | 0, 0 | a, -2 - (n = ~Q >>> 0 > 4294967295 | -1 == (0 | ~Q) & ~B >>> 0 > 4294967263 ? ~B : -33) + 1 | 0), Yg(c + 32 | 0, c + 32 | 0, n = 0 | vg(0 | i, 0 | g, 32, 0), 0 | o(), E + 16 | 0, c), gB(c + 96 | 0, c + 32 | 0), 0 == (0 | i) & 0 == (0 | g) || BA(0 | A, c + 32 + 32 | 0, -2 - (n = ~Q >>> 0 > 4294967295 | -1 == (0 | ~Q) & ~B >>> 0 > 4294967263 ? ~B : -33) + 1 | 0), MI(c + 32 | 0, 64), Q >>> 0 > 0 | 0 == (0 | Q) & B >>> 0 > 32 && _g(A + i | 0, a + i | 0, n = 0 | Ug(0 | B, 0 | Q, 0 | i, 0 | g), 0 | o(), E + 16 | 0, c), MI(c, 32), bg(c + 96 | 0, A, B, Q), IB(c + 96 | 0, I), MI(c + 96 | 0, 256), y = e, 0; + } + + function $(A, I, g, C) { + A |= 0, I |= 0, g |= 0, C |= 0; + var E = 0, + i = 0, + e = 0, + c = 0; + + A: do { + if (!(0 == (0 | g) & 0 == (0 | C))) { + for (E = Q[A + 352 >> 0] | Q[A + 352 + 1 >> 0] << 8 | Q[A + 352 + 2 >> 0] << 16 | Q[A + 352 + 3 >> 0] << 24, e = I; I = A + 96 + E | 0, C >>> 0 > 0 | 0 == (0 | C) & g >>> 0 > (c = 256 - E | 0) >>> 0;) { + BA(0 | I, 0 | e, 0 | c), I = (Q[A + 352 >> 0] | Q[A + 352 + 1 >> 0] << 8 | Q[A + 352 + 2 >> 0] << 16 | Q[A + 352 + 3 >> 0] << 24) + c | 0, B[A + 352 >> 0] = I, B[A + 352 + 1 >> 0] = I >> 8, B[A + 352 + 2 >> 0] = I >> 16, B[A + 352 + 3 >> 0] = I >> 24, aA(A, 128, 0), s(A, A + 96 | 0), E = A + 224 | 0, i = 128 + (I = A + 96 | 0) | 0; + + do { + B[I >> 0] = 0 | B[E >> 0], I = I + 1 | 0, E = E + 1 | 0; + } while ((0 | I) < (0 | i)); + + if (E = (Q[A + 352 >> 0] | Q[A + 352 + 1 >> 0] << 8 | Q[A + 352 + 2 >> 0] << 16 | Q[A + 352 + 3 >> 0] << 24) - 128 | 0, B[A + 352 >> 0] = E, B[A + 352 + 1 >> 0] = E >> 8, B[A + 352 + 2 >> 0] = E >> 16, B[A + 352 + 3 >> 0] = E >> 24, 0 == (0 | (g = 0 | Ug(0 | g, 0 | C, 0 | c, 0))) & 0 == (0 | (C = 0 | o()))) break A; + e = e + c | 0; + } + + BA(0 | I, 0 | e, 0 | g), c = (Q[A + 352 >> 0] | Q[A + 352 + 1 >> 0] << 8 | Q[A + 352 + 2 >> 0] << 16 | Q[A + 352 + 3 >> 0] << 24) + g | 0, B[A + 352 >> 0] = c, B[A + 352 + 1 >> 0] = c >> 8, B[A + 352 + 2 >> 0] = c >> 16, B[A + 352 + 3 >> 0] = c >> 24; + } + } while (0); + } + + function AA(A, I, g) { + var B, Q, E, i, e, o, c, a, n, r, t, f, w, y, s, h, D, F, p, u; + I |= 0, g |= 0, u = 0 | C[(A |= 0) >> 2], F = 0 | C[A + 4 >> 2], h = 0 | C[A + 8 >> 2], y = 0 | C[A + 12 >> 2], f = 0 | C[A + 16 >> 2], r = 0 | C[A + 20 >> 2], a = 0 | C[A + 24 >> 2], o = 0 | C[A + 28 >> 2], i = 0 | C[A + 32 >> 2], Q = 0 | C[A + 36 >> 2], p = 0 | C[I >> 2], D = 0 | C[I + 4 >> 2], s = 0 | C[I + 8 >> 2], w = 0 | C[I + 12 >> 2], t = 0 | C[I + 16 >> 2], n = 0 | C[I + 20 >> 2], c = 0 | C[I + 24 >> 2], e = 0 | C[I + 28 >> 2], E = 0 | C[I + 32 >> 2], B = 0 | C[I + 36 >> 2], C[A >> 2] = (p ^ u) & 0 - g ^ u, C[A + 4 >> 2] = (D ^ F) & 0 - g ^ F, C[A + 8 >> 2] = (s ^ h) & 0 - g ^ h, C[A + 12 >> 2] = (w ^ y) & 0 - g ^ y, C[A + 16 >> 2] = (t ^ f) & 0 - g ^ f, C[A + 20 >> 2] = (n ^ r) & 0 - g ^ r, C[A + 24 >> 2] = (c ^ a) & 0 - g ^ a, C[A + 28 >> 2] = (e ^ o) & 0 - g ^ o, C[A + 32 >> 2] = (E ^ i) & 0 - g ^ i, C[A + 36 >> 2] = (B ^ Q) & 0 - g ^ Q, C[I >> 2] = (p ^ u) & 0 - g ^ p, C[I + 4 >> 2] = (D ^ F) & 0 - g ^ D, C[I + 8 >> 2] = (s ^ h) & 0 - g ^ s, C[I + 12 >> 2] = (w ^ y) & 0 - g ^ w, C[I + 16 >> 2] = (t ^ f) & 0 - g ^ t, C[I + 20 >> 2] = (n ^ r) & 0 - g ^ n, C[I + 24 >> 2] = (c ^ a) & 0 - g ^ c, C[I + 28 >> 2] = (e ^ o) & 0 - g ^ e, C[I + 32 >> 2] = (E ^ i) & 0 - g ^ E, C[I + 36 >> 2] = (B ^ Q) & 0 - g ^ B; + } + + function IA(A, I, g, E, i) { + A |= 0, E |= 0, i |= 0; + var e, + c, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0; + + if (e = y, c = y = y + 63 & -64, y = y + 112 | 0, !(0 == (0 | (I |= 0)) & 0 == (0 | (g |= 0)))) { + a = (n = c) + 32 | 0; + + do { + B[n >> 0] = 0 | B[i >> 0], n = n + 1 | 0, i = i + 1 | 0; + } while ((0 | n) < (0 | a)); + + if (n = Q[E + 4 >> 0] | Q[E + 4 + 1 >> 0] << 8 | Q[E + 4 + 2 >> 0] << 16 | Q[E + 4 + 3 >> 0] << 24, C[c + 96 >> 2] = Q[E >> 0] | Q[E + 1 >> 0] << 8 | Q[E + 2 >> 0] << 16 | Q[E + 3 >> 0] << 24, C[c + 96 + 4 >> 2] = n, C[c + 96 + 8 >> 2] = 0, C[c + 96 + 8 + 4 >> 2] = 0, g >>> 0 > 0 | 0 == (0 | g) & I >>> 0 > 63) { + do { + for (iB(A, c + 96 | 0, c), a = 8, i = 1; i = i + (0 | Q[(n = c + 96 + a | 0) >> 0]) | 0, B[n >> 0] = i, 16 != (0 | (a = a + 1 | 0));) { + i >>>= 8; + } + + I = 0 | vg(0 | I, 0 | g, -64, -1), g = 0 | o(), A = A + 64 | 0; + } while (g >>> 0 > 0 | 0 == (0 | g) & I >>> 0 > 63); + + 0 == (0 | I) & 0 == (0 | g) || (t = A, f = I, r = 8); + } else t = A, f = I, r = 8; + + if (8 == (0 | r) && (iB(c + 32 | 0, c + 96 | 0, c), 0 | f)) { + i = 0; + + do { + B[t + i >> 0] = 0 | B[c + 32 + i >> 0], i = i + 1 | 0; + } while ((0 | i) != (0 | f)); + } + + MI(c + 32 | 0, 64), MI(c, 32); + } + + y = e; + } + + function gA(A, I, g, B, C, Q, E) { + A |= 0, I |= 0, g |= 0, B |= 0, C |= 0; + var i, + e, + c = 0; + return e = y, i = y = y + 63 & -64, y = y + 96 | 0, x(i, Q |= 0, E |= 0), function (A, I, g) { + IA(A |= 0, 32, 0, I |= 0, g |= 0); + }(i + 32 | 0, Q + 16 | 0, i), 0 | function (A, I, g, B, C) { + return 0 | function (A, I, g, B, C) { + var Q, E; + return A |= 0, Q = y, E = y = y + 63 & -64, y = y + 16 | 0, function (A, I, g, B, C) { + var Q, E; + A |= 0, I |= 0, g |= 0, B |= 0, Q = y, E = y = y + 63 & -64, y = y + 96 | 0, MA(E, C |= 0), K(E, I, g, B), z(E, A), y = Q; + }(E, I |= 0, g |= 0, B |= 0, C |= 0), C = 0 | tB(A, E), y = Q, 0 | C; + }(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0); + }(g, I, B, C, i + 32 | 0) ? (MI(i, 32), I = -1) : A ? (I >>> 0 >= A >>> 0 && 0 < C >>> 0 | 0 == (0 | C) & (I - A | 0) >>> 0 < B >>> 0 ? c = 8 : A >>> 0 >= I >>> 0 && 0 < C >>> 0 | 0 == (0 | C) & (A - I | 0) >>> 0 < B >>> 0 ? c = 8 : g = I, 8 == (0 | c) && (YI(0 | A, 0 | I, 0 | B), g = A), 0 == (0 | (I = C >>> 0 > 0 | 0 == (0 | C) & B >>> 0 > 32 ? 32 : B)) & 0 == (0 | (E = C >>> 0 > 0 | 0 == (0 | C) & B >>> 0 > 32 ? 0 : C)) ? Yg(i + 32 | 0, i + 32 | 0, 32, 0, Q + 16 | 0, i) : (BA(i + 32 + 32 | 0, 0 | g, -2 - (c = ~C >>> 0 > 4294967295 | -1 == (0 | ~C) & ~B >>> 0 > 4294967263 ? ~B : -33) + 1 | 0), Yg(i + 32 | 0, i + 32 | 0, 0 | vg(0 | I, 0 | E, 32, 0), 0 | o(), Q + 16 | 0, i), BA(0 | A, i + 32 + 32 | 0, -2 - c + 1 | 0)), C >>> 0 > 0 | 0 == (0 | C) & B >>> 0 > 32 && _g(A + I | 0, g + I | 0, 0 | Ug(0 | B, 0 | C, 0 | I, 0 | E), 0 | o(), Q + 16 | 0, i), MI(i, 32), I = 0) : I = 0, y = e, 0 | I; + } + + function BA(A, I, g) { + A |= 0, I |= 0; + var Q, + E, + i = 0; + if ((0 | (g |= 0)) >= 8192) return t(0 | A, 0 | I, 0 | g), 0 | A; + + if (E = 0 | A, Q = A + g | 0, (3 & A) == (3 & I)) { + for (; 3 & A;) { + if (!g) return 0 | E; + B[A >> 0] = 0 | B[I >> 0], A = A + 1 | 0, I = I + 1 | 0, g = g - 1 | 0; + } + + for (i = (g = -4 & Q | 0) - 64 | 0; (0 | A) <= (0 | i);) { + C[A >> 2] = C[I >> 2], C[A + 4 >> 2] = C[I + 4 >> 2], C[A + 8 >> 2] = C[I + 8 >> 2], C[A + 12 >> 2] = C[I + 12 >> 2], C[A + 16 >> 2] = C[I + 16 >> 2], C[A + 20 >> 2] = C[I + 20 >> 2], C[A + 24 >> 2] = C[I + 24 >> 2], C[A + 28 >> 2] = C[I + 28 >> 2], C[A + 32 >> 2] = C[I + 32 >> 2], C[A + 36 >> 2] = C[I + 36 >> 2], C[A + 40 >> 2] = C[I + 40 >> 2], C[A + 44 >> 2] = C[I + 44 >> 2], C[A + 48 >> 2] = C[I + 48 >> 2], C[A + 52 >> 2] = C[I + 52 >> 2], C[A + 56 >> 2] = C[I + 56 >> 2], C[A + 60 >> 2] = C[I + 60 >> 2], A = A + 64 | 0, I = I + 64 | 0; + } + + for (; (0 | A) < (0 | g);) { + C[A >> 2] = C[I >> 2], A = A + 4 | 0, I = I + 4 | 0; + } + } else for (g = Q - 4 | 0; (0 | A) < (0 | g);) { + B[A >> 0] = 0 | B[I >> 0], B[A + 1 >> 0] = 0 | B[I + 1 >> 0], B[A + 2 >> 0] = 0 | B[I + 2 >> 0], B[A + 3 >> 0] = 0 | B[I + 3 >> 0], A = A + 4 | 0, I = I + 4 | 0; + } + + for (; (0 | A) < (0 | Q);) { + B[A >> 0] = 0 | B[I >> 0], A = A + 1 | 0, I = I + 1 | 0; + } + + return 0 | E; + } + + function CA(A, I) { + A |= 0; + var g, + Q, + E = 0; + g = y, Q = y = y + 63 & -64, y = y + 48 | 0, function (A, I) { + var g, B, Q, E, i, e, o, c, a, n, r; + A |= 0, a = 0 | C[(I |= 0) >> 2], r = 0 | C[I + 4 >> 2], o = 0 | C[I + 8 >> 2], e = 0 | C[I + 12 >> 2], i = 0 | C[I + 16 >> 2], n = 0 | C[I + 20 >> 2], Q = 0 | C[I + 24 >> 2], B = 0 | C[I + 28 >> 2], g = 0 | C[I + 32 >> 2], E = (((((c = ((19 * ((((((((((((16777216 + (19 * (I = 0 | C[I + 36 >> 2]) | 0) | 0) >>> 25) + a >> 26) + r >> 25) + o >> 26) + e >> 25) + i >> 26) + n >> 25) + Q >> 26) + B >> 25) + g >> 26) + I >> 25) | 0) + a >> 26) + r | 0) >> 25) + o >> 26) + e >> 25) + i >> 26) + n | 0, C[A >> 2] = (19 * ((((((((((((16777216 + (19 * I | 0) | 0) >>> 25) + a >> 26) + r >> 25) + o >> 26) + e >> 25) + i >> 26) + n >> 25) + Q >> 26) + B >> 25) + g >> 26) + I >> 25) | 0) + a & 67108863, C[A + 4 >> 2] = 33554431 & c, C[A + 8 >> 2] = (c >> 25) + o & 67108863, C[A + 12 >> 2] = ((c >> 25) + o >> 26) + e & 33554431, C[A + 16 >> 2] = (((c >> 25) + o >> 26) + e >> 25) + i & 67108863, C[A + 20 >> 2] = 33554431 & E, C[A + 24 >> 2] = (E >> 25) + Q & 67108863, C[A + 28 >> 2] = ((E >> 25) + Q >> 26) + B & 33554431, C[A + 32 >> 2] = (((E >> 25) + Q >> 26) + B >> 25) + g & 67108863, C[A + 36 >> 2] = ((((E >> 25) + Q >> 26) + B >> 25) + g >> 26) + I & 33554431; + }(Q, I |= 0), I = 0 | C[Q >> 2], B[A >> 0] = I, B[A + 1 >> 0] = I >>> 8, B[A + 2 >> 0] = I >>> 16, E = 0 | C[Q + 4 >> 2], B[A + 3 >> 0] = E << 2 | I >>> 24, B[A + 4 >> 0] = E >>> 6, B[A + 5 >> 0] = E >>> 14, I = 0 | C[Q + 8 >> 2], B[A + 6 >> 0] = I << 3 | E >>> 22, B[A + 7 >> 0] = I >>> 5, B[A + 8 >> 0] = I >>> 13, E = 0 | C[Q + 12 >> 2], B[A + 9 >> 0] = E << 5 | I >>> 21, B[A + 10 >> 0] = E >>> 3, B[A + 11 >> 0] = E >>> 11, I = 0 | C[Q + 16 >> 2], B[A + 12 >> 0] = I << 6 | E >>> 19, B[A + 13 >> 0] = I >>> 2, B[A + 14 >> 0] = I >>> 10, B[A + 15 >> 0] = I >>> 18, I = 0 | C[Q + 20 >> 2], B[A + 16 >> 0] = I, B[A + 17 >> 0] = I >>> 8, B[A + 18 >> 0] = I >>> 16, E = 0 | C[Q + 24 >> 2], B[A + 19 >> 0] = E << 1 | I >>> 24, B[A + 20 >> 0] = E >>> 7, B[A + 21 >> 0] = E >>> 15, I = 0 | C[Q + 28 >> 2], B[A + 22 >> 0] = I << 3 | E >>> 23, B[A + 23 >> 0] = I >>> 5, B[A + 24 >> 0] = I >>> 13, E = 0 | C[Q + 32 >> 2], B[A + 25 >> 0] = E << 4 | I >>> 21, B[A + 26 >> 0] = E >>> 4, B[A + 27 >> 0] = E >>> 12, I = 0 | C[Q + 36 >> 2], B[A + 28 >> 0] = I << 6 | E >>> 20, B[A + 29 >> 0] = I >>> 2, B[A + 30 >> 0] = I >>> 10, B[A + 31 >> 0] = I >>> 18, y = g; + } + + function QA(A, I, g) { + A |= 0, I |= 0, g |= 0; + var B, + E, + i = 0, + e = 0, + c = 0; + + if (B = y, E = y = y + 63 & -64, y = y + 4096 | 0, yB(E + 3072 | 0), yB(E + 2048 | 0), 0 != (0 | A) & 0 != (0 | I) && (C[E + 2048 >> 2] = C[I >> 2], C[E + 2048 + 4 >> 2] = 0, C[E + 2048 + 8 >> 2] = C[I + 4 >> 2], C[E + 2048 + 8 + 4 >> 2] = 0, C[E + 2048 + 16 >> 2] = Q[I + 8 >> 0], C[E + 2048 + 16 + 4 >> 2] = 0, C[E + 2048 + 24 >> 2] = C[A + 16 >> 2], C[E + 2048 + 24 + 4 >> 2] = 0, C[E + 2048 + 32 >> 2] = C[A + 8 >> 2], C[E + 2048 + 32 + 4 >> 2] = 0, C[E + 2048 + 40 >> 2] = C[A + 36 >> 2], C[E + 2048 + 40 + 4 >> 2] = 0, 0 | C[A + 20 >> 2])) { + I = 0; + + do { + (i = 127 & I) || (c = 0 | vg(0 | C[E + 2048 + 48 >> 2], 0 | C[E + 2048 + 48 + 4 >> 2], 1, 0), e = 0 | o(), C[E + 2048 + 48 >> 2] = c, C[E + 2048 + 48 + 4 >> 2] = e, yB(E), yB(E + 1024 | 0), H(E + 3072 | 0, E + 2048 | 0, E), H(E + 3072 | 0, E, E + 1024 | 0)), e = 0 | C[E + 1024 + (i << 3) + 4 >> 2], C[(c = g + (I << 3) | 0) >> 2] = C[E + 1024 + (i << 3) >> 2], C[c + 4 >> 2] = e, I = I + 1 | 0; + } while (I >>> 0 < (0 | C[A + 20 >> 2]) >>> 0); + } + + y = B; + } + + function EA(A, I, g, B) { + A |= 0, I |= 0, g |= 0, B |= 0; + var Q, + E, + i, + e, + o = 0, + c = 0, + a = 0; + e = y, i = y = y + 63 & -64, y = y + 64 | 0, c = 52 + (o = i + 8 | 0) | 0; + + do { + C[o >> 2] = 0, o = o + 4 | 0; + } while ((0 | o) < (0 | c)); + + o = 0 | ZA(A), C[i + 36 >> 2] = o, C[i + 20 >> 2] = o, C[i + 4 >> 2] = o, c = 0 | F(o), C[i + 32 >> 2] = c, Q = 0 | F(o), C[i + 16 >> 2] = Q, E = 0 | F(o), C[i >> 2] = E; + + do { + if (0 == (0 | c) | 0 == (0 | Q) | 0 == (0 | E)) d(c), d(Q), d(E), o = -22;else { + if (!(a = 0 | F(o))) { + d(c), d(Q), d(E), o = -22; + break; + } + + if (0 | (o = 0 | L(i, A, B))) { + d(0 | C[i + 32 >> 2]), d(0 | C[i + 16 >> 2]), d(0 | C[i >> 2]), d(a); + break; + } + + B = 0 | nA(0 | C[i + 40 >> 2], 0 | C[i + 44 >> 2], 0 | C[i + 52 >> 2], I, g, 0 | C[i + 16 >> 2], 0 | C[i + 20 >> 2], a, 0 | C[i + 4 >> 2], 0, 0, B), d(0 | C[i + 32 >> 2]), d(0 | C[i + 16 >> 2]), o = 0 == (0 | B) && 0 == (0 | EI(a, 0 | C[i >> 2], 0 | C[i + 4 >> 2])) ? 0 : -35, d(a), d(0 | C[i >> 2]); + } + } while (0); + + return y = e, 0 | o; + } + + function iA(A, I) { + A |= 0, I |= 0; + var g, + C, + E = 0, + i = 0, + e = 0; + g = y, C = y = y + 63 & -64, y = y + 464 | 0, E = 0; + + do { + e = 0 | B[I + E >> 0], B[C + (i = E << 1) >> 0] = 15 & e, B[C + (1 | i) >> 0] = (255 & e) >>> 4, E = E + 1 | 0; + } while (32 != (0 | E)); + + I = 0, E = 0; + + do { + I = 134217728 + ((i = I + (0 | Q[(e = C + E | 0) >> 0]) | 0) << 24) >> 28, B[e >> 0] = i - (I << 4), E = E + 1 | 0; + } while (63 != (0 | E)); + + B[C + 63 >> 0] = I + (0 | Q[C + 63 >> 0]), Og(A), I = 1; + + do { + $g(C + 64 | 0, I >>> 1, 0 | B[C + I >> 0]), CI(C + 304 | 0, A, C + 64 | 0), Eg(A, C + 304 | 0), I = I + 2 | 0; + } while (I >>> 0 < 64); + + og(C + 304 | 0, A), Hg(C + 184 | 0, C + 304 | 0), aI(C + 304 | 0, C + 184 | 0), Hg(C + 184 | 0, C + 304 | 0), aI(C + 304 | 0, C + 184 | 0), Hg(C + 184 | 0, C + 304 | 0), aI(C + 304 | 0, C + 184 | 0), Eg(A, C + 304 | 0), I = 0; + + do { + $g(C + 64 | 0, I >>> 1, 0 | B[C + I >> 0]), CI(C + 304 | 0, A, C + 64 | 0), Eg(A, C + 304 | 0), I = I + 2 | 0; + } while (I >>> 0 < 64); + + y = g; + } + + function eA(A, I, g, B, C, Q, E, i, e, c, a) { + var n; + A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, n = y, y = y + 352 | 0, OI(n + 16 | 0, 64, 0, c |= 0, a |= 0), gB(n + 80 | 0, n + 16 | 0), MI(n + 16 | 0, 64), bg(n + 80 | 0, E, i, e), I = 0 | Ug(0, 0, 0 | i, 0 | e), o(), bg(n + 80 | 0, 34624, 15 & I, 0), bg(n + 80 | 0, g, B, C), I = 0 | Ug(0, 0, 0 | B, 0 | C), o(), bg(n + 80 | 0, 34624, 15 & I, 0), LI(n + 336 | 0, i, e), bg(n + 80 | 0, n + 336 | 0, 8, 0), LI(n + 336 | 0, B, C), bg(n + 80 | 0, n + 336 | 0, 8, 0), IB(n + 80 | 0, n), MI(n + 80 | 0, 256), I = 0 | tB(n, Q), MI(n, 16); + + do { + if (A) { + if (I) { + YA(0 | A, 0, 0 | B), I = -1; + break; + } + + rI(A, g, B, C, c, 1, a), I = 0; + break; + } + } while (0); + + return y = n, 0 | I; + } + + function oA(A) { + A |= 0; + var I = 0, + g = 0; + + do { + if (A) { + if (0 | C[A >> 2]) { + if ((0 | C[A + 4 >> 2]) >>> 0 >= 16) { + if (0 == (0 | C[A + 8 >> 2]) && 0 | C[A + 12 >> 2]) { + I = -18; + break; + } + + if (I = 0 | C[A + 20 >> 2], !(0 | C[A + 16 >> 2])) return 0 | (0 == (0 | I) ? -6 : -19); + + if (I >>> 0 >= 8) { + if (0 == (0 | C[A + 24 >> 2]) && 0 | C[A + 28 >> 2]) { + I = -20; + break; + } + + if (0 == (0 | C[A + 32 >> 2]) && 0 | C[A + 36 >> 2]) { + I = -21; + break; + } + + if ((I = 0 | C[A + 44 >> 2]) >>> 0 >= 8) { + if (I >>> 0 <= 2097152) { + if (I >>> 0 >= (g = 0 | C[A + 48 >> 2]) << 3 >>> 0) { + if (0 | C[A + 40 >> 2]) { + if (g) { + if (!(g >>> 0 > 16777215)) return 0 | (0 == (0 | (A = 0 | C[A + 52 >> 2])) ? -28 : A >>> 0 > 16777215 ? -29 : 0); + I = -17; + } else I = -16; + } else I = -12; + } else I = -14; + } else I = -15; + } else I = -14; + } else I = -6; + } else I = -2; + } else I = -1; + } else I = -25; + } while (0); + + return 0 | I; + } + + function cA(A, I, g, Q, E) { + var i, e; + A |= 0, g |= 0, Q |= 0, E |= 0, i = y, e = y = y + 63 & -64, y = y + 192 | 0, ((I |= 0) - 1 & 255) > 63 && SB(), g || SB(), B[e + 128 >> 0] = I, B[e + 128 + 1 >> 0] = 32, B[e + 128 + 2 >> 0] = 1, B[e + 128 + 3 >> 0] = 1, Wg(e + 128 + 4 | 0), LI(e + 128 + 8 | 0, 0, 0), C[e + 128 + 16 >> 2] = 0, C[e + 128 + 16 + 4 >> 2] = 0, C[e + 128 + 16 + 8 >> 2] = 0, C[e + 128 + 16 + 12 >> 2] = 0, Q ? function (A, I) { + I |= 0; + var g = 0; + A = 16 + (g = 32 + (A |= 0) | 0) | 0; + + do { + B[g >> 0] = 0 | B[I >> 0], g = g + 1 | 0, I = I + 1 | 0; + } while ((0 | g) < (0 | A)); + }(e + 128 | 0, Q) : (C[e + 128 + 32 >> 2] = 0, C[e + 128 + 32 + 4 >> 2] = 0, C[e + 128 + 32 + 8 >> 2] = 0, C[e + 128 + 32 + 12 >> 2] = 0), E ? function (A, I) { + I |= 0; + var g = 0; + A = 16 + (g = 48 + (A |= 0) | 0) | 0; + + do { + B[g >> 0] = 0 | B[I >> 0], g = g + 1 | 0, I = I + 1 | 0; + } while ((0 | g) < (0 | A)); + }(e + 128 | 0, E) : (C[e + 128 + 48 >> 2] = 0, C[e + 128 + 48 + 4 >> 2] = 0, C[e + 128 + 48 + 8 >> 2] = 0, C[e + 128 + 48 + 12 >> 2] = 0), XA(A, e + 128 | 0), E = 96 + (I = e + 32 | 0) | 0; + + do { + C[I >> 2] = 0, I = I + 4 | 0; + } while ((0 | I) < (0 | E)); + + E = (I = e) + 32 | 0; + + do { + B[I >> 0] = 0 | B[g >> 0], I = I + 1 | 0, g = g + 1 | 0; + } while ((0 | I) < (0 | E)); + + $(A, e, 128, 0), MI(e, 128), y = i; + } + + function aA(A, I, g) { + var C, E; + I |= 0, g |= 0, C = 0 | vg(Q[64 + (A |= 0) >> 0] | Q[A + 64 + 1 >> 0] << 8 | Q[A + 64 + 2 >> 0] << 16 | Q[A + 64 + 3 >> 0] << 24 | 0, Q[A + 64 + 4 >> 0] | Q[A + 64 + 4 + 1 >> 0] << 8 | Q[A + 64 + 4 + 2 >> 0] << 16 | Q[A + 64 + 4 + 3 >> 0] << 24 | 0, 0 | I, 0 | g), E = 0 | o(), B[A + 64 >> 0] = C, B[A + 64 + 1 >> 0] = C >> 8, B[A + 64 + 2 >> 0] = C >> 16, B[A + 64 + 3 >> 0] = C >> 24, B[A + 64 + 4 >> 0] = E, B[A + 64 + 4 + 1 >> 0] = E >> 8, B[A + 64 + 4 + 2 >> 0] = E >> 16, B[A + 64 + 4 + 3 >> 0] = E >> 24, I = 0 | vg(Q[A + 72 >> 0] | Q[A + 72 + 1 >> 0] << 8 | Q[A + 72 + 2 >> 0] << 16 | Q[A + 72 + 3 >> 0] << 24 | 0, Q[A + 72 + 4 >> 0] | Q[A + 72 + 4 + 1 >> 0] << 8 | Q[A + 72 + 4 + 2 >> 0] << 16 | Q[A + 72 + 4 + 3 >> 0] << 24 | 0, 1 & (E >>> 0 < g >>> 0 | (0 | E) == (0 | g) & C >>> 0 < I >>> 0) | 0, 0), g = 0 | o(), B[A + 72 >> 0] = I, B[A + 72 + 1 >> 0] = I >> 8, B[A + 72 + 2 >> 0] = I >> 16, B[A + 72 + 3 >> 0] = I >> 24, B[A + 72 + 4 >> 0] = g, B[A + 72 + 4 + 1 >> 0] = g >> 8, B[A + 72 + 4 + 2 >> 0] = g >> 16, B[A + 72 + 4 + 3 >> 0] = g >> 24; + } + + function nA(A, I, g, B, Q, E, i, e, o, c, a, n) { + var r, t, f; + A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0, f = y, t = y = y + 63 & -64, y = y + 64 | 0, r = 0 | F(o |= 0); + + do { + if (r) { + if (C[t >> 2] = r, C[t + 4 >> 2] = o, C[t + 8 >> 2] = B, C[t + 12 >> 2] = Q, C[t + 16 >> 2] = E, C[t + 20 >> 2] = i, C[t + 24 >> 2] = 0, C[t + 24 + 4 >> 2] = 0, C[t + 24 + 8 >> 2] = 0, C[t + 24 + 12 >> 2] = 0, C[t + 40 >> 2] = A, C[t + 44 >> 2] = I, C[t + 48 >> 2] = g, C[t + 52 >> 2] = g, C[t + 56 >> 2] = 0, 0 | (I = 0 | pA(t, n))) { + MI(r, o), d(r); + break; + } + + if (0 | e && BA(0 | e, 0 | r, 0 | o), 0 != (0 | c) & 0 != (0 | a) && 0 | J(c, a, t, n)) { + MI(r, o), MI(c, a), d(r), I = -31; + break; + } + + MI(r, o), d(r), I = 0; + } else I = -22; + } while (0); + + return y = f, 0 | I; + } + + function rA(A, I) { + var g, + B, + C = 0; + return B = y, g = y = y + 63 & -64, y = y + 288 | 0, U(40 + (A |= 0) | 0, I |= 0), Sg(A + 80 | 0), _(g + 240 | 0, A + 40 | 0), u(g + 192 | 0, g + 240 | 0, 16), lA(g + 240 | 0, g + 240 | 0, A + 80 | 0), _A(g + 192 | 0, g + 192 | 0, A + 80 | 0), _(g + 144 | 0, g + 192 | 0), u(g + 144 | 0, g + 144 | 0, g + 192 | 0), _(A, g + 144 | 0), u(A, A, g + 192 | 0), u(A, A, g + 240 | 0), function (A, I) { + A |= 0; + var g, + B, + C = 0; + g = y, B = y = y + 63 & -64, y = y + 144 | 0, _(B + 96 | 0, I |= 0), _(B + 48 | 0, B + 96 | 0), _(B + 48 | 0, B + 48 | 0), u(B + 48 | 0, I, B + 48 | 0), u(B + 96 | 0, B + 96 | 0, B + 48 | 0), _(B + 96 | 0, B + 96 | 0), u(B + 96 | 0, B + 48 | 0, B + 96 | 0), _(B + 48 | 0, B + 96 | 0), C = 1; + + do { + _(B + 48 | 0, B + 48 | 0), C = C + 1 | 0; + } while (5 != (0 | C)); + + u(B + 96 | 0, B + 48 | 0, B + 96 | 0), _(B + 48 | 0, B + 96 | 0), C = 1; + + do { + _(B + 48 | 0, B + 48 | 0), C = C + 1 | 0; + } while (10 != (0 | C)); + + u(B + 48 | 0, B + 48 | 0, B + 96 | 0), _(B, B + 48 | 0), C = 1; + + do { + _(B, B), C = C + 1 | 0; + } while (20 != (0 | C)); + + u(B + 48 | 0, B, B + 48 | 0), _(B + 48 | 0, B + 48 | 0), C = 1; + + do { + _(B + 48 | 0, B + 48 | 0), C = C + 1 | 0; + } while (10 != (0 | C)); + + u(B + 96 | 0, B + 48 | 0, B + 96 | 0), _(B + 48 | 0, B + 96 | 0), C = 1; + + do { + _(B + 48 | 0, B + 48 | 0), C = C + 1 | 0; + } while (50 != (0 | C)); + + u(B + 48 | 0, B + 48 | 0, B + 96 | 0), _(B, B + 48 | 0), C = 1; + + do { + _(B, B), C = C + 1 | 0; + } while (100 != (0 | C)); + + u(B + 48 | 0, B, B + 48 | 0), _(B + 48 | 0, B + 48 | 0), C = 1; + + do { + _(B + 48 | 0, B + 48 | 0), C = C + 1 | 0; + } while (50 != (0 | C)); + + u(B + 96 | 0, B + 48 | 0, B + 96 | 0), _(B + 96 | 0, B + 96 | 0), _(B + 96 | 0, B + 96 | 0), u(A, B + 96 | 0, I), y = g; + }(A, A), u(A, A, g + 144 | 0), u(A, A, g + 240 | 0), _(g + 96 | 0, A), u(g + 96 | 0, g + 96 | 0, g + 192 | 0), lA(g + 48 | 0, g + 96 | 0, g + 240 | 0), 0 | cg(g + 48 | 0) ? C = 4 : (_A(g, g + 96 | 0, g + 240 | 0), 0 | cg(g) ? (u(A, A, 64), C = 4) : A = -1), 4 == (0 | C) && ((0 | (C = 0 | sg(A))) == ((0 | Q[I + 31 >> 0]) >>> 7 | 0) && xA(A, A), u(A + 120 | 0, A, A + 40 | 0), A = 0), y = B, 0 | A; + } + + function tA(A, I, g) { + var B, Q, E, i, e, o, c, a, n, r, t, f, w, y, s, h, D, F, p; + I |= 0, g |= 0, p = 0 | C[(A |= 0) >> 2], D = 0 | C[A + 4 >> 2], s = 0 | C[A + 8 >> 2], w = 0 | C[A + 12 >> 2], t = 0 | C[A + 16 >> 2], n = 0 | C[A + 20 >> 2], c = 0 | C[A + 24 >> 2], e = 0 | C[A + 28 >> 2], E = 0 | C[A + 32 >> 2], B = 0 | C[A + 36 >> 2], F = (C[I + 4 >> 2] ^ D) & 0 - g, h = (C[I + 8 >> 2] ^ s) & 0 - g, y = (C[I + 12 >> 2] ^ w) & 0 - g, f = (C[I + 16 >> 2] ^ t) & 0 - g, r = (C[I + 20 >> 2] ^ n) & 0 - g, a = (C[I + 24 >> 2] ^ c) & 0 - g, o = (C[I + 28 >> 2] ^ e) & 0 - g, i = (C[I + 32 >> 2] ^ E) & 0 - g, Q = (C[I + 36 >> 2] ^ B) & 0 - g, C[A >> 2] = (C[I >> 2] ^ p) & 0 - g ^ p, C[A + 4 >> 2] = F ^ D, C[A + 8 >> 2] = h ^ s, C[A + 12 >> 2] = y ^ w, C[A + 16 >> 2] = f ^ t, C[A + 20 >> 2] = r ^ n, C[A + 24 >> 2] = a ^ c, C[A + 28 >> 2] = o ^ e, C[A + 32 >> 2] = i ^ E, C[A + 36 >> 2] = Q ^ B; + } + + function fA(A, I, g, B, Q, E, i, e, c, a, n, r) { + return A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, a = y, y = y + 336 | 0, OI(a, 64, 0, n |= 0, r |= 0), gB(a + 64 | 0, a), MI(a, 64), bg(a + 64 | 0, i, e, c), i = 0 | Ug(0, 0, 0 | e, 0 | c), o(), bg(a + 64 | 0, 34624, 15 & i, 0), rI(A, B, Q, E, n, 1, r), bg(a + 64 | 0, A, Q, E), n = 0 | Ug(0, 0, 0 | Q, 0 | E), o(), bg(a + 64 | 0, 34624, 15 & n, 0), LI(a + 320 | 0, e, c), bg(a + 64 | 0, a + 320 | 0, 8, 0), LI(a + 320 | 0, Q, E), bg(a + 64 | 0, a + 320 | 0, 8, 0), IB(a + 64 | 0, I), MI(a + 64 | 0, 256), 0 | g && (C[g >> 2] = 16, C[g + 4 >> 2] = 0), y = a, 0; + } + + function wA(A) { + var I, + g, + E = 0, + i = 0, + e = 0; + I = y, g = y = y + 63 & -64, y = y + 48 | 0, i = A |= 0, e = (E = g) + 32 | 0; + + do { + B[E >> 0] = 0 | B[i >> 0], E = E + 1 | 0, i = i + 1 | 0; + } while ((0 | E) < (0 | e)); + + E = Q[A + 36 + 4 >> 0] | Q[A + 36 + 4 + 1 >> 0] << 8 | Q[A + 36 + 4 + 2 >> 0] << 16 | Q[A + 36 + 4 + 3 >> 0] << 24, C[g + 32 >> 2] = Q[A + 36 >> 0] | Q[A + 36 + 1 >> 0] << 8 | Q[A + 36 + 2 >> 0] << 16 | Q[A + 36 + 3 >> 0] << 24, C[g + 32 + 4 >> 2] = E, function (A, I, g, B) { + !function (A, I, g, B) { + fI(A |= 0, I |= 0, 40, 0, g |= 0, 0, B |= 0); + }(A |= 0, I |= 0, g |= 0, B |= 0); + }(g, g, A + 32 | 0, A), i = g, e = (E = A) + 32 | 0; + + do { + B[E >> 0] = 0 | B[i >> 0], E = E + 1 | 0, i = i + 1 | 0; + } while ((0 | E) < (0 | e)); + + i = 0 | C[g + 32 >> 2], e = 0 | C[g + 32 + 4 >> 2], B[A + 36 >> 0] = i, B[A + 36 + 1 >> 0] = i >> 8, B[A + 36 + 2 >> 0] = i >> 16, B[A + 36 + 3 >> 0] = i >> 24, B[A + 36 + 4 >> 0] = e, B[A + 36 + 4 + 1 >> 0] = e >> 8, B[A + 36 + 4 + 2 >> 0] = e >> 16, B[A + 36 + 4 + 3 >> 0] = e >> 24, Mg(A), y = I; + } + + function yA(A, I) { + A |= 0, I |= 0; + var g = 0, + C = 0, + E = 0, + i = 0, + e = 0; + g = 0; + + do { + B[A + g >> 0] = (0 | Q[I + (g >>> 3) >> 0]) >>> (7 & g) & 1, g = g + 1 | 0; + } while (256 != (0 | g)); + + e = 0; + + do { + E = A + e | 0; + + A: do { + if (0 | B[E >> 0]) { + i = 1; + + do { + if ((g = i + e | 0) >>> 0 >= 256) break A; + I = 0 | B[A + g >> 0]; + + I: do { + if (I << 24 >> 24) { + if (((C = I << 24 >> 24 << i) + (I = 0 | B[E >> 0]) | 0) < 16) { + B[E >> 0] = C + I, B[A + g >> 0] = 0; + break; + } + + if ((I - C | 0) < -15) break A; + + for (B[E >> 0] = I - C; 0 | B[(I = A + g | 0) >> 0];) { + if (B[I >> 0] = 0, (g = g + 1 | 0) >>> 0 >= 256) break I; + } + + B[I >> 0] = 1; + } + } while (0); + + i = i + 1 | 0; + } while (i >>> 0 < 7); + } + } while (0); + + e = e + 1 | 0; + } while (256 != (0 | e)); + } + + function sA(A, I, g, B, C, Q, E, i, e, o, c) { + var a; + A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, a = y, y = y + 352 | 0, QB(a + 16 | 0, o |= 0, c |= 0), gB(a + 80 | 0, a + 16 | 0), MI(a + 16 | 0, 64), bg(a + 80 | 0, E, i, e), LI(a + 336 | 0, i, e), bg(a + 80 | 0, a + 336 | 0, 8, 0), bg(a + 80 | 0, g, B, C), LI(a + 336 | 0, B, C), bg(a + 80 | 0, a + 336 | 0, 8, 0), IB(a + 80 | 0, a), MI(a + 80 | 0, 256), I = 0 | tB(a, Q), MI(a, 16); + + do { + if (A) { + if (I) { + YA(0 | A, 0, 0 | B), I = -1; + break; + } + + zI(A, g, B, C, o, c), I = 0; + break; + } + } while (0); + + return y = a, 0 | I; + } + + function hA(A, I, g, B, Q, E, i) { + var e, o; + A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0, E |= 0, e = y, o = y = y + 63 & -64, y = y + 560 | 0, Jg(o + 192 | 0, i |= 0), RI(o + 128 | 0, E, 32, 0), P(o + 192 | 0, o + 128 + 32 | 0, 32, 0), P(o + 192 | 0, g, B, Q), VI(o + 192 | 0, o + 64 | 0), YI(A + 32 | 0, E + 32 | 0, 32), p(o + 64 | 0), iA(o + 400 | 0, o + 64 | 0), sI(A, o + 400 | 0), Jg(o + 192 | 0, i), P(o + 192 | 0, A, 64, 0), P(o + 192 | 0, g, B, Q), VI(o + 192 | 0, o), p(o), Tg(o + 128 | 0), h(A + 32 | 0, o, o + 128 | 0, o + 64 | 0), MI(o + 128 | 0, 64), MI(o + 64 | 0, 64), 0 | I && (C[I >> 2] = 64, C[I + 4 >> 2] = 0), y = e; + } + + function DA(A, I, g, B, Q, i) { + A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0, i |= 0; + var e = 0; + + do { + if (I) { + if (e = (0 | C[A + 24 >> 2]) - (0 | C[A + 20 >> 2]) | 0, i) { + e = B + -1 + e | 0; + break; + } + + e = e + ((0 == (0 | B)) << 31 >> 31) | 0; + break; + } + + if (!(g << 24 >> 24)) { + e = B + -1 | 0; + break; + } + + if (e = 0 | E(0 | C[A + 20 >> 2], 255 & g), i) { + e = B + -1 + e | 0; + break; + } + + e = e + ((0 == (0 | B)) << 31 >> 31) | 0; + break; + } while (0); + + return Qg(0 | Q, 0, 0 | Q, 0), Qg(0 | o(), 0, 0 | e, 0), i = 0 | Ug(e + -1 | 0, 0, 0 | o(), 0), Q = 0 | o(), 0 == (0 | I) | g << 24 >> 24 == 3 ? (e = 0, B = 0) : (e = 0 | E(0 | C[A + 20 >> 2], 1 + (255 & g) | 0), B = 0), A = 0 | Ag(0 | (I = 0 | vg(0 | i, 0 | Q, 0 | e, 0 | B)), 0 | (g = 0 | o()), 0 | C[A + 24 >> 2], 0), o(), 0 | A; + } + + function FA(A, I, g, B, Q) { + B |= 0, Q |= 0; + var E, + i, + e, + o = 0; + if (e = y, i = y = y + 63 & -64, y = y + 64 | 0, (g |= 0) >>> 0 > 0 | 0 == (0 | g) & (I |= 0) >>> 0 > 4294967295 | (E = 0 | ZA(A |= 0)) >>> 0 > 127) C[8678] = 28, g = -1;else { + o = (g = i) + 60 | 0; + + do { + C[g >> 2] = 0, g = g + 4 | 0; + } while ((0 | g) < (0 | o)); + + (o = 0 | function (A) { + var I; + return (I = 0 | F(A |= 0)) && 3 & C[I + -4 >> 2] ? (YA(0 | I, 0, 0 | A), 0 | I) : 0 | I; + }(E)) ? (C[i + 16 >> 2] = o, C[i + 8 >> 2] = o, C[i >> 2] = o, C[i + 20 >> 2] = E, C[i + 12 >> 2] = E, C[i + 4 >> 2] = E, C[i + 24 >> 2] = 0, C[i + 24 + 4 >> 2] = 0, C[i + 24 + 8 >> 2] = 0, C[i + 24 + 12 >> 2] = 0, 0 | L(i, A, Q) ? (C[8678] = 28, g = -1) : g = (0 | C[i + 40 >> 2]) == (0 | I) ? (0 | C[i + 44 >> 2]) != (B >>> 10 | 0) & 1 : 1, d(o)) : g = -1; + } + return y = e, 0 | g; + } + + function pA(A, I) { + I |= 0; + var g, + B, + Q = 0, + i = 0, + e = 0; + if (B = y, g = y = y + 63 & -64, y = y + 48 | 0, !(Q = 0 | oA(A |= 0))) if ((I + -1 | 0) >>> 0 <= 1) { + if (i = 0 | C[A + 44 >> 2], Q = 0 | C[A + 48 >> 2], e = 0 | E(i = ((i >>> 0 < Q << 3 >>> 0 ? Q << 3 : i) >>> 0) / (Q << 2 >>> 0) | 0, Q << 2), C[g >> 2] = 0, C[g + 8 >> 2] = C[A + 40 >> 2], C[g + 12 >> 2] = -1, C[g + 16 >> 2] = e, C[g + 20 >> 2] = i, C[g + 24 >> 2] = i << 2, C[g + 28 >> 2] = Q, C[g + 32 >> 2] = C[A + 52 >> 2], C[g + 36 >> 2] = I, !(Q = 0 | function (A, I) { + A |= 0, I |= 0; + var g, + B, + Q = 0; + B = y, g = y = y + 63 & -64, y = y + 80 | 0; + + do { + if (0 == (0 | A) | 0 == (0 | I)) Q = -25;else { + if (Q = 0 | F(C[A + 20 >> 2] << 3), C[A + 4 >> 2] = Q, Q) { + if (Q = 0 | bA(A, 0 | C[A + 16 >> 2])) { + ug(A, 0 | C[I + 56 >> 2]); + break; + } + + j(g, I, 0 | C[A + 36 >> 2]), MI(g + 64 | 0, 8), KA(g, A), MI(g, 72), Q = 0; + break; + } + + Q = -22; + } + } while (0); + + return y = B, 0 | Q; + }(g, A))) { + if (0 | C[g + 8 >> 2]) { + Q = 0; + + do { + UA(g, Q), Q = Q + 1 | 0; + } while (Q >>> 0 < (0 | C[g + 8 >> 2]) >>> 0); + } + + !function (A, I) { + var g, + B, + Q = 0, + i = 0; + + if (g = y, B = y = y + 63 & -64, y = y + 2048 | 0, 0 != (0 | (A |= 0)) & 0 != (0 | (I |= 0))) { + if (fB(B + 1024 | 0, (0 | C[4 + (0 | C[I >> 2]) >> 2]) + (C[I + 24 >> 2] << 10) - 1024 | 0), (0 | C[I + 28 >> 2]) >>> 0 > 1) { + Q = 1; + + do { + i = (i = 0 | C[I + 24 >> 2]) - 1 + (0 | E(i, Q)) | 0, SI(B + 1024 | 0, (0 | C[4 + (0 | C[I >> 2]) >> 2]) + (i << 10) | 0), Q = Q + 1 | 0; + } while (Q >>> 0 < (0 | C[I + 28 >> 2]) >>> 0); + } + + !function (A, I) { + A |= 0, I |= 0; + var g = 0, + B = 0; + g = 0; + + do { + LI(A + (g << 3) | 0, 0 | C[(B = I + (g << 3) | 0) >> 2], 0 | C[B + 4 >> 2]), g = g + 1 | 0; + } while (128 != (0 | g)); + }(B, B + 1024 | 0), T(0 | C[A >> 2], 0 | C[A + 4 >> 2], B, 1024), MI(B + 1024 | 0, 1024), MI(B, 1024), ug(I, 0 | C[A + 56 >> 2]); + } + + y = g; + }(A, g), Q = 0; + } + } else Q = -26; + return y = B, 0 | Q; + } + + function uA(A, I, g, B, C, Q) { + var E, i; + return I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, i = y, E = y = y + 63 & -64, y = y + 592 | 0, 0 != (0 | pI(32 + (A |= 0) | 0)) && 0 == (0 | GA(A)) && 0 != (0 | WI(C)) && 0 == (0 | GA(C)) && 0 == (0 | rA(E + 424 | 0, C)) ? (Jg(E + 96 | 0, Q), P(E + 96 | 0, A, 32, 0), P(E + 96 | 0, C, 32, 0), P(E + 96 | 0, I, g, B), VI(E + 96 | 0, E + 32 | 0), p(E + 32 | 0), N(E + 304 | 0, E + 32 | 0, E + 424 | 0, A + 32 | 0), sI(E, E + 304 | 0), g = 0 | rB(E, A), g = 0 | ((0 | E) == (0 | A) ? -1 : g) | EI(A, E, 32)) : g = -1, y = i, 0 | g; + } + + function HA(A, I) { + A |= 0, I |= 0; + var g = 0, + Q = 0; + + A: do { + if (255 & I) { + if (3 & A) do { + if ((Q = 0 | B[A >> 0]) << 24 >> 24 == 0 || Q << 24 >> 24 == (255 & I) << 24 >> 24) break A; + A = A + 1 | 0; + } while (0 != (3 & A | 0)); + Q = 0 | E(255 & I, 16843009), g = 0 | C[A >> 2]; + + I: do { + if (!((-2139062144 & g ^ -2139062144) & g + -16843009)) do { + if ((-2139062144 & (g ^= Q) ^ -2139062144) & g + -16843009 | 0) break I; + g = 0 | C[(A = A + 4 | 0) >> 2]; + } while (!((-2139062144 & g ^ -2139062144) & g + -16843009 | 0)); + } while (0); + + for (; (Q = 0 | B[A >> 0]) << 24 >> 24 != 0 && Q << 24 >> 24 != (255 & I) << 24 >> 24;) { + A = A + 1 | 0; + } + } else A = A + (0 | ZA(A)) | 0; + } while (0); + + return 0 | A; + } + + function kA(A, I) { + I |= 0; + var g, + Q = 0, + E = 0; + g = y, y = y + 192 | 0, PI(A |= 0), E = 128 + (Q = g + 64 | 0) | 0; + + do { + C[Q >> 2] = 909522486, Q = Q + 4 | 0; + } while ((0 | Q) < (0 | E)); + + B[g + 64 >> 0] = 54 ^ B[I >> 0], Q = 1; + + do { + B[(E = g + 64 + Q | 0) >> 0] = B[E >> 0] ^ B[I + Q >> 0], Q = Q + 1 | 0; + } while (32 != (0 | Q)); + + P(A, g + 64 | 0, 128, 0), PI(A + 208 | 0), E = 128 + (Q = g + 64 | 0) | 0; + + do { + C[Q >> 2] = 1549556828, Q = Q + 4 | 0; + } while ((0 | Q) < (0 | E)); + + B[g + 64 >> 0] = 92 ^ B[I >> 0], Q = 1; + + do { + B[(E = g + 64 + Q | 0) >> 0] = B[E >> 0] ^ B[I + Q >> 0], Q = Q + 1 | 0; + } while (32 != (0 | Q)); + + P(A + 208 | 0, g + 64 | 0, 128, 0), MI(g + 64 | 0, 128), MI(g, 64), y = g; + } + + function lA(A, I, g) { + var B, Q, E, i, e, o, c, a, n; + A |= 0, g |= 0, n = (0 | C[4 + (I |= 0) >> 2]) - (0 | C[g + 4 >> 2]) | 0, a = (0 | C[I + 8 >> 2]) - (0 | C[g + 8 >> 2]) | 0, c = (0 | C[I + 12 >> 2]) - (0 | C[g + 12 >> 2]) | 0, o = (0 | C[I + 16 >> 2]) - (0 | C[g + 16 >> 2]) | 0, e = (0 | C[I + 20 >> 2]) - (0 | C[g + 20 >> 2]) | 0, i = (0 | C[I + 24 >> 2]) - (0 | C[g + 24 >> 2]) | 0, E = (0 | C[I + 28 >> 2]) - (0 | C[g + 28 >> 2]) | 0, Q = (0 | C[I + 32 >> 2]) - (0 | C[g + 32 >> 2]) | 0, B = (0 | C[I + 36 >> 2]) - (0 | C[g + 36 >> 2]) | 0, C[A >> 2] = (0 | C[I >> 2]) - (0 | C[g >> 2]), C[A + 4 >> 2] = n, C[A + 8 >> 2] = a, C[A + 12 >> 2] = c, C[A + 16 >> 2] = o, C[A + 20 >> 2] = e, C[A + 24 >> 2] = i, C[A + 28 >> 2] = E, C[A + 32 >> 2] = Q, C[A + 36 >> 2] = B; + } + + function _A(A, I, g) { + var B, Q, E, i, e, o, c, a, n; + A |= 0, I |= 0, n = (0 | C[4 + (g |= 0) >> 2]) + (0 | C[I + 4 >> 2]) | 0, a = (0 | C[g + 8 >> 2]) + (0 | C[I + 8 >> 2]) | 0, c = (0 | C[g + 12 >> 2]) + (0 | C[I + 12 >> 2]) | 0, o = (0 | C[g + 16 >> 2]) + (0 | C[I + 16 >> 2]) | 0, e = (0 | C[g + 20 >> 2]) + (0 | C[I + 20 >> 2]) | 0, i = (0 | C[g + 24 >> 2]) + (0 | C[I + 24 >> 2]) | 0, E = (0 | C[g + 28 >> 2]) + (0 | C[I + 28 >> 2]) | 0, Q = (0 | C[g + 32 >> 2]) + (0 | C[I + 32 >> 2]) | 0, B = (0 | C[g + 36 >> 2]) + (0 | C[I + 36 >> 2]) | 0, C[A >> 2] = (0 | C[g >> 2]) + (0 | C[I >> 2]), C[A + 4 >> 2] = n, C[A + 8 >> 2] = a, C[A + 12 >> 2] = c, C[A + 16 >> 2] = o, C[A + 20 >> 2] = e, C[A + 24 >> 2] = i, C[A + 28 >> 2] = E, C[A + 32 >> 2] = Q, C[A + 36 >> 2] = B; + } + + function GA(A) { + A |= 0; + var I, + g, + C = 0, + E = 0, + i = 0, + e = 0; + I = y, g = y = y + 63 & -64, y = y + 16 | 0, B[g >> 0] = 0, B[g + 1 >> 0] = 0, B[g + 2 >> 0] = 0, B[g + 3 >> 0] = 0, B[g + 4 >> 0] = 0, B[g + 5 >> 0] = 0, B[g + 6 >> 0] = 0, i = 0; + + do { + C = 0 | B[A + i >> 0], E = 0; + + do { + B[(e = g + E | 0) >> 0] = B[e >> 0] | B[32096 + (E << 5) + i >> 0] ^ C, E = E + 1 | 0; + } while (7 != (0 | E)); + + i = i + 1 | 0; + } while (31 != (0 | i)); + + C = 127 & B[A + 31 >> 0], E = 0; + + do { + B[(e = g + E | 0) >> 0] = B[e >> 0] | C ^ B[32096 + (E << 5) + 31 >> 0], E = E + 1 | 0; + } while (7 != (0 | E)); + + C = 0, E = 0; + + do { + E = (0 | Q[g + C >> 0]) - 1 | E, C = C + 1 | 0; + } while (7 != (0 | C)); + + return y = I, E >>> 8 & 1 | 0; + } + + function dA(A, I, g, B, Q, E, i, e, o, c, a, n) { + return A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, o |= 0, c |= 0, c = y, y = y + 336 | 0, QB(c, a |= 0, n |= 0), gB(c + 64 | 0, c), MI(c, 64), bg(c + 64 | 0, i, e, o), LI(c + 320 | 0, e, o), bg(c + 64 | 0, c + 320 | 0, 8, 0), zI(A, B, Q, E, a, n), bg(c + 64 | 0, A, Q, E), LI(c + 320 | 0, Q, E), bg(c + 64 | 0, c + 320 | 0, 8, 0), IB(c + 64 | 0, I), MI(c + 64 | 0, 256), 0 | g && (C[g >> 2] = 16, C[g + 4 >> 2] = 0), y = c, 0; + } + + function YA(A, I, g) { + I |= 0; + var Q, + E = 0; + + if (Q = (A |= 0) + (g |= 0) | 0, I &= 255, (0 | g) >= 67) { + for (; 3 & A;) { + B[A >> 0] = I, A = A + 1 | 0; + } + + for (E = I | I << 8 | I << 16 | I << 24; (0 | A) <= ((-4 & Q) - 64 | 0);) { + C[A >> 2] = E, C[A + 4 >> 2] = E, C[A + 8 >> 2] = E, C[A + 12 >> 2] = E, C[A + 16 >> 2] = E, C[A + 20 >> 2] = E, C[A + 24 >> 2] = E, C[A + 28 >> 2] = E, C[A + 32 >> 2] = E, C[A + 36 >> 2] = E, C[A + 40 >> 2] = E, C[A + 44 >> 2] = E, C[A + 48 >> 2] = E, C[A + 52 >> 2] = E, C[A + 56 >> 2] = E, C[A + 60 >> 2] = E, A = A + 64 | 0; + } + + for (; (0 | A) < (-4 & Q | 0);) { + C[A >> 2] = E, A = A + 4 | 0; + } + } + + for (; (0 | A) < (0 | Q);) { + B[A >> 0] = I, A = A + 1 | 0; + } + + return Q - g | 0; + } + + function MA(A, I) { + A |= 0; + var g = 0; + g = 67108863 & (0 | Vg(I |= 0)), C[A >> 2] = g, g = (0 | Vg(I + 3 | 0)) >>> 2 & 67108611, C[A + 4 >> 2] = g, g = (0 | Vg(I + 6 | 0)) >>> 4 & 67092735, C[A + 8 >> 2] = g, g = (0 | Vg(I + 9 | 0)) >>> 6 & 66076671, C[A + 12 >> 2] = g, g = (0 | Vg(I + 12 | 0)) >>> 8 & 1048575, C[A + 16 >> 2] = g, C[A + 20 >> 2] = 0, C[A + 20 + 4 >> 2] = 0, C[A + 20 + 8 >> 2] = 0, C[A + 20 + 12 >> 2] = 0, C[A + 20 + 16 >> 2] = 0, g = 0 | Vg(I + 16 | 0), C[A + 40 >> 2] = g, g = 0 | Vg(I + 20 | 0), C[A + 44 >> 2] = g, g = 0 | Vg(I + 24 | 0), C[A + 48 >> 2] = g, I = 0 | Vg(I + 28 | 0), C[A + 52 >> 2] = I, C[A + 56 >> 2] = 0, C[A + 56 + 4 >> 2] = 0, B[A + 80 >> 0] = 0; + } + + function SA(A, I, g, B, Q, E) { + A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0, E |= 0; + var i = 0, + e = 0, + c = 0; + + do { + if (Q >>> 0 < 0 | 0 == (0 | Q) & B >>> 0 < 64 || (i = 0 | vg(0 | B, 0 | Q, -64, -1), (e = 0 | o()) >>> 0 > 0 | 0 == (0 | e) & i >>> 0 > 4294967231)) c = 10;else { + if (0 | dg(g, g + 64 | 0, i, e, E)) { + if (!A) { + c = 10; + break; + } + + YA(0 | A, 0, 0 | i), c = 10; + break; + } + + 0 | I && (C[I >> 2] = i, C[I + 4 >> 2] = e), A ? (YI(0 | A, g + 64 | 0, 0 | i), B = 0) : B = 0; + } + } while (0); + + return 10 == (0 | c) && (I ? (C[I >> 2] = 0, C[I + 4 >> 2] = 0, B = -1) : B = -1), 0 | B; + } + + function UA(A, I) { + I |= 0; + var g, + Q, + E = 0, + i = 0; + + if (g = y, Q = y = y + 63 & -64, y = y + 32 | 0, 0 | (A |= 0) && 0 | (E = 0 | C[A + 28 >> 2])) { + C[Q >> 2] = I, i = 0; + + do { + if (B[Q + 8 >> 0] = i, E) { + I = 0; + + do { + C[Q + 4 >> 2] = I, C[Q + 12 >> 2] = 0, C[Q + 16 >> 2] = C[Q >> 2], C[Q + 16 + 4 >> 2] = C[Q + 4 >> 2], C[Q + 16 + 8 >> 2] = C[Q + 8 >> 2], C[Q + 16 + 12 >> 2] = C[Q + 12 >> 2], X(A, Q + 16 | 0), I = I + 1 | 0, E = 0 | C[A + 28 >> 2]; + } while (I >>> 0 < E >>> 0); + } else E = 0; + + i = i + 1 | 0; + } while (4 != (0 | i)); + } + + y = g; + } + + function vA(A, I, g, Q) { + A |= 0, g |= 0, Q |= 0; + var E, + i, + e = 0; + + if (E = y, i = y = y + 63 & -64, y = y + 192 | 0, ((I |= 0) - 1 & 255) > 63 && SB(), !((Q + -1 & 255) > 63 | 0 == (0 | g))) { + B[i + 128 >> 0] = I, B[i + 128 + 1 >> 0] = Q, B[i + 128 + 2 >> 0] = 1, B[i + 128 + 3 >> 0] = 1, Wg(i + 128 + 4 | 0), LI(i + 128 + 8 | 0, 0, 0), e = 48 + (I = i + 128 + 16 | 0) | 0; + + do { + C[I >> 2] = 0, I = I + 4 | 0; + } while ((0 | I) < (0 | e)); + + return XA(A, i + 128 | 0), YA(i + (255 & Q) | 0, 0, 128 - (255 & Q) | 0), BA(0 | i, 0 | g, 255 & Q | 0), $(A, i, 128, 0), MI(i, 128), void (y = E); + } + + SB(); + } + + function bA(A, I) { + A |= 0, I |= 0; + var g, + B, + Q = 0; + B = y, g = y = y + 63 & -64, y = y + 16 | 0; + + do { + if (0 != (0 | A) && 0 != (0 | I) && 1024 == (0 | (I << 10 >>> 0) / (I >>> 0)) && (Q = 0 | F(12), C[A >> 2] = Q, 0 != (0 | Q))) { + if (C[Q + 4 >> 2] = 0, C[Q >> 2] = 0, Q = 0 | wg(g, I << 10), C[8678] = Q, Q) C[g >> 2] = 0;else if (0 | (Q = 0 | C[g >> 2])) { + C[C[A >> 2] >> 2] = Q, C[4 + (0 | C[A >> 2]) >> 2] = Q, C[8 + (0 | C[A >> 2]) >> 2] = I << 10, Q = 0; + break; + } + d(0 | C[A >> 2]), C[A >> 2] = 0, Q = -22; + } else Q = -22; + } while (0); + + return y = B, 0 | Q; + } + + function JA(A, I, g, B, E, i) { + var e, o, c; + return A |= 0, I |= 0, g |= 0, B |= 0, i |= 0, o = y, e = y = y + 63 & -64, y = y + 32 | 0, c = Q[4 + (E |= 0) >> 0] | Q[E + 4 + 1 >> 0] << 8 | Q[E + 4 + 2 >> 0] << 16 | Q[E + 4 + 3 >> 0] << 24, C[e + 16 >> 2] = Q[E >> 0] | Q[E + 1 >> 0] << 8 | Q[E + 2 >> 0] << 16 | Q[E + 3 >> 0] << 24, C[e + 16 + 4 >> 2] = c, C[e + 16 + 8 >> 2] = 0, C[e + 16 + 8 + 4 >> 2] = 0, LI(e, g, B), C[e + 8 >> 2] = 0, C[e + 8 + 4 >> 2] = 0, (I + -16 | 0) >>> 0 > 48 ? (C[8678] = 28, g = -1) : g = 0 | function (A, I, g, B, C) { + return g |= 0, ((I |= 0) - 1 | 0) >>> 0 > 63 ? g = -1 : (function (A, I, g, B, C) { + var Q, E; + if (I |= 0, g |= 0, B |= 0, C |= 0, Q = y, E = y = y + 63 & -64, y = y + 368 | 0, (A |= 0) || SB(), (g + -1 & 255) > 63 && SB(), I) return cA(E, g, I, B, C), $(E, 0, 0, 0), b(E, A, g), void (y = Q); + SB(); + }(A |= 0, g, 255 & I, B |= 0, C |= 0), g = 0), 0 | g; + }(A, I, i, e, e + 16 | 0), y = o, 0 | g; + } + + function PA(A, I, g, B, E, i, e, c, a, n, r) { + var t; + return A |= 0, I |= 0, g |= 0, B |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0, r |= 0, t = y, y = y + 48 | 0, C[t + 32 >> 2] = 0, R(t, n, r), I = Q[n + 16 + 4 >> 0] | Q[n + 16 + 4 + 1 >> 0] << 8 | Q[n + 16 + 4 + 2 >> 0] << 16 | Q[n + 16 + 4 + 3 >> 0] << 24, C[t + 32 + 4 >> 2] = Q[n + 16 >> 0] | Q[n + 16 + 1 >> 0] << 8 | Q[n + 16 + 2 >> 0] << 16 | Q[n + 16 + 3 >> 0] << 24, C[t + 32 + 4 + 4 >> 2] = I, I = 0 | function (A, I, g, B, C, Q, E, i, e, c) { + var a; + A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, E |= 0, i |= 0, a = y, y = y + 352 | 0, gg(a + 16 | 0, 64, 0, e |= 0, c |= 0), gB(a + 80 | 0, a + 16 | 0), MI(a + 16 | 0, 64), bg(a + 80 | 0, Q, E, i), Q = 0 | Ug(0, 0, 0 | E, 0 | i), o(), bg(a + 80 | 0, 34640, 15 & Q, 0), bg(a + 80 | 0, I, g, B), Q = 0 | Ug(0, 0, 0 | g, 0 | B), o(), bg(a + 80 | 0, 34640, 15 & Q, 0), LI(a + 336 | 0, E, i), bg(a + 80 | 0, a + 336 | 0, 8, 0), LI(a + 336 | 0, g, B), bg(a + 80 | 0, a + 336 | 0, 8, 0), IB(a + 80 | 0, a), MI(a + 80 | 0, 256), E = 0 | tB(a, C), MI(a, 16); + + do { + if (A) { + if (E) { + YA(0 | A, 0, 0 | g), E = -1; + break; + } + + mI(A, I, g, B, e, 1, c), E = 0; + break; + } + } while (0); + + return y = a, 0 | E; + }(A, g, B, E, i, e, c, a, t + 32 | 0, t), MI(t, 32), y = t, 0 | I; + } + + function RA(A, I, g, Q, E, i, e) { + I |= 0, g |= 0, Q |= 0, E |= 0, i |= 0, e |= 0; + var o, + c, + a, + n = 0; + a = y, o = y = y + 63 & -64, y = y + 16 | 0, c = 128 + (n = A |= 0) | 0; + + do { + B[n >> 0] = 0, n = n + 1 | 0; + } while ((0 | n) < (0 | c)); + + do { + if (!((i | Q) >>> 0 > 0 | 0 == (i | Q | 0) & (E | g) >>> 0 > 4294967295 | e >>> 0 > 2147483648)) { + if (i >>> 0 < 0 | 0 == (0 | i) & E >>> 0 < 3 | e >>> 0 < 8192) { + C[8678] = 28, g = -1; + break; + } + + Cg(o, 16), g = (0 != (0 | Gg(E, e >>> 10, I, g, o, A))) << 31 >> 31; + break; + } + + C[8678] = 22, g = -1; + } while (0); + + return y = a, 0 | g; + } + + function NA(A, I, g, B, E, i, e, c, a, n, r, t) { + return A |= 0, I |= 0, g |= 0, B |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0, r |= 0, t |= 0, n = y, y = y + 48 | 0, C[n + 32 >> 2] = 0, R(n, r, t), t = Q[r + 16 + 4 >> 0] | Q[r + 16 + 4 + 1 >> 0] << 8 | Q[r + 16 + 4 + 2 >> 0] << 16 | Q[r + 16 + 4 + 3 >> 0] << 24, C[n + 32 + 4 >> 2] = Q[r + 16 >> 0] | Q[r + 16 + 1 >> 0] << 8 | Q[r + 16 + 2 >> 0] << 16 | Q[r + 16 + 3 >> 0] << 24, C[n + 32 + 4 + 4 >> 2] = t, function (A, I, g, B, Q, E, i, e, c, a, n) { + var r; + A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, c |= 0, r = y, y = y + 336 | 0, gg(r, 64, 0, a |= 0, n |= 0), gB(r + 64 | 0, r), MI(r, 64), bg(r + 64 | 0, i, e, c), i = 0 | Ug(0, 0, 0 | e, 0 | c), o(), bg(r + 64 | 0, 34640, 15 & i, 0), mI(A, B, Q, E, a, 1, n), bg(r + 64 | 0, A, Q, E), a = 0 | Ug(0, 0, 0 | Q, 0 | E), o(), bg(r + 64 | 0, 34640, 15 & a, 0), LI(r + 320 | 0, e, c), bg(r + 64 | 0, r + 320 | 0, 8, 0), LI(r + 320 | 0, Q, E), bg(r + 64 | 0, r + 320 | 0, 8, 0), IB(r + 64 | 0, I), MI(r + 64 | 0, 256), 0 | g && (C[g >> 2] = 16, C[g + 4 >> 2] = 0), y = r; + }(A, I, g, B, E, i, e, c, a, n + 32 | 0, n), MI(n, 32), y = n, 0; + } + + function mA(A, I, g, Q, E) { + A |= 0, I |= 0, g |= 0, Q |= 0, E |= 0; + var i = 0, + e = 0; + + A: do { + if (E) { + for (e = 0 | C[g >> 2];;) { + if (e >>> 0 >= I >>> 0) { + i = 4; + break; + } + + if ((i = 0 | B[A + e >> 0]) << 24 >> 24 != 61) { + if (!Q) { + i = 9; + break; + } + + if (!(0 | qg(Q, i << 24 >> 24))) { + i = 9; + break; + } + } else E = E + -1 | 0; + + if (e = e + 1 | 0, C[g >> 2] = e, !E) { + E = 0; + break A; + } + } + + if (4 == (0 | i)) { + C[8678] = 68, E = -1; + break; + } + + if (9 == (0 | i)) { + C[8678] = 28, E = -1; + break; + } + } else E = 0; + } while (0); + + return 0 | E; + } + + function LA(A, I, g, Q, E, i, e) { + I |= 0, g |= 0, Q |= 0, E |= 0, i |= 0, e |= 0; + var o, + c, + a, + n = 0; + a = y, o = y = y + 63 & -64, y = y + 16 | 0, c = 128 + (n = A |= 0) | 0; + + do { + B[n >> 0] = 0, n = n + 1 | 0; + } while ((0 | n) < (0 | c)); + + do { + if (!((i | Q) >>> 0 > 0 | 0 == (i | Q | 0) & (E | g) >>> 0 > 4294967295 | e >>> 0 > 2147483648)) { + if (0 == (0 | E) & 0 == (0 | i) | e >>> 0 < 8192) { + C[8678] = 28, g = -1; + break; + } + + Cg(o, 16), g = (0 != (0 | lg(E, e >>> 10, I, g, o, A))) << 31 >> 31; + break; + } + + C[8678] = 22, g = -1; + } while (0); + + return y = a, 0 | g; + } + + function xA(A, I) { + var g, B, Q, E, i, e, o, c, a; + A |= 0, a = 0 - (0 | C[4 + (I |= 0) >> 2]) | 0, c = 0 - (0 | C[I + 8 >> 2]) | 0, o = 0 - (0 | C[I + 12 >> 2]) | 0, e = 0 - (0 | C[I + 16 >> 2]) | 0, i = 0 - (0 | C[I + 20 >> 2]) | 0, E = 0 - (0 | C[I + 24 >> 2]) | 0, Q = 0 - (0 | C[I + 28 >> 2]) | 0, B = 0 - (0 | C[I + 32 >> 2]) | 0, g = 0 - (0 | C[I + 36 >> 2]) | 0, C[A >> 2] = 0 - (0 | C[I >> 2]), C[A + 4 >> 2] = a, C[A + 8 >> 2] = c, C[A + 12 >> 2] = o, C[A + 16 >> 2] = e, C[A + 20 >> 2] = i, C[A + 24 >> 2] = E, C[A + 28 >> 2] = Q, C[A + 32 >> 2] = B, C[A + 36 >> 2] = g; + } + + function KA(A, I) { + A |= 0; + var g, + B, + Q = 0; + + if (g = y, B = y = y + 63 & -64, y = y + 1024 | 0, 0 | C[28 + (I |= 0) >> 2]) { + Q = 0; + + do { + Pg(A + 64 | 0, 0), Pg(A + 68 | 0, Q), T(B, 1024, A, 72), xI((0 | C[4 + (0 | C[I >> 2]) >> 2]) + ((0 | E(0 | C[I + 24 >> 2], Q)) << 10) | 0, B), Pg(A + 64 | 0, 1), T(B, 1024, A, 72), xI((0 | C[4 + (0 | C[I >> 2]) >> 2]) + (1 + (0 | E(0 | C[I + 24 >> 2], Q)) << 10) | 0, B), Q = Q + 1 | 0; + } while (Q >>> 0 < (0 | C[I + 28 >> 2]) >>> 0); + } + + MI(B, 1024), y = g; + } + + function XA(A, I) { + I |= 0; + var g = 0, + C = 0, + E = 0, + i = 0; + !function (A) { + var I, + g = 0, + C = 0; + C = 32352, I = 64 + (g = A |= 0) | 0; + + do { + B[g >> 0] = 0 | B[C >> 0], g = g + 1 | 0, C = C + 1 | 0; + } while ((0 | g) < (0 | I)); + + YA(A + 64 | 0, 0, 293); + }(A |= 0), g = 0; + + do { + i = 0 | qI(I + (g << 3) | 0), E = 0 | o(), i = (Q[(C = A + (g << 3) | 0) >> 0] | Q[C + 1 >> 0] << 8 | Q[C + 2 >> 0] << 16 | Q[C + 3 >> 0] << 24) ^ i, E = (Q[C + 4 >> 0] | Q[C + 4 + 1 >> 0] << 8 | Q[C + 4 + 2 >> 0] << 16 | Q[C + 4 + 3 >> 0] << 24) ^ E, B[C >> 0] = i, B[C + 1 >> 0] = i >> 8, B[C + 2 >> 0] = i >> 16, B[C + 3 >> 0] = i >> 24, B[C + 4 >> 0] = E, B[C + 4 + 1 >> 0] = E >> 8, B[C + 4 + 2 >> 0] = E >> 16, B[C + 4 + 3 >> 0] = E >> 24, g = g + 1 | 0; + } while (8 != (0 | g)); + } + + function jA(A) { + var I, + g, + B, + C, + E, + i, + c = 0; + return E = 0 | Q[7 + (A |= 0) >> 0], i = 0 | rg(0 | Q[A + 6 >> 0], 0, 8), c = 0 | o(), C = 0 | rg(0 | Q[A + 5 >> 0], 0, 16), c = 0 | c | o(), B = 0 | rg(0 | Q[A + 4 >> 0], 0, 24), c = 0 | (c = 0 | c | o()) | Q[A + 3 >> 0], g = 0 | rg(0 | Q[A + 2 >> 0], 0, 40), c = 0 | c | o(), I = 0 | rg(0 | Q[A + 1 >> 0], 0, 48), c = 0 | c | o(), A = 0 | rg(0 | Q[A >> 0], 0, 56), e(0 | c | o() | 0), i | E | C | B | g | I | A | 0; + } + + function TA(A, I, g, B, Q, E) { + I |= 0, Q |= 0, E |= 0; + var i, + e = 0; + return i = y, e = y = y + 63 & -64, y = y + 16 | 0, YI(64 + (A |= 0) | 0, 0 | (g |= 0), 0 | (B |= 0)), kg(A, e, A + 64 | 0, B, Q, E), 64 == (0 | C[e >> 2]) & 0 == (0 | C[e + 4 >> 2]) ? 0 | I ? (e = 0 | vg(0 | B, 0 | Q, 64, 0), B = 0 | o(), C[I >> 2] = e, C[I + 4 >> 2] = B, B = 0) : B = 0 : (0 | I && (C[I >> 2] = 0, C[I + 4 >> 2] = 0), YA(0 | A, 0, B + 64 | 0), B = -1), y = i, 0 | B; + } + + function qA(A, I) { + I |= 0; + var g, + Q = 0, + E = 0, + i = 0, + e = 0; + g = 0 | B[(A |= 0) >> 0]; + + A: do { + if ((g + -48 & 255) <= 9) { + for (E = g, i = 0, e = A;;) { + if (!(i >>> 0 < 429496730 & ((E = (E << 24 >> 24) - 48 | 0) >>> 0 > ~(Q = 10 * i | 0) >>> 0 ^ 1))) { + Q = 0; + break A; + } + + if (i = (E >>> 0 > ~Q >>> 0 ? 0 : E) + Q | 0, ((E = 0 | B[(Q = e + 1 | 0) >> 0]) - 48 & 255) > 9) break; + e = Q; + } + + (0 | Q) != (0 | A) && (0 | e) == (0 | A) | g << 24 >> 24 != 48 ? C[I >> 2] = i : Q = 0; + } else Q = 0; + } while (0); + + return 0 | Q; + } + + function VA(A) { + return ((0 - ((0 - (95 ^ (A |= 0)) | 0) >>> 8 & 63 ^ 63 | (0 - (45 ^ A) | 0) >>> 8 & 62 ^ 62 | ((A + 65439 | 0) >>> 8 ^ 255) & A + 185 & ((122 - A | 0) >>> 8 & 255 ^ 255) | ((A + -65 | 0) >>> 8 ^ 255) & A + -65 & ((90 - A | 0) >>> 8 & 255 ^ 255) | ((A + 65488 | 0) >>> 8 ^ 255) & A + 4 & ((57 - A | 0) >>> 8 & 255 ^ 255)) | 0) >>> 8 & 255 ^ 255) & (0 - (65 ^ A) | 0) >>> 8 | (0 - (95 ^ A) | 0) >>> 8 & 63 ^ 63 | (0 - (45 ^ A) | 0) >>> 8 & 62 ^ 62 | ((A + 65439 | 0) >>> 8 ^ 255) & A + 185 & ((122 - A | 0) >>> 8 & 255 ^ 255) | ((A + -65 | 0) >>> 8 ^ 255) & A + -65 & ((90 - A | 0) >>> 8 & 255 ^ 255) | ((A + 65488 | 0) >>> 8 ^ 255) & A + 4 & ((57 - A | 0) >>> 8 & 255 ^ 255) | 0; + } + + function zA(A) { + return ((0 - ((0 - (47 ^ (A |= 0)) | 0) >>> 8 & 63 ^ 63 | (0 - (43 ^ A) | 0) >>> 8 & 62 ^ 62 | ((A + 65439 | 0) >>> 8 ^ 255) & A + 185 & ((122 - A | 0) >>> 8 & 255 ^ 255) | ((A + -65 | 0) >>> 8 ^ 255) & A + -65 & ((90 - A | 0) >>> 8 & 255 ^ 255) | ((A + 65488 | 0) >>> 8 ^ 255) & A + 4 & ((57 - A | 0) >>> 8 & 255 ^ 255)) | 0) >>> 8 & 255 ^ 255) & (0 - (65 ^ A) | 0) >>> 8 | (0 - (47 ^ A) | 0) >>> 8 & 63 ^ 63 | (0 - (43 ^ A) | 0) >>> 8 & 62 ^ 62 | ((A + 65439 | 0) >>> 8 ^ 255) & A + 185 & ((122 - A | 0) >>> 8 & 255 ^ 255) | ((A + -65 | 0) >>> 8 ^ 255) & A + -65 & ((90 - A | 0) >>> 8 & 255 ^ 255) | ((A + 65488 | 0) >>> 8 ^ 255) & A + 4 & ((57 - A | 0) >>> 8 & 255 ^ 255) | 0; + } + + function WA(A, I) { + I |= 0; + var g = 0, + B = 0; + if (g = 0 | yg(0 | C[72 + (A |= 0) >> 2], 0 | C[A + 72 + 4 >> 2], 3), o(), (127 & g) >>> 0 < 112) 112 - (127 & g) | 0 && BA(A + 80 + (127 & g) | 0, 33056, 112 - (127 & g) | 0);else { + 128 - (127 & g) | 0 && BA(A + 80 + (127 & g) | 0, 33056, 128 - (127 & g) | 0), D(A, A + 80 | 0, I, I + 640 | 0), B = 112 + (g = A + 80 | 0) | 0; + + do { + C[g >> 2] = 0, g = g + 4 | 0; + } while ((0 | g) < (0 | B)); + } + NI(A + 192 | 0, A + 64 | 0, 16), D(A, A + 80 | 0, I, I + 640 | 0); + } + + function OA(A, I) { + var g, B, Q, E, i, e, o, c, a; + A |= 0, a = 0 | C[4 + (I |= 0) >> 2], c = 0 | C[I + 8 >> 2], o = 0 | C[I + 12 >> 2], e = 0 | C[I + 16 >> 2], i = 0 | C[I + 20 >> 2], E = 0 | C[I + 24 >> 2], Q = 0 | C[I + 28 >> 2], B = 0 | C[I + 32 >> 2], g = 0 | C[I + 36 >> 2], C[A >> 2] = C[I >> 2], C[A + 4 >> 2] = a, C[A + 8 >> 2] = c, C[A + 12 >> 2] = o, C[A + 16 >> 2] = e, C[A + 20 >> 2] = i, C[A + 24 >> 2] = E, C[A + 28 >> 2] = Q, C[A + 32 >> 2] = B, C[A + 36 >> 2] = g; + } + + function ZA(A) { + A |= 0; + var I = 0, + g = 0, + Q = 0; + + A: do { + if (3 & A) for (I = A, g = A;;) { + if (!(0 | B[g >> 0])) break A; + + if (!(3 & (I = g = g + 1 | 0))) { + I = g, Q = 5; + break; + } + } else I = A, Q = 5; + } while (0); + + if (5 == (0 | Q)) { + for (; !((-2139062144 & (g = 0 | C[I >> 2]) ^ -2139062144) & g + -16843009);) { + I = I + 4 | 0; + } + + if ((255 & g) << 24 >> 24) do { + I = I + 1 | 0; + } while (0 != (0 | B[I >> 0])); + } + + return I - A | 0; + } + + function $A(A, I) { + I |= 0; + var g = 0; + C[(A |= 0) >> 2] = 1634760805, C[A + 4 >> 2] = 857760878, C[A + 8 >> 2] = 2036477234, C[A + 12 >> 2] = 1797285236, g = 0 | Vg(I), C[A + 16 >> 2] = g, g = 0 | Vg(I + 4 | 0), C[A + 20 >> 2] = g, g = 0 | Vg(I + 8 | 0), C[A + 24 >> 2] = g, g = 0 | Vg(I + 12 | 0), C[A + 28 >> 2] = g, g = 0 | Vg(I + 16 | 0), C[A + 32 >> 2] = g, g = 0 | Vg(I + 20 | 0), C[A + 36 >> 2] = g, g = 0 | Vg(I + 24 | 0), C[A + 40 >> 2] = g, I = 0 | Vg(I + 28 | 0), C[A + 44 >> 2] = I; + } + + function AI(A, I, g) { + I |= 0, g |= 0; + var C = 0; + B[7 + (A |= 0) >> 0] = I, C = 0 | yg(0 | I, 0 | g, 8), o(), B[A + 6 >> 0] = C, C = 0 | yg(0 | I, 0 | g, 16), o(), B[A + 5 >> 0] = C, C = 0 | yg(0 | I, 0 | g, 24), o(), B[A + 4 >> 0] = C, B[A + 3 >> 0] = g, C = 0 | yg(0 | I, 0 | g, 40), o(), B[A + 2 >> 0] = C, C = 0 | yg(0 | I, 0 | g, 48), o(), B[A + 1 >> 0] = C, g = 0 | yg(0 | I, 0 | g, 56), o(), B[A >> 0] = g; + } + + function II(A, I, g) { + var B, C; + g |= 0, B = y, C = y = y + 63 & -64, y = y + 48 | 0, _A(A |= 0, 40 + (I |= 0) | 0, I), lA(A + 40 | 0, I + 40 | 0, I), u(A + 80 | 0, A, g + 40 | 0), u(A + 40 | 0, A + 40 | 0, g), u(A + 120 | 0, g + 120 | 0, I + 120 | 0), u(A, I + 80 | 0, g + 80 | 0), _A(C, A, A), lA(A, A + 80 | 0, A + 40 | 0), _A(A + 40 | 0, A + 80 | 0, A + 40 | 0), lA(A + 80 | 0, C, A + 120 | 0), _A(A + 120 | 0, C, A + 120 | 0), y = B; + } + + function gI(A, I, g) { + var B, C; + g |= 0, B = y, C = y = y + 63 & -64, y = y + 48 | 0, _A(A |= 0, 40 + (I |= 0) | 0, I), lA(A + 40 | 0, I + 40 | 0, I), u(A + 80 | 0, A, g), u(A + 40 | 0, A + 40 | 0, g + 40 | 0), u(A + 120 | 0, g + 120 | 0, I + 120 | 0), u(A, I + 80 | 0, g + 80 | 0), _A(C, A, A), lA(A, A + 80 | 0, A + 40 | 0), _A(A + 40 | 0, A + 80 | 0, A + 40 | 0), _A(A + 80 | 0, C, A + 120 | 0), lA(A + 120 | 0, C, A + 120 | 0), y = B; + } + + function BI(A, I, g) { + var B, C; + g |= 0, B = y, C = y = y + 63 & -64, y = y + 48 | 0, _A(A |= 0, 40 + (I |= 0) | 0, I), lA(A + 40 | 0, I + 40 | 0, I), u(A + 80 | 0, A, g + 40 | 0), u(A + 40 | 0, A + 40 | 0, g), u(A + 120 | 0, g + 80 | 0, I + 120 | 0), _A(C, I + 80 | 0, I + 80 | 0), lA(A, A + 80 | 0, A + 40 | 0), _A(A + 40 | 0, A + 80 | 0, A + 40 | 0), lA(A + 80 | 0, C, A + 120 | 0), _A(A + 120 | 0, C, A + 120 | 0), y = B; + } + + function CI(A, I, g) { + var B, C; + g |= 0, B = y, C = y = y + 63 & -64, y = y + 48 | 0, _A(A |= 0, 40 + (I |= 0) | 0, I), lA(A + 40 | 0, I + 40 | 0, I), u(A + 80 | 0, A, g), u(A + 40 | 0, A + 40 | 0, g + 40 | 0), u(A + 120 | 0, g + 80 | 0, I + 120 | 0), _A(C, I + 80 | 0, I + 80 | 0), lA(A, A + 80 | 0, A + 40 | 0), _A(A + 40 | 0, A + 80 | 0, A + 40 | 0), _A(A + 80 | 0, C, A + 120 | 0), lA(A + 120 | 0, C, A + 120 | 0), y = B; + } + + function QI(A, I) { + A |= 0, I |= 0; + var g, + C, + Q = 0; + g = y, C = y = y + 63 & -64, y = y + 208 | 0, Q = 0; + + do { + B[A + Q >> 0] = 0 | B[I + Q >> 0], Q = Q + 1 | 0; + } while (32 != (0 | Q)); + + return B[A >> 0] = -8 & B[A >> 0], B[A + 31 >> 0] = 63 & B[A + 31 >> 0] | 64, iA(C + 40 | 0, A), function (A, I, g) { + var B, C; + A |= 0, B = y, C = y = y + 63 & -64, y = y + 96 | 0, _A(C + 48 | 0, g |= 0, I |= 0), lA(C, g, I), W(C, C), u(A, C + 48 | 0, C), y = B; + }(C, C + 40 + 40 | 0, C + 40 + 80 | 0), CA(A, C), y = g, 0; + } + + function EI(A, I, g) { + var E, i; + + if (A |= 0, I |= 0, g |= 0, E = y, i = y = y + 63 & -64, y = y + 16 | 0, C[i + 4 >> 2] = A, C[i >> 2] = I, B[i + 8 >> 0] = 0, 0 | g) { + A = 0; + + do { + B[i + 8 >> 0] = B[i + 8 >> 0] | B[(0 | C[i >> 2]) + A >> 0] ^ B[(0 | C[i + 4 >> 2]) + A >> 0], A = A + 1 | 0; + } while ((0 | A) != (0 | g)); + } + + return y = E, ((511 + (0 | Q[i + 8 >> 0]) | 0) >>> 8 & 1) - 1 | 0; + } + + function iI(A, I) { + A |= 0; + var g, + Q, + E = 0; + + if (g = y, Q = y = y + 63 & -64, y = y + 64 | 0, !(((I |= 0) - 1 & 255) > 63)) { + B[Q >> 0] = I, B[Q + 1 >> 0] = 0, B[Q + 2 >> 0] = 1, B[Q + 3 >> 0] = 1, Wg(Q + 4 | 0), LI(Q + 8 | 0, 0, 0), E = 48 + (I = Q + 16 | 0) | 0; + + do { + C[I >> 2] = 0, I = I + 4 | 0; + } while ((0 | I) < (0 | E)); + + return XA(A, Q), void (y = g); + } + + SB(); + } + + function eI(A, I, g) { + var Q, E; + A |= 0, I |= 0, g |= 0, Q = y, E = y = y + 63 & -64, y = y + 16 | 0, C[E + 8 >> 2] = A, C[E + 4 >> 2] = I, C[E >> 2] = 0, A = 0; + + do { + C[E >> 2] = C[E >> 2] | 255 & (B[(0 | C[E + 4 >> 2]) + A >> 0] ^ B[(0 | C[E + 8 >> 2]) + A >> 0]), A = A + 1 | 0; + } while ((0 | A) != (0 | g)); + + return y = Q, ((511 + (0 | C[E >> 2]) | 0) >>> 8 & 1) - 1 | 0; + } + + function oI(A, I, g) { + I |= 0, g |= 0; + var C = 0, + E = 0; + C = 0 | B[(A |= 0) >> 0]; + + A: do { + if (C << 24 >> 24) for (;;) { + if (g = g + -1 | 0, !(C << 24 >> 24 == (E = 0 | B[I >> 0]) << 24 >> 24 & 0 != (0 | g) & E << 24 >> 24 != 0)) break A; + + if (I = I + 1 | 0, !((C = 0 | B[(A = A + 1 | 0) >> 0]) << 24 >> 24)) { + C = 0; + break; + } + } else C = 0; + } while (0); + + return (255 & C) - (0 | Q[I >> 0]) | 0; + } + + function cI(A, I) { + A |= 0, I |= 0; + var g, + C, + Q = 0, + i = 0, + e = 0, + o = 0; + + for (g = y, C = y = y + 63 & -64, y = y + 16 | 0, i = 10; o = 255 & ((e = I) + (0 | E(I = (I >>> 0) / 10 | 0, -10)) | 48), B[C + (Q = i + -1 | 0) >> 0] = o, e >>> 0 > 9 & 0 != (0 | Q);) { + i = Q; + } + + BA(0 | A, C + Q | 0, 0 | (o = 11 - i | 0)), B[A + o >> 0] = 0, y = g; + } + + function aI(A, I) { + var g, B; + g = y, B = y = y + 63 & -64, y = y + 48 | 0, _(A |= 0, I |= 0), _(A + 80 | 0, I + 40 | 0), l(A + 120 | 0, I + 80 | 0), _A(A + 40 | 0, I, I + 40 | 0), _(B, A + 40 | 0), _A(A + 40 | 0, A + 80 | 0, A), lA(A + 80 | 0, A + 80 | 0, A), lA(A, B, A + 40 | 0), lA(A + 120 | 0, A + 120 | 0, A + 80 | 0), y = g; + } + + function nI(A, I, g) { + var C, E; + if (A |= 0, I |= 0, g |= 0, E = y, C = y = y + 63 & -64, y = y + 16 | 0, B[C >> 0] = 0, 0 | function (A, I, g) { + A |= 0, I |= 0; + var C, + E, + i = 0; + if (E = y, C = y = y + 63 & -64, y = y + 336 | 0, 0 | function (A) { + A |= 0; + var I, + g, + C = 0, + E = 0, + i = 0, + e = 0; + I = y, g = y = y + 63 & -64, y = y + 16 | 0, B[g >> 0] = 0, B[g + 1 >> 0] = 0, B[g + 2 >> 0] = 0, B[g + 3 >> 0] = 0, B[g + 4 >> 0] = 0, B[g + 5 >> 0] = 0, B[g + 6 >> 0] = 0, i = 0; + + do { + C = 0 | B[A + i >> 0], E = 0; + + do { + B[(e = g + E | 0) >> 0] = B[e >> 0] | B[33184 + (E << 5) + i >> 0] ^ C, E = E + 1 | 0; + } while (7 != (0 | E)); + + i = i + 1 | 0; + } while (31 != (0 | i)); + + C = 127 & B[A + 31 >> 0], E = 0; + + do { + B[(e = g + E | 0) >> 0] = B[e >> 0] | C ^ B[33184 + (E << 5) + 31 >> 0], E = E + 1 | 0; + } while (7 != (0 | E)); + + C = 0, E = 0; + + do { + E = (0 | Q[g + C >> 0]) - 1 | E, C = C + 1 | 0; + } while (7 != (0 | C)); + + return y = I, E >>> 8 & 1 | 0; + }(g |= 0)) i = -1;else { + i = 0; + + do { + B[A + i >> 0] = 0 | B[I + i >> 0], i = i + 1 | 0; + } while (32 != (0 | i)); + + for (B[A >> 0] = -8 & B[A >> 0], B[A + 31 >> 0] = 63 & B[A + 31 >> 0] | 64, U(C + 288 | 0, g), Sg(C + 240 | 0), Kg(C + 192 | 0), OA(C + 144 | 0, C + 288 | 0), Sg(C + 96 | 0), i = 254, I = 0; g = I, AA(C + 240 | 0, C + 144 | 0, g ^= I = (0 | Q[A + (i >>> 3) >> 0]) >>> (7 & i) & 1), AA(C + 192 | 0, C + 96 | 0, g), lA(C + 48 | 0, C + 144 | 0, C + 96 | 0), lA(C, C + 240 | 0, C + 192 | 0), _A(C + 240 | 0, C + 240 | 0, C + 192 | 0), _A(C + 192 | 0, C + 144 | 0, C + 96 | 0), u(C + 96 | 0, C + 48 | 0, C + 240 | 0), u(C + 192 | 0, C + 192 | 0, C), _(C + 48 | 0, C), _(C, C + 240 | 0), _A(C + 144 | 0, C + 96 | 0, C + 192 | 0), lA(C + 192 | 0, C + 96 | 0, C + 192 | 0), u(C + 240 | 0, C, C + 48 | 0), lA(C, C, C + 48 | 0), _(C + 192 | 0, C + 192 | 0), v(C + 96 | 0, C), _(C + 144 | 0, C + 144 | 0), _A(C + 48 | 0, C + 48 | 0, C + 96 | 0), u(C + 96 | 0, C + 288 | 0, C + 192 | 0), u(C + 192 | 0, C, C + 48 | 0), i;) { + i = i + -1 | 0; + } + + AA(C + 240 | 0, C + 144 | 0, I), AA(C + 192 | 0, C + 96 | 0, I), W(C + 192 | 0, C + 192 | 0), u(C + 240 | 0, C + 240 | 0, C + 192 | 0), CA(A, C + 240 | 0), i = 0; + } + return y = E, 0 | i; + }(A, I, g)) I = -1;else { + I = 0; + + do { + B[C >> 0] = B[C >> 0] | B[A + I >> 0], I = I + 1 | 0; + } while (32 != (0 | I)); + + I = 0 - ((511 + (0 | Q[C >> 0]) | 0) >>> 8 & 1) | 0; + } + return y = E, 0 | I; + } + + function rI(A, I, g, B, C, Q, E) { + A |= 0, I |= 0, C |= 0, Q |= 0, E |= 0; + var i, + e = 0; + e = 0 | Ug(0, 1, 0 | (e = 0 | yg(0 | (e = 0 | vg(0 | (g |= 0), 0 | (B |= 0), 63, 0)), 0 | o(), 6)), 0 | o()), (i = 0 | o()) >>> 0 < 0 | 0 == (0 | i) & e >>> 0 < Q >>> 0 ? SB() : mI(A, I, g, B, C, Q, E); + } + + function tI(A, I, g) { + A |= 0, I |= 0; + var C, + Q, + E = 0, + i = 0; + Q = y, i = y = y + 63 & -64, y = y + 64 | 0, RI(i, g |= 0, 32, 0), E = i, C = (g = I) + 32 | 0; + + do { + B[g >> 0] = 0 | B[E >> 0], g = g + 1 | 0, E = E + 1 | 0; + } while ((0 | g) < (0 | C)); + + return MI(i, 64), i = 0 | AB(A, I), y = Q, 0 | i; + } + + function fI(A, I, g, B, C, Q, E) { + var i, e; + A |= 0, I |= 0, C |= 0, E |= 0, i = y, e = y = y + 63 & -64, y = y + 80 | 0, 0 == (0 | (g |= 0)) & 0 == (0 | (B |= 0)) || (Pg(e + 64 | 0, Q |= 0), $A(e, E), UI(e, C, e + 64 | 0), M(e, I, A, g, B), MI(e, 64)), y = i; + } + + function wI(A, I, g) { + var C, Q; + A |= 0, C = y, Q = y = y + 63 & -64, y = y + 160 | 0, RI(I |= 0, g |= 0, 32, 0), B[I >> 0] = -8 & B[I >> 0], B[I + 31 >> 0] = 63 & B[I + 31 >> 0] | 64, iA(Q, I), sI(A, Q), YI(0 | I, 0 | g, 32), YI(I + 32 | 0, 0 | A, 32), y = C; + } + + function yI(A, I, g, B) { + A |= 0, I |= 0, g |= 0, B |= 0; + + A: do { + if (B >>> 0 > 0 | 0 == (0 | B) & g >>> 0 > 4294967295) C[8678] = 22, g = -1;else { + switch (0 | oB(A, I, g)) { + case 0: + g = 0; + break A; + + case -35: + C[8678] = 28; + } + + g = -1; + } + } while (0); + + return 0 | g; + } + + function sI(A, I) { + var g, C; + A |= 0, g = y, C = y = y + 63 & -64, y = y + 144 | 0, W(C + 96 | 0, 80 + (I |= 0) | 0), u(C + 48 | 0, I, C + 96 | 0), u(C, I + 40 | 0, C + 96 | 0), CA(A, C), I = (0 | sg(C + 48 | 0)) << 7, B[A + 31 >> 0] = I ^ (0 | Q[A + 31 >> 0]), y = g; + } + + function hI(A, I, g, B) { + A |= 0, I |= 0, g |= 0, B |= 0; + + A: do { + if (B >>> 0 > 0 | 0 == (0 | B) & g >>> 0 > 4294967295) C[8678] = 22, g = -1;else { + switch (0 | cB(A, I, g)) { + case 0: + g = 0; + break A; + + case -35: + C[8678] = 28; + } + + g = -1; + } + } while (0); + + return 0 | g; + } + + function DI(A, I, g, B, C, Q, E, i) { + var e; + return A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, e = y, y = y + 32 | 0, 0 | jg(e, E |= 0, i |= 0) ? B = -1 : (B = 0 | ng(A, I, g, B, C, Q, e), MI(e, 32)), y = e, 0 | B; + } + + function FI(A, I, g, B, C, Q, E, i) { + var e; + return A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, e = y, y = y + 32 | 0, 0 | jg(e, E |= 0, i |= 0) ? B = -1 : (tg(A, I, g, B, C, Q, e), MI(e, 32), B = 0), y = e, 0 | B; + } + + function pI(A) { + A |= 0; + var I = 0, + g = 0, + C = 0, + Q = 0, + E = 0; + + for (Q = 0, E = 32, I = 1; Q = (255 & (g = 0 | B[A + (E = E + -1 | 0) >> 0])) - (255 & (C = 0 | B[32320 + E >> 0])) >> 8 & (I &= 255) | 255 & Q, E;) { + I &= (65535 + (255 & (C ^ g)) | 0) >>> 8; + } + + return 0 != (0 | Q) | 0; + } + + function uI(A, I, g, B) { + return B = 0 | vg(0 | vg(0 | (g |= 0), 0 | (B |= 0), 0 | (A |= 0), 0 | (I |= 0)), 0 | o(), 0 | (B = 0 | Qg(-2 & (B = 0 | rg(0 | A, 0 | I, 1)) | 0, 1 & (0 | o()) | 0, 0 | g, 0)), 0 | o()), e(0 | o()), 0 | B; + } + + function HI(A, I, g, B) { + A |= 0, I |= 0, g |= 0, B |= 0; + + do { + if (!(g >>> 0 > 64 | (B + -1 | 0) >>> 0 > 63)) { + if (0 == (0 | I) | 0 == (0 | g)) { + iI(A, 255 & B), I = 0; + break; + } + + vA(A, 255 & B, I, 255 & g), I = 0; + break; + } + + I = -1; + } while (0); + + return 0 | I; + } + + function kI(A) { + var I, + g, + B, + C = 0; + return g = 0 | Q[(A |= 0) >> 0], B = 0 | rg(0 | Q[A + 1 >> 0], 0, 8), C = 0 | o(), I = 0 | rg(0 | Q[A + 2 >> 0], 0, 16), C = 0 | C | o(), A = 0 | rg(0 | Q[A + 3 >> 0], 0, 24), e(0 | C | o() | 0), B | g | I | A | 0; + } + + function lI(A, I) { + A |= 0, I |= 0; + var g, + C, + E = 0; + g = y, C = y = y + 63 & -64, y = y + 16 | 0, B[C >> 0] = 0, E = 0; + + do { + B[C >> 0] = B[C >> 0] | B[A + E >> 0], E = E + 1 | 0; + } while ((0 | E) != (0 | I)); + + return y = g, (511 + (0 | Q[C >> 0]) | 0) >>> 8 & 1 | 0; + } + + function _I(A, I, g) { + A |= 0, I |= 0; + var B = 0; + (g |= 0) ? (B = 0 | Vg(g), C[A + 48 >> 2] = B, g = 0 | Vg(g + 4 | 0)) : (C[A + 48 >> 2] = 0, g = 0), C[A + 52 >> 2] = g, B = 0 | Vg(I), C[A + 56 >> 2] = B, B = 0 | Vg(I + 4 | 0), C[A + 60 >> 2] = B; + } + + function GI(A, I, g) { + var B, C; + A |= 0, I |= 0, g |= 0, B = y, C = y = y + 63 & -64, y = y + 384 | 0, Lg(C, 0, 0, 24), Rg(C, I, 32, 0), Rg(C, g, 32, 0), zg(C, A, 24), y = B; + } + + function dI(A, I, g, B, C, Q, E) { + return I |= 0, C |= 0, Q |= 0, E |= 0, 0 | ((B |= 0) >>> 0 < 0 | 0 == (0 | B) & (g |= 0) >>> 0 < 16 ? -1 : 0 | DI(A |= 0, I + 16 | 0, I, g = 0 | vg(0 | g, 0 | B, -16, -1), 0 | o(), C, Q, E)); + } + + function YI(A, I, g) { + var C = 0; + + if ((0 | (I |= 0)) < (0 | (A |= 0)) & (0 | A) < (I + (g |= 0) | 0)) { + for (C = A, I = I + g | 0, A = A + g | 0; (0 | g) > 0;) { + I = I - 1 | 0, g = g - 1 | 0, B[(A = A - 1 | 0) >> 0] = 0 | B[I >> 0]; + } + + A = C; + } else BA(A, I, g); + + return 0 | A; + } + + function MI(A, I) { + var g, Q; + + if (A |= 0, I |= 0, g = y, Q = y = y + 63 & -64, y = y + 16 | 0, C[Q >> 2] = A, 0 | I) { + A = 0; + + do { + B[(0 | C[Q >> 2]) + A >> 0] = 0, A = A + 1 | 0; + } while ((0 | A) != (0 | I)); + } + + y = g; + } + + function SI(A, I) { + A |= 0, I |= 0; + var g = 0, + B = 0, + Q = 0, + E = 0; + g = 0; + + do { + E = I + (g << 3) | 0, Q = C[4 + (B = A + (g << 3) | 0) >> 2] ^ C[E + 4 >> 2], C[B >> 2] = C[B >> 2] ^ C[E >> 2], C[B + 4 >> 2] = Q, g = g + 1 | 0; + } while (128 != (0 | g)); + } + + function UI(A, I, g) { + A |= 0, I |= 0, g = (g |= 0) ? 0 | Vg(g) : 0, C[A + 48 >> 2] = g, g = 0 | Vg(I), C[A + 52 >> 2] = g, g = 0 | Vg(I + 4 | 0), C[A + 56 >> 2] = g, I = 0 | Vg(I + 8 | 0), C[A + 60 >> 2] = I; + } + + function vI(A, I) { + var g, C; + I |= 0, C = y, y = y + 64 | 0, function (A, I) { + var g; + I |= 0, g = y, y = y + 64 | 0, VI(A |= 0, g), P(A + 208 | 0, g, 64, 0), VI(A + 208 | 0, I), MI(g, 64), y = g; + }(A |= 0, C), A = C, g = I + 32 | 0; + + do { + B[I >> 0] = 0 | B[A >> 0], I = I + 1 | 0, A = A + 1 | 0; + } while ((0 | I) < (0 | g)); + + y = C; + } + + function bI(A) { + var I; + return A |= 0, ((I = 0 | C[8808]) + A | 0) >>> 0 > (0 | r()) >>> 0 && 0 == (0 | f(I + A | 0)) ? (C[8678] = 48, 0 | (A = -1)) : (C[8808] = I + A, 0 | (A = I)); + } + + function JI(A, I, g, B, C) { + var Q; + A |= 0, I |= 0, g |= 0, B |= 0, Q = y, y = y + 416 | 0, function (A, I) { + kA(A |= 0, I |= 0); + }(Q, C |= 0), function (A, I, g, B) { + xg(A |= 0, I |= 0, g |= 0, B |= 0); + }(Q, I, g, B), vI(Q, A), y = Q; + } + + function PI(A) { + var I, + g = 0; + C[64 + (A |= 0) >> 2] = 0, C[A + 64 + 4 >> 2] = 0, C[A + 64 + 8 >> 2] = 0, C[A + 64 + 12 >> 2] = 0, g = 32352, I = A + 64 | 0; + + do { + C[A >> 2] = C[g >> 2], A = A + 4 | 0, g = g + 4 | 0; + } while ((0 | A) < (0 | I)); + } + + function RI(A, I, g, B) { + var C, Q; + A |= 0, I |= 0, g |= 0, B |= 0, C = y, Q = y = y + 63 & -64, y = y + 208 | 0, PI(Q), P(Q, I, g, B), VI(Q, A), y = C; + } + + function NI(A, I, g) { + A |= 0, I |= 0; + var B = 0, + Q = 0; + + if ((g |= 0) >>> 3 | 0) { + B = 0; + + do { + AI(A + (B << 3) | 0, 0 | C[(Q = I + (B << 3) | 0) >> 2], 0 | C[Q + 4 >> 2]), B = B + 1 | 0; + } while ((0 | B) != (g >>> 3 | 0)); + } + } + + function mI(A, I, g, B, C, Q, E) { + A |= 0, I |= 0, C |= 0, Q |= 0, E |= 0, (B |= 0) >>> 0 > 0 | 0 == (0 | B) & (g |= 0) >>> 0 > 4294967295 ? SB() : fI(A, I, g, B, C, Q, E); + } + + function LI(A, I, g) { + I |= 0, g |= 0, B[(A |= 0) >> 0] = I, B[A + 1 >> 0] = I >> 8, B[A + 2 >> 0] = I >> 16, B[A + 3 >> 0] = I >> 24, B[A + 4 >> 0] = g, B[A + 4 + 1 >> 0] = g >> 8, B[A + 4 + 2 >> 0] = g >> 16, B[A + 4 + 3 >> 0] = g >> 24; + } + + function xI(A, I) { + A |= 0, I |= 0; + var g = 0, + B = 0, + Q = 0, + E = 0; + g = 0; + + do { + E = 0 | qI(I + (g << 3) | 0), Q = 0 | o(), C[(B = A + (g << 3) | 0) >> 2] = E, C[B + 4 >> 2] = Q, g = g + 1 | 0; + } while (128 != (0 | g)); + } + + function KI(A, I, g, B, C, Q, E) { + return A |= 0, I |= 0, C |= 0, Q |= 0, E |= 0, (B |= 0) >>> 0 > 0 | 0 == (0 | B) & (g |= 0) >>> 0 > 4294967279 ? (SB(), 0) : 0 | FI(A + 16 | 0, A, I, g, B, C, Q, E); + } + + function XI(A) { + return (0 - (62 ^ (A |= 0)) | 0) >>> 8 & 45 ^ 45 | (A + 65510 | 0) >>> 8 & 255 & A + 65 | (0 - (63 ^ A) | 0) >>> 8 & 95 ^ 95 | (A + 65484 | 0) >>> 8 & A + 71 & ((A + 65510 | 0) >>> 8 & 255 ^ 255) | (A + 65474 | 0) >>> 8 & A + 252 & ((A + 65484 | 0) >>> 8 & 255 ^ 255) | 0; + } + + function jI(A) { + return (0 - (62 ^ (A |= 0)) | 0) >>> 8 & 43 ^ 43 | (A + 65510 | 0) >>> 8 & 255 & A + 65 | (0 - (63 ^ A) | 0) >>> 8 & 47 ^ 47 | (A + 65484 | 0) >>> 8 & A + 71 & ((A + 65510 | 0) >>> 8 & 255 ^ 255) | (A + 65474 | 0) >>> 8 & A + 252 & ((A + 65484 | 0) >>> 8 & 255 ^ 255) | 0; + } + + function TI(A, I, g, B, C, Q, E) { + return B |= 0, ((I |= 0) - 1 | 0) >>> 0 > 63 | (E |= 0) >>> 0 > 64 ? B = -1 : (function (A, I, g, B, C, Q, E) { + var i, e; + A |= 0, g |= 0, B |= 0, E |= 0, i = y, e = y = y + 63 & -64, y = y + 368 | 0, 0 == (0 | (I |= 0)) & (0 != (0 | (C |= 0)) | 0 != (0 | (Q |= 0))) && SB(), A || SB(), (B + -1 & 255) > 63 && SB(), 0 != (0 | g) | E << 24 >> 24 == 0 || SB(), (255 & E) > 64 && SB(), E << 24 >> 24 ? vA(e, B, g, E) : iI(e, B), $(e, I, C, Q), b(e, A, B), y = i; + }(A |= 0, g |= 0, Q |= 0, 255 & I, B, C |= 0, 255 & E), B = 0), 0 | B; + } + + function qI(A) { + var I; + return I = Q[(A |= 0) >> 0] | Q[A + 1 >> 0] << 8 | Q[A + 2 >> 0] << 16 | Q[A + 3 >> 0] << 24, e(Q[A + 4 >> 0] | Q[A + 4 + 1 >> 0] << 8 | Q[A + 4 + 2 >> 0] << 16 | Q[A + 4 + 3 >> 0] << 24 | 0), 0 | I; + } + + function VI(A, I) { + var g, B; + I |= 0, g = y, B = y = y + 63 & -64, y = y + 704 | 0, WA(A |= 0, B), NI(I, A, 64), MI(B, 704), MI(A, 208), y = g; + } + + function zI(A, I, g, B, C, Q) { + A |= 0, I |= 0, C |= 0, Q |= 0, (B |= 0) >>> 0 > 0 | 0 == (0 | B) & (g |= 0) >>> 0 > 4294967295 ? SB() : function (A, I, g, B, C, Q, E, i) { + var e, o; + A |= 0, I |= 0, C |= 0, i |= 0, e = y, o = y = y + 63 & -64, y = y + 80 | 0, 0 == (0 | (g |= 0)) & 0 == (0 | (B |= 0)) || (Pg(o + 64 | 0, 1), Pg(o + 64 + 4 | 0, 0), $A(o, i), _I(o, C, o + 64 | 0), M(o, I, A, g, B), MI(o, 64)), y = e; + }(A, I, g, B, C, 0, 0, Q); + } + + function WI(A) { + var I = 0, + g = 0; + I = 127 & B[31 + (A |= 0) >> 0] ^ 127, g = 30; + + do { + I |= ~B[A + g >> 0], g = g + -1 | 0; + } while (0 != (0 | g)); + + return (236 - (0 | Q[A >> 0]) & 511 + (255 & I)) >>> 8 & 1 ^ 1 | 0; + } + + function OI(A, I, g, B, C) { + A |= 0, B |= 0, C |= 0, (g |= 0) >>> 0 > 0 | 0 == (0 | g) & (I |= 0) >>> 0 > 4294967295 ? SB() : gg(A, I, g, B, C); + } + + function ZI(A, I, g) { + var B, C; + return B = 0 | yg(0 | (A |= 0), 0 | (I |= 0), 0 | (g |= 0)), C = 0 | o(), g = 0 | rg(0 | A, 0 | I, 64 - g | 0), e(0 | o() | C | 0), g | B | 0; + } + + function $I(A, I, g) { + var B, C; + return B = 0 | rg(0 | (A |= 0), 0 | (I |= 0), 0 | (g |= 0)), C = 0 | o(), g = 0 | yg(0 | A, 0 | I, 64 - g | 0), e(0 | o() | C | 0), g | B | 0; + } + + function Ag(A, I, g, B) { + var Q; + return Q = y, y = y + 16 | 0, function (A, I, g, B, Q) { + A |= 0, g |= 0, B |= 0, Q |= 0; + var E = 0, + c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0; + if (!(I |= 0)) return B ? Q ? (C[Q >> 2] = 0 | A, C[Q + 4 >> 2] = 0 & I, Q = 0, 0 | (e(0 | (B = 0)), Q)) : (Q = 0, 0 | (e(0 | (B = 0)), Q)) : (0 | Q && (C[Q >> 2] = (A >>> 0) % (g >>> 0), C[Q + 4 >> 2] = 0), Q = (A >>> 0) / (g >>> 0) >>> 0, 0 | (e(0 | (B = 0)), Q)); + + do { + if (g) { + if (0 | B) { + if ((c = (0 | i(0 | B)) - (0 | i(0 | I)) | 0) >>> 0 <= 31) { + w = c + 1 | 0, a = A >>> ((c + 1 | 0) >>> 0) & c - 31 >> 31 | I << 31 - c, f = I >>> ((c + 1 | 0) >>> 0) & c - 31 >> 31, E = 0, c = A << 31 - c; + break; + } + + return Q ? (C[Q >> 2] = 0 | A, C[Q + 4 >> 2] = I | 0 & I, Q = 0, 0 | (e(0 | (B = 0)), Q)) : (Q = 0, 0 | (e(0 | (B = 0)), Q)); + } + + if (g - 1 & g | 0) { + w = c = 33 + (0 | i(0 | g)) - (0 | i(0 | I)) | 0, a = 32 - c - 1 >> 31 & I >>> ((c - 32 | 0) >>> 0) | (I << 32 - c | A >>> (c >>> 0)) & c - 32 >> 31, f = c - 32 >> 31 & I >>> (c >>> 0), E = A << 64 - c & 32 - c >> 31, c = (I << 64 - c | A >>> ((c - 32 | 0) >>> 0)) & 32 - c >> 31 | A << 32 - c & c - 33 >> 31; + break; + } + + return 0 | Q && (C[Q >> 2] = g - 1 & A, C[Q + 4 >> 2] = 0), 1 == (0 | g) ? (Q = 0 | A, 0 | (e(0 | (B = I | 0 & I)), Q)) : (B = I >>> ((Q = 0 | nB(0 | g)) >>> 0) | 0, Q = I << 32 - Q | A >>> (Q >>> 0) | 0, 0 | (e(0 | B), Q)); + } + + if (!B) return 0 | Q && (C[Q >> 2] = (I >>> 0) % (g >>> 0), C[Q + 4 >> 2] = 0), Q = (I >>> 0) / (g >>> 0) >>> 0, 0 | (e(0 | (B = 0)), Q); + if (!A) return 0 | Q && (C[Q >> 2] = 0, C[Q + 4 >> 2] = (I >>> 0) % (B >>> 0)), Q = (I >>> 0) / (B >>> 0) >>> 0, 0 | (e(0 | (g = 0)), Q); + if (!(B - 1 & B)) return 0 | Q && (C[Q >> 2] = 0 | A, C[Q + 4 >> 2] = B - 1 & I | 0 & I), g = 0, Q = I >>> ((0 | nB(0 | B)) >>> 0), 0 | (e(0 | g), Q); + + if ((c = (0 | i(0 | B)) - (0 | i(0 | I)) | 0) >>> 0 <= 30) { + w = c + 1 | 0, a = I << 31 - c | A >>> ((c + 1 | 0) >>> 0), f = I >>> ((c + 1 | 0) >>> 0), E = 0, c = A << 31 - c; + break; + } + + return Q ? (C[Q >> 2] = 0 | A, C[Q + 4 >> 2] = I | 0 & I, Q = 0, 0 | (e(0 | (B = 0)), Q)) : (Q = 0, 0 | (e(0 | (B = 0)), Q)); + } while (0); + + if (w) { + r = 0 | vg(0 | g, B | 0 & B | 0, -1, -1), t = 0 | o(), n = c, I = f, A = w, c = 0; + + do { + s = n, n = E >>> 31 | n << 1, E = c | E << 1, Ug(0 | r, 0 | t, 0 | (s = a << 1 | s >>> 31 | 0), 0 | (y = a >>> 31 | I << 1 | 0)), c = 1 & (f = (w = 0 | o()) >> 31 | ((0 | w) < 0 ? -1 : 0) << 1), a = 0 | Ug(0 | s, 0 | y, f & (0 | g) | 0, (((0 | w) < 0 ? -1 : 0) >> 31 | ((0 | w) < 0 ? -1 : 0) << 1) & (B | 0 & B) | 0), I = 0 | o(), A = A - 1 | 0; + } while (0 != (0 | A)); + + A = 0; + } else n = c, I = f, A = 0, c = 0; + + 0 | Q && (C[Q >> 2] = a, C[Q + 4 >> 2] = I), s = -2 & (E << 1 | 0) | c, e(0 | (y = (0 | E) >>> 31 | n << 1 | 0 & (0 | E >>> 31) | A)); + }(A |= 0, I |= 0, g |= 0, B |= 0, 0 | Q), y = Q, 0 | (e(0 | C[Q + 4 >> 2]), 0 | C[Q >> 2]); + } + + function Ig(A) { + A |= 0; + var I = 0, + g = 0, + C = 0; + + for (I = 1, g = 0; I = I + (0 | Q[(C = A + g | 0) >> 0]) | 0, B[C >> 0] = I, 4 != (0 | (g = g + 1 | 0));) { + I >>>= 8; + } + } + + function gg(A, I, g, B, C) { + A |= 0, B |= 0, C |= 0, (g |= 0) >>> 0 > 0 | 0 == (0 | g) & (I |= 0) >>> 0 > 4294967295 ? SB() : function (A, I, g, B, C) { + var Q, E; + A |= 0, B |= 0, Q = y, E = y = y + 63 & -64, y = y + 64 | 0, 0 == (0 | (I |= 0)) & 0 == (0 | (g |= 0)) || ($A(E, C |= 0), UI(E, B, 0), YA(0 | A, 0, 0 | I), M(E, A, A, I, g), MI(E, 64)), y = Q; + }(A, I, g, B, C); + } + + function Bg(A, I, g) { + var B; + return A |= 0, g |= 0, I = 0 | rg(255 & (I |= 0) | 0, 0, 8), B = 0 | o(), g = 0 | rg(255 & g | 0, 0, 16), e(0 | B | o() | 0), I | 255 & A | g | 0; + } + + function Cg(A, I) { + A |= 0; + var g = 0, + C = 0; + + if (0 | (I |= 0)) { + g = 0; + + do { + C = 255 & (0 | DB()), B[A + g >> 0] = C, g = g + 1 | 0; + } while ((0 | g) != (0 | I)); + } + } + + function Qg(A, I, g, B) { + var C, Q; + return I |= 0, B |= 0, C = 0 | function (A, I) { + var g, B, C; + return C = ((g = 0 | E(65535 & (I |= 0), 65535 & (A |= 0))) >>> 16) + (0 | E(65535 & I, A >>> 16)) | 0, B = 0 | E(I >>> 16, 65535 & A), 0 | (e((C >>> 16) + (0 | E(I >>> 16, A >>> 16)) + (((65535 & C) + B | 0) >>> 16) | 0), C + B << 16 | 65535 & g | 0); + }(A |= 0, g |= 0), Q = 0 | o(), 0 | (e((0 | E(I, g)) + (0 | E(B, A)) + Q | 0 & Q | 0), 0 | C); + } + + function Eg(A, I) { + u(A |= 0, I |= 0, I + 120 | 0), u(A + 40 | 0, I + 40 | 0, I + 80 | 0), u(A + 80 | 0, I + 80 | 0, I + 120 | 0), u(A + 120 | 0, I, I + 40 | 0); + } + + function ig(A, I, g) { + return A |= 0, I |= 0, (0 | (g |= 0)) < 32 ? (e(I >> g | 0), A >>> g | (I & (1 << g) - 1) << 32 - g) : (e(0 | ((0 | I) < 0 ? -1 : 0)), I >> g - 32 | 0); + } + + function eg(A, I) { + _A(A |= 0, 40 + (I |= 0) | 0, I), lA(A + 40 | 0, I + 40 | 0, I), OA(A + 80 | 0, I + 80 | 0), u(A + 120 | 0, I + 120 | 0, 112); + } + + function og(A, I) { + var g, B; + A |= 0, g = y, B = y = y + 63 & -64, y = y + 128 | 0, function (A, I) { + OA(A |= 0, I |= 0), OA(A + 40 | 0, I + 40 | 0), OA(A + 80 | 0, I + 80 | 0); + }(B, I |= 0), aI(A, B), y = g; + } + + function cg(A) { + var I, g; + return I = y, g = y = y + 63 & -64, y = y + 32 | 0, CA(g, A |= 0), A = 0 | lI(g, 32), y = I, 0 | A; + } + + function ag(A, I) { + A |= 0, I |= 0; + var g = 0, + C = 0; + g = 0; + + do { + B[(C = A + g | 0) >> 0] = B[C >> 0] ^ B[I + g >> 0], g = g + 1 | 0; + } while (8 != (0 | g)); + } + + function ng(A, I, g, B, C, Q, E) { + return 0 | gA(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, E |= 0); + } + + function rg(A, I, g) { + return A |= 0, (0 | (g |= 0)) < 32 ? (e((I |= 0) << g | (A & (1 << g) - 1 << 32 - g) >>> 32 - g | 0), A << g) : (e(A << g - 32 | 0), 0); + } + + function tg(A, I, g, B, C, Q, E) { + return Z(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, E |= 0), 0; + } + + function fg(A, I, g) { + return (g |= 0) >>> 0 < 256 ? 0 | b(A |= 0, I |= 0, 255 & g) : (c(33547, 33567, 107, 33620), 0); + } + + function wg(A, I) { + A |= 0; + var g = 0; + return (I |= 0) >>> 0 <= 4294967168 && 0 != (0 | (g = 0 | function (A) { + var I, + g = 0, + B = 0, + Q = 0, + E = 0; + if ((A |= 0) >>> 0 >= 4294967168) return C[8678] = 48, 0; + if (!(B = 0 | F(76 + (I = A >>> 0 < 11 ? 16 : A + 11 & -8) | 0))) return 0; + + do { + if (63 & B) { + if (g = (Q = ((B + 63 & -64) - 8 - (B + -8) | 0) >>> 0 > 15 ? (B + 63 & -64) - 8 | 0 : 56 + (B + 63 & -64) | 0) - (B + -8) | 0, 3 & (A = 0 | C[B + -4 >> 2])) { + C[Q + 4 >> 2] = (-8 & A) - g | 1 & C[Q + 4 >> 2] | 2, C[Q + ((-8 & A) - g) + 4 >> 2] = 1 | C[Q + ((-8 & A) - g) + 4 >> 2], C[B + -4 >> 2] = g | 1 & C[B + -4 >> 2] | 2, C[Q + 4 >> 2] = 1 | C[Q + 4 >> 2], Y(B + -8 | 0, g), E = Q, A = Q; + break; + } + + C[Q >> 2] = (0 | C[B + -8 >> 2]) + g, C[Q + 4 >> 2] = (-8 & A) - g, E = Q, A = Q; + break; + } + + E = B + -8 | 0, A = B + -8 | 0; + } while (0); + + return 3 & (A = 0 | C[(g = A + 4 | 0) >> 2]) | 0 && (-8 & A) >>> 0 > (I + 16 | 0) >>> 0 && (Q = E + I | 0, C[g >> 2] = I | 1 & A | 2, C[Q + 4 >> 2] = (-8 & A) - I | 3, C[(B = E + (-8 & A) + 4 | 0) >> 2] = 1 | C[B >> 2], Y(Q, (-8 & A) - I | 0)), 0 | E + 8; + }(I))) ? (C[A >> 2] = g, I = 0) : I = 48, 0 | I; + } + + function yg(A, I, g) { + return A |= 0, I |= 0, (0 | (g |= 0)) < 32 ? (e(I >>> g | 0), A >>> g | (I & (1 << g) - 1) << 32 - g) : (e(0), I >>> g - 32 | 0); + } + + function sg(A) { + var I, g; + return g = y, I = y = y + 63 & -64, y = y + 32 | 0, CA(I, A |= 0), y = g, 1 & B[I >> 0] | 0; + } + + function hg(A, I, g) { + tA(A |= 0, I |= 0, 255 & (g |= 0)), tA(A + 40 | 0, I + 40 | 0, 255 & g), tA(A + 80 | 0, I + 80 | 0, 255 & g); + } + + function Dg(A, I, g, B, C, Q, E) { + return 0 | TI(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, E |= 0); + } + + function Fg(A, I, g, B, C, Q, E) { + return 0 | nA(A |= 0, I |= 0, 1, g |= 0, B |= 0, C |= 0, 16, Q |= 0, E |= 0, 0, 0, 2); + } + + function pg(A, I, g, B, C, Q, E) { + return 0 | nA(A |= 0, I |= 0, 1, g |= 0, B |= 0, C |= 0, 16, Q |= 0, E |= 0, 0, 0, 1); + } + + function ug(A, I) { + (function (A, I) { + A |= 0, 0 | (I |= 0) && (0 | (I = 0 | C[A >> 2]) && MI(0 | C[I + 4 >> 2], C[A + 16 >> 2] << 10), 0 | (I = 0 | C[A + 4 >> 2]) && MI(I, C[A + 20 >> 2] << 3)); + })(A |= 0, 4 & (I |= 0)), d(0 | C[A + 4 >> 2]), C[A + 4 >> 2] = 0, function (A) { + var I = 0; + 0 | (A |= 0) && 0 | (I = 0 | C[A >> 2]) && d(I), d(A); + }(0 | C[A >> 2]), C[A >> 2] = 0; + } + + function Hg(A, I) { + u(A |= 0, I |= 0, I + 120 | 0), u(A + 40 | 0, I + 40 | 0, I + 80 | 0), u(A + 80 | 0, I + 80 | 0, I + 120 | 0); + } + + function kg(A, I, g, B, C, Q) { + hA(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, 0); + } + + function lg(A, I, g, B, C, Q) { + return 0 | nA(A |= 0, I |= 0, 1, g |= 0, B |= 0, C |= 0, 16, 0, 32, Q |= 0, 128, 2); + } + + function _g(A, I, g, B, C, Q) { + V(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, 1, 0, Q |= 0); + } + + function Gg(A, I, g, B, C, Q) { + return 0 | nA(A |= 0, I |= 0, 1, g |= 0, B |= 0, C |= 0, 16, 0, 32, Q |= 0, 128, 1); + } + + function dg(A, I, g, B, C) { + return 0 | uA(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, 0); + } + + function Yg(A, I, g, B, C, Q) { + V(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, 0, 0, Q |= 0); + } + + function Mg(A) { + B[32 + (A |= 0) >> 0] = 1, B[A + 32 + 1 >> 0] = 0, B[A + 32 + 2 >> 0] = 0, B[A + 32 + 3 >> 0] = 0; + } + + function Sg(A) { + var I; + C[(A |= 0) >> 2] = 1, I = 36 + (A = A + 4 | 0) | 0; + + do { + C[A >> 2] = 0, A = A + 4 | 0; + } while ((0 | A) < (0 | I)); + } + + function Ug(A, I, g, B) { + return 0 | (e(0 | (B = (I |= 0) - (B |= 0) - ((g |= 0) >>> 0 > (A |= 0) >>> 0 | 0) >>> 0)), A - g >>> 0 | 0); + } + + function vg(A, I, g, B) { + return 0 | (e((I |= 0) + (B |= 0) + ((A |= 0) + (g |= 0) >>> 0 >>> 0 < A >>> 0 | 0) >>> 0 | 0), A + g >>> 0 | 0); + } + + function bg(A, I, g, B) { + !function (A, I, g, B) { + K(A |= 0, I |= 0, g |= 0, B |= 0); + }(A |= 0, I |= 0, g |= 0, B |= 0); + } + + function Jg(A, I) { + I |= 0, PI(A |= 0), 0 | I && P(A, 33408, 34, 0); + } + + function Pg(A, I) { + I |= 0, B[(A |= 0) >> 0] = I, B[A + 1 >> 0] = I >> 8, B[A + 2 >> 0] = I >> 16, B[A + 3 >> 0] = I >> 24; + } + + function Rg(A, I, g, B) { + return Xg(A |= 0, I |= 0, g |= 0, B |= 0), 0; + } + + function Ng(A, I, g, B) { + return 0 | FA(A |= 0, I |= 0, g |= 0, B |= 0, 2); + } + + function mg(A, I, g, B) { + return 0 | FA(A |= 0, I |= 0, g |= 0, B |= 0, 1); + } + + function Lg(A, I, g, B) { + return 0 | HI(A |= 0, I |= 0, g |= 0, B |= 0); + } + + function xg(A, I, g, B) { + P(A |= 0, I |= 0, g |= 0, B |= 0); + } + + function Kg(A) { + var I; + I = 40 + (A |= 0) | 0; + + do { + C[A >> 2] = 0, A = A + 4 | 0; + } while ((0 | A) < (0 | I)); + } + + function Xg(A, I, g, B) { + $(A |= 0, I |= 0, g |= 0, B |= 0); + } + + function jg(A, I, g) { + return 0 | function (A, I, g) { + var B, C; + return A |= 0, C = y, B = y = y + 63 & -64, y = y + 32 | 0, 0 | nI(B, g |= 0, I |= 0) ? A = -1 : (x(A, 34656, B), A = 0), y = C, 0 | A; + }(A |= 0, I |= 0, g |= 0); + } + + function Tg(A) { + B[(A |= 0) >> 0] = -8 & B[A >> 0], B[A + 31 >> 0] = 63 & B[A + 31 >> 0] | 64; + } + + function qg(A, I) { + return A = 0 | HA(A |= 0, I |= 0), 0 | ((0 | B[A >> 0]) == (255 & I) << 24 >> 24 ? A : 0); + } + + function Vg(A) { + return Q[(A |= 0) >> 0] | Q[A + 1 >> 0] << 8 | Q[A + 2 >> 0] << 16 | Q[A + 3 >> 0] << 24 | 0; + } + + function zg(A, I, g) { + return 0 | fg(A |= 0, I |= 0, g |= 0); + } + + function Wg(A) { + B[(A |= 0) >> 0] = 0, B[A + 1 >> 0] = 0, B[A + 2 >> 0] = 0, B[A + 3 >> 0] = 0; + } + + function Og(A) { + Kg(A |= 0), Sg(A + 40 | 0), Sg(A + 80 | 0), Kg(A + 120 | 0); + } + + function Zg(A) { + C[(A |= 0) >> 2] = 0, C[A + 4 >> 2] = 0, C[A + 8 >> 2] = 0, C[A + 12 >> 2] = 0; + } + + function $g(A, I, g) { + !function (A, I, g) { + var B, C, Q; + A |= 0, I |= 0, B = y, Q = y = y + 63 & -64, y = y + 128 | 0, g = ((g |= 0) << 24 >> 24) - ((0 - (255 & (C = 0 | function (A) { + return (255 & (A |= 0)) >>> 7 | 0; + }(g))) & g << 24 >> 24) << 1) & 255, function (A) { + Sg(A |= 0), Sg(A + 40 | 0), Kg(A + 80 | 0); + }(A), hg(A, I, 0 | aB(g, 1)), hg(A, I + 120 | 0, 0 | aB(g, 2)), hg(A, I + 240 | 0, 0 | aB(g, 3)), hg(A, I + 360 | 0, 0 | aB(g, 4)), hg(A, I + 480 | 0, 0 | aB(g, 5)), hg(A, I + 600 | 0, 0 | aB(g, 6)), hg(A, I + 720 | 0, 0 | aB(g, 7)), hg(A, I + 840 | 0, 0 | aB(g, 8)), OA(Q, A + 40 | 0), OA(Q + 40 | 0, A), xA(Q + 80 | 0, A + 80 | 0), hg(A, Q, C), y = B; + }(A |= 0, 1120 + (960 * (I |= 0) | 0) | 0, g |= 0); + } + + function AB(A, I) { + return 0 | QI(A |= 0, I |= 0); + } + + function IB(A, I) { + !function (A, I) { + z(A |= 0, I |= 0); + }(A |= 0, I |= 0); + } + + function gB(A, I) { + !function (A, I) { + MA(A |= 0, I |= 0); + }(A |= 0, I |= 0); + } + + function BB(A, I, g) { + return 0 | nI(A |= 0, I |= 0, g |= 0); + } + + function CB(A, I) { + return 0 | function (A, I) { + return A |= 0, Cg(I |= 0, 32), 0 | AB(A, I); + }(A |= 0, I |= 0); + } + + function QB(A, I, g) { + !function (A, I, g, B, C) { + var Q, E; + A |= 0, B |= 0, Q = y, E = y = y + 63 & -64, y = y + 64 | 0, 0 == (0 | (I |= 0)) & 0 == (0 | (g |= 0)) || ($A(E, C |= 0), _I(E, B, 0), YA(0 | A, 0, 64), M(E, A, A, 64, 0), MI(E, 64)), y = Q; + }(A |= 0, 64, 0, I |= 0, g |= 0); + } + + function EB(A) { + 1 != (-7 & (A |= 0) | 0) && SB(); + } + + function iB(A, I, g) { + !function (A, I, g) { + A |= 0, I |= 0; + var B, + C, + Q, + E, + i, + e, + o, + c, + a, + n, + r, + t = 0, + f = 0, + w = 0, + y = 0, + s = 0, + h = 0, + D = 0, + F = 0, + p = 0, + u = 0, + H = 0, + k = 0, + l = 0, + _ = 0, + G = 0, + d = 0, + Y = 0, + M = 0, + S = 0, + U = 0, + v = 0, + b = 0, + J = 0, + P = 0, + R = 0, + N = 0, + m = 0, + L = 0, + x = 0, + K = 0, + X = 0, + j = 0; + r = 0 | Vg(g |= 0), i = 0 | Vg(g + 4 | 0), e = 0 | Vg(g + 8 | 0), o = 0 | Vg(g + 12 | 0), c = 0 | Vg(g + 16 | 0), a = 0 | Vg(g + 20 | 0), n = 0 | Vg(g + 24 | 0), B = 0 | Vg(g + 28 | 0), C = 0 | Vg(I), Q = 0 | Vg(I + 4 | 0), E = 0 | Vg(I + 8 | 0), g = 0 | Vg(I + 12 | 0), I = 0, t = 1634760805, f = r, w = 2036477234, y = c, s = a, h = n, D = B, F = 1797285236, p = i, u = e, H = o, k = 857760878, l = C, _ = Q, G = E, d = g; + + do { + x = (0 | wB((U = (0 | wB((J = (0 | wB((N = (0 | wB(t + s | 0, 7)) ^ H) + t | 0, 9)) ^ G) + N | 0, 13)) ^ s) + J | 0, 18)) ^ t, R = (0 | wB((j = (0 | wB((S = (0 | wB((b = (0 | wB(f + k | 0, 7)) ^ d) + k | 0, 9)) ^ h) + b | 0, 13)) ^ f) + S | 0, 18)) ^ k, v = (0 | wB((L = (0 | wB((X = (0 | wB((M = (0 | wB(l + w | 0, 7)) ^ D) + w | 0, 9)) ^ p) + M | 0, 13)) ^ l) + X | 0, 18)) ^ w, Y = (0 | wB((P = (0 | wB((m = (0 | wB((K = (0 | wB(y + F | 0, 7)) ^ u) + F | 0, 9)) ^ _) + K | 0, 13)) ^ y) + m | 0, 18)) ^ F, t = (0 | wB((u = (0 | wB((p = (0 | wB((f = (0 | wB(K + x | 0, 7)) ^ j) + x | 0, 9)) ^ X) + f | 0, 13)) ^ K) + p | 0, 18)) ^ x, k = (0 | wB((H = (0 | wB((_ = (0 | wB((l = (0 | wB(R + N | 0, 7)) ^ L) + R | 0, 9)) ^ m) + l | 0, 13)) ^ N) + _ | 0, 18)) ^ R, w = (0 | wB((d = (0 | wB((G = (0 | wB((y = (0 | wB(v + b | 0, 7)) ^ P) + v | 0, 9)) ^ J) + y | 0, 13)) ^ b) + G | 0, 18)) ^ v, F = (0 | wB((D = (0 | wB((h = (0 | wB((s = (0 | wB(Y + M | 0, 7)) ^ U) + Y | 0, 9)) ^ S) + s | 0, 13)) ^ M) + h | 0, 18)) ^ Y, I = I + 2 | 0; + } while (I >>> 0 < 20); + + Pg(A, t + 1634760805 | 0), Pg(A + 4 | 0, f + r | 0), Pg(A + 8 | 0, p + i | 0), Pg(A + 12 | 0, u + e | 0), Pg(A + 16 | 0, H + o | 0), Pg(A + 20 | 0, k + 857760878 | 0), Pg(A + 24 | 0, l + C | 0), Pg(A + 28 | 0, _ + Q | 0), Pg(A + 32 | 0, G + E | 0), Pg(A + 36 | 0, d + g | 0), Pg(A + 40 | 0, w + 2036477234 | 0), Pg(A + 44 | 0, y + c | 0), Pg(A + 48 | 0, s + a | 0), Pg(A + 52 | 0, h + n | 0), Pg(A + 56 | 0, D + B | 0), Pg(A + 60 | 0, F + 1797285236 | 0); + }(A |= 0, I |= 0, g |= 0); + } + + function eB(A, I) { + return 0 | AB(A |= 0, I |= 0); + } + + function oB(A, I, g) { + return 0 | EA(A |= 0, I |= 0, g |= 0, 2); + } + + function cB(A, I, g) { + return 0 | EA(A |= 0, I |= 0, g |= 0, 1); + } + + function aB(A, I) { + return ((255 & ((I |= 0) ^ (A |= 0))) - 1 | 0) >>> 31 & 255 | 0; + } + + function nB(A) { + return 0 | ((A |= 0) ? 31 - (0 | i(A ^ A - 1)) | 0 : 32); + } + + function rB(A, I) { + return 0 | eI(A |= 0, I |= 0, 32); + } + + function tB(A, I) { + return 0 | eI(A |= 0, I |= 0, 16); + } + + function fB(A, I) { + BA(0 | (A |= 0), 0 | (I |= 0), 1024); + } + + function wB(A, I) { + return (A |= 0) >>> (32 - (I |= 0) | 0) | A << I | 0; + } + + function yB(A) { + YA(0 | (A |= 0), 0, 1024); + } + + function sB(A) { + Cg(A |= 0, 32); + } + + function hB() { + n(1); + } + + function DB() { + return 0 | n(0); + } + + function FB() { + return -17; + } + + function pB() { + return 3; + } + + function uB() { + return 2; + } + + function HB() { + return -1; + } + + function kB() { + return 1; + } + + function lB() { + return 8; + } + + function _B() { + return 24; + } + + function GB() { + return 16; + } + + function dB() { + return 64; + } + + function YB() { + return 32; + } + + function MB() { + return 0; + } + + function SB() { + a(); + } + + return { + ___errno_location: function ___errno_location() { + return 34712; + }, + ___muldi3: Qg, + ___uremdi3: Ag, + _bitshift64Ashr: ig, + _bitshift64Lshr: yg, + _bitshift64Shl: rg, + _crypto_aead_chacha20poly1305_abytes: GB, + _crypto_aead_chacha20poly1305_decrypt: function _crypto_aead_chacha20poly1305_decrypt(A, I, g, B, Q, E, i, e, c, a, n) { + I |= 0, g |= 0, B |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0; + var r = 0, + t = 0; + return (E |= 0) >>> 0 > 0 | 0 == (0 | E) & (Q |= 0) >>> 0 > 15 ? (E = 0 | sA(A |= 0, 0, B, g = 0 | vg(0 | Q, 0 | E, -16, -1), r = 0 | o(), B + Q + -16 | 0, i, e, c, a, n), I && (Q = 0 == (0 | E) ? g : 0, g = 0 == (0 | E) ? r : 0, t = 4)) : I ? (Q = 0, g = 0, E = -1, t = 4) : E = -1, 4 == (0 | t) && (C[I >> 2] = Q, C[I + 4 >> 2] = g), 0 | E; + }, + _crypto_aead_chacha20poly1305_decrypt_detached: sA, + _crypto_aead_chacha20poly1305_encrypt: function _crypto_aead_chacha20poly1305_encrypt(A, I, g, B, Q, E, i, e, c, a, n) { + return A |= 0, I |= 0, g |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0, (Q |= 0) >>> 0 > 0 | 0 == (0 | Q) & (B |= 0) >>> 0 > 4294967279 && SB(), dA(A, A + B | 0, 0, g, B, Q, E, i, e, 0, a, n), 0 | I && (a = 0 | vg(0 | B, 0 | Q, 16, 0), c = 0 | o(), C[I >> 2] = a, C[I + 4 >> 2] = c), 0; + }, + _crypto_aead_chacha20poly1305_encrypt_detached: dA, + _crypto_aead_chacha20poly1305_ietf_abytes: GB, + _crypto_aead_chacha20poly1305_ietf_decrypt: function _crypto_aead_chacha20poly1305_ietf_decrypt(A, I, g, B, Q, E, i, e, c, a, n) { + I |= 0, g |= 0, B |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0; + var r = 0, + t = 0; + return (E |= 0) >>> 0 > 0 | 0 == (0 | E) & (Q |= 0) >>> 0 > 15 ? (E = 0 | eA(A |= 0, 0, B, g = 0 | vg(0 | Q, 0 | E, -16, -1), r = 0 | o(), B + Q + -16 | 0, i, e, c, a, n), I && (Q = 0 == (0 | E) ? g : 0, g = 0 == (0 | E) ? r : 0, t = 4)) : I ? (Q = 0, g = 0, E = -1, t = 4) : E = -1, 4 == (0 | t) && (C[I >> 2] = Q, C[I + 4 >> 2] = g), 0 | E; + }, + _crypto_aead_chacha20poly1305_ietf_decrypt_detached: eA, + _crypto_aead_chacha20poly1305_ietf_encrypt: function _crypto_aead_chacha20poly1305_ietf_encrypt(A, I, g, B, Q, E, i, e, c, a, n) { + return A |= 0, I |= 0, g |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0, (Q |= 0) >>> 0 > 0 | 0 == (0 | Q) & (B |= 0) >>> 0 > 4294967279 && SB(), fA(A, A + B | 0, 0, g, B, Q, E, i, e, 0, a, n), 0 | I && (a = 0 | vg(0 | B, 0 | Q, 16, 0), c = 0 | o(), C[I >> 2] = a, C[I + 4 >> 2] = c), 0; + }, + _crypto_aead_chacha20poly1305_ietf_encrypt_detached: fA, + _crypto_aead_chacha20poly1305_ietf_keybytes: YB, + _crypto_aead_chacha20poly1305_ietf_keygen: sB, + _crypto_aead_chacha20poly1305_ietf_messagebytes_max: FB, + _crypto_aead_chacha20poly1305_ietf_npubbytes: function _crypto_aead_chacha20poly1305_ietf_npubbytes() { + return 12; + }, + _crypto_aead_chacha20poly1305_ietf_nsecbytes: MB, + _crypto_aead_chacha20poly1305_keybytes: YB, + _crypto_aead_chacha20poly1305_keygen: sB, + _crypto_aead_chacha20poly1305_messagebytes_max: FB, + _crypto_aead_chacha20poly1305_npubbytes: lB, + _crypto_aead_chacha20poly1305_nsecbytes: MB, + _crypto_aead_xchacha20poly1305_ietf_abytes: GB, + _crypto_aead_xchacha20poly1305_ietf_decrypt: function _crypto_aead_xchacha20poly1305_ietf_decrypt(A, I, g, B, Q, E, i, e, c, a, n) { + I |= 0, g |= 0, B |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0; + var r = 0, + t = 0; + return (E |= 0) >>> 0 > 0 | 0 == (0 | E) & (Q |= 0) >>> 0 > 15 ? (E = 0 | PA(A |= 0, 0, B, g = 0 | vg(0 | Q, 0 | E, -16, -1), r = 0 | o(), B + Q + -16 | 0, i, e, c, a, n), I && (Q = 0 == (0 | E) ? g : 0, g = 0 == (0 | E) ? r : 0, t = 4)) : I ? (Q = 0, g = 0, E = -1, t = 4) : E = -1, 4 == (0 | t) && (C[I >> 2] = Q, C[I + 4 >> 2] = g), 0 | E; + }, + _crypto_aead_xchacha20poly1305_ietf_decrypt_detached: PA, + _crypto_aead_xchacha20poly1305_ietf_encrypt: function _crypto_aead_xchacha20poly1305_ietf_encrypt(A, I, g, B, Q, E, i, e, c, a, n) { + return A |= 0, I |= 0, g |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0, (Q |= 0) >>> 0 > 0 | 0 == (0 | Q) & (B |= 0) >>> 0 > 4294967279 && SB(), NA(A, A + B | 0, 0, g, B, Q, E, i, e, 0, a, n), 0 | I && (a = 0 | vg(0 | B, 0 | Q, 16, 0), c = 0 | o(), C[I >> 2] = a, C[I + 4 >> 2] = c), 0; + }, + _crypto_aead_xchacha20poly1305_ietf_encrypt_detached: NA, + _crypto_aead_xchacha20poly1305_ietf_keybytes: YB, + _crypto_aead_xchacha20poly1305_ietf_keygen: sB, + _crypto_aead_xchacha20poly1305_ietf_messagebytes_max: FB, + _crypto_aead_xchacha20poly1305_ietf_npubbytes: _B, + _crypto_aead_xchacha20poly1305_ietf_nsecbytes: MB, + _crypto_auth: function _crypto_auth(A, I, g, B, C) { + return JI(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0), 0; + }, + _crypto_auth_bytes: YB, + _crypto_auth_keybytes: YB, + _crypto_auth_keygen: sB, + _crypto_auth_verify: function _crypto_auth_verify(A, I, g, B, C) { + return 0 | function (A, I, g, B, C) { + var Q; + return A |= 0, Q = y, y = y + 32 | 0, JI(Q, I |= 0, g |= 0, B |= 0, C |= 0), C = 0 | rB(A, Q), C = 0 | ((0 | Q) == (0 | A) ? -1 : C) | EI(Q, A, 32), y = Q, 0 | C; + }(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0); + }, + _crypto_box_beforenm: jg, + _crypto_box_beforenmbytes: YB, + _crypto_box_detached: FI, + _crypto_box_detached_afternm: tg, + _crypto_box_easy: KI, + _crypto_box_easy_afternm: function _crypto_box_easy_afternm(A, I, g, B, C, Q) { + return A |= 0, I |= 0, C |= 0, Q |= 0, (B |= 0) >>> 0 > 0 | 0 == (0 | B) & (g |= 0) >>> 0 > 4294967279 ? (SB(), 0) : (tg(A + 16 | 0, A, I, g, B, C, Q), 0); + }, + _crypto_box_keypair: CB, + _crypto_box_macbytes: GB, + _crypto_box_messagebytes_max: FB, + _crypto_box_noncebytes: _B, + _crypto_box_open_detached: DI, + _crypto_box_open_detached_afternm: ng, + _crypto_box_open_easy: dI, + _crypto_box_open_easy_afternm: function _crypto_box_open_easy_afternm(A, I, g, B, C, Q) { + return I |= 0, C |= 0, Q |= 0, 0 | ((B |= 0) >>> 0 < 0 | 0 == (0 | B) & (g |= 0) >>> 0 < 16 ? -1 : 0 | ng(A |= 0, I + 16 | 0, I, g = 0 | vg(0 | g, 0 | B, -16, -1), 0 | o(), C, Q)); + }, + _crypto_box_publickeybytes: YB, + _crypto_box_seal: function _crypto_box_seal(A, I, g, C, Q) { + A |= 0, I |= 0, g |= 0, C |= 0, Q |= 0; + var E, + i = 0, + e = 0, + o = 0; + if (E = y, y = y + 96 | 0, 0 | CB(E + 32 | 0, E)) g = -1;else { + e = E + 32 | 0, o = (i = A) + 32 | 0; + + do { + B[i >> 0] = 0 | B[e >> 0], i = i + 1 | 0, e = e + 1 | 0; + } while ((0 | i) < (0 | o)); + + GI(E + 64 | 0, E + 32 | 0, Q), g = 0 | KI(A + 32 | 0, I, g, C, E + 64 | 0, Q, E), MI(E, 32), MI(E + 32 | 0, 32), MI(E + 64 | 0, 24); + } + return y = E, 0 | g; + }, + _crypto_box_seal_open: function _crypto_box_seal_open(A, I, g, B, C, Q) { + var E, i; + return A |= 0, I |= 0, C |= 0, Q |= 0, i = y, E = y = y + 63 & -64, y = y + 32 | 0, (B |= 0) >>> 0 < 0 | 0 == (0 | B) & (g |= 0) >>> 0 < 48 ? g = -1 : (B = 0 | vg(0 | g, 0 | B, -32, -1), g = 0 | o(), GI(E, I, C), g = 0 | dI(A, I + 32 | 0, B, g, E, I, Q)), y = i, 0 | g; + }, + _crypto_box_sealbytes: function _crypto_box_sealbytes() { + return 48; + }, + _crypto_box_secretkeybytes: YB, + _crypto_box_seed_keypair: function _crypto_box_seed_keypair(A, I, g) { + return 0 | tI(A |= 0, I |= 0, g |= 0); + }, + _crypto_box_seedbytes: YB, + _crypto_generichash: Dg, + _crypto_generichash_bytes: YB, + _crypto_generichash_bytes_max: dB, + _crypto_generichash_bytes_min: GB, + _crypto_generichash_final: zg, + _crypto_generichash_init: Lg, + _crypto_generichash_keybytes: YB, + _crypto_generichash_keybytes_max: dB, + _crypto_generichash_keybytes_min: GB, + _crypto_generichash_keygen: sB, + _crypto_generichash_statebytes: function _crypto_generichash_statebytes() { + return 384; + }, + _crypto_generichash_update: Rg, + _crypto_hash: function _crypto_hash(A, I, g, B) { + return RI(A |= 0, I |= 0, g |= 0, B |= 0), 0; + }, + _crypto_hash_bytes: dB, + _crypto_kdf_bytes_max: dB, + _crypto_kdf_bytes_min: GB, + _crypto_kdf_contextbytes: lB, + _crypto_kdf_derive_from_key: function _crypto_kdf_derive_from_key(A, I, g, B, C, Q) { + return 0 | JA(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0); + }, + _crypto_kdf_keybytes: YB, + _crypto_kdf_keygen: sB, + _crypto_kx_client_session_keys: function _crypto_kx_client_session_keys(A, I, g, C, Q) { + var E, i, e; + if (I |= 0, g |= 0, C |= 0, Q |= 0, e = y, i = y = y + 63 & -64, y = y + 480 | 0, E = 0 == (0 | (A |= 0)) ? I : A, I = 0 == (0 | I) ? E : I, E || SB(), 0 | BB(i + 448 | 0, C, Q)) A = -1;else { + Lg(i, 0, 0, 64), Rg(i, i + 448 | 0, 32, 0), MI(i + 448 | 0, 32), Rg(i, g, 32, 0), Rg(i, Q, 32, 0), zg(i, i + 384 | 0, 64), MI(i, 384), A = 0; + + do { + B[E + A >> 0] = 0 | B[i + 384 + A >> 0], B[I + A >> 0] = 0 | B[i + 384 + (A + 32) >> 0], A = A + 1 | 0; + } while (32 != (0 | A)); + + MI(i + 384 | 0, 64), A = 0; + } + return y = e, 0 | A; + }, + _crypto_kx_keypair: function _crypto_kx_keypair(A, I) { + return A |= 0, Cg(I |= 0, 32), 0 | eB(A, I); + }, + _crypto_kx_publickeybytes: YB, + _crypto_kx_secretkeybytes: YB, + _crypto_kx_seed_keypair: function _crypto_kx_seed_keypair(A, I, g) { + return A |= 0, Dg(I |= 0, 32, g |= 0, 32, 0, 0, 0), 0 | eB(A, I); + }, + _crypto_kx_seedbytes: YB, + _crypto_kx_server_session_keys: function _crypto_kx_server_session_keys(A, I, g, C, Q) { + var E, i, e; + if (I |= 0, g |= 0, C |= 0, Q |= 0, e = y, i = y = y + 63 & -64, y = y + 480 | 0, E = 0 == (0 | (A |= 0)) ? I : A, I = 0 == (0 | I) ? E : I, E || SB(), 0 | BB(i + 448 | 0, C, Q)) A = -1;else { + Lg(i, 0, 0, 64), Rg(i, i + 448 | 0, 32, 0), MI(i + 448 | 0, 32), Rg(i, Q, 32, 0), Rg(i, g, 32, 0), zg(i, i + 384 | 0, 64), MI(i, 384), A = 0; + + do { + B[I + A >> 0] = 0 | B[i + 384 + A >> 0], B[E + A >> 0] = 0 | B[i + 384 + (A + 32) >> 0], A = A + 1 | 0; + } while (32 != (0 | A)); + + MI(i + 384 | 0, 64), A = 0; + } + return y = e, 0 | A; + }, + _crypto_kx_sessionkeybytes: YB, + _crypto_pwhash: function _crypto_pwhash(A, I, g, B, Q, E, i, e, o, c, a) { + switch (A |= 0, I |= 0, g |= 0, B |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, o |= 0, c |= 0, 0 | (a |= 0)) { + case 1: + I = 0 | function (A, I, g, B, Q, E, i, e, o, c) { + g |= 0, B |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, o |= 0, c |= 0, YA(0 | (A |= 0), 0, 0 | (I |= 0)); + + do { + if (!(g >>> 0 > 0 | 0 == (0 | g) & I >>> 0 > 4294967295)) { + if (g >>> 0 < 0 | 0 == (0 | g) & I >>> 0 < 16) { + C[8678] = 28, I = -1; + break; + } + + if ((o | E) >>> 0 > 0 | 0 == (o | E | 0) & (e | Q) >>> 0 > 4294967295 | c >>> 0 > 2147483648) { + C[8678] = 22, I = -1; + break; + } + + if (o >>> 0 < 0 | 0 == (0 | o) & e >>> 0 < 3 | c >>> 0 < 8192) { + C[8678] = 28, I = -1; + break; + } + + I = (0 != (0 | pg(e, c >>> 10, B, Q, i, A, I))) << 31 >> 31; + break; + } + + C[8678] = 22, I = -1; + } while (0); + + return 0 | I; + }(A, I, g, B, Q, E, i, e, o, c); + + break; + + case 2: + I = 0 | function (A, I, g, B, Q, E, i, e, o, c) { + g |= 0, B |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, o |= 0, c |= 0, YA(0 | (A |= 0), 0, 0 | (I |= 0)); + + do { + if (!(g >>> 0 > 0 | 0 == (0 | g) & I >>> 0 > 4294967295)) { + if (g >>> 0 < 0 | 0 == (0 | g) & I >>> 0 < 16) { + C[8678] = 28, I = -1; + break; + } + + if ((o | E) >>> 0 > 0 | 0 == (o | E | 0) & (e | Q) >>> 0 > 4294967295 | c >>> 0 > 2147483648) { + C[8678] = 22, I = -1; + break; + } + + if (0 == (0 | e) & 0 == (0 | o) | c >>> 0 < 8192) { + C[8678] = 28, I = -1; + break; + } + + I = (0 != (0 | Fg(e, c >>> 10, B, Q, i, A, I))) << 31 >> 31; + break; + } + + C[8678] = 22, I = -1; + } while (0); + + return 0 | I; + }(A, I, g, B, Q, E, i, e, o, c); + + break; + + default: + C[8678] = 28, I = -1; + } + + return 0 | I; + }, + _crypto_pwhash_alg_argon2i13: kB, + _crypto_pwhash_alg_argon2id13: uB, + _crypto_pwhash_alg_default: uB, + _crypto_pwhash_bytes_max: HB, + _crypto_pwhash_bytes_min: GB, + _crypto_pwhash_memlimit_interactive: function _crypto_pwhash_memlimit_interactive() { + return 67108864; + }, + _crypto_pwhash_memlimit_max: function _crypto_pwhash_memlimit_max() { + return -2147483648; + }, + _crypto_pwhash_memlimit_min: function _crypto_pwhash_memlimit_min() { + return 8192; + }, + _crypto_pwhash_memlimit_moderate: function _crypto_pwhash_memlimit_moderate() { + return 268435456; + }, + _crypto_pwhash_memlimit_sensitive: function _crypto_pwhash_memlimit_sensitive() { + return 1073741824; + }, + _crypto_pwhash_opslimit_interactive: uB, + _crypto_pwhash_opslimit_max: HB, + _crypto_pwhash_opslimit_min: kB, + _crypto_pwhash_opslimit_moderate: pB, + _crypto_pwhash_opslimit_sensitive: function _crypto_pwhash_opslimit_sensitive() { + return 4; + }, + _crypto_pwhash_passwd_max: HB, + _crypto_pwhash_passwd_min: MB, + _crypto_pwhash_saltbytes: GB, + _crypto_pwhash_str: function _crypto_pwhash_str(A, I, g, B, C, Q, E) { + return 0 | LA(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, E |= 0); + }, + _crypto_pwhash_str_alg: function _crypto_pwhash_str_alg(A, I, g, B, C, Q, E, i) { + A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0, E |= 0; + var e = 0; + + switch (0 | (i |= 0)) { + case 1: + e = 0 | RA(A, I, g, B, C, Q, E); + break; + + case 2: + e = 0 | LA(A, I, g, B, C, Q, E); + break; + + default: + SB(); + } + + return 0 | e; + }, + _crypto_pwhash_str_needs_rehash: function _crypto_pwhash_str_needs_rehash(A, I, g, B) { + A |= 0, I |= 0, g |= 0, B |= 0; + + do { + if (0 | oI(A, 33713, 10)) { + if (0 | oI(A, 33724, 9)) { + C[8678] = 28, I = -1; + break; + } + + I = 0 | mg(A, I, g, B); + break; + } + + I = 0 | Ng(A, I, g, B); + } while (0); + + return 0 | I; + }, + _crypto_pwhash_str_verify: function _crypto_pwhash_str_verify(A, I, g, B) { + A |= 0, I |= 0, g |= 0, B |= 0; + + do { + if (0 | oI(A, 33713, 10)) { + if (0 | oI(A, 33724, 9)) { + C[8678] = 28, g = -1; + break; + } + + g = 0 | hI(A, I, g, B); + break; + } + + g = 0 | yI(A, I, g, B); + } while (0); + + return 0 | g; + }, + _crypto_pwhash_strbytes: function _crypto_pwhash_strbytes() { + return 128; + }, + _crypto_pwhash_strprefix: function _crypto_pwhash_strprefix() { + return 33713; + }, + _crypto_scalarmult: BB, + _crypto_scalarmult_base: eB, + _crypto_scalarmult_bytes: YB, + _crypto_scalarmult_scalarbytes: YB, + _crypto_secretbox_detached: Z, + _crypto_secretbox_easy: function _crypto_secretbox_easy(A, I, g, B, C, Q) { + return A |= 0, I |= 0, C |= 0, Q |= 0, (B |= 0) >>> 0 > 0 | 0 == (0 | B) & (g |= 0) >>> 0 > 4294967279 ? (SB(), 0) : (Z(A + 16 | 0, A, I, g, B, C, Q), 0); + }, + _crypto_secretbox_keybytes: YB, + _crypto_secretbox_keygen: sB, + _crypto_secretbox_macbytes: GB, + _crypto_secretbox_messagebytes_max: FB, + _crypto_secretbox_noncebytes: _B, + _crypto_secretbox_open_detached: gA, + _crypto_secretbox_open_easy: function _crypto_secretbox_open_easy(A, I, g, B, C, Q) { + return I |= 0, C |= 0, Q |= 0, 0 | ((B |= 0) >>> 0 < 0 | 0 == (0 | B) & (g |= 0) >>> 0 < 16 ? -1 : 0 | gA(A |= 0, I + 16 | 0, I, g = 0 | vg(0 | g, 0 | B, -16, -1), 0 | o(), C, Q)); + }, + _crypto_secretstream_xchacha20poly1305_abytes: function _crypto_secretstream_xchacha20poly1305_abytes() { + return 17; + }, + _crypto_secretstream_xchacha20poly1305_headerbytes: _B, + _crypto_secretstream_xchacha20poly1305_init_pull: function _crypto_secretstream_xchacha20poly1305_init_pull(A, I, g) { + var C; + return R(A |= 0, I |= 0, g |= 0), Mg(A), C = Q[I + 16 >> 0] | Q[I + 16 + 1 >> 0] << 8 | Q[I + 16 + 2 >> 0] << 16 | Q[I + 16 + 3 >> 0] << 24, g = Q[I + 16 + 4 >> 0] | Q[I + 16 + 4 + 1 >> 0] << 8 | Q[I + 16 + 4 + 2 >> 0] << 16 | Q[I + 16 + 4 + 3 >> 0] << 24, B[A + 36 >> 0] = C, B[A + 36 + 1 >> 0] = C >> 8, B[A + 36 + 2 >> 0] = C >> 16, B[A + 36 + 3 >> 0] = C >> 24, B[A + 36 + 4 >> 0] = g, B[A + 36 + 4 + 1 >> 0] = g >> 8, B[A + 36 + 4 + 2 >> 0] = g >> 16, B[A + 36 + 4 + 3 >> 0] = g >> 24, B[A + 44 >> 0] = 0, B[A + 44 + 1 >> 0] = 0, B[A + 44 + 2 >> 0] = 0, B[A + 44 + 3 >> 0] = 0, B[A + 44 + 4 >> 0] = 0, B[A + 44 + 4 + 1 >> 0] = 0, B[A + 44 + 4 + 2 >> 0] = 0, B[A + 44 + 4 + 3 >> 0] = 0, 0; + }, + _crypto_secretstream_xchacha20poly1305_init_push: function _crypto_secretstream_xchacha20poly1305_init_push(A, I, g) { + return A |= 0, g |= 0, Cg(I |= 0, 24), R(A, I, g), Mg(A), g = Q[I + 16 >> 0] | Q[I + 16 + 1 >> 0] << 8 | Q[I + 16 + 2 >> 0] << 16 | Q[I + 16 + 3 >> 0] << 24, I = Q[I + 16 + 4 >> 0] | Q[I + 16 + 4 + 1 >> 0] << 8 | Q[I + 16 + 4 + 2 >> 0] << 16 | Q[I + 16 + 4 + 3 >> 0] << 24, B[A + 36 >> 0] = g, B[A + 36 + 1 >> 0] = g >> 8, B[A + 36 + 2 >> 0] = g >> 16, B[A + 36 + 3 >> 0] = g >> 24, B[A + 36 + 4 >> 0] = I, B[A + 36 + 4 + 1 >> 0] = I >> 8, B[A + 36 + 4 + 2 >> 0] = I >> 16, B[A + 36 + 4 + 3 >> 0] = I >> 24, B[A + 44 >> 0] = 0, B[A + 44 + 1 >> 0] = 0, B[A + 44 + 2 >> 0] = 0, B[A + 44 + 3 >> 0] = 0, B[A + 44 + 4 >> 0] = 0, B[A + 44 + 4 + 1 >> 0] = 0, B[A + 44 + 4 + 2 >> 0] = 0, B[A + 44 + 4 + 3 >> 0] = 0, 0; + }, + _crypto_secretstream_xchacha20poly1305_keybytes: YB, + _crypto_secretstream_xchacha20poly1305_keygen: sB, + _crypto_secretstream_xchacha20poly1305_messagebytes_max: function _crypto_secretstream_xchacha20poly1305_messagebytes_max() { + return -18; + }, + _crypto_secretstream_xchacha20poly1305_pull: function _crypto_secretstream_xchacha20poly1305_pull(A, I, g, Q, E, i, e, c, a, n) { + A |= 0, I |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0; + var r, + t, + f = 0, + w = 0, + s = 0; + t = y, r = y = y + 63 & -64, y = y + 352 | 0, 0 | (g |= 0) && (C[g >> 2] = 0, C[g + 4 >> 2] = 0), 0 | Q && (B[Q >> 0] = -1); + + do { + if (e >>> 0 < 0 | 0 == (0 | e) & i >>> 0 < 17) c = -1;else { + w = 0 | vg(0 | i, 0 | e, -17, -1), (s = 0 | o()) >>> 0 > 0 | 0 == (0 | s) & w >>> 0 > 4294967278 && SB(), OI(r + 16 | 0, 64, 0, A + 32 | 0, A), gB(r + 80 | 0, r + 16 | 0), MI(r + 16 | 0, 64), bg(r + 80 | 0, c, a, n), c = 0 | Ug(0, 0, 0 | a, 0 | n), o(), bg(r + 80 | 0, 34672, 15 & c, 0), f = 64 + (c = r + 16 | 0) | 0; + + do { + C[c >> 2] = 0, c = c + 4 | 0; + } while ((0 | c) < (0 | f)); + + if (B[r + 16 >> 0] = 0 | B[E >> 0], rI(r + 16 | 0, r + 16 | 0, 64, 0, A + 32 | 0, 1, A), c = 0 | B[r + 16 >> 0], B[r + 16 >> 0] = 0 | B[E >> 0], bg(r + 80 | 0, r + 16 | 0, 64, 0), bg(r + 80 | 0, E + 1 | 0, w, s), f = 0 | vg(0 | i, 0 | e, 15, 0), o(), bg(r + 80 | 0, 34672, 15 & f, 0), LI(r + 336 | 0, a, n), bg(r + 80 | 0, r + 336 | 0, 8, 0), LI(r + 336 | 0, n = 0 | vg(0 | i, 0 | e, 47, 0), 0 | o()), bg(r + 80 | 0, r + 336 | 0, 8, 0), IB(r + 80 | 0, r), MI(r + 80 | 0, 256), 0 | EI(r, E + 1 + w | 0, 16)) { + MI(r, 16), c = -1; + break; + } + + rI(I, E + 1 | 0, w, s, A + 32 | 0, 2, A), ag(A + 36 | 0, r), Ig(A + 32 | 0), (0 != (2 & c) || 0 | lI(A + 32 | 0, 4)) && wA(A), 0 | g && (C[g >> 2] = w, C[g + 4 >> 2] = s), 0 | Q ? (B[Q >> 0] = c, c = 0) : c = 0; + } + } while (0); + + return y = t, 0 | c; + }, + _crypto_secretstream_xchacha20poly1305_push: function _crypto_secretstream_xchacha20poly1305_push(A, I, g, Q, E, i, e, c, a, n) { + A |= 0, I |= 0, Q |= 0, E |= 0, i |= 0, e |= 0, c |= 0, a |= 0, n |= 0; + var r, + t, + f = 0; + t = y, f = y = y + 63 & -64, y = y + 336 | 0, 0 | (g |= 0) && (C[g >> 2] = 0, C[g + 4 >> 2] = 0), i >>> 0 > 0 | 0 == (0 | i) & E >>> 0 > 4294967278 && SB(), OI(f, 64, 0, A + 32 | 0, A), gB(f + 64 | 0, f), MI(f, 64), bg(f + 64 | 0, e, c, a), e = 0 | Ug(0, 0, 0 | c, 0 | a), o(), bg(f + 64 | 0, 34672, 15 & e, 0), r = (e = f) + 64 | 0; + + do { + C[e >> 2] = 0, e = e + 4 | 0; + } while ((0 | e) < (0 | r)); + + return B[f >> 0] = n, rI(f, f, 64, 0, A + 32 | 0, 1, A), bg(f + 64 | 0, f, 64, 0), B[I >> 0] = 0 | B[f >> 0], rI(I + 1 | 0, Q, E, i, A + 32 | 0, 2, A), bg(f + 64 | 0, I + 1 | 0, E, i), bg(f + 64 | 0, 34672, 15 & E, 0), LI(f + 320 | 0, c, a), bg(f + 64 | 0, f + 320 | 0, 8, 0), LI(f + 320 | 0, Q = 0 | vg(0 | E, 0 | i, 64, 0), 0 | o()), bg(f + 64 | 0, f + 320 | 0, 8, 0), IB(f + 64 | 0, I + 1 + E | 0), MI(f + 64 | 0, 256), ag(A + 36 | 0, I + 1 + E | 0), Ig(A + 32 | 0), (0 != (2 & n) || 0 | lI(A + 32 | 0, 4)) && wA(A), 0 | g && (n = 0 | vg(0 | E, 0 | i, 17, 0), f = 0 | o(), C[g >> 2] = n, C[g + 4 >> 2] = f), y = t, 0; + }, + _crypto_secretstream_xchacha20poly1305_rekey: wA, + _crypto_secretstream_xchacha20poly1305_statebytes: function _crypto_secretstream_xchacha20poly1305_statebytes() { + return 52; + }, + _crypto_secretstream_xchacha20poly1305_tag_final: pB, + _crypto_secretstream_xchacha20poly1305_tag_message: MB, + _crypto_secretstream_xchacha20poly1305_tag_push: kB, + _crypto_secretstream_xchacha20poly1305_tag_rekey: uB, + _crypto_shorthash: function _crypto_shorthash(A, I, g, B, C) { + return G(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0), 0; + }, + _crypto_shorthash_bytes: lB, + _crypto_shorthash_keybytes: GB, + _crypto_shorthash_keygen: function _crypto_shorthash_keygen(A) { + Cg(A |= 0, 16); + }, + _crypto_sign: function _crypto_sign(A, I, g, B, C, Q) { + return 0 | TA(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0); + }, + _crypto_sign_bytes: dB, + _crypto_sign_detached: function _crypto_sign_detached(A, I, g, B, C, Q) { + return kg(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0), 0; + }, + _crypto_sign_ed25519_pk_to_curve25519: function _crypto_sign_ed25519_pk_to_curve25519(A, I) { + var g, B; + return A |= 0, B = y, g = y = y + 63 & -64, y = y + 256 | 0, 0 == (0 | GA(I |= 0)) && 0 == (0 | rA(g + 88 | 0, I)) && 0 != (0 | function (A) { + var I, g; + return I = y, g = y = y + 63 & -64, y = y + 160 | 0, O(g, A |= 0), A = 0 | cg(g), y = I, 0 | A; + }(g + 88 | 0)) ? (Sg(g), lA(g, g, g + 88 + 40 | 0), Sg(g + 48 | 0), _A(g + 48 | 0, g + 48 | 0, g + 88 + 40 | 0), W(g, g), u(g + 48 | 0, g + 48 | 0, g), CA(A, g + 48 | 0), A = 0) : A = -1, y = B, 0 | A; + }, + _crypto_sign_ed25519_sk_to_curve25519: function _crypto_sign_ed25519_sk_to_curve25519(A, I) { + var g, C, Q; + A |= 0, C = y, Q = y = y + 63 & -64, y = y + 64 | 0, RI(Q, I |= 0, 32, 0), B[Q >> 0] = -8 & B[Q >> 0], B[Q + 31 >> 0] = 63 & B[Q + 31 >> 0] | 64, I = Q, g = A + 32 | 0; + + do { + B[A >> 0] = 0 | B[I >> 0], A = A + 1 | 0, I = I + 1 | 0; + } while ((0 | A) < (0 | g)); + + return MI(Q, 64), y = C, 0; + }, + _crypto_sign_final_create: function _crypto_sign_final_create(A, I, g, B) { + return function (A, I, g, B) { + var C, Q; + I |= 0, g |= 0, B |= 0, C = y, Q = y = y + 63 & -64, y = y + 64 | 0, VI(A |= 0, Q), hA(I, g, Q, 64, 0, B, 1), y = C; + }(A |= 0, I |= 0, g |= 0, B |= 0), 0; + }, + _crypto_sign_final_verify: function _crypto_sign_final_verify(A, I, g) { + return 0 | function (A, I, g) { + var B, C; + return I |= 0, g |= 0, B = y, C = y = y + 63 & -64, y = y + 64 | 0, VI(A |= 0, C), A = 0 | uA(I, C, 64, 0, g, 1), y = B, 0 | A; + }(A |= 0, I |= 0, g |= 0); + }, + _crypto_sign_init: function _crypto_sign_init(A) { + return function (A) { + PI(A |= 0); + }(A |= 0), 0; + }, + _crypto_sign_keypair: function _crypto_sign_keypair(A, I) { + return function (A, I) { + var g, B; + A |= 0, I |= 0, g = y, B = y = y + 63 & -64, y = y + 32 | 0, Cg(B, 32), wI(A, I, B), MI(B, 32), y = g; + }(A |= 0, I |= 0), 0; + }, + _crypto_sign_messagebytes_max: function _crypto_sign_messagebytes_max() { + return -65; + }, + _crypto_sign_open: function _crypto_sign_open(A, I, g, B, C, Q) { + return 0 | SA(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0, Q |= 0); + }, + _crypto_sign_publickeybytes: YB, + _crypto_sign_secretkeybytes: dB, + _crypto_sign_seed_keypair: function _crypto_sign_seed_keypair(A, I, g) { + return wI(A |= 0, I |= 0, g |= 0), 0; + }, + _crypto_sign_seedbytes: YB, + _crypto_sign_statebytes: function _crypto_sign_statebytes() { + return 208; + }, + _crypto_sign_update: function _crypto_sign_update(A, I, g, B) { + return xg(A |= 0, I |= 0, g |= 0, B |= 0), 0; + }, + _crypto_sign_verify_detached: function _crypto_sign_verify_detached(A, I, g, B, C) { + return 0 | dg(A |= 0, I |= 0, g |= 0, B |= 0, C |= 0); + }, + _emscripten_get_sbrk_ptr: function _emscripten_get_sbrk_ptr() { + return 35232; + }, + _emscripten_replace_memory: function _emscripten_replace_memory(A) { + return B = new Int8Array(A), Q = new Uint8Array(A), C = new Int32Array(A), g = A, !0; + }, + _free: d, + _i64Add: vg, + _i64Subtract: Ug, + _malloc: F, + _memcpy: BA, + _memmove: YI, + _memset: YA, + _randombytes: function _randombytes(A, I, g) { + (g |= 0) >>> 0 < 1 | 1 == (0 | g) & (I |= 0) >>> 0 < 0 ? Cg(A |= 0, I) : c(34506, 34526, 197, 34552); + }, + _randombytes_buf: Cg, + _randombytes_buf_deterministic: function _randombytes_buf_deterministic(A, I, g) { + OI(A |= 0, I |= 0, 0, 34494, g |= 0); + }, + _randombytes_close: MB, + _randombytes_random: DB, + _randombytes_seedbytes: YB, + _randombytes_stir: hB, + _randombytes_uniform: function _randombytes_uniform(A) { + var I = 0; + if ((A |= 0) >>> 0 < 2) I = 0;else { + do { + I = 0 | DB(); + } while (I >>> 0 < (((0 - A | 0) >>> 0) % (A >>> 0) | 0) >>> 0); + + I = (I >>> 0) % (A >>> 0) | 0; + } + return 0 | I; + }, + _sodium_base642bin: m, + _sodium_base64_encoded_len: function _sodium_base64_encoded_len(A, I) { + var g; + return A |= 0, EB(I |= 0), (((A >>> 0) / 3 | 0) << 2 | 1) + (4 - (3 - (g = (0 | E((A >>> 0) / 3 | 0, -3)) + A | 0) & 0 - (I >>> 1 & 1)) & 0 - (1 & (g >>> 1 | g))) | 0; + }, + _sodium_bin2base64: q, + _sodium_bin2hex: function _sodium_bin2hex(A, I, g, C) { + A |= 0, g |= 0; + var E = 0, + i = 0; + + if ((C |= 0) >>> 0 < 2147483647 & C << 1 >>> 0 < (I |= 0) >>> 0 || SB(), C) { + I = 0; + + do { + i = 0 | Q[g + I >> 0], B[A + (E = I << 1) >> 0] = 87 + (i >>> 4) + ((65526 + (i >>> 4) | 0) >>> 8 & 217), B[A + (1 | E) >> 0] = (22272 + ((15 & i) << 8) + (65526 + (15 & i) & 55552) | 0) >>> 8, I = I + 1 | 0; + } while ((0 | I) != (0 | C)); + + I = C << 1; + } else I = 0; + + return B[A + I >> 0] = 0, 0 | A; + }, + _sodium_hex2bin: function _sodium_hex2bin(A, I, g, E, i, e, o) { + A |= 0, I |= 0, g |= 0, E |= 0, i |= 0, e |= 0, o |= 0; + var c = 0, + a = 0, + n = 0, + r = 0, + t = 0, + f = 0, + w = 0; + + A: do { + if (E) { + r = 0, f = 0, c = 0, a = 0; + + I: for (;;) { + for (; !(255 & ((t = (65526 + (201 + (223 & (n = 0 | Q[g + c >> 0])) & 255) ^ 65520 + (201 + (223 & n) & 255)) >>> 8) | (65526 + (48 ^ n) | 0) >>> 8) | 0);) { + if (!(0 != (0 | i) & a << 24 >> 24 == 0)) { + n = 0; + break I; + } + + if (!(0 | qg(i, n))) { + a = r, w = 17; + break A; + } + + if (!((c = c + 1 | 0) >>> 0 < E >>> 0)) { + a = r, w = 17; + break A; + } + + a = 0; + } + + if (n = t & 201 + (223 & n) | (65526 + (48 ^ n) | 0) >>> 8 & (48 ^ n), r >>> 0 >= I >>> 0) { + w = 9; + break; + } + + if (a << 24 >> 24 ? (B[A + r >> 0] = n | 255 & f, r = r + 1 | 0, n = f) : n = n << 4 & 255, a = ~a, !((c = c + 1 | 0) >>> 0 < E >>> 0)) { + n = 0; + break; + } + + f = n; + } + + if (9 == (0 | w) && (C[8678] = 68, n = -1), a << 24 >> 24) { + C[8678] = 28, n = 0, a = c + -1 | 0, c = -1; + break; + } + + if (n) { + n = 0, a = c, c = -1; + break; + } + + a = r, w = 17; + break; + } + + a = 0, c = 0, w = 17; + } while (0); + + return 17 == (0 | w) && (n = a, a = c, c = 0), o ? C[o >> 2] = g + a : (0 | a) != (0 | E) && (C[8678] = 28, c = -1), 0 | e && (C[e >> 2] = n), 0 | c; + }, + _sodium_init: function _sodium_init() { + var A = 0; + return 0 | C[8676] ? A = 1 : (function () { + return A = y, I = y = y + 63 & -64, y = y + 16 | 0, Zg(I), 0 | C[I >> 2] && Zg(I), void (y = A); + var A, I; + }(), hB(), function () { + var A = 0; + (0 | (A = 0 | w(30))) > 0 ? C[8677] = A : A = 0 | C[8677], A >>> 0 < 16 ? SB() : Cg(34688, 16); + }(), C[8676] = 1, A = 0), 0 | A; + }, + _sodium_library_minimal: kB, + _sodium_library_version_major: function _sodium_library_version_major() { + return 10; + }, + _sodium_library_version_minor: pB, + _sodium_pad: function _sodium_pad(A, I, g, E, i) { + A |= 0, I |= 0, g |= 0, i |= 0; + var e, + o, + c = 0, + a = 0; + if (o = y, e = y = y + 63 & -64, y = y + 16 | 0, E |= 0) { + if ((a = E + -1 - (c = E + -1 & E ? (g >>> 0) % (E >>> 0) | 0 : E + -1 & g) | 0) >>> 0 >= ~g >>> 0 && SB(), (a + g | 0) >>> 0 < i >>> 0) { + 0 | A && (C[A >> 2] = a + g + 1), B[e >> 0] = 0, c = 0; + + do { + A = ((c ^ a) - 1 | 0) >>> 24, B[(i = I + (a + g) + (0 - c) | 0) >> 0] = 128 & A | B[e >> 0] & B[i >> 0] & 255, B[e >> 0] = 0 | A | Q[e >> 0], c = c + 1 | 0; + } while ((0 | c) != (0 | E)); + + c = 0; + } else c = -1; + } else c = -1; + return y = o, 0 | c; + }, + _sodium_unpad: function _sodium_unpad(A, I, g, B) { + A |= 0, I |= 0, g |= 0, B |= 0; + var E, + i, + e = 0, + o = 0, + c = 0, + a = 0, + n = 0; + + if (i = y, E = y = y + 63 & -64, y = y + 16 | 0, C[E >> 2] = 0, (B + -1 | 0) >>> 0 < g >>> 0) { + for (e = 0, c = 0, a = 0; e &= 255, o = 0 | Q[I + (g + -1) + (0 - c) >> 0], n = (511 + (0 | C[E >> 2]) & e + 511 & 511 + (128 ^ o)) >>> 8 & 1, C[E >> 2] = c & 0 - n | C[E >> 2], a = n | 255 & a, (0 | (c = c + 1 | 0)) != (0 | B);) { + e |= o; + } + + C[A >> 2] = g + -1 - (0 | C[E >> 2]), e = a + -1 | 0; + } else e = -1; + + return y = i, 0 | e; + }, + _sodium_version_string: function _sodium_version_string() { + return 34617; + }, + establishStackSpace: function establishStackSpace(A, I) { + y = A |= 0; + }, + stackAlloc: function stackAlloc(A) { + var I; + return I = y, y = 15 + (y = y + (A |= 0) | 0) & -16, 0 | I; + }, + stackRestore: function stackRestore(A) { + y = A |= 0; + }, + stackSave: function stackSave() { + return 0 | y; + } + }; + }({ + Math: Math, + Int8Array: Int8Array, + Int32Array: Int32Array, + Uint8Array: Uint8Array + }, { + a: j, + b: function b(A) { + s = A; + }, + c: function c() { + return s; + }, + d: function d(A, I, g, B) { + j("Assertion failed: " + _d(A) + ", at: " + [I ? _d(I) : "unknown filename", g, B ? _d(B) : "unknown function"]); + }, + e: BA, + f: function f() { + j(); + }, + g: function g(A) { + return O[A](); + }, + h: IA, + i: function i(A, I, g) { + u.set(u.subarray(I, I + g), A); + }, + j: function j(A) { + var I = IA(); + if (A > 2130706432) return !1; + + for (var g = Math.max(I, 16777216); g < A;) { + g = g <= 536870912 ? Y(2 * g, 16777216) : Math.min(Y((3 * g + 2147483648) / 4, 16777216), 2130706432); + } + + return !!gA(g); + }, + k: function k(A) { + switch (A) { + case 30: + return 16384; + + case 85: + return 130048; + + case 132: + case 133: + case 12: + case 137: + case 138: + case 15: + case 235: + case 16: + case 17: + case 18: + case 19: + case 20: + case 149: + case 13: + case 10: + case 236: + case 153: + case 9: + case 21: + case 22: + case 159: + case 154: + case 14: + case 77: + case 78: + case 139: + case 80: + case 81: + case 82: + case 68: + case 67: + case 164: + case 11: + case 29: + case 47: + case 48: + case 95: + case 52: + case 51: + case 46: + return 200809; + + case 79: + return 0; + + case 27: + case 246: + case 127: + case 128: + case 23: + case 24: + case 160: + case 161: + case 181: + case 182: + case 242: + case 183: + case 184: + case 243: + case 244: + case 245: + case 165: + case 178: + case 179: + case 49: + case 50: + case 168: + case 169: + case 175: + case 170: + case 171: + case 172: + case 97: + case 76: + case 32: + case 173: + case 35: + return -1; + + case 176: + case 177: + case 7: + case 155: + case 8: + case 157: + case 125: + case 126: + case 92: + case 93: + case 129: + case 130: + case 131: + case 94: + case 91: + return 1; + + case 74: + case 60: + case 69: + case 70: + case 4: + return 1024; + + case 31: + case 42: + case 72: + return 32; + + case 87: + case 26: + case 33: + return 2147483647; + + case 34: + case 1: + return 47839; + + case 38: + case 36: + return 99; + + case 43: + case 37: + return 2048; + + case 0: + return 2097152; + + case 3: + return 65536; + + case 28: + return 32768; + + case 44: + return 32767; + + case 75: + return 16384; + + case 39: + return 1e3; + + case 89: + return 700; + + case 71: + return 256; + + case 40: + return 255; + + case 2: + return 100; + + case 180: + return 64; + + case 25: + return 20; + + case 5: + return 16; + + case 6: + return 6; + + case 73: + return 4; + + case 84: + return "object" == (typeof navigator === "undefined" ? "undefined" : _typeof(navigator)) && navigator.hardwareConcurrency || 1; + } + + return BA(28), -1; + }, + l: function l(A) { + j("OOM"); + }, + m: Z, + n: $, + o: gA, + p: AA, + q: function q() { + var A = AA(); + return I.extraStackTrace && (A += "\n" + I.extraStackTrace()), $(A); + }, + r: 35408 + }, F), + aA = (I.___errno_location = cA.___errno_location, I.___muldi3 = cA.___muldi3, I.___uremdi3 = cA.___uremdi3, I._bitshift64Ashr = cA._bitshift64Ashr, I._bitshift64Lshr = cA._bitshift64Lshr, I._bitshift64Shl = cA._bitshift64Shl, I._crypto_aead_chacha20poly1305_abytes = cA._crypto_aead_chacha20poly1305_abytes, I._crypto_aead_chacha20poly1305_decrypt = cA._crypto_aead_chacha20poly1305_decrypt, I._crypto_aead_chacha20poly1305_decrypt_detached = cA._crypto_aead_chacha20poly1305_decrypt_detached, I._crypto_aead_chacha20poly1305_encrypt = cA._crypto_aead_chacha20poly1305_encrypt, I._crypto_aead_chacha20poly1305_encrypt_detached = cA._crypto_aead_chacha20poly1305_encrypt_detached, I._crypto_aead_chacha20poly1305_ietf_abytes = cA._crypto_aead_chacha20poly1305_ietf_abytes, I._crypto_aead_chacha20poly1305_ietf_decrypt = cA._crypto_aead_chacha20poly1305_ietf_decrypt, I._crypto_aead_chacha20poly1305_ietf_decrypt_detached = cA._crypto_aead_chacha20poly1305_ietf_decrypt_detached, I._crypto_aead_chacha20poly1305_ietf_encrypt = cA._crypto_aead_chacha20poly1305_ietf_encrypt, I._crypto_aead_chacha20poly1305_ietf_encrypt_detached = cA._crypto_aead_chacha20poly1305_ietf_encrypt_detached, I._crypto_aead_chacha20poly1305_ietf_keybytes = cA._crypto_aead_chacha20poly1305_ietf_keybytes, I._crypto_aead_chacha20poly1305_ietf_keygen = cA._crypto_aead_chacha20poly1305_ietf_keygen, I._crypto_aead_chacha20poly1305_ietf_messagebytes_max = cA._crypto_aead_chacha20poly1305_ietf_messagebytes_max, I._crypto_aead_chacha20poly1305_ietf_npubbytes = cA._crypto_aead_chacha20poly1305_ietf_npubbytes, I._crypto_aead_chacha20poly1305_ietf_nsecbytes = cA._crypto_aead_chacha20poly1305_ietf_nsecbytes, I._crypto_aead_chacha20poly1305_keybytes = cA._crypto_aead_chacha20poly1305_keybytes, I._crypto_aead_chacha20poly1305_keygen = cA._crypto_aead_chacha20poly1305_keygen, I._crypto_aead_chacha20poly1305_messagebytes_max = cA._crypto_aead_chacha20poly1305_messagebytes_max, I._crypto_aead_chacha20poly1305_npubbytes = cA._crypto_aead_chacha20poly1305_npubbytes, I._crypto_aead_chacha20poly1305_nsecbytes = cA._crypto_aead_chacha20poly1305_nsecbytes, I._crypto_aead_xchacha20poly1305_ietf_abytes = cA._crypto_aead_xchacha20poly1305_ietf_abytes, I._crypto_aead_xchacha20poly1305_ietf_decrypt = cA._crypto_aead_xchacha20poly1305_ietf_decrypt, I._crypto_aead_xchacha20poly1305_ietf_decrypt_detached = cA._crypto_aead_xchacha20poly1305_ietf_decrypt_detached, I._crypto_aead_xchacha20poly1305_ietf_encrypt = cA._crypto_aead_xchacha20poly1305_ietf_encrypt, I._crypto_aead_xchacha20poly1305_ietf_encrypt_detached = cA._crypto_aead_xchacha20poly1305_ietf_encrypt_detached, I._crypto_aead_xchacha20poly1305_ietf_keybytes = cA._crypto_aead_xchacha20poly1305_ietf_keybytes, I._crypto_aead_xchacha20poly1305_ietf_keygen = cA._crypto_aead_xchacha20poly1305_ietf_keygen, I._crypto_aead_xchacha20poly1305_ietf_messagebytes_max = cA._crypto_aead_xchacha20poly1305_ietf_messagebytes_max, I._crypto_aead_xchacha20poly1305_ietf_npubbytes = cA._crypto_aead_xchacha20poly1305_ietf_npubbytes, I._crypto_aead_xchacha20poly1305_ietf_nsecbytes = cA._crypto_aead_xchacha20poly1305_ietf_nsecbytes, I._crypto_auth = cA._crypto_auth, I._crypto_auth_bytes = cA._crypto_auth_bytes, I._crypto_auth_keybytes = cA._crypto_auth_keybytes, I._crypto_auth_keygen = cA._crypto_auth_keygen, I._crypto_auth_verify = cA._crypto_auth_verify, I._crypto_box_beforenm = cA._crypto_box_beforenm, I._crypto_box_beforenmbytes = cA._crypto_box_beforenmbytes, I._crypto_box_detached = cA._crypto_box_detached, I._crypto_box_detached_afternm = cA._crypto_box_detached_afternm, I._crypto_box_easy = cA._crypto_box_easy, I._crypto_box_easy_afternm = cA._crypto_box_easy_afternm, I._crypto_box_keypair = cA._crypto_box_keypair, I._crypto_box_macbytes = cA._crypto_box_macbytes, I._crypto_box_messagebytes_max = cA._crypto_box_messagebytes_max, I._crypto_box_noncebytes = cA._crypto_box_noncebytes, I._crypto_box_open_detached = cA._crypto_box_open_detached, I._crypto_box_open_detached_afternm = cA._crypto_box_open_detached_afternm, I._crypto_box_open_easy = cA._crypto_box_open_easy, I._crypto_box_open_easy_afternm = cA._crypto_box_open_easy_afternm, I._crypto_box_publickeybytes = cA._crypto_box_publickeybytes, I._crypto_box_seal = cA._crypto_box_seal, I._crypto_box_seal_open = cA._crypto_box_seal_open, I._crypto_box_sealbytes = cA._crypto_box_sealbytes, I._crypto_box_secretkeybytes = cA._crypto_box_secretkeybytes, I._crypto_box_seed_keypair = cA._crypto_box_seed_keypair, I._crypto_box_seedbytes = cA._crypto_box_seedbytes, I._crypto_generichash = cA._crypto_generichash, I._crypto_generichash_bytes = cA._crypto_generichash_bytes, I._crypto_generichash_bytes_max = cA._crypto_generichash_bytes_max, I._crypto_generichash_bytes_min = cA._crypto_generichash_bytes_min, I._crypto_generichash_final = cA._crypto_generichash_final, I._crypto_generichash_init = cA._crypto_generichash_init, I._crypto_generichash_keybytes = cA._crypto_generichash_keybytes, I._crypto_generichash_keybytes_max = cA._crypto_generichash_keybytes_max, I._crypto_generichash_keybytes_min = cA._crypto_generichash_keybytes_min, I._crypto_generichash_keygen = cA._crypto_generichash_keygen, I._crypto_generichash_statebytes = cA._crypto_generichash_statebytes, I._crypto_generichash_update = cA._crypto_generichash_update, I._crypto_hash = cA._crypto_hash, I._crypto_hash_bytes = cA._crypto_hash_bytes, I._crypto_kdf_bytes_max = cA._crypto_kdf_bytes_max, I._crypto_kdf_bytes_min = cA._crypto_kdf_bytes_min, I._crypto_kdf_contextbytes = cA._crypto_kdf_contextbytes, I._crypto_kdf_derive_from_key = cA._crypto_kdf_derive_from_key, I._crypto_kdf_keybytes = cA._crypto_kdf_keybytes, I._crypto_kdf_keygen = cA._crypto_kdf_keygen, I._crypto_kx_client_session_keys = cA._crypto_kx_client_session_keys, I._crypto_kx_keypair = cA._crypto_kx_keypair, I._crypto_kx_publickeybytes = cA._crypto_kx_publickeybytes, I._crypto_kx_secretkeybytes = cA._crypto_kx_secretkeybytes, I._crypto_kx_seed_keypair = cA._crypto_kx_seed_keypair, I._crypto_kx_seedbytes = cA._crypto_kx_seedbytes, I._crypto_kx_server_session_keys = cA._crypto_kx_server_session_keys, I._crypto_kx_sessionkeybytes = cA._crypto_kx_sessionkeybytes, I._crypto_pwhash = cA._crypto_pwhash, I._crypto_pwhash_alg_argon2i13 = cA._crypto_pwhash_alg_argon2i13, I._crypto_pwhash_alg_argon2id13 = cA._crypto_pwhash_alg_argon2id13, I._crypto_pwhash_alg_default = cA._crypto_pwhash_alg_default, I._crypto_pwhash_bytes_max = cA._crypto_pwhash_bytes_max, I._crypto_pwhash_bytes_min = cA._crypto_pwhash_bytes_min, I._crypto_pwhash_memlimit_interactive = cA._crypto_pwhash_memlimit_interactive, I._crypto_pwhash_memlimit_max = cA._crypto_pwhash_memlimit_max, I._crypto_pwhash_memlimit_min = cA._crypto_pwhash_memlimit_min, I._crypto_pwhash_memlimit_moderate = cA._crypto_pwhash_memlimit_moderate, I._crypto_pwhash_memlimit_sensitive = cA._crypto_pwhash_memlimit_sensitive, I._crypto_pwhash_opslimit_interactive = cA._crypto_pwhash_opslimit_interactive, I._crypto_pwhash_opslimit_max = cA._crypto_pwhash_opslimit_max, I._crypto_pwhash_opslimit_min = cA._crypto_pwhash_opslimit_min, I._crypto_pwhash_opslimit_moderate = cA._crypto_pwhash_opslimit_moderate, I._crypto_pwhash_opslimit_sensitive = cA._crypto_pwhash_opslimit_sensitive, I._crypto_pwhash_passwd_max = cA._crypto_pwhash_passwd_max, I._crypto_pwhash_passwd_min = cA._crypto_pwhash_passwd_min, I._crypto_pwhash_saltbytes = cA._crypto_pwhash_saltbytes, I._crypto_pwhash_str = cA._crypto_pwhash_str, I._crypto_pwhash_str_alg = cA._crypto_pwhash_str_alg, I._crypto_pwhash_str_needs_rehash = cA._crypto_pwhash_str_needs_rehash, I._crypto_pwhash_str_verify = cA._crypto_pwhash_str_verify, I._crypto_pwhash_strbytes = cA._crypto_pwhash_strbytes, I._crypto_pwhash_strprefix = cA._crypto_pwhash_strprefix, I._crypto_scalarmult = cA._crypto_scalarmult, I._crypto_scalarmult_base = cA._crypto_scalarmult_base, I._crypto_scalarmult_bytes = cA._crypto_scalarmult_bytes, I._crypto_scalarmult_scalarbytes = cA._crypto_scalarmult_scalarbytes, I._crypto_secretbox_detached = cA._crypto_secretbox_detached, I._crypto_secretbox_easy = cA._crypto_secretbox_easy, I._crypto_secretbox_keybytes = cA._crypto_secretbox_keybytes, I._crypto_secretbox_keygen = cA._crypto_secretbox_keygen, I._crypto_secretbox_macbytes = cA._crypto_secretbox_macbytes, I._crypto_secretbox_messagebytes_max = cA._crypto_secretbox_messagebytes_max, I._crypto_secretbox_noncebytes = cA._crypto_secretbox_noncebytes, I._crypto_secretbox_open_detached = cA._crypto_secretbox_open_detached, I._crypto_secretbox_open_easy = cA._crypto_secretbox_open_easy, I._crypto_secretstream_xchacha20poly1305_abytes = cA._crypto_secretstream_xchacha20poly1305_abytes, I._crypto_secretstream_xchacha20poly1305_headerbytes = cA._crypto_secretstream_xchacha20poly1305_headerbytes, I._crypto_secretstream_xchacha20poly1305_init_pull = cA._crypto_secretstream_xchacha20poly1305_init_pull, I._crypto_secretstream_xchacha20poly1305_init_push = cA._crypto_secretstream_xchacha20poly1305_init_push, I._crypto_secretstream_xchacha20poly1305_keybytes = cA._crypto_secretstream_xchacha20poly1305_keybytes, I._crypto_secretstream_xchacha20poly1305_keygen = cA._crypto_secretstream_xchacha20poly1305_keygen, I._crypto_secretstream_xchacha20poly1305_messagebytes_max = cA._crypto_secretstream_xchacha20poly1305_messagebytes_max, I._crypto_secretstream_xchacha20poly1305_pull = cA._crypto_secretstream_xchacha20poly1305_pull, I._crypto_secretstream_xchacha20poly1305_push = cA._crypto_secretstream_xchacha20poly1305_push, I._crypto_secretstream_xchacha20poly1305_rekey = cA._crypto_secretstream_xchacha20poly1305_rekey, I._crypto_secretstream_xchacha20poly1305_statebytes = cA._crypto_secretstream_xchacha20poly1305_statebytes, I._crypto_secretstream_xchacha20poly1305_tag_final = cA._crypto_secretstream_xchacha20poly1305_tag_final, I._crypto_secretstream_xchacha20poly1305_tag_message = cA._crypto_secretstream_xchacha20poly1305_tag_message, I._crypto_secretstream_xchacha20poly1305_tag_push = cA._crypto_secretstream_xchacha20poly1305_tag_push, I._crypto_secretstream_xchacha20poly1305_tag_rekey = cA._crypto_secretstream_xchacha20poly1305_tag_rekey, I._crypto_shorthash = cA._crypto_shorthash, I._crypto_shorthash_bytes = cA._crypto_shorthash_bytes, I._crypto_shorthash_keybytes = cA._crypto_shorthash_keybytes, I._crypto_shorthash_keygen = cA._crypto_shorthash_keygen, I._crypto_sign = cA._crypto_sign, I._crypto_sign_bytes = cA._crypto_sign_bytes, I._crypto_sign_detached = cA._crypto_sign_detached, I._crypto_sign_ed25519_pk_to_curve25519 = cA._crypto_sign_ed25519_pk_to_curve25519, I._crypto_sign_ed25519_sk_to_curve25519 = cA._crypto_sign_ed25519_sk_to_curve25519, I._crypto_sign_final_create = cA._crypto_sign_final_create, I._crypto_sign_final_verify = cA._crypto_sign_final_verify, I._crypto_sign_init = cA._crypto_sign_init, I._crypto_sign_keypair = cA._crypto_sign_keypair, I._crypto_sign_messagebytes_max = cA._crypto_sign_messagebytes_max, I._crypto_sign_open = cA._crypto_sign_open, I._crypto_sign_publickeybytes = cA._crypto_sign_publickeybytes, I._crypto_sign_secretkeybytes = cA._crypto_sign_secretkeybytes, I._crypto_sign_seed_keypair = cA._crypto_sign_seed_keypair, I._crypto_sign_seedbytes = cA._crypto_sign_seedbytes, I._crypto_sign_statebytes = cA._crypto_sign_statebytes, I._crypto_sign_update = cA._crypto_sign_update, I._crypto_sign_verify_detached = cA._crypto_sign_verify_detached, I._emscripten_get_sbrk_ptr = cA._emscripten_get_sbrk_ptr, I._emscripten_replace_memory = cA._emscripten_replace_memory); + + if (I._free = cA._free, I._i64Add = cA._i64Add, I._i64Subtract = cA._i64Subtract, I._malloc = cA._malloc, I._memcpy = cA._memcpy, I._memmove = cA._memmove, I._memset = cA._memset, I._randombytes = cA._randombytes, I._randombytes_buf = cA._randombytes_buf, I._randombytes_buf_deterministic = cA._randombytes_buf_deterministic, I._randombytes_close = cA._randombytes_close, I._randombytes_random = cA._randombytes_random, I._randombytes_seedbytes = cA._randombytes_seedbytes, I._randombytes_stir = cA._randombytes_stir, I._randombytes_uniform = cA._randombytes_uniform, I._sodium_base642bin = cA._sodium_base642bin, I._sodium_base64_encoded_len = cA._sodium_base64_encoded_len, I._sodium_bin2base64 = cA._sodium_bin2base64, I._sodium_bin2hex = cA._sodium_bin2hex, I._sodium_hex2bin = cA._sodium_hex2bin, I._sodium_init = cA._sodium_init, I._sodium_library_minimal = cA._sodium_library_minimal, I._sodium_library_version_major = cA._sodium_library_version_major, I._sodium_library_version_minor = cA._sodium_library_version_minor, I._sodium_pad = cA._sodium_pad, I._sodium_unpad = cA._sodium_unpad, I._sodium_version_string = cA._sodium_version_string, I.establishStackSpace = cA.establishStackSpace, I.stackAlloc = cA.stackAlloc, I.stackRestore = cA.stackRestore, I.stackSave = cA.stackSave, I.asm = cA, I.setValue = function (A, I, g, B) { + switch ("*" === (g = g || "i8").charAt(g.length - 1) && (g = "i32"), g) { + case "i1": + case "i8": + p[A >> 0] = I; + break; + + case "i16": + H[A >> 1] = I; + break; + + case "i32": + k[A >> 2] = I; + break; + + case "i64": + q = [I >>> 0, (T = I, +R(T) >= 1 ? T > 0 ? (0 | L(+m(T / 4294967296), 4294967295)) >>> 0 : ~~+N((T - +(~~T >>> 0)) / 4294967296) >>> 0 : 0)], k[A >> 2] = q[0], k[A + 4 >> 2] = q[1]; + break; + + case "float": + l[A >> 2] = I; + break; + + case "double": + _[A >> 3] = I; + break; + + default: + j("invalid type for setValue: " + g); + } + }, I.getValue = function (A, I, g) { + switch ("*" === (I = I || "i8").charAt(I.length - 1) && (I = "i32"), I) { + case "i1": + case "i8": + return p[A >> 0]; + + case "i16": + return H[A >> 1]; + + case "i32": + case "i64": + return k[A >> 2]; + + case "float": + return l[A >> 2]; + + case "double": + return _[A >> 3]; + + default: + j("invalid type for getValue: " + I); + } + + return null; + }, I.UTF8ToString = _d, V) if (W(V) || (eA = V, V = I.locateFile ? I.locateFile(eA, f) : f + eA), o || i) { + var nA = n(V); + u.set(nA, 8); + } else { + x++, I.monitorRunDependencies && I.monitorRunDependencies(x); + + var rA = function rA(A) { + A.byteLength && (A = new Uint8Array(A)), u.set(A, 8), I.memoryInitializerRequest && delete I.memoryInitializerRequest.response, function (A) { + if (x--, I.monitorRunDependencies && I.monitorRunDependencies(x), 0 == x && (null !== K && (clearInterval(K), K = null), X)) { + var g = X; + X = null, g(); + } + }(); + }, + tA = function tA() { + a(V, rA, function () { + throw "could not load memory initializer " + V; + }); + }, + fA = iA(V); + + if (fA) rA(fA.buffer);else if (I.memoryInitializerRequest) { + var wA = function wA() { + var A = I.memoryInitializerRequest, + g = A.response; + + if (200 !== A.status && 0 !== A.status) { + var B = iA(I.memoryInitializerRequestURL); + if (!B) return void tA(); + g = B.buffer; + } + + rA(g); + }; + + I.memoryInitializerRequest.response ? setTimeout(wA, 0) : I.memoryInitializerRequest.addEventListener("load", wA); + } else tA(); + } + + function yA(A) { + function g() { + oA || (oA = !0, h || (U(b), U(J), I.onRuntimeInitialized && I.onRuntimeInitialized(), function () { + if (I.postRun) for ("function" == typeof I.postRun && (I.postRun = [I.postRun]); I.postRun.length;) { + A = I.postRun.shift(), P.unshift(A); + } + var A; + U(P); + }())); + } + + A = A || e, x > 0 || (function () { + if (I.preRun) for ("function" == typeof I.preRun && (I.preRun = [I.preRun]); I.preRun.length;) { + A = I.preRun.shift(), v.unshift(A); + } + var A; + U(v); + }(), x > 0 || (I.setStatus ? (I.setStatus("Running..."), setTimeout(function () { + setTimeout(function () { + I.setStatus(""); + }, 1), g(); + }, 1)) : g())); + } + + if (X = function A() { + oA || yA(), oA || (X = A); + }, I.run = yA, I.preInit) for ("function" == typeof I.preInit && (I.preInit = [I.preInit]); I.preInit.length > 0;) { + I.preInit.pop()(); + } + yA(), Object.keys(B).forEach(function (A) { + "getRandomValue" !== A && delete B[A]; + }), Object.keys(I).forEach(function (A) { + B[A] = I[A]; + }); + }; + var g, + C = void 0 !== C ? C : {}, + Q = {}; + + for (g in C) { + C.hasOwnProperty(g) && (Q[g] = C[g]); + } + + var E, + i, + e = [], + o = !1, + c = !1, + a = !1; + o = "object" == (typeof window === "undefined" ? "undefined" : _typeof(window)), c = "function" == typeof importScripts, E = "object" == (typeof process === "undefined" ? "undefined" : _typeof(process)) && "object" == _typeof(process.versions) && "string" == typeof process.versions.node, a = E && !o && !c, i = !o && !a && !c; + var n, + r, + t, + f, + w = ""; + a ? (w = __dirname + "/", n = function n(A, I) { + var g; + return (g = eA(A)) || (t || (t = __webpack_require__(/*! fs */ 0)), f || (f = __webpack_require__(/*! path */ "./node_modules/path-browserify/index.js")), A = f.normalize(A), g = t.readFileSync(A)), I ? g : g.toString(); + }, r = function r(A) { + var I = n(A, !0); + return I.buffer || (I = new Uint8Array(I)), H(I.buffer), I; + }, process.argv.length > 1 && process.argv[1].replace(/\\/g, "/"), e = process.argv.slice(2), true && (module.exports = C), process.on("unhandledRejection", z), C.inspect = function () { + return "[Emscripten Module object]"; + }) : i ? ("undefined" != typeof read && (n = function n(A) { + var I = eA(A); + return I ? EA(I) : read(A); + }), r = function r(A) { + var I; + return (I = eA(A)) ? I : "function" == typeof readbuffer ? new Uint8Array(readbuffer(A)) : (H("object" == _typeof(I = read(A, "binary"))), I); + }, "undefined" != typeof scriptArgs ? e = scriptArgs : void 0 !== arguments && (e = arguments), "undefined" != typeof print && ("undefined" == typeof console && (console = {}), console.log = print, console.warn = console.error = "undefined" != typeof printErr ? printErr : print)) : (o || c) && (c ? w = self.location.href : document.currentScript && (w = document.currentScript.src), w = 0 !== w.indexOf("blob:") ? w.substr(0, w.lastIndexOf("/") + 1) : "", n = function n(A) { + try { + var I = new XMLHttpRequest(); + return I.open("GET", A, !1), I.send(null), I.responseText; + } catch (I) { + var g = eA(A); + if (g) return EA(g); + throw I; + } + }, c && (r = function r(A) { + try { + var I = new XMLHttpRequest(); + return I.open("GET", A, !1), I.responseType = "arraybuffer", I.send(null), new Uint8Array(I.response); + } catch (I) { + var g = eA(A); + if (g) return g; + throw I; + } + })); + var y = C.print || void 0, + s = C.printErr || void 0; + + for (g in Q) { + Q.hasOwnProperty(g) && (C[g] = Q[g]); + } + + Q = null, C.arguments && (e = C.arguments), C.thisProgram && C.thisProgram, C.quit && C.quit; + var h, + D, + F = { + "f64-rem": function f64Rem(A, I) { + return A % I; + }, + debugger: function _debugger() {} + }; + new Array(8), C.wasmBinary && (h = C.wasmBinary), C.noExitRuntime && C.noExitRuntime, "object" != (typeof WebAssembly === "undefined" ? "undefined" : _typeof(WebAssembly)) && s("no native wasm support detected"); + var p = new WebAssembly.Table({ + initial: 0, + maximum: 0, + element: "anyfunc" + }), + u = !1; + + function H(A, I) { + A || z("Assertion failed: " + I); + } + + var k, + l, + _, + G, + _d2, + Y, + M, + S = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0; + + function U(A, I) { + return A ? function (A, I, g) { + for (var B = I + g, C = I; A[C] && !(C >= B);) { + ++C; + } + + if (C - I > 16 && A.subarray && S) return S.decode(A.subarray(I, C)); + + for (var Q = ""; I < C;) { + var E = A[I++]; + + if (128 & E) { + var i = 63 & A[I++]; + + if (192 != (224 & E)) { + var e = 63 & A[I++]; + if ((E = 224 == (240 & E) ? (15 & E) << 12 | i << 6 | e : (7 & E) << 18 | i << 12 | e << 6 | 63 & A[I++]) < 65536) Q += String.fromCharCode(E);else { + var o = E - 65536; + Q += String.fromCharCode(55296 | o >> 10, 56320 | 1023 & o); + } + } else Q += String.fromCharCode((31 & E) << 6 | i); + } else Q += String.fromCharCode(E); + } + + return Q; + }(_, A, I) : ""; + } + + function v(A, I) { + return A % I > 0 && (A += I - A % I), A; + } + + function b(A) { + k = A, C.HEAP8 = l = new Int8Array(A), C.HEAP16 = G = new Int16Array(A), C.HEAP32 = _d2 = new Int32Array(A), C.HEAPU8 = _ = new Uint8Array(A), C.HEAPU16 = new Uint16Array(A), C.HEAPU32 = new Uint32Array(A), C.HEAPF32 = Y = new Float32Array(A), C.HEAPF64 = M = new Float64Array(A); + } + + "undefined" != typeof TextDecoder && new TextDecoder("utf-16le"); + var J = C.TOTAL_MEMORY || 16777216; + + function P(A) { + for (; A.length > 0;) { + var I = A.shift(); + + if ("function" != typeof I) { + var g = I.func; + "number" == typeof g ? void 0 === I.arg ? C.dynCall_v(g) : C.dynCall_vi(g, I.arg) : g(void 0 === I.arg ? null : I.arg); + } else I(); + } + } + + (D = C.wasmMemory ? C.wasmMemory : new WebAssembly.Memory({ + initial: J / 65536 + })) && (k = D.buffer), J = k.byteLength, b(k), _d2[9312] = 5280320; + var R = [], + N = [], + m = [], + L = [], + x = Math.abs, + K = Math.ceil, + X = Math.floor, + j = Math.min, + T = 0, + q = null, + V = null; + + function z(A) { + throw C.onAbort && C.onAbort(A), y(A += ""), s(A), u = !0, "abort(" + A + "). Build with -s ASSERTIONS=1 for more info."; + } + + C.preloadedImages = {}, C.preloadedAudios = {}; + var W = "data:application/octet-stream;base64,"; + + function O(A) { + return String.prototype.startsWith ? A.startsWith(W) : 0 === A.indexOf(W); + } + + var Z, + $, + AA, + IA = "data:application/octet-stream;base64,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XQJxYwCIAgJyYwBeAnNjAIoCAnRjAIkCAnVjAIMCAnZjAEgCd2MA/AECeGMAbAJ5YwD/AQJ6YwD+AQJBYwD9AQq20ATgAhMAIABBwAAgAWuthiAAIAGtiIQLEAAgACABdCAAQSAgAWt2cgseACAAIAF8IAFC/////w+DIABCAYZC/v///x+DfnwLUAEDfwJ/IwAhBCMAQT9qQUBxJAAjACECIwBBEGokACACIAA2AgAgAQRAQQAhAANAIAAgAigCAGpBADoAACAAQQFqIgAgAUcNAAsLIAQLJAALCQAgACABNgAAC8UJAg1/KX4gAigCBCIDrCEQIAIoAggiBKwhGCACKAIMIgWsIRsgAigCECIGrCEdIAIoAhQiB6whHyACKAIYIgisISYgAigCHCIJrCEtIAIoAiAiCqwhMCABKAIEIgusISAgASgCDCIMrCEhIAEoAhQiDawhIiABKAIcIg6sISMgASgCJCIPrCEkIA9BAXSsIicgA0ETbKx+IAEoAgCsIhEgAigCAKwiEn58IAEoAiCsIhMgBEETbKwiLn58IA5BAXSsIiggBUETbKwiKX58IAEoAhisIhQgBkETbKwiJX58IA1BAXSsIiogB0ETbKwiHn58IAEoAhCsIhUgCEETbKwiHH58IAxBAXSsIisgCUETbKwiGX58IApBE2ysIhcgASgCCKwiFn58IAtBAXSsIiwgAigCJCIBQRNsrCIafnwhMSAQIBR+IBIgI358IBggIn58IBUgG358IB0gIX58IBYgH358ICAgJn58IBEgLX58IBcgJH58IBMgGn58IBAgKn4gEiAUfnwgFSAYfnwgGyArfnwgFiAdfnwgHyAsfnwgESAmfnwgGSAnfnwgEyAXfnwgGiAofnwgECAVfiASICJ+fCAYICF+fCAWIBt+fCAdICB+fCARIB9+fCAcICR+fCATIBl+fCAXICN+fCAUIBp+fCAQICt+IBIgFX58IBYgGH58IBsgLH58IBEgHX58IB4gJ358IBMgHH58IBkgKH58IBQgF358IBogKn58Ii9CgICAEHwiM0Iah3wiNEKAgIAIfCI1QhmHfCI2QoCAgBB8IjdCGod8ITIgLyAzQoCAgGCDfSASICF+IBAgFn58IBggIH58IBEgG358ICQgJX58IBMgHn58IBwgI358IBQgGX58IBcgIn58IBUgGn58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KAIAIgEEQCAEQQF0IQQgASgCBEF4cSADRg0CIAEhAAwBCwsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAILCyABKAIIIgAgAjYCDCABIAI2AgggAiAANgIIIAIgATYCDCACQQA2AhgLBUGQlwIgBCAGcjYCACAAIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggLQayXAkGslwIoAgBBf2oiADYCACAABEAPC0HUmgIhAANAIAAoAgAiAUEIaiEAIAENAAtBrJcCQX82AgALBABBIAvGAwEDfyACQYDAAE4EQCAAIAEgAhAFGiAADwsgACEEIAAgAmohAyAAQQNxIAFBA3FGBEADQCAAQQNxBEAgAkUEQCAEDwsgACABLAAAOgAAIABBAWohACABQQFqIQEgAkEBayECDAELCyADQXxxIgJBQGohBQNAIAAgBUwEQCAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCAAIAEoAgw2AgwgACABKAIQNgIQIAAgASgCFDYCFCAAIAEoAhg2AhggACABKAIcNgIcIAAgASgCIDYCICAAIAEoAiQ2AiQgACABKAIoNgIoIAAgASgCLDYCLCAAIAEoAjA2AjAgACABKAI0NgI0IAAgASgCODYCOCAAIAEoAjw2AjwgAEFAayEAIAFBQGshAQwBCwsDQCAAIAJIBEAgACABKAIANgIAIABBBGohACABQQRqIQEMAQsLBSADQQRrIQIDQCAAIAJIBEAgACABLAAAOgAAIAAgASwAAToAASAAIAEsAAI6AAIgACABLAADOgADIABBBGohACABQQRqIQEMAQsLCwNAIAAgA0gEQCAAIAEsAAA6AAAgAEEBaiEAIAFBAWohAQwBCwsgBAsKACAAIAEgAhA7C5gCAQR/IAAgAmohBCABQf8BcSEDIAJBwwBOBEADQCAAQQNxBEAgACADOgAAIABBAWohAAwBCwsgA0EIdCADciADQRB0ciADQRh0ciEBIARBfHEiBUFAaiEGA0AgACAGTARAIAAgATYCACAAIAE2AgQgACABNgIIIAAgATYCDCAAIAE2AhAgACABNgIUIAAgATYCGCAAIAE2AhwgACABNgIgIAAgATYCJCAAIAE2AiggACABNgIsIAAgATYCMCAAIAE2AjQgACABNgI4IAAgATYCPCAAQUBrIQAM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ACIgQQEQByElIAZBEGpBA3QgAmogHCAhfCAifCAgQQgQByAlICBCB4iFhXwiIjcDACAdQRMQByEhIB1BPRAHICEgHUIGiIWFIRwgGSkDACEhIBQpAwAiHUEBEAchJSATQRBqQQN0IAJqICAgHCAhfHwgHUEIEAcgJSAdQgeIhYV8IiA3AwAgIkETEAchHCAiQT0QByAcICJCBoiFhSEcIAdBCWpBA3QgAmopAwAhJSAHQQFqQQN0IAJqKQMAIiJBARAHISYgB0EQakEDdCACaiAdICV8IBx8ICJBCBAHICYgIkIHiIWFfCIdNwMAICBBExAHIRwgIyAgQT0QByAcICBCBoiFhXwhHCAWKQMAIiBBARAHISUgFUEQakEDdCACaiAcICJ8ICBBCBAHICUgIEIHiIWFfCIiNwMAIB1BExAHIRwgHUE9EAcgHCAdQgaIhYUhHCAIQQlqQQN0IAJqKQMAISUgCEEBakEDdCACaikDACIdQQEQByEmIAhBEGpBA3QgAmogICAlfCAcfCAdQQgQByAmIB1CB4iFhXwiIDcDACAiQRMQByEcICJBPRAHIBwgIkIGiIWFISIgDUEJakEDdCACaikDACAifCEiIB5BARAHIRwgDUEQakEDdCACaiAdICJ8IB5BCBAHIBwgHkIHiIWFfCIdNwMAICBBExAHISIgIEE9EAcgIiAgQgaIhYUhIiAJQQlqQQN0IAJqKQMAIRwgCUEBakEDdCACaikDACIgQQEQByElIAlBEGpBA3QgAmogHCAefCAifCAgQQgQByAlICBCB4iFhXwiHjcDACAdQRMQByEiIB1BPRAHICIgHUIGiIWFIR0gDkEJakEDdCACaikDACAdfCEdIB9BARAHISIgDkEQakEDdCACaiAdICB8IB9BCBAHICIgH0IHiIWFfCIdNwMAIB5BExAHISAgHkE9EAcgICAeQgaIhYUhICAKQQlqQQN0IAJqKQMAISIgCkEBakEDdCACaikDACIeQQEQByEcIApBEGpBA3QgAmogHyAifCAgfCAeQQgQByAcIB5CB4iFhXwiHzcDACAdQRMQByEgIB1BPRAHICAgHUIGiIWFIR0gD0EJakEDdCACaikDACAdfCEdICFBARAHISAgD0EQakEDdCACaiAdIB58ICFBCBAHICAgIUIHiIWFfCIeNwMAIB9BExAHIR0gH0E9EAcgHSAfQgaIhYUhHSALQQlqQQN0IAJqKQMAISAgC0EBakEDdCACaikDACIfQQEQByEiIAtBEGpBA3QgAmogICAhfCAdfCAfQQgQByAiIB9CB4iFhXwiHzcDACAeQRMQByEhIB5BPRAHICEgHkIGiIWFIR4gEEEJakEDdCACaikDACEhICNBARAHIR0gEEEQakEDdCACaiAhICR8IB58ICNBCBAHIB0gI0IHiIWFfDcDACAfQRMQByEeIB9BPRAHIB4gH0IGiIWFIR8gDEEJakEDdCACaikDACEhIAxBAWpBA3QgAmopAwAiHkEBEAchJCAMQRBqQQN0IAJqICEgI3wgH3wgHkEIEAcgJCAeQgeIhYV8NwMAIARB0ABJBEAgBCEBDAILCwtBACEBA0AgAUEDdCAAaiICIAFBA3QgA2opAwAgAikDAHw3AwAgAUEBaiIBQQhHDQALCywAIAJBgAJJBEAgACABIAJB/wFxEHMPBUH7jQJBj44CQesAQcSOAhACC0EAC0IAIANBf2pBP0sgAkHAAEtyBH9BfwUgA0H/AXEhAyACRSABRXIEQCAAIAMQrgEFIAAgAyABIAJB/wFxEK0BC0EACwsKACAAIAEgAhBNCwwAIAAgASACIAMQTgvoBAEUfyACKAAAIQ8CfyACKAAIIRYgAigADCEDQRQhFEHl8MGLBiEEQbLaiMsHIQwgAigAECEQIAIoABQhCSACKAAYIQ0gAigAHCEKQfTKgdkGIQUgAigABCECIBYLIQsgAyEIQe7IgZkDIQYgASgAACEOIAEoAAQhAyABKAAIIQcgASgADCEBA0AgBCAEIAlqQQcQCCAIcyIRakEJEAggB3MiByAHIBFqQQ0QCCAJcyIJakESEAggBHMhBCAGIAYgD2pBBxAIIAFzIhJqQQkQCCANcyIVIBIgFWpBDRAIIA9zIg1qQRIQCCAGcyEGIAwgDCAOakEHEAggCnMiE2pBCRAIIAJzIgIgAiATakENEAggDnMiCGpBEhAIIAxzIQogBSAFIBBqQQcQCCALcyILakEJEAggA3MiAyADIAtqQQ0QCCAQcyIBakESEAggBXMhBSAEIAQgC2pBBxAIIA1zIg9qQQkQCCACcyICIAIgD2pBDRAIIAtzIgtqQRIQCCAEcyEEIAYgBiARakEHEAggCHMiDmpBCRAIIANzIgMgAyAOakENEAggEXMiCGpBEhAIIAZzIQYgCiASakEHEAggAXMiECAKakEJEAggB3MiByAHIBBqQQ0QCCAScyIBakESEAggCnMhDCAFIBNqQQcQCCAJcyIJIAVqQQkQCCAVcyINIAkgDWpBDRAIIBNzIgpqQRIQCCAFcyEFIBRBfmoiFA0ACyAAIAQQCyAAQQRqIAYQCyAAQQhqIAwQCyAAQQxqIAUQCyAAQRBqIA4QCyAAQRRqIAMQCyAAQRhqIAcQCyAAQRxqIAEQCwveEwIIfx9+IAAsAAAgACwAASAAQQJqIgIsAAAQEEL///8AgyETAn4gAhARQgWIQv///wCDIScgACwABSAALAAGIABBB2oiAywAABAQQgKIQv///wCDIR8gAxARQgeIQv///wCDISAgAEEKaiIHEBFCBIhC////AIMhGSAALAANIAAsAA4gAEEPaiIELAAAEBBCAYhC////AIMhISAEEBFCBohC////AIMhFCAALAASIAAsABMgACwAFBAQQgOIQv///wCDIRogACwAFSAALAAWIABBF2oiBSwAABAQQv///wCDIRUgBRARQgWIQv///wCDIRsgACwAGiAALAAbIABBHGoiBiwAABAQQgKIQv///wCDIRYgBhARQgeIQv///wCDIRwgAEEfaiIIEBFCBIhC////AIMhECAALAAiIAAsACMgAEEkaiIBLAAAEBBCAYhC////AIMhESABEBFCBohC////AIMhEgJ+IAAsACcgACwAKCAALAApEBBCA4hC////AIMhJiAALAAqIAAsACsgAEEsaiIBLAAAEBBC////AIMhDCABEBFCBYhC////AIMhHSAALAAvIAAsADAgAEExaiIBLAAAEBBCAohC////AIMhCSABEBFCB4hC////AIMhCiAAQTRqEBFCBIhC////AIMhCyAALAA3IAAsADggAEE5aiIBLAAAEBBCAYhC////AIMhDSABEBFCBohC////AIMhDiAAQTxqEBFCA4giD0KDoVZ+IAx8IQwgC0KDoVZ+IBF8IA1C0asIfnwgD0Ln9id+fCAOQtOMQ358IApCg6FWfiAQfCALQtGrCH58IA1C04xDfnwgD0KY2hx+fCAOQuf2J358Ih5CgIBAfSIiQhWHfCERICYLIA9C0asIfnwgDkKDoVZ+fCANQoOhVn4gEnwgD0LTjEN+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fCANIBB+IA4gEX58IA8gEn58IBMgFX58IBQgGH58IBpCGohC/////w+DfCIdQhqIQv////8Pg3wiF6dB////H3EhBSANIBl+IBEgFn58IBAgEn58IA4gE358IA8gFH58IBdCGohC/////w+DfCIXp0H///8fcSEGIA0gHH4gESAZfnwgEiAWfnwgECATfnwgDiAUfnwgF0IaiEL/////D4N8Ig2nQf///x9xIQcgDUIaiKdBBWwgGqdB////H3FqIgNB////H3EhBCAdp0H///8fcSADQRp2aiEDIAFBEGohASACQnB8IgJCD1YNAAsLIAAgBDYCFCAAIAM2AhggACAFNgIcIAAgBjYCICAAIAc2AiQLMAAgAUF/akE/SyAFQcAAS3IEf0F/BSAAIAIgBCABQf8BcSADIAVB/wFxEOECQQALC4QDAQd/IwAhByMAQT9qQUBxJAAjACEDIwBBQGskACACQf8BcQRAIAJB/wFxIQggAkH/AXFBwABMBEACfyAAKQBQQgBSBH9BfwUgACgA4AIiAkGAAUsEQCAAQoABEHQgACAAQeAAaiICEHcgACAAKADgAkGAf2oiBTYA4AIgBUGBAUkEQCACIABB4AFqIAUQGBogACgA4AIhBiACIQQFQaCNAkHAjQJBsgJB7Y0CEAILBSACIQYgAEHgAGohBAsgACAGrRB0IAAiAiwA5AIEQCACQn83AFgLIAJCfzcAUCAAKADgAiICIABB4ABqakEAQYACIAJrEBoaIAAgBBB3IAMgACkAABASIANBCGogACkACBASIANBEGogACkAEBASIANBGGogACkAGBASIANBIGogACkAIBASIANBKGogACkAKBASIANBMGogACkAMBASIANBOGogACkAOBASIAEgAyAIEBgaIABBwAAQCiAEQYACEApBAAshCSAHJAAgCQsPCwsQAEEACy0CAX8BfiABIABBQGsiAikAAHwhAyACIAM3AAAgACAAKQBIIAMgAVStfDcASAsJACAAQQA2AAALNgECfyAAEOMCA0AgAkEDdCAAaiIDIAEgAkEDdGopAAAgAykAAIU3AAAgAkEBaiICQQhHDQALC4s2AgV/In4CfyMAIQYjAEE/akFAcSQAIwAhAiMAQYACaiQAIAJBgAFqIQMDQCAEQQN0IANqIAEgBEEDdGopAAA3AwAgBEEBaiIEQRBHDQALIAIgACkAADcAACACIAApAAg3AAggAiAAKQAQNwAQIAIgACkAGDcAGCACIAApACA3ACAgAiAAKQAoNwAoIAIgACkAMDcAMCACIAApADg3ADggAkLx7fT4paf9p6V/NwNYIAApAEhCn9j52cKR2oKbf4UhFyAAKQBQQuv6htq/tfbBH4UhGwJ+IAApAFhC+cL4m5Gjs/DbAIUhKCACKQMAIAIpAyAiHyADKQMAIiR8fCIeIABBQGspAABC0YWa7/rPlIfRAIWFQSAQByIYQoiS853/zPmE6gB8IRkgGSAfhUEYEAchHCACIAMpAwgiHyAcIB58fCIHIBiFQRAQByIlNwNgIAJBQGsiASAZICV8IiA3AwAgAiAcICCFQT8QByIhNwMgIAIpAwggAikDKCIcIAMpAxAiGXx8IhggF4VBIBAHIh1Cu86qptjQ67O7f3whFyAXIByFQRgQByEeIAIgAykDGCIcIBggHnx8IgsgHYVBEBAHIiY3A2ggAiAXICZ8Igo3A0ggCiAehUE/EAchHSACKQMQIAIpAzAiHiADKQMgIhd8fCIYIBuFQSAQByIiQqvw0/Sv7ry3PHwhGyAbIB6FQRgQByIaIBsgAykDKCIeIBggGnx8IhIgIoVBEBAHIg58IgmFQT8QByEiICgLIAIpAxggAikDOCIjIAMpAzAiG3x8IhqFQSAQByIIQvHt9Pilp/2npX98IRggGCAjhUEYEAciDyAYIAMpAzgiIyAPIBp8fCIPIAiFQRAQByIIfCIMhUE/EAchGiAdIAkgCCADQUBrKQMAIhggByAdfHwiCIVBIBAHIh18Ig2FQRgQByEHIAIgHSADKQNIIh0gByAIfHwiFIVBEBAHIgk3A3ggAiAJIA18Igg3A1AgByAIhUE/EAchByAiIAwgJSADKQNQIiUgCyAifHwiC4VBIBAHIiJ8IgyFQRgQByINIAwgIiADKQNYIiIgCyANfHwiDYVBEBAHIhB8IgyFQT8QByELIBogICAmIAMpA2AiJiASIBp8fCIahUEgEAciEnwiEYVBGBAHIhMgESADKQNoIiAgEyAafHwiEyAShUEQEAciFXwiEYVBPxAHIRIgAiARIBAgISAKIA4gAykDcCIaIA8gIXx8Ig6FQSAQByIhfCIKhUEYEAciDyAKICEgAykDeCIhIA4gD3x8Ig6FQRAQByIPfCIQhUE/EAciCiAUIBp8fCIUhUEgEAciFnwiESAKhUEYEAciCiARIBQgJXwgCnwiFCAWhUEQEAciFnwiEYVBPxAHIgo3AyAgByAQIA0gByAXfHwiByAVhUEgEAciDXwiEIVBGBAHIhUgECANIAcgGHwgFXwiDYVBEBAHIhV8IhCFQT8QByEHIAsgCCATIAsgHXx8IgsgD4VBIBAHIg98IgiFQRgQByITIAggDyALICF8IBN8Ig+FQRAQByITfCILhUE/EAchCCASIAwgCSAOIBIgIHx8IgmFQSAQByISfCIOhUEYEAciDCAOIBIgCSAbfCAMfCIShUEQEAciDHwiDoVBPxAHIQkgCyAMIBQgH3wgB3wiDIVBIBAHIhR8IicgB4VBGBAHIQcgAiAMICZ8IAd8IgwgFIVBEBAHIgs3A3ggCyAnfCIUIAeFQT8QByEHIAggDiANICR8IAh8IgggFoVBIBAHIg18Ig6FQRgQByIWIA4gDSAIIBl8IBZ8Ig2FQRAQByIWfCIOhUE/EAchCCAJIBEgDyAifCAJfCIJIBWFQSAQByIPfCIRhUEYEAciFSARIA8gCSAjfCAVfCIPhUEQEAciFXwiEYVBPxAHIQkgAiARIAogECASIAogHnx8IgogE4VBIBAHIhJ8IhCFQRgQByITIBAgEiAKIBx8IBN8IhKFQRAQByITfCIQhUE/EAciCiAMICJ8fCIMIBaFQSAQByIWfCIRIAqFQRgQByIKIBEgDCAYfCAKfCIMIBaFQRAQByIWfCIRhUE/EAciCjcDICAHIBAgDSAHICZ8fCIHIBWFQSAQByINfCIQhUEYEAciFSAQIA0gByAkfCAVfCINhUEQEAciFXwiEIVBPxAHIQcgCCAUIA8gCCAefHwiCCAThUEgEAciD3wiFIVBGBAHIhMgFCAPIAggGXwgE3wiD4VBEBAHIhN8IhSFQT8QByEIIAkgDiASIAkgIXx8IgkgC4VBIBAHIgt8IhKFQRgQByIOIBIgCSAgfCAOfCIOIAuFQRAQByILfCIShUE/EAchCSAUIAsgDCAlfCAHfCILhUEgEAciDHwiFCAHhUEYEAchByACIAwgCyAafCAHfCIMhUEQEAciCzcDeCALIBR8IhQgB4VBPxAHIQcgCCASIA0gHHwgCHwiCCAWhUEgEAciDXwiEoVBGBAHIhYgEiANIAggG3wgFnwiDYVBEBAHIhZ8IhKFQT8QByEIIAkgESAPICN8IAl8IgkgFYVBIBAHIg98IhGFQRgQByIVIBEgDyAJIB98IBV8Ig+FQRAQByIVfCIRhUE/EAchCSACIBEgCiAQIA4gCiAdfHwiCiAThUEgEAciDnwiEIVBGBAHIhMgECAOIAogF3wgE3wiDoVBEBAHIhN8IhCFQT8QByIKIAwgI3x8IgwgFoVBIBAHIhZ8IhEgCoVBGBAHIgogESAMIB18IAp8IgwgFoVBEBAHIhZ8IhGFQT8QByIKNwMgIAcgECAHIBx8IA18IgcgFYVBIBAHIg18IhCFQRgQByIVIBAgDSAHIB98IBV8Ig2FQRAQByIVfCIQhUE/EAchByAIIBQgCCAgfCAPfCIIIBOFQSAQByIPfCIUhUEYEAciEyAUIA8gCCAmfCATfCIPhUEQEAciE3wiFIVBPxAHIQggCSASIAkgInwgDnwiCSALhUEgEAciC3wiEoVBGBAHIg4gEiAJIBp8IA58Ig4gC4VBEBAHIgt8IhKFQT8QByEJIBQgCyAMIBl8IAd8IguFQSAQByIMfCIUIAeFQRgQByEHIAIgDCALIBt8IAd8IgyFQRAQByILNwN4IAsgFHwiFCAHhUE/EAchByAIIBIgDSAefCAIfCIIIBaFQSAQByINfCIShUEYEAciFiASIA0gCCAlfCAWfCINhUEQEAciFnwiEoVBPxAHIQggCSARIA8gF3wgCXwiCSAVhUEgEAciD3wiEYVBGBAHIhUgESAPIAkgJHwgFXwiD4VBEBAHIhV8IhGFQT8QByEJIAIgESAKIBAgDiAKICF8fCIKIBOFQSAQByIOfCIQhUEYEAciEyAQIA4gCiAYfCATfCIOhUEQEAciE3wiEIVBPxAHIgogDCAdfHwiDCAWhUEgEAciFnwiESAKhUEYEAciCiARIAwgJHwgCnwiDCAWhUEQEAciFnwiEYVBPxAHIgo3AyAgByAQIA0gByAefHwiByAVhUEgEAciDXwiEIVBGBAHIhUgECANIAcgI3wgFXwiDYVBEBAHIhV8IhCFQT8QByEHIAggFCAPIAggGXx8IgggE4VBIBAHIg98IhSFQRgQByITIBQgDyAIIBd8IBN8Ig+FQRAQByITfCIUhUE/EAchCCAJIBIgDiAJICV8fCIJIAuFQSAQByILfCIShUEYEAciDiASIAkgIXwgDnwiDiALhUEQEAciC3wiEoVBPxAHIQkgFCALIAwgGnwgB3wiC4VBIBAHIgx8IhQgB4VBGBAHIQcgAiAMIAsgH3wgB3wiDIVBEBAHIgs3A3ggCyAUfCIUIAeFQT8QByEHIAggEiANICJ8IAh8IgggFoVBIBAHIg18IhKFQRgQByIWIBIgDSAIICZ8IBZ8Ig2FQRAQByIWfCIShUE/EAchCCAJIBEgDyAbfCAJfCIJIBWFQSAQByIPfCIRhUEYEAciFSARIA8gCSAYfCAVfCIPhUEQEAciFXwiEYVBPxAHIQkgAiARIAogECAOIAogHHx8IgogE4VBIBAHIg58IhCFQRgQByITIBAgDiAKICB8IBN8Ig6FQRAQByITfCIQhUE/EAciCiAMIBl8fCIMIBaFQSAQByIWfCIRIAqFQRgQByIKIBEgDCAmfCAKfCIMIBaFQRAQByIWfCIRhUE/EAciCjcDICAHIBAgDSAHIBt8fCIHIBWFQSAQByINfCIQhUEYEAciFSAQIA0gByAlfCAVfCINhUEQEAciFXwiEIVBPxAHIQcgCCAUIA8gCCAkfHwiCCAThUEgEAciD3wiFIVBGBAHIhMgFCAPIAggInwgE3wiD4VBEBAHIhN8IhSFQT8QByEIIAkgEiAOIAkgGHx8IgkgC4VBIBAHIgt8IhKFQRgQByIOIBIgCSAcfCAOfCIOIAuFQRAQByILfCIShUE/EAchCSAUIAsgDCAXfCAHfCILhUEgEAciDHwiFCAHhUEYEAchByACIAwgCyAgfCAHfCIMhUEQEAciCzcDeCALIBR8IhQgB4VBPxAHIQcgCCASIA0gI3wgCHwiCCAWhUEgEAciDXwiEoVBGBAHIhYgEiANIAggHnwgFnwiDYVBEBAHIhZ8IhKFQT8QByEIIAkgESAPICF8IAl8IgkgFYVBIBAHIg98IhGFQRgQByIVIBEgDyAJIBp8IBV8Ig+FQRAQByIVfCIRhUE/EAchCSACIBEgCiAQIA4gCiAffHwiCiAThUEgEAciDnwiEIVBGBAHIhMgECAOIAogHXwgE3wiDoVBEBAHIhN8IhCFQT8QByIKIAwgJnx8IgwgFoVBIBAHIhZ8IhEgCoVBGBAHIgogESAMIB58IAp8IgwgFoVBEBAHIhZ8IhGFQT8QByIKNwMgIAcgECANIAcgH3x8IgcgFYVBIBAHIg18IhCFQRgQByIVIBAgDSAHICF8IBV8Ig2FQRAQByIVfCIQhUE/EAchByAIIBQgDyAIIBp8fCIIIBOFQSAQByIPfCIUhUEYEAciEyAUIA8gCCAgfCATfCIPhUEQEAciE3wiFIVBPxAHIQggCSASIA4gCSAXfHwiCSALhUEgEAciC3wiEoVBGBAHIg4gEiAJICV8IA58Ig4gC4VBEBAHIgt8IhKFQT8QByEJIBQgCyAMICR8IAd8IguFQSAQByIMfCIUIAeFQRgQByEHIAIgDCALICN8IAd8IgyFQRAQByILNwN4IAsgFHwiFCAHhUE/EAchByAIIBIgDSAbfCAIfCIIIBaFQSAQByINfCIShUEYEAciFiASIA0gCCAcfCAWfCINhUEQEAciFnwiEoVBPxAHIQggCSARIA8gHXwgCXwiCSAVhUEgEAciD3wiEYVBGBAHIhUgESAPIAkgGXwgFXwiD4VBEBAHIhV8IhGFQT8QByEJIAIgESAKIBAgDiAKIBh8fCIKIBOFQSAQByIOfCIQhUEYEAciEyAQIA4gCiAifCATfCIOhUEQEAciE3wiEIVBPxAHIgogDCAgfHwiDCAWhUEgEAciFnwiESAKhUEYEAciCiARIAwgInwgCnwiDCAWhUEQEAciFnwiEYVBPxAHIgo3AyAgByAQIA0gByAjfHwiByAVhUEgEAciDXwiEIVBGBAHIhUgECANIAcgGnwgFXwiDYVBEBAHIhV8IhCFQT8QByEHIAggFCAPIAggJnx8IgggE4VBIBAHIg98IhSFQRgQByITIBQgDyAIIB98IBN8Ig+FQRAQByITfCIUhUE/EAchCCAJIBIgDiAJIBx8fCIJIAuFQSAQByILfCIShUEYEAciDiASIAkgHXwgDnwiDiALhUEQEAciC3wiEoVBPxAHIQkgFCALIAwgHnwgB3wiC4VBIBAHIgx8IhQgB4VBGBAHIQcgAiAMIAsgJHwgB3wiDIVBEBAHIgs3A3ggCyAUfCIUIAeFQT8QByEHIAggEiANICF8IAh8IgggFoVBIBAHIg18IhKFQRgQByIWIBIgDSAIIBd8IBZ8Ig2FQRAQByIWfCIShUE/EAchCCAJIBEgDyAYfCAJfCIJIBWFQSAQByIPfCIRhUEYEAciFSARIA8gCSAbfCAVfCIPhUEQEAciFXwiEYVBPxAHIQkgAiARIAogECAOIAogGXx8IgogE4VBIBAHIg58IhCFQRgQByITIBAgDiAKICV8IBN8Ig6FQRAQByITfCIQhUE/EAciCiAMIBt8fCIMIBaFQSAQByIWfCIRIAqFQRgQByIKIBEgDCAhfCAKfCIMIBaFQRAQByIWfCIRhUE/EAciCjcDICAHIBAgDSAHIBp8fCIHIBWFQSAQByINfCIQhUEYEAciFSAQIA0gByAdfCAVfCINhUEQEAciFXwiEIVBPxAHIQcgCCAUIA8gCCAifHwiCCAThUEgEAciD3wiFIVBGBAHIhMgFCAPIAggHHwgE3wiD4VBEBAHIhN8IhSFQT8QByEIIAkgEiAOIAkgJHx8IgkgC4VBIBAHIgt8IhKFQRgQByIOIBIgCSAYfCAOfCIOIAuFQRAQByILfCIShUE/EAchCSAUIAsgDCAmfCAHfCILhUEgEAciDHwiFCAHhUEYEAchByACIAwgCyAZfCAHfCIMhUEQEAciCzcDeCALIBR8IhQgB4VBPxAHIQcgCCASIA0gIHwgCHwiCCAWhUEgEAciDXwiEoVBGBAHIhYgEiANIAggI3wgFnwiDYVBEBAHIhZ8IhKFQT8QByEIIAkgESAPIB98IAl8IgkgFYVBIBAHIg98IhGFQRgQByIVIBEgDyAJIBd8IBV8Ig+FQRAQByIVfCIRhUE/EAchCSACIBEgCiAQIA4gCiAlfHwiCiAThUEgEAciDnwiEIVBGBAHIhMgECAOIAogHnwgE3wiDoVBEBAHIhN8IhCFQT8QByIKIAwgJXx8IgwgFoVBIBAHIhZ8IhEgCoVBGBAHIgogESAMIBl8IAp8IgwgFoVBEBAHIhZ8IhGFQT8QByIKNwMgIAcgECANIAcgGHx8IgcgFYVBIBAHIg18IhCFQRgQByIVIBAgDSAHIBd8IBV8Ig2FQRAQByIVfCIQhUE/EAchByAIIBQgDyAIICN8fCIIIBOFQSAQByIPfCIUhUEYEAciEyAUIA8gCCAbfCATfCIPhUEQEAciE3wiFIVBPxAHIQggCSASIA4gCSAffHwiCSALhUEgEAciC3wiEoVBGBAHIg4gEiAJIB58IA58Ig4gC4VBEBAHIgt8IhKFQT8QByEJIBQgCyAMICF8IAd8IguFQSAQByIMfCIUIAeFQRgQByEHIAIgDCALICJ8IAd8IgyFQRAQByILNwN4IAsgFHwiFCAHhUE/EAchByAIIBIgDSAdfCAIfCIIIBaFQSAQByINfCIShUEYEAciFiASIA0gCCAafCAWfCINhUEQEAciFnwiEoVBPxAHIQggCSARIA8gHHwgCXwiCSAVhUEgEAciD3wiEYVBGBAHIhUgESAPIAkgJnwgFXwiD4VBEBAHIhV8IhGFQT8QByEJIAIgESAKIBAgDiAKICB8fCIKIBOFQSAQByIOfCIQhUEYEAciEyAQIA4gCiAkfCATfCIOhUEQEAciE3wiEIVBPxAHIgogDCAkfHwiDCAWhUEgEAciFnwiESAKhUEYEAciCiARIAwgH3wgCnwiDCAWhUEQEAciFnwiEYVBPxAHIgo3AyAgByAQIA0gByAZfHwiByAVhUEgEAciDXwiEIVBGBAHIhUgECANIAcgHHwgFXwiDYVBEBAHIhV8IhCFQT8QByEHIAggFCAPIAggF3x8IgggE4VBIBAHIg98IhSFQRgQByITIBQgDyAIIB58IBN8Ig+FQRAQByITfCIUhUE/EAchCCAJIBIgDiAJIBt8fCIJIAuFQSAQByILfCIShUEYEAciDiASIAkgI3wgDnwiDiALhUEQEAciC3wiEoVBPxAHIQkgFCALIAwgGHwgB3wiC4VBIBAHIgx8IhQgB4VBGBAHIQcgAiAMIAsgHXwgB3wiDIVBEBAHIgs3A3ggCyAUfCIUIAeFQT8QByEHIAggEiANICV8IAh8IgggFoVBIBAHIg18IhKFQRgQByIWIBIgDSAIICJ8IBZ8Ig2FQRAQByIWfCIShUE/EAchCCAJIBEgDyAmfCAJfCIJIBWFQSAQByIPfCIRhUEYEAciFSARIA8gCSAgfCAVfCIPhUEQEAciFXwiEYVBPxAHIQkgAiARIAogECAOIAogGnx8IgogE4VBIBAHIg58IhCFQRgQByITIBAgCiAhfCATfCIKIA6FQRAQByIOfCIQhUE/EAciEyAMIBp8fCIaIBaFQSAQByIMfCIRIBOFQRgQByITIBEgGiAlfCATfCIaIAyFQRAQByIMfCIRhUE/EAciJTcDICAHIBAgDSAHIBd8fCIXIBWFQSAQByIHfCINhUEYEAciECANIAcgFyAYfCAQfCIHhUEQEAciEHwiDYVBPxAHIRcgCCAUIA8gCCAdfHwiGCAOhUEgEAciHXwiCIVBGBAHIg4gCCAdIBggIXwgDnwiHYVBEBAHIiF8IgiFQT8QByEYIAkgEiAKIAkgIHx8IiAgC4VBIBAHIgp8IgmFQRgQByILIAkgGyAgfCALfCIgIAqFQRAQByIKfCIJhUE/EAchGyACIBcgCCAaIB98IBd8Ih8gCoVBIBAHIhd8IhqFQRgQByIKIB8gJnx8Ih83AwAgAiAXIB+FQRAQByIXNwN4IAIgFyAafCIXNwNQIAIgCiAXhUE/EAc3AyggAiAYIAkgByAkfCAYfCIkIAyFQSAQByIXfCIYhUEYEAciJiAZICR8fCIkNwMIIAIgFyAkhUEQEAciGTcDYCACIBggGXwiGTcDWCACIBkgJoVBPxAHNwMwIAIgGyARIB0gInwgG3wiGSAQhUEgEAciF3wiG4VBGBAHIhggGSAjfHwiGTcDECACIBcgGYVBEBAHIhk3A2ggASAZIBt8Ihk3AwAgAiAYIBmFQT8QBzcDOCACIA0gICAeICV8fCIXICGFQSAQByIefCIbICWFQRgQByIjIBcgHHx8Ihw3AxggAiAcIB6FQRAQByIcNwNwIAIgGyAcfCIcNwNIIAIgHCAjhUE/EAc3AyAgACAZIAApAAAgH4WFNwAAQQEhAQNAIAFBA3QgAGoiAyABQQhqQQN0IAJqKQMAICQgAykAAIWFNwAAIAFBAWoiAUEIRwRAIAFBA3QgAmopAwAhJAwBCwsgBgskAAsLACAAIAEgAhDmAgsTACAAIAFBwAdsQdAQaiACELcBCx0AIAAQNCAAQShqEB4gAEHQAGoQHiAAQfgAahA0C6wBAQJ/IwAhCiMAQdACaiQAIApCwAAgByAIEDYgCkFAayIJIAoQJiAKQcAAEAogCSAFIAYQDyAJQbCWAkIAIAZ9Qg+DEA8gACADIAQgB0EBIAgQLyAJIAAgBBAPIAlBsJYCQgAgBH1CD4MQDyAKQcACaiIAIAYQEiAJIABCCBAPIAAgBBASIAkgAEIIEA8gCSABECUgCUGAAhAKIAIEQCACQhA3AwALIAokAEEAC+0BAQd/A0AgACACaiABIAJBA3ZqLQAAIAJBB3F2QQFxOgAAIAJBAWoiAkGAAkcNAAtBACECA0AgACACaiIFLAAABEACQEEBIQQDQCACIARqIgFBgAJPDQEgACABaiIDLAAAIgYEQAJAIAUsAAAiByAGIAR0IgZqIghBEEgEQCAFIAg6AAAgA0EAOgAADAELIAcgBmsiA0FxSA0DIAUgAzoAAANAIAAgAWoiAywAAARAIANBADoAACABQQFqIgFBgAJPDQIMAQsLIANBAToAAAsLIARBAWoiBEEHSQ0ACwsLIAJBAWoiAkGAAkcNAAsLpQEBBn8CfyMAIQgjAEE/akFAcSQAIwAhBSMAQTBqJAAgACABQShqIgMgARATIABBKGoiBCADIAEQFSAAQdAAaiIGIAAgAkEoahAMIAQgBCACEAwgAEH4AGoiAyACQfgAaiABQfgAahAMIAAgAUHQAGogAkHQAGoQDCAFIAAgABATIAAgBiAEEBUgBCAGIAQQEyAGIAUgAxAVIAMgBSADEBMgCAskAAukAgEIfwJ/IwAhCSMAQT9qQUBxJAAjACEDIwBBoAJqJAAgAyEGIABBKGoiByABEIEBIABB0ABqIgIQHiADQfABaiIEIAcQDSADQcABaiIFIARBgAgQDCAEIAQgAhAVIAUgBSACEBMgA0GQAWoiAiAFEA0gAiACIAUQDCAAIAIQDSAAIAAgBRAMIAAgACAEEAwgACAAEL0BIAAgACACEAwgACAAIAQQDCADQeAAaiICIAAQDSACIAIgBRAMIANBMGoiAyACIAQQFQJ/AkAgAxBYDQAgBiACIAQQEyAGEFgEfyAAIABBsAgQDAwBBUF/CwwBCyAAEH8hAyABLQAfQQd2IANGBEAgACAAEIABCyAAQfgAaiAAIAcQDEEACyEAIAkLJAAgAAs2AQN/An8jACEDIwBBP2pBQHEkACMAIQEjAEEgaiQAIAEgABAuIAEsAABBAXEhACADCyQAIAALqgEBCX9BACABKAIEayECQQAgASgCCGshA0EAIAEoAgxrIQRBACABKAIQayEFQQAgASgCFGshBkEAIAEoAhhrIQdBACABKAIcayEIQQAgASgCIGshCUEAIAEoAiRrIQogAEEAIAEoAgBrNgIAIAAgAjYCBCAAIAM2AgggACAENgIMIAAgBTYCECAAIAY2AhQgACAHNgIYIAAgCDYCHCAAIAk2AiAgACAKNgIkC5kEARV+An4gARARIRYgASwABCABLAAFIAEsAAYQEEIGhiEHIAEsAAcgASwACCABLAAJEBBCBYYhAyABLAAKIAEsAAsgASwADBAQQgOGIQggASwADSABLAAOIAEsAA8QEEIChiEEIAFBEGoQESEJIAEsABQgASwAFSABLAAWEBBCB4YhBSABLAAXIAEsABggASwAGRAQQgWGIQogASwAGiABLAAbIAEsABwQEEIEhiEGIBYLQgAgASwAHSABLAAeIAEsAB8QEEIChkL8//8PgyILQoCAgAh8IgxCGYh9QhODfCINQoCAgBB8IQIgAyAHQoCAgAh8Ig5CGYd8Ig9CgICAEHwhAyAEIAhCgICACHwiEEIZh3wiEUKAgIAQfCEEIAUgCUKAgIAIfCISQhmHfCITQoCAgBB8IQUgBiAKQoCAgAh8IhRCGYd8IhVCgICAEHwhBiAAIA0gAkKAgIDgD4N9PgIAIAAgByAOQoCAgPAPg30gAkIaiHw+AgQgACAPIANCgICA4A+DfT4CCCAAIAggEEKAgIDwD4N9IANCGoh8PgIMIAAgESAEQoCAgOAPg30+AhAgACAJIBJCgICA8A+DfSAEQhqIfD4CFCAAIBMgBUKAgIDgD4N9PgIYIAAgCiAUQoCAgPAPg30gBUIaiHw+AhwgACAVIAZCgICA4A+DfT4CICAAIAsgDEKAgIAQg30gBkIaiHw+AiQLiQEBAn8jACEJIwBB0AJqJAAgCSAHIAgQmAEgCUFAayIKIAkQJiAJQcAAEAogCiAFIAYQDyAJQcACaiIFIAYQEiAKIAVCCBAPIAAgAyAEIAcgCBCXASAKIAAgBBAPIAUgBBASIAogBUIIEA8gCiABECUgCkGAAhAKIAIEQCACQhA3AwALIAkkAEEAC0sBA38CfyMAIQUjAEE/akFAcSQAIwAhAyMAQYADaiQAIANBAEEAQRgQUBogAyABQiAQJxogAyACQiAQJxogAyAAQRgQTxogBQskAAskACACQhBUBH9BfwUgACABQRBqIAEgAkJwfCADIAQgBRCFAQsLPQECfyMAIQcjAEEgaiQAIAciCCAFIAYQWwRAQX8hAAUgACABIAIgAyAEIAgQWSEAIAhBIBAKCyAHJAAgAAsoACACQu////8PVgRAEAAFIABBEGogACABIAIgAyAEIAUQhwEPC0EACz4BA38jACEHIwBBIGokACAHIgggBSAGEFsEf0F/BSAAIAEgAiADIAQgCBBaGiAIQSAQCkEACyEJIAckACAJCw4AIAFBIBAfIAAgARBoCyoBAX8jACEEIwBBoANqJAAgBCADEIcCIAQgASACEB0gBCAAEPkBIAQkAAu1DAEHfyAAIAFqIQUgACgCBCIDQQFxRQRAAkAgACgCACECIANBA3FFBEAPCyABIAJqIQEgACACayIAQaCXAigCAEYEQCAFKAIEIgJBA3FBA0cNAUGUlwIgATYCACAFIAJBfnE2AgQgACABQQFyNgIEIAUgATYCAA8LIAJBA3YhBCACQYACSQRAIAAoAggiAiAAKAIMIgNGBEBBjJcCQYyXAigCAEEBIAR0QX9zcTYCAAUgAiADNgIMIAMgAjYCCAsMAQsgACgCGCEHIAAoAgwiAiAARgRAAkAgAEEQaiIDQQRqIgQoAgAiAgRAIAQhAwUgAygCACICRQRAQQAhAgwCCwsDQAJAIAJBFGoiBCgCACIGRQRAIAJBEGoiBCgCACIGRQ0BCyAEIQMgBiECDAELCyADQQA2AgALBSAAKAIIIgMgAjYCDCACIAM2AggLIAcEQCAAKAIcIgNBAnRBvJkCaiIEKAIAIABGBEAgBCACNgIAIAJFBEBBkJcCQZCXAigCAEEBIAN0QX9zcTYCAAwDCwUgB0EQaiIDIAdBFGogAygCACAARhsgAjYCACACRQ0CCyACIAc2AhggACgCECIDBEAgAiADNgIQIAMgAjYCGAsgACgCFCIDBEAgAiADNgIUIAMgAjYCGAsLCwsgBSgCBCIHQQJxBEAgBSAHQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgAgASEDBUGklwIoAgAgBUYEQEGYlwJBmJcCKAIAIAFqIgE2AgBBpJcCIAA2AgAgACABQQFyNgIEIABBoJcCKAIARwRADwtBoJcCQQA2AgBBlJcCQQA2AgAPC0GglwIoAgAgBUYEQEGUlwJBlJcCKAIAIAFqIgE2AgBBoJcCIAA2AgAgACABQQFyNgIEIAAgAWogATYCAA8LIAdBA3YhBCAHQYACSQRAIAUoAggiAiAFKAIMIgNGBEBBjJcCQYyXAigCAEEBIAR0QX9zcTYCAAUgAiADNgIMIAMgAjYCCAsFAkAgBSgCGCEIIAUoAgwiAiAFRgRAAkAgBUEQaiIDQQRqIgQoAgAiAgRAIAQhAwUgAygCACICRQRAQQAhAgwCCwsDQAJAIAJBFGoiBCgCACIGRQRAIAJBEGoiBCgCACIGRQ0BCyAEIQMgBiECDAELCyADQQA2AgALBSAFKAIIIgMgAjYCDCACIAM2AggLIAgEQCAFKAIcIgNBAnRBvJkCaiIEKAIAIAVGBEAgBCACNgIAIAJFBEBBkJcCQZCXAigCAEEBIAN0QX9zcTYCAAwDCwUgCEEQaiIDIAhBFGogAygCACAFRhsgAjYCACACRQ0CCyACIAg2AhggBSgCECIDBEAgAiADNgIQIAMgAjYCGAsgBSgCFCIDBEAgAiADNgIUIAMgAjYCGAsLCwsgACAHQXhxIAFqIgNBAXI2AgQgACADaiADNgIAQaCXAigCACAARgRAQZSXAiADNgIADwsLIANBA3YhAiADQYACSQRAIAJBA3RBtJcCaiEBQYyXAigCACIDQQEgAnQiAnEEfyABQQhqIgIhAyACKAIABUGMlwIgAiADcjYCACABQQhqIQMgAQshAiADIAA2AgAgAiAANgIMIAAgAjYCCCAAIAE2AgwPCyADQQh2IgEEfyADQf///wdLBH9BHwUgASABQYD+P2pBEHZBCHEiBHQiAkGA4B9qQRB2QQRxIQEgAiABdCIGQYCAD2pBEHZBAnEhAiADQQ4gASAEciACcmsgBiACdEEPdmoiAUEHanZBAXEgAUEBdHILBUEACyICQQJ0QbyZAmohASAAIAI2AhwgAEEANgIUIABBADYCEAJAQZCXAigCACIEQQEgAnQiBnFFBEBBkJcCIAQgBnI2AgAgASAANgIADAELIAEoAgAiASgCBEF4cSADRgRAIAEhAgUCQCADQQBBGSACQQF2ayACQR9GG3QhBANAIAFBEGogBEEfdkECdGoiBigCACICBEAgBEEBdCEEIAIoAgRBeHEgA0YNAiACIQEMAQsLIAYgADYCAAwCCwsgAigCCCIBIAA2AgwgAiAANgIIIAAgATYCCCAAIAI2AgwgAEEANgIYDwsgACABNgIYIAAgADYCDCAAIAA2AggL8QIBBn8CfyMAIQsjAEE/akFAcSQAIwAhBiMAQfAAaiQAIAZB4ABqIQcgBkEgaiEIIAJCAFIEQCAGIAUpAAA3AAAgBiAFKQAINwAIIAYgBSkAEDcAECAGIAUpABg3ABggByADKQAANwMAQQghAwNAIAMgB2ogBDwAACAEQgiIIQQgA0EBaiIDQRBHDQALIAJCP1YEQANAIAggByAGEHhBACEDA0AgACADaiABIANqLAAAIAMgCGosAABzOgAAIANBAWoiA0HAAEcNAAtBCCEDQQEhBQNAIAMgB2oiCi0AACAFaiEFIAogBToAACAFQQh2IQUgA0EBaiIDQRBHDQALIABBQGshACABQUBrIQEgAkJAfCICQj9WDQALCyACQgBSBEAgCCAHIAYQeCACpyIFBEBBACEDA0AgACADaiABIANqLAAAIAMgCGosAABzOgAAIANBAWoiAyAFRw0ACwsLIAhBwAAQCiAGQSAQCgsgCwskAAs0AQN/QQEhAQNAIAEgACACaiIBLQAAaiEDIAEgAzoAACADQQh2IQEgAkEBaiICQQRHDQALCxAAIABCADcCACAAQgA3AggLdwEBfyAAQfwBaiAAQcL/A2pBCHZxIABBzP8DakEIdiIBQf8BcUH/AXNxIABBxwBqIAFxIABB5v8DakEIdkH/AXEiAUH/AXNxIABBwQBqIAFxQQAgAEE+c2tBCHZBK3FBK3NyQQAgAEE/c2tBCHZBL3FBL3NycnILeQEBfyAAQfwBaiAAQcL/A2pBCHZxIABBzP8DakEIdiIBQf8BcUH/AXNxIABBxwBqIAFxIABB5v8DakEIdkH/AXEiAUH/AXNxIABBwQBqIAFxQQAgAEE+c2tBCHZBLXFBLXNyQQAgAEE/c2tBCHZB3wBxQd8Ac3JycgsHAEEBEAEaCwsAIAAgAUEgEJIBC4oBAQN/An8jACEFIwBBP2pBQHEkACMAIQMjAEEQaiQAIAMgADYCCCADIAE2AgQgAyIBQQA2AgBBACEAA0AgASABKAIAIAAgAygCCGosAAAgACADKAIEaiwAAHNB/wFxcjYCACAAQQFqIgAgAkcNAAsgASgCAEH/A2pBCHZBAXFBf2ohACAFCyQAIAALEQAgACABIAIgA0IBIAQQiwELOQAgACACBH8gACACKAAANgIwIAIoAAQFIABBADYCMEEACzYCNCAAIAEoAAA2AjggACABKAAENgI8CzIAIAAgAgR/IAIoAAAFQQALNgIwIAAgASgAADYCNCAAIAEoAAQ2AjggACABKAAINgI8C1oBBH8CfyMAIQkjAEE/akFAcSQAIwAhBiMAQdAAaiQAIAZBQGshByACQgBSBEAgByAEEAsgBiAFEEUgBiADIAcQlQEgBiABIAAgAhBEIAZBwAAQCgsgCQskAAseACACQv////8PVgRAEAAFIAAgASACIAMgBBCPAgsLCwAgACABIAIQkQILEQAgACABIAIgAyAEQQAQmgEL6QEBB38CfyMAIQwjAEE/akFAcSQAIwAhBiMAQbAEaiQAIAZBwAFqIgcgBRBjIAZBgAFqIgggBEIgEDkgByAIQSBqQiAQHSAHIAIgAxAdIAcgBkFAayIJECogAEEgaiILIARBIGpBIBAsGiAJEFIgBkGQA2oiBCAJEFQgACAEEFYgByAFEGMgByAAQsAAEB0gByACIAMQHSAHIAYQKiAGEFIgCCAILAAAQXhxOgAAIAggCCwAH0E/cUHAAHI6AB8gCyAGIAggCRCyASAIQcAAEAogCUHAABAKIAEEQCABQsAANwMACyAMCyQACw8AIAAgASACIANBABCcAQvcAQEIfwJ/IwAhDCMAQT9qQUBxJAAjACEFIwBB0ARqJAAgBUHgAGohBiAFQSBqIQggBSEHIAVBqANqIQkgBUGwAmohBSAAQSBqIgsQsQEEfyAAEFMEf0F/BSADELMBBH8gAxBTBH9BfwUgCSADEH4Ef0F/BSAGIAQQYyAGIABCIBAdIAYgA0IgEB0gBiABIAIQHSAGIAgQKiAIEFIgBSAIIAkgCxC7ASAHIAUQVkF/IAcgABCRASAAIAdGGyEBIAAgB0EgEEEgAXILCwVBfwsLBUF/CyEAIAwLJAAgAAtOAQN/IwAhCCMAQTBqJAAgCEEgaiIJQQA2AgAgCCAGIAcQPCAJIAYpABA3AgQgACABIAIgAyAEIAUgCSAIEJICIQogCEEgEAogCCQAIAoLbAEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBBoAFqJAAgASACQiAQOSABIAEsAABBeHE6AAAgASABLAAfQT9xQcAAcjoAHyADIAEQVCAAIAMQViABIAJBIBAsGiABQSBqIABBIBAsGiAFCyQACysBAn8DQCAAIAJqIgMgASACaiwAACADLAAAczoAACACQQFqIgJBCEcNAAsLTgECfyMAIQkjAEEwaiQAIAlBIGoiCkEANgIAIAkgByAIEDwgCiAHKQAQNwIEIAAgASACIAMgBCAFIAYgCiAJEKgCIAlBIBAKIAkkAEEAC3YBA38CfyMAIQUjAEE/akFAcSQAIwAhAyMAQRBqJAAgA0EAOgAAIAAgASACELICBH9BfwVBACEBA0AgAyAAIAFqLAAAIAMsAAByOgAAIAFBAWoiAUEgRw0AC0EAIAMtAABB/wNqQQh2QQFxawshACAFCyQAIAALiwIBA38CfyMAIQcjAEE/akFAcSQAIwAhBSMAQRBqJAAgAEIANwAAIABCADcACCAAQgA3ABAgAEIANwAYIABCADcAICAAQgA3ACggAEIANwAwIABCADcAOCAAQUBrQgA3AAAgAEIANwBIIABCADcAUCAAQgA3AFggAEIANwBgIABCADcAaCAAQgA3AHAgAEIANwB4IARBgICAgHhLIAIgA4RC/////w9WcgR/QYiXAkEWNgIAQX8FIARBgMAASSADQgBRcgR/QYiXAkEcNgIAQX8FIAVBEBAfIAOnIARBCnZBASABIAKnIAVBEEEAQSAgAEGAAUECEDhBAEdBH3RBH3ULCyEAIAcLJAAgAAuGAgEFfwJ/IwAhCCMAQT9qQUBxJAAjACEEIwBBQGskACACQQp2IQIgABAjIgVB/wBLIAFC/////w9WcgRAQYiXAkEcNgIAQX8hAAUgBEIANwIAIARCADcCCCAEQgA3AhAgBEIANwIYIARCADcCICAEQgA3AiggBEIANwIwIARBADYCOCAFEPcBIgYEQCAEIAY2AhAgBCAGNgIIIAQgBjYCACAEIAU2AhQgBCAFNgIMIAQgBTYCBCAEQgA3AhggBEIANwIgIAQgACADEKUBBH9BiJcCQRw2AgBBfwUgBCgCKCABp0YEfyAEKAIsIAJHBUEBCwshACAGEBYFQX8hAAsLIAgLJAAgAAvhAgEHfwJ/IwAhCiMAQT9qQUBxJAAjACEEIwBBQGskACAEQgA3AgggBEIANwIQIARCADcCGCAEQgA3AiAgBEIANwIoIARCADcCMCAEQQA2AjggBCAAECMiBTYCJCAEIAU2AhQgBCAFNgIEIAQgBRAhIgY2AiAgBCAFECEiBzYCECAEIAUQISIINgIAIAZFIAhFIAdFcnIEQCAGEBYgBxAWIAgQFkFqIQAFAkAgBRAhIgVFBEAgBhAWIAcQFiAIEBZBaiEADAELIAQgACADEKUBIgAEQCAEKAIgEBYgBCgCEBAWIAQoAgAQFiAFEBYMAQsgBCgCKCAEKAIsIAQoAjQgASACIAQoAhAgBCgCFCAFIAQoAgRBAEEAIAMQOCEAIAQoAiAQFiAEKAIQEBYCfwJAIAANACAFIAQoAgAgBCgCBBBBDQBBAAwBC0FdCyEAIAUQFiAEKAIAEBYLCyAKCyQAIAALuQQBBn8CfyMAIQgjAEE/akFAcSQAIwAhBCMAQRBqJAAgBEEEaiEDIAAoAhQhBSAAKAIEIQYgAEEANgIUIABBADYCBAJAAkACQAJAAkAgAkEBaw4CAQACCyABQQlqIQIgAUHljgJBCRAiRQ0CQWAhAAwDCyABQQhqIQIgAUHvjgJBCBAiRQ0BQWAhAAwCC0FmIQAMAQsgAiEBIAFB+I4CQQMQIgRAQWAhAAUgAUEDaiADEEshASADKAIAIQIgAQRAIAJBE0YEQCABQfyOAkEDECIEQEFgIQAFIAFBA2ogAxBLIgFFBEBBYCEADAULIAAgAygCADYCLCABQYCPAkEDECIEQEFgIQAFIAFBA2ogAxBLIgFFBEBBYCEADAYLIAAgAygCADYCKCABQYSPAkEDECIEQEFgIQAFIAFBA2ogAxBLIgFFBEBBYCEADAcLIAAgAygCACICNgIwIAAgAjYCNCABQQFqIAEgASwAAEEkRiICGyEBIAIEQCADIAU2AgAgACgCECAFIAEgARAjQQAgAyAEQQMQXQRAQWAhAAwICyAAIAMoAgA2AhQgBCgCACIBLAAAQSRGIQIgAUEBaiABIAIbIQEgAgRAIAMgBjYCACAAKAIAIAYgASABECNBACADIARBAxBdBEBBYCEADAkLIAAgAygCADYCBCAEKAIAIQEgABBwIgBFBEBBYEEAIAEsAAAbIQALBUFgIQALBUFgIQALCwsLBUFmIQALBUFgIQALCwsgCAskACAACyoBAX8DQCACQQN0IABqIAEgAkEDdGopAAA3AwAgAkEBaiICQYABRw0ACws/AQF/IAAgAUEEcRDPAiAAKAIEEBYgAEEANgIEIAAoAgAiAQRAIAEoAgAiAgRAIAIQFgsLIAEQFiAAQQA2AgALqAEAIAAgASgAAEH///8fcTYCACAAIAEoAANBAnZBg/7/H3E2AgQgACABKAAGQQR2Qf+B/x9xNgIIIAAgASgACUEGdkH//8AfcTYCDCAAIAEoAAxBCHZB//8/cTYCECAAQgA3AhQgAEIANwIcIABBADYCJCAAIAEoABA2AiggACABKAAUNgIsIAAgASgAGDYCMCAAIAEoABw2AjQgAEIANwM4IABBADoAUAuCAgEDfgJAAkAgACkDOCIEQgBRDQAgAkIQIAR9IgMgAyACVhsiBUIAUgRAQgAhAwNAIAMgBHynIABBQGtqIAEgA6dqLAAAOgAAIAApAzghBCADQgF8IgMgBVQNAAsLIAAgBCAFfCIENwM4IARCEFoEQCAAIABBQGtCEBBxIABCADcDOCACIAV9IQIgASAFp2ohAQwBCwwBCyACQnCDIQMgAkIPVgR+IAAgASADEHEgA6cgAWohASACIAN9BSACCyIEQgBSBEBCACECA0AgACkDOCACfKcgAEFAa2ogAqcgAWosAAA6AAAgAkIBfCICIARUDQALIAAgACkDOCAEfDcDOAsLC7kDAgx/A34gACkDOCIOQgBSBEAgDqciAiAAQUBrakEBOgAAIA5CAXwiDkIQVARAIA6nIABBQGtqQQBBDyACaxAaGgsgAEEBOgBQIAAgAEFAa0IQEHELIAAoAhwgACgCGCICQRp2aiIDQf///x9xIQQgACgCICADQRp2aiIDQf///x9xIQYgACgCFCAAKAIkIANBGnZqIgdBGnZBBWxqIgNB////H3EhCCAHQYCAgGByIAYgBCACQf///x9xIANBGnZqIgMgCEEFaiIKQRp2aiIFQRp2aiILQRp2aiIMQRp2aiIJQR92QX9qIg1B////H3EhAiACIAVxIAMgCUEfdSIDcXIhBSACIAtxIAMgBHFyIgRBFHQgBUEGdnKtIAAoAiytfCACIApxIAMgCHFyIAVBGnRyrSAAKAIorXwiEEIgiHwhDiACIAxxIAMgBnFyIgJBDnQgBEEMdnKtIAAoAjCtfCAOQiCIfCEPIAkgDXEgAyAHcXJBCHQgAkESdnKtIAAoAjStfCAPQiCIfKchAiABIBCnEAsgAUEEaiAOpxALIAFBCGogD6cQCyABQQxqIAIQCyAAQdgAEAoLNwEBfyACQQN2IgMEQEEAIQIDQCAAIAJBA3RqIAJBA3QgAWopAwAQ2gIgAkEBaiICIANHDQALCwvPAQEDfyMAIQkjAEHgAmokACAJQRBqIgpCwAAgBiAHEDYgCUHQAGoiCCAKECYgCkHAABAKIAggBCAFEA8gCEGwlgJCACAFfUIPgxAPIAggASACEA8gCEGwlgJCACACfUIPgxAPIAlB0AJqIgQgBRASIAggBEIIEA8gBCACEBIgCCAEQggQDyAIIAkQJSAIQYACEAogCSADEEMhAyAJQRAQCiAABEAgAwR/IABBACACpxAaGkF/BSAAIAEgAiAGQQEgBxAvQQALIQMLIAkkACADC+gBAQN/IwAhBiMAQT9qQUBxJAAjACEFIwBBwAFqJAAgAUF/akEYdEEYdUH/AXFBP0oEQBAACyAFQYABaiEEIAJFIANBf2pBGHRBGHVB/wFxQT9KcgRAEAAFIAQgAToAACAEIAM6AAEgBEEBOgACIARBAToAAyAEQQRqEHUgBEEIakIAEBIgBEIANwMQIARCADcDGCAEQgA3AyAgBEIANwMoIARCADcDMCAEQgA3AzggACAEEHYgBSADQf8BcSIBakEAQYABIAFrEBoaIAUgAiABEBgaIAAgBUKAARA7IAVBgAEQCiAGJAALC5UBAQJ/IwAhAyMAQT9qQUBxJAAjACECIwBBQGskACABQX9qQRh0QRh1Qf8BcUE/SgRAEAAFIAIgAToAACACQQA6AAEgAkEBOgACIAJBAToAAyACQQRqEHUgAkEIakIAEBIgAkIANwMQIAJCADcDGCACQgA3AyAgAkIANwMoIAJCADcDMCACQgA3AzggACACEHYgAyQACwsQACAAIAEgAiADIAQgBRByC6wBAQN/IwAhCCMAQeACaiQAIAhBEGoiCiAGIAcQmAEgCEHQAGoiCSAKECYgCkHAABAKIAkgBCAFEA8gCEHQAmoiBCAFEBIgCSAEQggQDyAJIAEgAhAPIAQgAhASIAkgBEIIEA8gCSAIECUgCUGAAhAKIAggAxBDIQMgCEEQEAogAARAIAMEfyAAQQAgAqcQGhpBfwUgACABIAIgBiAHEJcBQQALIQMLIAgkACADC2MBBX9BICEBQQEhAgNAIAJB/wFxIgIgACABQX9qIgFqLAAAIgRB/wFxIAFBsIQCaiwAACIFQf8BcWtBCHVxIANyIQMgBCAFc0H/AXFB//8DakEIdiACcSECIAENAAsgA0EARwvlIAIBfzd+IAEsAAAgASwAASABQQJqIgQsAAAQEEL///8AgyEFIAQQEUIFiEL///8AgyEGIAEsAAUgASwABiABQQdqIgQsAAAQEEICiEL///8AgyEOIAQQEUIHiEL///8AgyEPIAFBCmoQEUIEiEL///8AgyEKIAEsAA0gASwADiABQQ9qIgQsAAAQEEIBiEL///8AgyEHIAQQEUIGiEL///8AgyELIAEsABIgASwAEyABLAAUEBBCA4hC////AIMhDSABLAAVIAEsABYgAUEXaiIELAAAEBBC////AIMhCCAEEBFCBYhC////AIMhECABLAAaIAEsABsgAUEcaiIBLAAAEBBCAohC////AIMhDCABEBFCB4ghCSACLAAAIAIsAAEgAkECaiIBLAAAEBBC////AIMhGCABEBFCBYhC////AIMhGSACLAAFIAIsAAYgAkEHaiIBLAAAEBBCAohC////AIMhGyABEBFCB4hC////AIMhHCACQQpqEBFCBIhC////AIMhGiACLAANIAIsAA4gAkEPaiIBLAAAEBBCAYhC////AIMhFSABEBFCBohC////AIMhFiACLAASIAIsABMgAiwAFBAQQgOIQv///wCDIREgAiwAFSACLAAWIAJBF2oiASwAABAQQv///wCDIRMgARARQgWIQv///wCDIRQgAiwAGiACLAAbIAJBHGoiASwAABAQQgKIQv///wCDIRIgARARQgeIIRcgAywAACADLAABIANBAmoiASwAABAQQv///wCDIR0gARARQgWIQv///wCDIR4gAywABSADLAAGIANBB2oiASwAABAQQgKIQv///wCDITEgARARQgeIQv///wCDITIgA0EKahARQgSIQv///wCDITMgAywADSADLAAOIANBD2oiASwAABAQQgGIQv///wCDITQgARARQgaIQv///wCDISogAywAEiADLAATIAMsABQQEEIDiEL///8AgyE1IAMsABUgAywAFiADQRdqIgEsAAAQEEL///8AgyErIAEQEUIFiEL///8AgyEsIBAgGX4gDCAYfnwgCCAbfnwgDSAcfnwgCyAafnwgByAVfnwgCiAWfnwgDiATfnwgDyARfnwgBiAUfnwgBSASfnwgAywAGiADLAAbIANBHGoiASwAABAQQgKIQv///wCDfCItQoCAQH0hJSAMIBR+IAkgE358IBAgEn58IAggF358IAwgE34gCSARfnwgECAUfnwgCCASfnwgDSAXfnwiH0KAgEB9IiZCFYd8ISEgDCAXfiAJIBJ+fCAMIBJ+IAkgFH58IBAgF358IiJCgIBAfSIkQhWHfCEgIAkgF34iJ0KAgEB9IihCFYchIyAFIBl+IAYgGH58IB58IB0gBSAYfnwiNkKAgEB9IjdCFYh8IjhCgIBAfSEwIB8gJkKAgIB/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IAVB////H3E2AgggACAGQf///w9xNgIMIAAgB0H///8fcTYCECAAIAhB////D3E2AhQgACAJQf///x9xNgIYIAAgAUH///8PcTYCHCAAIANB////H3E2AiAgACAKIANBGnVqQf///w9xNgIkC0MBA38CfyMAIQUjAEE/akFAcSQAIwAhAyMAQSBqJAAgAyACIAEQoQEEf0F/BSAAQdCWAiADEFFBAAshACAFCyQAIAALZQEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBBQGskACADIAJCIBA5IAEgAykAADcAACABIAMpAAg3AAggASADKQAQNwAQIAEgAykAGDcAGCADQcAAEAogACABEGghACAFCyQAIAALBABBMAtRAQN/An8jACEHIwBBP2pBQHEkACMAIQUjAEEgaiQAIAJCMFQEf0F/BSAFIAEgAxCDASAAIAFBIGogAkJgfCAFIAEgBBCEAQshACAHCyQAIAALigEBBH8jACEFIwBB4ABqJAAgBUFAayEGIAVBIGoiBCAFIgcQiAEEQEF/IQAFIAAgBCkAADcAACAAIAQpAAg3AAggACAEKQAQNwAQIAAgBCkAGDcAGCAGIAQgAxCDASAAQSBqIAEgAiAGIAMgBxCGASEAIAdBIBAKIARBIBAKIAZBGBAKCyAFJAAgAAshACACQhBUBH9BfwUgACABQRBqIAEgAkJwfCADIAQQWQsLKAAgAkLv////D1YEQBAABSAAQRBqIAAgASACIAMgBBBaGkEADwtBAAszAQF+IAGtIAKtQiCGhCIDQoCAgIAQVARAIAAgA6cQHwVBupUCQc6VAkHFAUHolQIQAgsLFQAgACABIAKtIAOtQiCGhCAEEJsBCxQAIAAgASACrSADrUIghoQQHUEACxcAIAAgASACIAOtIAStQiCGhCAFEJQCCxkAIAAgASACIAOtIAStQiCGhCAFEJkBQQALFwAgACABIAIgA60gBK1CIIaEIAUQkwILFwAgACABIAKtIAOtQiCGhCAEEKICQQALJQAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCRCpAgslACAAIAEgAiADIAQgBa0gBq1CIIaEIAcgCK0gCa1CIIaEEKcCCxcAIAAgASACrSADrUIghoQgBCAFEKwCCxgAIAAgASACIAOtIAStQiCGhCAFIAYQZgsXACAAIAEgAq0gA61CIIaEIAQgBRCtAgsYACAAIAEgAiADrSAErUIghoQgBSAGEGcLEwAgACABIAKtIAOtQiCGhBC0AgsTACAAIAGtIAKtQiCGhCADELMCCyEAIAAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgBxC1AgsfACAAIAEgAq0gA61CIIaEIAStIAWtQiCGhCAGEKIBCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChC2AgsXACAAIAEgAq0gA61CIIaEIAQgBRDZAgsUACAAIAEgAq0gA61CIIaEEDlBAAsSACAAIAEgAq0gA61CIIaEECcLGQAgACABIAIgA60gBK1CIIaEIAUgBhCvAQsXACAAIAEgAq0gA61CIIaEIAQgBRDCAQsVACAAIAEgAq0gA61CIIaEIAQQwwELFwAgACABIAKtIAOtQiCGhCAEIAUQxAELGQAgACABIAKtIAOtQiCGhCAEIAUgBhCEAQsYACAAIAEgAiADrSAErUIghoQgBSAGEFkLGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEIUBCwsAIAAgASACEMABCxcAIAAgASACrSADrUIghoQgBCAFEMUBCxkAIAAgASACrSADrUIghoQgBCAFIAYQhgELGAAgACABIAIgA60gBK1CIIaEIAUgBhBaCxsAIAAgASACIAOtIAStQiCGhCAFIAYgBxCHAQsVACAAIAEgAq0gA61CIIaEIAQQ7QELFwAgACABIAKtIAOtQiCGhCAEEIkBQQALJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKABCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQnwILJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCdAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEI4CCz4BAn8jACEEIwBBIGokACAEIAEgAiADEIkBQX8gACAEEJEBIAAgBEYbIQEgBCAAQSAQQSABciEFIAQkACAFCyYAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxB7CyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQtQELJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCsAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEN0CCycAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxCCAQslACAAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgCSAKELwBCyUAIAAgAiADrSAErUIghoQgBSAGIAetIAitQiCGhCAJIAoQsAELJQAgACABIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChDkAgvQAgEGfyAAQYB/TwRAQYiXAkEwNgIAQQAPC0EQIABBC2pBeHEgAEELSRsiBEHMAGoQISIARQRAQQAPCyAAQXhqIQEgAEE/cQR/IABBfGoiBSgCACIGQXhxIABBP2pBQHEiAEF4aiICIABBOGogAiABa0EPSxsiACABayICayEDIAZBA3EEQCAAIAAoAgRBAXEgA3JBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSAFKAIAQQFxIAJyQQJyNgIAIAAgACgCBEEBcjYCBCABIAIQigEFIAAgASgCACACajYCACAAIAM2AgQLIAAFIAEiAAshAiAAKAIEIgFBA3EEQCABQXhxIgMgBEEQaksEQCAAIAFBAXEgBHJBAnI2AgQgAiAEaiIAIAMgBGsiAUEDcjYCBCACIANqIgQgBCgCBEEBcjYCBCAAIAEQigELCyACQQhqCy4BAX8gABAhIgFFBEAgAQ8LIAFBfGooAgBBA3FFBEAgAQ8LIAFBACAAEBoaIAEL+gEBA38gAUH/AXEiAgRAAkAgAEEDcQRAIAFB/wFxIQMDQCAALAAAIgQgA0EYdEEYdUYgBEVyDQIgAEEBaiIAQQNxDQALCyACQYGChAhsIQMgACgCACICQYCBgoR4cUGAgYKEeHMgAkH//ft3anFFBEADQCACIANzIgJBgIGChHhxQYCBgoR4cyACQf/9+3dqcUUEQCAAQQRqIgAoAgAiAkGAgYKEeHFBgIGChHhzIAJB//37d2pxRQ0BCwsLIAFB/wFxIQIDQCAAQQFqIQEgACwAACIDIAJBGHRBGHVGIANFckUEQCABIQAMAQsLCwUgABAjIABqIQALIAALQgEBfyMAIQIjAEFAayQAIAAgAhCBAiABIAIpAAA3AAAgASACKQAINwAIIAEgAikAEDcAECABIAIpABg3ABggAiQACwYAQYiXAguhAQEDfwJ/IwAhBSMAQT9qQUBxJAAjACEDIwBB8ABqJAAgAyACKQAANwAAIAMgAikACDcACCADIAIpABA3ABAgAyACKQAYNwAYIANB4ABqIgIgASkAADcDACACQgA3AwggA0EgaiIBIAIgAxB4QQAhAgNAIAAgAmogASACaiwAADoAACACQQFqIgJBIEcNAAsgAUHAABAKIANBIBAKIAULJAALBABBCgsGAEGplgILyAEBCH8CfyMAIQsjAEE/akFAcSQAIwAhBCMAQRBqJAAgBEEANgIAIANBf2ogAkkEfyABIAJBf2oiCGohCUEAIQJBACEBA0AgCSABay0AACIKQYABc0H/A2ogAkH/AXEiAkH/A2ogBCgCAEH/A2pxcUEIdkEBcSEGIAIgCnIhAiAEIAQoAgBBACAGayABcXI2AgAgBiAFQf8BcXIhBSABQQFqIgEgA0cNAAsgACAIIAQoAgBrNgIAIAVBf2oFQX8LIQAgCwskACAAC9YBAQV/An8jACEJIwBBP2pBQHEkACMAIQYjAEEQaiQAIAMEfyADIANBf2oiBXEEfyACIANwBSACIAVxCyEIIAUgCGsiBSACQX9zTwRAEAALIAIgBWoiAiAESQR/IAAEQCAAIAJBAWo2AgALIAEgAmohASAGQQA6AABBACEAA38gASAAayICIAIsAAAgBiwAAHFB/wFxIAAgBXNBf2pBGHYiAkGAAXFyOgAAIAYgBi0AACACcjoAACAAQQFqIgAgA0cNAEEACwVBfwsFQX8LIQAgCQskACAACzYBAX9BHhADIgBBAEoEQEGElwIgADYCAAVBhJcCKAIAIQALIABBEEkEQBAABUHwlgJBEBAfCws1AQF/IwAhAiMAQUBrJAAgACACECogAEHQAWoiACACQsAAEB0gACABECogAkHAABAKIAIkAAs2AQN/An8jACECIwBBP2pBQHEkACMAIQAjAEEQaiQAIAAQjQEgACgCAARAIAAQjQELIAILJAALIwBBgJcCKAIABH9BAQUQggIQkAEQgAJBgJcCQQE2AgBBAAsLgQEBBH8gBAR/An8gA0UhBiACKAIAIQUCQANAIAUgAUkEQCAAIAVqLAAAIgchCCAHQT1GBEAgBEF/aiEEBSAGDQMgAyAIEEBF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BMUAKNUyAdRghP9YirT+5JJ8/7j29wBBdVb//WbS/v55JACJcwP/PBjYAIYSHQA74mEAsI5HAAfRoQC9VDP+m/pIANVU6/8t3uAA7pSP/6oqNf9Op3UAugAo/32xZ/9F4UIA4wdYAUusBgCpLeMBECRG/zICCf+LwRYAj7fn/tpFMgDsOKEB1YMqAIqRLP6I5Sj/MT8j/z2R9f9lwAL+6KdxAJhoJgF5udoAeYvT/nfwIwBBvdn+u7Oi/6C75gA++A7/PE5hAP/3o//hO1v/a0c6//EvIQEydewA27E//vRaswAjwtf/vUMy/xeHgQBovSX/uTnCACM+5//c+GwADOeyAI9QWwGDXWX/kCcCAf/6sgAFEez+iyAuAMy8Jv71czT/v3FJ/r9sRf8WRfUBF8uyAKpjqgBB+G8AJWyZ/0AlRQAAWD7+WZSQ/79E4AHxJzUAKcvt/5F+wv/dKv3/GWOXAGH93wFKczH/Bq9I/zuwywB8t/kB5ORjAIEMz/6owMP/zLAQ/pjqqwBNJVX/IXiH/47C4wEf1joA1bt9/+guPP++dCr+l7IT/zM+7f7M7MEAwug8AKwinf+9ELj+ZwNf/43pJP4pGQv/FcOmAHb1LQBD1ZX/nwwS/7uk4wGgGQUADE7DASvF4QAwjin+xJs8/9/HEgGRiJwA/HWp/pHi7gDvF2sAbbW8/+ZwMf5Jqu3/57fj/1DcFADCa38Bf81lAC40xQHSqyT/WANa/ziXjQBgu///Kk7IAP5GRgH0fagAzESKAXzXRgBmQsj+ETTkAHXcj/7L+HsAOBKu/7qXpP8z6NABoOQr//kdGQFEvj8ADQAAAAD/AAAAAPUAAAAAAAD7AAAAAAAA/QAAAADzAAAAAAcAAAAAAAMAAAAA8wAAAAAFAEGLgQILQAsAAAAAAAsAAAAA8wAAAAAAAP0AAAAAAP8AAAAAAwAAAAD1AAAAAAAAAA8AAAAAAP8AAAAA/wAAAAAHAAAAAAUAQcyCAgsBAQBB8IICCwEBAEGQgwILsAEm6JWPwrInsEXD9Iny75jw1d+sBdPGMzmxOAKIbVP8BccXanA9TdhPujwLdg0QZw8qIFP6LDnMxk7H/XeSrAN67P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/7dP1XBpjEljWnPei3vneFABBz4QCC8IFEAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgABBsIsCCwEBAEHQiwILwQHg63p8O0G4rhZW4/rxn8Rq2gmN65wysf2GYgUWX0m4AF+clbyjUIwksdCxVZyD71sERFzEWByOhtgiTt3QnxFX7P///////////////////////////////////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBAEGgjQILjwlTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGJsYWtlMmJfZmluYWwAb3V0bGVuIDw9IFVJTlQ4X01BWABjcnlwdG9fZ2VuZXJpY2hhc2gvYmxha2UyYi9yZWYvZ2VuZXJpY2hhc2hfYmxha2UyYi5jAGNyeXB0b19nZW5lcmljaGFzaF9ibGFrZTJiX2ZpbmFsACRhcmdvbjJpZAAkYXJnb24yaQAkdj0AJG09ACx0PQAscD0AJGFyZ29uMmlkJHY9ACRhcmdvbjJpJHY9ACRhcmdvbjJpZCQAJGFyZ29uMmkkACJ7IHJldHVybiBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUoKTsgfSIAeyBpZiAoTW9kdWxlLmdldFJhbmRvbVZhbHVlID09PSB1bmRlZmluZWQpIHsgdHJ5IHsgdmFyIHdpbmRvd18gPSAnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyA/IHdpbmRvdyA6IHNlbGY7IHZhciBjcnlwdG9fID0gdHlwZW9mIHdpbmRvd18uY3J5cHRvICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvd18uY3J5cHRvIDogd2luZG93Xy5tc0NyeXB0bzsgdmFyIHJhbmRvbVZhbHVlc1N0YW5kYXJkID0gZnVuY3Rpb24oKSB7IHZhciBidWYgPSBuZXcgVWludDMyQXJyYXkoMSk7IGNyeXB0b18uZ2V0UmFuZG9tVmFsdWVzKGJ1Zik7IHJldHVybiBidWZbMF0gPj4+IDA7IH07IHJhbmRvbVZhbHVlc1N0YW5kYXJkKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlc1N0YW5kYXJkOyB9IGNhdGNoIChlKSB7IHRyeSB7IHZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTsgdmFyIHJhbmRvbVZhbHVlTm9kZUpTID0gZnVuY3Rpb24oKSB7IHZhciBidWYgPSBjcnlwdG9bJ3JhbmRvbUJ5dGVzJ10oNCk7IHJldHVybiAoYnVmWzBdIDw8IDI0IHwgYnVmWzFdIDw8IDE2IHwgYnVmWzJdIDw8IDggfCBidWZbM10pID4+PiAwOyB9OyByYW5kb21WYWx1ZU5vZGVKUygpOyBNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPSByYW5kb21WYWx1ZU5vZGVKUzsgfSBjYXRjaCAoZSkgeyB0aHJvdyAnTm8gc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvdW5kJzsgfSB9IH0gfQBMaWJzb2RpdW1EUkdidWZfbGVuIDw9IFNJWkVfTUFYAHJhbmRvbWJ5dGVzL3JhbmRvbWJ5dGVzLmMAcmFuZG9tYnl0ZXMAYjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAxLjAuMTg="; + + function gA() { + try { + if (h) return new Uint8Array(h); + var A = eA(IA); + if (A) return A; + if (r) return r(IA); + throw "both async and sync fetching of the wasm failed"; + } catch (A) { + z(A); + } + } + + O(IA) || (Z = IA, IA = C.locateFile ? C.locateFile(Z, w) : w + Z), C.asm = function () { + var A = { + env: cA, + wasi_unstable: cA, + global: { + NaN: NaN, + Infinity: 1 / 0 + }, + "global.Math": Math, + asm2wasm: F + }; + + function I(A, I) { + var g = A.exports; + C.asm = g, function (A) { + if (T--, C.monitorRunDependencies && C.monitorRunDependencies(T), 0 == T && (null !== q && (clearInterval(q), q = null), V)) { + var I = V; + V = null, I(); + } + }(); + } + + function g(A) { + I(A.instance); + } + + function B(I) { + return (h || !o && !c || "function" != typeof fetch ? new Promise(function (A, I) { + A(gA()); + }) : fetch(IA, { + credentials: "same-origin" + }).then(function (A) { + if (!A.ok) throw "failed to load wasm binary file at '" + IA + "'"; + return A.arrayBuffer(); + }).catch(function () { + return gA(); + })).then(function (I) { + return WebAssembly.instantiate(I, A); + }).then(I, function (A) { + s("failed to asynchronously prepare wasm: " + A), z(A); + }); + } + + if (T++, C.monitorRunDependencies && C.monitorRunDependencies(T), C.instantiateWasm) try { + return C.instantiateWasm(A, I); + } catch (A) { + return s("Module.instantiateWasm callback failed with error: " + A), !1; + } + return function () { + if (h || "function" != typeof WebAssembly.instantiateStreaming || O(IA) || "function" != typeof fetch) return B(g); + fetch(IA, { + credentials: "same-origin" + }).then(function (I) { + return WebAssembly.instantiateStreaming(I, A).then(g, function (A) { + s("wasm streaming compile failed: " + A), s("falling back to ArrayBuffer instantiation"), B(g); + }); + }); + }(), {}; + }; + var BA = [function () { + return C.getRandomValue(); + }, function () { + if (void 0 === C.getRandomValue) try { + var A = "object" == (typeof window === "undefined" ? "undefined" : _typeof(window)) ? window : self, + I = void 0 !== A.crypto ? A.crypto : A.msCrypto, + g = function g() { + var A = new Uint32Array(1); + return I.getRandomValues(A), A[0] >>> 0; + }; + + g(), C.getRandomValue = g; + } catch (A) { + try { + var B = __webpack_require__(/*! crypto */ "./node_modules/crypto-browserify/index.js"), + Q = function Q() { + var A = B.randomBytes(4); + return (A[0] << 24 | A[1] << 16 | A[2] << 8 | A[3]) >>> 0; + }; + + Q(), C.getRandomValue = Q; + } catch (A) { + throw "No secure random number generator found"; + } + } + }]; + + function CA() { + return l.length; + } + + var QA = !1; + + function EA(A) { + for (var I = [], g = 0; g < A.length; g++) { + var B = A[g]; + B > 255 && (QA && H(!1, "Character code " + B + " (" + String.fromCharCode(B) + ") at offset " + g + " not in 0x00-0xFF."), B &= 255), I.push(String.fromCharCode(B)); + } + + return I.join(""); + } + + var iA = "function" == typeof atob ? atob : function (A) { + var I, + g, + B, + C, + Q, + E, + i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + e = "", + o = 0; + A = A.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + do { + I = i.indexOf(A.charAt(o++)) << 2 | (C = i.indexOf(A.charAt(o++))) >> 4, g = (15 & C) << 4 | (Q = i.indexOf(A.charAt(o++))) >> 2, B = (3 & Q) << 6 | (E = i.indexOf(A.charAt(o++))), e += String.fromCharCode(I), 64 !== Q && (e += String.fromCharCode(g)), 64 !== E && (e += String.fromCharCode(B)); + } while (o < A.length); + + return e; + }; + + function eA(A) { + if (O(A)) return function (A) { + if ("boolean" == typeof a && a) { + var I; + + try { + I = Buffer.from(A, "base64"); + } catch (g) { + I = new Buffer(A, "base64"); + } + + return new Uint8Array(I.buffer, I.byteOffset, I.byteLength); + } + + try { + for (var g = iA(A), B = new Uint8Array(g.length), C = 0; C < g.length; ++C) { + B[C] = g.charCodeAt(C); + } + + return B; + } catch (A) { + throw new Error("Converting base64 string to bytes failed."); + } + }(A.slice(W.length)); + } + + var oA, + cA = { + c: function c(A, I, g, B) { + z("Assertion failed: " + U(A) + ", at: " + [I ? U(I) : "unknown filename", g, B ? U(B) : "unknown function"]); + }, + __memory_base: 1024, + __table_base: 0, + a: function a() { + z(); + }, + b: function b(A) { + return BA[A](); + }, + g: CA, + f: function f(A, I, g) { + _.set(_.subarray(I, I + g), A); + }, + e: function e(A) { + var I = CA(); + if (A > 2147418112) return !1; + + for (var g = Math.max(I, 16777216); g < A;) { + g = g <= 536870912 ? v(2 * g, 65536) : Math.min(v((3 * g + 2147483648) / 4, 65536), 2147418112); + } + + return !!function (A) { + try { + return D.grow(A - k.byteLength + 65535 >> 16), b(D.buffer), 1; + } catch (A) {} + }(g); + }, + d: function d(A) { + switch (A) { + case 30: + return 16384; + + case 85: + return 131068; + + case 132: + case 133: + case 12: + case 137: + case 138: + case 15: + case 235: + case 16: + case 17: + case 18: + case 19: + case 20: + case 149: + case 13: + case 10: + case 236: + case 153: + case 9: + case 21: + case 22: + case 159: + case 154: + case 14: + case 77: + case 78: + case 139: + case 80: + case 81: + case 82: + case 68: + case 67: + case 164: + case 11: + case 29: + case 47: + case 48: + case 95: + case 52: + case 51: + case 46: + return 200809; + + case 79: + return 0; + + case 27: + case 246: + case 127: + case 128: + case 23: + case 24: + case 160: + case 161: + case 181: + case 182: + case 242: + case 183: + case 184: + case 243: + case 244: + case 245: + case 165: + case 178: + case 179: + case 49: + case 50: + case 168: + case 169: + case 175: + case 170: + case 171: + case 172: + case 97: + case 76: + case 32: + case 173: + case 35: + return -1; + + case 176: + case 177: + case 7: + case 155: + case 8: + case 157: + case 125: + case 126: + case 92: + case 93: + case 129: + case 130: + case 131: + case 94: + case 91: + return 1; + + case 74: + case 60: + case 69: + case 70: + case 4: + return 1024; + + case 31: + case 42: + case 72: + return 32; + + case 87: + case 26: + case 33: + return 2147483647; + + case 34: + case 1: + return 47839; + + case 38: + case 36: + return 99; + + case 43: + case 37: + return 2048; + + case 0: + return 2097152; + + case 3: + return 65536; + + case 28: + return 32768; + + case 44: + return 32767; + + case 75: + return 16384; + + case 39: + return 1e3; + + case 89: + return 700; + + case 71: + return 256; + + case 40: + return 255; + + case 2: + return 100; + + case 180: + return 64; + + case 25: + return 20; + + case 5: + return 16; + + case 6: + return 6; + + case 73: + return 4; + + case 84: + return "object" == (typeof navigator === "undefined" ? "undefined" : _typeof(navigator)) && navigator.hardwareConcurrency || 1; + } + + return C.___errno_location && (_d2[C.___errno_location() >> 2] = 28), -1; + }, + memory: D, + table: p + }, + aA = C.asm({}, cA, k); + + function nA(A) { + function I() { + oA || (oA = !0, u || (P(N), P(m), C.onRuntimeInitialized && C.onRuntimeInitialized(), function () { + if (C.postRun) for ("function" == typeof C.postRun && (C.postRun = [C.postRun]); C.postRun.length;) { + A = C.postRun.shift(), L.unshift(A); + } + var A; + P(L); + }())); + } + + A = A || e, T > 0 || (function () { + if (C.preRun) for ("function" == typeof C.preRun && (C.preRun = [C.preRun]); C.preRun.length;) { + A = C.preRun.shift(), R.unshift(A); + } + var A; + P(R); + }(), T > 0 || (C.setStatus ? (C.setStatus("Running..."), setTimeout(function () { + setTimeout(function () { + C.setStatus(""); + }, 1), I(); + }, 1)) : I())); + } + + if (C.asm = aA, C.___errno_location = function () { + return C.asm.h.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_abytes = function () { + return C.asm.i.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_decrypt = function () { + return C.asm.j.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_decrypt_detached = function () { + return C.asm.k.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_encrypt = function () { + return C.asm.l.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_encrypt_detached = function () { + return C.asm.m.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_abytes = function () { + return C.asm.n.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_decrypt = function () { + return C.asm.o.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_decrypt_detached = function () { + return C.asm.p.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_encrypt = function () { + return C.asm.q.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_encrypt_detached = function () { + return C.asm.r.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_keybytes = function () { + return C.asm.s.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_keygen = function () { + return C.asm.t.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_messagebytes_max = function () { + return C.asm.u.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_npubbytes = function () { + return C.asm.v.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_ietf_nsecbytes = function () { + return C.asm.w.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_keybytes = function () { + return C.asm.x.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_keygen = function () { + return C.asm.y.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_messagebytes_max = function () { + return C.asm.z.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_npubbytes = function () { + return C.asm.A.apply(null, arguments); + }, C._crypto_aead_chacha20poly1305_nsecbytes = function () { + return C.asm.B.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_abytes = function () { + return C.asm.C.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_decrypt = function () { + return C.asm.D.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_decrypt_detached = function () { + return C.asm.E.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_encrypt = function () { + return C.asm.F.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_encrypt_detached = function () { + return C.asm.G.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_keybytes = function () { + return C.asm.H.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_keygen = function () { + return C.asm.I.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_messagebytes_max = function () { + return C.asm.J.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_npubbytes = function () { + return C.asm.K.apply(null, arguments); + }, C._crypto_aead_xchacha20poly1305_ietf_nsecbytes = function () { + return C.asm.L.apply(null, arguments); + }, C._crypto_auth = function () { + return C.asm.M.apply(null, arguments); + }, C._crypto_auth_bytes = function () { + return C.asm.N.apply(null, arguments); + }, C._crypto_auth_keybytes = function () { + return C.asm.O.apply(null, arguments); + }, C._crypto_auth_keygen = function () { + return C.asm.P.apply(null, arguments); + }, C._crypto_auth_verify = function () { + return C.asm.Q.apply(null, arguments); + }, C._crypto_box_beforenm = function () { + return C.asm.R.apply(null, arguments); + }, C._crypto_box_beforenmbytes = function () { + return C.asm.S.apply(null, arguments); + }, C._crypto_box_detached = function () { + return C.asm.T.apply(null, arguments); + }, C._crypto_box_detached_afternm = function () { + return C.asm.U.apply(null, arguments); + }, C._crypto_box_easy = function () { + return C.asm.V.apply(null, arguments); + }, C._crypto_box_easy_afternm = function () { + return C.asm.W.apply(null, arguments); + }, C._crypto_box_keypair = function () { + return C.asm.X.apply(null, arguments); + }, C._crypto_box_macbytes = function () { + return C.asm.Y.apply(null, arguments); + }, C._crypto_box_messagebytes_max = function () { + return C.asm.Z.apply(null, arguments); + }, C._crypto_box_noncebytes = function () { + return C.asm._.apply(null, arguments); + }, C._crypto_box_open_detached = function () { + return C.asm.$.apply(null, arguments); + }, C._crypto_box_open_detached_afternm = function () { + return C.asm.aa.apply(null, arguments); + }, C._crypto_box_open_easy = function () { + return C.asm.ba.apply(null, arguments); + }, C._crypto_box_open_easy_afternm = function () { + return C.asm.ca.apply(null, arguments); + }, C._crypto_box_publickeybytes = function () { + return C.asm.da.apply(null, arguments); + }, C._crypto_box_seal = function () { + return C.asm.ea.apply(null, arguments); + }, C._crypto_box_seal_open = function () { + return C.asm.fa.apply(null, arguments); + }, C._crypto_box_sealbytes = function () { + return C.asm.ga.apply(null, arguments); + }, C._crypto_box_secretkeybytes = function () { + return C.asm.ha.apply(null, arguments); + }, C._crypto_box_seed_keypair = function () { + return C.asm.ia.apply(null, arguments); + }, C._crypto_box_seedbytes = function () { + return C.asm.ja.apply(null, arguments); + }, C._crypto_generichash = function () { + return C.asm.ka.apply(null, arguments); + }, C._crypto_generichash_bytes = function () { + return C.asm.la.apply(null, arguments); + }, C._crypto_generichash_bytes_max = function () { + return C.asm.ma.apply(null, arguments); + }, C._crypto_generichash_bytes_min = function () { + return C.asm.na.apply(null, arguments); + }, C._crypto_generichash_final = function () { + return C.asm.oa.apply(null, arguments); + }, C._crypto_generichash_init = function () { + return C.asm.pa.apply(null, arguments); + }, C._crypto_generichash_keybytes = function () { + return C.asm.qa.apply(null, arguments); + }, C._crypto_generichash_keybytes_max = function () { + return C.asm.ra.apply(null, arguments); + }, C._crypto_generichash_keybytes_min = function () { + return C.asm.sa.apply(null, arguments); + }, C._crypto_generichash_keygen = function () { + return C.asm.ta.apply(null, arguments); + }, C._crypto_generichash_statebytes = function () { + return C.asm.ua.apply(null, arguments); + }, C._crypto_generichash_update = function () { + return C.asm.va.apply(null, arguments); + }, C._crypto_hash = function () { + return C.asm.wa.apply(null, arguments); + }, C._crypto_hash_bytes = function () { + return C.asm.xa.apply(null, arguments); + }, C._crypto_kdf_bytes_max = function () { + return C.asm.ya.apply(null, arguments); + }, C._crypto_kdf_bytes_min = function () { + return C.asm.za.apply(null, arguments); + }, C._crypto_kdf_contextbytes = function () { + return C.asm.Aa.apply(null, arguments); + }, C._crypto_kdf_derive_from_key = function () { + return C.asm.Ba.apply(null, arguments); + }, C._crypto_kdf_keybytes = function () { + return C.asm.Ca.apply(null, arguments); + }, C._crypto_kdf_keygen = function () { + return C.asm.Da.apply(null, arguments); + }, C._crypto_kx_client_session_keys = function () { + return C.asm.Ea.apply(null, arguments); + }, C._crypto_kx_keypair = function () { + return C.asm.Fa.apply(null, arguments); + }, C._crypto_kx_publickeybytes = function () { + return C.asm.Ga.apply(null, arguments); + }, C._crypto_kx_secretkeybytes = function () { + return C.asm.Ha.apply(null, arguments); + }, C._crypto_kx_seed_keypair = function () { + return C.asm.Ia.apply(null, arguments); + }, C._crypto_kx_seedbytes = function () { + return C.asm.Ja.apply(null, arguments); + }, C._crypto_kx_server_session_keys = function () { + return C.asm.Ka.apply(null, arguments); + }, C._crypto_kx_sessionkeybytes = function () { + return C.asm.La.apply(null, arguments); + }, C._crypto_pwhash = function () { + return C.asm.Ma.apply(null, arguments); + }, C._crypto_pwhash_alg_argon2i13 = function () { + return C.asm.Na.apply(null, arguments); + }, C._crypto_pwhash_alg_argon2id13 = function () { + return C.asm.Oa.apply(null, arguments); + }, C._crypto_pwhash_alg_default = function () { + return C.asm.Pa.apply(null, arguments); + }, C._crypto_pwhash_bytes_max = function () { + return C.asm.Qa.apply(null, arguments); + }, C._crypto_pwhash_bytes_min = function () { + return C.asm.Ra.apply(null, arguments); + }, C._crypto_pwhash_memlimit_interactive = function () { + return C.asm.Sa.apply(null, arguments); + }, C._crypto_pwhash_memlimit_max = function () { + return C.asm.Ta.apply(null, arguments); + }, C._crypto_pwhash_memlimit_min = function () { + return C.asm.Ua.apply(null, arguments); + }, C._crypto_pwhash_memlimit_moderate = function () { + return C.asm.Va.apply(null, arguments); + }, C._crypto_pwhash_memlimit_sensitive = function () { + return C.asm.Wa.apply(null, arguments); + }, C._crypto_pwhash_opslimit_interactive = function () { + return C.asm.Xa.apply(null, arguments); + }, C._crypto_pwhash_opslimit_max = function () { + return C.asm.Ya.apply(null, arguments); + }, C._crypto_pwhash_opslimit_min = function () { + return C.asm.Za.apply(null, arguments); + }, C._crypto_pwhash_opslimit_moderate = function () { + return C.asm._a.apply(null, arguments); + }, C._crypto_pwhash_opslimit_sensitive = function () { + return C.asm.$a.apply(null, arguments); + }, C._crypto_pwhash_passwd_max = function () { + return C.asm.ab.apply(null, arguments); + }, C._crypto_pwhash_passwd_min = function () { + return C.asm.bb.apply(null, arguments); + }, C._crypto_pwhash_saltbytes = function () { + return C.asm.cb.apply(null, arguments); + }, C._crypto_pwhash_str = function () { + return C.asm.db.apply(null, arguments); + }, C._crypto_pwhash_str_alg = function () { + return C.asm.eb.apply(null, arguments); + }, C._crypto_pwhash_str_needs_rehash = function () { + return C.asm.fb.apply(null, arguments); + }, C._crypto_pwhash_str_verify = function () { + return C.asm.gb.apply(null, arguments); + }, C._crypto_pwhash_strbytes = function () { + return C.asm.hb.apply(null, arguments); + }, C._crypto_pwhash_strprefix = function () { + return C.asm.ib.apply(null, arguments); + }, C._crypto_scalarmult = function () { + return C.asm.jb.apply(null, arguments); + }, C._crypto_scalarmult_base = function () { + return C.asm.kb.apply(null, arguments); + }, C._crypto_scalarmult_bytes = function () { + return C.asm.lb.apply(null, arguments); + }, C._crypto_scalarmult_scalarbytes = function () { + return C.asm.mb.apply(null, arguments); + }, C._crypto_secretbox_detached = function () { + return C.asm.nb.apply(null, arguments); + }, C._crypto_secretbox_easy = function () { + return C.asm.ob.apply(null, arguments); + }, C._crypto_secretbox_keybytes = function () { + return C.asm.pb.apply(null, arguments); + }, C._crypto_secretbox_keygen = function () { + return C.asm.qb.apply(null, arguments); + }, C._crypto_secretbox_macbytes = function () { + return C.asm.rb.apply(null, arguments); + }, C._crypto_secretbox_messagebytes_max = function () { + return C.asm.sb.apply(null, arguments); + }, C._crypto_secretbox_noncebytes = function () { + return C.asm.tb.apply(null, arguments); + }, C._crypto_secretbox_open_detached = function () { + return C.asm.ub.apply(null, arguments); + }, C._crypto_secretbox_open_easy = function () { + return C.asm.vb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_abytes = function () { + return C.asm.wb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_headerbytes = function () { + return C.asm.xb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_init_pull = function () { + return C.asm.yb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_init_push = function () { + return C.asm.zb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_keybytes = function () { + return C.asm.Ab.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_keygen = function () { + return C.asm.Bb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_messagebytes_max = function () { + return C.asm.Cb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_pull = function () { + return C.asm.Db.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_push = function () { + return C.asm.Eb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_rekey = function () { + return C.asm.Fb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_statebytes = function () { + return C.asm.Gb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_tag_final = function () { + return C.asm.Hb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_tag_message = function () { + return C.asm.Ib.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_tag_push = function () { + return C.asm.Jb.apply(null, arguments); + }, C._crypto_secretstream_xchacha20poly1305_tag_rekey = function () { + return C.asm.Kb.apply(null, arguments); + }, C._crypto_shorthash = function () { + return C.asm.Lb.apply(null, arguments); + }, C._crypto_shorthash_bytes = function () { + return C.asm.Mb.apply(null, arguments); + }, C._crypto_shorthash_keybytes = function () { + return C.asm.Nb.apply(null, arguments); + }, C._crypto_shorthash_keygen = function () { + return C.asm.Ob.apply(null, arguments); + }, C._crypto_sign = function () { + return C.asm.Pb.apply(null, arguments); + }, C._crypto_sign_bytes = function () { + return C.asm.Qb.apply(null, arguments); + }, C._crypto_sign_detached = function () { + return C.asm.Rb.apply(null, arguments); + }, C._crypto_sign_ed25519_pk_to_curve25519 = function () { + return C.asm.Sb.apply(null, arguments); + }, C._crypto_sign_ed25519_sk_to_curve25519 = function () { + return C.asm.Tb.apply(null, arguments); + }, C._crypto_sign_final_create = function () { + return C.asm.Ub.apply(null, arguments); + }, C._crypto_sign_final_verify = function () { + return C.asm.Vb.apply(null, arguments); + }, C._crypto_sign_init = function () { + return C.asm.Wb.apply(null, arguments); + }, C._crypto_sign_keypair = function () { + return C.asm.Xb.apply(null, arguments); + }, C._crypto_sign_messagebytes_max = function () { + return C.asm.Yb.apply(null, arguments); + }, C._crypto_sign_open = function () { + return C.asm.Zb.apply(null, arguments); + }, C._crypto_sign_publickeybytes = function () { + return C.asm._b.apply(null, arguments); + }, C._crypto_sign_secretkeybytes = function () { + return C.asm.$b.apply(null, arguments); + }, C._crypto_sign_seed_keypair = function () { + return C.asm.ac.apply(null, arguments); + }, C._crypto_sign_seedbytes = function () { + return C.asm.bc.apply(null, arguments); + }, C._crypto_sign_statebytes = function () { + return C.asm.cc.apply(null, arguments); + }, C._crypto_sign_update = function () { + return C.asm.dc.apply(null, arguments); + }, C._crypto_sign_verify_detached = function () { + return C.asm.ec.apply(null, arguments); + }, C._free = function () { + return C.asm.fc.apply(null, arguments); + }, C._malloc = function () { + return C.asm.gc.apply(null, arguments); + }, C._randombytes = function () { + return C.asm.hc.apply(null, arguments); + }, C._randombytes_buf = function () { + return C.asm.ic.apply(null, arguments); + }, C._randombytes_buf_deterministic = function () { + return C.asm.jc.apply(null, arguments); + }, C._randombytes_close = function () { + return C.asm.kc.apply(null, arguments); + }, C._randombytes_random = function () { + return C.asm.lc.apply(null, arguments); + }, C._randombytes_seedbytes = function () { + return C.asm.mc.apply(null, arguments); + }, C._randombytes_stir = function () { + return C.asm.nc.apply(null, arguments); + }, C._randombytes_uniform = function () { + return C.asm.oc.apply(null, arguments); + }, C._sodium_base642bin = function () { + return C.asm.pc.apply(null, arguments); + }, C._sodium_base64_encoded_len = function () { + return C.asm.qc.apply(null, arguments); + }, C._sodium_bin2base64 = function () { + return C.asm.rc.apply(null, arguments); + }, C._sodium_bin2hex = function () { + return C.asm.sc.apply(null, arguments); + }, C._sodium_hex2bin = function () { + return C.asm.tc.apply(null, arguments); + }, C._sodium_init = function () { + return C.asm.uc.apply(null, arguments); + }, C._sodium_library_minimal = function () { + return C.asm.vc.apply(null, arguments); + }, C._sodium_library_version_major = function () { + return C.asm.wc.apply(null, arguments); + }, C._sodium_library_version_minor = function () { + return C.asm.xc.apply(null, arguments); + }, C._sodium_pad = function () { + return C.asm.yc.apply(null, arguments); + }, C._sodium_unpad = function () { + return C.asm.zc.apply(null, arguments); + }, C._sodium_version_string = function () { + return C.asm.Ac.apply(null, arguments); + }, C.asm = aA, C.setValue = function (A, I, g, B) { + switch ("*" === (g = g || "i8").charAt(g.length - 1) && (g = "i32"), g) { + case "i1": + case "i8": + l[A >> 0] = I; + break; + + case "i16": + G[A >> 1] = I; + break; + + case "i32": + _d2[A >> 2] = I; + break; + + case "i64": + AA = [I >>> 0, ($ = I, +x($) >= 1 ? $ > 0 ? (0 | j(+X($ / 4294967296), 4294967295)) >>> 0 : ~~+K(($ - +(~~$ >>> 0)) / 4294967296) >>> 0 : 0)], _d2[A >> 2] = AA[0], _d2[A + 4 >> 2] = AA[1]; + break; + + case "float": + Y[A >> 2] = I; + break; + + case "double": + M[A >> 3] = I; + break; + + default: + z("invalid type for setValue: " + g); + } + }, C.getValue = function (A, I, g) { + switch ("*" === (I = I || "i8").charAt(I.length - 1) && (I = "i32"), I) { + case "i1": + case "i8": + return l[A >> 0]; + + case "i16": + return G[A >> 1]; + + case "i32": + case "i64": + return _d2[A >> 2]; + + case "float": + return Y[A >> 2]; + + case "double": + return M[A >> 3]; + + default: + z("invalid type for getValue: " + I); + } + + return null; + }, C.UTF8ToString = U, V = function A() { + oA || nA(), oA || (V = A); + }, C.run = nA, C.preInit) for ("function" == typeof C.preInit && (C.preInit = [C.preInit]); C.preInit.length > 0;) { + C.preInit.pop()(); + } + nA(); + }).catch(function () { + B.useBackupModule(); + }), "object" == (typeof process === "undefined" ? "undefined" : _typeof(process)) && "function" == typeof process.removeAllListeners && (process.removeAllListeners("uncaughtException"), process.removeAllListeners("unhandledRejection")), I; + } + + true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (I), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : undefined; +}(this); +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../../process/browser.js */ "./node_modules/process/browser.js"), "/", __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/md5.js/index.js": +/*!**************************************!*\ + !*** ./node_modules/md5.js/index.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var HashBase = __webpack_require__(/*! hash-base */ "./node_modules/hash-base/index.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var ARRAY16 = new Array(16); + +function MD5() { + HashBase.call(this, 64); // state + + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; +} + +inherits(MD5, HashBase); + +MD5.prototype._update = function () { + var M = ARRAY16; + + for (var i = 0; i < 16; ++i) { + M[i] = this._block.readInt32LE(i * 4); + } + + var a = this._a; + var b = this._b; + var c = this._c; + var d = this._d; + a = fnF(a, b, c, d, M[0], 0xd76aa478, 7); + d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12); + c = fnF(c, d, a, b, M[2], 0x242070db, 17); + b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22); + a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7); + d = fnF(d, a, b, c, M[5], 0x4787c62a, 12); + c = fnF(c, d, a, b, M[6], 0xa8304613, 17); + b = fnF(b, c, d, a, M[7], 0xfd469501, 22); + a = fnF(a, b, c, d, M[8], 0x698098d8, 7); + d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12); + c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17); + b = fnF(b, c, d, a, M[11], 0x895cd7be, 22); + a = fnF(a, b, c, d, M[12], 0x6b901122, 7); + d = fnF(d, a, b, c, M[13], 0xfd987193, 12); + c = fnF(c, d, a, b, M[14], 0xa679438e, 17); + b = fnF(b, c, d, a, M[15], 0x49b40821, 22); + a = fnG(a, b, c, d, M[1], 0xf61e2562, 5); + d = fnG(d, a, b, c, M[6], 0xc040b340, 9); + c = fnG(c, d, a, b, M[11], 0x265e5a51, 14); + b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20); + a = fnG(a, b, c, d, M[5], 0xd62f105d, 5); + d = fnG(d, a, b, c, M[10], 0x02441453, 9); + c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14); + b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20); + a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5); + d = fnG(d, a, b, c, M[14], 0xc33707d6, 9); + c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14); + b = fnG(b, c, d, a, M[8], 0x455a14ed, 20); + a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5); + d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9); + c = fnG(c, d, a, b, M[7], 0x676f02d9, 14); + b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20); + a = fnH(a, b, c, d, M[5], 0xfffa3942, 4); + d = fnH(d, a, b, c, M[8], 0x8771f681, 11); + c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16); + b = fnH(b, c, d, a, M[14], 0xfde5380c, 23); + a = fnH(a, b, c, d, M[1], 0xa4beea44, 4); + d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11); + c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16); + b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23); + a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4); + d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11); + c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16); + b = fnH(b, c, d, a, M[6], 0x04881d05, 23); + a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4); + d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11); + c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16); + b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23); + a = fnI(a, b, c, d, M[0], 0xf4292244, 6); + d = fnI(d, a, b, c, M[7], 0x432aff97, 10); + c = fnI(c, d, a, b, M[14], 0xab9423a7, 15); + b = fnI(b, c, d, a, M[5], 0xfc93a039, 21); + a = fnI(a, b, c, d, M[12], 0x655b59c3, 6); + d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10); + c = fnI(c, d, a, b, M[10], 0xffeff47d, 15); + b = fnI(b, c, d, a, M[1], 0x85845dd1, 21); + a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6); + d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10); + c = fnI(c, d, a, b, M[6], 0xa3014314, 15); + b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21); + a = fnI(a, b, c, d, M[4], 0xf7537e82, 6); + d = fnI(d, a, b, c, M[11], 0xbd3af235, 10); + c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15); + b = fnI(b, c, d, a, M[9], 0xeb86d391, 21); + this._a = this._a + a | 0; + this._b = this._b + b | 0; + this._c = this._c + c | 0; + this._d = this._d + d | 0; +}; + +MD5.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80; + + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64); + + this._update(); + + this._blockOffset = 0; + } + + this._block.fill(0, this._blockOffset, 56); + + this._block.writeUInt32LE(this._length[0], 56); + + this._block.writeUInt32LE(this._length[1], 60); + + this._update(); // produce result + + + var buffer = Buffer.allocUnsafe(16); + buffer.writeInt32LE(this._a, 0); + buffer.writeInt32LE(this._b, 4); + buffer.writeInt32LE(this._c, 8); + buffer.writeInt32LE(this._d, 12); + return buffer; +}; + +function rotl(x, n) { + return x << n | x >>> 32 - n; +} + +function fnF(a, b, c, d, m, k, s) { + return rotl(a + (b & c | ~b & d) + m + k | 0, s) + b | 0; +} + +function fnG(a, b, c, d, m, k, s) { + return rotl(a + (b & d | c & ~d) + m + k | 0, s) + b | 0; +} + +function fnH(a, b, c, d, m, k, s) { + return rotl(a + (b ^ c ^ d) + m + k | 0, s) + b | 0; +} + +function fnI(a, b, c, d, m, k, s) { + return rotl(a + (c ^ (b | ~d)) + m + k | 0, s) + b | 0; +} + +module.exports = MD5; + +/***/ }), + +/***/ "./node_modules/miller-rabin/lib/mr.js": +/*!*********************************************!*\ + !*** ./node_modules/miller-rabin/lib/mr.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var bn = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var brorand = __webpack_require__(/*! brorand */ "./node_modules/brorand/index.js"); + +function MillerRabin(rand) { + this.rand = rand || new brorand.Rand(); +} + +module.exports = MillerRabin; + +MillerRabin.create = function create(rand) { + return new MillerRabin(rand); +}; + +MillerRabin.prototype._randbelow = function _randbelow(n) { + var len = n.bitLength(); + var min_bytes = Math.ceil(len / 8); // Generage random bytes until a number less than n is found. + // This ensures that 0..n-1 have an equal probability of being selected. + + do { + var a = new bn(this.rand.generate(min_bytes)); + } while (a.cmp(n) >= 0); + + return a; +}; + +MillerRabin.prototype._randrange = function _randrange(start, stop) { + // Generate a random number greater than or equal to start and less than stop. + var size = stop.sub(start); + return start.add(this._randbelow(size)); +}; + +MillerRabin.prototype.test = function test(n, k, cb) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + if (!k) k = Math.max(1, len / 48 | 0); // Find d and s, (n - 1) = (2 ^ s) * d; + + var n1 = n.subn(1); + + for (var s = 0; !n1.testn(s); s++) {} + + var d = n.shrn(s); + var rn1 = n1.toRed(red); + var prime = true; + + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + + if (cb) cb(a); + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue; + + for (var i = 1; i < s; i++) { + x = x.redSqr(); + if (x.cmp(rone) === 0) return false; + if (x.cmp(rn1) === 0) break; + } + + if (i === s) return false; + } + + return prime; +}; + +MillerRabin.prototype.getDivisor = function getDivisor(n, k) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + if (!k) k = Math.max(1, len / 48 | 0); // Find d and s, (n - 1) = (2 ^ s) * d; + + var n1 = n.subn(1); + + for (var s = 0; !n1.testn(s); s++) {} + + var d = n.shrn(s); + var rn1 = n1.toRed(red); + + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + + var g = n.gcd(a); + if (g.cmpn(1) !== 0) return g; + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue; + + for (var i = 1; i < s; i++) { + x = x.redSqr(); + if (x.cmp(rone) === 0) return x.fromRed().subn(1).gcd(n); + if (x.cmp(rn1) === 0) break; + } + + if (i === s) { + x = x.redSqr(); + return x.fromRed().subn(1).gcd(n); + } + } + + return false; +}; + +/***/ }), + +/***/ "./node_modules/minimalistic-assert/index.js": +/*!***************************************************!*\ + !*** ./node_modules/minimalistic-assert/index.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = assert; + +function assert(val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); +} + +assert.equal = function assertEqual(l, r, msg) { + if (l != r) throw new Error(msg || 'Assertion failed: ' + l + ' != ' + r); +}; + +/***/ }), + +/***/ "./node_modules/minimalistic-crypto-utils/lib/utils.js": +/*!*************************************************************!*\ + !*** ./node_modules/minimalistic-crypto-utils/lib/utils.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = exports; + +function toArray(msg, enc) { + if (Array.isArray(msg)) return msg.slice(); + if (!msg) return []; + var res = []; + + if (typeof msg !== 'string') { + for (var i = 0; i < msg.length; i++) { + res[i] = msg[i] | 0; + } + + return res; + } + + if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) msg = '0' + msg; + + for (var i = 0; i < msg.length; i += 2) { + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } else { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) res.push(hi, lo);else res.push(lo); + } + } + + return res; +} + +utils.toArray = toArray; + +function zero2(word) { + if (word.length === 1) return '0' + word;else return word; +} + +utils.zero2 = zero2; + +function toHex(msg) { + var res = ''; + + for (var i = 0; i < msg.length; i++) { + res += zero2(msg[i].toString(16)); + } + + return res; +} + +utils.toHex = toHex; + +utils.encode = function encode(arr, enc) { + if (enc === 'hex') return toHex(arr);else return arr; +}; + +/***/ }), + +/***/ "./node_modules/parse-asn1/aesid.json": +/*!********************************************!*\ + !*** ./node_modules/parse-asn1/aesid.json ***! + \********************************************/ +/*! exports provided: 2.16.840.1.101.3.4.1.1, 2.16.840.1.101.3.4.1.2, 2.16.840.1.101.3.4.1.3, 2.16.840.1.101.3.4.1.4, 2.16.840.1.101.3.4.1.21, 2.16.840.1.101.3.4.1.22, 2.16.840.1.101.3.4.1.23, 2.16.840.1.101.3.4.1.24, 2.16.840.1.101.3.4.1.41, 2.16.840.1.101.3.4.1.42, 2.16.840.1.101.3.4.1.43, 2.16.840.1.101.3.4.1.44, default */ +/***/ (function(module) { + +module.exports = JSON.parse("{\"2.16.840.1.101.3.4.1.1\":\"aes-128-ecb\",\"2.16.840.1.101.3.4.1.2\":\"aes-128-cbc\",\"2.16.840.1.101.3.4.1.3\":\"aes-128-ofb\",\"2.16.840.1.101.3.4.1.4\":\"aes-128-cfb\",\"2.16.840.1.101.3.4.1.21\":\"aes-192-ecb\",\"2.16.840.1.101.3.4.1.22\":\"aes-192-cbc\",\"2.16.840.1.101.3.4.1.23\":\"aes-192-ofb\",\"2.16.840.1.101.3.4.1.24\":\"aes-192-cfb\",\"2.16.840.1.101.3.4.1.41\":\"aes-256-ecb\",\"2.16.840.1.101.3.4.1.42\":\"aes-256-cbc\",\"2.16.840.1.101.3.4.1.43\":\"aes-256-ofb\",\"2.16.840.1.101.3.4.1.44\":\"aes-256-cfb\"}"); + +/***/ }), + +/***/ "./node_modules/parse-asn1/asn1.js": +/*!*****************************************!*\ + !*** ./node_modules/parse-asn1/asn1.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js +// Fedor, you are amazing. + + +var asn1 = __webpack_require__(/*! asn1.js */ "./node_modules/asn1.js/lib/asn1.js"); + +exports.certificate = __webpack_require__(/*! ./certificate */ "./node_modules/parse-asn1/certificate.js"); +var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('modulus').int(), this.key('publicExponent').int(), this.key('privateExponent').int(), this.key('prime1').int(), this.key('prime2').int(), this.key('exponent1').int(), this.key('exponent2').int(), this.key('coefficient').int()); +}); +exports.RSAPrivateKey = RSAPrivateKey; +var RSAPublicKey = asn1.define('RSAPublicKey', function () { + this.seq().obj(this.key('modulus').int(), this.key('publicExponent').int()); +}); +exports.RSAPublicKey = RSAPublicKey; +var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { + this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr()); +}); +exports.PublicKey = PublicKey; +var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { + this.seq().obj(this.key('algorithm').objid(), this.key('none').null_().optional(), this.key('curve').objid().optional(), this.key('params').seq().obj(this.key('p').int(), this.key('q').int(), this.key('g').int()).optional()); +}); +var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { + this.seq().obj(this.key('version').int(), this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPrivateKey').octstr()); +}); +exports.PrivateKey = PrivateKeyInfo; +var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { + this.seq().obj(this.key('algorithm').seq().obj(this.key('id').objid(), this.key('decrypt').seq().obj(this.key('kde').seq().obj(this.key('id').objid(), this.key('kdeparams').seq().obj(this.key('salt').octstr(), this.key('iters').int())), this.key('cipher').seq().obj(this.key('algo').objid(), this.key('iv').octstr()))), this.key('subjectPrivateKey').octstr()); +}); +exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo; +var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('p').int(), this.key('q').int(), this.key('g').int(), this.key('pub_key').int(), this.key('priv_key').int()); +}); +exports.DSAPrivateKey = DSAPrivateKey; +exports.DSAparam = asn1.define('DSAparam', function () { + this.int(); +}); +var ECPrivateKey = asn1.define('ECPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('privateKey').octstr(), this.key('parameters').optional().explicit(0).use(ECParameters), this.key('publicKey').optional().explicit(1).bitstr()); +}); +exports.ECPrivateKey = ECPrivateKey; +var ECParameters = asn1.define('ECParameters', function () { + this.choice({ + namedCurve: this.objid() + }); +}); +exports.signature = asn1.define('signature', function () { + this.seq().obj(this.key('r').int(), this.key('s').int()); +}); + +/***/ }), + +/***/ "./node_modules/parse-asn1/certificate.js": +/*!************************************************!*\ + !*** ./node_modules/parse-asn1/certificate.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js +// thanks to @Rantanen + + +var asn = __webpack_require__(/*! asn1.js */ "./node_modules/asn1.js/lib/asn1.js"); + +var Time = asn.define('Time', function () { + this.choice({ + utcTime: this.utctime(), + generalTime: this.gentime() + }); +}); +var AttributeTypeValue = asn.define('AttributeTypeValue', function () { + this.seq().obj(this.key('type').objid(), this.key('value').any()); +}); +var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { + this.seq().obj(this.key('algorithm').objid(), this.key('parameters').optional(), this.key('curve').objid().optional()); +}); +var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { + this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr()); +}); +var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { + this.setof(AttributeTypeValue); +}); +var RDNSequence = asn.define('RDNSequence', function () { + this.seqof(RelativeDistinguishedName); +}); +var Name = asn.define('Name', function () { + this.choice({ + rdnSequence: this.use(RDNSequence) + }); +}); +var Validity = asn.define('Validity', function () { + this.seq().obj(this.key('notBefore').use(Time), this.key('notAfter').use(Time)); +}); +var Extension = asn.define('Extension', function () { + this.seq().obj(this.key('extnID').objid(), this.key('critical').bool().def(false), this.key('extnValue').octstr()); +}); +var TBSCertificate = asn.define('TBSCertificate', function () { + this.seq().obj(this.key('version').explicit(0).int().optional(), this.key('serialNumber').int(), this.key('signature').use(AlgorithmIdentifier), this.key('issuer').use(Name), this.key('validity').use(Validity), this.key('subject').use(Name), this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), this.key('issuerUniqueID').implicit(1).bitstr().optional(), this.key('subjectUniqueID').implicit(2).bitstr().optional(), this.key('extensions').explicit(3).seqof(Extension).optional()); +}); +var X509Certificate = asn.define('X509Certificate', function () { + this.seq().obj(this.key('tbsCertificate').use(TBSCertificate), this.key('signatureAlgorithm').use(AlgorithmIdentifier), this.key('signatureValue').bitstr()); +}); +module.exports = X509Certificate; + +/***/ }), + +/***/ "./node_modules/parse-asn1/fixProc.js": +/*!********************************************!*\ + !*** ./node_modules/parse-asn1/fixProc.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +// adapted from https://github.com/apatil/pemstrip +var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r\+\/\=]+)[\n\r]+/m; +var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m; +var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m; + +var evp = __webpack_require__(/*! evp_bytestokey */ "./node_modules/evp_bytestokey/index.js"); + +var ciphers = __webpack_require__(/*! browserify-aes */ "./node_modules/browserify-aes/browser.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +module.exports = function (okey, password) { + var key = okey.toString(); + var match = key.match(findProc); + var decrypted; + + if (!match) { + var match2 = key.match(fullRegex); + decrypted = new Buffer(match2[2].replace(/[\r\n]/g, ''), 'base64'); + } else { + var suite = 'aes' + match[1]; + var iv = Buffer.from(match[2], 'hex'); + var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64'); + var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key; + var out = []; + var cipher = ciphers.createDecipheriv(suite, cipherKey, iv); + out.push(cipher.update(cipherText)); + out.push(cipher.final()); + decrypted = Buffer.concat(out); + } + + var tag = key.match(startRegex)[1]; + return { + tag: tag, + data: decrypted + }; +}; + +/***/ }), + +/***/ "./node_modules/parse-asn1/index.js": +/*!******************************************!*\ + !*** ./node_modules/parse-asn1/index.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +var asn1 = __webpack_require__(/*! ./asn1 */ "./node_modules/parse-asn1/asn1.js"); + +var aesid = __webpack_require__(/*! ./aesid.json */ "./node_modules/parse-asn1/aesid.json"); + +var fixProc = __webpack_require__(/*! ./fixProc */ "./node_modules/parse-asn1/fixProc.js"); + +var ciphers = __webpack_require__(/*! browserify-aes */ "./node_modules/browserify-aes/browser.js"); + +var compat = __webpack_require__(/*! pbkdf2 */ "./node_modules/pbkdf2/browser.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +module.exports = parseKeys; + +function parseKeys(buffer) { + var password; + + if (_typeof(buffer) === 'object' && !Buffer.isBuffer(buffer)) { + password = buffer.passphrase; + buffer = buffer.key; + } + + if (typeof buffer === 'string') { + buffer = Buffer.from(buffer); + } + + var stripped = fixProc(buffer, password); + var type = stripped.tag; + var data = stripped.data; + var subtype, ndata; + + switch (type) { + case 'CERTIFICATE': + ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo; + // falls through + + case 'PUBLIC KEY': + if (!ndata) { + ndata = asn1.PublicKey.decode(data, 'der'); + } + + subtype = ndata.algorithm.algorithm.join('.'); + + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der'); + + case '1.2.840.10045.2.1': + ndata.subjectPrivateKey = ndata.subjectPublicKey; + return { + type: 'ec', + data: ndata + }; + + case '1.2.840.10040.4.1': + ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der'); + return { + type: 'dsa', + data: ndata.algorithm.params + }; + + default: + throw new Error('unknown key id ' + subtype); + } + + throw new Error('unknown key type ' + type); + + case 'ENCRYPTED PRIVATE KEY': + data = asn1.EncryptedPrivateKey.decode(data, 'der'); + data = decrypt(data, password); + // falls through + + case 'PRIVATE KEY': + ndata = asn1.PrivateKey.decode(data, 'der'); + subtype = ndata.algorithm.algorithm.join('.'); + + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der'); + + case '1.2.840.10045.2.1': + return { + curve: ndata.algorithm.curve, + privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey + }; + + case '1.2.840.10040.4.1': + ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der'); + return { + type: 'dsa', + params: ndata.algorithm.params + }; + + default: + throw new Error('unknown key id ' + subtype); + } + + throw new Error('unknown key type ' + type); + + case 'RSA PUBLIC KEY': + return asn1.RSAPublicKey.decode(data, 'der'); + + case 'RSA PRIVATE KEY': + return asn1.RSAPrivateKey.decode(data, 'der'); + + case 'DSA PRIVATE KEY': + return { + type: 'dsa', + params: asn1.DSAPrivateKey.decode(data, 'der') + }; + + case 'EC PRIVATE KEY': + data = asn1.ECPrivateKey.decode(data, 'der'); + return { + curve: data.parameters.value, + privateKey: data.privateKey + }; + + default: + throw new Error('unknown key type ' + type); + } +} + +parseKeys.signature = asn1.signature; + +function decrypt(data, password) { + var salt = data.algorithm.decrypt.kde.kdeparams.salt; + var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10); + var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]; + var iv = data.algorithm.decrypt.cipher.iv; + var cipherText = data.subjectPrivateKey; + var keylen = parseInt(algo.split('-')[1], 10) / 8; + var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1'); + var cipher = ciphers.createDecipheriv(algo, key, iv); + var out = []; + out.push(cipher.update(cipherText)); + out.push(cipher.final()); + return Buffer.concat(out); +} + +/***/ }), + +/***/ "./node_modules/path-browserify/index.js": +/*!***********************************************!*\ + !*** ./node_modules/path-browserify/index.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process) {// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, +// backported and transplited with Babel, with backwards-compat fixes +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } // if the path is allowed to go above the root, restore leading ..s + + + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} // path.resolve([from ...], to) +// posix version + + +exports.resolve = function () { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries + + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + // Normalize the path + + + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) { + return !!p; + }), !resolvedAbsolute).join('/'); + return (resolvedAbsolute ? '/' : '') + resolvedPath || '.'; +}; // path.normalize(path) +// posix version + + +exports.normalize = function (path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; // Normalize the path + + path = normalizeArray(filter(path.split('/'), function (p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; // posix version + + +exports.isAbsolute = function (path) { + return path.charAt(0) === '/'; +}; // posix version + + +exports.join = function () { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function (p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + + return p; + }).join('/')); +}; // path.relative(from, to) +// posix version + + +exports.relative = function (from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function (path) { + if (typeof path !== 'string') path = path + ''; + if (path.length === 0) return '.'; + var code = path.charCodeAt(0); + var hasRoot = code === 47 + /*/*/ + ; + var end = -1; + var matchedSlash = true; + + for (var i = path.length - 1; i >= 1; --i) { + code = path.charCodeAt(i); + + if (code === 47 + /*/*/ + ) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } + } + + if (end === -1) return hasRoot ? '/' : '.'; + + if (hasRoot && end === 1) { + // return '//'; + // Backwards-compat fix: + return '/'; + } + + return path.slice(0, end); +}; + +function basename(path) { + if (typeof path !== 'string') path = path + ''; + var start = 0; + var end = -1; + var matchedSlash = true; + var i; + + for (i = path.length - 1; i >= 0; --i) { + if (path.charCodeAt(i) === 47 + /*/*/ + ) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + start = i + 1; + break; + } + } else if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // path component + matchedSlash = false; + end = i + 1; + } + } + + if (end === -1) return ''; + return path.slice(start, end); +} // Uses a mixed approach for backwards-compatibility, as ext behavior changed +// in new Node.js versions, so only basename() above is backported here + + +exports.basename = function (path, ext) { + var f = basename(path); + + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + + return f; +}; + +exports.extname = function (path) { + if (typeof path !== 'string') path = path + ''; + var startDot = -1; + var startPart = 0; + var end = -1; + var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + + var preDotState = 0; + + for (var i = path.length - 1; i >= 0; --i) { + var code = path.charCodeAt(i); + + if (code === 47 + /*/*/ + ) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + + continue; + } + + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + + if (code === 46 + /*.*/ + ) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot + preDotState === 0 || // The (right-most) trimmed path component is exactly '..' + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ''; + } + + return path.slice(startDot, end); +}; + +function filter(xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + + return res; +} // String.prototype.substr - negative index don't work in IE8 + + +var substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) { + return str.substr(start, len); +} : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); +}; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/pbkdf2/browser.js": +/*!****************************************!*\ + !*** ./node_modules/pbkdf2/browser.js ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +exports.pbkdf2 = __webpack_require__(/*! ./lib/async */ "./node_modules/pbkdf2/lib/async.js"); +exports.pbkdf2Sync = __webpack_require__(/*! ./lib/sync */ "./node_modules/pbkdf2/lib/sync-browser.js"); + +/***/ }), + +/***/ "./node_modules/pbkdf2/lib/async.js": +/*!******************************************!*\ + !*** ./node_modules/pbkdf2/lib/async.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global, process) {var checkParameters = __webpack_require__(/*! ./precondition */ "./node_modules/pbkdf2/lib/precondition.js"); + +var defaultEncoding = __webpack_require__(/*! ./default-encoding */ "./node_modules/pbkdf2/lib/default-encoding.js"); + +var sync = __webpack_require__(/*! ./sync */ "./node_modules/pbkdf2/lib/sync-browser.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var ZERO_BUF; +var subtle = global.crypto && global.crypto.subtle; +var toBrowser = { + 'sha': 'SHA-1', + 'sha-1': 'SHA-1', + 'sha1': 'SHA-1', + 'sha256': 'SHA-256', + 'sha-256': 'SHA-256', + 'sha384': 'SHA-384', + 'sha-384': 'SHA-384', + 'sha-512': 'SHA-512', + 'sha512': 'SHA-512' +}; +var checks = []; + +function checkNative(algo) { + if (global.process && !global.process.browser) { + return Promise.resolve(false); + } + + if (!subtle || !subtle.importKey || !subtle.deriveBits) { + return Promise.resolve(false); + } + + if (checks[algo] !== undefined) { + return checks[algo]; + } + + ZERO_BUF = ZERO_BUF || Buffer.alloc(8); + var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(function () { + return true; + }).catch(function () { + return false; + }); + checks[algo] = prom; + return prom; +} + +function browserPbkdf2(password, salt, iterations, length, algo) { + return subtle.importKey('raw', password, { + name: 'PBKDF2' + }, false, ['deriveBits']).then(function (key) { + return subtle.deriveBits({ + name: 'PBKDF2', + salt: salt, + iterations: iterations, + hash: { + name: algo + } + }, key, length << 3); + }).then(function (res) { + return Buffer.from(res); + }); +} + +function resolvePromise(promise, callback) { + promise.then(function (out) { + process.nextTick(function () { + callback(null, out); + }); + }, function (e) { + process.nextTick(function () { + callback(e); + }); + }); +} + +module.exports = function (password, salt, iterations, keylen, digest, callback) { + if (typeof digest === 'function') { + callback = digest; + digest = undefined; + } + + digest = digest || 'sha1'; + var algo = toBrowser[digest.toLowerCase()]; + + if (!algo || typeof global.Promise !== 'function') { + return process.nextTick(function () { + var out; + + try { + out = sync(password, salt, iterations, keylen, digest); + } catch (e) { + return callback(e); + } + + callback(null, out); + }); + } + + checkParameters(password, salt, iterations, keylen); + if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2'); + if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding); + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding); + resolvePromise(checkNative(algo).then(function (resp) { + if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo); + return sync(password, salt, iterations, keylen, digest); + }), callback); +}; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/pbkdf2/lib/default-encoding.js": +/*!*****************************************************!*\ + !*** ./node_modules/pbkdf2/lib/default-encoding.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process) {var defaultEncoding; +/* istanbul ignore next */ + +if (process.browser) { + defaultEncoding = 'utf-8'; +} else { + var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10); + defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'; +} + +module.exports = defaultEncoding; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/pbkdf2/lib/precondition.js": +/*!*************************************************!*\ + !*** ./node_modules/pbkdf2/lib/precondition.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {var MAX_ALLOC = Math.pow(2, 30) - 1; // default in iojs + +function checkBuffer(buf, name) { + if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) { + throw new TypeError(name + ' must be a buffer or string'); + } +} + +module.exports = function (password, salt, iterations, keylen) { + checkBuffer(password, 'Password'); + checkBuffer(salt, 'Salt'); + + if (typeof iterations !== 'number') { + throw new TypeError('Iterations not a number'); + } + + if (iterations < 0) { + throw new TypeError('Bad iterations'); + } + + if (typeof keylen !== 'number') { + throw new TypeError('Key length not a number'); + } + + if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { + /* eslint no-self-compare: 0 */ + throw new TypeError('Bad key length'); + } +}; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/pbkdf2/lib/sync-browser.js": +/*!*************************************************!*\ + !*** ./node_modules/pbkdf2/lib/sync-browser.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var md5 = __webpack_require__(/*! create-hash/md5 */ "./node_modules/create-hash/md5.js"); + +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "./node_modules/ripemd160/index.js"); + +var sha = __webpack_require__(/*! sha.js */ "./node_modules/sha.js/index.js"); + +var checkParameters = __webpack_require__(/*! ./precondition */ "./node_modules/pbkdf2/lib/precondition.js"); + +var defaultEncoding = __webpack_require__(/*! ./default-encoding */ "./node_modules/pbkdf2/lib/default-encoding.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var ZEROS = Buffer.alloc(128); +var sizes = { + md5: 16, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64, + rmd160: 20, + ripemd160: 20 +}; + +function Hmac(alg, key, saltLen) { + var hash = getDigest(alg); + var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64; + + if (key.length > blocksize) { + key = hash(key); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + + var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]); + var opad = Buffer.allocUnsafe(blocksize + sizes[alg]); + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + + var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4); + ipad.copy(ipad1, 0, 0, blocksize); + this.ipad1 = ipad1; + this.ipad2 = ipad; + this.opad = opad; + this.alg = alg; + this.blocksize = blocksize; + this.hash = hash; + this.size = sizes[alg]; +} + +Hmac.prototype.run = function (data, ipad) { + data.copy(ipad, this.blocksize); + var h = this.hash(ipad); + h.copy(this.opad, this.blocksize); + return this.hash(this.opad); +}; + +function getDigest(alg) { + function shaFunc(data) { + return sha(alg).update(data).digest(); + } + + function rmd160Func(data) { + return new RIPEMD160().update(data).digest(); + } + + if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func; + if (alg === 'md5') return md5; + return shaFunc; +} + +function pbkdf2(password, salt, iterations, keylen, digest) { + checkParameters(password, salt, iterations, keylen); + if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding); + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding); + digest = digest || 'sha1'; + var hmac = new Hmac(digest, password, salt.length); + var DK = Buffer.allocUnsafe(keylen); + var block1 = Buffer.allocUnsafe(salt.length + 4); + salt.copy(block1, 0, 0, salt.length); + var destPos = 0; + var hLen = sizes[digest]; + var l = Math.ceil(keylen / hLen); + + for (var i = 1; i <= l; i++) { + block1.writeUInt32BE(i, salt.length); + var T = hmac.run(block1, hmac.ipad1); + var U = T; + + for (var j = 1; j < iterations; j++) { + U = hmac.run(U, hmac.ipad2); + + for (var k = 0; k < hLen; k++) { + T[k] ^= U[k]; + } + } + + T.copy(DK, destPos); + destPos += hLen; + } + + return DK; +} + +module.exports = pbkdf2; + +/***/ }), + +/***/ "./node_modules/process-nextick-args/index.js": +/*!****************************************************!*\ + !*** ./node_modules/process-nextick-args/index.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +if (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = { + nextTick: nextTick + }; +} else { + module.exports = process; +} + +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + + var len = arguments.length; + var args, i; + + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + + default: + args = new Array(len - 1); + i = 0; + + while (i < args.length) { + args[i++] = arguments[i]; + } + + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/process/browser.js": +/*!*****************************************!*\ + !*** ./node_modules/process/browser.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} + +function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); +} + +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +})(); + +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } // if setTimeout wasn't available but was latter defined + + + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } +} + +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } // if clearTimeout wasn't available but was latter defined + + + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } +} + +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + + draining = false; + + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; + + while (len) { + currentQueue = queue; + queue = []; + + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + + queueIndex = -1; + len = queue.length; + } + + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + + queue.push(new Item(fun, args)); + + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; // v8 likes predictible objects + + +function Item(fun, array) { + this.fun = fun; + this.array = array; +} + +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues + +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { + return []; +}; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { + return '/'; +}; + +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +process.umask = function () { + return 0; +}; + +/***/ }), + +/***/ "./node_modules/public-encrypt/browser.js": +/*!************************************************!*\ + !*** ./node_modules/public-encrypt/browser.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +exports.publicEncrypt = __webpack_require__(/*! ./publicEncrypt */ "./node_modules/public-encrypt/publicEncrypt.js"); +exports.privateDecrypt = __webpack_require__(/*! ./privateDecrypt */ "./node_modules/public-encrypt/privateDecrypt.js"); + +exports.privateEncrypt = function privateEncrypt(key, buf) { + return exports.publicEncrypt(key, buf, true); +}; + +exports.publicDecrypt = function publicDecrypt(key, buf) { + return exports.privateDecrypt(key, buf, true); +}; + +/***/ }), + +/***/ "./node_modules/public-encrypt/mgf.js": +/*!********************************************!*\ + !*** ./node_modules/public-encrypt/mgf.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var createHash = __webpack_require__(/*! create-hash */ "./node_modules/create-hash/browser.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +module.exports = function (seed, len) { + var t = Buffer.alloc(0); + var i = 0; + var c; + + while (t.length < len) { + c = i2ops(i++); + t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]); + } + + return t.slice(0, len); +}; + +function i2ops(c) { + var out = Buffer.allocUnsafe(4); + out.writeUInt32BE(c, 0); + return out; +} + +/***/ }), + +/***/ "./node_modules/public-encrypt/privateDecrypt.js": +/*!*******************************************************!*\ + !*** ./node_modules/public-encrypt/privateDecrypt.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var parseKeys = __webpack_require__(/*! parse-asn1 */ "./node_modules/parse-asn1/index.js"); + +var mgf = __webpack_require__(/*! ./mgf */ "./node_modules/public-encrypt/mgf.js"); + +var xor = __webpack_require__(/*! ./xor */ "./node_modules/public-encrypt/xor.js"); + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var crt = __webpack_require__(/*! browserify-rsa */ "./node_modules/browserify-rsa/index.js"); + +var createHash = __webpack_require__(/*! create-hash */ "./node_modules/create-hash/browser.js"); + +var withPublic = __webpack_require__(/*! ./withPublic */ "./node_modules/public-encrypt/withPublic.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +module.exports = function privateDecrypt(privateKey, enc, reverse) { + var padding; + + if (privateKey.padding) { + padding = privateKey.padding; + } else if (reverse) { + padding = 1; + } else { + padding = 4; + } + + var key = parseKeys(privateKey); + var k = key.modulus.byteLength(); + + if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { + throw new Error('decryption error'); + } + + var msg; + + if (reverse) { + msg = withPublic(new BN(enc), key); + } else { + msg = crt(enc, key); + } + + var zBuffer = Buffer.alloc(k - msg.length); + msg = Buffer.concat([zBuffer, msg], k); + + if (padding === 4) { + return oaep(key, msg); + } else if (padding === 1) { + return pkcs1(key, msg, reverse); + } else if (padding === 3) { + return msg; + } else { + throw new Error('unknown padding'); + } +}; + +function oaep(key, msg) { + var k = key.modulus.byteLength(); + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest(); + var hLen = iHash.length; + + if (msg[0] !== 0) { + throw new Error('decryption error'); + } + + var maskedSeed = msg.slice(1, hLen + 1); + var maskedDb = msg.slice(hLen + 1); + var seed = xor(maskedSeed, mgf(maskedDb, hLen)); + var db = xor(maskedDb, mgf(seed, k - hLen - 1)); + + if (compare(iHash, db.slice(0, hLen))) { + throw new Error('decryption error'); + } + + var i = hLen; + + while (db[i] === 0) { + i++; + } + + if (db[i++] !== 1) { + throw new Error('decryption error'); + } + + return db.slice(i); +} + +function pkcs1(key, msg, reverse) { + var p1 = msg.slice(0, 2); + var i = 2; + var status = 0; + + while (msg[i++] !== 0) { + if (i >= msg.length) { + status++; + break; + } + } + + var ps = msg.slice(2, i - 1); + + if (p1.toString('hex') !== '0002' && !reverse || p1.toString('hex') !== '0001' && reverse) { + status++; + } + + if (ps.length < 8) { + status++; + } + + if (status) { + throw new Error('decryption error'); + } + + return msg.slice(i); +} + +function compare(a, b) { + a = Buffer.from(a); + b = Buffer.from(b); + var dif = 0; + var len = a.length; + + if (a.length !== b.length) { + dif++; + len = Math.min(a.length, b.length); + } + + var i = -1; + + while (++i < len) { + dif += a[i] ^ b[i]; + } + + return dif; +} + +/***/ }), + +/***/ "./node_modules/public-encrypt/publicEncrypt.js": +/*!******************************************************!*\ + !*** ./node_modules/public-encrypt/publicEncrypt.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var parseKeys = __webpack_require__(/*! parse-asn1 */ "./node_modules/parse-asn1/index.js"); + +var randomBytes = __webpack_require__(/*! randombytes */ "./node_modules/randombytes/browser.js"); + +var createHash = __webpack_require__(/*! create-hash */ "./node_modules/create-hash/browser.js"); + +var mgf = __webpack_require__(/*! ./mgf */ "./node_modules/public-encrypt/mgf.js"); + +var xor = __webpack_require__(/*! ./xor */ "./node_modules/public-encrypt/xor.js"); + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var withPublic = __webpack_require__(/*! ./withPublic */ "./node_modules/public-encrypt/withPublic.js"); + +var crt = __webpack_require__(/*! browserify-rsa */ "./node_modules/browserify-rsa/index.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +module.exports = function publicEncrypt(publicKey, msg, reverse) { + var padding; + + if (publicKey.padding) { + padding = publicKey.padding; + } else if (reverse) { + padding = 1; + } else { + padding = 4; + } + + var key = parseKeys(publicKey); + var paddedMsg; + + if (padding === 4) { + paddedMsg = oaep(key, msg); + } else if (padding === 1) { + paddedMsg = pkcs1(key, msg, reverse); + } else if (padding === 3) { + paddedMsg = new BN(msg); + + if (paddedMsg.cmp(key.modulus) >= 0) { + throw new Error('data too long for modulus'); + } + } else { + throw new Error('unknown padding'); + } + + if (reverse) { + return crt(paddedMsg, key); + } else { + return withPublic(paddedMsg, key); + } +}; + +function oaep(key, msg) { + var k = key.modulus.byteLength(); + var mLen = msg.length; + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest(); + var hLen = iHash.length; + var hLen2 = 2 * hLen; + + if (mLen > k - hLen2 - 2) { + throw new Error('message too long'); + } + + var ps = Buffer.alloc(k - mLen - hLen2 - 2); + var dblen = k - hLen - 1; + var seed = randomBytes(hLen); + var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)); + var maskedSeed = xor(seed, mgf(maskedDb, hLen)); + return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)); +} + +function pkcs1(key, msg, reverse) { + var mLen = msg.length; + var k = key.modulus.byteLength(); + + if (mLen > k - 11) { + throw new Error('message too long'); + } + + var ps; + + if (reverse) { + ps = Buffer.alloc(k - mLen - 3, 0xff); + } else { + ps = nonZero(k - mLen - 3); + } + + return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)); +} + +function nonZero(len) { + var out = Buffer.allocUnsafe(len); + var i = 0; + var cache = randomBytes(len * 2); + var cur = 0; + var num; + + while (i < len) { + if (cur === cache.length) { + cache = randomBytes(len * 2); + cur = 0; + } + + num = cache[cur++]; + + if (num) { + out[i++] = num; + } + } + + return out; +} + +/***/ }), + +/***/ "./node_modules/public-encrypt/withPublic.js": +/*!***************************************************!*\ + !*** ./node_modules/public-encrypt/withPublic.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js"); + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +function withPublic(paddedMsg, key) { + return Buffer.from(paddedMsg.toRed(BN.mont(key.modulus)).redPow(new BN(key.publicExponent)).fromRed().toArray()); +} + +module.exports = withPublic; + +/***/ }), + +/***/ "./node_modules/public-encrypt/xor.js": +/*!********************************************!*\ + !*** ./node_modules/public-encrypt/xor.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = function xor(a, b) { + var len = a.length; + var i = -1; + + while (++i < len) { + a[i] ^= b[i]; + } + + return a; +}; + +/***/ }), + +/***/ "./node_modules/randombytes/browser.js": +/*!*********************************************!*\ + !*** ./node_modules/randombytes/browser.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global, process) { // limit of Crypto.getRandomValues() +// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues + +var MAX_BYTES = 65536; // Node supports requesting up to this number of bytes +// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 + +var MAX_UINT32 = 4294967295; + +function oldBrowser() { + throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11'); +} + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var crypto = global.crypto || global.msCrypto; + +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes; +} else { + module.exports = oldBrowser; +} + +function randomBytes(size, cb) { + // phantomjs needs to throw + if (size > MAX_UINT32) throw new RangeError('requested too many random bytes'); + var bytes = Buffer.allocUnsafe(size); + + if (size > 0) { + // getRandomValues fails on IE if size == 0 + if (size > MAX_BYTES) { + // this is the max bytes crypto.getRandomValues + // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + for (var generated = 0; generated < size; generated += MAX_BYTES) { + // buffer.slice automatically checks if the end is past the end of + // the buffer so we don't have to here + crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)); + } + } else { + crypto.getRandomValues(bytes); + } + } + + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes); + }); + } + + return bytes; +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/randomfill/browser.js": +/*!********************************************!*\ + !*** ./node_modules/randomfill/browser.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global, process) { + +function oldBrowser() { + throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11'); +} + +var safeBuffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js"); + +var randombytes = __webpack_require__(/*! randombytes */ "./node_modules/randombytes/browser.js"); + +var Buffer = safeBuffer.Buffer; +var kBufferMaxLength = safeBuffer.kMaxLength; +var crypto = global.crypto || global.msCrypto; +var kMaxUint32 = Math.pow(2, 32) - 1; + +function assertOffset(offset, length) { + if (typeof offset !== 'number' || offset !== offset) { + // eslint-disable-line no-self-compare + throw new TypeError('offset must be a number'); + } + + if (offset > kMaxUint32 || offset < 0) { + throw new TypeError('offset must be a uint32'); + } + + if (offset > kBufferMaxLength || offset > length) { + throw new RangeError('offset out of range'); + } +} + +function assertSize(size, offset, length) { + if (typeof size !== 'number' || size !== size) { + // eslint-disable-line no-self-compare + throw new TypeError('size must be a number'); + } + + if (size > kMaxUint32 || size < 0) { + throw new TypeError('size must be a uint32'); + } + + if (size + offset > length || size > kBufferMaxLength) { + throw new RangeError('buffer too small'); + } +} + +if (crypto && crypto.getRandomValues || !process.browser) { + exports.randomFill = randomFill; + exports.randomFillSync = randomFillSync; +} else { + exports.randomFill = oldBrowser; + exports.randomFillSync = oldBrowser; +} + +function randomFill(buf, offset, size, cb) { + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); + } + + if (typeof offset === 'function') { + cb = offset; + offset = 0; + size = buf.length; + } else if (typeof size === 'function') { + cb = size; + size = buf.length - offset; + } else if (typeof cb !== 'function') { + throw new TypeError('"cb" argument must be a function'); + } + + assertOffset(offset, buf.length); + assertSize(size, offset, buf.length); + return actualFill(buf, offset, size, cb); +} + +function actualFill(buf, offset, size, cb) { + if (process.browser) { + var ourBuf = buf.buffer; + var uint = new Uint8Array(ourBuf, offset, size); + crypto.getRandomValues(uint); + + if (cb) { + process.nextTick(function () { + cb(null, buf); + }); + return; + } + + return buf; + } + + if (cb) { + randombytes(size, function (err, bytes) { + if (err) { + return cb(err); + } + + bytes.copy(buf, offset); + cb(null, buf); + }); + return; + } + + var bytes = randombytes(size); + bytes.copy(buf, offset); + return buf; +} + +function randomFillSync(buf, offset, size) { + if (typeof offset === 'undefined') { + offset = 0; + } + + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); + } + + assertOffset(offset, buf.length); + if (size === undefined) size = buf.length - offset; + assertSize(size, offset, buf.length); + return actualFill(buf, offset, size); +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/readable-stream/duplex-browser.js": +/*!********************************************************!*\ + !*** ./node_modules/readable-stream/duplex-browser.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./lib/_stream_duplex.js */ "./node_modules/readable-stream/lib/_stream_duplex.js"); + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_duplex.js": +/*!************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_duplex.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js"); +/**/ + +/**/ + + +var objectKeys = Object.keys || function (obj) { + var keys = []; + + for (var key in obj) { + keys.push(key); + } + + return keys; +}; +/**/ + + +module.exports = Duplex; +/**/ + +var util = Object.create(__webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +var Readable = __webpack_require__(/*! ./_stream_readable */ "./node_modules/readable-stream/lib/_stream_readable.js"); + +var Writable = __webpack_require__(/*! ./_stream_writable */ "./node_modules/readable-stream/lib/_stream_writable.js"); + +util.inherits(Duplex, Readable); +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + if (options && options.readable === false) this.readable = false; + if (options && options.writable === false) this.writable = false; + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + this.once('end', onend); +} + +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); // the no-half-open enforcer + +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written. + // But allow more writes to happen in this tick. + + pna.nextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function get() { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + pna.nextTick(cb, err); +}; + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_passthrough.js": +/*!*****************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_passthrough.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + + +module.exports = PassThrough; + +var Transform = __webpack_require__(/*! ./_stream_transform */ "./node_modules/readable-stream/lib/_stream_transform.js"); +/**/ + + +var util = Object.create(__webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_readable.js": +/*!**************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_readable.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js"); +/**/ + + +module.exports = Readable; +/**/ + +var isArray = __webpack_require__(/*! isarray */ "./node_modules/isarray/index.js"); +/**/ + +/**/ + + +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; +/**/ + +var EE = __webpack_require__(/*! events */ "./node_modules/events/events.js").EventEmitter; + +var EElistenerCount = function EElistenerCount(emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ + + +var Stream = __webpack_require__(/*! ./internal/streams/stream */ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js"); +/**/ + +/**/ + + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var OurUint8Array = global.Uint8Array || function () {}; + +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} + +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +/**/ + +/**/ + + +var util = Object.create(__webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +/**/ + +var debugUtil = __webpack_require__(/*! util */ 1); + +var debug = void 0; + +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function debug() {}; +} +/**/ + + +var BufferList = __webpack_require__(/*! ./internal/streams/BufferList */ "./node_modules/readable-stream/lib/internal/streams/BufferList.js"); + +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "./node_modules/readable-stream/lib/internal/streams/destroy.js"); + +var StringDecoder; +util.inherits(Readable, Stream); +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} + +function ReadableState(options, stream) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); + options = options || {}; // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + + var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints. + + this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + + this.sync = true; // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; // has it been destroyed + + this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + + this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s + + this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled + + this.readingMore = false; + this.decoder = null; + this.encoding = null; + + if (options.encoding) { + if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ "./node_modules/string_decoder/lib/string_decoder.js").StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); + if (!(this instanceof Readable)) return new Readable(options); + this._readableState = new ReadableState(options, this); // legacy + + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function get() { + if (this._readableState === undefined) { + return false; + } + + return this._readableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._readableState.destroyed = value; + } +}); +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; + +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; // Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. + + +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; // Unshift should *always* be something directly out of read() + + +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + + return er; +} // if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. + + +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; // backwards compatibility. + + +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ "./node_modules/string_decoder/lib/string_decoder.js").StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; // Don't raise the hwm > 8MB + + +var MAX_HWM = 0x800000; + +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + + return n; +} // This function is designed to be inlinable, so please take care when making +// changes to the function body. + + +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } // If we're asking for more than the current hwm, then raise the hwm. + + + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; // Don't have enough + + if (!state.ended) { + state.needReadable = true; + return 0; + } + + return state.length; +} // you can override either this method, or the async _read(n) below. + + +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. + + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + // if we need a readable event, then we need to do some reading. + + + var doRead = state.needReadable; + debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some + + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + + + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; // if the length is currently zero, then we *need* a readable event. + + if (state.length === 0) state.needReadable = true; // call internal read method + + this._read(state.highWaterMark); + + state.sync = false; // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. + + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + + if (state.decoder) { + var chunk = state.decoder.end(); + + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + + state.ended = true; // emit 'readable' now to make sure it gets picked up. + + emitReadable(stream); +} // Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. + + +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} // at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. + + +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) // didn't get any data, stop spinning. + break;else len = state.length; + } + + state.readingMore = false; +} // abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. + + +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + + case 1: + state.pipes = [state.pipes, dest]; + break; + + default: + state.pipes.push(dest); + break; + } + + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + + + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + + function cleanup() { + debug('cleanup'); // cleanup event handlers once the pipe is broken + + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + + + var increasedAwaitDrain = false; + src.on('data', ondata); + + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + + src.pause(); + } + } // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + + + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } // Make sure our error handler is attached before userland ones. + + + prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. + + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + + dest.once('close', onclose); + + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } // tell the dest that it's being piped to + + + dest.emit('pipe', src); // start the flow if it hasn't been started already. + + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; // if we're not piping anywhere, then do nothing. + + if (state.pipesCount === 0) return this; // just one destination. most common case. + + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; // got a match. + + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } // slow case. multiple pipe destinations. + + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, unpipeInfo); + } + + return this; + } // try to find the right one. + + + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; +}; // set up data events if they are asked for +// Ensure readable listeners eventually get something + + +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; + +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} // pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. + + +Readable.prototype.resume = function () { + var state = this._readableState; + + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + + while (state.flowing && stream.read() !== null) {} +} // wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. + + +Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); + + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode + + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + + if (!ret) { + paused = true; + stream.pause(); + } + }); // proxy all the other methods. + // important when wrapping filters and duplexes. + + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } // proxy certain important events. + + + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } // when we try to consume some more bytes, simply unpause the + // underlying stream. + + + this._read = function (n) { + debug('wrapped _read', n); + + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; +}; + +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.highWaterMark; + } +}); // exposed for testing purposes only. + +Readable._fromList = fromList; // Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. + +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + return ret; +} // Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. + + +function fromListPartial(n, list, hasStrings) { + var ret; + + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + + return ret; +} // Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. + + +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + + break; + } + + ++c; + } + + list.length -= c; + return ret; +} // Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. + + +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + + break; + } + + ++c; + } + + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + + return -1; +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_transform.js": +/*!***************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_transform.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + + +module.exports = Transform; + +var Duplex = __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); +/**/ + + +var util = Object.create(__webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; // start out asking for a readable event once data is transformed. + + this._readableState.needReadable = true; // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } // When the writable side finishes, then flush out anything remaining. + + + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; // This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. + + +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; // Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. + + +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + return stream.push(null); +} + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_writable.js": +/*!**************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_writable.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js"); +/**/ + + +module.exports = Writable; +/* */ + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} // It seems a linked list but it is not +// there will be only 2 of these for each stream + + +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ + + +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ + +var Duplex; +/**/ + +Writable.WritableState = WritableState; +/**/ + +var util = Object.create(__webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +/**/ + +var internalUtil = { + deprecate: __webpack_require__(/*! util-deprecate */ "./node_modules/util-deprecate/browser.js") +}; +/**/ + +/**/ + +var Stream = __webpack_require__(/*! ./internal/streams/stream */ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js"); +/**/ + +/**/ + + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var OurUint8Array = global.Uint8Array || function () {}; + +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} + +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +/**/ + + +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "./node_modules/readable-stream/lib/internal/streams/destroy.js"); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); + options = options || {}; // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + + var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream + // contains buffers or objects. + + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints. + + this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called + + this.finalCalled = false; // drain event flag. + + this.needDrain = false; // at the start of calling end() + + this.ending = false; // when end() has been called, and returned + + this.ended = false; // when 'finish' is emitted + + this.finished = false; // has it been destroyed + + this.destroyed = false; // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + + this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + + this.length = 0; // a flag to see when we're in the middle of a write. + + this.writing = false; // when true all writes will be buffered until .uncork() call + + this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + + this.sync = true; // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + + this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) + + this.onwrite = function (er) { + onwrite(stream, er); + }; // the callback that the user supplies to write(chunk,encoding,cb) + + + this.writecb = null; // the amount that is being written when _write is called. + + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + + this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + + this.prefinished = false; // True if the error was already emitted and should not be thrown again + + this.errorEmitted = false; // count buffered requests + + this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + + while (current) { + out.push(current); + current = current.next; + } + + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); // Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. + + +var realHasInstance; + +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function value(object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function realHasInstance(object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); // legacy. + + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} // Otherwise people can pipe Writable streams, which is just wrong. + + +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb + + stream.emit('error', er); + pna.nextTick(cb, er); +} // Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. + + +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); // if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. + +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. + + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); // this can emit finish, and it will always happen + // after error + + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); // this can emit finish, but finish must + // always follow error + + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} // Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. + + +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} // if there's something in the buffer waiting, then process it + + +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + + state.pendingcb++; + state.lastBufferedRequest = null; + + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks + + if (state.corked) { + state.corked = 1; + this.uncork(); + } // ignore unnecessary end() calls. + + + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} + +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + + if (err) { + stream.emit('error', err); + } + + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} + +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + + if (need) { + prefinish(stream, state); + + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = corkReq; + } else { + state.corkedRequestsFree = corkReq; + } +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function get() { + if (this._writableState === undefined) { + return false; + } + + return this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._writableState.destroyed = value; + } +}); +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; + +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../timers-browserify/main.js */ "./node_modules/timers-browserify/main.js").setImmediate, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/internal/streams/BufferList.js": +/*!*************************************************************************!*\ + !*** ./node_modules/readable-stream/lib/internal/streams/BufferList.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var util = __webpack_require__(/*! util */ 2); + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + + while (p = p.next) { + ret += s + p.data; + } + + return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + + return ret; + }; + + return BufferList; +}(); + +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ + length: this.length + }); + return this.constructor.name + ' ' + obj; + }; +} + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/internal/streams/destroy.js": +/*!**********************************************************************!*\ + !*** ./node_modules/readable-stream/lib/internal/streams/destroy.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js"); +/**/ +// undocumented cb() API, needed for core, not for public API + + +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { + pna.nextTick(emitErrorNT, this, err); + } + + return this; + } // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + + if (this._readableState) { + this._readableState.destroyed = true; + } // if this is a duplex stream mark the writable part as destroyed as well + + + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + pna.nextTick(emitErrorNT, _this, err); + + if (_this._writableState) { + _this._writableState.errorEmitted = true; + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/readable-stream/lib/internal/streams/stream-browser.js ***! + \*****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! events */ "./node_modules/events/events.js").EventEmitter; + +/***/ }), + +/***/ "./node_modules/readable-stream/passthrough.js": +/*!*****************************************************!*\ + !*** ./node_modules/readable-stream/passthrough.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./readable */ "./node_modules/readable-stream/readable-browser.js").PassThrough; + +/***/ }), + +/***/ "./node_modules/readable-stream/readable-browser.js": +/*!**********************************************************!*\ + !*** ./node_modules/readable-stream/readable-browser.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +exports = module.exports = __webpack_require__(/*! ./lib/_stream_readable.js */ "./node_modules/readable-stream/lib/_stream_readable.js"); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = __webpack_require__(/*! ./lib/_stream_writable.js */ "./node_modules/readable-stream/lib/_stream_writable.js"); +exports.Duplex = __webpack_require__(/*! ./lib/_stream_duplex.js */ "./node_modules/readable-stream/lib/_stream_duplex.js"); +exports.Transform = __webpack_require__(/*! ./lib/_stream_transform.js */ "./node_modules/readable-stream/lib/_stream_transform.js"); +exports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ "./node_modules/readable-stream/lib/_stream_passthrough.js"); + +/***/ }), + +/***/ "./node_modules/readable-stream/transform.js": +/*!***************************************************!*\ + !*** ./node_modules/readable-stream/transform.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./readable */ "./node_modules/readable-stream/readable-browser.js").Transform; + +/***/ }), + +/***/ "./node_modules/readable-stream/writable-browser.js": +/*!**********************************************************!*\ + !*** ./node_modules/readable-stream/writable-browser.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./lib/_stream_writable.js */ "./node_modules/readable-stream/lib/_stream_writable.js"); + +/***/ }), + +/***/ "./node_modules/ripemd160/index.js": +/*!*****************************************!*\ + !*** ./node_modules/ripemd160/index.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Buffer = __webpack_require__(/*! buffer */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer; + +var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); + +var HashBase = __webpack_require__(/*! hash-base */ "./node_modules/hash-base/index.js"); + +var ARRAY16 = new Array(16); +var zl = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]; +var zr = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]; +var sl = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]; +var sr = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]; +var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]; +var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]; + +function RIPEMD160() { + HashBase.call(this, 64); // state + + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; +} + +inherits(RIPEMD160, HashBase); + +RIPEMD160.prototype._update = function () { + var words = ARRAY16; + + for (var j = 0; j < 16; ++j) { + words[j] = this._block.readInt32LE(j * 4); + } + + var al = this._a | 0; + var bl = this._b | 0; + var cl = this._c | 0; + var dl = this._d | 0; + var el = this._e | 0; + var ar = this._a | 0; + var br = this._b | 0; + var cr = this._c | 0; + var dr = this._d | 0; + var er = this._e | 0; // computation + + for (var i = 0; i < 80; i += 1) { + var tl; + var tr; + + if (i < 16) { + tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]); + tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]); + } else if (i < 32) { + tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]); + tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]); + } else if (i < 48) { + tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]); + tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]); + } else if (i < 64) { + tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]); + tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]); + } else { + // if (i<80) { + tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]); + tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]); + } + + al = el; + el = dl; + dl = rotl(cl, 10); + cl = bl; + bl = tl; + ar = er; + er = dr; + dr = rotl(cr, 10); + cr = br; + br = tr; + } // update state + + + var t = this._b + cl + dr | 0; + this._b = this._c + dl + er | 0; + this._c = this._d + el + ar | 0; + this._d = this._e + al + br | 0; + this._e = this._a + bl + cr | 0; + this._a = t; +}; + +RIPEMD160.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80; + + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64); + + this._update(); + + this._blockOffset = 0; + } + + this._block.fill(0, this._blockOffset, 56); + + this._block.writeUInt32LE(this._length[0], 56); + + this._block.writeUInt32LE(this._length[1], 60); + + this._update(); // produce result + + + var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20); + buffer.writeInt32LE(this._a, 0); + buffer.writeInt32LE(this._b, 4); + buffer.writeInt32LE(this._c, 8); + buffer.writeInt32LE(this._d, 12); + buffer.writeInt32LE(this._e, 16); + return buffer; +}; + +function rotl(x, n) { + return x << n | x >>> 32 - n; +} + +function fn1(a, b, c, d, e, m, k, s) { + return rotl(a + (b ^ c ^ d) + m + k | 0, s) + e | 0; +} + +function fn2(a, b, c, d, e, m, k, s) { + return rotl(a + (b & c | ~b & d) + m + k | 0, s) + e | 0; +} + +function fn3(a, b, c, d, e, m, k, s) { + return rotl(a + ((b | ~c) ^ d) + m + k | 0, s) + e | 0; +} + +function fn4(a, b, c, d, e, m, k, s) { + return rotl(a + (b & d | c & ~d) + m + k | 0, s) + e | 0; +} + +function fn5(a, b, c, d, e, m, k, s) { + return rotl(a + (b ^ (c | ~d)) + m + k | 0, s) + e | 0; +} + +module.exports = RIPEMD160; + +/***/ }), + +/***/ "./node_modules/safe-buffer/index.js": +/*!*******************************************!*\ + !*** ./node_modules/safe-buffer/index.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(/*! buffer */ "./node_modules/node-libs-browser/node_modules/buffer/index.js"); + +var Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers + +function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key]; + } +} + +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer; +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports); + exports.Buffer = SafeBuffer; +} + +function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length); +} // Copy static methods from Buffer + + +copyProps(Buffer, SafeBuffer); + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number'); + } + + return Buffer(arg, encodingOrOffset, length); +}; + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + + var buf = Buffer(size); + + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + } else { + buf.fill(0); + } + + return buf; +}; + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + + return Buffer(size); +}; + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + + return buffer.SlowBuffer(size); +}; + +/***/ }), + +/***/ "./node_modules/setimmediate/setImmediate.js": +/*!***************************************************!*\ + !*** ./node_modules/setimmediate/setImmediate.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { + "use strict"; + + if (global.setImmediate) { + return; + } + + var nextHandle = 1; // Spec says greater than zero + + var tasksByHandle = {}; + var currentlyRunningATask = false; + var doc = global.document; + var registerImmediate; + + function setImmediate(callback) { + // Callback can either be a function or a string + if (typeof callback !== "function") { + callback = new Function("" + callback); + } // Copy function arguments + + + var args = new Array(arguments.length - 1); + + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i + 1]; + } // Store and register the task + + + var task = { + callback: callback, + args: args + }; + tasksByHandle[nextHandle] = task; + registerImmediate(nextHandle); + return nextHandle++; + } + + function clearImmediate(handle) { + delete tasksByHandle[handle]; + } + + function run(task) { + var callback = task.callback; + var args = task.args; + + switch (args.length) { + case 0: + callback(); + break; + + case 1: + callback(args[0]); + break; + + case 2: + callback(args[0], args[1]); + break; + + case 3: + callback(args[0], args[1], args[2]); + break; + + default: + callback.apply(undefined, args); + break; + } + } + + function runIfPresent(handle) { + // From the spec: "Wait until any invocations of this algorithm started before this one have completed." + // So if we're currently running a task, we'll need to delay this invocation. + if (currentlyRunningATask) { + // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a + // "too much recursion" error. + setTimeout(runIfPresent, 0, handle); + } else { + var task = tasksByHandle[handle]; + + if (task) { + currentlyRunningATask = true; + + try { + run(task); + } finally { + clearImmediate(handle); + currentlyRunningATask = false; + } + } + } + } + + function installNextTickImplementation() { + registerImmediate = function registerImmediate(handle) { + process.nextTick(function () { + runIfPresent(handle); + }); + }; + } + + function canUsePostMessage() { + // The test against `importScripts` prevents this implementation from being installed inside a web worker, + // where `global.postMessage` means something completely different and can't be used for this purpose. + if (global.postMessage && !global.importScripts) { + var postMessageIsAsynchronous = true; + var oldOnMessage = global.onmessage; + + global.onmessage = function () { + postMessageIsAsynchronous = false; + }; + + global.postMessage("", "*"); + global.onmessage = oldOnMessage; + return postMessageIsAsynchronous; + } + } + + function installPostMessageImplementation() { + // Installs an event handler on `global` for the `message` event: see + // * https://developer.mozilla.org/en/DOM/window.postMessage + // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages + var messagePrefix = "setImmediate$" + Math.random() + "$"; + + var onGlobalMessage = function onGlobalMessage(event) { + if (event.source === global && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) { + runIfPresent(+event.data.slice(messagePrefix.length)); + } + }; + + if (global.addEventListener) { + global.addEventListener("message", onGlobalMessage, false); + } else { + global.attachEvent("onmessage", onGlobalMessage); + } + + registerImmediate = function registerImmediate(handle) { + global.postMessage(messagePrefix + handle, "*"); + }; + } + + function installMessageChannelImplementation() { + var channel = new MessageChannel(); + + channel.port1.onmessage = function (event) { + var handle = event.data; + runIfPresent(handle); + }; + + registerImmediate = function registerImmediate(handle) { + channel.port2.postMessage(handle); + }; + } + + function installReadyStateChangeImplementation() { + var html = doc.documentElement; + + registerImmediate = function registerImmediate(handle) { + // Create a -