-
- Usersuche
-
-
+ {{ $t('user_search') }}
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+ {{ $t('remove_all') }}
+
+
+
+
{{ $t('multiple_creation_text') }}
@@ -38,7 +55,8 @@
type="massCreation"
:creation="creation"
:items="itemsMassCreation"
- @remove-all-bookmark="removeAllBookmark"
+ @remove-all-bookmark="removeAllBookmarks"
+ @toast-failed-creations="toastFailedCreations"
/>
@@ -46,37 +64,30 @@
+
diff --git a/admin/src/pages/UserSearch.spec.js b/admin/src/pages/UserSearch.spec.js
index 473b2bbdc..bd18965ac 100644
--- a/admin/src/pages/UserSearch.spec.js
+++ b/admin/src/pages/UserSearch.spec.js
@@ -1,42 +1,61 @@
import { mount } from '@vue/test-utils'
import UserSearch from './UserSearch.vue'
+import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup'
const localVue = global.localVue
const apolloQueryMock = jest.fn().mockResolvedValue({
data: {
- searchUsers: [
- {
- firstName: 'Bibi',
- lastName: 'Bloxberg',
- email: 'bibi@bloxberg.de',
- creation: [200, 400, 600],
- emailChecked: false,
- },
- ],
+ searchUsers: {
+ userCount: 1,
+ userList: [
+ {
+ userId: 1,
+ firstName: 'Bibi',
+ lastName: 'Bloxberg',
+ email: 'bibi@bloxberg.de',
+ creation: [200, 400, 600],
+ emailChecked: true,
+ deletedAt: null,
+ },
+ {
+ userId: 2,
+ firstName: 'Benjamin',
+ lastName: 'Blümchen',
+ email: 'benjamin@bluemchen.de',
+ creation: [1000, 1000, 1000],
+ emailChecked: true,
+ deletedAt: null,
+ },
+ {
+ userId: 3,
+ firstName: 'Peter',
+ lastName: 'Lustig',
+ email: 'peter@lustig.de',
+ creation: [0, 0, 0],
+ emailChecked: true,
+ deletedAt: null,
+ },
+ {
+ userId: 4,
+ firstName: 'New',
+ lastName: 'User',
+ email: 'new@user.ch',
+ creation: [1000, 1000, 1000],
+ emailChecked: false,
+ deletedAt: null,
+ },
+ ],
+ },
},
})
-const toastErrorMock = jest.fn()
-
const mocks = {
$t: jest.fn((t) => t),
+ $d: jest.fn((d) => String(d)),
$apollo: {
query: apolloQueryMock,
},
- $toasted: {
- error: toastErrorMock,
- },
- $moment: jest.fn(() => {
- return {
- format: jest.fn((m) => m),
- subtract: jest.fn(() => {
- return {
- format: jest.fn((m) => m),
- }
- }),
- }
- }),
}
describe('UserSearch', () => {
@@ -48,6 +67,7 @@ describe('UserSearch', () => {
describe('mount', () => {
beforeEach(() => {
+ jest.clearAllMocks()
wrapper = Wrapper()
})
@@ -55,13 +75,130 @@ describe('UserSearch', () => {
expect(wrapper.find('div.user-search').exists()).toBeTruthy()
})
+ it('calls the API', () => {
+ expect(apolloQueryMock).toBeCalledWith(
+ expect.objectContaining({
+ variables: {
+ searchText: '',
+ currentPage: 1,
+ pageSize: 25,
+ notActivated: false,
+ isDeleted: false,
+ },
+ }),
+ )
+ })
+
describe('unconfirmed emails', () => {
beforeEach(async () => {
- await wrapper.find('button.btn-block').trigger('click')
+ await wrapper.find('button.unconfirmedRegisterMails').trigger('click')
})
- it('filters the users by unconfirmed emails', () => {
- expect(wrapper.vm.searchResult).toHaveLength(0)
+ it('calls API with filter', () => {
+ expect(apolloQueryMock).toBeCalledWith(
+ expect.objectContaining({
+ variables: {
+ searchText: '',
+ currentPage: 1,
+ pageSize: 25,
+ notActivated: true,
+ isDeleted: false,
+ },
+ }),
+ )
+ })
+ })
+
+ describe('deleted Users', () => {
+ beforeEach(async () => {
+ await wrapper.find('button.deletedUserSearch').trigger('click')
+ })
+
+ it('calls API with filter', () => {
+ expect(apolloQueryMock).toBeCalledWith(
+ expect.objectContaining({
+ variables: {
+ searchText: '',
+ currentPage: 1,
+ pageSize: 25,
+ notActivated: false,
+ isDeleted: true,
+ },
+ }),
+ )
+ })
+ })
+
+ describe('pagination', () => {
+ beforeEach(async () => {
+ wrapper.setData({ currentPage: 2 })
+ })
+
+ it('calls the API with new page', () => {
+ expect(apolloQueryMock).toBeCalledWith(
+ expect.objectContaining({
+ variables: {
+ searchText: '',
+ currentPage: 2,
+ pageSize: 25,
+ notActivated: false,
+ isDeleted: false,
+ },
+ }),
+ )
+ })
+ })
+
+ describe('user search', () => {
+ beforeEach(async () => {
+ wrapper.setData({ criteria: 'search string' })
+ })
+
+ it('calls the API with search string', () => {
+ expect(apolloQueryMock).toBeCalledWith(
+ expect.objectContaining({
+ variables: {
+ searchText: 'search string',
+ currentPage: 1,
+ pageSize: 25,
+ notActivated: false,
+ isDeleted: false,
+ },
+ }),
+ )
+ })
+
+ describe('reset the search field', () => {
+ it('calls the API with empty criteria', async () => {
+ jest.clearAllMocks()
+ await wrapper.find('.test-click-clear-criteria').trigger('click')
+ expect(apolloQueryMock).toBeCalledWith(
+ expect.objectContaining({
+ variables: {
+ searchText: '',
+ currentPage: 1,
+ pageSize: 25,
+ notActivated: false,
+ isDeleted: false,
+ },
+ }),
+ )
+ })
+ })
+ })
+
+ describe('delete user', () => {
+ const now = new Date()
+ beforeEach(async () => {
+ wrapper.findComponent({ name: 'SearchUserTable' }).vm.$emit('updateDeletedAt', 4, now)
+ })
+
+ it('marks the user as deleted', () => {
+ expect(wrapper.vm.searchResult.find((obj) => obj.userId === 4).deletedAt).toEqual(now)
+ })
+
+ it('toasts a success message', () => {
+ expect(toastSuccessSpy).toBeCalledWith('user_deleted')
})
})
@@ -74,7 +211,7 @@ describe('UserSearch', () => {
})
it('toasts an error message', () => {
- expect(toastErrorMock).toBeCalledWith('Ouch')
+ expect(toastErrorSpy).toBeCalledWith('Ouch')
})
})
})
diff --git a/admin/src/pages/UserSearch.vue b/admin/src/pages/UserSearch.vue
index 2c8b289e0..24334e0c9 100644
--- a/admin/src/pages/UserSearch.vue
+++ b/admin/src/pages/UserSearch.vue
@@ -1,94 +1,81 @@
-
-
-
- {{ $t('unregistered_emails') }}
+
+
+
+ {{ filterCheckedEmails ? $t('all_emails') : $t('unregistered_emails') }}
+
+
+
+ {{ filterDeletedUser ? $t('all_emails') : $t('deleted_user') }}
{{ $t('user_search') }}
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/admin/src/plugins/apolloProvider.js b/admin/src/plugins/apolloProvider.js
index 0e342b8fc..1f51be20a 100644
--- a/admin/src/plugins/apolloProvider.js
+++ b/admin/src/plugins/apolloProvider.js
@@ -2,8 +2,6 @@ import { ApolloClient, ApolloLink, InMemoryCache, HttpLink } from 'apollo-boost'
import VueApollo from 'vue-apollo'
import CONFIG from '../config'
import store from '../store/store'
-import router from '../router/router'
-import i18n from '../i18n'
const httpLink = new HttpLink({ uri: CONFIG.GRAPHQL_URI })
@@ -16,9 +14,8 @@ const authLink = new ApolloLink((operation, forward) => {
})
return forward(operation).map((response) => {
if (response.errors && response.errors[0].message === '403.13 - Client certificate revoked') {
- response.errors[0].message = i18n.t('error.session-expired')
store.dispatch('logout', null)
- if (router.currentRoute.path !== '/logout') router.push('/logout')
+ window.location.assign(CONFIG.WALLET_URL)
return response
}
const newToken = operation.getContext().response.headers.get('token')
diff --git a/admin/src/plugins/apolloProvider.test.js b/admin/src/plugins/apolloProvider.test.js
index e5f394e96..75e415901 100644
--- a/admin/src/plugins/apolloProvider.test.js
+++ b/admin/src/plugins/apolloProvider.test.js
@@ -4,12 +4,10 @@ import CONFIG from '../config'
import VueApollo from 'vue-apollo'
import store from '../store/store'
-import router from '../router/router'
import i18n from '../i18n'
jest.mock('vue-apollo')
jest.mock('../store/store')
-jest.mock('../router/router')
jest.mock('../i18n')
jest.mock('apollo-boost', () => {
@@ -59,13 +57,11 @@ describe('apolloProvider', () => {
errors: [{ message: '403.13 - Client certificate revoked' }],
}
- // mock router
- const routerPushMock = jest.fn()
- router.push = routerPushMock
- router.currentRoute = {
- path: '/overview',
+ const windowLocationMock = jest.fn()
+ delete window.location
+ window.location = {
+ assign: windowLocationMock,
}
-
// mock context
const setContextMock = jest.fn()
const getContextMock = jest.fn(() => {
@@ -128,21 +124,8 @@ describe('apolloProvider', () => {
expect(storeDispatchMock).toBeCalledWith('logout', null)
})
- describe('current route is not logout', () => {
- it('redirects to logout', () => {
- expect(routerPushMock).toBeCalledWith('/logout')
- })
- })
-
- describe('current route is logout', () => {
- beforeEach(() => {
- jest.clearAllMocks()
- router.currentRoute.path = '/logout'
- })
-
- it('does not redirect to logout', () => {
- expect(routerPushMock).not.toBeCalled()
- })
+ it('redirects to logout', () => {
+ expect(windowLocationMock).toBeCalledWith('http://localhost/login')
})
})
diff --git a/admin/src/router/guards.js b/admin/src/router/guards.js
index 4ed6c8516..dd61e8657 100644
--- a/admin/src/router/guards.js
+++ b/admin/src/router/guards.js
@@ -1,7 +1,7 @@
import { verifyLogin } from '../graphql/verifyLogin'
import CONFIG from '../config'
-const addNavigationGuards = (router, store, apollo) => {
+const addNavigationGuards = (router, store, apollo, i18n) => {
// store token on `authenticate`
router.beforeEach(async (to, from, next) => {
if (to.path === '/authenticate' && to.query && to.query.token) {
@@ -14,6 +14,7 @@ const addNavigationGuards = (router, store, apollo) => {
.then((result) => {
const moderator = result.data.verifyLogin
if (moderator.isAdmin) {
+ i18n.locale = moderator.language
store.commit('moderator', moderator)
next({ path: '/' })
} else {
diff --git a/admin/src/router/guards.test.js b/admin/src/router/guards.test.js
index cd5b33e68..da4dd5969 100644
--- a/admin/src/router/guards.test.js
+++ b/admin/src/router/guards.test.js
@@ -6,9 +6,11 @@ const apolloQueryMock = jest.fn().mockResolvedValue({
data: {
verifyLogin: {
isAdmin: true,
+ language: 'de',
},
},
})
+const i18nLocaleMock = jest.fn()
const store = {
commit: storeCommitMock,
@@ -21,7 +23,11 @@ const apollo = {
query: apolloQueryMock,
}
-addNavigationGuards(router, store, apollo)
+const i18n = {
+ locale: i18nLocaleMock,
+}
+
+addNavigationGuards(router, store, apollo, i18n)
describe('navigation guards', () => {
beforeEach(() => {
@@ -33,19 +39,23 @@ describe('navigation guards', () => {
const next = jest.fn()
describe('with valid token and as admin', () => {
- beforeEach(() => {
- navGuard({ path: '/authenticate', query: { token: 'valid-token' } }, {}, next)
+ beforeEach(async () => {
+ await navGuard({ path: '/authenticate', query: { token: 'valid-token' } }, {}, next)
})
- it('commits the token to the store', async () => {
+ it('commits the token to the store', () => {
expect(storeCommitMock).toBeCalledWith('token', 'valid-token')
})
- it('commits the moderator to the store', () => {
- expect(storeCommitMock).toBeCalledWith('moderator', { isAdmin: true })
+ it.skip('sets the locale', () => {
+ expect(i18nLocaleMock).toBeCalledWith('de')
})
- it('redirects to /', async () => {
+ it('commits the moderator to the store', () => {
+ expect(storeCommitMock).toBeCalledWith('moderator', { isAdmin: true, language: 'de' })
+ })
+
+ it('redirects to /', () => {
expect(next).toBeCalledWith({ path: '/' })
})
})
diff --git a/admin/src/store/store.js b/admin/src/store/store.js
index fe5629e19..78fbf21ec 100644
--- a/admin/src/store/store.js
+++ b/admin/src/store/store.js
@@ -24,6 +24,9 @@ export const mutations = {
moderator: (state, moderator) => {
state.moderator = moderator
},
+ setUserSelectedInMassCreation: (state, userSelectedInMassCreation) => {
+ state.userSelectedInMassCreation = userSelectedInMassCreation
+ },
}
export const actions = {
@@ -44,6 +47,7 @@ const store = new Vuex.Store({
token: CONFIG.DEBUG_DISABLE_AUTH ? 'validToken' : null,
moderator: null,
openCreations: 0,
+ userSelectedInMassCreation: [],
},
// Syncronous mutation of the state
mutations,
diff --git a/admin/src/store/store.test.js b/admin/src/store/store.test.js
index e027ebf1a..5ddb048eb 100644
--- a/admin/src/store/store.test.js
+++ b/admin/src/store/store.test.js
@@ -10,6 +10,7 @@ const {
resetOpenCreations,
setOpenCreations,
moderator,
+ setUserSelectedInMassCreation,
} = mutations
const { logout } = actions
@@ -64,6 +65,14 @@ describe('Vuex store', () => {
expect(state.openCreations).toEqual(12)
})
})
+
+ describe('setUserSelectedInMassCreation', () => {
+ it('sets userSelectedInMassCreation to given value', () => {
+ const state = { userSelectedInMassCreation: [] }
+ setUserSelectedInMassCreation(state, [0, 1, 2])
+ expect(state.userSelectedInMassCreation).toEqual([0, 1, 2])
+ })
+ })
})
describe('actions', () => {
diff --git a/admin/test/testSetup.js b/admin/test/testSetup.js
index caaa3c19c..df3a025da 100644
--- a/admin/test/testSetup.js
+++ b/admin/test/testSetup.js
@@ -5,11 +5,18 @@ import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
// without this async calls are not working
import 'regenerator-runtime'
+import { toasters } from '../src/mixins/toaster'
+
+export const toastErrorSpy = jest.spyOn(toasters.methods, 'toastError')
+export const toastSuccessSpy = jest.spyOn(toasters.methods, 'toastSuccess')
+
global.localVue = createLocalVue()
global.localVue.use(BootstrapVue)
global.localVue.use(IconsPlugin)
+global.localVue.mixin(toasters)
+
// throw errors for vue warnings to force the programmers to take care about warnings
Vue.config.warnHandler = (w) => {
throw new Error(w)
diff --git a/admin/vue.config.js b/admin/vue.config.js
index 18929c38c..8cc1e4b89 100644
--- a/admin/vue.config.js
+++ b/admin/vue.config.js
@@ -2,11 +2,12 @@ const path = require('path')
const webpack = require('webpack')
const Dotenv = require('dotenv-webpack')
const StatsPlugin = require('stats-webpack-plugin')
+const CONFIG = require('./src/config')
// vue.config.js
module.exports = {
devServer: {
- port: process.env.PORT || 8080,
+ port: CONFIG.PORT,
},
pluginOptions: {
i18n: {
@@ -14,6 +15,7 @@ module.exports = {
fallbackLocale: 'de',
localeDir: 'locales',
enableInSFC: false,
+ enableLegacy: false,
},
},
lintOnSave: true,
@@ -33,7 +35,7 @@ module.exports = {
// 'process.env.DOCKER_WORKDIR': JSON.stringify(process.env.DOCKER_WORKDIR),
// 'process.env.BUILD_DATE': JSON.stringify(process.env.BUILD_DATE),
// 'process.env.BUILD_VERSION': JSON.stringify(process.env.BUILD_VERSION),
- 'process.env.BUILD_COMMIT': JSON.stringify(process.env.BUILD_COMMIT),
+ 'process.env.BUILD_COMMIT': JSON.stringify(CONFIG.BUILD_COMMIT),
// 'process.env.PORT': JSON.stringify(process.env.PORT),
}),
// generate webpack stats to allow analysis of the bundlesize
@@ -45,7 +47,7 @@ module.exports = {
},
css: {
// Enable CSS source maps.
- sourceMap: process.env.NODE_ENV !== 'production',
+ sourceMap: CONFIG.NODE_ENV !== 'production',
},
outputDir: path.resolve(__dirname, './dist'),
}
diff --git a/admin/yarn.lock b/admin/yarn.lock
index 46b5aaa93..d5fae27fe 100644
--- a/admin/yarn.lock
+++ b/admin/yarn.lock
@@ -932,6 +932,13 @@
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.14.0":
+ version "7.17.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.7.tgz#a5f3328dc41ff39d803f311cfe17703418cf9825"
+ integrity sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/template@7", "@babel/template@^7.0.0", "@babel/template@^7.15.4", "@babel/template@^7.3.3", "@babel/template@^7.4.0":
version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194"
@@ -1001,6 +1008,21 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
+"@eslint/eslintrc@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6"
+ integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.3.1"
+ globals "^13.9.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
"@hapi/address@2.x.x":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
@@ -1042,6 +1064,83 @@
cssnano-preset-default "^4.0.0"
postcss "^7.0.0"
+"@intlify/core-base@^9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.1.9.tgz#e4e8c951010728e4af3a0d13d74cf3f9e7add7f6"
+ integrity sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==
+ dependencies:
+ "@intlify/devtools-if" "9.1.9"
+ "@intlify/message-compiler" "9.1.9"
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/runtime" "9.1.9"
+ "@intlify/shared" "9.1.9"
+ "@intlify/vue-devtools" "9.1.9"
+
+"@intlify/devtools-if@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.1.9.tgz#a30e1dd1256ff2c5c98d8d75d075384fba898e5d"
+ integrity sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==
+ dependencies:
+ "@intlify/shared" "9.1.9"
+
+"@intlify/eslint-plugin-vue-i18n@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-1.4.0.tgz#f8fe791892c2dce7d189a364b6a908c87e1c3ac9"
+ integrity sha512-anB1eBf6rpxpWyW883gi6O1hozQy4Q02VyzyodOUnohOqT07GATVSxnr2J9/qQSV47xWukV+9LiRErJcU7d/uA==
+ dependencies:
+ "@eslint/eslintrc" "^1.2.0"
+ "@intlify/core-base" "^9.1.9"
+ "@intlify/message-compiler" "^9.1.9"
+ debug "^4.3.1"
+ glob "^7.1.3"
+ ignore "^5.0.5"
+ is-language-code "^3.1.0"
+ js-yaml "^4.0.0"
+ json5 "^2.1.3"
+ jsonc-eslint-parser "^2.0.0"
+ lodash "^4.17.11"
+ parse5 "^6.0.0"
+ semver "^7.3.4"
+ vue-eslint-parser "^8.0.0"
+ yaml-eslint-parser "^0.5.0"
+
+"@intlify/message-compiler@9.1.9", "@intlify/message-compiler@^9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.1.9.tgz#1193cbd224a71c2fb981455b8534a3c766d2948d"
+ integrity sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==
+ dependencies:
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/shared" "9.1.9"
+ source-map "0.6.1"
+
+"@intlify/message-resolver@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/message-resolver/-/message-resolver-9.1.9.tgz#3155ccd2f5e6d0dc16cad8b7f1d8e97fcda05bfc"
+ integrity sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==
+
+"@intlify/runtime@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/runtime/-/runtime-9.1.9.tgz#2c12ce29518a075629efed0a8ed293ee740cb285"
+ integrity sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==
+ dependencies:
+ "@intlify/message-compiler" "9.1.9"
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/shared" "9.1.9"
+
+"@intlify/shared@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.1.9.tgz#0baaf96128b85560666bec784ffb01f6623cc17a"
+ integrity sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==
+
+"@intlify/vue-devtools@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz#2be8f4dbe7f7ed4115676eb32348141d411e426b"
+ integrity sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==
+ dependencies:
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/runtime" "9.1.9"
+ "@intlify/shared" "9.1.9"
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -1673,6 +1772,11 @@
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
"@types/prettier@^2.0.0":
version "2.4.1"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb"
@@ -2394,6 +2498,11 @@ acorn@^8.2.4:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"
integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
+acorn@^8.5.0, acorn@^8.7.0:
+ version "8.7.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
+ integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
+
address@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
@@ -2640,6 +2749,11 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
@@ -2712,6 +2826,11 @@ array.prototype.flat@^1.2.5:
define-properties "^1.1.3"
es-abstract "^1.19.0"
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
asn1.js@^5.2.0:
version "5.4.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
@@ -3508,6 +3627,11 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+balanced-match@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
+ integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
+
base64-js@^1.0.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
@@ -3634,16 +3758,16 @@ bootstrap-vue@^2.21.2:
portal-vue "^2.1.7"
vue-functional-data-merge "^3.1.0"
+bootstrap@4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.3.1.tgz#280ca8f610504d99d7b6b4bfc4b68cec601704ac"
+ integrity sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==
+
"bootstrap@>=4.5.3 <5.0.0":
version "4.6.0"
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.0.tgz#97b9f29ac98f98dfa43bf7468262d84392552fd7"
integrity sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==
-bootstrap@^5.1.3:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.3.tgz#ba081b0c130f810fa70900acbc1c6d3c28fa8f34"
- integrity sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==
-
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -3923,6 +4047,15 @@ camel-case@3.0.x:
no-case "^2.2.0"
upper-case "^1.1.1"
+camelcase-keys@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
+ integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
+ dependencies:
+ camelcase "^5.3.1"
+ map-obj "^4.0.0"
+ quick-lru "^4.0.1"
+
camelcase@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
@@ -4141,6 +4274,16 @@ cli-spinners@^2.0.0:
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d"
integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
+cli-table3@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
+ integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==
+ dependencies:
+ object-assign "^4.1.0"
+ string-width "^2.1.1"
+ optionalDependencies:
+ colors "^1.1.2"
+
cli-width@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
@@ -4191,6 +4334,13 @@ clone-deep@^4.0.1:
kind-of "^6.0.2"
shallow-clone "^3.0.0"
+clone-regexp@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f"
+ integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==
+ dependencies:
+ is-regexp "^2.0.0"
+
clone@2.x:
version "2.1.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
@@ -4268,6 +4418,16 @@ color@^3.0.0:
color-convert "^1.9.3"
color-string "^1.6.0"
+colord@^2.9.2:
+ version "2.9.2"
+ resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1"
+ integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==
+
+colors@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
+ integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
+
combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@@ -4486,6 +4646,17 @@ cosmiconfig@^5.0.0:
js-yaml "^3.13.1"
parse-json "^4.0.0"
+cosmiconfig@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
+ integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
create-ecdh@^4.0.0:
version "4.0.4"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
@@ -4576,6 +4747,11 @@ css-declaration-sorter@^4.0.1:
postcss "^7.0.1"
timsort "^0.3.0"
+css-functions-list@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.0.1.tgz#1460df7fb584d1692c30b105151dbb988c8094f9"
+ integrity sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==
+
css-loader@^3.5.3:
version "3.6.0"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645"
@@ -4825,7 +5001,22 @@ debug@^3.1.1, debug@^3.2.6, debug@^3.2.7:
dependencies:
ms "^2.1.1"
-decamelize@^1.2.0:
+debug@^4.3.0, debug@^4.3.1, debug@^4.3.3:
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
+ integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
+ dependencies:
+ ms "2.1.2"
+
+decamelize-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+ dependencies:
+ decamelize "^1.1.0"
+ map-obj "^1.0.0"
+
+decamelize@^1.1.0, decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
@@ -4862,7 +5053,7 @@ deepmerge@^1.5.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753"
integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
-deepmerge@^4.2.2:
+deepmerge@^4.2.0, deepmerge@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
@@ -5101,6 +5292,13 @@ domhandler@^4.0.0, domhandler@^4.2.0:
dependencies:
domelementtype "^2.2.0"
+domhandler@^4.2.2:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626"
+ integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==
+ dependencies:
+ domelementtype "^2.2.0"
+
domutils@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
@@ -5109,7 +5307,7 @@ domutils@^1.7.0:
dom-serializer "0"
domelementtype "1"
-domutils@^2.5.2, domutils@^2.6.0:
+domutils@^2.5.2, domutils@^2.6.0, domutils@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
@@ -5118,6 +5316,14 @@ domutils@^2.5.2, domutils@^2.6.0:
domelementtype "^2.2.0"
domhandler "^4.2.0"
+dot-object@^1.7.1:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/dot-object/-/dot-object-1.9.0.tgz#6e3d6d8379f794c5174599ddf05528f5990f076e"
+ integrity sha512-7MPN6y7XhAO4vM4eguj5+5HNKLjJYfkVG1ZR1Aput4Q4TR6SYeSjhpVQ77IzJHoSHffKbDxBC+48aCiiRurDPw==
+ dependencies:
+ commander "^2.20.0"
+ glob "^7.1.4"
+
dot-prop@^5.2.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
@@ -5273,6 +5479,11 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+entities@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
+ integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
+
errno@^0.1.3, errno@~0.1.7:
version "0.1.8"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
@@ -5513,6 +5724,14 @@ eslint-scope@^5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
+eslint-scope@^7.0.0:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+ integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
eslint-utils@^2.0.0, eslint-utils@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
@@ -5542,6 +5761,11 @@ eslint-visitor-keys@^3.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186"
integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==
+eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+ integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
+
eslint@7.25.0:
version "7.25.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67"
@@ -5585,6 +5809,11 @@ eslint@7.25.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
+esm@^3.2.13:
+ version "3.2.25"
+ resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
+ integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
+
espree@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
@@ -5603,6 +5832,15 @@ espree@^7.3.0, espree@^7.3.1:
acorn-jsx "^5.3.1"
eslint-visitor-keys "^1.3.0"
+espree@^9.0.0, espree@^9.3.1:
+ version "9.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd"
+ integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==
+ dependencies:
+ acorn "^8.7.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^3.3.0"
+
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -5734,6 +5972,13 @@ execa@^4.0.0:
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
+execall@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45"
+ integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==
+ dependencies:
+ clone-regexp "^2.1.0"
+
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -5905,6 +6150,17 @@ fast-glob@^3.1.1:
merge2 "^1.3.0"
micromatch "^4.0.4"
+fast-glob@^3.2.11, fast-glob@^3.2.9:
+ version "3.2.11"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
+ integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -5915,6 +6171,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+fastest-levenshtein@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2"
+ integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==
+
fastq@^1.6.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
@@ -6076,6 +6337,11 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
+flat@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
flatted@^3.1.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561"
@@ -6239,6 +6505,11 @@ get-stdin@^6.0.0:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+get-stdin@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
+ integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
+
get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@@ -6310,6 +6581,22 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -6339,6 +6626,18 @@ globby@^11.0.4:
merge2 "^1.3.0"
slash "^3.0.0"
+globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -6376,6 +6675,11 @@ globby@^9.2.0:
pify "^4.0.1"
slash "^2.0.0"
+globjoin@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
+ integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=
+
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
version "4.2.8"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
@@ -6424,6 +6728,11 @@ har-validator@~5.1.3:
ajv "^6.12.3"
har-schema "^2.0.0"
+hard-rejection@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
+ integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
+
harmony-reflect@^1.4.6:
version "1.6.2"
resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710"
@@ -6569,6 +6878,13 @@ hosted-git-info@^2.1.4:
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+hosted-git-info@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
+ integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
+ dependencies:
+ lru-cache "^6.0.0"
+
hpack.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
@@ -6659,6 +6975,16 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
+htmlparser2@^7.1.2:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5"
+ integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==
+ dependencies:
+ domelementtype "^2.0.1"
+ domhandler "^4.2.2"
+ domutils "^2.8.0"
+ entities "^3.0.1"
+
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
@@ -6808,6 +7134,11 @@ ignore@^4.0.3, ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+ignore@^5.0.5, ignore@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
+ integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+
ignore@^5.1.1, ignore@^5.1.4:
version "5.1.8"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
@@ -6843,6 +7174,11 @@ import-from@^2.1.0:
dependencies:
resolve-from "^3.0.0"
+import-lazy@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
+ integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
+
import-local@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
@@ -6864,6 +7200,11 @@ imurmurhash@^0.1.4:
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
indexes-of@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
@@ -6897,7 +7238,7 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-ini@^1.3.4:
+ini@^1.3.4, ini@^1.3.5:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
@@ -7074,6 +7415,13 @@ is-core-module@^2.2.0, is-core-module@^2.7.0:
dependencies:
has "^1.0.3"
+is-core-module@^2.5.0:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
+ integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
+ dependencies:
+ has "^1.0.3"
+
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -7169,6 +7517,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-language-code@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-language-code/-/is-language-code-3.1.0.tgz#b2386b49227e7010636f16d0c2c681ca40136ab5"
+ integrity sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA==
+ dependencies:
+ "@babel/runtime" "^7.14.0"
+
is-negative-zero@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
@@ -7217,7 +7572,7 @@ is-path-inside@^2.1.0:
dependencies:
path-is-inside "^1.0.2"
-is-plain-obj@^1.0.0:
+is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
@@ -7234,6 +7589,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
+is-plain-object@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
+ integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
+
is-potential-custom-element-name@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
@@ -7247,6 +7607,11 @@ is-regex@^1.0.4, is-regex@^1.1.4:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
+is-regexp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d"
+ integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==
+
is-resolvable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
@@ -7286,6 +7651,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0:
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+is-valid-glob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa"
+ integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=
+
is-weakref@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2"
@@ -8339,6 +8709,13 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.0.0, js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -8491,7 +8868,7 @@ json3@^3.3.3:
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
-json5@2.x, json5@^2.1.2:
+json5@2.x, json5@^2.1.2, json5@^2.1.3:
version "2.2.0"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
@@ -8510,6 +8887,16 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
+jsonc-eslint-parser@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2"
+ integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==
+ dependencies:
+ acorn "^8.5.0"
+ eslint-visitor-keys "^3.0.0"
+ espree "^9.0.0"
+ semver "^7.3.5"
+
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
@@ -8551,7 +8938,7 @@ kind-of@^5.0.0:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-kind-of@^6.0.0, kind-of@^6.0.2:
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -8561,6 +8948,11 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+known-css-properties@^0.24.0:
+ version "0.24.0"
+ resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.24.0.tgz#19aefd85003ae5698a5560d2b55135bf5432155c"
+ integrity sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==
+
launch-editor-middleware@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157"
@@ -8821,6 +9213,16 @@ map-cache@^0.2.2:
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+map-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-obj@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
+ integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
+
map-visit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
@@ -8828,6 +9230,11 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
+mathml-tag-names@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
+ integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
+
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -8868,6 +9275,24 @@ memory-fs@^0.5.0:
errno "^0.1.3"
readable-stream "^2.0.1"
+meow@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364"
+ integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==
+ dependencies:
+ "@types/minimist" "^1.2.0"
+ camelcase-keys "^6.2.2"
+ decamelize "^1.2.0"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "4.1.0"
+ normalize-package-data "^3.0.0"
+ read-pkg-up "^7.0.1"
+ redent "^3.0.0"
+ trim-newlines "^3.0.0"
+ type-fest "^0.18.0"
+ yargs-parser "^20.2.3"
+
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -8885,7 +9310,7 @@ merge-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-merge2@^1.2.3, merge2@^1.3.0:
+merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
@@ -8962,6 +9387,11 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+min-indent@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
+ integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+
mini-css-extract-plugin@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e"
@@ -8989,6 +9419,15 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
+minimist-options@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
+ integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+ kind-of "^6.0.3"
+
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
@@ -9032,11 +9471,6 @@ mkdirp@0.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
dependencies:
minimist "^1.2.5"
-moment@^2.19.2, moment@^2.29.1:
- version "2.29.1"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
- integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
-
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@@ -9101,6 +9535,11 @@ nan@^2.12.1:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
+nanoid@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
+ integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==
+
nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@@ -9271,6 +9710,16 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
+normalize-package-data@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
+ integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
+ dependencies:
+ hosted-git-info "^4.0.1"
+ is-core-module "^2.5.0"
+ semver "^7.3.4"
+ validate-npm-package-license "^3.0.1"
+
normalize-path@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379"
@@ -9293,6 +9742,11 @@ normalize-range@^0.1.2:
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
+normalize-selector@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03"
+ integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=
+
normalize-url@1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
@@ -9715,7 +10169,7 @@ parse5@5.1.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
-parse5@6.0.1, parse5@^6.0.1:
+parse5@6.0.1, parse5@^6.0.0, parse5@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
@@ -9989,6 +10443,15 @@ postcss-discard-overridden@^4.0.1:
dependencies:
postcss "^7.0.0"
+postcss-html@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-1.3.0.tgz#5b28b44a9cc8351cdba6ae1f26017c2303bd7642"
+ integrity sha512-ewbwd7OGW4dLsErtvZH9HpVMEcXnlhYSzKsr7MepGlOT8imHTIZ/+pdfEruLS+hTYapLTQAWDnoQcJpsYU4uRw==
+ dependencies:
+ htmlparser2 "^7.1.2"
+ postcss "^8.4.0"
+ postcss-safe-parser "^6.0.0"
+
postcss-load-config@^2.0.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a"
@@ -10007,6 +10470,11 @@ postcss-loader@^3.0.0:
postcss-load-config "^2.0.0"
schema-utils "^1.0.0"
+postcss-media-query-parser@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
+ integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=
+
postcss-merge-longhand@^4.0.11:
version "4.0.11"
resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
@@ -10212,6 +10680,21 @@ postcss-reduce-transforms@^4.0.2:
postcss "^7.0.0"
postcss-value-parser "^3.0.0"
+postcss-resolve-nested-selector@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e"
+ integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=
+
+postcss-safe-parser@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1"
+ integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==
+
+postcss-scss@^4.0.2, postcss-scss@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.3.tgz#36c23c19a804274e722e83a54d20b838ab4767ac"
+ integrity sha512-j4KxzWovfdHsyxwl1BxkUal/O4uirvHgdzMKS1aWJBAV0qh2qj5qAZqpeBfVUYGWv+4iK9Az7SPyZ4fyNju1uA==
+
postcss-selector-parser@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270"
@@ -10229,6 +10712,14 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
+postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9:
+ version "6.0.9"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f"
+ integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
postcss-svgo@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e"
@@ -10257,6 +10748,11 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
+postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6:
version "7.0.39"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
@@ -10265,6 +10761,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.3
picocolors "^0.2.1"
source-map "^0.6.1"
+postcss@^8.4.0, postcss@^8.4.6, postcss@^8.4.8:
+ version "8.4.8"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.8.tgz#dad963a76e82c081a0657d3a2f3602ce10c2e032"
+ integrity sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==
+ dependencies:
+ nanoid "^3.3.1"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -10485,6 +10990,11 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+quick-lru@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
+ integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -10606,6 +11116,14 @@ realpath-native@^1.1.0:
dependencies:
util.promisify "^1.0.0"
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
regenerate-unicode-properties@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326"
@@ -11045,7 +11563,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
+semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
@@ -11204,6 +11722,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f"
integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==
+signal-exit@^3.0.7:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+ integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
simple-swizzle@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
@@ -11303,6 +11826,11 @@ source-list-map@^2.0.0:
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
@@ -11327,16 +11855,16 @@ source-map-url@^0.4.0:
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
source-map@^0.5.0, source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
source-map@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
@@ -11391,6 +11919,11 @@ spdy@^4.0.2:
select-hose "^2.0.0"
spdy-transport "^3.0.0"
+specificity@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019"
+ integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==
+
split-string@^3.0.1, split-string@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
@@ -11542,7 +12075,7 @@ string-length@^4.0.1:
char-regex "^1.0.2"
strip-ansi "^6.0.0"
-string-width@^2.0.0:
+string-width@^2.0.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -11651,6 +12184,13 @@ strip-indent@^2.0.0:
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
+strip-indent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
+ integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
+ dependencies:
+ min-indent "^1.0.0"
+
strip-json-comments@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
@@ -11661,6 +12201,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+style-search@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
+ integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=
+
stylehacks@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
@@ -11670,6 +12215,112 @@ stylehacks@^4.0.0:
postcss "^7.0.0"
postcss-selector-parser "^3.0.0"
+stylelint-config-html@>=1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-html/-/stylelint-config-html-1.0.0.tgz#172acb996ee4c854e8c670fcff77ff0d98d3bec2"
+ integrity sha512-rKQUUWDpaYC7ybsS6tLxddjn6DxhjSIXybElSmcTyVQj3ExhmU3q+l41ktrlwHRyY0M5SkTkZiwngvYPYmsgSQ==
+
+stylelint-config-recommended-scss@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-5.0.2.tgz#193f483861c76a36ece24c52eb6baca4838f4a48"
+ integrity sha512-b14BSZjcwW0hqbzm9b0S/ScN2+3CO3O4vcMNOw2KGf8lfVSwJ4p5TbNEXKwKl1+0FMtgRXZj6DqVUe/7nGnuBg==
+ dependencies:
+ postcss-scss "^4.0.2"
+ stylelint-config-recommended "^6.0.0"
+ stylelint-scss "^4.0.0"
+
+stylelint-config-recommended-vue@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.3.0.tgz#a40f1efa5bff8bd3e2c1c58c3faacbe73b5b69ec"
+ integrity sha512-UEY/MZlBO2yiQdZoJm33trtqJ1MEDzBADhIAM0pTvfYbyXe5KwdbTtmALHETG1cXfDxuuUbJTvL9uENMy2Rjug==
+ dependencies:
+ semver "^7.3.5"
+ stylelint-config-html ">=1.0.0"
+ stylelint-config-recommended ">=6.0.0"
+
+stylelint-config-recommended@>=6.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz#7497372ae83ab7a6fffc18d7d7b424c6480ae15e"
+ integrity sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==
+
+stylelint-config-recommended@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz#fd2523a322836005ad9bf473d3e5534719c09f9d"
+ integrity sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==
+
+stylelint-config-standard-scss@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-3.0.0.tgz#dafc4fa5538d0ed833bf0a7d391e075683ffd96c"
+ integrity sha512-zt3ZbzIbllN1iCmc94e4pDxqpkzeR6CJo5DDXzltshuXr+82B8ylHyMMARNnUYrZH80B7wgY7UkKTYCFM0UUyw==
+ dependencies:
+ stylelint-config-recommended-scss "^5.0.2"
+ stylelint-config-standard "^24.0.0"
+
+stylelint-config-standard@^24.0.0:
+ version "24.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-24.0.0.tgz#6823f207ab997ae0b641f9a636d007cc44d77541"
+ integrity sha512-+RtU7fbNT+VlNbdXJvnjc3USNPZRiRVp/d2DxOF/vBDDTi0kH5RX2Ny6errdtZJH3boO+bmqIYEllEmok4jiuw==
+ dependencies:
+ stylelint-config-recommended "^6.0.0"
+
+stylelint-scss@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.1.0.tgz#39b808696f8152081163d970449257ff80b5c041"
+ integrity sha512-BNYTo7MMamhFOlcaAWp2dMpjg6hPyM/FFqfDIYzmYVLMmQJqc8lWRIiTqP4UX5bresj9Vo0dKC6odSh43VP2NA==
+ dependencies:
+ lodash "^4.17.21"
+ postcss-media-query-parser "^0.2.3"
+ postcss-resolve-nested-selector "^0.1.1"
+ postcss-selector-parser "^6.0.6"
+ postcss-value-parser "^4.1.0"
+
+stylelint@^14.5.3:
+ version "14.5.3"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.5.3.tgz#103b6670128ba3dea69fe3a1a07c4a5d3e0e3450"
+ integrity sha512-omHETL+kGHR+fCXFK1SkZD/A+emCP9esggAdWEl8GPjTNeyRYj+H6uetRDcU+7E451zwWiUYGVAX+lApsAZgsQ==
+ dependencies:
+ balanced-match "^2.0.0"
+ colord "^2.9.2"
+ cosmiconfig "^7.0.1"
+ css-functions-list "^3.0.1"
+ debug "^4.3.3"
+ execall "^2.0.0"
+ fast-glob "^3.2.11"
+ fastest-levenshtein "^1.0.12"
+ file-entry-cache "^6.0.1"
+ get-stdin "^8.0.0"
+ global-modules "^2.0.0"
+ globby "^11.1.0"
+ globjoin "^0.1.4"
+ html-tags "^3.1.0"
+ ignore "^5.2.0"
+ import-lazy "^4.0.0"
+ imurmurhash "^0.1.4"
+ is-plain-object "^5.0.0"
+ known-css-properties "^0.24.0"
+ mathml-tag-names "^2.1.3"
+ meow "^9.0.0"
+ micromatch "^4.0.4"
+ normalize-path "^3.0.0"
+ normalize-selector "^0.2.0"
+ picocolors "^1.0.0"
+ postcss "^8.4.6"
+ postcss-media-query-parser "^0.2.3"
+ postcss-resolve-nested-selector "^0.1.1"
+ postcss-safe-parser "^6.0.0"
+ postcss-selector-parser "^6.0.9"
+ postcss-value-parser "^4.2.0"
+ resolve-from "^5.0.0"
+ specificity "^0.4.1"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+ style-search "^0.1.0"
+ supports-hyperlinks "^2.2.0"
+ svg-tags "^1.0.0"
+ table "^6.8.0"
+ v8-compile-cache "^2.3.0"
+ write-file-atomic "^4.0.1"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -11703,7 +12354,7 @@ supports-color@^8.0.0:
dependencies:
has-flag "^4.0.0"
-supports-hyperlinks@^2.0.0:
+supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb"
integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==
@@ -11757,6 +12408,17 @@ table@^6.0.4:
string-width "^4.2.3"
strip-ansi "^6.0.1"
+table@^6.8.0:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca"
+ integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==
+ dependencies:
+ ajv "^8.0.1"
+ lodash.truncate "^4.4.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.3"
+ strip-ansi "^6.0.1"
+
tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
@@ -12000,6 +12662,11 @@ tr46@~0.0.3:
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
+trim-newlines@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
+ integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
+
tryer@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
@@ -12106,6 +12773,11 @@ type-detect@4.0.8:
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+type-fest@^0.18.0:
+ version "0.18.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
+ integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
+
type-fest@^0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
@@ -12364,7 +13036,7 @@ uuid@^8.3.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-v8-compile-cache@^2.0.3:
+v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
@@ -12426,6 +13098,20 @@ vue-apollo@^3.0.8:
serialize-javascript "^4.0.0"
throttle-debounce "^2.1.0"
+vue-cli-plugin-i18n@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/vue-cli-plugin-i18n/-/vue-cli-plugin-i18n-2.3.1.tgz#193b1e481a02e044d847392b3d070e1a3dec954e"
+ integrity sha512-1bNVZtLIAL9Pge8hiw986vixofyqF/tlgsqe4fF5JWn9c8xhsqVugEBuUeaYxevrE9efhhFk9mRmEDwBwQnbNg==
+ dependencies:
+ debug "^4.3.0"
+ deepmerge "^4.2.0"
+ dotenv "^8.2.0"
+ flat "^5.0.0"
+ rimraf "^3.0.0"
+ vue "^2.6.11"
+ vue-i18n "^8.17.0"
+ vue-i18n-extract "1.0.2"
+
vue-eslint-parser@^7.10.0:
version "7.11.0"
resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz#214b5dea961007fcffb2ee65b8912307628d0daf"
@@ -12439,6 +13125,19 @@ vue-eslint-parser@^7.10.0:
lodash "^4.17.21"
semver "^6.3.0"
+vue-eslint-parser@^8.0.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d"
+ integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==
+ dependencies:
+ debug "^4.3.2"
+ eslint-scope "^7.0.0"
+ eslint-visitor-keys "^3.1.0"
+ espree "^9.0.0"
+ esquery "^1.4.0"
+ lodash "^4.17.21"
+ semver "^7.3.5"
+
vue-functional-data-merge@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz#08a7797583b7f35680587f8a1d51d729aa1dc657"
@@ -12449,6 +13148,23 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
+vue-i18n-extract@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/vue-i18n-extract/-/vue-i18n-extract-1.0.2.tgz#0a136e12d1634d6799e187aad81a7003d02f67a5"
+ integrity sha512-+zwDKvle4KcfloXZnj5hF01ViKDiFr5RMx5507D7oyDXpSleRpekF5YHgZa/+Ra6Go68//z0Nya58J9tKFsCjw==
+ dependencies:
+ cli-table3 "^0.5.1"
+ dot-object "^1.7.1"
+ esm "^3.2.13"
+ glob "^7.1.3"
+ is-valid-glob "^1.0.0"
+ yargs "^13.2.2"
+
+vue-i18n@^8.17.0:
+ version "8.27.0"
+ resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.27.0.tgz#3e3b3ed2c107ccbd7f20dbdd7a96763a9990253e"
+ integrity sha512-SX35iJHL5PJ4Gfh0Mo/q0shyHiI2V6Zkh51c+k8E9O1RKv5BQyYrCxRzpvPrsIOJEnLaeiovet3dsUB0e/kDzw==
+
vue-i18n@^8.26.5:
version "8.26.5"
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.26.5.tgz#b61e994e7ae83564c6aebd004543156bbdc7c7e9"
@@ -12491,13 +13207,6 @@ vue-loader@^15.9.2:
vue-hot-reload-api "^2.3.0"
vue-style-loader "^4.1.0"
-vue-moment@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/vue-moment/-/vue-moment-4.1.0.tgz#092a8ff723a96c6f85a0a8e23ad30f0bf320f3b0"
- integrity sha512-Gzisqpg82ItlrUyiD9d0Kfru+JorW2o4mQOH06lEDZNgxci0tv/fua1Hl0bo4DozDV2JK1r52Atn/8QVCu8qQw==
- dependencies:
- moment "^2.19.2"
-
vue-router@^3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.3.tgz#041048053e336829d05dafacf6a8fb669a2e7999"
@@ -12524,11 +13233,6 @@ vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0:
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
-vue-toasted@^1.1.28:
- version "1.1.28"
- resolved "https://registry.yarnpkg.com/vue-toasted/-/vue-toasted-1.1.28.tgz#dbabb83acc89f7a9e8765815e491d79f0dc65c26"
- integrity sha512-UUzr5LX51UbbiROSGZ49GOgSzFxaMHK6L00JV8fir/CYNJCpIIvNZ5YmS4Qc8Y2+Z/4VVYRpeQL2UO0G800Raw==
-
vue@^2.6.11:
version "2.6.14"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235"
@@ -12835,7 +13539,7 @@ which-module@^2.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-which@^1.2.9, which@^1.3.0:
+which@^1.2.9, which@^1.3.0, which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -12912,6 +13616,14 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
+write-file-atomic@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f"
+ integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==
+ dependencies:
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.7"
+
ws@^5.2.0:
version "5.2.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d"
@@ -12971,6 +13683,20 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+yaml-eslint-parser@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz#01d4e4d992a820769ea85ef5fd526dfc20ebc6f5"
+ integrity sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==
+ dependencies:
+ eslint-visitor-keys "^3.0.0"
+ lodash "^4.17.21"
+ yaml "^1.10.2"
+
+yaml@^1.10.0, yaml@^1.10.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
yargs-parser@10.x:
version "10.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
@@ -12994,12 +13720,12 @@ yargs-parser@^18.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"
-yargs-parser@^20.2.2:
+yargs-parser@^20.2.2, yargs-parser@^20.2.3:
version "20.2.9"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-yargs@^13.3.0, yargs@^13.3.2:
+yargs@^13.2.2, yargs@^13.3.0, yargs@^13.3.2:
version "13.3.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
diff --git a/backend/.env.dist b/backend/.env.dist
index f38e31be5..b8a3d5dbe 100644
--- a/backend/.env.dist
+++ b/backend/.env.dist
@@ -1,36 +1,48 @@
+CONFIG_VERSION=v1.2022-03-18
+
+# Server
PORT=4000
JWT_SECRET=secret123
JWT_EXPIRES_IN=10m
GRAPHIQL=false
GDT_API_URL=https://gdt.gradido.net
+
+# Database
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=
DB_DATABASE=gradido_community
+TYPEORM_LOGGING_RELATIVE_PATH=typeorm.backend.log
-#EMAIL=true
-#EMAIL_USERNAME=
-#EMAIL_SENDER=
-#EMAIL_PASSWORD=
-#EMAIL_SMTP_URL=
-#EMAIL_SMTP_PORT=587
-#RESEND_TIME=1 minute, 60 => 1hour, 1440 (60 minutes * 24 hours) => 24 hours
-#RESEND_TIME=
-RESEND_TIME=10
+# Klicktipp
+KLICKTIPP=false
+KLICKTTIPP_API_URL=https://api.klicktipp.com
+KLICKTIPP_USER=gradido_test
+KLICKTIPP_PASSWORD=secret321
+KLICKTIPP_APIKEY_DE=SomeFakeKeyDE
+KLICKTIPP_APIKEY_EN=SomeFakeKeyEN
-#EMAIL_LINK_VERIFICATION=http://localhost/vue/checkEmail/$1
+# Community
+COMMUNITY_NAME=Gradido Entwicklung
+COMMUNITY_URL=http://localhost/
+COMMUNITY_REGISTER_URL=http://localhost/register
+COMMUNITY_DESCRIPTION=Die lokale Entwicklungsumgebung von Gradido.
-#KLICKTIPP_USER=
-#KLICKTIPP_PASSWORD=
-#KLICKTIPP_APIKEY_DE=
-#KLICKTIPP_APIKEY_EN=
-#KLICKTIPP=true
-COMMUNITY_NAME=
-COMMUNITY_URL=
-COMMUNITY_REGISTER_URL=
-COMMUNITY_DESCRIPTION=
+# Login Server
LOGIN_APP_SECRET=21ffbbc616fe
LOGIN_SERVER_KEY=a51ef8ac7ef1abf162fb7a65261acd7a
+# EMail
+EMAIL=false
+EMAIL_USERNAME=gradido_email
+EMAIL_SENDER=info@gradido.net
+EMAIL_PASSWORD=xxx
+EMAIL_SMTP_URL=gmail.com
+EMAIL_SMTP_PORT=587
+EMAIL_LINK_VERIFICATION=http://localhost/checkEmail/{optin}{code}
+EMAIL_LINK_SETPASSWORD=http://localhost/reset/{optin}
+EMAIL_CODE_VALID_TIME=10
+
+# Webhook
WEBHOOK_ELOPAGE_SECRET=secret
\ No newline at end of file
diff --git a/backend/.env.template b/backend/.env.template
new file mode 100644
index 000000000..454b25d3c
--- /dev/null
+++ b/backend/.env.template
@@ -0,0 +1,48 @@
+CONFIG_VERSION=$BACKEND_CONFIG_VERSION
+
+# Server
+JWT_SECRET=$JWT_SECRET
+JWT_EXPIRES_IN=10m
+GRAPHIQL=false
+GDT_API_URL=$GDT_API_URL
+
+# Database
+DB_HOST=localhost
+DB_PORT=3306
+DB_USER=$DB_USER
+DB_PASSWORD=$DB_PASSWORD
+DB_DATABASE=gradido_community
+TYPEORM_LOGGING_RELATIVE_PATH=$TYPEORM_LOGGING_RELATIVE_PATH
+
+# Klicktipp
+KLICKTIPP=$KLICKTIPP
+KLICKTTIPP_API_URL=https://api.klicktipp.com
+KLICKTIPP_USER=$KLICKTIPP_USER
+KLICKTIPP_PASSWORD=$KLICKTIPP_PASSWORD
+KLICKTIPP_APIKEY_DE=$KLICKTIPP_APIKEY_DE
+KLICKTIPP_APIKEY_EN=$KLICKTIPP_APIKEY_EN
+
+# Community
+COMMUNITY_NAME=$COMMUNITY_NAME
+COMMUNITY_URL=$COMMUNITY_URL
+COMMUNITY_REGISTER_URL=$COMMUNITY_REGISTER_URL
+COMMUNITY_DESCRIPTION=$COMMUNITY_DESCRIPTION
+
+# Login Server
+LOGIN_APP_SECRET=21ffbbc616fe
+LOGIN_SERVER_KEY=a51ef8ac7ef1abf162fb7a65261acd7a
+
+# EMail
+RESEND_TIME=10
+EMAIL=$EMAIL
+EMAIL_USERNAME=$EMAIL_USERNAME
+EMAIL_SENDER=$EMAIL_SENDER
+EMAIL_PASSWORD=$EMAIL_PASSWORD
+EMAIL_SMTP_URL=$EMAIL_SMTP_URL
+EMAIL_SMTP_PORT=587
+EMAIL_LINK_VERIFICATION=$EMAIL_LINK_VERIFICATION
+EMAIL_LINK_SETPASSWORD=$EMAIL_LINK_SETPASSWORD
+RESEND_TIME=10
+
+# Webhook
+WEBHOOK_ELOPAGE_SECRET=$WEBHOOK_ELOPAGE_SECRET
\ No newline at end of file
diff --git a/backend/.gitignore b/backend/.gitignore
index 90ee96052..147e82849 100644
--- a/backend/.gitignore
+++ b/backend/.gitignore
@@ -1,5 +1,6 @@
/node_modules/
/.env
+/.env.bak
/build/
package-json.lock
coverage
diff --git a/backend/jest.config.js b/backend/jest.config.js
index 9d99c68f6..6ab44002c 100644
--- a/backend/jest.config.js
+++ b/backend/jest.config.js
@@ -3,10 +3,20 @@ module.exports = {
verbose: true,
preset: 'ts-jest',
collectCoverage: true,
- collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**'],
+ collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**', '!src/seeds/**', '!build/**'],
+ setupFiles: ['
/test/testSetup.ts'],
+ modulePathIgnorePatterns: ['/build/'],
moduleNameMapper: {
- '@entity/(.*)': '/../database/build/entity/$1',
- // This is hack to fix a problem with the library `ts-mysql-migrate` which does differentiate between its ts/js state
+ '@/(.*)': '/src/$1',
+ '@model/(.*)': '/src/graphql/model/$1',
+ '@arg/(.*)': '/src/graphql/arg/$1',
+ '@enum/(.*)': '/src/graphql/enum/$1',
+ '@repository/(.*)': '/src/typeorm/repository/$1',
+ '@test/(.*)': '/test/$1',
+ '@entity/(.*)':
+ process.env.NODE_ENV === 'development'
+ ? '/../database/entity/$1'
+ : '/../database/build/entity/$1',
'@dbTools/(.*)':
process.env.NODE_ENV === 'development'
? '/../database/src/$1'
diff --git a/backend/package.json b/backend/package.json
index c9314f0fd..3ce04bded 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "gradido-backend",
- "version": "1.5.1",
+ "version": "1.6.6",
"description": "Gradido unified backend providing an API-Service for Gradido Transactions",
"main": "src/index.ts",
"repository": "https://github.com/gradido/gradido/backend",
@@ -10,38 +10,39 @@
"scripts": {
"build": "tsc --build",
"clean": "tsc --build --clean",
- "start": "node build/index.js",
- "dev": "nodemon -w src --ext ts --exec ts-node src/index.ts",
- "lint": "eslint . --ext .js,.ts",
- "CI_worklfow_test": "jest --runInBand --coverage ",
- "test": "NODE_ENV=development jest --runInBand --coverage "
+ "start": "TZ=UTC TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js",
+ "dev": "TZ=UTC nodemon -w src --ext ts --exec ts-node -r tsconfig-paths/register src/index.ts",
+ "lint": "eslint --max-warnings=0 --ext .js,.ts .",
+ "test": "TZ=UTC NODE_ENV=development jest --runInBand --coverage --forceExit --detectOpenHandles",
+ "seed": "TZ=UTC ts-node -r tsconfig-paths/register src/seeds/index.ts"
},
"dependencies": {
"@types/jest": "^27.0.2",
+ "@types/lodash.clonedeep": "^4.5.6",
+ "apollo-log": "^1.1.0",
"apollo-server-express": "^2.25.2",
"apollo-server-testing": "^2.25.2",
"axios": "^0.21.1",
- "body-parser": "^1.19.0",
"class-validator": "^0.13.1",
"cors": "^2.8.5",
+ "decimal.js-light": "^2.5.1",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"graphql": "^15.5.1",
"jest": "^27.2.4",
"jsonwebtoken": "^8.5.1",
- "module-alias": "^2.2.2",
- "moment": "^2.29.1",
+ "lodash.clonedeep": "^4.5.0",
"mysql2": "^2.3.0",
"nodemailer": "^6.6.5",
"random-bigint": "^0.0.1",
"reflect-metadata": "^0.1.13",
"sodium-native": "^3.3.0",
"ts-jest": "^27.0.5",
- "type-graphql": "^1.1.1",
- "typeorm": "^0.2.38"
+ "type-graphql": "^1.1.1"
},
"devDependencies": {
"@types/express": "^4.17.12",
+ "@types/faker": "^5.5.9",
"@types/jsonwebtoken": "^8.5.2",
"@types/node": "^16.10.3",
"@types/nodemailer": "^6.4.4",
@@ -54,13 +55,11 @@
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-promise": "^5.1.0",
+ "faker": "^5.5.3",
"nodemon": "^2.0.7",
"prettier": "^2.3.1",
"ts-node": "^10.0.0",
+ "tsconfig-paths": "^3.14.0",
"typescript": "^4.3.4"
- },
- "_moduleAliases": {
- "@entity": "../database/build/entity",
- "@dbTools": "../database/build/src"
}
}
diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts
index 544b39d97..824d40af2 100644
--- a/backend/src/apis/KlicktippController.ts
+++ b/backend/src/apis/KlicktippController.ts
@@ -1,11 +1,11 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { KlicktippConnector } from './klicktippConnector'
-import CONFIG from '../config'
+import CONFIG from '@/config'
const klicktippConnector = new KlicktippConnector()
-export const signIn = async (
+export const klicktippSignIn = async (
email: string,
language: string,
firstName?: string,
diff --git a/backend/src/auth/INALIENABLE_RIGHTS.ts b/backend/src/auth/INALIENABLE_RIGHTS.ts
index 58a81ce52..348cd5b20 100644
--- a/backend/src/auth/INALIENABLE_RIGHTS.ts
+++ b/backend/src/auth/INALIENABLE_RIGHTS.ts
@@ -7,5 +7,6 @@ export const INALIENABLE_RIGHTS = [
RIGHTS.CREATE_USER,
RIGHTS.SEND_RESET_PASSWORD_EMAIL,
RIGHTS.SET_PASSWORD,
- RIGHTS.CHECK_USERNAME,
+ RIGHTS.QUERY_TRANSACTION_LINK,
+ RIGHTS.QUERY_OPT_IN,
]
diff --git a/backend/src/auth/JWT.ts b/backend/src/auth/JWT.ts
index 06c6507b8..e32e68223 100644
--- a/backend/src/auth/JWT.ts
+++ b/backend/src/auth/JWT.ts
@@ -1,5 +1,5 @@
import jwt from 'jsonwebtoken'
-import CONFIG from '../config/'
+import CONFIG from '@/config/'
import { CustomJwtPayload } from './CustomJwtPayload'
export const decode = (token: string): CustomJwtPayload | null => {
diff --git a/backend/src/auth/RIGHTS.ts b/backend/src/auth/RIGHTS.ts
index 8988620d7..f40088779 100644
--- a/backend/src/auth/RIGHTS.ts
+++ b/backend/src/auth/RIGHTS.ts
@@ -16,9 +16,14 @@ export enum RIGHTS {
CREATE_USER = 'CREATE_USER',
SEND_RESET_PASSWORD_EMAIL = 'SEND_RESET_PASSWORD_EMAIL',
SET_PASSWORD = 'SET_PASSWORD',
+ QUERY_OPT_IN = 'QUERY_OPT_IN',
UPDATE_USER_INFOS = 'UPDATE_USER_INFOS',
- CHECK_USERNAME = 'CHECK_USERNAME',
HAS_ELOPAGE = 'HAS_ELOPAGE',
+ CREATE_TRANSACTION_LINK = 'CREATE_TRANSACTION_LINK',
+ DELETE_TRANSACTION_LINK = 'DELETE_TRANSACTION_LINK',
+ QUERY_TRANSACTION_LINK = 'QUERY_TRANSACTION_LINK',
+ REDEEM_TRANSACTION_LINK = 'REDEEM_TRANSACTION_LINK',
+ LIST_TRANSACTION_LINKS = 'LIST_TRANSACTION_LINKS',
// Admin
SEARCH_USERS = 'SEARCH_USERS',
CREATE_PENDING_CREATION = 'CREATE_PENDING_CREATION',
@@ -26,4 +31,8 @@ export enum RIGHTS {
SEARCH_PENDING_CREATION = 'SEARCH_PENDING_CREATION',
DELETE_PENDING_CREATION = 'DELETE_PENDING_CREATION',
CONFIRM_PENDING_CREATION = 'CONFIRM_PENDING_CREATION',
+ SEND_ACTIVATION_EMAIL = 'SEND_ACTIVATION_EMAIL',
+ DELETE_USER = 'DELETE_USER',
+ UNDELETE_USER = 'UNDELETE_USER',
+ CREATION_TRANSACTION_LIST = 'CREATION_TRANSACTION_LIST',
}
diff --git a/backend/src/auth/ROLES.ts b/backend/src/auth/ROLES.ts
index ada6a2cef..82c689848 100644
--- a/backend/src/auth/ROLES.ts
+++ b/backend/src/auth/ROLES.ts
@@ -18,6 +18,10 @@ export const ROLE_USER = new Role('user', [
RIGHTS.LOGOUT,
RIGHTS.UPDATE_USER_INFOS,
RIGHTS.HAS_ELOPAGE,
+ RIGHTS.CREATE_TRANSACTION_LINK,
+ RIGHTS.DELETE_TRANSACTION_LINK,
+ RIGHTS.REDEEM_TRANSACTION_LINK,
+ RIGHTS.LIST_TRANSACTION_LINKS,
])
export const ROLE_ADMIN = new Role('admin', Object.values(RIGHTS)) // all rights
diff --git a/backend/src/config/index.test.ts b/backend/src/config/index.test.ts
new file mode 100644
index 000000000..3c4c7865e
--- /dev/null
+++ b/backend/src/config/index.test.ts
@@ -0,0 +1,9 @@
+import CONFIG from './index'
+
+describe('config/index', () => {
+ describe('decay start block', () => {
+ it('has the correct date set', () => {
+ expect(CONFIG.DECAY_START_TIME).toEqual(new Date('2021-05-13 17:46:31'))
+ })
+ })
+})
diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts
index 88d07737c..dcfea2bdb 100644
--- a/backend/src/config/index.ts
+++ b/backend/src/config/index.ts
@@ -1,8 +1,24 @@
// ATTENTION: DO NOT PUT ANY SECRETS IN HERE (or the .env)
import dotenv from 'dotenv'
+import Decimal from 'decimal.js-light'
dotenv.config()
+Decimal.set({
+ precision: 25,
+ rounding: Decimal.ROUND_HALF_UP,
+})
+
+const constants = {
+ DB_VERSION: '0033-add_referrer_id',
+ DECAY_START_TIME: new Date('2021-05-13 17:46:31'), // GMT+0
+ CONFIG_VERSION: {
+ DEFAULT: 'DEFAULT',
+ EXPECTED: 'v1.2022-03-18',
+ CURRENT: '',
+ },
+}
+
const server = {
PORT: process.env.PORT || 4000,
JWT_SECRET: process.env.JWT_SECRET || 'secret123',
@@ -18,6 +34,7 @@ const database = {
DB_USER: process.env.DB_USER || 'root',
DB_PASSWORD: process.env.DB_PASSWORD || '',
DB_DATABASE: process.env.DB_DATABASE || 'gradido_community',
+ TYPEORM_LOGGING_RELATIVE_PATH: process.env.TYPEORM_LOGGING_RELATIVE_PATH || 'typeorm.backend.log',
}
const klicktipp = {
@@ -31,8 +48,8 @@ const klicktipp = {
const community = {
COMMUNITY_NAME: process.env.COMMUNITY_NAME || 'Gradido Entwicklung',
- COMMUNITY_URL: process.env.COMMUNITY_URL || 'http://localhost/vue/',
- COMMUNITY_REGISTER_URL: process.env.COMMUNITY_REGISTER_URL || 'http://localhost/vue/register',
+ COMMUNITY_URL: process.env.COMMUNITY_URL || 'http://localhost/',
+ COMMUNITY_REGISTER_URL: process.env.COMMUNITY_REGISTER_URL || 'http://localhost/register',
COMMUNITY_DESCRIPTION:
process.env.COMMUNITY_DESCRIPTION || 'Die lokale Entwicklungsumgebung von Gradido.',
}
@@ -42,7 +59,6 @@ const loginServer = {
LOGIN_SERVER_KEY: process.env.LOGIN_SERVER_KEY || 'a51ef8ac7ef1abf162fb7a65261acd7a',
}
-const resendTime = parseInt(process.env.RESEND_TIME ? process.env.RESEND_TIME : 'null')
const email = {
EMAIL: process.env.EMAIL === 'true' || false,
EMAIL_USERNAME: process.env.EMAIL_USERNAME || 'gradido_email',
@@ -51,19 +67,36 @@ const email = {
EMAIL_SMTP_URL: process.env.EMAIL_SMTP_URL || 'gmail.com',
EMAIL_SMTP_PORT: process.env.EMAIL_SMTP_PORT || '587',
EMAIL_LINK_VERIFICATION:
- process.env.EMAIL_LINK_VERIFICATION || 'http://localhost/vue/checkEmail/$1',
- EMAIL_LINK_SETPASSWORD: process.env.EMAIL_LINK_SETPASSWORD || 'http://localhost/vue/reset/$1',
- RESEND_TIME: isNaN(resendTime) ? 10 : resendTime,
+ process.env.EMAIL_LINK_VERIFICATION || 'http://localhost/checkEmail/{optin}{code}',
+ EMAIL_LINK_SETPASSWORD:
+ process.env.EMAIL_LINK_SETPASSWORD || 'http://localhost/reset-password/{optin}',
+ EMAIL_CODE_VALID_TIME: process.env.EMAIL_CODE_VALID_TIME
+ ? parseInt(process.env.EMAIL_CODE_VALID_TIME) || 10
+ : 10,
}
const webhook = {
+ // Elopage
WEBHOOK_ELOPAGE_SECRET: process.env.WEBHOOK_ELOPAGE_SECRET || 'secret',
}
// This is needed by graphql-directive-auth
process.env.APP_SECRET = server.JWT_SECRET
+// Check config version
+constants.CONFIG_VERSION.CURRENT = process.env.CONFIG_VERSION || constants.CONFIG_VERSION.DEFAULT
+if (
+ ![constants.CONFIG_VERSION.EXPECTED, constants.CONFIG_VERSION.DEFAULT].includes(
+ constants.CONFIG_VERSION.CURRENT,
+ )
+) {
+ throw new Error(
+ `Fatal: Config Version incorrect - expected "${constants.CONFIG_VERSION.EXPECTED}" or "${constants.CONFIG_VERSION.DEFAULT}", but found "${constants.CONFIG_VERSION.CURRENT}"`,
+ )
+}
+
const CONFIG = {
+ ...constants,
...server,
...database,
...klicktipp,
diff --git a/backend/src/config/mnemonic.uncompressed_buffer13116.txt b/backend/src/config/mnemonic.uncompressed_buffer13116.txt
new file mode 100644
index 000000000..8eceb1e2f
--- /dev/null
+++ b/backend/src/config/mnemonic.uncompressed_buffer13116.txt
@@ -0,0 +1 @@
+abandon,ability,able,about,above,absent,absorb,abstract,absurd,abuse,access,accident,account,accuse,achieve,acid,acoustic,acquire,across,act,action,actor,actress,actual,adapt,add,addict,address,adjust,admit,adult,advance,advice,aerobic,affair,afford,afraid,again,age,agent,agree,ahead,aim,air,airport,aisle,alarm,album,alcohol,alert,alien,all,alley,allow,almost,alone,alpha,already,also,alter,always,amateur,amazing,among,amount,amused,analyst,anchor,ancient,anger,angle,angry,animal,ankle,announce,annual,another,answer,antenna,antique,anxiety,any,apart,apology,appear,apple,approve,april,arch,arctic,area,arena,argue,arm,armed,armor,army,around,arrange,arrest,arrive,arrow,art,artefact,artist,artwork,ask,aspect,assault,asset,assist,assume,asthma,athlete,atom,attack,attend,attitude,attract,auction,audit,august,aunt,author,auto,autumn,average,avocado,avoid,awake,aware,away,awesome,awful,awkward,axis,baby,bachelor,bacon,badge,bag,balance,balcony,ball,bamboo,banana,banner,bar,barely,bargain,barrel,base,basic,basket,battle,beach,bean,beauty,because,become,beef,before,begin,behave,behind,believe,below,belt,bench,benefit,best,betray,better,between,beyond,bicycle,bid,bike,bind,biology,bird,birth,bitter,black,blade,blame,blanket,blast,bleak,bless,blind,blood,blossom,blouse,blue,blur,blush,board,boat,body,boil,bomb,bone,bonus,book,boost,border,boring,borrow,boss,bottom,bounce,box,boy,bracket,brain,brand,brass,brave,bread,breeze,brick,bridge,brief,bright,bring,brisk,broccoli,broken,bronze,broom,brother,brown,brush,bubble,buddy,budget,buffalo,build,bulb,bulk,bullet,bundle,bunker,burden,burger,burst,bus,business,busy,butter,buyer,buzz,cabbage,cabin,cable,cactus,cage,cake,call,calm,camera,camp,can,canal,cancel,candy,cannon,canoe,canvas,canyon,capable,capital,captain,car,carbon,card,cargo,carpet,carry,cart,case,cash,casino,castle,casual,cat,catalog,catch,category,cattle,caught,cause,caution,cave,ceiling,celery,cement,census,century,cereal,certain,chair,chalk,champion,change,chaos,chapter,charge,chase,chat,cheap,check,cheese,chef,cherry,chest,chicken,chief,child,chimney,choice,choose,chronic,chuckle,chunk,churn,cigar,cinnamon,circle,citizen,city,civil,claim,clap,clarify,claw,clay,clean,clerk,clever,click,client,cliff,climb,clinic,clip,clock,clog,close,cloth,cloud,clown,club,clump,cluster,clutch,coach,coast,coconut,code,coffee,coil,coin,collect,color,column,combine,come,comfort,comic,common,company,concert,conduct,confirm,congress,connect,consider,control,convince,cook,cool,copper,copy,coral,core,corn,correct,cost,cotton,couch,country,couple,course,cousin,cover,coyote,crack,cradle,craft,cram,crane,crash,crater,crawl,crazy,cream,credit,creek,crew,cricket,crime,crisp,critic,crop,cross,crouch,crowd,crucial,cruel,cruise,crumble,crunch,crush,cry,crystal,cube,culture,cup,cupboard,curious,current,curtain,curve,cushion,custom,cute,cycle,dad,damage,damp,dance,danger,daring,dash,daughter,dawn,day,deal,debate,debris,decade,december,decide,decline,decorate,decrease,deer,defense,define,defy,degree,delay,deliver,demand,demise,denial,dentist,deny,depart,depend,deposit,depth,deputy,derive,describe,desert,design,desk,despair,destroy,detail,detect,develop,device,devote,diagram,dial,diamond,diary,dice,diesel,diet,differ,digital,dignity,dilemma,dinner,dinosaur,direct,dirt,disagree,discover,disease,dish,dismiss,disorder,display,distance,divert,divide,divorce,dizzy,doctor,document,dog,doll,dolphin,domain,donate,donkey,donor,door,dose,double,dove,draft,dragon,drama,drastic,draw,dream,dress,drift,drill,drink,drip,drive,drop,drum,dry,duck,dumb,dune,during,dust,dutch,duty,dwarf,dynamic,eager,eagle,early,earn,earth,easily,east,easy,echo,ecology,economy,edge,edit,educate,effort,egg,eight,either,elbow,elder,electric,elegant,element,elephant,elevator,elite,else,embark,embody,embrace,emerge,emotion,employ,empower,empty,enable,enact,end,endless,endorse,enemy,energy,enforce,engage,engine,enhance,enjoy,enlist,enough,enrich,enroll,ensure,enter,entire,entry,envelope,episode,equal,equip,era,erase,erode,erosion,error,erupt,escape,essay,essence,estate,eternal,ethics,evidence,evil,evoke,evolve,exact,example,excess,exchange,excite,exclude,excuse,execute,exercise,exhaust,exhibit,exile,exist,exit,exotic,expand,expect,expire,explain,expose,express,extend,extra,eye,eyebrow,fabric,face,faculty,fade,faint,faith,fall,false,fame,family,famous,fan,fancy,fantasy,farm,fashion,fat,fatal,father,fatigue,fault,favorite,feature,february,federal,fee,feed,feel,female,fence,festival,fetch,fever,few,fiber,fiction,field,figure,file,film,filter,final,find,fine,finger,finish,fire,firm,first,fiscal,fish,fit,fitness,fix,flag,flame,flash,flat,flavor,flee,flight,flip,float,flock,floor,flower,fluid,flush,fly,foam,focus,fog,foil,fold,follow,food,foot,force,forest,forget,fork,fortune,forum,forward,fossil,foster,found,fox,fragile,frame,frequent,fresh,friend,fringe,frog,front,frost,frown,frozen,fruit,fuel,fun,funny,furnace,fury,future,gadget,gain,galaxy,gallery,game,gap,garage,garbage,garden,garlic,garment,gas,gasp,gate,gather,gauge,gaze,general,genius,genre,gentle,genuine,gesture,ghost,giant,gift,giggle,ginger,giraffe,girl,give,glad,glance,glare,glass,glide,glimpse,globe,gloom,glory,glove,glow,glue,goat,goddess,gold,good,goose,gorilla,gospel,gossip,govern,gown,grab,grace,grain,grant,grape,grass,gravity,great,green,grid,grief,grit,grocery,group,grow,grunt,guard,guess,guide,guilt,guitar,gun,gym,habit,hair,half,hammer,hamster,hand,happy,harbor,hard,harsh,harvest,hat,have,hawk,hazard,head,health,heart,heavy,hedgehog,height,hello,helmet,help,hen,hero,hidden,high,hill,hint,hip,hire,history,hobby,hockey,hold,hole,holiday,hollow,home,honey,hood,hope,horn,horror,horse,hospital,host,hotel,hour,hover,hub,huge,human,humble,humor,hundred,hungry,hunt,hurdle,hurry,hurt,husband,hybrid,ice,icon,idea,identify,idle,ignore,ill,illegal,illness,image,imitate,immense,immune,impact,impose,improve,impulse,inch,include,income,increase,index,indicate,indoor,industry,infant,inflict,inform,inhale,inherit,initial,inject,injury,inmate,inner,innocent,input,inquiry,insane,insect,inside,inspire,install,intact,interest,into,invest,invite,involve,iron,island,isolate,issue,item,ivory,jacket,jaguar,jar,jazz,jealous,jeans,jelly,jewel,job,join,joke,journey,joy,judge,juice,jump,jungle,junior,junk,just,kangaroo,keen,keep,ketchup,key,kick,kid,kidney,kind,kingdom,kiss,kit,kitchen,kite,kitten,kiwi,knee,knife,knock,know,lab,label,labor,ladder,lady,lake,lamp,language,laptop,large,later,latin,laugh,laundry,lava,law,lawn,lawsuit,layer,lazy,leader,leaf,learn,leave,lecture,left,leg,legal,legend,leisure,lemon,lend,length,lens,leopard,lesson,letter,level,liar,liberty,library,license,life,lift,light,like,limb,limit,link,lion,liquid,list,little,live,lizard,load,loan,lobster,local,lock,logic,lonely,long,loop,lottery,loud,lounge,love,loyal,lucky,luggage,lumber,lunar,lunch,luxury,lyrics,machine,mad,magic,magnet,maid,mail,main,major,make,mammal,man,manage,mandate,mango,mansion,manual,maple,marble,march,margin,marine,market,marriage,mask,mass,master,match,material,math,matrix,matter,maximum,maze,meadow,mean,measure,meat,mechanic,medal,media,melody,melt,member,memory,mention,menu,mercy,merge,merit,merry,mesh,message,metal,method,middle,midnight,milk,million,mimic,mind,minimum,minor,minute,miracle,mirror,misery,miss,mistake,mix,mixed,mixture,mobile,model,modify,mom,moment,monitor,monkey,monster,month,moon,moral,more,morning,mosquito,mother,motion,motor,mountain,mouse,move,movie,much,muffin,mule,multiply,muscle,museum,mushroom,music,must,mutual,myself,mystery,myth,naive,name,napkin,narrow,nasty,nation,nature,near,neck,need,negative,neglect,neither,nephew,nerve,nest,net,network,neutral,never,news,next,nice,night,noble,noise,nominee,noodle,normal,north,nose,notable,note,nothing,notice,novel,now,nuclear,number,nurse,nut,oak,obey,object,oblige,obscure,observe,obtain,obvious,occur,ocean,october,odor,off,offer,office,often,oil,okay,old,olive,olympic,omit,once,one,onion,online,only,open,opera,opinion,oppose,option,orange,orbit,orchard,order,ordinary,organ,orient,original,orphan,ostrich,other,outdoor,outer,output,outside,oval,oven,over,own,owner,oxygen,oyster,ozone,pact,paddle,page,pair,palace,palm,panda,panel,panic,panther,paper,parade,parent,park,parrot,party,pass,patch,path,patient,patrol,pattern,pause,pave,payment,peace,peanut,pear,peasant,pelican,pen,penalty,pencil,people,pepper,perfect,permit,person,pet,phone,photo,phrase,physical,piano,picnic,picture,piece,pig,pigeon,pill,pilot,pink,pioneer,pipe,pistol,pitch,pizza,place,planet,plastic,plate,play,please,pledge,pluck,plug,plunge,poem,poet,point,polar,pole,police,pond,pony,pool,popular,portion,position,possible,post,potato,pottery,poverty,powder,power,practice,praise,predict,prefer,prepare,present,pretty,prevent,price,pride,primary,print,priority,prison,private,prize,problem,process,produce,profit,program,project,promote,proof,property,prosper,protect,proud,provide,public,pudding,pull,pulp,pulse,pumpkin,punch,pupil,puppy,purchase,purity,purpose,purse,push,put,puzzle,pyramid,quality,quantum,quarter,question,quick,quit,quiz,quote,rabbit,raccoon,race,rack,radar,radio,rail,rain,raise,rally,ramp,ranch,random,range,rapid,rare,rate,rather,raven,raw,razor,ready,real,reason,rebel,rebuild,recall,receive,recipe,record,recycle,reduce,reflect,reform,refuse,region,regret,regular,reject,relax,release,relief,rely,remain,remember,remind,remove,render,renew,rent,reopen,repair,repeat,replace,report,require,rescue,resemble,resist,resource,response,result,retire,retreat,return,reunion,reveal,review,reward,rhythm,rib,ribbon,rice,rich,ride,ridge,rifle,right,rigid,ring,riot,ripple,risk,ritual,rival,river,road,roast,robot,robust,rocket,romance,roof,rookie,room,rose,rotate,rough,round,route,royal,rubber,rude,rug,rule,run,runway,rural,sad,saddle,sadness,safe,sail,salad,salmon,salon,salt,salute,same,sample,sand,satisfy,satoshi,sauce,sausage,save,say,scale,scan,scare,scatter,scene,scheme,school,science,scissors,scorpion,scout,scrap,screen,script,scrub,sea,search,season,seat,second,secret,section,security,seed,seek,segment,select,sell,seminar,senior,sense,sentence,series,service,session,settle,setup,seven,shadow,shaft,shallow,share,shed,shell,sheriff,shield,shift,shine,ship,shiver,shock,shoe,shoot,shop,short,shoulder,shove,shrimp,shrug,shuffle,shy,sibling,sick,side,siege,sight,sign,silent,silk,silly,silver,similar,simple,since,sing,siren,sister,situate,six,size,skate,sketch,ski,skill,skin,skirt,skull,slab,slam,sleep,slender,slice,slide,slight,slim,slogan,slot,slow,slush,small,smart,smile,smoke,smooth,snack,snake,snap,sniff,snow,soap,soccer,social,sock,soda,soft,solar,soldier,solid,solution,solve,someone,song,soon,sorry,sort,soul,sound,soup,source,south,space,spare,spatial,spawn,speak,special,speed,spell,spend,sphere,spice,spider,spike,spin,spirit,split,spoil,sponsor,spoon,sport,spot,spray,spread,spring,spy,square,squeeze,squirrel,stable,stadium,staff,stage,stairs,stamp,stand,start,state,stay,steak,steel,stem,step,stereo,stick,still,sting,stock,stomach,stone,stool,story,stove,strategy,street,strike,strong,struggle,student,stuff,stumble,style,subject,submit,subway,success,such,sudden,suffer,sugar,suggest,suit,summer,sun,sunny,sunset,super,supply,supreme,sure,surface,surge,surprise,surround,survey,suspect,sustain,swallow,swamp,swap,swarm,swear,sweet,swift,swim,swing,switch,sword,symbol,symptom,syrup,system,table,tackle,tag,tail,talent,talk,tank,tape,target,task,taste,tattoo,taxi,teach,team,tell,ten,tenant,tennis,tent,term,test,text,thank,that,theme,then,theory,there,they,thing,this,thought,three,thrive,throw,thumb,thunder,ticket,tide,tiger,tilt,timber,time,tiny,tip,tired,tissue,title,toast,tobacco,today,toddler,toe,together,toilet,token,tomato,tomorrow,tone,tongue,tonight,tool,tooth,top,topic,topple,torch,tornado,tortoise,toss,total,tourist,toward,tower,town,toy,track,trade,traffic,tragic,train,transfer,trap,trash,travel,tray,treat,tree,trend,trial,tribe,trick,trigger,trim,trip,trophy,trouble,truck,true,truly,trumpet,trust,truth,try,tube,tuition,tumble,tuna,tunnel,turkey,turn,turtle,twelve,twenty,twice,twin,twist,two,type,typical,ugly,umbrella,unable,unaware,uncle,uncover,under,undo,unfair,unfold,unhappy,uniform,unique,unit,universe,unknown,unlock,until,unusual,unveil,update,upgrade,uphold,upon,upper,upset,urban,urge,usage,use,used,useful,useless,usual,utility,vacant,vacuum,vague,valid,valley,valve,van,vanish,vapor,various,vast,vault,vehicle,velvet,vendor,venture,venue,verb,verify,version,very,vessel,veteran,viable,vibrant,vicious,victory,video,view,village,vintage,violin,virtual,virus,visa,visit,visual,vital,vivid,vocal,voice,void,volcano,volume,vote,voyage,wage,wagon,wait,walk,wall,walnut,want,warfare,warm,warrior,wash,wasp,waste,water,wave,way,wealth,weapon,wear,weasel,weather,web,wedding,weekend,weird,welcome,west,wet,whale,what,wheat,wheel,when,where,whip,whisper,wide,width,wife,wild,will,win,window,wine,wing,wink,winner,winter,wire,wisdom,wise,wish,witness,wolf,woman,wonder,wood,wool,word,work,world,worry,worth,wrap,wreck,wrestle,wrist,write,wrong,yard,year,yellow,you,young,youth,zebra,zero,zone,zoo,
\ No newline at end of file
diff --git a/backend/src/config/mnemonic.words_ulf.encoding.txt b/backend/src/config/mnemonic.words_ulf.encoding.txt
deleted file mode 100644
index 1be83cc2e..000000000
--- a/backend/src/config/mnemonic.words_ulf.encoding.txt
+++ /dev/null
@@ -1,2048 +0,0 @@
-Monumental
-Volksbank
-Beeren
-huschen
-leer
-Haft
-saagut
-Positiv
-daran
-solide
-dauerhaft
-zahlungsfähig
-beinhalten
-weglassen
-Ausmaß
-irrtümlich
-Impuls
-darüber
-Abriss
-setzten
-Herkunft
-manipulierbar
-anfängt
-anliegen
-Mutter
-Beobachter
-Zeichner
-dran
-genug
-Medikament
-Tanten
-behindern
-Johannes
-Rand
-Illusion
-anzuwenden
-Fehler
-erniedrigen
-gehören
-Güte
-unangenehm
-Horst
-Koordination
-weltweit
-geprägt
-unerlässlich
-einig
-mitbringen
-Dieb
-dann
-Karriere
-Ethik
-dich
-Ursachen
-beglücken
-Wahl
-dermaßen
-spritzen
-erbittert
-Maler
-täglich
-Wohlstand
-hübsch
-Klarheit
-voneinander
-berühmt
-Iris
-plausibel
-verlagern
-Lauf
-Foyer
-Idol
-spreizen
-Hölderlin
-Grenze
-Code
-Dogma
-langfristig
-Urzustand
-verursacht
-Fasching
-Finger
-König
-barbarisch
-einbringen
-Disziplin
-angreifen
-speichern
-Urheberrecht
-ermorden
-Diana
-Auswirkung
-beginnen
-kooperativ
-Ahnung
-allen
-bisschen
-durften
-Prostitution
-Strahlen
-Umschwung
-Foto
-taten
-Mechanismus
-Urvertrauen
-Chef
-feminin
-nirgendwo
-Absatzmarkt
-welches
-Entwicklung
-gearbeitet
-erblühen
-umtauschen
-Aufklärung
-online
-produktiv
-Pest
-Coach
-Anblick
-ursprünglich
-schon
-solange
-eventuell
-Tatsache
-erforderlich
-Buch
-derartig
-werden
-auseinander
-halten
-Maurer
-Himmel
-Loch
-Forum
-Kluft
-aufbauen
-bricht
-permanent
-saugen
-exponential
-Fetzen
-Mord
-unausweichlich
-untrennbar
-skeptisch
-geschützt
-Gebäude
-Butter
-bezeichnet
-Daunen
-Journalist
-ehrgeizig
-System
-Zugriff
-Anwalt
-Krone
-ankommt
-zulassen
-Stufenplan
-Raum
-Sanktion
-Währung
-Tradition
-Money
-dafür
-Gruppe
-solch
-geben
-geholfen
-frei
-Rahmen
-Rasen
-feindlich
-Wirklichkeit
-Unheil
-luden
-Ausgleich
-leugnen
-erklärt
-Vater
-Ingenieur
-Erfahrung
-Stil
-dörren
-wozu
-befassen
-gemäß
-Apotheke
-Vegan
-simultan
-wehen
-gang
-immateriell
-Wilhelm
-fertig
-kennen
-korrigieren
-Jahr
-Industrie
-hier
-Glück
-Anton
-Bionik
-abwaschen
-Hannes
-Diamant
-Anweisung
-angleichen
-Fördern
-Helene
-glasklar
-Abgaben
-beflügeln
-Trennung
-Ziegler
-überhaupt
-Guido
-rotieren
-treiben
-sowie
-Begründung
-Erdöl
-selig
-jegliche
-belastbar
-ehrlich
-Eier
-Schulden
-Brutto
-Paar
-Sitz
-hast
-annähern
-Neigung
-Menü
-messbar
-vervollständigt
-Erkenntnis
-pendeln
-Edwin
-römisch
-entstehen
-Gefahr
-Resonanz
-ungleich
-Sprache
-Tsunami
-Bindung
-Sympathie
-Bomber
-Schlusswort
-bislang
-befreien
-fegen
-drastisch
-greift
-obwohl
-bewährt
-Jörg
-drehen
-Quartett
-Betätigung
-Szene
-Kinder
-Respekt
-Empathie
-eher
-unwichtig
-besser
-nein
-Kredit
-liegen
-zulegen
-Forschung
-Hurrikan
-wesentlich
-Deutschland
-eintauchen
-entzünden
-betteln
-Islam
-Rohre
-Müll
-Tage
-sinken
-Hunger
-fungieren
-Radio
-Lohn
-lenken
-Container
-marode
-gering
-Ozean
-Revolution
-Meter
-tausend
-Kalkulation
-blau
-Hautfarbe
-Kurt
-Ding
-Mathematiker
-jene
-renovieren
-Popstar
-auferlegen
-unübersichtlich
-fantasievoll
-Bedürfnisse
-Maßstab
-Feier
-Onkel
-essen
-Stein
-einzeln
-Woche
-Sekunde
-Phantasie
-Blockade
-Chip
-Moment
-lüften
-Jasmin
-aufrecht
-eisern
-oder
-Fachsprache
-Komponist
-Vermögen
-allmählich
-Urwissen
-selbstregulierend
-Brust
-Leute
-Gegner
-Pause
-unqualifiziert
-August
-Umdrehung
-wegdenken
-gucken
-leihen
-vordringen
-Durst
-Seite
-fast
-hinaus
-Binnenland
-Bund
-sollt
-Albert
-Smartphone
-Kriminalität
-Protest
-Fremdkosten
-klingen
-Chicago
-Baum
-sammeln
-sehen
-soviel
-Horoskop
-keiner
-Pension
-soweit
-Quantensprung
-intrinsisch
-anno
-Züge
-Zeug
-Wissenschaft
-dass
-loszulassen
-brauchen
-Lehrer
-rufen
-Lama
-Sparen
-größte
-Kerl
-enthalten
-Flügel
-Rabatt
-ehrt
-endlich
-religiös
-Orchester
-braten
-Feedback
-exemplarisch
-Zitat
-Recht
-toll
-Zusammenfassung
-hervor
-Eigentum
-teuer
-nichtkommerziell
-benachbart
-leider
-Fahrzeug
-glauben
-putzen
-geübt
-begünstigen
-Kasten
-zuspitzen
-meckern
-organisation
-loben
-Anthropologie
-Seminar
-moralisch
-Last
-merken
-Samen
-kassieren
-Bube
-Engpass
-Hopfen
-Hirte
-Gefängnis
-Gedanke
-bepacken
-brillant
-verrichtet
-drohen
-Katze
-reif
-Fossilien
-gezeigt
-Packen
-persönlich
-denen
-wegweisend
-Horror
-Diplomat
-Japan
-pflanzlich
-kaltblütig
-Kunde
-Geruch
-Patriarch
-Garnele
-bedingungslos
-Prinzip
-Vergänglichkeit
-stört
-hinein
-Tomate
-halb
-geplatzt
-Theologe
-Vogel
-September
-Steak
-repräsentieren
-heißen
-hoch
-hinblick
-Wunsch
-frustriert
-Fidel
-Blödsinn
-früh
-Birne
-Hülle
-loslegen
-jetzt
-Biene
-regnen
-Celsius
-hören
-genommen
-Fleisch
-diejenigen
-davon
-vorrangig
-sonst
-herrschend
-ertragen
-Neuorientierung
-nächsten
-sozusagen
-Sabbat
-honorieren
-verwirklichen
-Mobbing
-Annahme
-Hügel
-Bedeutung
-Risiko
-riskieren
-ermöglichen
-hemmen
-Frist
-Klima
-böse
-sofern
-Paul
-vertieft
-missionieren
-zuvor
-Nagel
-backen
-getauft
-dazu
-Blech
-zufolge
-Koch
-immerwährend
-Regenwald
-Finnland
-altruistisch
-grau
-Oktober
-Universität
-Philosoph
-Ungarn
-Wirtschaft
-hinlänglich
-Abteil
-sperrt
-aggressiv
-Gast
-externe
-Saat
-Zustand
-losfliegen
-egal
-Dubai
-aktiv
-flattern
-zunehmend
-Bauweise
-erreichen
-Markus
-gegründet
-zwölf
-Rente
-zwar
-leicht
-Fischer
-Emotion
-dunkel
-Vision
-fressen
-dritter
-athletisch
-warum
-Lage
-bestimmt
-Mitwirkender
-Totenkopf
-Qualität
-hegen
-Ecke
-erhalten
-fuhr
-Sklave
-getätigt
-belügen
-gutmachen
-breit
-konnten
-Obst
-subventionieren
-Pflicht
-Planet
-keimen
-sogar
-deshalb
-Milch
-Gesicht
-zögern
-fundamental
-Zwang
-typisch
-gefunden
-offen
-Publikum
-wieso
-strukturell
-Voraussetzung
-umhin
-Geduld
-dient
-Professor
-wechseln
-Minute
-Ärmel
-Konto
-waren
-Information
-ganz
-studieren
-Reihenhaus
-Henry
-oftmals
-Apfelbaum
-reißen
-Labor
-effektiv
-Umfeld
-sogenannten
-Insolvenz
-erzwingen
-später
-funktionieren
-Meile
-extrem
-Hallo
-mitdenken
-Heim
-Praxis
-lediglich
-Kohle
-inmitten
-berichten
-Soja
-Firma
-rasant
-relativ
-doof
-Belgien
-Rendite
-Auge
-abschreiben
-Direktor
-unsere
-Absätze
-plus
-suchen
-inklusive
-somit
-Spirit
-verändern
-Test
-Bewohner
-eindeutig
-Strom
-leiten
-Zentralbank
-Austausch
-pickt
-weise
-Tourismus
-spielen
-Absicht
-Beachtung
-Spekulation
-ernst
-telefonieren
-Trotz
-Technologie
-indigene
-gelöst
-Thomas
-Blüte
-Ferienjob
-geteilt
-Heinrich
-gelangen
-Situation
-Kunst
-Zufall
-Haufen
-geworden
-Wurzel
-Punkt
-Temperatur
-zukunftsfähig
-Opfer
-Josef
-nutzen
-Kauf
-annehmen
-Klaus
-berauben
-Griff
-erdacht
-neulich
-geändert
-besitzen
-liberal
-kopieren
-superreich
-bekommen
-Kolumbus
-Mangel
-Steffi
-Hase
-bahnbrechend
-Norbert
-Karte
-kreativ
-unverändert
-effizient
-Historiker
-anschließend
-Stichtag
-These
-nimmt
-Finanzblase
-wegnehmen
-heutige
-Hexe
-Foliant
-Flamme
-Diktatur
-klick
-Mitleidenschaft
-dick
-vorliegend
-verhindern
-Klasse
-uralt
-Abfall
-stoßen
-lernen
-ethnisch
-Eleganz
-schmackhaft
-helfen
-Wind
-Pfarrer
-neueste
-anfangen
-Erich
-ausatmen
-Präzision
-Stück
-aktuell
-unproduktiv
-dastehen
-runter
-Figaro
-Internet
-Gäste
-sträflich
-Angst
-Bedarf
-Ozonloch
-Bioprodukte
-mögen
-Abraham
-Sohn
-Nebensitzer
-zudem
-Konzept
-Russland
-erzeugt
-Stress
-Hanau
-Hugo
-zehn
-resultieren
-Dach
-junge
-lehnen
-Bewirtschaftung
-gekommen
-erproben
-durch
-Häuser
-gigantisch
-unendlich
-Wegfall
-Irland
-Reparatur
-perfekt
-Pilz
-Zauberwort
-Dorf
-darin
-absolut
-Anbau
-Dung
-müssen
-betreiben
-sieht
-investieren
-Ansatz
-Vorwort
-ablegen
-Verantwortung
-gebaut
-Dreck
-Feld
-explizit
-Harmonie
-Rangordnung
-maximal
-meiner
-vereinigt
-Hamburg
-clever
-global
-unfreiwillig
-tierisch
-Bayern
-Importgüter
-schenken
-Donnerstag
-Puffer
-Rohstoff
-britisch
-Samuel
-Handel
-anstatt
-Sprung
-Dollar
-Lösung
-Engagement
-Oberst
-unmöglich
-Goethe
-zehren
-Humorist
-neuartig
-plötzlich
-Graf
-ging
-intakt
-tragen
-nahm
-zusätzlich
-Potenzial
-beeinflussen
-ziemlich
-Beitrag
-Fest
-Hektik
-beliebt
-ergibt
-ausbeuten
-vorhanden
-klagt
-wegrationalisieren
-bequem
-werben
-Welle
-Spuren
-decken
-autistisch
-Satz
-musizieren
-Umlaufbahn
-nützlich
-simpel
-sauber
-Fortschritt
-losgelöst
-bist
-weder
-ungünstig
-Meer
-treffen
-peinlich
-einnehmen
-bewegte
-notbedingt
-benennen
-Zugvogel
-identisch
-Infrastruktur
-Blase
-erfinden
-modern
-gähnen
-Sportler
-alte
-aufs
-Kampf
-Nikolaus
-fröhlich
-Stockwerk
-Fabel
-Brasilien
-passend
-abgeschaut
-Pädagoge
-militärisch
-Spaß
-beugen
-Einwohner
-Ressourcen
-Lunge
-Discounter
-insbesondere
-lukrativ
-bloß
-erarbeiten
-Referat
-Neuseeland
-Rose
-Abhängigkeit
-Gänse
-Duft
-Pilot
-vernachlässigt
-Lausbub
-Darsteller
-Bezahlung
-Wörtchen
-Seele
-altbekannt
-Seil
-Lothar
-irgendwann
-Ironie
-Titel
-zumindest
-Aussage
-bezwingen
-Errungenschaft
-Medaille
-Uhren
-unmittelbar
-treten
-richtung
-wahr
-mitverursachen
-bilden
-Tennisspielerin
-jenseits
-Mädchen
-aber
-Territorium
-Fenchel
-Spende
-Definition
-draußen
-parallel
-annimmt
-allgemein
-King
-verbessert
-sowohl
-Methode
-Affe
-Dank
-Versorgung
-Staunen
-Vorteil
-gegangen
-ansonsten
-kommt
-beim
-Gefrierpunkt
-senkt
-Elster
-unter
-Äther
-niemand
-dennoch
-Zeit
-Schriftsteller
-klettern
-boshaft
-ohne
-riesig
-sorgfältig
-Slums
-Beschränkung
-Gehalt
-hergestellt
-Urlaub
-Gabe
-Kapazität
-werfen
-suggerieren
-Rolle
-Guthaben
-Höhle
-nehmen
-unfair
-gemacht
-Flur
-kannst
-Rassenkonflikte
-Herbizide
-Twitter
-iPhone
-Bausparkasse
-entfalten
-Vorbild
-Orientale
-erwidern
-abrupt
-mich
-dein
-Krieg
-umkämpft
-Kriterium
-behaupten
-Mitarbeiter
-runden
-Wort
-hereinholen
-beurteilen
-Frieden
-totalversagen
-Africa
-konfrontiert
-Grün
-sofort
-ersten
-Dotter
-Facebook
-gelingen
-Unsinn
-Arthur
-umstellen
-Kultur
-Urmutter
-Pyramide
-Obsoleszenz
-Biedermeier
-gewehrt
-heraus
-ideal
-ihnen
-ausnahmslos
-gerecht
-satt
-Inspiration
-Sägemehl
-jemanden
-pflegen
-Laden
-optimieren
-spazieren
-mitnehmen
-sondern
-Nektar
-anbringen
-vorne
-günstig
-Vorfall
-blind
-widerstehen
-einpendeln
-einmal
-Krebs
-Einleitung
-Institut
-desto
-Alibi
-Besen
-auftreten
-zuschauen
-Haar
-Baukasten
-ließen
-polar
-Umsetzung
-Millionär
-prima
-gilt
-insgesamt
-Wartung
-inländisch
-reiten
-befinden
-bekannt
-Niveau
-Faktor
-Antike
-gutschreiben
-antreiben
-Drama
-Floh
-praktisch
-unzählig
-heikel
-leiblich
-Augsburg
-Keller
-Abendessen
-anheben
-retten
-schnell
-erhält
-voriges
-Wertschätzung
-unnütz
-neunziger
-Prozess
-Flutwelle
-umfangreich
-Geld
-haben
-gekauft
-Öse
-zukommen
-Querdenker
-genmanipuliert
-müde
-Seerose
-gewaltfrei
-Fiat
-Negativität
-faul
-Datum
-erfunden
-gepachtet
-sauer
-bisher
-wollen
-Bonität
-erbringen
-restlich
-oben
-Fuß
-Flotte
-Robert
-Phase
-Inflation
-tapfer
-weinen
-zeigen
-hoffentlich
-hingen
-mutig
-prüfen
-lustig
-gravierend
-Fondue
-ehemalig
-mitharbeiten
-Steuern
-Holland
-stabil
-dessen
-Initiative
-geblieben
-nachfolgen
-Befehl
-Nordstern
-dahinter
-Gott
-Erbsen
-Unmenschlichkeit
-Reise
-euch
-Papa
-Ersatz
-Bande
-womit
-gerne
-auskommen
-nahezu
-Brücke
-Küche
-Traum
-selten
-manche
-häkeln
-Summe
-würdigen
-einräumen
-Lebzeiten
-bitte
-atmen
-Licht
-gekriegt
-Neidisch
-umso
-Erde
-Wolfgang
-letzten
-eignen
-dezentral
-genießen
-klein
-Sanft
-pathologisch
-anbieten
-zugänglich
-Flug
-Bonus
-regulieren
-stolz
-Zyklus
-zerstören
-fiel
-Basis
-delegieren
-Legehenne
-Leser
-Fieber
-wunderbar
-Familie
-Hippie
-Gemeinschaft
-Stunde
-Zwergstaat
-sagen
-fokussieren
-toxisch
-psychologisch
-fragen
-Bach
-zaudern
-Lektorat
-Ausland
-Fackel
-mehr
-Datenbank
-runzlig
-erwähnen
-Zimmerleute
-Spuk
-Preis
-Einführung
-gewidmet
-talentiert
-Gregor
-Inhalt
-Human
-Südafrika
-Sozialabgaben
-Erfüllung
-benutzt
-Englisch
-Nationalstaat
-Krankheit
-gönnen
-unschätzbar
-Fähigkeit
-Tellerwäscher
-damit
-bebauen
-Ehre
-Software
-stirbt
-Honig
-Altlasten
-zuwider
-Hobby
-murmeln
-beziffern
-degradieren
-geformt
-Zufriedenheit
-erlaubt
-Fluss
-Ratgeber
-Fernseher
-Hesse
-jammern
-verzeihen
-Wagen
-Mahlzeit
-Abwicklung
-Lizenz
-Umwelt
-Papst
-Wolke
-Fontane
-Weggefährte
-Fläche
-ausdrücklich
-stetig
-dumm
-Webseite
-besonders
-signifikant
-exakt
-virtuell
-weichen
-hilft
-Topmanager
-dazwischen
-dringend
-herzlich
-kaum
-Haupt
-gespielt
-einher
-Arzt
-gewöhnt
-florieren
-Anziehung
-senden
-Fichte
-eingeführt
-Anlass
-Locke
-geboren
-zuerst
-mahnen
-evolutionär
-beißen
-Forelle
-wenden
-Umsatz
-drucken
-führen
-Pflock
-Haiti
-Miesmacher
-Estland
-Staatseinkommen
-Motte
-dort
-aufhören
-Konsum
-gutwillig
-Befürworter
-Ketzer
-Blick
-Hühner
-bunkern
-erinnern
-Fohlen
-hatten
-zwitschern
-Gentechnik
-Berlin
-foppen
-Gier
-Leonardo
-väterlich
-Hähnchen
-bereits
-Designer
-rebellieren
-Ufer
-auch
-Hütte
-&Übel
-Eden
-Hermann
-ungewöhnlich
-Partei
-gnädig
-womöglich
-Winter
-anzetteln
-vorprogrammiert
-Fips
-Flagge
-zinslos
-weil
-bewahrt
-Werk
-Atom
-Akademie
-Anker
-Sonne
-derselbe
-Sockel
-Somalia
-wann
-erzählen
-Abstand
-enorm
-indem
-etwas
-Erasmus
-vorkommen
-Rede
-Tokio
-dreifach
-halfen
-Zivilisation
-Luftfahrt
-Endverbraucher
-Mama
-Angebot
-Vorschlag
-hart
-lokal
-Sorte
-Priorität
-jedoch
-genügend
-dadurch
-Branche
-großartig
-Regal
-garantiert
-unbewusst
-Migrant
-Auerhahn
-David
-stärken
-Erbe
-notfalls
-hindurch
-wickeln
-quasi
-darf
-comedy
-gehen
-Start
-verdeckt
-Dosis
-Brezel
-Element
-Kurs
-Ämter
-leuchten
-zwischen
-Beileid
-weiblich
-Ruder
-Zoologe
-aushalten
-neugeboren
-spüren
-Ingwer
-fließen
-Idee
-Samstag
-trainieren
-Flandern
-Auffassung
-ziehen
-Masse
-Nina
-Arten
-Gnade
-Spezial
-unkonventionell
-Wald
-Jugend
-Busch
-Fabian
-dokumentieren
-Felix
-Film
-belohnt
-Gertrud
-architektur
-derzeitig
-echt
-Tagtraum
-Margret
-Objektivität
-Sieger
-empfinden
-Beamten
-akzeptieren
-laut
-Sternenstaub
-Stadt
-Aristoteles
-Ferrari
-finden
-Google
-Westen
-Fratze
-Bauer
-Kreislauf
-wovon
-Jürgen
-gerade
-Platz
-Madonna
-Zahnersatz
-Marianne
-euer
-Privat
-Schatten
-hundert
-besucht
-aufwärts
-dynamisch
-Sahne
-viel
-Teufel
-Gebrauchsanweisung
-Gradido
-sieben
-Flucht
-holen
-baden
-ändern
-jüngeren
-Natur
-chinesisch
-Rohmaterial
-Hauch
-Konkurrenz
-fiktiv
-akkumulieren
-Ball
-beenden
-bemüht
-recyclebar
-gedruckt
-vegetarisch
-woran
-erwerben
-lasst
-bleiben
-Radfahrer
-Bücher
-Klavier
-genannt
-Quelle
-erheblich
-gegenseitig
-abzahlen
-stagnieren
-Hubert
-Ende
-Crash
-Trinkwasser
-Franz
-Insekt
-sensibilisieren
-Erneuerung
-Sehnen
-Maus
-Frau
-betonung
-stiege
-Porsche
-beide
-absurd
-dato
-Österreich
-beteiligen
-dies
-gezwungen
-anvertrauen
-Tilgung
-Feder
-logisch
-konventionell
-fatal
-kulinarisch
-Abholzung
-Cicero
-nostalgischen
-schützen
-brachte
-Metzger
-geehrt
-Flasche
-bringt
-Villa
-Krise
-bietet
-Entlastung
-ausführung
-Wikipedia
-stellen
-Park
-Video
-Papiergeld
-voll
-inzwischen
-Jäger
-Topf
-ülzen
-umgekehrt
-Hanf
-Februar
-zirkulieren
-John
-heben
-Novellierung
-unfähig
-servieren
-Meier
-jeweilig
-Heuschrecke
-daher
-Alexander
-Peter
-erkannt
-Gehirn
-lateinisch
-anpassbar
-anderen
-Artikel
-Wucht
-Leben
-sein
-exzellent
-beantworten
-Asche
-reduzieren
-Hersteller
-Victor
-zumal
-Plage
-hassen
-fünf
-liebevoll
-für
-Acker
-morphogenetisch
-Sachverhalt
-umpolen
-gibt
-Busfahrer
-beherzigen
-weitergeben
-brav
-jeder
-sich
-Galaxis
-steht
-Maschine
-erzielen
-Sanierung
-Kraft
-Netto
-Begabung
-ersetzen
-mindest
-gestorben
-Osten
-Gebiet
-Zweifel
-zugleich
-wild
-kameradschaftlich
-Farbe
-Mitmensch
-bevölkern
-gesamt
-Mittel
-Reporter
-Kilometer
-kostenlos
-mobil
-wehren
-herunter
-Ansehen
-erfrischend
-Hotel
-Analyse
-Griechisch
-Abwurf
-käuflich
-Bernd
-entgegengesetzt
-Bewusstsein
-ankaufen
-zurzeit
-Impressum
-Toast
-Ladung
-Verfütterung
-Form
-Wasser
-gesund
-noch
-horchen
-Variante
-Anleitung
-Pazifik
-Wiederherstellung
-Wandel
-transformieren
-Tisch
-verknappt
-Material
-Realisierung
-einer
-Daimler
-unvorstellbar
-meldete
-Strickmuster
-stammen
-Menge
-Verifizieren
-tief
-Puzzle
-Gepflogenheit
-Ziel
-dürfen
-doch
-Sinn
-Region
-fangen
-zuteil
-Anspruch
-kehrte
-Freund
-Fimmel
-darum
-Girokonto
-Zweck
-Wohngemeinschaft
-Projekt
-schweigen
-Kupfer
-tauchen
-holzig
-Tendenz
-abhalten
-Nummer
-bald
-Töne
-Salvador
-Kapitel
-Ibiza
-Komfort
-wobei
-lachen
-Wagnis
-metaphorisch
-gelb
-bevor
-unnatürlich
-Leasing
-bemerkenswert
-zugute
-beruhen
-soeben
-Kopf
-wischen
-appellieren
-gelten
-statt
-Futter
-Erdball
-benötigt
-futsch
-Symbol
-wofür
-Glanz
-beispiellos
-normalen
-mitfinanzieren
-Frucht
-italienisch
-woher
-allzu
-beleben
-weigern
-Senf
-Gift
-atemlos
-Cäsar
-Begegnung
-horten
-sobald
-Luxus
-biologisch
-Wettbewerb
-Umkehrschluss
-fallen
-Darlehen
-klug
-anpreisen
-doppelt
-abwechslungsreich
-Werner
-nannte
-Wittenberg
-existenzbedrohend
-deren
-zynisch
-Feuer
-Leistung
-Ideologie
-Enkel
-diskutiert
-pervers
-Brot
-Ordnung
-blubbern
-einander
-College
-folgen
-Anreiz
-Agrarfläche
-aufdecken
-zerrinnen
-ergründen
-spalten
-unehelich
-Experte
-viertel
-gezogen
-Mitspieler
-geklappt
-Kette
-Petrus
-Nahrung
-Georg
-Patent
-Unkenntlich
-Waage
-ernähren
-Botschafter
-hell
-Zelle
-Silbe
-pfiffig
-Mystisch
-Acht
-ahnen
-erkämpft
-Team
-zunächst
-Benzin
-falsch
-erwarten
-raffen
-Auflage
-Thema
-ernten
-Monat
-lindern
-meisten
-zurückerlangen
-Fenster
-unabhängig
-Jesus
-geistig
-divers
-Göttingen
-unruhig
-Kategorie
-fassen
-hinzu
-Wachstum
-Sven
-Chemie
-quälen
-Herde
-standen
-jährlich
-Anhang
-nötig
-Hirsch
-derjenige
-Kurzgeschichte
-ökologische
-Theater
-willkommen
-ausüben
-Kanal
-nennt
-Name
-wussten
-drücken
-aufnehmen
-Äste
-Rücken
-intuition
-hätte
-Zunahme
-Gläubiger
-abzählen
-Phänomen
-Ablage
-spontan
-spannend
-Vanessa
-Asien
-gewusst
-elektronisch
-derb
-getilgt
-Antwort
-geeignet
-Bote
-gequält
-Anerkennung
-Bilanz
-natürlich
-machbar
-Verpackung
-Blut
-Eltern
-Himbeere
-rumfliegen
-Senioren
-zwingen
-Spitze
-Taschendiebe
-steckt
-Monster
-Egotrip
-Helmut
-Bibel
-geerbt
-zitieren
-Ameisenbau
-Rekordgewinne
-Hände
-ergänzen
-danach
-orden
-hinter
-wenn
-paddeln
-gutes
-Hinsicht
-wegen
-Teilhabe
-Gesellschaft
-christlich
-Bezugsquelle
-Igor
-ausprobieren
-Endpreis
-links
-gekürzt
-einkaufen
-Lied
-Gerhard
-gelohnt
-nackt
-Geburt
-gelehrt
-einseitig
-gedeckt
-hinweg
-Eduard
-Premiere
-demografisch
-ihre
-höchste
-wichtigsten
-Aufmerksamkeit
-Horde
-physisch
-Arbeitsklima
-Brief
-Notdurft
-proportional
-fordern
-Ewig
-denken
-Daniel
-Arabisch
-edle
-golden
-Minimum
-pure
-beibringen
-Boden
-Anzahl
-erschaffen
-Energie
-sehr
-Gerücht
-Generation
-Räuber
-Motivation
-Chance
-dabei
-Programm
-segensreich
-April
-ignorieren
-Nase
-epochal
-Boot
-faszinieren
-Heilkunde
-Helikopter
-Computer
-Kabarettist
-wenig
-zukünftig
-sechzehn
-stimmt
-getragen
-reagieren
-Esoterik
-Koralle
-Dame
-Katastrophe
-liefern
-Grund
-Elend
-ausreichen
-Notenbank
-Garten
-zutiefst
-Immobilien
-Aspekt
-naiv
-besprechen
-zählen
-Terminologie
-Amerika
-Atmosphäre
-Iran
-debatte
-Sound
-Zugang
-fair
-unrentabel
-baut
-kollektiv
-schief
-Bank
-Mann
-Apropos
-Ergebnis
-Niederlande
-Mietshaus
-errichten
-Ereignis
-Portal
-erhielten
-erleben
-Haus
-Dschungel
-Null
-Pleite
-Seegras
-Entdeckung
-also
-Ebene
-Anbeginn
-kohärent
-Autor
-Mensch
-hielt
-Reich
-Land
-bekloppt
-außerdem
-Berg
-gleich
-sind
-Argument
-einverstanden
-Euro
-Sektor
-dagegen
-Knappheit
-Armut
-innerhalb
-Blume
-Problem
-Bruder
-Netzwerk
-Orte
-bedrängen
-Aufgabe
diff --git a/backend/src/config/mnemonic.words_ulf.txt b/backend/src/config/mnemonic.words_ulf.txt
deleted file mode 100644
index 3b44fbd12..000000000
--- a/backend/src/config/mnemonic.words_ulf.txt
+++ /dev/null
@@ -1,2048 +0,0 @@
-Monumental
-Volksbank
-Beeren
-huschen
-leer
-Haft
-saagut
-Positiv
-daran
-solide
-dauerhaft
-zahlungsfhig
-beinhalten
-weglassen
-Ausma
-irrtmlich
-Impuls
-darber
-Abriss
-setzten
-Herkunft
-manipulierbar
-anfngt
-anliegen
-Mutter
-Beobachter
-Zeichner
-dran
-genug
-Medikament
-Tanten
-behindern
-Johannes
-Rand
-Illusion
-anzuwenden
-Fehler
-erniedrigen
-gehren
-Gte
-unangenehm
-Horst
-Koordination
-weltweit
-geprgt
-unerlsslich
-einig
-mitbringen
-Dieb
-dann
-Karriere
-Ethik
-dich
-Ursachen
-beglcken
-Wahl
-dermaen
-spritzen
-erbittert
-Maler
-tglich
-Wohlstand
-hbsch
-Klarheit
-voneinander
-berhmt
-Iris
-plausibel
-verlagern
-Lauf
-Foyer
-Idol
-spreizen
-Hlderlin
-Grenze
-Code
-Dogma
-langfristig
-Urzustand
-verursacht
-Fasching
-Finger
-Knig
-barbarisch
-einbringen
-Disziplin
-angreifen
-speichern
-Urheberrecht
-ermorden
-Diana
-Auswirkung
-beginnen
-kooperativ
-Ahnung
-allen
-bisschen
-durften
-Prostitution
-Strahlen
-Umschwung
-Foto
-taten
-Mechanismus
-Urvertrauen
-Chef
-feminin
-nirgendwo
-Absatzmarkt
-welches
-Entwicklung
-gearbeitet
-erblhen
-umtauschen
-Aufklrung
-online
-produktiv
-Pest
-Coach
-Anblick
-ursprnglich
-schon
-solange
-eventuell
-Tatsache
-erforderlich
-Buch
-derartig
-werden
-auseinander
-halten
-Maurer
-Himmel
-Loch
-Forum
-Kluft
-aufbauen
-bricht
-permanent
-saugen
-exponential
-Fetzen
-Mord
-unausweichlich
-untrennbar
-skeptisch
-geschtzt
-Gebude
-Butter
-bezeichnet
-Daunen
-Journalist
-ehrgeizig
-System
-Zugriff
-Anwalt
-Krone
-ankommt
-zulassen
-Stufenplan
-Raum
-Sanktion
-Whrung
-Tradition
-Money
-dafr
-Gruppe
-solch
-geben
-geholfen
-frei
-Rahmen
-Rasen
-feindlich
-Wirklichkeit
-Unheil
-luden
-Ausgleich
-leugnen
-erklrt
-Vater
-Ingenieur
-Erfahrung
-Stil
-drren
-wozu
-befassen
-gem
-Apotheke
-Vegan
-simultan
-wehen
-gang
-immateriell
-Wilhelm
-fertig
-kennen
-korrigieren
-Jahr
-Industrie
-hier
-Glck
-Anton
-Bionik
-abwaschen
-Hannes
-Diamant
-Anweisung
-angleichen
-Frdern
-Helene
-glasklar
-Abgaben
-beflgeln
-Trennung
-Ziegler
-berhaupt
-Guido
-rotieren
-treiben
-sowie
-Begrndung
-Erdl
-selig
-jegliche
-belastbar
-ehrlich
-Eier
-Schulden
-Brutto
-Paar
-Sitz
-hast
-annhern
-Neigung
-Men
-messbar
-vervollstndigt
-Erkenntnis
-pendeln
-Edwin
-rmisch
-entstehen
-Gefahr
-Resonanz
-ungleich
-Sprache
-Tsunami
-Bindung
-Sympathie
-Bomber
-Schlusswort
-bislang
-befreien
-fegen
-drastisch
-greift
-obwohl
-bewhrt
-Jrg
-drehen
-Quartett
-Bettigung
-Szene
-Kinder
-Respekt
-Empathie
-eher
-unwichtig
-besser
-nein
-Kredit
-liegen
-zulegen
-Forschung
-Hurrikan
-wesentlich
-Deutschland
-eintauchen
-entznden
-betteln
-Islam
-Rohre
-Mll
-Tage
-sinken
-Hunger
-fungieren
-Radio
-Lohn
-lenken
-Container
-marode
-gering
-Ozean
-Revolution
-Meter
-tausend
-Kalkulation
-blau
-Hautfarbe
-Kurt
-Ding
-Mathematiker
-jene
-renovieren
-Popstar
-auferlegen
-unbersichtlich
-fantasievoll
-Bedrfnisse
-Mastab
-Feier
-Onkel
-essen
-Stein
-einzeln
-Woche
-Sekunde
-Phantasie
-Blockade
-Chip
-Moment
-lften
-Jasmin
-aufrecht
-eisern
-oder
-Fachsprache
-Komponist
-Vermgen
-allmhlich
-Urwissen
-selbstregulierend
-Brust
-Leute
-Gegner
-Pause
-unqualifiziert
-August
-Umdrehung
-wegdenken
-gucken
-leihen
-vordringen
-Durst
-Seite
-fast
-hinaus
-Binnenland
-Bund
-sollt
-Albert
-Smartphone
-Kriminalitt
-Protest
-Fremdkosten
-klingen
-Chicago
-Baum
-sammeln
-sehen
-soviel
-Horoskop
-keiner
-Pension
-soweit
-Quantensprung
-intrinsisch
-anno
-Zge
-Zeug
-Wissenschaft
-dass
-loszulassen
-brauchen
-Lehrer
-rufen
-Lama
-Sparen
-grte
-Kerl
-enthalten
-Flgel
-Rabatt
-ehrt
-endlich
-religis
-Orchester
-braten
-Feedback
-exemplarisch
-Zitat
-Recht
-toll
-Zusammenfassung
-hervor
-Eigentum
-teuer
-nichtkommerziell
-benachbart
-leider
-Fahrzeug
-glauben
-putzen
-gebt
-begnstigen
-Kasten
-zuspitzen
-meckern
-organisation
-loben
-Anthropologie
-Seminar
-moralisch
-Last
-merken
-Samen
-kassieren
-Bube
-Engpass
-Hopfen
-Hirte
-Gefngnis
-Gedanke
-bepacken
-brillant
-verrichtet
-drohen
-Katze
-reif
-Fossilien
-gezeigt
-Packen
-persnlich
-denen
-wegweisend
-Horror
-Diplomat
-Japan
-pflanzlich
-kaltbltig
-Kunde
-Geruch
-Patriarch
-Garnele
-bedingungslos
-Prinzip
-Vergnglichkeit
-strt
-hinein
-Tomate
-halb
-geplatzt
-Theologe
-Vogel
-September
-Steak
-reprsentieren
-heien
-hoch
-hinblick
-Wunsch
-frustriert
-Fidel
-Bldsinn
-frh
-Birne
-Hlle
-loslegen
-jetzt
-Biene
-regnen
-Celsius
-hren
-genommen
-Fleisch
-diejenigen
-davon
-vorrangig
-sonst
-herrschend
-ertragen
-Neuorientierung
-nchsten
-sozusagen
-Sabbat
-honorieren
-verwirklichen
-Mobbing
-Annahme
-Hgel
-Bedeutung
-Risiko
-riskieren
-ermglichen
-hemmen
-Frist
-Klima
-bse
-sofern
-Paul
-vertieft
-missionieren
-zuvor
-Nagel
-backen
-getauft
-dazu
-Blech
-zufolge
-Koch
-immerwhrend
-Regenwald
-Finnland
-altruistisch
-grau
-Oktober
-Universitt
-Philosoph
-Ungarn
-Wirtschaft
-hinlnglich
-Abteil
-sperrt
-aggressiv
-Gast
-externe
-Saat
-Zustand
-losfliegen
-egal
-Dubai
-aktiv
-flattern
-zunehmend
-Bauweise
-erreichen
-Markus
-gegrndet
-zwlf
-Rente
-zwar
-leicht
-Fischer
-Emotion
-dunkel
-Vision
-fressen
-dritter
-athletisch
-warum
-Lage
-bestimmt
-Mitwirkender
-Totenkopf
-Qualitt
-hegen
-Ecke
-erhalten
-fuhr
-Sklave
-gettigt
-belgen
-gutmachen
-breit
-konnten
-Obst
-subventionieren
-Pflicht
-Planet
-keimen
-sogar
-deshalb
-Milch
-Gesicht
-zgern
-fundamental
-Zwang
-typisch
-gefunden
-offen
-Publikum
-wieso
-strukturell
-Voraussetzung
-umhin
-Geduld
-dient
-Professor
-wechseln
-Minute
-rmel
-Konto
-waren
-Information
-ganz
-studieren
-Reihenhaus
-Henry
-oftmals
-Apfelbaum
-reien
-Labor
-effektiv
-Umfeld
-sogenannten
-Insolvenz
-erzwingen
-spter
-funktionieren
-Meile
-extrem
-Hallo
-mitdenken
-Heim
-Praxis
-lediglich
-Kohle
-inmitten
-berichten
-Soja
-Firma
-rasant
-relativ
-doof
-Belgien
-Rendite
-Auge
-abschreiben
-Direktor
-unsere
-Abstze
-plus
-suchen
-inklusive
-somit
-Spirit
-verndern
-Test
-Bewohner
-eindeutig
-Strom
-leiten
-Zentralbank
-Austausch
-pickt
-weise
-Tourismus
-spielen
-Absicht
-Beachtung
-Spekulation
-ernst
-telefonieren
-Trotz
-Technologie
-indigene
-gelst
-Thomas
-Blte
-Ferienjob
-geteilt
-Heinrich
-gelangen
-Situation
-Kunst
-Zufall
-Haufen
-geworden
-Wurzel
-Punkt
-Temperatur
-zukunftsfhig
-Opfer
-Josef
-nutzen
-Kauf
-annehmen
-Klaus
-berauben
-Griff
-erdacht
-neulich
-gendert
-besitzen
-liberal
-kopieren
-superreich
-bekommen
-Kolumbus
-Mangel
-Steffi
-Hase
-bahnbrechend
-Norbert
-Karte
-kreativ
-unverndert
-effizient
-Historiker
-anschlieend
-Stichtag
-These
-nimmt
-Finanzblase
-wegnehmen
-heutige
-Hexe
-Foliant
-Flamme
-Diktatur
-klick
-Mitleidenschaft
-dick
-vorliegend
-verhindern
-Klasse
-uralt
-Abfall
-stoen
-lernen
-ethnisch
-Eleganz
-schmackhaft
-helfen
-Wind
-Pfarrer
-neueste
-anfangen
-Erich
-ausatmen
-Przision
-Stck
-aktuell
-unproduktiv
-dastehen
-runter
-Figaro
-Internet
-Gste
-strflich
-Angst
-Bedarf
-Ozonloch
-Bioprodukte
-mgen
-Abraham
-Sohn
-Nebensitzer
-zudem
-Konzept
-Russland
-erzeugt
-Stress
-Hanau
-Hugo
-zehn
-resultieren
-Dach
-junge
-lehnen
-Bewirtschaftung
-gekommen
-erproben
-durch
-Huser
-gigantisch
-unendlich
-Wegfall
-Irland
-Reparatur
-perfekt
-Pilz
-Zauberwort
-Dorf
-darin
-absolut
-Anbau
-Dung
-mssen
-betreiben
-sieht
-investieren
-Ansatz
-Vorwort
-ablegen
-Verantwortung
-gebaut
-Dreck
-Feld
-explizit
-Harmonie
-Rangordnung
-maximal
-meiner
-vereinigt
-Hamburg
-clever
-global
-unfreiwillig
-tierisch
-Bayern
-Importgter
-schenken
-Donnerstag
-Puffer
-Rohstoff
-britisch
-Samuel
-Handel
-anstatt
-Sprung
-Dollar
-Lsung
-Engagement
-Oberst
-unmglich
-Goethe
-zehren
-Humorist
-neuartig
-pltzlich
-Graf
-ging
-intakt
-tragen
-nahm
-zustzlich
-Potenzial
-beeinflussen
-ziemlich
-Beitrag
-Fest
-Hektik
-beliebt
-ergibt
-ausbeuten
-vorhanden
-klagt
-wegrationalisieren
-bequem
-werben
-Welle
-Spuren
-decken
-autistisch
-Satz
-musizieren
-Umlaufbahn
-ntzlich
-simpel
-sauber
-Fortschritt
-losgelst
-bist
-weder
-ungnstig
-Meer
-treffen
-peinlich
-einnehmen
-bewegte
-notbedingt
-benennen
-Zugvogel
-identisch
-Infrastruktur
-Blase
-erfinden
-modern
-ghnen
-Sportler
-alte
-aufs
-Kampf
-Nikolaus
-frhlich
-Stockwerk
-Fabel
-Brasilien
-passend
-abgeschaut
-Pdagoge
-militrisch
-Spa
-beugen
-Einwohner
-Ressourcen
-Lunge
-Discounter
-insbesondere
-lukrativ
-blo
-erarbeiten
-Referat
-Neuseeland
-Rose
-Abhngigkeit
-Gnse
-Duft
-Pilot
-vernachlssigt
-Lausbub
-Darsteller
-Bezahlung
-Wrtchen
-Seele
-altbekannt
-Seil
-Lothar
-irgendwann
-Ironie
-Titel
-zumindest
-Aussage
-bezwingen
-Errungenschaft
-Medaille
-Uhren
-unmittelbar
-treten
-richtung
-wahr
-mitverursachen
-bilden
-Tennisspielerin
-jenseits
-Mdchen
-aber
-Territorium
-Fenchel
-Spende
-Definition
-drauen
-parallel
-annimmt
-allgemein
-King
-verbessert
-sowohl
-Methode
-Affe
-Dank
-Versorgung
-Staunen
-Vorteil
-gegangen
-ansonsten
-kommt
-beim
-Gefrierpunkt
-senkt
-Elster
-unter
-ther
-niemand
-dennoch
-Zeit
-Schriftsteller
-klettern
-boshaft
-ohne
-riesig
-sorgfltig
-Slums
-Beschrnkung
-Gehalt
-hergestellt
-Urlaub
-Gabe
-Kapazitt
-werfen
-suggerieren
-Rolle
-Guthaben
-Hhle
-nehmen
-unfair
-gemacht
-Flur
-kannst
-Rassenkonflikte
-Herbizide
-Twitter
-iPhone
-Bausparkasse
-entfalten
-Vorbild
-Orientale
-erwidern
-abrupt
-mich
-dein
-Krieg
-umkmpft
-Kriterium
-behaupten
-Mitarbeiter
-runden
-Wort
-hereinholen
-beurteilen
-Frieden
-totalversagen
-Africa
-konfrontiert
-Grn
-sofort
-ersten
-Dotter
-Facebook
-gelingen
-Unsinn
-Arthur
-umstellen
-Kultur
-Urmutter
-Pyramide
-Obsoleszenz
-Biedermeier
-gewehrt
-heraus
-ideal
-ihnen
-ausnahmslos
-gerecht
-satt
-Inspiration
-Sgemehl
-jemanden
-pflegen
-Laden
-optimieren
-spazieren
-mitnehmen
-sondern
-Nektar
-anbringen
-vorne
-gnstig
-Vorfall
-blind
-widerstehen
-einpendeln
-einmal
-Krebs
-Einleitung
-Institut
-desto
-Alibi
-Besen
-auftreten
-zuschauen
-Haar
-Baukasten
-lieen
-polar
-Umsetzung
-Millionr
-prima
-gilt
-insgesamt
-Wartung
-inlndisch
-reiten
-befinden
-bekannt
-Niveau
-Faktor
-Antike
-gutschreiben
-antreiben
-Drama
-Floh
-praktisch
-unzhlig
-heikel
-leiblich
-Augsburg
-Keller
-Abendessen
-anheben
-retten
-schnell
-erhlt
-voriges
-Wertschtzung
-unntz
-neunziger
-Prozess
-Flutwelle
-umfangreich
-Geld
-haben
-gekauft
-se
-zukommen
-Querdenker
-genmanipuliert
-mde
-Seerose
-gewaltfrei
-Fiat
-Negativitt
-faul
-Datum
-erfunden
-gepachtet
-sauer
-bisher
-wollen
-Bonitt
-erbringen
-restlich
-oben
-Fu
-Flotte
-Robert
-Phase
-Inflation
-tapfer
-weinen
-zeigen
-hoffentlich
-hingen
-mutig
-prfen
-lustig
-gravierend
-Fondue
-ehemalig
-mitharbeiten
-Steuern
-Holland
-stabil
-dessen
-Initiative
-geblieben
-nachfolgen
-Befehl
-Nordstern
-dahinter
-Gott
-Erbsen
-Unmenschlichkeit
-Reise
-euch
-Papa
-Ersatz
-Bande
-womit
-gerne
-auskommen
-nahezu
-Brcke
-Kche
-Traum
-selten
-manche
-hkeln
-Summe
-wrdigen
-einrumen
-Lebzeiten
-bitte
-atmen
-Licht
-gekriegt
-Neidisch
-umso
-Erde
-Wolfgang
-letzten
-eignen
-dezentral
-genieen
-klein
-Sanft
-pathologisch
-anbieten
-zugnglich
-Flug
-Bonus
-regulieren
-stolz
-Zyklus
-zerstren
-fiel
-Basis
-delegieren
-Legehenne
-Leser
-Fieber
-wunderbar
-Familie
-Hippie
-Gemeinschaft
-Stunde
-Zwergstaat
-sagen
-fokussieren
-toxisch
-psychologisch
-fragen
-Bach
-zaudern
-Lektorat
-Ausland
-Fackel
-mehr
-Datenbank
-runzlig
-erwhnen
-Zimmerleute
-Spuk
-Preis
-Einfhrung
-gewidmet
-talentiert
-Gregor
-Inhalt
-Human
-Sdafrika
-Sozialabgaben
-Erfllung
-benutzt
-Englisch
-Nationalstaat
-Krankheit
-gnnen
-unschtzbar
-Fhigkeit
-Tellerwscher
-damit
-bebauen
-Ehre
-Software
-stirbt
-Honig
-Altlasten
-zuwider
-Hobby
-murmeln
-beziffern
-degradieren
-geformt
-Zufriedenheit
-erlaubt
-Fluss
-Ratgeber
-Fernseher
-Hesse
-jammern
-verzeihen
-Wagen
-Mahlzeit
-Abwicklung
-Lizenz
-Umwelt
-Papst
-Wolke
-Fontane
-Weggefhrte
-Flche
-ausdrcklich
-stetig
-dumm
-Webseite
-besonders
-signifikant
-exakt
-virtuell
-weichen
-hilft
-Topmanager
-dazwischen
-dringend
-herzlich
-kaum
-Haupt
-gespielt
-einher
-Arzt
-gewhnt
-florieren
-Anziehung
-senden
-Fichte
-eingefhrt
-Anlass
-Locke
-geboren
-zuerst
-mahnen
-evolutionr
-beien
-Forelle
-wenden
-Umsatz
-drucken
-fhren
-Pflock
-Haiti
-Miesmacher
-Estland
-Staatseinkommen
-Motte
-dort
-aufhren
-Konsum
-gutwillig
-Befrworter
-Ketzer
-Blick
-Hhner
-bunkern
-erinnern
-Fohlen
-hatten
-zwitschern
-Gentechnik
-Berlin
-foppen
-Gier
-Leonardo
-vterlich
-Hhnchen
-bereits
-Designer
-rebellieren
-Ufer
-auch
-Htte
-&bel
-Eden
-Hermann
-ungewhnlich
-Partei
-gndig
-womglich
-Winter
-anzetteln
-vorprogrammiert
-Fips
-Flagge
-zinslos
-weil
-bewahrt
-Werk
-Atom
-Akademie
-Anker
-Sonne
-derselbe
-Sockel
-Somalia
-wann
-erzhlen
-Abstand
-enorm
-indem
-etwas
-Erasmus
-vorkommen
-Rede
-Tokio
-dreifach
-halfen
-Zivilisation
-Luftfahrt
-Endverbraucher
-Mama
-Angebot
-Vorschlag
-hart
-lokal
-Sorte
-Prioritt
-jedoch
-gengend
-dadurch
-Branche
-groartig
-Regal
-garantiert
-unbewusst
-Migrant
-Auerhahn
-David
-strken
-Erbe
-notfalls
-hindurch
-wickeln
-quasi
-darf
-comedy
-gehen
-Start
-verdeckt
-Dosis
-Brezel
-Element
-Kurs
-mter
-leuchten
-zwischen
-Beileid
-weiblich
-Ruder
-Zoologe
-aushalten
-neugeboren
-spren
-Ingwer
-flieen
-Idee
-Samstag
-trainieren
-Flandern
-Auffassung
-ziehen
-Masse
-Nina
-Arten
-Gnade
-Spezial
-unkonventionell
-Wald
-Jugend
-Busch
-Fabian
-dokumentieren
-Felix
-Film
-belohnt
-Gertrud
-architektur
-derzeitig
-echt
-Tagtraum
-Margret
-Objektivitt
-Sieger
-empfinden
-Beamten
-akzeptieren
-laut
-Sternenstaub
-Stadt
-Aristoteles
-Ferrari
-finden
-Google
-Westen
-Fratze
-Bauer
-Kreislauf
-wovon
-Jrgen
-gerade
-Platz
-Madonna
-Zahnersatz
-Marianne
-euer
-Privat
-Schatten
-hundert
-besucht
-aufwrts
-dynamisch
-Sahne
-viel
-Teufel
-Gebrauchsanweisung
-Gradido
-sieben
-Flucht
-holen
-baden
-ndern
-jngeren
-Natur
-chinesisch
-Rohmaterial
-Hauch
-Konkurrenz
-fiktiv
-akkumulieren
-Ball
-beenden
-bemht
-recyclebar
-gedruckt
-vegetarisch
-woran
-erwerben
-lasst
-bleiben
-Radfahrer
-Bcher
-Klavier
-genannt
-Quelle
-erheblich
-gegenseitig
-abzahlen
-stagnieren
-Hubert
-Ende
-Crash
-Trinkwasser
-Franz
-Insekt
-sensibilisieren
-Erneuerung
-Sehnen
-Maus
-Frau
-betonung
-stiege
-Porsche
-beide
-absurd
-dato
-sterreich
-beteiligen
-dies
-gezwungen
-anvertrauen
-Tilgung
-Feder
-logisch
-konventionell
-fatal
-kulinarisch
-Abholzung
-Cicero
-nostalgischen
-schtzen
-brachte
-Metzger
-geehrt
-Flasche
-bringt
-Villa
-Krise
-bietet
-Entlastung
-ausfhrung
-Wikipedia
-stellen
-Park
-Video
-Papiergeld
-voll
-inzwischen
-Jger
-Topf
-lzen
-umgekehrt
-Hanf
-Februar
-zirkulieren
-John
-heben
-Novellierung
-unfhig
-servieren
-Meier
-jeweilig
-Heuschrecke
-daher
-Alexander
-Peter
-erkannt
-Gehirn
-lateinisch
-anpassbar
-anderen
-Artikel
-Wucht
-Leben
-sein
-exzellent
-beantworten
-Asche
-reduzieren
-Hersteller
-Victor
-zumal
-Plage
-hassen
-fnf
-liebevoll
-fr
-Acker
-morphogenetisch
-Sachverhalt
-umpolen
-gibt
-Busfahrer
-beherzigen
-weitergeben
-brav
-jeder
-sich
-Galaxis
-steht
-Maschine
-erzielen
-Sanierung
-Kraft
-Netto
-Begabung
-ersetzen
-mindest
-gestorben
-Osten
-Gebiet
-Zweifel
-zugleich
-wild
-kameradschaftlich
-Farbe
-Mitmensch
-bevlkern
-gesamt
-Mittel
-Reporter
-Kilometer
-kostenlos
-mobil
-wehren
-herunter
-Ansehen
-erfrischend
-Hotel
-Analyse
-Griechisch
-Abwurf
-kuflich
-Bernd
-entgegengesetzt
-Bewusstsein
-ankaufen
-zurzeit
-Impressum
-Toast
-Ladung
-Verftterung
-Form
-Wasser
-gesund
-noch
-horchen
-Variante
-Anleitung
-Pazifik
-Wiederherstellung
-Wandel
-transformieren
-Tisch
-verknappt
-Material
-Realisierung
-einer
-Daimler
-unvorstellbar
-meldete
-Strickmuster
-stammen
-Menge
-Verifizieren
-tief
-Puzzle
-Gepflogenheit
-Ziel
-drfen
-doch
-Sinn
-Region
-fangen
-zuteil
-Anspruch
-kehrte
-Freund
-Fimmel
-darum
-Girokonto
-Zweck
-Wohngemeinschaft
-Projekt
-schweigen
-Kupfer
-tauchen
-holzig
-Tendenz
-abhalten
-Nummer
-bald
-Tne
-Salvador
-Kapitel
-Ibiza
-Komfort
-wobei
-lachen
-Wagnis
-metaphorisch
-gelb
-bevor
-unnatrlich
-Leasing
-bemerkenswert
-zugute
-beruhen
-soeben
-Kopf
-wischen
-appellieren
-gelten
-statt
-Futter
-Erdball
-bentigt
-futsch
-Symbol
-wofr
-Glanz
-beispiellos
-normalen
-mitfinanzieren
-Frucht
-italienisch
-woher
-allzu
-beleben
-weigern
-Senf
-Gift
-atemlos
-Csar
-Begegnung
-horten
-sobald
-Luxus
-biologisch
-Wettbewerb
-Umkehrschluss
-fallen
-Darlehen
-klug
-anpreisen
-doppelt
-abwechslungsreich
-Werner
-nannte
-Wittenberg
-existenzbedrohend
-deren
-zynisch
-Feuer
-Leistung
-Ideologie
-Enkel
-diskutiert
-pervers
-Brot
-Ordnung
-blubbern
-einander
-College
-folgen
-Anreiz
-Agrarflche
-aufdecken
-zerrinnen
-ergrnden
-spalten
-unehelich
-Experte
-viertel
-gezogen
-Mitspieler
-geklappt
-Kette
-Petrus
-Nahrung
-Georg
-Patent
-Unkenntlich
-Waage
-ernhren
-Botschafter
-hell
-Zelle
-Silbe
-pfiffig
-Mystisch
-Acht
-ahnen
-erkmpft
-Team
-zunchst
-Benzin
-falsch
-erwarten
-raffen
-Auflage
-Thema
-ernten
-Monat
-lindern
-meisten
-zurckerlangen
-Fenster
-unabhngig
-Jesus
-geistig
-divers
-Gttingen
-unruhig
-Kategorie
-fassen
-hinzu
-Wachstum
-Sven
-Chemie
-qulen
-Herde
-standen
-jhrlich
-Anhang
-ntig
-Hirsch
-derjenige
-Kurzgeschichte
-kologische
-Theater
-willkommen
-ausben
-Kanal
-nennt
-Name
-wussten
-drcken
-aufnehmen
-ste
-Rcken
-intuition
-htte
-Zunahme
-Glubiger
-abzhlen
-Phnomen
-Ablage
-spontan
-spannend
-Vanessa
-Asien
-gewusst
-elektronisch
-derb
-getilgt
-Antwort
-geeignet
-Bote
-geqult
-Anerkennung
-Bilanz
-natrlich
-machbar
-Verpackung
-Blut
-Eltern
-Himbeere
-rumfliegen
-Senioren
-zwingen
-Spitze
-Taschendiebe
-steckt
-Monster
-Egotrip
-Helmut
-Bibel
-geerbt
-zitieren
-Ameisenbau
-Rekordgewinne
-Hnde
-ergnzen
-danach
-orden
-hinter
-wenn
-paddeln
-gutes
-Hinsicht
-wegen
-Teilhabe
-Gesellschaft
-christlich
-Bezugsquelle
-Igor
-ausprobieren
-Endpreis
-links
-gekrzt
-einkaufen
-Lied
-Gerhard
-gelohnt
-nackt
-Geburt
-gelehrt
-einseitig
-gedeckt
-hinweg
-Eduard
-Premiere
-demografisch
-ihre
-hchste
-wichtigsten
-Aufmerksamkeit
-Horde
-physisch
-Arbeitsklima
-Brief
-Notdurft
-proportional
-fordern
-Ewig
-denken
-Daniel
-Arabisch
-edle
-golden
-Minimum
-pure
-beibringen
-Boden
-Anzahl
-erschaffen
-Energie
-sehr
-Gercht
-Generation
-Ruber
-Motivation
-Chance
-dabei
-Programm
-segensreich
-April
-ignorieren
-Nase
-epochal
-Boot
-faszinieren
-Heilkunde
-Helikopter
-Computer
-Kabarettist
-wenig
-zuknftig
-sechzehn
-stimmt
-getragen
-reagieren
-Esoterik
-Koralle
-Dame
-Katastrophe
-liefern
-Grund
-Elend
-ausreichen
-Notenbank
-Garten
-zutiefst
-Immobilien
-Aspekt
-naiv
-besprechen
-zhlen
-Terminologie
-Amerika
-Atmosphre
-Iran
-debatte
-Sound
-Zugang
-fair
-unrentabel
-baut
-kollektiv
-schief
-Bank
-Mann
-Apropos
-Ergebnis
-Niederlande
-Mietshaus
-errichten
-Ereignis
-Portal
-erhielten
-erleben
-Haus
-Dschungel
-Null
-Pleite
-Seegras
-Entdeckung
-also
-Ebene
-Anbeginn
-kohrent
-Autor
-Mensch
-hielt
-Reich
-Land
-bekloppt
-auerdem
-Berg
-gleich
-sind
-Argument
-einverstanden
-Euro
-Sektor
-dagegen
-Knappheit
-Armut
-innerhalb
-Blume
-Problem
-Bruder
-Netzwerk
-Orte
-bedrngen
-Aufgabe
diff --git a/backend/src/config/mnemonic.words_ulf_org.txt b/backend/src/config/mnemonic.words_ulf_org.txt
deleted file mode 100644
index d0f96c49c..000000000
--- a/backend/src/config/mnemonic.words_ulf_org.txt
+++ /dev/null
@@ -1,2048 +0,0 @@
-Monumental
-Volksbank
-Beeren
-huschen
-leer
-Haft
-saagut
-Positiv
-daran
-solide
-dauerhaft
-zahlungsfähig
-beinhalten
-weglassen
-Ausmaß
-irrtümlich
-Impuls
-darüber
-Abriss
-setzten
-Herkunft
-manipulierbar
-anfängt
-anliegen
-Mutter
-Beobachter
-Zeichner
-dran
-genug
-Medikament
-Tanten
-behindern
-Johannes
-Rand
-Illusion
-anzuwenden
-Fehler
-erniedrigen
-gehören
-Güte
-unangenehm
-Horst
-Koordination
-weltweit
-geprägt
-unerlässlich
-einig
-mitbringen
-Dieb
-dann
-Karriere
-Ethik
-dich
-Ursachen
-beglücken
-Wahl
-dermaßen
-spritzen
-erbittert
-Maler
-täglich
-Wohlstand
-hübsch
-Klarheit
-voneinander
-berühmt
-Iris
-plausibel
-verlagern
-Lauf
-Foyer
-Idol
-spreizen
-Hölderlin
-Grenze
-Code
-Dogma
-langfristig
-Urzustand
-verursacht
-Fasching
-Finger
-König
-barbarisch
-einbringen
-Disziplin
-angreifen
-speichern
-Urheberrecht
-ermorden
-Diana
-Auswirkung
-beginnen
-kooperativ
-Ahnung
-allen
-bisschen
-durften
-Prostitution
-Strahlen
-Umschwung
-Foto
-taten
-Mechanismus
-Urvertrauen
-Chef
-feminin
-nirgendwo
-Absatzmarkt
-welches
-Entwicklung
-gearbeitet
-erblühen
-umtauschen
-Aufklärung
-online
-produktiv
-Pest
-Coach
-Anblick
-ursprünglich
-schon
-solange
-eventuell
-Tatsache
-erforderlich
-Buch
-derartig
-werden
-auseinander
-halten
-Maurer
-Himmel
-Loch
-Forum
-Kluft
-aufbauen
-bricht
-permanent
-saugen
-exponential
-Fetzen
-Mord
-unausweichlich
-untrennbar
-skeptisch
-geschützt
-Gebäude
-Butter
-bezeichnet
-Daunen
-Journalist
-ehrgeizig
-System
-Zugriff
-Anwalt
-Krone
-ankommt
-zulassen
-Stufenplan
-Raum
-Sanktion
-Währung
-Tradition
-Money
-dafür
-Gruppe
-solch
-geben
-geholfen
-frei
-Rahmen
-Rasen
-feindlich
-Wirklichkeit
-Unheil
-luden
-Ausgleich
-leugnen
-erklärt
-Vater
-Ingenieur
-Erfahrung
-Stil
-dörren
-wozu
-befassen
-gemäß
-Apotheke
-Vegan
-simultan
-wehen
-gang
-immateriell
-Wilhelm
-fertig
-kennen
-korrigieren
-Jahr
-Industrie
-hier
-Glück
-Anton
-Bionik
-abwaschen
-Hannes
-Diamant
-Anweisung
-angleichen
-Fördern
-Helene
-glasklar
-Abgaben
-beflügeln
-Trennung
-Ziegler
-überhaupt
-Guido
-rotieren
-treiben
-sowie
-Begründung
-Erdöl
-selig
-jegliche
-belastbar
-ehrlich
-Eier
-Schulden
-Brutto
-Paar
-Sitz
-hast
-annähern
-Neigung
-Menü
-messbar
-vervollständigt
-Erkenntnis
-pendeln
-Edwin
-römisch
-entstehen
-Gefahr
-Resonanz
-ungleich
-Sprache
-Tsunami
-Bindung
-Sympathie
-Bomber
-Schlusswort
-bislang
-befreien
-fegen
-drastisch
-greift
-obwohl
-bewährt
-Jörg
-drehen
-Quartett
-Betätigung
-Szene
-Kinder
-Respekt
-Empathie
-eher
-unwichtig
-besser
-nein
-Kredit
-liegen
-zulegen
-Forschung
-Hurrikan
-wesentlich
-Deutschland
-eintauchen
-entzünden
-betteln
-Islam
-Rohre
-Müll
-Tage
-sinken
-Hunger
-fungieren
-Radio
-Lohn
-lenken
-Container
-marode
-gering
-Ozean
-Revolution
-Meter
-tausend
-Kalkulation
-blau
-Hautfarbe
-Kurt
-Ding
-Mathematiker
-jene
-renovieren
-Popstar
-auferlegen
-unübersichtlich
-fantasievoll
-Bedürfnisse
-Maßstab
-Feier
-Onkel
-essen
-Stein
-einzeln
-Woche
-Sekunde
-Phantasie
-Blockade
-Chip
-Moment
-lüften
-Jasmin
-aufrecht
-eisern
-oder
-Fachsprache
-Komponist
-Vermögen
-allmählich
-Urwissen
-selbstregulierend
-Brust
-Leute
-Gegner
-Pause
-unqualifiziert
-August
-Umdrehung
-wegdenken
-gucken
-leihen
-vordringen
-Durst
-Seite
-fast
-hinaus
-Binnenland
-Bund
-sollt
-Albert
-Smartphone
-Kriminalität
-Protest
-Fremdkosten
-klingen
-Chicago
-Baum
-sammeln
-sehen
-soviel
-Horoskop
-keiner
-Pension
-soweit
-Quantensprung
-intrinsisch
-anno
-Züge
-Zeug
-Wissenschaft
-dass
-loszulassen
-brauchen
-Lehrer
-rufen
-Lama
-Sparen
-größte
-Kerl
-enthalten
-Flügel
-Rabatt
-ehrt
-endlich
-religiös
-Orchester
-braten
-Feedback
-exemplarisch
-Zitat
-Recht
-toll
-Zusammenfassung
-hervor
-Eigentum
-teuer
-nichtkommerziell
-benachbart
-leider
-Fahrzeug
-glauben
-putzen
-geübt
-begünstigen
-Kasten
-zuspitzen
-meckern
-organisation
-loben
-Anthropologie
-Seminar
-moralisch
-Last
-merken
-Samen
-kassieren
-Bube
-Engpass
-Hopfen
-Hirte
-Gefängnis
-Gedanke
-bepacken
-brillant
-verrichtet
-drohen
-Katze
-reif
-Fossilien
-gezeigt
-Packen
-persönlich
-denen
-wegweisend
-Horror
-Diplomat
-Japan
-pflanzlich
-kaltblütig
-Kunde
-Geruch
-Patriarch
-Garnele
-bedingungslos
-Prinzip
-Vergänglichkeit
-stört
-hinein
-Tomate
-halb
-geplatzt
-Theologe
-Vogel
-September
-Steak
-repräsentieren
-heißen
-hoch
-hinblick
-Wunsch
-frustriert
-Fidel
-Blödsinn
-früh
-Birne
-Hülle
-loslegen
-jetzt
-Biene
-regnen
-Celsius
-hören
-genommen
-Fleisch
-diejenigen
-davon
-vorrangig
-sonst
-herrschend
-ertragen
-Neuorientierung
-nächsten
-sozusagen
-Sabbat
-honorieren
-verwirklichen
-Mobbing
-Annahme
-Hügel
-Bedeutung
-Risiko
-riskieren
-ermöglichen
-hemmen
-Frist
-Klima
-böse
-sofern
-Paul
-vertieft
-missionieren
-zuvor
-Nagel
-backen
-getauft
-dazu
-Blech
-zufolge
-Koch
-immerwährend
-Regenwald
-Finnland
-altruistisch
-grau
-Oktober
-Universität
-Philosoph
-Ungarn
-Wirtschaft
-hinlänglich
-Abteil
-sperrt
-aggressiv
-Gast
-externe
-Saat
-Zustand
-losfliegen
-egal
-Dubai
-aktiv
-flattern
-zunehmend
-Bauweise
-erreichen
-Markus
-gegründet
-zwölf
-Rente
-zwar
-leicht
-Fischer
-Emotion
-dunkel
-Vision
-fressen
-dritter
-athletisch
-warum
-Lage
-bestimmt
-Mitwirkender
-Totenkopf
-Qualität
-hegen
-Ecke
-erhalten
-fuhr
-Sklave
-getätigt
-belügen
-gutmachen
-breit
-konnten
-Obst
-subventionieren
-Pflicht
-Planet
-keimen
-sogar
-deshalb
-Milch
-Gesicht
-zögern
-fundamental
-Zwang
-typisch
-gefunden
-offen
-Publikum
-wieso
-strukturell
-Voraussetzung
-umhin
-Geduld
-dient
-Professor
-wechseln
-Minute
-Ärmel
-Konto
-waren
-Information
-ganz
-studieren
-Reihenhaus
-Henry
-oftmals
-Apfelbaum
-reißen
-Labor
-effektiv
-Umfeld
-sogenannten
-Insolvenz
-erzwingen
-später
-funktionieren
-Meile
-extrem
-Hallo
-mitdenken
-Heim
-Praxis
-lediglich
-Kohle
-inmitten
-berichten
-Soja
-Firma
-rasant
-relativ
-doof
-Belgien
-Rendite
-Auge
-abschreiben
-Direktor
-unsere
-Absätze
-plus
-suchen
-inklusive
-somit
-Spirit
-verändern
-Test
-Bewohner
-eindeutig
-Strom
-leiten
-Zentralbank
-Austausch
-pickt
-weise
-Tourismus
-spielen
-Absicht
-Beachtung
-Spekulation
-ernst
-telefonieren
-Trotz
-Technologie
-indigene
-gelöst
-Thomas
-Blüte
-Ferienjob
-geteilt
-Heinrich
-gelangen
-Situation
-Kunst
-Zufall
-Haufen
-geworden
-Wurzel
-Punkt
-Temperatur
-zukunftsfähig
-Opfer
-Josef
-nutzen
-Kauf
-annehmen
-Klaus
-berauben
-Griff
-erdacht
-neulich
-geändert
-besitzen
-liberal
-kopieren
-superreich
-bekommen
-Kolumbus
-Mangel
-Steffi
-Hase
-bahnbrechend
-Norbert
-Karte
-kreativ
-unverändert
-effizient
-Historiker
-anschließend
-Stichtag
-These
-nimmt
-Finanzblase
-wegnehmen
-heutige
-Hexe
-Foliant
-Flamme
-Diktatur
-klick
-Mitleidenschaft
-dick
-vorliegend
-verhindern
-Klasse
-uralt
-Abfall
-stoßen
-lernen
-ethnisch
-Eleganz
-schmackhaft
-helfen
-Wind
-Pfarrer
-neueste
-anfangen
-Erich
-ausatmen
-Präzision
-Stück
-aktuell
-unproduktiv
-dastehen
-runter
-Figaro
-Internet
-Gäste
-sträflich
-Angst
-Bedarf
-Ozonloch
-Bioprodukte
-mögen
-Abraham
-Sohn
-Nebensitzer
-zudem
-Konzept
-Russland
-erzeugt
-Stress
-Hanau
-Hugo
-zehn
-resultieren
-Dach
-junge
-lehnen
-Bewirtschaftung
-gekommen
-erproben
-durch
-Häuser
-gigantisch
-unendlich
-Wegfall
-Irland
-Reparatur
-perfekt
-Pilz
-Zauberwort
-Dorf
-darin
-absolut
-Anbau
-Dung
-müssen
-betreiben
-sieht
-investieren
-Ansatz
-Vorwort
-ablegen
-Verantwortung
-gebaut
-Dreck
-Feld
-explizit
-Harmonie
-Rangordnung
-maximal
-meiner
-vereinigt
-Hamburg
-clever
-global
-unfreiwillig
-tierisch
-Bayern
-Importgüter
-schenken
-Donnerstag
-Puffer
-Rohstoff
-britisch
-Samuel
-Handel
-anstatt
-Sprung
-Dollar
-Lösung
-Engagement
-Oberst
-unmöglich
-Goethe
-zehren
-Humorist
-neuartig
-plötzlich
-Graf
-ging
-intakt
-tragen
-nahm
-zusätzlich
-Potenzial
-beeinflussen
-ziemlich
-Beitrag
-Fest
-Hektik
-beliebt
-ergibt
-ausbeuten
-vorhanden
-klagt
-wegrationalisieren
-bequem
-werben
-Welle
-Spuren
-decken
-autistisch
-Satz
-musizieren
-Umlaufbahn
-nützlich
-simpel
-sauber
-Fortschritt
-losgelöst
-bist
-weder
-ungünstig
-Meer
-treffen
-peinlich
-einnehmen
-bewegte
-notbedingt
-benennen
-Zugvogel
-identisch
-Infrastruktur
-Blase
-erfinden
-modern
-gähnen
-Sportler
-alte
-aufs
-Kampf
-Nikolaus
-fröhlich
-Stockwerk
-Fabel
-Brasilien
-passend
-abgeschaut
-Pädagoge
-militärisch
-Spaß
-beugen
-Einwohner
-Ressourcen
-Lunge
-Discounter
-insbesondere
-lukrativ
-bloß
-erarbeiten
-Referat
-Neuseeland
-Rose
-Abhängigkeit
-Gänse
-Duft
-Pilot
-vernachlässigt
-Lausbub
-Darsteller
-Bezahlung
-Wörtchen
-Seele
-altbekannt
-Seil
-Lothar
-irgendwann
-Ironie
-Titel
-zumindest
-Aussage
-bezwingen
-Errungenschaft
-Medaille
-Uhren
-unmittelbar
-treten
-richtung
-wahr
-mitverursachen
-bilden
-Tennisspielerin
-jenseits
-Mädchen
-aber
-Territorium
-Fenchel
-Spende
-Definition
-draußen
-parallel
-annimmt
-allgemein
-King
-verbessert
-sowohl
-Methode
-Affe
-Dank
-Versorgung
-Staunen
-Vorteil
-gegangen
-ansonsten
-kommt
-beim
-Gefrierpunkt
-senkt
-Elster
-unter
-Äther
-niemand
-dennoch
-Zeit
-Schriftsteller
-klettern
-boshaft
-ohne
-riesig
-sorgfältig
-Slums
-Beschränkung
-Gehalt
-hergestellt
-Urlaub
-Gabe
-Kapazität
-werfen
-suggerieren
-Rolle
-Guthaben
-Höhle
-nehmen
-unfair
-gemacht
-Flur
-kannst
-Rassenkonflikte
-Herbizide
-Twitter
-iPhone
-Bausparkasse
-entfalten
-Vorbild
-Orientale
-erwidern
-abrupt
-mich
-dein
-Krieg
-umkämpft
-Kriterium
-behaupten
-Mitarbeiter
-runden
-Wort
-hereinholen
-beurteilen
-Frieden
-totalversagen
-Africa
-konfrontiert
-Grün
-sofort
-ersten
-Dotter
-Facebook
-gelingen
-Unsinn
-Arthur
-umstellen
-Kultur
-Urmutter
-Pyramide
-Obsoleszenz
-Biedermeier
-gewehrt
-heraus
-ideal
-ihnen
-ausnahmslos
-gerecht
-satt
-Inspiration
-Sägemehl
-jemanden
-pflegen
-Laden
-optimieren
-spazieren
-mitnehmen
-sondern
-Nektar
-anbringen
-vorne
-günstig
-Vorfall
-blind
-widerstehen
-einpendeln
-einmal
-Krebs
-Einleitung
-Institut
-desto
-Alibi
-Besen
-auftreten
-zuschauen
-Haar
-Baukasten
-ließen
-polar
-Umsetzung
-Millionär
-prima
-gilt
-insgesamt
-Wartung
-inländisch
-reiten
-befinden
-bekannt
-Niveau
-Faktor
-Antike
-gutschreiben
-antreiben
-Drama
-Floh
-praktisch
-unzählig
-heikel
-leiblich
-Augsburg
-Keller
-Abendessen
-anheben
-retten
-schnell
-erhält
-voriges
-Wertschätzung
-unnütz
-neunziger
-Prozess
-Flutwelle
-umfangreich
-Geld
-haben
-gekauft
-Öse
-zukommen
-Querdenker
-genmanipuliert
-müde
-Seerose
-gewaltfrei
-Fiat
-Negativität
-faul
-Datum
-erfunden
-gepachtet
-sauer
-bisher
-wollen
-Bonität
-erbringen
-restlich
-oben
-Fuß
-Flotte
-Robert
-Phase
-Inflation
-tapfer
-weinen
-zeigen
-hoffentlich
-hingen
-mutig
-prüfen
-lustig
-gravierend
-Fondue
-ehemalig
-mitharbeiten
-Steuern
-Holland
-stabil
-dessen
-Initiative
-geblieben
-nachfolgen
-Befehl
-Nordstern
-dahinter
-Gott
-Erbsen
-Unmenschlichkeit
-Reise
-euch
-Papa
-Ersatz
-Bande
-womit
-gerne
-auskommen
-nahezu
-Brücke
-Küche
-Traum
-selten
-manche
-häkeln
-Summe
-würdigen
-einräumen
-Lebzeiten
-bitte
-atmen
-Licht
-gekriegt
-Neidisch
-umso
-Erde
-Wolfgang
-letzten
-eignen
-dezentral
-genießen
-klein
-Sanft
-pathologisch
-anbieten
-zugänglich
-Flug
-Bonus
-regulieren
-stolz
-Zyklus
-zerstören
-fiel
-Basis
-delegieren
-Legehenne
-Leser
-Fieber
-wunderbar
-Familie
-Hippie
-Gemeinschaft
-Stunde
-Zwergstaat
-sagen
-fokussieren
-toxisch
-psychologisch
-fragen
-Bach
-zaudern
-Lektorat
-Ausland
-Fackel
-mehr
-Datenbank
-runzlig
-erwähnen
-Zimmerleute
-Spuk
-Preis
-Einführung
-gewidmet
-talentiert
-Gregor
-Inhalt
-Human
-Südafrika
-Sozialabgaben
-Erfüllung
-benutzt
-Englisch
-Nationalstaat
-Krankheit
-gönnen
-unschätzbar
-Fähigkeit
-Tellerwäscher
-damit
-bebauen
-Ehre
-Software
-stirbt
-Honig
-Altlasten
-zuwider
-Hobby
-murmeln
-beziffern
-degradieren
-geformt
-Zufriedenheit
-erlaubt
-Fluss
-Ratgeber
-Fernseher
-Hesse
-jammern
-verzeihen
-Wagen
-Mahlzeit
-Abwicklung
-Lizenz
-Umwelt
-Papst
-Wolke
-Fontane
-Weggefährte
-Fläche
-ausdrücklich
-stetig
-dumm
-Webseite
-besonders
-signifikant
-exakt
-virtuell
-weichen
-hilft
-Topmanager
-dazwischen
-dringend
-herzlich
-kaum
-Haupt
-gespielt
-einher
-Arzt
-gewöhnt
-florieren
-Anziehung
-senden
-Fichte
-eingeführt
-Anlass
-Locke
-geboren
-zuerst
-mahnen
-evolutionär
-beißen
-Forelle
-wenden
-Umsatz
-drucken
-führen
-Pflock
-Haiti
-Miesmacher
-Estland
-Staatseinkommen
-Motte
-dort
-aufhören
-Konsum
-gutwillig
-Befürworter
-Ketzer
-Blick
-Hühner
-bunkern
-erinnern
-Fohlen
-hatten
-zwitschern
-Gentechnik
-Berlin
-foppen
-Gier
-Leonardo
-väterlich
-Hähnchen
-bereits
-Designer
-rebellieren
-Ufer
-auch
-Hütte
-Übel
-Eden
-Hermann
-ungewöhnlich
-Partei
-gnädig
-womöglich
-Winter
-anzetteln
-vorprogrammiert
-Fips
-Flagge
-zinslos
-weil
-bewahrt
-Werk
-Atom
-Akademie
-Anker
-Sonne
-derselbe
-Sockel
-Somalia
-wann
-erzählen
-Abstand
-enorm
-indem
-etwas
-Erasmus
-vorkommen
-Rede
-Tokio
-dreifach
-halfen
-Zivilisation
-Luftfahrt
-Endverbraucher
-Mama
-Angebot
-Vorschlag
-hart
-lokal
-Sorte
-Priorität
-jedoch
-genügend
-dadurch
-Branche
-großartig
-Regal
-garantiert
-unbewusst
-Migrant
-Auerhahn
-David
-stärken
-Erbe
-notfalls
-hindurch
-wickeln
-quasi
-darf
-comedy
-gehen
-Start
-verdeckt
-Dosis
-Brezel
-Element
-Kurs
-Ämter
-leuchten
-zwischen
-Beileid
-weiblich
-Ruder
-Zoologe
-aushalten
-neugeboren
-spüren
-Ingwer
-fließen
-Idee
-Samstag
-trainieren
-Flandern
-Auffassung
-ziehen
-Masse
-Nina
-Arten
-Gnade
-Spezial
-unkonventionell
-Wald
-Jugend
-Busch
-Fabian
-dokumentieren
-Felix
-Film
-belohnt
-Gertrud
-architektur
-derzeitig
-echt
-Tagtraum
-Margret
-Objektivität
-Sieger
-empfinden
-Beamten
-akzeptieren
-laut
-Sternenstaub
-Stadt
-Aristoteles
-Ferrari
-finden
-Google
-Westen
-Fratze
-Bauer
-Kreislauf
-wovon
-Jürgen
-gerade
-Platz
-Madonna
-Zahnersatz
-Marianne
-euer
-Privat
-Schatten
-hundert
-besucht
-aufwärts
-dynamisch
-Sahne
-viel
-Teufel
-Gebrauchsanweisung
-Gradido
-sieben
-Flucht
-holen
-baden
-ändern
-jüngeren
-Natur
-chinesisch
-Rohmaterial
-Hauch
-Konkurrenz
-fiktiv
-akkumulieren
-Ball
-beenden
-bemüht
-recyclebar
-gedruckt
-vegetarisch
-woran
-erwerben
-lasst
-bleiben
-Radfahrer
-Bücher
-Klavier
-genannt
-Quelle
-erheblich
-gegenseitig
-abzahlen
-stagnieren
-Hubert
-Ende
-Crash
-Trinkwasser
-Franz
-Insekt
-sensibilisieren
-Erneuerung
-Sehnen
-Maus
-Frau
-betonung
-stiege
-Porsche
-beide
-absurd
-dato
-Österreich
-beteiligen
-dies
-gezwungen
-anvertrauen
-Tilgung
-Feder
-logisch
-konventionell
-fatal
-kulinarisch
-Abholzung
-Cicero
-nostalgischen
-schützen
-brachte
-Metzger
-geehrt
-Flasche
-bringt
-Villa
-Krise
-bietet
-Entlastung
-ausführung
-Wikipedia
-stellen
-Park
-Video
-Papiergeld
-voll
-inzwischen
-Jäger
-Topf
-ülzen
-umgekehrt
-Hanf
-Februar
-zirkulieren
-John
-heben
-Novellierung
-unfähig
-servieren
-Meier
-jeweilig
-Heuschrecke
-daher
-Alexander
-Peter
-erkannt
-Gehirn
-lateinisch
-anpassbar
-anderen
-Artikel
-Wucht
-Leben
-sein
-exzellent
-beantworten
-Asche
-reduzieren
-Hersteller
-Victor
-zumal
-Plage
-hassen
-fünf
-liebevoll
-für
-Acker
-morphogenetisch
-Sachverhalt
-umpolen
-gibt
-Busfahrer
-beherzigen
-weitergeben
-brav
-jeder
-sich
-Galaxis
-steht
-Maschine
-erzielen
-Sanierung
-Kraft
-Netto
-Begabung
-ersetzen
-mindest
-gestorben
-Osten
-Gebiet
-Zweifel
-zugleich
-wild
-kameradschaftlich
-Farbe
-Mitmensch
-bevölkern
-gesamt
-Mittel
-Reporter
-Kilometer
-kostenlos
-mobil
-wehren
-herunter
-Ansehen
-erfrischend
-Hotel
-Analyse
-Griechisch
-Abwurf
-käuflich
-Bernd
-entgegengesetzt
-Bewusstsein
-ankaufen
-zurzeit
-Impressum
-Toast
-Ladung
-Verfütterung
-Form
-Wasser
-gesund
-noch
-horchen
-Variante
-Anleitung
-Pazifik
-Wiederherstellung
-Wandel
-transformieren
-Tisch
-verknappt
-Material
-Realisierung
-einer
-Daimler
-unvorstellbar
-meldete
-Strickmuster
-stammen
-Menge
-Verifizieren
-tief
-Puzzle
-Gepflogenheit
-Ziel
-dürfen
-doch
-Sinn
-Region
-fangen
-zuteil
-Anspruch
-kehrte
-Freund
-Fimmel
-darum
-Girokonto
-Zweck
-Wohngemeinschaft
-Projekt
-schweigen
-Kupfer
-tauchen
-holzig
-Tendenz
-abhalten
-Nummer
-bald
-Töne
-Salvador
-Kapitel
-Ibiza
-Komfort
-wobei
-lachen
-Wagnis
-metaphorisch
-gelb
-bevor
-unnatürlich
-Leasing
-bemerkenswert
-zugute
-beruhen
-soeben
-Kopf
-wischen
-appellieren
-gelten
-statt
-Futter
-Erdball
-benötigt
-futsch
-Symbol
-wofür
-Glanz
-beispiellos
-normalen
-mitfinanzieren
-Frucht
-italienisch
-woher
-allzu
-beleben
-weigern
-Senf
-Gift
-atemlos
-Cäsar
-Begegnung
-horten
-sobald
-Luxus
-biologisch
-Wettbewerb
-Umkehrschluss
-fallen
-Darlehen
-klug
-anpreisen
-doppelt
-abwechslungsreich
-Werner
-nannte
-Wittenberg
-existenzbedrohend
-deren
-zynisch
-Feuer
-Leistung
-Ideologie
-Enkel
-diskutiert
-pervers
-Brot
-Ordnung
-blubbern
-einander
-College
-folgen
-Anreiz
-Agrarfläche
-aufdecken
-zerrinnen
-ergründen
-spalten
-unehelich
-Experte
-viertel
-gezogen
-Mitspieler
-geklappt
-Kette
-Petrus
-Nahrung
-Georg
-Patent
-Unkenntlich
-Waage
-ernähren
-Botschafter
-hell
-Zelle
-Silbe
-pfiffig
-Mystisch
-Acht
-ahnen
-erkämpft
-Team
-zunächst
-Benzin
-falsch
-erwarten
-raffen
-Auflage
-Thema
-ernten
-Monat
-lindern
-meisten
-zurückerlangen
-Fenster
-unabhängig
-Jesus
-geistig
-divers
-Göttingen
-unruhig
-Kategorie
-fassen
-hinzu
-Wachstum
-Sven
-Chemie
-quälen
-Herde
-standen
-jährlich
-Anhang
-nötig
-Hirsch
-derjenige
-Kurzgeschichte
-ökologische
-Theater
-willkommen
-ausüben
-Kanal
-nennt
-Name
-wussten
-drücken
-aufnehmen
-Äste
-Rücken
-intuition
-hätte
-Zunahme
-Gläubiger
-abzählen
-Phänomen
-Ablage
-spontan
-spannend
-Vanessa
-Asien
-gewusst
-elektronisch
-derb
-getilgt
-Antwort
-geeignet
-Bote
-gequält
-Anerkennung
-Bilanz
-natürlich
-machbar
-Verpackung
-Blut
-Eltern
-Himbeere
-rumfliegen
-Senioren
-zwingen
-Spitze
-Taschendiebe
-steckt
-Monster
-Egotrip
-Helmut
-Bibel
-geerbt
-zitieren
-Ameisenbau
-Rekordgewinne
-Hände
-ergänzen
-danach
-orden
-hinter
-wenn
-paddeln
-gutes
-Hinsicht
-wegen
-Teilhabe
-Gesellschaft
-christlich
-Bezugsquelle
-Igor
-ausprobieren
-Endpreis
-links
-gekürzt
-einkaufen
-Lied
-Gerhard
-gelohnt
-nackt
-Geburt
-gelehrt
-einseitig
-gedeckt
-hinweg
-Eduard
-Premiere
-demografisch
-ihre
-höchste
-wichtigsten
-Aufmerksamkeit
-Horde
-physisch
-Arbeitsklima
-Brief
-Notdurft
-proportional
-fordern
-Ewig
-denken
-Daniel
-Arabisch
-edle
-golden
-Minimum
-pure
-beibringen
-Boden
-Anzahl
-erschaffen
-Energie
-sehr
-Gerücht
-Generation
-Räuber
-Motivation
-Chance
-dabei
-Programm
-segensreich
-April
-ignorieren
-Nase
-epochal
-Boot
-faszinieren
-Heilkunde
-Helikopter
-Computer
-Kabarettist
-wenig
-zukünftig
-sechzehn
-stimmt
-getragen
-reagieren
-Esoterik
-Koralle
-Dame
-Katastrophe
-liefern
-Grund
-Elend
-ausreichen
-Notenbank
-Garten
-zutiefst
-Immobilien
-Aspekt
-naiv
-besprechen
-zählen
-Terminologie
-Amerika
-Atmosphäre
-Iran
-debatte
-Sound
-Zugang
-fair
-unrentabel
-baut
-kollektiv
-schief
-Bank
-Mann
-Apropos
-Ergebnis
-Niederlande
-Mietshaus
-errichten
-Ereignis
-Portal
-erhielten
-erleben
-Haus
-Dschungel
-Null
-Pleite
-Seegras
-Entdeckung
-also
-Ebene
-Anbeginn
-kohärent
-Autor
-Mensch
-hielt
-Reich
-Land
-bekloppt
-außerdem
-Berg
-gleich
-sind
-Argument
-einverstanden
-Euro
-Sektor
-dagegen
-Knappheit
-Armut
-innerhalb
-Blume
-Problem
-Bruder
-Netzwerk
-Orte
-bedrängen
-Aufgabe
diff --git a/backend/src/graphql/arg/CheckUsernameArgs.ts b/backend/src/graphql/arg/CheckUsernameArgs.ts
deleted file mode 100644
index 64265b64e..000000000
--- a/backend/src/graphql/arg/CheckUsernameArgs.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { ArgsType, Field } from 'type-graphql'
-
-@ArgsType()
-export default class CheckUsernameArgs {
- @Field(() => String)
- username: string
-}
diff --git a/backend/src/graphql/arg/CreateUserArgs.ts b/backend/src/graphql/arg/CreateUserArgs.ts
index 0d63e76bb..af915b91a 100644
--- a/backend/src/graphql/arg/CreateUserArgs.ts
+++ b/backend/src/graphql/arg/CreateUserArgs.ts
@@ -16,4 +16,7 @@ export default class CreateUserArgs {
@Field(() => Int, { nullable: true })
publisherId: number
+
+ @Field(() => String, { nullable: true })
+ redeemCode?: string | null
}
diff --git a/backend/src/graphql/arg/Paginated.ts b/backend/src/graphql/arg/Paginated.ts
index 85853a1c7..97326caf2 100644
--- a/backend/src/graphql/arg/Paginated.ts
+++ b/backend/src/graphql/arg/Paginated.ts
@@ -1,5 +1,5 @@
import { ArgsType, Field, Int } from 'type-graphql'
-import { Order } from '../enum/Order'
+import { Order } from '@enum/Order'
@ArgsType()
export default class Paginated {
@@ -11,10 +11,4 @@ export default class Paginated {
@Field(() => Order, { nullable: true })
order?: Order
-
- @Field(() => Boolean, { nullable: true })
- onlyCreations?: boolean
-
- @Field(() => Int, { nullable: true })
- userId?: number
}
diff --git a/backend/src/graphql/arg/SearchUsersArgs.ts b/backend/src/graphql/arg/SearchUsersArgs.ts
new file mode 100644
index 000000000..52da77852
--- /dev/null
+++ b/backend/src/graphql/arg/SearchUsersArgs.ts
@@ -0,0 +1,19 @@
+import { ArgsType, Field, Int } from 'type-graphql'
+
+@ArgsType()
+export default class SearchUsersArgs {
+ @Field(() => String)
+ searchText: string
+
+ @Field(() => Int, { nullable: true })
+ currentPage?: number
+
+ @Field(() => Int, { nullable: true })
+ pageSize?: number
+
+ @Field(() => Boolean, { nullable: true })
+ notActivated?: boolean
+
+ @Field(() => Boolean, { nullable: true })
+ isDeleted?: boolean
+}
diff --git a/backend/src/graphql/arg/TransactionLinkArgs.ts b/backend/src/graphql/arg/TransactionLinkArgs.ts
new file mode 100644
index 000000000..553efcfbe
--- /dev/null
+++ b/backend/src/graphql/arg/TransactionLinkArgs.ts
@@ -0,0 +1,11 @@
+import { ArgsType, Field } from 'type-graphql'
+import Decimal from 'decimal.js-light'
+
+@ArgsType()
+export default class TransactionLinkArgs {
+ @Field(() => Decimal)
+ amount: Decimal
+
+ @Field(() => String)
+ memo: string
+}
diff --git a/backend/src/graphql/arg/TransactionSendArgs.ts b/backend/src/graphql/arg/TransactionSendArgs.ts
index cf4e43d94..e75921383 100644
--- a/backend/src/graphql/arg/TransactionSendArgs.ts
+++ b/backend/src/graphql/arg/TransactionSendArgs.ts
@@ -1,12 +1,13 @@
import { ArgsType, Field } from 'type-graphql'
+import Decimal from 'decimal.js-light'
@ArgsType()
export default class TransactionSendArgs {
@Field(() => String)
email: string
- @Field(() => Number)
- amount: number
+ @Field(() => Decimal)
+ amount: Decimal
@Field(() => String)
memo: string
diff --git a/backend/src/graphql/arg/UpdateUserInfosArgs.ts b/backend/src/graphql/arg/UpdateUserInfosArgs.ts
index dca9ec4ab..d1e95ebef 100644
--- a/backend/src/graphql/arg/UpdateUserInfosArgs.ts
+++ b/backend/src/graphql/arg/UpdateUserInfosArgs.ts
@@ -8,12 +8,6 @@ export default class UpdateUserInfosArgs {
@Field({ nullable: true })
lastName?: string
- @Field({ nullable: true })
- description?: string
-
- @Field({ nullable: true })
- username?: string
-
@Field({ nullable: true })
language?: string
diff --git a/backend/src/graphql/directive/isAuthorized.ts b/backend/src/graphql/directive/isAuthorized.ts
index 19cd7bcdb..84756c45a 100644
--- a/backend/src/graphql/directive/isAuthorized.ts
+++ b/backend/src/graphql/directive/isAuthorized.ts
@@ -2,35 +2,45 @@
import { AuthChecker } from 'type-graphql'
-import { decode, encode } from '../../auth/JWT'
-import { ROLE_UNAUTHORIZED, ROLE_USER, ROLE_ADMIN } from '../../auth/ROLES'
-import { RIGHTS } from '../../auth/RIGHTS'
-import { ServerUserRepository } from '../../typeorm/repository/ServerUser'
-import { getCustomRepository } from 'typeorm'
-import { UserRepository } from '../../typeorm/repository/User'
+import { decode, encode } from '@/auth/JWT'
+import { ROLE_UNAUTHORIZED, ROLE_USER, ROLE_ADMIN } from '@/auth/ROLES'
+import { RIGHTS } from '@/auth/RIGHTS'
+import { getCustomRepository } from '@dbTools/typeorm'
+import { UserRepository } from '@repository/User'
+import { INALIENABLE_RIGHTS } from '@/auth/INALIENABLE_RIGHTS'
+import { ServerUser } from '@entity/ServerUser'
const isAuthorized: AuthChecker = async ({ context }, rights) => {
context.role = ROLE_UNAUTHORIZED // unauthorized user
- // Do we have a token?
- if (context.token) {
- const decoded = decode(context.token)
- if (!decoded) {
- // we always throw on an invalid token
- throw new Error('403.13 - Client certificate revoked')
- }
- // Set context pubKey
- context.pubKey = Buffer.from(decoded.pubKey).toString('hex')
- // set new header token
- // TODO - load from database dynamically & admin - maybe encode this in the token to prevent many database requests
- // TODO this implementation is bullshit - two database queries cause our user identifiers are not aligned and vary between email, id and pubKey
- const userRepository = await getCustomRepository(UserRepository)
- const user = await userRepository.findByPubkeyHex(context.pubKey)
- const serverUserRepository = await getCustomRepository(ServerUserRepository)
- const countServerUsers = await serverUserRepository.count({ email: user.email })
- context.role = countServerUsers > 0 ? ROLE_ADMIN : ROLE_USER
+ // is rights an inalienable right?
+ if ((rights).reduce((acc, right) => acc && INALIENABLE_RIGHTS.includes(right), true))
+ return true
- context.setHeaders.push({ key: 'token', value: encode(decoded.pubKey) })
+ // Do we have a token?
+ if (!context.token) {
+ throw new Error('401 Unauthorized')
+ }
+
+ // Decode the token
+ const decoded = decode(context.token)
+ if (!decoded) {
+ throw new Error('403.13 - Client certificate revoked')
+ }
+ // Set context pubKey
+ context.pubKey = Buffer.from(decoded.pubKey).toString('hex')
+
+ // TODO - load from database dynamically & admin - maybe encode this in the token to prevent many database requests
+ // TODO this implementation is bullshit - two database queries cause our user identifiers are not aligned and vary between email, id and pubKey
+ const userRepository = await getCustomRepository(UserRepository)
+ try {
+ const user = await userRepository.findByPubkeyHex(context.pubKey)
+ context.user = user
+ const countServerUsers = await ServerUser.count({ email: user.email })
+ context.role = countServerUsers > 0 ? ROLE_ADMIN : ROLE_USER
+ } catch {
+ // in case the database query fails (user deleted)
+ throw new Error('401 Unauthorized')
}
// check for correct rights
@@ -39,6 +49,8 @@ const isAuthorized: AuthChecker = async ({ context }, rights) => {
throw new Error('401 Unauthorized')
}
+ // set new header token
+ context.setHeaders.push({ key: 'token', value: encode(decoded.pubKey) })
return true
}
diff --git a/backend/src/graphql/enum/TransactionTypeId.ts b/backend/src/graphql/enum/TransactionTypeId.ts
index 4ff3671cf..a7e39eebc 100644
--- a/backend/src/graphql/enum/TransactionTypeId.ts
+++ b/backend/src/graphql/enum/TransactionTypeId.ts
@@ -3,6 +3,10 @@ import { registerEnumType } from 'type-graphql'
export enum TransactionTypeId {
CREATION = 1,
SEND = 2,
+ RECEIVE = 3,
+ // This is a virtual property, never occurring on the database
+ DECAY = 4,
+ LINK_SUMMARY = 5,
}
registerEnumType(TransactionTypeId, {
diff --git a/backend/src/graphql/model/Balance.ts b/backend/src/graphql/model/Balance.ts
index 93d497e0c..2f1eeb406 100644
--- a/backend/src/graphql/model/Balance.ts
+++ b/backend/src/graphql/model/Balance.ts
@@ -1,21 +1,22 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { ObjectType, Field } from 'type-graphql'
+import Decimal from 'decimal.js-light'
@ObjectType()
export class Balance {
constructor(json: any) {
- this.balance = Number(json.balance)
- this.decay = Number(json.decay)
+ this.balance = json.balance
+ this.decay = json.decay
this.decayDate = json.decay_date
}
- @Field(() => Number)
- balance: number
+ @Field(() => Decimal)
+ balance: Decimal
- @Field(() => Number)
- decay: number
+ @Field(() => Decimal)
+ decay: Decimal
- @Field(() => String)
- decayDate: string
+ @Field(() => Date)
+ decayDate: Date
}
diff --git a/backend/src/graphql/model/Decay.ts b/backend/src/graphql/model/Decay.ts
index 48ed7b8c5..f1204e730 100644
--- a/backend/src/graphql/model/Decay.ts
+++ b/backend/src/graphql/model/Decay.ts
@@ -1,33 +1,34 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { ObjectType, Field, Int } from 'type-graphql'
+import Decimal from 'decimal.js-light'
@ObjectType()
export class Decay {
- constructor(json: any) {
- if (json) {
- this.balance = Number(json.balance)
- this.decayStart = json.decay_start
- this.decayEnd = json.decay_end
- this.decayDuration = json.decay_duration
- this.decayStartBlock = json.decay_start_block
- }
+ constructor(
+ balance: Decimal,
+ decay: Decimal,
+ start: Date | null,
+ end: Date | null,
+ duration: number | null,
+ ) {
+ this.balance = balance
+ this.decay = decay
+ this.start = start
+ this.end = end
+ this.duration = duration
}
- @Field(() => Number)
- balance: number
+ @Field(() => Decimal)
+ balance: Decimal
- // timestamp in seconds
- @Field(() => Int, { nullable: true })
- decayStart: string
+ @Field(() => Decimal)
+ decay: Decimal
- // timestamp in seconds
- @Field(() => Int, { nullable: true })
- decayEnd: string
+ @Field(() => Date, { nullable: true })
+ start: Date | null
- @Field(() => String, { nullable: true })
- decayDuration?: number
+ @Field(() => Date, { nullable: true })
+ end: Date | null
@Field(() => Int, { nullable: true })
- decayStartBlock?: string
+ duration: number | null
}
diff --git a/backend/src/graphql/model/GdtEntry.ts b/backend/src/graphql/model/GdtEntry.ts
index 2f4b31b00..43529fb06 100644
--- a/backend/src/graphql/model/GdtEntry.ts
+++ b/backend/src/graphql/model/GdtEntry.ts
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { ObjectType, Field } from 'type-graphql'
-import { GdtEntryType } from '../enum/GdtEntryType'
+import { GdtEntryType } from '@enum/GdtEntryType'
@ObjectType()
export class GdtEntry {
diff --git a/backend/src/graphql/model/GdtSumPerEmail.ts b/backend/src/graphql/model/GdtSumPerEmail.ts
deleted file mode 100644
index c90c7293b..000000000
--- a/backend/src/graphql/model/GdtSumPerEmail.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-/*
-import { ObjectType, Field } from 'type-graphql'
-
-@ObjectType()
-export class GdtSumPerEmail {
- constructor(email: string, summe: number) {
- this.email = email
- this.summe = summe
- }
-
- @Field(() => String)
- email: string
-
- @Field(() => Number)
- summe: number
-}
-*/
diff --git a/backend/src/graphql/model/Transaction.ts b/backend/src/graphql/model/Transaction.ts
index 3aa3c429d..684224175 100644
--- a/backend/src/graphql/model/Transaction.ts
+++ b/backend/src/graphql/model/Transaction.ts
@@ -1,55 +1,75 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { ObjectType, Field } from 'type-graphql'
import { Decay } from './Decay'
-
-// we need a better solution for the decay block:
-// the first transaction on the first page shows the decay since the last transaction
-// the format is actually a Decay and not a Transaction.
-// Therefore we have a lot of nullable fields, which should be always present
+import { Transaction as dbTransaction } from '@entity/Transaction'
+import Decimal from 'decimal.js-light'
+import { TransactionTypeId } from '@enum/TransactionTypeId'
+import { User } from './User'
@ObjectType()
export class Transaction {
- constructor() {
- this.type = ''
- this.balance = 0
- this.totalBalance = 0
- this.memo = ''
+ constructor(transaction: dbTransaction, user: User, linkedUser: User | null = null) {
+ this.id = transaction.id
+ this.user = user
+ this.previous = transaction.previous
+ this.typeId = transaction.typeId
+ this.amount = transaction.amount
+ this.balance = transaction.balance
+ this.balanceDate = transaction.balanceDate
+ if (!transaction.decayStart) {
+ this.decay = new Decay(transaction.balance, new Decimal(0), null, null, null)
+ } else {
+ this.decay = new Decay(
+ transaction.balance,
+ transaction.decay,
+ transaction.decayStart,
+ transaction.balanceDate,
+ Math.round((transaction.balanceDate.getTime() - transaction.decayStart.getTime()) / 1000),
+ )
+ }
+ this.memo = transaction.memo
+ this.creationDate = transaction.creationDate
+ this.linkedUser = linkedUser
+ this.linkedTransactionId = transaction.linkedTransactionId
+ this.transactionLinkId = transaction.transactionLinkId
}
- @Field(() => String)
- type: string
-
@Field(() => Number)
- balance: number
+ id: number
- @Field(() => Number)
- totalBalance: number
+ @Field(() => User)
+ user: User
- @Field({ nullable: true })
- decayStart?: string
+ @Field(() => Number, { nullable: true })
+ previous: number | null
- @Field({ nullable: true })
- decayEnd?: string
+ @Field(() => TransactionTypeId)
+ typeId: TransactionTypeId
- @Field({ nullable: true })
- decayDuration?: number
+ @Field(() => Decimal)
+ amount: Decimal
+
+ @Field(() => Decimal)
+ balance: Decimal
+
+ @Field(() => Date)
+ balanceDate: Date
+
+ @Field(() => Decay)
+ decay: Decay
@Field(() => String)
memo: string
+ @Field(() => Date, { nullable: true })
+ creationDate: Date | null
+
+ @Field(() => User, { nullable: true })
+ linkedUser: User | null
+
@Field(() => Number, { nullable: true })
- transactionId?: number
+ linkedTransactionId?: number | null
- @Field({ nullable: true })
- name?: string
-
- @Field({ nullable: true })
- email?: string
-
- @Field({ nullable: true })
- date?: string
-
- @Field({ nullable: true })
- decay?: Decay
+ // Links to the TransactionLink when transaction was created by a link
+ @Field(() => Number, { nullable: true })
+ transactionLinkId?: number | null
}
diff --git a/backend/src/graphql/model/TransactionLink.ts b/backend/src/graphql/model/TransactionLink.ts
new file mode 100644
index 000000000..414bba73f
--- /dev/null
+++ b/backend/src/graphql/model/TransactionLink.ts
@@ -0,0 +1,54 @@
+import { ObjectType, Field } from 'type-graphql'
+import Decimal from 'decimal.js-light'
+import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
+import { User } from './User'
+
+@ObjectType()
+export class TransactionLink {
+ constructor(transactionLink: dbTransactionLink, user: User, redeemedBy: User | null = null) {
+ this.id = transactionLink.id
+ this.user = user
+ this.amount = transactionLink.amount
+ this.holdAvailableAmount = transactionLink.holdAvailableAmount
+ this.memo = transactionLink.memo
+ this.code = transactionLink.code
+ this.createdAt = transactionLink.createdAt
+ this.validUntil = transactionLink.validUntil
+ this.deletedAt = transactionLink.deletedAt
+ this.redeemedAt = transactionLink.redeemedAt
+ this.redeemedBy = redeemedBy
+ }
+
+ @Field(() => Number)
+ id: number
+
+ @Field(() => User)
+ user: User
+
+ @Field(() => Decimal)
+ amount: Decimal
+
+ @Field(() => Decimal)
+ holdAvailableAmount: Decimal
+
+ @Field(() => String)
+ memo: string
+
+ @Field(() => String)
+ code: string
+
+ @Field(() => Date)
+ createdAt: Date
+
+ @Field(() => Date, { nullable: true })
+ deletedAt: Date | null
+
+ @Field(() => Date)
+ validUntil: Date
+
+ @Field(() => Date, { nullable: true })
+ redeemedAt: Date | null
+
+ @Field(() => User, { nullable: true })
+ redeemedBy: User | null
+}
diff --git a/backend/src/graphql/model/TransactionList.ts b/backend/src/graphql/model/TransactionList.ts
index 0175048d1..9e8356747 100644
--- a/backend/src/graphql/model/TransactionList.ts
+++ b/backend/src/graphql/model/TransactionList.ts
@@ -1,32 +1,40 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { ObjectType, Field } from 'type-graphql'
+import CONFIG from '@/config'
+import Decimal from 'decimal.js-light'
import { Transaction } from './Transaction'
@ObjectType()
export class TransactionList {
- constructor() {
- this.gdtSum = 0
- this.count = 0
- this.balance = 0
- this.decay = 0
- this.decayDate = ''
+ constructor(
+ balance: Decimal,
+ transactions: Transaction[],
+ count: number,
+ linkCount: number,
+ balanceGDT?: number | null,
+ decayStartBlock: Date = CONFIG.DECAY_START_TIME,
+ ) {
+ this.balance = balance
+ this.transactions = transactions
+ this.count = count
+ this.linkCount = linkCount
+ this.balanceGDT = balanceGDT || null
+ this.decayStartBlock = decayStartBlock
}
- @Field(() => Number)
- gdtSum: number
+ @Field(() => Number, { nullable: true })
+ balanceGDT: number | null
@Field(() => Number)
count: number
@Field(() => Number)
- balance: number
+ linkCount: number
- @Field(() => Number)
- decay: number
+ @Field(() => Decimal)
+ balance: Decimal
- @Field(() => String)
- decayDate: string
+ @Field(() => Date)
+ decayStartBlock: Date
@Field(() => [Transaction])
transactions: Transaction[]
diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts
index c7b5806ca..1a187a38f 100644
--- a/backend/src/graphql/model/User.ts
+++ b/backend/src/graphql/model/User.ts
@@ -1,90 +1,74 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { ObjectType, Field, Int } from 'type-graphql'
+import { ObjectType, Field } from 'type-graphql'
import { KlickTipp } from './KlickTipp'
+import { User as dbUser } from '@entity/User'
@ObjectType()
export class User {
- /*
- @Field(() => ID)
- @PrimaryGeneratedColumn()
- id: number
- */
- constructor(json?: any) {
- if (json) {
- this.id = json.id
- this.email = json.email
- this.firstName = json.first_name
- this.lastName = json.last_name
- this.username = json.username
- this.description = json.description
- this.pubkey = json.public_hex
- this.language = json.language
- this.publisherId = json.publisher_id
- this.isAdmin = json.isAdmin
- }
+ constructor(user: dbUser) {
+ this.id = user.id
+ this.email = user.email
+ this.firstName = user.firstName
+ this.lastName = user.lastName
+ this.deletedAt = user.deletedAt
+ this.createdAt = user.createdAt
+ this.emailChecked = user.emailChecked
+ this.language = user.language
+ this.publisherId = user.publisherId
+ // TODO
+ this.isAdmin = null
+ this.coinanimation = null
+ this.klickTipp = null
+ this.hasElopage = null
}
@Field(() => Number)
id: number
+ // `public_key` binary(32) DEFAULT NULL,
+ // `privkey` binary(80) DEFAULT NULL,
+
+ // TODO privacy issue here
@Field(() => String)
email: string
- @Field(() => String)
- firstName: string
+ @Field(() => String, { nullable: true })
+ firstName: string | null
- @Field(() => String)
- lastName: string
+ @Field(() => String, { nullable: true })
+ lastName: string | null
- @Field(() => String)
- username: string
+ @Field(() => Date, { nullable: true })
+ deletedAt: Date | null
- @Field(() => String)
- description: string
+ // `password` bigint(20) unsigned DEFAULT 0,
+ // `email_hash` binary(32) DEFAULT NULL,
- @Field(() => String)
- pubkey: string
- /*
- @Field(() => String)
- pubkey: string
-
- // not sure about the type here. Maybe better to have a string
- @Field(() => number)
- created: number
-
- @Field(() =>>> Boolean)
- emailChecked: boolean
+ @Field(() => Date)
+ createdAt: Date
@Field(() => Boolean)
- passphraseShown: boolean
- */
+ emailChecked: boolean
@Field(() => String)
language: string
- /*
- @Field(() => Boolean)
- disabled: boolean
- */
+ // This is not the users publisherId, but the one of the users who recommend him
+ @Field(() => Number, { nullable: true })
+ publisherId: number | null
- /* I suggest to have a group as type here
- @Field(() => ID)
- groupId: number
-*/
- // what is publisherId?
- @Field(() => Int, { nullable: true })
- publisherId?: number
+ // `passphrase` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
- @Field(() => Boolean)
- isAdmin: boolean
-
- @Field(() => Boolean)
- coinanimation: boolean
-
- @Field(() => KlickTipp)
- klickTipp: KlickTipp
+ // TODO this is a bit inconsistent with what we query from the database
+ // therefore all those fields are now nullable with default value null
+ @Field(() => Boolean, { nullable: true })
+ isAdmin: boolean | null
@Field(() => Boolean, { nullable: true })
- hasElopage?: boolean
+ coinanimation: boolean | null
+
+ @Field(() => KlickTipp, { nullable: true })
+ klickTipp: KlickTipp | null
+
+ @Field(() => Boolean, { nullable: true })
+ hasElopage: boolean | null
}
diff --git a/backend/src/graphql/model/UserAdmin.ts b/backend/src/graphql/model/UserAdmin.ts
index befc203a5..1d418c66c 100644
--- a/backend/src/graphql/model/UserAdmin.ts
+++ b/backend/src/graphql/model/UserAdmin.ts
@@ -1,7 +1,20 @@
-import { ObjectType, Field } from 'type-graphql'
+import { User } from '@entity/User'
+import { ObjectType, Field, Int } from 'type-graphql'
@ObjectType()
export class UserAdmin {
+ constructor(user: User, creation: number[], hasElopage: boolean, emailConfirmationSend: string) {
+ this.userId = user.id
+ this.email = user.email
+ this.firstName = user.firstName
+ this.lastName = user.lastName
+ this.creation = creation
+ this.emailChecked = user.emailChecked
+ this.hasElopage = hasElopage
+ this.deletedAt = user.deletedAt
+ this.emailConfirmationSend = emailConfirmationSend
+ }
+
@Field(() => Number)
userId: number
@@ -19,4 +32,22 @@ export class UserAdmin {
@Field(() => Boolean)
emailChecked: boolean
+
+ @Field(() => Boolean)
+ hasElopage: boolean
+
+ @Field(() => Date, { nullable: true })
+ deletedAt?: Date | null
+
+ @Field(() => String, { nullable: true })
+ emailConfirmationSend?: string
+}
+
+@ObjectType()
+export class SearchUsersResult {
+ @Field(() => Int)
+ userCount: number
+
+ @Field(() => [UserAdmin])
+ userList: UserAdmin[]
}
diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts
index 12a07d51d..d98b38b7f 100644
--- a/backend/src/graphql/resolver/AdminResolver.ts
+++ b/backend/src/graphql/resolver/AdminResolver.ts
@@ -1,45 +1,163 @@
-import { Resolver, Query, Arg, Args, Authorized, Mutation, Ctx } from 'type-graphql'
-import { getCustomRepository, Raw } from 'typeorm'
-import { UserAdmin } from '../model/UserAdmin'
-import { PendingCreation } from '../model/PendingCreation'
-import { CreatePendingCreations } from '../model/CreatePendingCreations'
-import { UpdatePendingCreation } from '../model/UpdatePendingCreation'
-import { RIGHTS } from '../../auth/RIGHTS'
-import { TransactionRepository } from '../../typeorm/repository/Transaction'
-import { TransactionCreationRepository } from '../../typeorm/repository/TransactionCreation'
-import { LoginPendingTasksAdminRepository } from '../../typeorm/repository/LoginPendingTasksAdmin'
-import { UserRepository } from '../../typeorm/repository/User'
-import CreatePendingCreationArgs from '../arg/CreatePendingCreationArgs'
-import UpdatePendingCreationArgs from '../arg/UpdatePendingCreationArgs'
-import moment from 'moment'
-import { Transaction } from '@entity/Transaction'
-import { TransactionCreation } from '@entity/TransactionCreation'
-import { UserTransaction } from '@entity/UserTransaction'
-import { UserTransactionRepository } from '../../typeorm/repository/UserTransaction'
-import { BalanceRepository } from '../../typeorm/repository/Balance'
-import { calculateDecay } from '../../util/decay'
-import { LoginUserRepository } from '../../typeorm/repository/LoginUser'
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
+
+import { Resolver, Query, Arg, Args, Authorized, Mutation, Ctx, Int } from 'type-graphql'
+import {
+ getCustomRepository,
+ IsNull,
+ Not,
+ ObjectLiteral,
+ getConnection,
+ In,
+} from '@dbTools/typeorm'
+import { UserAdmin, SearchUsersResult } from '@model/UserAdmin'
+import { PendingCreation } from '@model/PendingCreation'
+import { CreatePendingCreations } from '@model/CreatePendingCreations'
+import { UpdatePendingCreation } from '@model/UpdatePendingCreation'
+import { RIGHTS } from '@/auth/RIGHTS'
+import { UserRepository } from '@repository/User'
+import CreatePendingCreationArgs from '@arg/CreatePendingCreationArgs'
+import UpdatePendingCreationArgs from '@arg/UpdatePendingCreationArgs'
+import SearchUsersArgs from '@arg/SearchUsersArgs'
+import { Transaction as DbTransaction } from '@entity/Transaction'
+import { Transaction } from '@model/Transaction'
+import { TransactionRepository } from '@repository/Transaction'
+import { calculateDecay } from '@/util/decay'
+import { AdminPendingCreation } from '@entity/AdminPendingCreation'
+import { hasElopageBuys } from '@/util/hasElopageBuys'
+import { LoginEmailOptIn } from '@entity/LoginEmailOptIn'
+import { User as dbUser } from '@entity/User'
+import { User } from '@model/User'
+import { TransactionTypeId } from '@enum/TransactionTypeId'
+import Decimal from 'decimal.js-light'
+import { Decay } from '@model/Decay'
+import Paginated from '@arg/Paginated'
+import { Order } from '@enum/Order'
+import { communityUser } from '@/util/communityUser'
+
+// const EMAIL_OPT_IN_REGISTER = 1
+// const EMAIL_OPT_UNKNOWN = 3 // elopage?
+const MAX_CREATION_AMOUNT = 1000
+const FULL_CREATION_AVAILABLE = [MAX_CREATION_AMOUNT, MAX_CREATION_AMOUNT, MAX_CREATION_AMOUNT]
@Resolver()
export class AdminResolver {
@Authorized([RIGHTS.SEARCH_USERS])
- @Query(() => [UserAdmin])
- async searchUsers(@Arg('searchText') searchText: string): Promise {
+ @Query(() => SearchUsersResult)
+ async searchUsers(
+ @Args()
+ {
+ searchText,
+ currentPage = 1,
+ pageSize = 25,
+ notActivated = false,
+ isDeleted = false,
+ }: SearchUsersArgs,
+ ): Promise {
const userRepository = getCustomRepository(UserRepository)
- const users = await userRepository.findBySearchCriteria(searchText)
+
+ const filterCriteria: ObjectLiteral[] = []
+ if (notActivated) {
+ filterCriteria.push({ emailChecked: false })
+ }
+
+ if (isDeleted) {
+ filterCriteria.push({ deletedAt: Not(IsNull()) })
+ }
+
+ const userFields = ['id', 'firstName', 'lastName', 'email', 'emailChecked', 'deletedAt']
+ const [users, count] = await userRepository.findBySearchCriteriaPagedFiltered(
+ userFields.map((fieldName) => {
+ return 'user.' + fieldName
+ }),
+ searchText,
+ filterCriteria,
+ currentPage,
+ pageSize,
+ )
+
+ if (users.length === 0) {
+ return {
+ userCount: 0,
+ userList: [],
+ }
+ }
+
+ const creations = await getUserCreations(users.map((u) => u.id))
+
const adminUsers = await Promise.all(
users.map(async (user) => {
- const adminUser = new UserAdmin()
- adminUser.userId = user.id
- adminUser.firstName = user.firstName
- adminUser.lastName = user.lastName
- adminUser.email = user.email
- adminUser.creation = await getUserCreations(user.id)
- adminUser.emailChecked = await hasActivatedEmail(user.email)
+ let emailConfirmationSend = ''
+ if (!user.emailChecked) {
+ const emailOptIn = await LoginEmailOptIn.findOne(
+ {
+ userId: user.id,
+ },
+ {
+ order: {
+ updatedAt: 'DESC',
+ createdAt: 'DESC',
+ },
+ select: ['updatedAt', 'createdAt'],
+ },
+ )
+ if (emailOptIn) {
+ if (emailOptIn.updatedAt) {
+ emailConfirmationSend = emailOptIn.updatedAt.toISOString()
+ } else {
+ emailConfirmationSend = emailOptIn.createdAt.toISOString()
+ }
+ }
+ }
+ const userCreations = creations.find((c) => c.id === user.id)
+ const adminUser = new UserAdmin(
+ user,
+ userCreations ? userCreations.creations : FULL_CREATION_AVAILABLE,
+ await hasElopageBuys(user.email),
+ emailConfirmationSend,
+ )
return adminUser
}),
)
- return adminUsers
+ return {
+ userCount: count,
+ userList: adminUsers,
+ }
+ }
+
+ @Authorized([RIGHTS.DELETE_USER])
+ @Mutation(() => Date, { nullable: true })
+ async deleteUser(
+ @Arg('userId', () => Int) userId: number,
+ @Ctx() context: any,
+ ): Promise {
+ const user = await dbUser.findOne({ id: userId })
+ // user exists ?
+ if (!user) {
+ throw new Error(`Could not find user with userId: ${userId}`)
+ }
+ // moderator user disabled own account?
+ const moderatorUser = context.user
+ if (moderatorUser.id === userId) {
+ throw new Error('Moderator can not delete his own account!')
+ }
+ // soft-delete user
+ await user.softRemove()
+ const newUser = await dbUser.findOne({ id: userId }, { withDeleted: true })
+ return newUser ? newUser.deletedAt : null
+ }
+
+ @Authorized([RIGHTS.UNDELETE_USER])
+ @Mutation(() => Date, { nullable: true })
+ async unDeleteUser(@Arg('userId', () => Int) userId: number): Promise {
+ const user = await dbUser.findOne({ id: userId }, { withDeleted: true })
+ // user exists ?
+ if (!user) {
+ throw new Error(`Could not find user with userId: ${userId}`)
+ }
+ // recover user account
+ await user.recover()
+ return null
}
@Authorized([RIGHTS.CREATE_PENDING_CREATION])
@@ -47,24 +165,30 @@ export class AdminResolver {
async createPendingCreation(
@Args() { email, amount, memo, creationDate, moderator }: CreatePendingCreationArgs,
): Promise {
- const userRepository = getCustomRepository(UserRepository)
- const user = await userRepository.findByEmail(email)
-
- const creations = await getUserCreations(user.id)
+ const user = await dbUser.findOne({ email }, { withDeleted: true })
+ if (!user) {
+ throw new Error(`Could not find user with email: ${email}`)
+ }
+ if (user.deletedAt) {
+ throw new Error('This user was deleted. Cannot make a creation.')
+ }
+ if (!user.emailChecked) {
+ throw new Error('Creation could not be saved, Email is not activated')
+ }
+ const creations = await getUserCreation(user.id)
const creationDateObj = new Date(creationDate)
if (isCreationValid(creations, amount, creationDateObj)) {
- const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository)
- const loginPendingTaskAdmin = loginPendingTasksAdminRepository.create()
- loginPendingTaskAdmin.userId = user.id
- loginPendingTaskAdmin.amount = BigInt(amount * 10000)
- loginPendingTaskAdmin.created = new Date()
- loginPendingTaskAdmin.date = creationDateObj
- loginPendingTaskAdmin.memo = memo
- loginPendingTaskAdmin.moderator = moderator
+ const adminPendingCreation = AdminPendingCreation.create()
+ adminPendingCreation.userId = user.id
+ adminPendingCreation.amount = BigInt(amount)
+ adminPendingCreation.created = new Date()
+ adminPendingCreation.date = creationDateObj
+ adminPendingCreation.memo = memo
+ adminPendingCreation.moderator = moderator
- loginPendingTasksAdminRepository.save(loginPendingTaskAdmin)
+ await AdminPendingCreation.save(adminPendingCreation)
}
- return await getUserCreations(user.id)
+ return getUserCreation(user.id)
}
@Authorized([RIGHTS.CREATE_PENDING_CREATION])
@@ -98,27 +222,42 @@ export class AdminResolver {
async updatePendingCreation(
@Args() { id, email, amount, memo, creationDate, moderator }: UpdatePendingCreationArgs,
): Promise {
- const userRepository = getCustomRepository(UserRepository)
- const user = await userRepository.findByEmail(email)
+ const user = await dbUser.findOne({ email }, { withDeleted: true })
+ if (!user) {
+ throw new Error(`Could not find user with email: ${email}`)
+ }
+ if (user.deletedAt) {
+ throw new Error(`User was deleted (${email})`)
+ }
- const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository)
- const updatedCreation = await loginPendingTasksAdminRepository.findOneOrFail({ id })
+ const pendingCreationToUpdate = await AdminPendingCreation.findOneOrFail({ id })
- if (updatedCreation.userId !== user.id)
+ if (pendingCreationToUpdate.userId !== user.id) {
throw new Error('user of the pending creation and send user does not correspond')
+ }
- updatedCreation.amount = BigInt(amount * 10000)
- updatedCreation.memo = memo
- updatedCreation.date = new Date(creationDate)
- updatedCreation.moderator = moderator
+ const creationDateObj = new Date(creationDate)
+ let creations = await getUserCreation(user.id)
+ if (pendingCreationToUpdate.date.getMonth() === creationDateObj.getMonth()) {
+ creations = updateCreations(creations, pendingCreationToUpdate)
+ }
- await loginPendingTasksAdminRepository.save(updatedCreation)
+ if (!isCreationValid(creations, amount, creationDateObj)) {
+ throw new Error('Creation is not valid')
+ }
+ pendingCreationToUpdate.amount = BigInt(amount)
+ pendingCreationToUpdate.memo = memo
+ pendingCreationToUpdate.date = new Date(creationDate)
+ pendingCreationToUpdate.moderator = moderator
+
+ await AdminPendingCreation.save(pendingCreationToUpdate)
const result = new UpdatePendingCreation()
result.amount = parseInt(amount.toString())
- result.memo = updatedCreation.memo
- result.date = updatedCreation.date
- result.moderator = updatedCreation.moderator
- result.creation = await getUserCreations(user.id)
+ result.memo = pendingCreationToUpdate.memo
+ result.date = pendingCreationToUpdate.date
+ result.moderator = pendingCreationToUpdate.moderator
+
+ result.creation = await getUserCreation(user.id)
return result
}
@@ -126,220 +265,200 @@ export class AdminResolver {
@Authorized([RIGHTS.SEARCH_PENDING_CREATION])
@Query(() => [PendingCreation])
async getPendingCreations(): Promise {
- const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository)
- const pendingCreations = await loginPendingTasksAdminRepository.find()
+ const pendingCreations = await AdminPendingCreation.find()
+ if (pendingCreations.length === 0) {
+ return []
+ }
- const pendingCreationsPromise = await Promise.all(
- pendingCreations.map(async (pendingCreation) => {
- const userRepository = getCustomRepository(UserRepository)
- const user = await userRepository.findOneOrFail({ id: pendingCreation.userId })
+ const userIds = pendingCreations.map((p) => p.userId)
+ const userCreations = await getUserCreations(userIds)
+ const users = await dbUser.find({ where: { id: In(userIds) }, withDeleted: true })
- const parsedAmount = Number(parseInt(pendingCreation.amount.toString()) / 10000)
- // pendingCreation.amount = parsedAmount
- const newPendingCreation = {
- ...pendingCreation,
- amount: parsedAmount,
- firstName: user.firstName,
- lastName: user.lastName,
- email: user.email,
- creation: await getUserCreations(user.id),
- }
+ return pendingCreations.map((pendingCreation) => {
+ const user = users.find((u) => u.id === pendingCreation.userId)
+ const creation = userCreations.find((c) => c.id === pendingCreation.userId)
- return newPendingCreation
- }),
- )
- return pendingCreationsPromise.reverse()
+ return {
+ ...pendingCreation,
+ amount: Number(pendingCreation.amount.toString()),
+ firstName: user ? user.firstName : '',
+ lastName: user ? user.lastName : '',
+ email: user ? user.email : '',
+ creation: creation ? creation.creations : FULL_CREATION_AVAILABLE,
+ }
+ })
}
@Authorized([RIGHTS.DELETE_PENDING_CREATION])
@Mutation(() => Boolean)
- async deletePendingCreation(@Arg('id') id: number): Promise {
- const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository)
- const entity = await loginPendingTasksAdminRepository.findOneOrFail(id)
- const res = await loginPendingTasksAdminRepository.delete(entity)
+ async deletePendingCreation(@Arg('id', () => Int) id: number): Promise {
+ const entity = await AdminPendingCreation.findOneOrFail(id)
+ const res = await AdminPendingCreation.delete(entity)
return !!res
}
@Authorized([RIGHTS.CONFIRM_PENDING_CREATION])
@Mutation(() => Boolean)
- async confirmPendingCreation(@Arg('id') id: number, @Ctx() context: any): Promise {
- const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository)
- const pendingCreation = await loginPendingTasksAdminRepository.findOneOrFail(id)
-
- const userRepository = getCustomRepository(UserRepository)
- const moderatorUser = await userRepository.findByPubkeyHex(context.pubKey)
+ async confirmPendingCreation(
+ @Arg('id', () => Int) id: number,
+ @Ctx() context: any,
+ ): Promise {
+ const pendingCreation = await AdminPendingCreation.findOneOrFail(id)
+ const moderatorUser = context.user
if (moderatorUser.id === pendingCreation.userId)
throw new Error('Moderator can not confirm own pending creation')
- const transactionRepository = getCustomRepository(TransactionRepository)
- const receivedCallDate = new Date()
- let transaction = new Transaction()
- transaction.transactionTypeId = 1
- transaction.memo = pendingCreation.memo
- transaction.received = receivedCallDate
- transaction.blockchainTypeId = 1
- transaction = await transactionRepository.save(transaction)
- if (!transaction) throw new Error('Could not create transaction')
+ const user = await dbUser.findOneOrFail({ id: pendingCreation.userId }, { withDeleted: true })
+ if (user.deletedAt) throw new Error('This user was deleted. Cannot confirm a creation.')
- const transactionCreationRepository = getCustomRepository(TransactionCreationRepository)
- let transactionCreation = new TransactionCreation()
- transactionCreation.transactionId = transaction.id
- transactionCreation.userId = pendingCreation.userId
- transactionCreation.amount = parseInt(pendingCreation.amount.toString())
- transactionCreation.targetDate = pendingCreation.date
- transactionCreation = await transactionCreationRepository.save(transactionCreation)
- if (!transactionCreation) throw new Error('Could not create transactionCreation')
-
- const userTransactionRepository = getCustomRepository(UserTransactionRepository)
- const lastUserTransaction = await userTransactionRepository.findLastForUser(
- pendingCreation.userId,
- )
- let newBalance = 0
- if (!lastUserTransaction) {
- newBalance = 0
- } else {
- newBalance = await calculateDecay(
- lastUserTransaction.balance,
- lastUserTransaction.balanceDate,
- receivedCallDate,
- )
+ const creations = await getUserCreation(pendingCreation.userId, false)
+ if (!isCreationValid(creations, Number(pendingCreation.amount), pendingCreation.date)) {
+ throw new Error('Creation is not valid!!')
}
- newBalance = Number(newBalance) + Number(parseInt(pendingCreation.amount.toString()))
- const newUserTransaction = new UserTransaction()
- newUserTransaction.userId = pendingCreation.userId
- newUserTransaction.transactionId = transaction.id
- newUserTransaction.transactionTypeId = transaction.transactionTypeId
- newUserTransaction.balance = Number(newBalance)
- newUserTransaction.balanceDate = transaction.received
+ const receivedCallDate = new Date()
- await userTransactionRepository.save(newUserTransaction).catch((error) => {
- throw new Error('Error saving user transaction: ' + error)
- })
+ const transactionRepository = getCustomRepository(TransactionRepository)
+ const lastTransaction = await transactionRepository.findLastForUser(pendingCreation.userId)
- const balanceRepository = getCustomRepository(BalanceRepository)
- let userBalance = await balanceRepository.findByUser(pendingCreation.userId)
+ let newBalance = new Decimal(0)
+ let decay: Decay | null = null
+ if (lastTransaction) {
+ decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, receivedCallDate)
+ newBalance = decay.balance
+ }
+ // TODO pending creations decimal
+ newBalance = newBalance.add(new Decimal(Number(pendingCreation.amount)).toString())
- if (!userBalance) userBalance = balanceRepository.create()
- userBalance.userId = pendingCreation.userId
- userBalance.amount = Number(newBalance)
- userBalance.modified = receivedCallDate
- userBalance.recordDate = receivedCallDate
- await balanceRepository.save(userBalance)
- await loginPendingTasksAdminRepository.delete(pendingCreation)
+ const transaction = new DbTransaction()
+ transaction.typeId = TransactionTypeId.CREATION
+ transaction.memo = pendingCreation.memo
+ transaction.userId = pendingCreation.userId
+ transaction.previous = lastTransaction ? lastTransaction.id : null
+ // TODO pending creations decimal
+ transaction.amount = new Decimal(Number(pendingCreation.amount))
+ transaction.creationDate = pendingCreation.date
+ transaction.balance = newBalance
+ transaction.balanceDate = receivedCallDate
+ transaction.decay = decay ? decay.decay : new Decimal(0)
+ transaction.decayStart = decay ? decay.start : null
+ await transaction.save()
+
+ await AdminPendingCreation.delete(pendingCreation)
return true
}
+
+ @Authorized([RIGHTS.CREATION_TRANSACTION_LIST])
+ @Query(() => [Transaction])
+ async creationTransactionList(
+ @Args()
+ { currentPage = 1, pageSize = 25, order = Order.DESC }: Paginated,
+ @Arg('userId', () => Int) userId: number,
+ ): Promise {
+ const offset = (currentPage - 1) * pageSize
+ const transactionRepository = getCustomRepository(TransactionRepository)
+ const [userTransactions] = await transactionRepository.findByUserPaged(
+ userId,
+ pageSize,
+ offset,
+ order,
+ true,
+ )
+
+ const user = await dbUser.findOneOrFail({ id: userId })
+ return userTransactions.map((t) => new Transaction(t, new User(user), communityUser))
+ }
}
-async function getUserCreations(id: number): Promise {
- const dateNextMonth = moment().add(1, 'month').format('YYYY-MM') + '-01'
- const dateBeforeLastMonth = moment().subtract(2, 'month').format('YYYY-MM') + '-01'
- const beforeLastMonthNumber = moment().subtract(2, 'month').format('M')
- const lastMonthNumber = moment().subtract(1, 'month').format('M')
- const currentMonthNumber = moment().format('M')
+interface CreationMap {
+ id: number
+ creations: number[]
+}
- const transactionCreationRepository = getCustomRepository(TransactionCreationRepository)
- const createdAmountsQuery = await transactionCreationRepository
- .createQueryBuilder('transaction_creations')
- .select('MONTH(transaction_creations.target_date)', 'target_month')
- .addSelect('SUM(transaction_creations.amount)', 'sum')
- .where('transaction_creations.state_user_id = :id', { id })
- .andWhere({
- targetDate: Raw((alias) => `${alias} >= :date and ${alias} < :endDate`, {
- date: dateBeforeLastMonth,
- endDate: dateNextMonth,
+async function getUserCreation(id: number, includePending = true): Promise {
+ const creations = await getUserCreations([id], includePending)
+ return creations[0] ? creations[0].creations : FULL_CREATION_AVAILABLE
+}
+
+async function getUserCreations(ids: number[], includePending = true): Promise {
+ const months = getCreationMonths()
+
+ const queryRunner = getConnection().createQueryRunner()
+ await queryRunner.connect()
+
+ const dateFilter = 'last_day(curdate() - interval 3 month) + interval 1 day'
+
+ const unionString = includePending
+ ? `
+ UNION
+ SELECT date AS date, amount AS amount, userId AS userId FROM admin_pending_creations
+ WHERE userId IN (${ids.toString()})
+ AND date >= ${dateFilter}`
+ : ''
+
+ const unionQuery = await queryRunner.manager.query(`
+ SELECT MONTH(date) AS month, sum(amount) AS sum, userId AS id FROM
+ (SELECT creation_date AS date, amount AS amount, user_id AS userId FROM transactions
+ WHERE user_id IN (${ids.toString()})
+ AND type_id = ${TransactionTypeId.CREATION}
+ AND creation_date >= ${dateFilter}
+ ${unionString}) AS result
+ GROUP BY month, userId
+ ORDER BY date DESC
+ `)
+
+ await queryRunner.release()
+
+ return ids.map((id) => {
+ return {
+ id,
+ creations: months.map((month) => {
+ const creation = unionQuery.find(
+ (raw: { month: string; id: string; creation: number[] }) =>
+ parseInt(raw.month) === month && parseInt(raw.id) === id,
+ )
+ return MAX_CREATION_AMOUNT - (creation ? Number(creation.sum) : 0)
}),
- })
- .groupBy('target_month')
- .orderBy('target_month', 'ASC')
- .getRawMany()
+ }
+ })
+}
- const loginPendingTasksAdminRepository = getCustomRepository(LoginPendingTasksAdminRepository)
- const pendingAmountsQuery = await loginPendingTasksAdminRepository
- .createQueryBuilder('login_pending_tasks_admin')
- .select('MONTH(login_pending_tasks_admin.date)', 'target_month')
- .addSelect('SUM(login_pending_tasks_admin.amount)', 'sum')
- .where('login_pending_tasks_admin.userId = :id', { id })
- .andWhere({
- date: Raw((alias) => `${alias} >= :date and ${alias} < :endDate`, {
- date: dateBeforeLastMonth,
- endDate: dateNextMonth,
- }),
- })
- .groupBy('target_month')
- .orderBy('target_month', 'ASC')
- .getRawMany()
+function updateCreations(creations: number[], pendingCreation: AdminPendingCreation): number[] {
+ const index = getCreationIndex(pendingCreation.date.getMonth())
- const map = new Map()
- if (Array.isArray(createdAmountsQuery) && createdAmountsQuery.length > 0) {
- createdAmountsQuery.forEach((createdAmount) => {
- if (!map.has(createdAmount.target_month)) {
- map.set(createdAmount.target_month, createdAmount.sum)
- } else {
- const store = map.get(createdAmount.target_month)
- map.set(createdAmount.target_month, Number(store) + Number(createdAmount.sum))
- }
- })
+ if (index < 0) {
+ throw new Error('You cannot create GDD for a month older than the last three months.')
}
-
- if (Array.isArray(pendingAmountsQuery) && pendingAmountsQuery.length > 0) {
- pendingAmountsQuery.forEach((pendingAmount) => {
- if (!map.has(pendingAmount.target_month)) {
- map.set(pendingAmount.target_month, pendingAmount.sum)
- } else {
- const store = map.get(pendingAmount.target_month)
- map.set(pendingAmount.target_month, Number(store) + Number(pendingAmount.sum))
- }
- })
- }
- const usedCreationBeforeLastMonth = map.get(Number(beforeLastMonthNumber))
- ? Number(map.get(Number(beforeLastMonthNumber))) / 10000
- : 0
- const usedCreationLastMonth = map.get(Number(lastMonthNumber))
- ? Number(map.get(Number(lastMonthNumber))) / 10000
- : 0
-
- const usedCreationCurrentMonth = map.get(Number(currentMonthNumber))
- ? Number(map.get(Number(currentMonthNumber))) / 10000
- : 0
-
- return [
- 1000 - usedCreationBeforeLastMonth,
- 1000 - usedCreationLastMonth,
- 1000 - usedCreationCurrentMonth,
- ]
+ creations[index] += parseInt(pendingCreation.amount.toString())
+ return creations
}
function isCreationValid(creations: number[], amount: number, creationDate: Date) {
- const dateMonth = moment().format('YYYY-MM')
- const dateLastMonth = moment().subtract(1, 'month').format('YYYY-MM')
- const dateBeforeLastMonth = moment().subtract(2, 'month').format('YYYY-MM')
- const creationDateMonth = moment(creationDate).format('YYYY-MM')
+ const index = getCreationIndex(creationDate.getMonth())
- let openCreation
- switch (creationDateMonth) {
- case dateMonth:
- openCreation = creations[2]
- break
- case dateLastMonth:
- openCreation = creations[1]
- break
- case dateBeforeLastMonth:
- openCreation = creations[0]
- break
- default:
- throw new Error('CreationDate is not in last three months')
+ if (index < 0) {
+ throw new Error(`No Creation found!`)
}
- if (openCreation < amount) {
- throw new Error(`Open creation (${openCreation}) is less than amount (${amount})`)
+ if (amount > creations[index]) {
+ throw new Error(
+ `The amount (${amount} GDD) to be created exceeds the available amount (${creations[index]} GDD) for this month.`,
+ )
}
+
return true
}
-async function hasActivatedEmail(email: string): Promise {
- const repository = getCustomRepository(LoginUserRepository)
- const user = await repository.findByEmail(email)
- return user ? user.emailChecked : false
+const getCreationMonths = (): number[] => {
+ const now = new Date(Date.now())
+ return [
+ now.getMonth() + 1,
+ new Date(now.getFullYear(), now.getMonth() - 1, 1).getMonth() + 1,
+ new Date(now.getFullYear(), now.getMonth() - 2, 1).getMonth() + 1,
+ ].reverse()
+}
+
+const getCreationIndex = (month: number): number => {
+ return getCreationMonths().findIndex((el) => el === month + 1)
}
diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts
index e368c4dc2..09d2fdc92 100644
--- a/backend/src/graphql/resolver/BalanceResolver.ts
+++ b/backend/src/graphql/resolver/BalanceResolver.ts
@@ -2,13 +2,11 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Resolver, Query, Ctx, Authorized } from 'type-graphql'
-import { getCustomRepository } from 'typeorm'
-import { Balance } from '../model/Balance'
-import { BalanceRepository } from '../../typeorm/repository/Balance'
-import { UserRepository } from '../../typeorm/repository/User'
-import { calculateDecay } from '../../util/decay'
-import { roundFloorFrom4 } from '../../util/round'
-import { RIGHTS } from '../../auth/RIGHTS'
+import { Balance } from '@model/Balance'
+import { calculateDecay } from '@/util/decay'
+import { RIGHTS } from '@/auth/RIGHTS'
+import { Transaction } from '@entity/Transaction'
+import Decimal from 'decimal.js-light'
@Resolver()
export class BalanceResolver {
@@ -16,27 +14,26 @@ export class BalanceResolver {
@Query(() => Balance)
async balance(@Ctx() context: any): Promise {
// load user and balance
- const balanceRepository = getCustomRepository(BalanceRepository)
- const userRepository = getCustomRepository(UserRepository)
-
- const userEntity = await userRepository.findByPubkeyHex(context.pubKey)
- const balanceEntity = await balanceRepository.findByUser(userEntity.id)
+ const { user } = context
const now = new Date()
+ const lastTransaction = await Transaction.findOne(
+ { userId: user.id },
+ { order: { balanceDate: 'DESC' } },
+ )
+
// No balance found
- if (!balanceEntity) {
+ if (!lastTransaction) {
return new Balance({
- balance: 0,
- decay: 0,
+ balance: new Decimal(0),
+ decay: new Decimal(0),
decay_date: now.toString(),
})
}
return new Balance({
- balance: roundFloorFrom4(balanceEntity.amount),
- decay: roundFloorFrom4(
- await calculateDecay(balanceEntity.amount, balanceEntity.recordDate, now),
- ),
+ balance: lastTransaction.balance,
+ decay: calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, now).balance,
decay_date: now.toString(),
})
}
diff --git a/backend/src/graphql/resolver/CommunityResolver.test.ts b/backend/src/graphql/resolver/CommunityResolver.test.ts
index afc6decec..cb916e47c 100644
--- a/backend/src/graphql/resolver/CommunityResolver.test.ts
+++ b/backend/src/graphql/resolver/CommunityResolver.test.ts
@@ -2,10 +2,10 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { createTestClient } from 'apollo-server-testing'
-import createServer from '../../server/createServer'
-import CONFIG from '../../config'
+import createServer from '@/server/createServer'
+import CONFIG from '@/config'
-jest.mock('../../config')
+jest.mock('@/config')
let query: any
@@ -53,8 +53,8 @@ describe('CommunityResolver', () => {
getCommunityInfo: {
name: 'Gradido Entwicklung',
description: 'Die lokale Entwicklungsumgebung von Gradido.',
- url: 'http://localhost/vue/',
- registerUrl: 'http://localhost/vue/register',
+ url: 'http://localhost/',
+ registerUrl: 'http://localhost/register',
},
},
})
@@ -75,22 +75,22 @@ describe('CommunityResolver', () => {
id: 1,
name: 'Gradido Entwicklung',
description: 'Die lokale Entwicklungsumgebung von Gradido.',
- url: 'http://localhost/vue/',
- registerUrl: 'http://localhost/vue/register-community',
+ url: 'http://localhost/',
+ registerUrl: 'http://localhost/register-community',
},
{
id: 2,
name: 'Gradido Staging',
description: 'Der Testserver der Gradido-Akademie.',
- url: 'https://stage1.gradido.net/vue/',
- registerUrl: 'https://stage1.gradido.net/vue/register-community',
+ url: 'https://stage1.gradido.net/',
+ registerUrl: 'https://stage1.gradido.net/register-community',
},
{
id: 3,
name: 'Gradido-Akademie',
description: 'Freies Institut für Wirtschaftsbionik.',
url: 'https://gradido.net',
- registerUrl: 'https://gdd1.gradido.com/vue/register-community',
+ registerUrl: 'https://gdd1.gradido.com/register-community',
},
],
},
@@ -112,7 +112,7 @@ describe('CommunityResolver', () => {
name: 'Gradido-Akademie',
description: 'Freies Institut für Wirtschaftsbionik.',
url: 'https://gradido.net',
- registerUrl: 'https://gdd1.gradido.com/vue/register-community',
+ registerUrl: 'https://gdd1.gradido.com/register-community',
},
],
},
diff --git a/backend/src/graphql/resolver/CommunityResolver.ts b/backend/src/graphql/resolver/CommunityResolver.ts
index 5c9d46f34..1693574cb 100644
--- a/backend/src/graphql/resolver/CommunityResolver.ts
+++ b/backend/src/graphql/resolver/CommunityResolver.ts
@@ -2,9 +2,9 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Resolver, Query, Authorized } from 'type-graphql'
-import { RIGHTS } from '../../auth/RIGHTS'
-import CONFIG from '../../config'
-import { Community } from '../model/Community'
+import { RIGHTS } from '@/auth/RIGHTS'
+import CONFIG from '@/config'
+import { Community } from '@model/Community'
@Resolver()
export class CommunityResolver {
@@ -29,7 +29,7 @@ export class CommunityResolver {
name: 'Gradido-Akademie',
description: 'Freies Institut für Wirtschaftsbionik.',
url: 'https://gradido.net',
- registerUrl: 'https://gdd1.gradido.com/vue/register-community',
+ registerUrl: 'https://gdd1.gradido.com/register-community',
}),
]
return [
@@ -37,22 +37,22 @@ export class CommunityResolver {
id: 1,
name: 'Gradido Entwicklung',
description: 'Die lokale Entwicklungsumgebung von Gradido.',
- url: 'http://localhost/vue/',
- registerUrl: 'http://localhost/vue/register-community',
+ url: 'http://localhost/',
+ registerUrl: 'http://localhost/register-community',
}),
new Community({
id: 2,
name: 'Gradido Staging',
description: 'Der Testserver der Gradido-Akademie.',
- url: 'https://stage1.gradido.net/vue/',
- registerUrl: 'https://stage1.gradido.net/vue/register-community',
+ url: 'https://stage1.gradido.net/',
+ registerUrl: 'https://stage1.gradido.net/register-community',
}),
new Community({
id: 3,
name: 'Gradido-Akademie',
description: 'Freies Institut für Wirtschaftsbionik.',
url: 'https://gradido.net',
- registerUrl: 'https://gdd1.gradido.com/vue/register-community',
+ registerUrl: 'https://gdd1.gradido.com/register-community',
}),
]
}
diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts
index 9110eb76b..26ae9b210 100644
--- a/backend/src/graphql/resolver/GdtResolver.ts
+++ b/backend/src/graphql/resolver/GdtResolver.ts
@@ -2,14 +2,12 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Resolver, Query, Args, Ctx, Authorized, Arg } from 'type-graphql'
-import { getCustomRepository } from 'typeorm'
-import CONFIG from '../../config'
-import { GdtEntryList } from '../model/GdtEntryList'
-import Paginated from '../arg/Paginated'
-import { apiGet } from '../../apis/HttpRequest'
-import { UserRepository } from '../../typeorm/repository/User'
-import { Order } from '../enum/Order'
-import { RIGHTS } from '../../auth/RIGHTS'
+import CONFIG from '@/config'
+import { GdtEntryList } from '@model/GdtEntryList'
+import Paginated from '@arg/Paginated'
+import { apiGet } from '@/apis/HttpRequest'
+import { Order } from '@enum/Order'
+import { RIGHTS } from '@/auth/RIGHTS'
@Resolver()
export class GdtResolver {
@@ -22,16 +20,19 @@ export class GdtResolver {
@Ctx() context: any,
): Promise {
// load user
- const userRepository = getCustomRepository(UserRepository)
- const userEntity = await userRepository.findByPubkeyHex(context.pubKey)
+ const userEntity = context.user
- const resultGDT = await apiGet(
- `${CONFIG.GDT_API_URL}/GdtEntries/listPerEmailApi/${userEntity.email}/${currentPage}/${pageSize}/${order}`,
- )
- if (!resultGDT.success) {
- throw new Error(resultGDT.data)
+ try {
+ const resultGDT = await apiGet(
+ `${CONFIG.GDT_API_URL}/GdtEntries/listPerEmailApi/${userEntity.email}/${currentPage}/${pageSize}/${order}`,
+ )
+ if (!resultGDT.success) {
+ throw new Error(resultGDT.data)
+ }
+ return new GdtEntryList(resultGDT.data)
+ } catch (err: any) {
+ throw new Error('GDT Server is not reachable.')
}
- return new GdtEntryList(resultGDT.data)
}
@Authorized([RIGHTS.EXIST_PID])
diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts
index fdffb940a..d13f1dd8e 100644
--- a/backend/src/graphql/resolver/KlicktippResolver.ts
+++ b/backend/src/graphql/resolver/KlicktippResolver.ts
@@ -6,10 +6,10 @@ import {
getKlickTippUser,
getKlicktippTagMap,
unsubscribe,
- signIn,
-} from '../../apis/KlicktippController'
-import { RIGHTS } from '../../auth/RIGHTS'
-import SubscribeNewsletterArgs from '../arg/SubscribeNewsletterArgs'
+ klicktippSignIn,
+} from '@/apis/KlicktippController'
+import { RIGHTS } from '@/auth/RIGHTS'
+import SubscribeNewsletterArgs from '@arg/SubscribeNewsletterArgs'
@Resolver()
export class KlicktippResolver {
@@ -36,6 +36,6 @@ export class KlicktippResolver {
async subscribeNewsletter(
@Args() { email, language }: SubscribeNewsletterArgs,
): Promise {
- return await signIn(email, language)
+ return await klicktippSignIn(email, language)
}
}
diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts
new file mode 100644
index 000000000..5a1a39dca
--- /dev/null
+++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts
@@ -0,0 +1,14 @@
+import { transactionLinkCode } from './TransactionLinkResolver'
+
+describe('transactionLinkCode', () => {
+ const date = new Date()
+
+ it('returns a string of length 24', () => {
+ expect(transactionLinkCode(date)).toHaveLength(24)
+ })
+
+ it('returns a string that ends with the hex value of date', () => {
+ const regexp = new RegExp(date.getTime().toString(16) + '$')
+ expect(transactionLinkCode(date)).toEqual(expect.stringMatching(regexp))
+ })
+})
diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts
new file mode 100644
index 000000000..646a7c296
--- /dev/null
+++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts
@@ -0,0 +1,169 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
+
+import { Resolver, Args, Arg, Authorized, Ctx, Mutation, Query, Int } from 'type-graphql'
+import { TransactionLink } from '@model/TransactionLink'
+import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
+import { User as dbUser } from '@entity/User'
+import TransactionLinkArgs from '@arg/TransactionLinkArgs'
+import Paginated from '@arg/Paginated'
+import { calculateBalance } from '@/util/validate'
+import { RIGHTS } from '@/auth/RIGHTS'
+import { randomBytes } from 'crypto'
+import { User } from '@model/User'
+import { calculateDecay } from '@/util/decay'
+import { executeTransaction } from './TransactionResolver'
+import { Order } from '@enum/Order'
+
+// TODO: do not export, test it inside the resolver
+export const transactionLinkCode = (date: Date): string => {
+ const time = date.getTime().toString(16)
+ return (
+ randomBytes(12)
+ .toString('hex')
+ .substring(0, 24 - time.length) + time
+ )
+}
+
+const CODE_VALID_DAYS_DURATION = 14
+
+export const transactionLinkExpireDate = (date: Date): Date => {
+ const validUntil = new Date(date)
+ return new Date(validUntil.setDate(date.getDate() + CODE_VALID_DAYS_DURATION))
+}
+
+@Resolver()
+export class TransactionLinkResolver {
+ @Authorized([RIGHTS.CREATE_TRANSACTION_LINK])
+ @Mutation(() => TransactionLink)
+ async createTransactionLink(
+ @Args() { amount, memo }: TransactionLinkArgs,
+ @Ctx() context: any,
+ ): Promise {
+ const { user } = context
+
+ const createdDate = new Date()
+ const validUntil = transactionLinkExpireDate(createdDate)
+
+ const holdAvailableAmount = amount.minus(calculateDecay(amount, createdDate, validUntil).decay)
+
+ // validate amount
+ const sendBalance = await calculateBalance(user.id, holdAvailableAmount.mul(-1), createdDate)
+ if (!sendBalance) {
+ throw new Error("user hasn't enough GDD or amount is < 0")
+ }
+
+ const transactionLink = dbTransactionLink.create()
+ transactionLink.userId = user.id
+ transactionLink.amount = amount
+ transactionLink.memo = memo
+ transactionLink.holdAvailableAmount = holdAvailableAmount
+ transactionLink.code = transactionLinkCode(createdDate)
+ transactionLink.createdAt = createdDate
+ transactionLink.validUntil = validUntil
+ await dbTransactionLink.save(transactionLink).catch(() => {
+ throw new Error('Unable to save transaction link')
+ })
+
+ return new TransactionLink(transactionLink, new User(user))
+ }
+
+ @Authorized([RIGHTS.DELETE_TRANSACTION_LINK])
+ @Mutation(() => Boolean)
+ async deleteTransactionLink(
+ @Arg('id', () => Int) id: number,
+ @Ctx() context: any,
+ ): Promise {
+ const { user } = context
+
+ const transactionLink = await dbTransactionLink.findOne({ id })
+ if (!transactionLink) {
+ throw new Error('Transaction Link not found!')
+ }
+
+ if (transactionLink.userId !== user.id) {
+ throw new Error('Transaction Link cannot be deleted!')
+ }
+
+ if (transactionLink.redeemedBy) {
+ throw new Error('Transaction Link already redeemed!')
+ }
+
+ await transactionLink.softRemove().catch(() => {
+ throw new Error('Transaction Link could not be deleted!')
+ })
+
+ return true
+ }
+
+ @Authorized([RIGHTS.QUERY_TRANSACTION_LINK])
+ @Query(() => TransactionLink)
+ async queryTransactionLink(@Arg('code') code: string): Promise {
+ const transactionLink = await dbTransactionLink.findOneOrFail({ code }, { withDeleted: true })
+ const user = await dbUser.findOneOrFail({ id: transactionLink.userId })
+ let redeemedBy: User | null = null
+ if (transactionLink && transactionLink.redeemedBy) {
+ redeemedBy = new User(await dbUser.findOneOrFail({ id: transactionLink.redeemedBy }))
+ }
+ return new TransactionLink(transactionLink, new User(user), redeemedBy)
+ }
+
+ @Authorized([RIGHTS.LIST_TRANSACTION_LINKS])
+ @Query(() => [TransactionLink])
+ async listTransactionLinks(
+ @Args()
+ { currentPage = 1, pageSize = 5, order = Order.DESC }: Paginated,
+ @Ctx() context: any,
+ ): Promise {
+ const { user } = context
+ // const now = new Date()
+ const transactionLinks = await dbTransactionLink.find({
+ where: {
+ userId: user.id,
+ redeemedBy: null,
+ // validUntil: MoreThan(now),
+ },
+ order: {
+ createdAt: order,
+ },
+ skip: (currentPage - 1) * pageSize,
+ take: pageSize,
+ })
+ return transactionLinks.map((tl) => new TransactionLink(tl, new User(user)))
+ }
+
+ @Authorized([RIGHTS.REDEEM_TRANSACTION_LINK])
+ @Mutation(() => Boolean)
+ async redeemTransactionLink(
+ @Arg('code', () => String) code: string,
+ @Ctx() context: any,
+ ): Promise {
+ const { user } = context
+ const transactionLink = await dbTransactionLink.findOneOrFail({ code })
+ const linkedUser = await dbUser.findOneOrFail({ id: transactionLink.userId })
+
+ const now = new Date()
+
+ if (user.id === linkedUser.id) {
+ throw new Error('Cannot redeem own transaction link.')
+ }
+
+ if (transactionLink.validUntil.getTime() < now.getTime()) {
+ throw new Error('Transaction Link is not valid anymore.')
+ }
+
+ if (transactionLink.redeemedBy) {
+ throw new Error('Transaction Link already redeemed.')
+ }
+
+ await executeTransaction(
+ transactionLink.amount,
+ transactionLink.memo,
+ linkedUser,
+ user,
+ transactionLink,
+ )
+
+ return true
+ }
+}
diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts
index d8ef1fb0f..ed9528b48 100644
--- a/backend/src/graphql/resolver/TransactionResolver.ts
+++ b/backend/src/graphql/resolver/TransactionResolver.ts
@@ -1,469 +1,128 @@
/* eslint-disable new-cap */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { Resolver, Query, Args, Authorized, Ctx, Mutation } from 'type-graphql'
-import { getCustomRepository, getConnection, QueryRunner } from 'typeorm'
+import { getCustomRepository, getConnection } from '@dbTools/typeorm'
-import CONFIG from '../../config'
-import { sendEMail } from '../../util/sendEMail'
+import CONFIG from '@/config'
+import { sendTransactionReceivedEmail } from '@/mailer/sendTransactionReceivedEmail'
-import { Transaction } from '../model/Transaction'
-import { TransactionList } from '../model/TransactionList'
+import { Transaction } from '@model/Transaction'
+import { TransactionList } from '@model/TransactionList'
-import TransactionSendArgs from '../arg/TransactionSendArgs'
-import Paginated from '../arg/Paginated'
+import TransactionSendArgs from '@arg/TransactionSendArgs'
+import Paginated from '@arg/Paginated'
-import { Order } from '../enum/Order'
+import { Order } from '@enum/Order'
-import { BalanceRepository } from '../../typeorm/repository/Balance'
-import { UserRepository } from '../../typeorm/repository/User'
-import { UserTransactionRepository } from '../../typeorm/repository/UserTransaction'
-import { TransactionRepository } from '../../typeorm/repository/Transaction'
+import { TransactionRepository } from '@repository/Transaction'
+import { TransactionLinkRepository } from '@repository/TransactionLink'
import { User as dbUser } from '@entity/User'
-import { UserTransaction as dbUserTransaction } from '@entity/UserTransaction'
import { Transaction as dbTransaction } from '@entity/Transaction'
-import { TransactionSendCoin as dbTransactionSendCoin } from '@entity/TransactionSendCoin'
-import { Balance as dbBalance } from '@entity/Balance'
+import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
-import { apiPost } from '../../apis/HttpRequest'
-import { roundFloorFrom4, roundCeilFrom4 } from '../../util/round'
-import { calculateDecay, calculateDecayWithInterval } from '../../util/decay'
-import { TransactionTypeId } from '../enum/TransactionTypeId'
-import { TransactionType } from '../enum/TransactionType'
-import { hasUserAmount, isHexPublicKey } from '../../util/validate'
-import { LoginUserRepository } from '../../typeorm/repository/LoginUser'
-import { RIGHTS } from '../../auth/RIGHTS'
+import { apiPost } from '@/apis/HttpRequest'
+import { TransactionTypeId } from '@enum/TransactionTypeId'
+import { calculateBalance, isHexPublicKey } from '@/util/validate'
+import { RIGHTS } from '@/auth/RIGHTS'
+import { User } from '@model/User'
+import { communityUser } from '@/util/communityUser'
+import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions'
+import Decimal from 'decimal.js-light'
+import { calculateDecay } from '@/util/decay'
-/*
-# Test
+export const executeTransaction = async (
+ amount: Decimal,
+ memo: string,
+ sender: dbUser,
+ recipient: dbUser,
+ transactionLink?: dbTransactionLink | null,
+): Promise => {
+ if (sender.id === recipient.id) {
+ throw new Error('Sender and Recipient are the same.')
+ }
-## Prepare
-> sudo systemctl start docker
-> docker-compose up mariadb
-> DROP all databases
-> docker-compose down
-> docker compose up mariadb database
-> verify there is exactly one database `gradido_community`
+ // validate amount
+ const receivedCallDate = new Date()
+ const sendBalance = await calculateBalance(sender.id, amount.mul(-1), receivedCallDate)
+ if (!sendBalance) {
+ throw new Error("user hasn't enough GDD or amount is < 0")
+ }
-TODO:
-INSERT INTO `login_groups` (`id`, `alias`, `name`, `url`, `host`, `home`, `description`) VALUES
- (1, 'docker', 'docker gradido group', 'localhost', 'nginx', '/', 'gradido test group for docker and stage2 with blockchain db');
+ const queryRunner = getConnection().createQueryRunner()
+ await queryRunner.connect()
+ await queryRunner.startTransaction('READ UNCOMMITTED')
+ try {
+ // transaction
+ const transactionSend = new dbTransaction()
+ transactionSend.typeId = TransactionTypeId.SEND
+ transactionSend.memo = memo
+ transactionSend.userId = sender.id
+ transactionSend.linkedUserId = recipient.id
+ transactionSend.amount = amount.mul(-1)
+ transactionSend.balance = sendBalance.balance
+ transactionSend.balanceDate = receivedCallDate
+ transactionSend.decay = sendBalance.decay.decay
+ transactionSend.decayStart = sendBalance.decay.start
+ transactionSend.previous = sendBalance.lastTransactionId
+ transactionSend.transactionLinkId = transactionLink ? transactionLink.id : null
+ await queryRunner.manager.insert(dbTransaction, transactionSend)
->> Database is cool
+ const transactionReceive = new dbTransaction()
+ transactionReceive.typeId = TransactionTypeId.RECEIVE
+ transactionReceive.memo = memo
+ transactionReceive.userId = recipient.id
+ transactionReceive.linkedUserId = sender.id
+ transactionReceive.amount = amount
+ const receiveBalance = await calculateBalance(recipient.id, amount, receivedCallDate)
+ transactionReceive.balance = receiveBalance ? receiveBalance.balance : amount
+ transactionReceive.balanceDate = receivedCallDate
+ transactionReceive.decay = receiveBalance ? receiveBalance.decay.decay : new Decimal(0)
+ transactionReceive.decayStart = receiveBalance ? receiveBalance.decay.start : null
+ transactionReceive.previous = receiveBalance ? receiveBalance.lastTransactionId : null
+ transactionReceive.linkedTransactionId = transactionSend.id
+ transactionReceive.transactionLinkId = transactionLink ? transactionLink.id : null
+ await queryRunner.manager.insert(dbTransaction, transactionReceive)
-### Start login server
-> docker-compose up login-server community-server nginx
->> Login & community servers and nginx proxy are up and running
+ // Save linked transaction id for send
+ transactionSend.linkedTransactionId = transactionReceive.id
+ await queryRunner.manager.update(dbTransaction, { id: transactionSend.id }, transactionSend)
-## Build database
-> cd database
-> yarn
-> yarn build
-> cd ..
->> Database has been built successful
-
-### Start backend (no docker for debugging)
-> cd backend
-> yarn
-> yarn dev
->> Backend is up and running
-
-### Create users
-> chromium http://localhost:4000/graphql
-> mutation{createUser(email: "receiver@user.net", firstName: "Receiver", lastName: "user", password: "123!AAAb", language: "de")}
-> mutation{createUser(email: "sender@user.net", firstName: "Sender", lastName: "user", password: "123!AAAb", language: "de")}
-> mutation{createUser(email: "creator@user.net", firstName: "Creator", lastName: "user", password: "123!AAAb", language: "de")}
->> Verify you have 3 entries in `login_users`, `login_user_backups` and `state_users`
-
-### make creator an admin
-> INSERT INTO login_user_roles (id, user_id, role_id) VALUES (NULL, '3', '1');
-> UPDATE login_users SET email_checked = 1 WHERE id = 3;
-> uncomment line: 19 in community_server/src/Controller/ServerUsersController.php
-> chromium http://localhost/server-users/add
-> create user `creator` `123` `creator@different.net`
->> verify you have 1 entry in `server_users`
-> login with user on http://localhost/server-users
-> activate server user by changing the corresponding flag in the interface
-> navigate to http://localhost/transaction-creations/create-multi
-> create 1000GDD for user sender@user.net
-> navigate to http://localhost
-> login with `creator@user.net` `123!AAAb`
-> confirm transaction (top right corner - click the thingy, click the green button `Transaktion abschließen`)
-
-### the test:
-> chromium http://localhost:4000/graphql
-> query{login(email: "sender@user.net", password: "123!AAAb"){pubkey}}
->> copy token from network tab (inspect)
-> mutation{sendCoins(email: "receiver@user.net", amount: 10.0, memo: "Hier!")}
-> mutation{sendCoins(email: "receiver@user.net", amount: 10.0, memo: "Hier!")}
-> Headers: {"Authorization": "Bearer ${token}"}
->> Verify via Database that stuff is as it should see `state_balance` & `transaction_send_coins`
-
-### create decay block
-> chromium http://localhost/transactions/add
-> login with `creator` `123`
-> select `decay start`
-> press submit
-> wait for at least 0.02 display of decay on user sender@user.net on old frontend, this should be aprox 10min
-> chromium http://localhost:4000/graphql
-> query{login(email: "sender@user.net", password: "123!AAAb"){pubkey}}
->> copy token from network tab (inspect)
-> mutation{sendCoins(email: "receiver@user.net", amount: 10.0, memo: "Hier!")}
->> verify in `transaction_send_coins` that a decay was taken into account
->> same in `state_balances`
->> now check the old frontend
->>> sender@user.net should have a decay of 0.02
->>> while receiver@user.net should have zero decay on anything (old frontend)
-
-### Export data
-> docker-compose up phpmyadmin
-> chromium http://localhost:8074/
-> select gradido_community
-> export
-> select custom
-> untick structure
-> ok
-
-## Results
-NOTE: We decided not to write the `transaction_signatures` since its unused. This is the main difference.
-NOTE: We fixed a bug in the `state_user_transactions code` with the new implementation of apollo
-
-
-Master:
-
---
--- Dumping data for table `state_user_transactions`
---
-
-INSERT INTO `state_user_transactions` (`id`, `state_user_id`, `transaction_id`, `transaction_type_id`, `balance`, `balance_date`) VALUES
-(1, 2, 1, 1, 10000000, '2021-11-05 12:45:18'),
-(2, 2, 2, 2, 9900000, '2021-11-05 12:48:35'),
-(3, 1, 2, 2, 100000, '2021-11-05 12:48:35'),
-(4, 2, 3, 2, 9800000, '2021-11-05 12:49:07'),
-(5, 1, 3, 2, 200000, '2021-11-05 12:49:07'),
-(6, 2, 5, 2, 9699845, '2021-11-05 13:03:50'),
-(7, 1, 5, 2, 99996, '2021-11-05 13:03:50');
-
---
--- Dumping data for table `transactions`
---
-
-INSERT INTO `transactions` (`id`, `state_group_id`, `transaction_type_id`, `tx_hash`, `memo`, `received`, `blockchain_type_id`) VALUES
-(1, NULL, 1, 0x9ccdcd01ccb6320c09c2d1da2f0bf735a95ece0e7c1df6bbff51918fbaec061700000000000000000000000000000000, '', '2021-11-05 12:45:18', 1),
-(2, NULL, 2, 0x58d7706a67fa4ff4b8038168c6be39a2963d7e28e9d3872759ad09c519fe093700000000000000000000000000000000, 'Hier!', '2021-11-05 12:48:35', 1),
-(3, NULL, 2, 0x427cd214f92ef35af671129d50edc5a478c53d1e464f285b7615d9794a69f69b00000000000000000000000000000000, 'Hier!', '2021-11-05 12:49:07', 1),
-(4, NULL, 9, 0x32807368f0906a21b94c072599795bc9eeab88fb565df82e85cc62a4fdcde48500000000000000000000000000000000, '', '2021-11-05 12:51:51', 1),
-(5, NULL, 2, 0x75eb729e0f60a1c8cead1342955853d2440d7a2ea57dfef6d4a18bff0d94491e00000000000000000000000000000000, 'Hier!', '2021-11-05 13:03:50', 1);
-
---
--- Dumping data for table `transaction_signatures`
---
-
-INSERT INTO `transaction_signatures` (`id`, `transaction_id`, `signature`, `pubkey`) VALUES
-(1, 1, 0x5888edcdcf77aaadad6d321882903bc831d7416f17213fd5020a764365b5fcb336e4c7917385a1278ea44ccdb31eac4a09e448053b5e3f8f1fe5da3baf53c008, 0xd5b20f8dee415038bfa2b6b0e1b40ff54850351109444863b04d6d28825b7b7d),
-(2, 2, 0xf6fef428f8f22faf7090f7d740e6088d1d90c58ae92d757117d7d91d799e659f3a3a0c65a3fd97cbde798e761f9d23eff13e8810779a184c97c411f28e7c4608, 0xdc74a589004377ab14836dce68ce2ca34e5b17147cd78ad4b3afe8137524ae8a),
-(3, 3, 0x8ebe9730c6cf61f56ef401d6f2bd229f3c298ca3c2791ee9137e4827b7af6c6d6566fca616eb1fe7adc2e4d56b5c7350ae3990c9905580630fa75ecffca8e001, 0xdc74a589004377ab14836dce68ce2ca34e5b17147cd78ad4b3afe8137524ae8a),
-(4, 5, 0x50cf418f7e217391e89ab9c2879ae68d7c7c597d846b4fe1c082b5b16e5d0c85c328fbf48ad3490bcfe94f446700ae0a4b0190e76d26cc752abced58f480c80f, 0xdc74a589004377ab14836dce68ce2ca34e5b17147cd78ad4b3afe8137524ae8a);
-
-This Feature Branch:
-
-
---
--- Dumping data for table `state_user_transactions`
---
-
-INSERT INTO `state_user_transactions` (`id`, `state_user_id`, `transaction_id`, `transaction_type_id`, `balance`, `balance_date`) VALUES
-(1, 2, 1, 1, 10000000, '2021-11-05 00:25:46'),
-(12, 2, 7, 2, 9900000, '2021-11-05 00:55:37'),
-(13, 1, 7, 2, 100000, '2021-11-05 00:55:37'),
-(14, 2, 8, 2, 9800000, '2021-11-05 01:00:04'),
-(15, 1, 8, 2, 200000, '2021-11-05 01:00:04'),
-(16, 2, 10, 2, 9699772, '2021-11-05 01:17:41'),
-(17, 1, 10, 2, 299995, '2021-11-05 01:17:41');
-
---
--- Dumping data for table `transactions`
---
-
-INSERT INTO `transactions` (`id`, `state_group_id`, `transaction_type_id`, `tx_hash`, `memo`, `received`, `blockchain_type_id`) VALUES
-(1, NULL, 1, 0xdd030d475479877587d927ed9024784ba62266cf1f3d87862fc98ad68f7b26e400000000000000000000000000000000, '', '2021-11-05 00:25:46', 1),
-(7, NULL, 2, NULL, 'Hier!', '2021-11-05 00:55:37', 1),
-(8, NULL, 2, NULL, 'Hier!', '2021-11-05 01:00:04', 1),
-(9, NULL, 9, 0xb1cbedbf126aa35f5edbf06e181c415361d05228ab4da9d19a4595285a673dfa00000000000000000000000000000000, '', '2021-11-05 01:05:34', 1),
-(10, NULL, 2, NULL, 'Hier!', '2021-11-05 01:17:41', 1);
-
---
--- Dumping data for table `transaction_signatures`
---
-
-INSERT INTO `transaction_signatures` (`id`, `transaction_id`, `signature`, `pubkey`) VALUES
-(1, 1, 0x60d632479707e5d01cdc32c3326b5a5bae11173a0c06b719ee7b552f9fd644de1a0cd4afc207253329081d39dac1a63421f51571d836995c649fc39afac7480a, 0x48c45cb4fea925e83850f68f2fa8f27a1a4ed1bcba68cdb59fcd86adef3f52ee);
-*/
-
-// Helper function
-async function calculateAndAddDecayTransactions(
- userTransactions: dbUserTransaction[],
- user: dbUser,
- decay: boolean,
- skipFirstTransaction: boolean,
-): Promise {
- const finalTransactions: Transaction[] = []
- const transactionIds: number[] = []
- const involvedUserIds: number[] = []
-
- userTransactions.forEach((userTransaction: dbUserTransaction) => {
- transactionIds.push(userTransaction.transactionId)
- })
-
- const transactionRepository = getCustomRepository(TransactionRepository)
- const transactions = await transactionRepository.joinFullTransactionsByIds(transactionIds)
-
- const transactionIndiced: dbTransaction[] = []
- transactions.forEach((transaction: dbTransaction) => {
- transactionIndiced[transaction.id] = transaction
- if (transaction.transactionTypeId === TransactionTypeId.SEND) {
- involvedUserIds.push(transaction.transactionSendCoin.userId)
- involvedUserIds.push(transaction.transactionSendCoin.recipiantUserId)
- }
- })
- // remove duplicates
- // https://stackoverflow.com/questions/1960473/get-all-unique-values-in-a-javascript-array-remove-duplicates
- const involvedUsersUnique = involvedUserIds.filter((v, i, a) => a.indexOf(v) === i)
- const userRepository = getCustomRepository(UserRepository)
- const userIndiced = await userRepository.getUsersIndiced(involvedUsersUnique)
-
- const decayStartTransaction = await transactionRepository.findDecayStartBlock()
-
- for (let i = 0; i < userTransactions.length; i++) {
- const userTransaction = userTransactions[i]
- const transaction = transactionIndiced[userTransaction.transactionId]
- const finalTransaction = new Transaction()
- finalTransaction.transactionId = transaction.id
- finalTransaction.date = transaction.received.toISOString()
- finalTransaction.memo = transaction.memo
- finalTransaction.totalBalance = roundFloorFrom4(userTransaction.balance)
- const previousTransaction = i > 0 ? userTransactions[i - 1] : null
-
- if (previousTransaction) {
- const currentTransaction = userTransaction
- const decay = await calculateDecayWithInterval(
- previousTransaction.balance,
- previousTransaction.balanceDate,
- currentTransaction.balanceDate,
+ if (transactionLink) {
+ transactionLink.redeemedAt = receivedCallDate
+ transactionLink.redeemedBy = recipient.id
+ await queryRunner.manager.update(
+ dbTransactionLink,
+ { id: transactionLink.id },
+ transactionLink,
)
- const balance = previousTransaction.balance - decay.balance
-
- if (
- decayStartTransaction &&
- decayStartTransaction.received < currentTransaction.balanceDate
- ) {
- finalTransaction.decay = decay
- finalTransaction.decay.balance = roundFloorFrom4(balance)
- if (
- decayStartTransaction &&
- previousTransaction.transactionId < decayStartTransaction.id &&
- currentTransaction.transactionId > decayStartTransaction.id
- ) {
- finalTransaction.decay.decayStartBlock = (
- decayStartTransaction.received.getTime() / 1000
- ).toString()
- }
- }
}
- // sender or receiver when user has sent money
- // group name if creation
- // type: gesendet / empfangen / geschöpft
- // transaktion nr / id
- // date
- // balance
- if (userTransaction.transactionTypeId === TransactionTypeId.CREATION) {
- // creation
- const creation = transaction.transactionCreation
-
- finalTransaction.name = 'Gradido Akademie'
- finalTransaction.type = TransactionType.CREATION
- // finalTransaction.targetDate = creation.targetDate
- finalTransaction.balance = roundFloorFrom4(creation.amount)
- } else if (userTransaction.transactionTypeId === TransactionTypeId.SEND) {
- // send coin
- const sendCoin = transaction.transactionSendCoin
- let otherUser: dbUser | undefined
- finalTransaction.balance = roundFloorFrom4(sendCoin.amount)
- if (sendCoin.userId === user.id) {
- finalTransaction.type = TransactionType.SEND
- otherUser = userIndiced[sendCoin.recipiantUserId]
- // finalTransaction.pubkey = sendCoin.recipiantPublic
- } else if (sendCoin.recipiantUserId === user.id) {
- finalTransaction.type = TransactionType.RECIEVE
- otherUser = userIndiced[sendCoin.userId]
- // finalTransaction.pubkey = sendCoin.senderPublic
- } else {
- throw new Error('invalid transaction')
- }
- if (otherUser) {
- finalTransaction.name = otherUser.firstName + ' ' + otherUser.lastName
- finalTransaction.email = otherUser.email
- }
- }
- if (i > 0 || !skipFirstTransaction) {
- finalTransactions.push(finalTransaction)
- }
-
- if (i === userTransactions.length - 1 && decay) {
- const now = new Date()
- const decay = await calculateDecayWithInterval(
- userTransaction.balance,
- userTransaction.balanceDate,
- now.getTime(),
- )
- const balance = userTransaction.balance - decay.balance
-
- const decayTransaction = new Transaction()
- decayTransaction.type = 'decay'
- decayTransaction.balance = roundCeilFrom4(balance)
- decayTransaction.decayDuration = decay.decayDuration
- decayTransaction.decayStart = decay.decayStart
- decayTransaction.decayEnd = decay.decayEnd
- finalTransactions.push(decayTransaction)
- }
+ await queryRunner.commitTransaction()
+ } catch (e) {
+ await queryRunner.rollbackTransaction()
+ throw new Error(`Transaction was not successful: ${e}`)
+ } finally {
+ await queryRunner.release()
}
- return finalTransactions
-}
-
-// Helper function
-async function listTransactions(
- currentPage: number,
- pageSize: number,
- order: Order,
- user: dbUser,
- onlyCreations: boolean,
-): Promise {
- let limit = pageSize
- let offset = 0
- let skipFirstTransaction = false
- if (currentPage > 1) {
- offset = (currentPage - 1) * pageSize - 1
- limit++
- }
-
- if (offset && order === Order.ASC) {
- offset--
- }
- const userTransactionRepository = getCustomRepository(UserTransactionRepository)
- let [userTransactions, userTransactionsCount] = await userTransactionRepository.findByUserPaged(
- user.id,
- limit,
- offset,
- order,
- onlyCreations,
- )
- skipFirstTransaction = userTransactionsCount > offset + limit
- const decay = !(currentPage > 1)
- let transactions: Transaction[] = []
- if (userTransactions.length) {
- if (order === Order.DESC) {
- userTransactions = userTransactions.reverse()
- }
- transactions = await calculateAndAddDecayTransactions(
- userTransactions,
- user,
- decay,
- skipFirstTransaction,
- )
- if (order === Order.DESC) {
- transactions = transactions.reverse()
- }
- }
-
- const transactionList = new TransactionList()
- transactionList.count = userTransactionsCount
- transactionList.transactions = transactions
- return transactionList
-}
-
-// helper helper function
-async function updateStateBalance(
- user: dbUser,
- centAmount: number,
- received: Date,
- queryRunner: QueryRunner,
-): Promise {
- const balanceRepository = getCustomRepository(BalanceRepository)
- let balance = await balanceRepository.findByUser(user.id)
- if (!balance) {
- balance = new dbBalance()
- balance.userId = user.id
- balance.amount = centAmount
- balance.modified = received
- } else {
- const decaiedBalance = await calculateDecay(balance.amount, balance.recordDate, received).catch(
- () => {
- throw new Error('error by calculating decay')
- },
- )
- balance.amount = Number(decaiedBalance) + centAmount
- balance.modified = new Date()
- }
- if (balance.amount <= 0) {
- throw new Error('error new balance <= 0')
- }
- balance.recordDate = received
- return queryRunner.manager.save(balance).catch((error) => {
- throw new Error('error saving balance:' + error)
+ // send notification email
+ // TODO: translate
+ await sendTransactionReceivedEmail({
+ senderFirstName: sender.firstName,
+ senderLastName: sender.lastName,
+ recipientFirstName: recipient.firstName,
+ recipientLastName: recipient.lastName,
+ email: recipient.email,
+ senderEmail: sender.email,
+ amount,
+ memo,
})
-}
-// helper helper function
-async function addUserTransaction(
- user: dbUser,
- transaction: dbTransaction,
- centAmount: number,
- queryRunner: QueryRunner,
-): Promise {
- let newBalance = centAmount
- const userTransactionRepository = getCustomRepository(UserTransactionRepository)
- const lastUserTransaction = await userTransactionRepository.findLastForUser(user.id)
- if (lastUserTransaction) {
- newBalance += Number(
- await calculateDecay(
- Number(lastUserTransaction.balance),
- lastUserTransaction.balanceDate,
- transaction.received,
- ).catch(() => {
- throw new Error('error by calculating decay')
- }),
- )
- }
-
- if (newBalance <= 0) {
- throw new Error('error new balance <= 0')
- }
-
- const newUserTransaction = new dbUserTransaction()
- newUserTransaction.userId = user.id
- newUserTransaction.transactionId = transaction.id
- newUserTransaction.transactionTypeId = transaction.transactionTypeId
- newUserTransaction.balance = newBalance
- newUserTransaction.balanceDate = transaction.received
-
- return queryRunner.manager.save(newUserTransaction).catch((error) => {
- throw new Error('Error saving user transaction: ' + error)
- })
-}
-
-async function getPublicKey(email: string): Promise {
- const loginUserRepository = getCustomRepository(LoginUserRepository)
- const loginUser = await loginUserRepository.findOne({ email: email })
- // User not found
- if (!loginUser) {
- return null
- }
-
- return loginUser.pubKey.toString('hex')
+ return true
}
@Resolver()
@@ -472,52 +131,110 @@ export class TransactionResolver {
@Query(() => TransactionList)
async transactionList(
@Args()
- {
- currentPage = 1,
- pageSize = 25,
- order = Order.DESC,
- onlyCreations = false,
- userId,
- }: Paginated,
+ { currentPage = 1, pageSize = 25, order = Order.DESC }: Paginated,
@Ctx() context: any,
): Promise {
- // load user
- const userRepository = getCustomRepository(UserRepository)
- let userEntity: dbUser | undefined
- if (userId) {
- userEntity = await userRepository.findOneOrFail({ id: userId })
- } else {
- userEntity = await userRepository.findByPubkeyHex(context.pubKey)
- }
+ const now = new Date()
+ const user = context.user
- const transactions = await listTransactions(
- currentPage,
- pageSize,
- order,
- userEntity,
- onlyCreations,
+ // find current balance
+ const lastTransaction = await dbTransaction.findOne(
+ { userId: user.id },
+ { order: { balanceDate: 'DESC' } },
)
- // get gdt sum
- const resultGDTSum = await apiPost(`${CONFIG.GDT_API_URL}/GdtEntries/sumPerEmailApi`, {
- email: userEntity.email,
- })
- if (!resultGDTSum.success) throw new Error(resultGDTSum.data)
- transactions.gdtSum = resultGDTSum.data.sum || 0
-
- // get balance
- const balanceRepository = getCustomRepository(BalanceRepository)
- const balanceEntity = await balanceRepository.findByUser(userEntity.id)
- if (balanceEntity) {
- const now = new Date()
- transactions.balance = roundFloorFrom4(balanceEntity.amount)
- transactions.decay = roundFloorFrom4(
- await calculateDecay(balanceEntity.amount, balanceEntity.recordDate, now),
- )
- transactions.decayDate = now.toString()
+ // get GDT
+ let balanceGDT = null
+ try {
+ const resultGDTSum = await apiPost(`${CONFIG.GDT_API_URL}/GdtEntries/sumPerEmailApi`, {
+ email: user.email,
+ })
+ if (!resultGDTSum.success) {
+ throw new Error('Call not successful')
+ }
+ balanceGDT = Number(resultGDTSum.data.sum) || 0
+ } catch (err: any) {
+ // eslint-disable-next-line no-console
+ console.log('Could not query GDT Server', err)
}
- return transactions
+ if (!lastTransaction) {
+ return new TransactionList(new Decimal(0), [], 0, 0, balanceGDT)
+ }
+
+ // find transactions
+ // first page can contain 26 due to virtual decay transaction
+ const offset = (currentPage - 1) * pageSize
+ const transactionRepository = getCustomRepository(TransactionRepository)
+ const [userTransactions, userTransactionsCount] = await transactionRepository.findByUserPaged(
+ user.id,
+ pageSize,
+ offset,
+ order,
+ )
+
+ // find involved users; I am involved
+ const involvedUserIds: number[] = [user.id]
+ userTransactions.forEach((transaction: dbTransaction) => {
+ if (transaction.linkedUserId && !involvedUserIds.includes(transaction.linkedUserId)) {
+ involvedUserIds.push(transaction.linkedUserId)
+ }
+ })
+ // We need to show the name for deleted users for old transactions
+ const involvedDbUsers = await dbUser
+ .createQueryBuilder()
+ .withDeleted()
+ .where('id IN (:...userIds)', { userIds: involvedUserIds })
+ .getMany()
+ const involvedUsers = involvedDbUsers.map((u) => new User(u))
+
+ const self = new User(user)
+ const transactions: Transaction[] = []
+
+ const transactionLinkRepository = getCustomRepository(TransactionLinkRepository)
+ const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, transactionLinkcount } =
+ await transactionLinkRepository.summary(user.id, now)
+
+ // decay & link transactions
+ if (currentPage === 1 && order === Order.DESC) {
+ transactions.push(
+ virtualDecayTransaction(lastTransaction.balance, lastTransaction.balanceDate, now, self),
+ )
+ // virtual transaction for pending transaction-links sum
+ if (sumHoldAvailableAmount.greaterThan(0)) {
+ transactions.push(
+ virtualLinkTransaction(
+ lastTransaction.balance.minus(sumHoldAvailableAmount.toString()),
+ sumAmount.mul(-1),
+ sumHoldAvailableAmount.mul(-1),
+ sumHoldAvailableAmount.minus(sumAmount.toString()).mul(-1),
+ firstDate || now,
+ lastDate || now,
+ self,
+ ),
+ )
+ }
+ }
+
+ // transactions
+ userTransactions.forEach((userTransaction) => {
+ const linkedUser =
+ userTransaction.typeId === TransactionTypeId.CREATION
+ ? communityUser
+ : involvedUsers.find((u) => u.id === userTransaction.linkedUserId)
+ transactions.push(new Transaction(userTransaction, self, linkedUser))
+ })
+
+ // Construct Result
+ return new TransactionList(
+ calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, now).balance.minus(
+ sumHoldAvailableAmount.toString(),
+ ),
+ transactions,
+ userTransactionsCount,
+ transactionLinkcount,
+ balanceGDT,
+ )
}
@Authorized([RIGHTS.SEND_COINS])
@@ -525,149 +242,27 @@ export class TransactionResolver {
async sendCoins(
@Args() { email, amount, memo }: TransactionSendArgs,
@Ctx() context: any,
- ): Promise {
+ ): Promise {
// TODO this is subject to replay attacks
- // validate sender user (logged in)
- const userRepository = getCustomRepository(UserRepository)
- const senderUser = await userRepository.findByPubkeyHex(context.pubKey)
- if (senderUser.pubkey.length !== 32) {
+ const senderUser = context.user
+ if (senderUser.pubKey.length !== 32) {
throw new Error('invalid sender public key')
}
- if (!hasUserAmount(senderUser, amount)) {
- throw new Error("user hasn't enough GDD")
- }
// validate recipient user
- // TODO: the detour over the public key is unnecessary
- const recipiantPublicKey = await getPublicKey(email)
- if (!recipiantPublicKey) {
- throw new Error('recipiant not known')
+ const recipientUser = await dbUser.findOne({ email: email }, { withDeleted: true })
+ if (!recipientUser) {
+ throw new Error('recipient not known')
}
- if (!isHexPublicKey(recipiantPublicKey)) {
- throw new Error('invalid recipiant public key')
+ if (recipientUser.deletedAt) {
+ throw new Error('The recipient account was deleted')
}
- const recipiantUser = await userRepository.findByPubkeyHex(recipiantPublicKey)
- if (!recipiantUser) {
- throw new Error('Cannot find recipiant user by local send coins transaction')
- } else if (recipiantUser.disabled) {
- throw new Error('recipiant user account is disabled')
+ if (!isHexPublicKey(recipientUser.pubKey.toString('hex'))) {
+ throw new Error('invalid recipient public key')
}
- // validate amount
- if (amount <= 0) {
- throw new Error('invalid amount')
- }
+ await executeTransaction(amount, memo, senderUser, recipientUser)
- const centAmount = Math.trunc(amount * 10000)
-
- const queryRunner = getConnection().createQueryRunner()
- await queryRunner.connect()
- await queryRunner.startTransaction('READ UNCOMMITTED')
- try {
- // transaction
- let transaction = new dbTransaction()
- transaction.transactionTypeId = TransactionTypeId.SEND
- transaction.memo = memo
-
- // TODO: NO! this is problematic in its construction
- const insertResult = await queryRunner.manager.insert(dbTransaction, transaction)
- transaction = await queryRunner.manager
- .findOneOrFail(dbTransaction, insertResult.generatedMaps[0].id)
- .catch((error) => {
- throw new Error('error loading saved transaction: ' + error)
- })
-
- // Insert Transaction: sender - amount
- const senderUserTransactionBalance = await addUserTransaction(
- senderUser,
- transaction,
- -centAmount,
- queryRunner,
- )
- // Insert Transaction: recipient + amount
- const recipiantUserTransactionBalance = await addUserTransaction(
- recipiantUser,
- transaction,
- centAmount,
- queryRunner,
- )
-
- // Update Balance: sender - amount
- const senderStateBalance = await updateStateBalance(
- senderUser,
- -centAmount,
- transaction.received,
- queryRunner,
- )
- // Update Balance: recipiant + amount
- const recipiantStateBalance = await updateStateBalance(
- recipiantUser,
- centAmount,
- transaction.received,
- queryRunner,
- )
-
- if (senderStateBalance.amount !== senderUserTransactionBalance.balance) {
- throw new Error('db data corrupted, sender')
- }
- if (recipiantStateBalance.amount !== recipiantUserTransactionBalance.balance) {
- throw new Error('db data corrupted, recipiant')
- }
-
- // transactionSendCoin
- const transactionSendCoin = new dbTransactionSendCoin()
- transactionSendCoin.transactionId = transaction.id
- transactionSendCoin.userId = senderUser.id
- transactionSendCoin.senderPublic = senderUser.pubkey
- transactionSendCoin.recipiantUserId = recipiantUser.id
- transactionSendCoin.recipiantPublic = Buffer.from(recipiantPublicKey, 'hex')
- transactionSendCoin.amount = centAmount
- transactionSendCoin.senderFinalBalance = senderStateBalance.amount
- await queryRunner.manager.save(transactionSendCoin).catch((error) => {
- throw new Error('error saving transaction send coin: ' + error)
- })
-
- await queryRunner.manager.save(transaction).catch((error) => {
- throw new Error('error saving transaction with tx hash: ' + error)
- })
-
- await queryRunner.commitTransaction()
- } catch (e) {
- await queryRunner.rollbackTransaction()
- // TODO: This is broken code - we should never correct an autoincrement index in production
- // according to dario it is required tho to properly work. The index of the table is used as
- // index for the transaction which requires a chain without gaps
- const count = await queryRunner.manager.count(dbTransaction)
- // fix autoincrement value which seems not effected from rollback
- await queryRunner
- .query('ALTER TABLE `transactions` auto_increment = ?', [count])
- .catch((error) => {
- // eslint-disable-next-line no-console
- console.log('problems with reset auto increment: %o', error)
- })
- throw e
- } finally {
- await queryRunner.release()
- }
- // send notification email
- // TODO: translate
- await sendEMail({
- from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`,
- to: `${recipiantUser.firstName} ${recipiantUser.lastName} <${recipiantUser.email}>`,
- subject: 'Gradido Überweisung',
- text: `Hallo ${recipiantUser.firstName} ${recipiantUser.lastName}
-
- Du hast soeben ${amount} GDD von ${senderUser.firstName} ${senderUser.lastName} erhalten.
- ${senderUser.firstName} ${senderUser.lastName} schreibt:
-
- ${memo}
-
- Bitte antworte nicht auf diese E-Mail!
-
- Mit freundlichen Grüßen,
- dein Gradido-Team`,
- })
-
- return 'success'
+ return true
}
}
diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts
index d0c144e22..53f39668e 100644
--- a/backend/src/graphql/resolver/UserResolver.test.ts
+++ b/backend/src/graphql/resolver/UserResolver.test.ts
@@ -1,35 +1,49 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { createTestClient } from 'apollo-server-testing'
-import gql from 'graphql-tag'
+import { testEnvironment, headerPushMock, resetToken, cleanDB } from '@test/helpers'
+import { userFactory } from '@/seeds/factory/user'
+import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
+import { createUser, setPassword } from '@/seeds/graphql/mutations'
+import { login, logout } from '@/seeds/graphql/queries'
import { GraphQLError } from 'graphql'
-import createServer from '../../server/createServer'
-import { resetDB, initialize } from '@dbTools/helpers'
-import { getRepository } from 'typeorm'
-import { LoginUser } from '@entity/LoginUser'
-import { LoginUserBackup } from '@entity/LoginUserBackup'
import { LoginEmailOptIn } from '@entity/LoginEmailOptIn'
import { User } from '@entity/User'
-import CONFIG from '../../config'
-import { sendEMail } from '../../util/sendEMail'
+import CONFIG from '@/config'
+import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail'
-jest.mock('../../util/sendEMail', () => {
+// import { klicktippSignIn } from '@/apis/KlicktippController'
+
+jest.mock('@/mailer/sendAccountActivationEmail', () => {
return {
__esModule: true,
- sendEMail: jest.fn(),
+ sendAccountActivationEmail: jest.fn(),
}
})
-let mutate: any
-let con: any
+/*
+jest.mock('@/apis/KlicktippController', () => {
+ return {
+ __esModule: true,
+ klicktippSignIn: jest.fn(),
+ }
+})
+*/
+
+let mutate: any, query: any, con: any
+let testEnv: any
beforeAll(async () => {
- const server = await createServer({})
- con = server.con
- mutate = createTestClient(server.apollo).mutate
- await initialize()
- await resetDB()
+ testEnv = await testEnvironment()
+ mutate = testEnv.mutate
+ query = testEnv.query
+ con = testEnv.con
+ await cleanDB()
+})
+
+afterAll(async () => {
+ await cleanDB()
+ await con.close()
})
describe('UserResolver', () => {
@@ -42,106 +56,52 @@ describe('UserResolver', () => {
publisherId: 1234,
}
- const mutation = gql`
- mutation (
- $email: String!
- $firstName: String!
- $lastName: String!
- $language: String!
- $publisherId: Int
- ) {
- createUser(
- email: $email
- firstName: $firstName
- lastName: $lastName
- language: $language
- publisherId: $publisherId
- )
- }
- `
-
let result: any
let emailOptIn: string
- let newUser: User
beforeAll(async () => {
- result = await mutate({ mutation, variables })
+ jest.clearAllMocks()
+ result = await mutate({ mutation: createUser, variables })
})
afterAll(async () => {
- await resetDB()
+ await cleanDB()
})
it('returns success', () => {
- expect(result).toEqual(expect.objectContaining({ data: { createUser: 'success' } }))
+ expect(result).toEqual(
+ expect.objectContaining({ data: { createUser: { id: expect.any(Number) } } }),
+ )
})
describe('valid input data', () => {
- let loginUser: LoginUser[]
let user: User[]
- let loginUserBackup: LoginUserBackup[]
let loginEmailOptIn: LoginEmailOptIn[]
beforeAll(async () => {
- loginUser = await getRepository(LoginUser).createQueryBuilder('login_user').getMany()
- user = await getRepository(User).createQueryBuilder('state_user').getMany()
- loginUserBackup = await getRepository(LoginUserBackup)
- .createQueryBuilder('login_user_backup')
- .getMany()
- loginEmailOptIn = await getRepository(LoginEmailOptIn)
- .createQueryBuilder('login_email_optin')
- .getMany()
- newUser = user[0]
+ user = await User.find()
+ loginEmailOptIn = await LoginEmailOptIn.find()
emailOptIn = loginEmailOptIn[0].verificationCode.toString()
})
describe('filling all tables', () => {
it('saves the user in login_user table', () => {
- expect(loginUser).toEqual([
+ expect(user).toEqual([
{
id: expect.any(Number),
email: 'peter@lustig.de',
firstName: 'Peter',
lastName: 'Lustig',
- username: '',
- description: '',
password: '0',
pubKey: null,
privKey: null,
emailHash: expect.any(Buffer),
createdAt: expect.any(Date),
emailChecked: false,
- passphraseShown: false,
- language: 'de',
- disabled: false,
- groupId: 1,
- publisherId: 1234,
- },
- ])
- })
-
- it('saves the user in state_user table', () => {
- expect(user).toEqual([
- {
- id: expect.any(Number),
- indexId: 0,
- groupId: 0,
- pubkey: expect.any(Buffer),
- email: 'peter@lustig.de',
- firstName: 'Peter',
- lastName: 'Lustig',
- username: '',
- disabled: false,
- },
- ])
- })
-
- it('saves the user in login_user_backup table', () => {
- expect(loginUserBackup).toEqual([
- {
- id: expect.any(Number),
passphrase: expect.any(String),
- userId: loginUser[0].id,
- mnemonicType: 2,
+ language: 'de',
+ deletedAt: null,
+ publisherId: 1234,
+ referrerId: null,
},
])
})
@@ -150,7 +110,7 @@ describe('UserResolver', () => {
expect(loginEmailOptIn).toEqual([
{
id: expect.any(Number),
- userId: loginUser[0].id,
+ userId: user[0].id,
verificationCode: expect.any(String),
emailOptInTypeId: 1,
createdAt: expect.any(Date),
@@ -164,21 +124,22 @@ describe('UserResolver', () => {
describe('account activation email', () => {
it('sends an account activation email', () => {
- const activationLink = CONFIG.EMAIL_LINK_VERIFICATION.replace(/\$1/g, emailOptIn)
- expect(sendEMail).toBeCalledWith({
- from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`,
- to: `${newUser.firstName} ${newUser.lastName} <${newUser.email}>`,
- subject: 'Gradido: E-Mail Überprüfung',
- text:
- expect.stringContaining(`Hallo ${newUser.firstName} ${newUser.lastName},`) &&
- expect.stringContaining(activationLink),
+ const activationLink = CONFIG.EMAIL_LINK_VERIFICATION.replace(
+ /{optin}/g,
+ emailOptIn,
+ ).replace(/{code}/g, '')
+ expect(sendAccountActivationEmail).toBeCalledWith({
+ link: activationLink,
+ firstName: 'Peter',
+ lastName: 'Lustig',
+ email: 'peter@lustig.de',
})
})
})
describe('email already exists', () => {
it('throws an error', async () => {
- await expect(mutate({ mutation, variables })).resolves.toEqual(
+ await expect(mutate({ mutation: createUser, variables })).resolves.toEqual(
expect.objectContaining({
errors: [new GraphQLError('User already exists.')],
}),
@@ -189,12 +150,10 @@ describe('UserResolver', () => {
describe('unknown language', () => {
it('sets "de" as default language', async () => {
await mutate({
- mutation,
+ mutation: createUser,
variables: { ...variables, email: 'bibi@bloxberg.de', language: 'es' },
})
- await expect(
- getRepository(LoginUser).createQueryBuilder('login_user').getMany(),
- ).resolves.toEqual(
+ await expect(User.find()).resolves.toEqual(
expect.arrayContaining([
expect.objectContaining({
email: 'bibi@bloxberg.de',
@@ -208,12 +167,10 @@ describe('UserResolver', () => {
describe('no publisher id', () => {
it('sets publisher id to null', async () => {
await mutate({
- mutation,
+ mutation: createUser,
variables: { ...variables, email: 'raeuber@hotzenplotz.de', publisherId: undefined },
})
- await expect(
- getRepository(LoginUser).createQueryBuilder('login_user').getMany(),
- ).resolves.toEqual(
+ await expect(User.find()).resolves.toEqual(
expect.arrayContaining([
expect.objectContaining({
email: 'raeuber@hotzenplotz.de',
@@ -224,9 +181,237 @@ describe('UserResolver', () => {
})
})
})
-})
-afterAll(async () => {
- await resetDB(true)
- await con.close()
+ describe('setPassword', () => {
+ const createUserVariables = {
+ email: 'peter@lustig.de',
+ firstName: 'Peter',
+ lastName: 'Lustig',
+ language: 'de',
+ publisherId: 1234,
+ }
+
+ let result: any
+ let emailOptIn: string
+
+ describe('valid optin code and valid password', () => {
+ let newUser: any
+
+ beforeAll(async () => {
+ await mutate({ mutation: createUser, variables: createUserVariables })
+ const loginEmailOptIn = await LoginEmailOptIn.find()
+ emailOptIn = loginEmailOptIn[0].verificationCode.toString()
+ result = await mutate({
+ mutation: setPassword,
+ variables: { code: emailOptIn, password: 'Aa12345_' },
+ })
+ newUser = await User.find()
+ })
+
+ afterAll(async () => {
+ await cleanDB()
+ })
+
+ it('sets email checked to true', () => {
+ expect(newUser[0].emailChecked).toBeTruthy()
+ })
+
+ it('updates the password', () => {
+ expect(newUser[0].password).toEqual('3917921995996627700')
+ })
+
+ it('removes the optin', async () => {
+ await expect(LoginEmailOptIn.find()).resolves.toHaveLength(0)
+ })
+
+ /*
+ it('calls the klicktipp API', () => {
+ expect(klicktippSignIn).toBeCalledWith(
+ user[0].email,
+ user[0].language,
+ user[0].firstName,
+ user[0].lastName,
+ )
+ })
+ */
+
+ it('returns true', () => {
+ expect(result).toBeTruthy()
+ })
+ })
+
+ describe('no valid password', () => {
+ beforeAll(async () => {
+ await mutate({ mutation: createUser, variables: createUserVariables })
+ const loginEmailOptIn = await LoginEmailOptIn.find()
+ emailOptIn = loginEmailOptIn[0].verificationCode.toString()
+ result = await mutate({
+ mutation: setPassword,
+ variables: { code: emailOptIn, password: 'not-valid' },
+ })
+ })
+
+ afterAll(async () => {
+ await cleanDB()
+ })
+
+ it('throws an error', () => {
+ expect(result).toEqual(
+ expect.objectContaining({
+ errors: [
+ new GraphQLError(
+ 'Please enter a valid password with at least 8 characters, upper and lower case letters, at least one number and one special character!',
+ ),
+ ],
+ }),
+ )
+ })
+ })
+
+ describe('no valid optin code', () => {
+ beforeAll(async () => {
+ await mutate({ mutation: createUser, variables: createUserVariables })
+ result = await mutate({
+ mutation: setPassword,
+ variables: { code: 'not valid', password: 'Aa12345_' },
+ })
+ })
+
+ afterAll(async () => {
+ await cleanDB()
+ })
+
+ it('throws an error', () => {
+ expect(result).toEqual(
+ expect.objectContaining({
+ errors: [new GraphQLError('Could not login with emailVerificationCode')],
+ }),
+ )
+ })
+ })
+ })
+
+ describe('login', () => {
+ const variables = {
+ email: 'bibi@bloxberg.de',
+ password: 'Aa12345_',
+ publisherId: 1234,
+ }
+
+ let result: User
+
+ afterAll(async () => {
+ await cleanDB()
+ })
+
+ describe('no users in database', () => {
+ beforeAll(async () => {
+ result = await query({ query: login, variables })
+ })
+
+ it('throws an error', () => {
+ expect(result).toEqual(
+ expect.objectContaining({
+ errors: [new GraphQLError('No user with this credentials')],
+ }),
+ )
+ })
+ })
+
+ describe('user is in database and correct login data', () => {
+ beforeAll(async () => {
+ await userFactory(testEnv, bibiBloxberg)
+ result = await query({ query: login, variables })
+ })
+
+ afterAll(async () => {
+ await cleanDB()
+ })
+
+ it('returns the user object', () => {
+ expect(result).toEqual(
+ expect.objectContaining({
+ data: {
+ login: {
+ coinanimation: true,
+ email: 'bibi@bloxberg.de',
+ firstName: 'Bibi',
+ hasElopage: false,
+ id: expect.any(Number),
+ isAdmin: false,
+ klickTipp: {
+ newsletterState: false,
+ },
+ language: 'de',
+ lastName: 'Bloxberg',
+ publisherId: 1234,
+ },
+ },
+ }),
+ )
+ })
+
+ it('sets the token in the header', () => {
+ expect(headerPushMock).toBeCalledWith({ key: 'token', value: expect.any(String) })
+ })
+ })
+
+ describe('user is in database and wrong password', () => {
+ beforeAll(async () => {
+ await userFactory(testEnv, bibiBloxberg)
+ })
+
+ afterAll(async () => {
+ await cleanDB()
+ })
+
+ it('returns an error', () => {
+ expect(
+ query({ query: login, variables: { ...variables, password: 'wrong' } }),
+ ).resolves.toEqual(
+ expect.objectContaining({
+ errors: [new GraphQLError('No user with this credentials')],
+ }),
+ )
+ })
+ })
+ })
+
+ describe('logout', () => {
+ describe('unauthenticated', () => {
+ it('throws an error', async () => {
+ resetToken()
+ await expect(query({ query: logout })).resolves.toEqual(
+ expect.objectContaining({
+ errors: [new GraphQLError('401 Unauthorized')],
+ }),
+ )
+ })
+ })
+
+ describe('authenticated', () => {
+ const variables = {
+ email: 'bibi@bloxberg.de',
+ password: 'Aa12345_',
+ }
+
+ beforeAll(async () => {
+ await userFactory(testEnv, bibiBloxberg)
+ await query({ query: login, variables })
+ })
+
+ afterAll(async () => {
+ await cleanDB()
+ })
+
+ it('returns true', async () => {
+ await expect(query({ query: logout })).resolves.toEqual(
+ expect.objectContaining({
+ data: { logout: 'true' },
+ errors: undefined,
+ }),
+ )
+ })
+ })
+ })
})
diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts
index 2f98a2f6f..b24aa1b58 100644
--- a/backend/src/graphql/resolver/UserResolver.ts
+++ b/backend/src/graphql/resolver/UserResolver.ts
@@ -3,30 +3,26 @@
import fs from 'fs'
import { Resolver, Query, Args, Arg, Authorized, Ctx, UseMiddleware, Mutation } from 'type-graphql'
-import { getConnection, getCustomRepository, getRepository, QueryRunner } from 'typeorm'
-import CONFIG from '../../config'
-import { User } from '../model/User'
+import { getConnection, getCustomRepository, QueryRunner } from '@dbTools/typeorm'
+import CONFIG from '@/config'
+import { User } from '@model/User'
import { User as DbUser } from '@entity/User'
-import { encode } from '../../auth/JWT'
-import CheckUsernameArgs from '../arg/CheckUsernameArgs'
-import CreateUserArgs from '../arg/CreateUserArgs'
-import UnsecureLoginArgs from '../arg/UnsecureLoginArgs'
-import UpdateUserInfosArgs from '../arg/UpdateUserInfosArgs'
-import { klicktippNewsletterStateMiddleware } from '../../middleware/klicktippMiddleware'
-import { UserSettingRepository } from '../../typeorm/repository/UserSettingRepository'
-import { LoginUserRepository } from '../../typeorm/repository/LoginUser'
-import { Setting } from '../enum/Setting'
-import { UserRepository } from '../../typeorm/repository/User'
-import { LoginUser } from '@entity/LoginUser'
-import { LoginUserBackup } from '@entity/LoginUserBackup'
+import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
+import { encode } from '@/auth/JWT'
+import CreateUserArgs from '@arg/CreateUserArgs'
+import UnsecureLoginArgs from '@arg/UnsecureLoginArgs'
+import UpdateUserInfosArgs from '@arg/UpdateUserInfosArgs'
+import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware'
+import { UserSettingRepository } from '@repository/UserSettingRepository'
+import { Setting } from '@enum/Setting'
import { LoginEmailOptIn } from '@entity/LoginEmailOptIn'
-import { sendEMail } from '../../util/sendEMail'
-import { LoginElopageBuysRepository } from '../../typeorm/repository/LoginElopageBuys'
-import { signIn } from '../../apis/KlicktippController'
-import { RIGHTS } from '../../auth/RIGHTS'
-import { ServerUserRepository } from '../../typeorm/repository/ServerUser'
-import { ROLE_ADMIN } from '../../auth/ROLES'
-import { randomBytes } from 'crypto'
+import { sendResetPasswordEmail } from '@/mailer/sendResetPasswordEmail'
+import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail'
+import { klicktippSignIn } from '@/apis/KlicktippController'
+import { RIGHTS } from '@/auth/RIGHTS'
+import { ROLE_ADMIN } from '@/auth/ROLES'
+import { hasElopageBuys } from '@/util/hasElopageBuys'
+import { ServerUser } from '@entity/ServerUser'
const EMAIL_OPT_IN_RESET_PASSWORD = 2
const EMAIL_OPT_IN_REGISTER = 1
@@ -48,7 +44,10 @@ const isLanguage = (language: string): boolean => {
}
const PHRASE_WORD_COUNT = 24
-const WORDS = fs.readFileSync('src/config/mnemonic.english.txt').toString().split('\n')
+const WORDS = fs
+ .readFileSync('src/config/mnemonic.uncompressed_buffer13116.txt')
+ .toString()
+ .split(',')
const PassphraseGenerate = (): string[] => {
const result = []
for (let i = 0; i < PHRASE_WORD_COUNT; i++) {
@@ -153,21 +152,16 @@ const createEmailOptIn = async (
loginUserId: number,
queryRunner: QueryRunner,
): Promise => {
- const loginEmailOptInRepository = await getRepository(LoginEmailOptIn)
- let emailOptIn = await loginEmailOptInRepository.findOne({
+ let emailOptIn = await LoginEmailOptIn.findOne({
userId: loginUserId,
emailOptInTypeId: EMAIL_OPT_IN_REGISTER,
})
if (emailOptIn) {
- const timeElapsed = Date.now() - new Date(emailOptIn.updatedAt).getTime()
- if (timeElapsed <= parseInt(CONFIG.RESEND_TIME.toString()) * 60 * 1000) {
- throw new Error(
- 'email already sent less than ' + parseInt(CONFIG.RESEND_TIME.toString()) + ' minutes ago',
- )
- } else {
- emailOptIn.updatedAt = new Date()
- emailOptIn.resendCount++
+ if (isOptInCodeValid(emailOptIn)) {
+ throw new Error(`email already sent less than $(CONFIG.EMAIL_CODE_VALID_TIME} minutes ago`)
}
+ emailOptIn.updatedAt = new Date()
+ emailOptIn.resendCount++
} else {
emailOptIn = new LoginEmailOptIn()
emailOptIn.verificationCode = random(64)
@@ -182,31 +176,26 @@ const createEmailOptIn = async (
return emailOptIn
}
-const getOptInCode = async (loginUser: LoginUser): Promise => {
- const loginEmailOptInRepository = await getRepository(LoginEmailOptIn)
- let optInCode = await loginEmailOptInRepository.findOne({
- userId: loginUser.id,
+const getOptInCode = async (loginUserId: number): Promise => {
+ let optInCode = await LoginEmailOptIn.findOne({
+ userId: loginUserId,
emailOptInTypeId: EMAIL_OPT_IN_RESET_PASSWORD,
})
- // Check for 10 minute delay
+ // Check for `CONFIG.EMAIL_CODE_VALID_TIME` minute delay
if (optInCode) {
- const timeElapsed = Date.now() - new Date(optInCode.updatedAt).getTime()
- if (timeElapsed <= parseInt(CONFIG.RESEND_TIME.toString()) * 60 * 1000) {
- throw new Error(
- 'email already sent less than ' + parseInt(CONFIG.RESEND_TIME.toString()) + ' minutes ago',
- )
- } else {
- optInCode.updatedAt = new Date()
- optInCode.resendCount++
+ if (isOptInCodeValid(optInCode)) {
+ throw new Error(`email already sent less than $(CONFIG.EMAIL_CODE_VALID_TIME} minutes ago`)
}
+ optInCode.updatedAt = new Date()
+ optInCode.resendCount++
} else {
optInCode = new LoginEmailOptIn()
optInCode.verificationCode = random(64)
- optInCode.userId = loginUser.id
+ optInCode.userId = loginUserId
optInCode.emailOptInTypeId = EMAIL_OPT_IN_RESET_PASSWORD
}
- await loginEmailOptInRepository.save(optInCode)
+ await LoginEmailOptIn.save(optInCode)
return optInCode
}
@@ -217,20 +206,9 @@ export class UserResolver {
@UseMiddleware(klicktippNewsletterStateMiddleware)
async verifyLogin(@Ctx() context: any): Promise {
// TODO refactor and do not have duplicate code with login(see below)
- const userRepository = getCustomRepository(UserRepository)
- const userEntity = await userRepository.findByPubkeyHex(context.pubKey)
- const loginUserRepository = getCustomRepository(LoginUserRepository)
- const loginUser = await loginUserRepository.findByEmail(userEntity.email)
- const user = new User()
- user.id = userEntity.id
- user.email = userEntity.email
- user.firstName = userEntity.firstName
- user.lastName = userEntity.lastName
- user.username = userEntity.username
- user.description = loginUser.description
- user.pubkey = userEntity.pubkey.toString('hex')
- user.language = loginUser.language
-
+ const userEntity = context.user
+ const user = new User(userEntity)
+ // user.pubkey = userEntity.pubKey.toString('hex')
// Elopage Status & Stored PublisherId
user.hasElopage = await this.hasElopage(context)
@@ -255,89 +233,60 @@ export class UserResolver {
@Ctx() context: any,
): Promise {
email = email.trim().toLowerCase()
- const loginUserRepository = getCustomRepository(LoginUserRepository)
- const loginUser = await loginUserRepository.findByEmail(email).catch(() => {
+ const dbUser = await DbUser.findOneOrFail({ email }, { withDeleted: true }).catch(() => {
throw new Error('No user with this credentials')
})
- if (!loginUser.emailChecked) {
+ if (dbUser.deletedAt) {
+ throw new Error('This user was permanently deleted. Contact support for questions.')
+ }
+ if (!dbUser.emailChecked) {
throw new Error('User email not validated')
}
- if (loginUser.password === BigInt(0)) {
+ if (dbUser.password === BigInt(0)) {
// TODO we want to catch this on the frontend and ask the user to check his emails or resend code
throw new Error('User has no password set yet')
}
- if (!loginUser.pubKey || !loginUser.privKey) {
+ if (!dbUser.pubKey || !dbUser.privKey) {
// TODO we want to catch this on the frontend and ask the user to check his emails or resend code
throw new Error('User has no private or publicKey')
}
const passwordHash = SecretKeyCryptographyCreateKey(email, password) // return short and long hash
- const loginUserPassword = BigInt(loginUser.password.toString())
+ const loginUserPassword = BigInt(dbUser.password.toString())
if (loginUserPassword !== passwordHash[0].readBigUInt64LE()) {
throw new Error('No user with this credentials')
}
- // TODO: If user has no pubKey Create it again and update user.
- const userRepository = getCustomRepository(UserRepository)
- let userEntity: void | DbUser
- const loginUserPubKey = loginUser.pubKey
- const loginUserPubKeyString = loginUserPubKey.toString('hex')
- userEntity = await userRepository.findByPubkeyHex(loginUserPubKeyString).catch(() => {
- // User not stored in state_users
- // TODO: Check with production data - email is unique which can cause problems
- userEntity = new DbUser()
- userEntity.firstName = loginUser.firstName
- userEntity.lastName = loginUser.lastName
- userEntity.username = loginUser.username
- userEntity.email = loginUser.email
- userEntity.pubkey = loginUser.pubKey
-
- userRepository.save(userEntity).catch(() => {
- throw new Error('error by save userEntity')
- })
- })
- if (!userEntity) {
- throw new Error('error with cannot happen')
- }
-
- const user = new User()
- user.id = userEntity.id
- user.email = email
- user.firstName = loginUser.firstName
- user.lastName = loginUser.lastName
- user.username = loginUser.username
- user.description = loginUser.description
- user.pubkey = loginUserPubKeyString
- user.language = loginUser.language
+ const user = new User(dbUser)
+ // user.email = email
+ // user.pubkey = dbUser.pubKey.toString('hex')
+ user.language = dbUser.language
// Elopage Status & Stored PublisherId
- user.hasElopage = await this.hasElopage({ pubKey: loginUserPubKeyString })
+ user.hasElopage = await this.hasElopage({ pubKey: dbUser.pubKey.toString('hex') })
if (!user.hasElopage && publisherId) {
user.publisherId = publisherId
// TODO: Check if we can use updateUserInfos
// await this.updateUserInfos({ publisherId }, { pubKey: loginUser.pubKey })
- const loginUserRepository = getCustomRepository(LoginUserRepository)
- const loginUser = await loginUserRepository.findOneOrFail({ email: userEntity.email })
- loginUser.publisherId = publisherId
- loginUserRepository.save(loginUser)
+ dbUser.publisherId = publisherId
+ DbUser.save(dbUser)
}
// coinAnimation
const userSettingRepository = getCustomRepository(UserSettingRepository)
const coinanimation = await userSettingRepository
- .readBoolean(userEntity.id, Setting.COIN_ANIMATION)
+ .readBoolean(dbUser.id, Setting.COIN_ANIMATION)
.catch((error) => {
throw new Error(error)
})
user.coinanimation = coinanimation
// context.role is not set to the actual role yet on login
- const serverUserRepository = await getCustomRepository(ServerUserRepository)
- const countServerUsers = await serverUserRepository.count({ email: user.email })
+ const countServerUsers = await ServerUser.count({ email: user.email })
user.isAdmin = countServerUsers > 0
context.setHeaders.push({
key: 'token',
- value: encode(loginUser.pubKey),
+ value: encode(dbUser.pubKey),
})
return user
@@ -355,10 +304,11 @@ export class UserResolver {
}
@Authorized([RIGHTS.CREATE_USER])
- @Mutation(() => String)
+ @Mutation(() => User)
async createUser(
- @Args() { email, firstName, lastName, language, publisherId }: CreateUserArgs,
- ): Promise {
+ @Args()
+ { email, firstName, lastName, language, publisherId, redeemCode = null }: CreateUserArgs,
+ ): Promise {
// TODO: wrong default value (should be null), how does graphql work here? Is it an required field?
// default int publisher_id = 0;
@@ -367,18 +317,11 @@ export class UserResolver {
language = DEFAULT_LANGUAGE
}
- // Validate username
- // TODO: never true
- const username = ''
- if (username.length > 3 && !this.checkUsername({ username })) {
- throw new Error('Username already in use')
- }
-
// Validate email unique
- // TODO: i can register an email in upper/lower case twice
- const userRepository = getCustomRepository(UserRepository)
- const usersFound = await userRepository.count({ email })
- if (usersFound !== 0) {
+ email = email.trim().toLowerCase()
+ // TODO we cannot use repository.count(), since it does not allow to specify if you want to include the soft deletes
+ const userFound = await DbUser.findOne({ email }, { withDeleted: true })
+ if (userFound) {
// TODO: this is unsecure, but the current implementation of the login server. This way it can be queried if the user with given EMail is existent.
throw new Error(`User already exists.`)
}
@@ -389,18 +332,24 @@ export class UserResolver {
// const encryptedPrivkey = SecretKeyCryptographyEncrypt(keyPair[1], passwordHash[1])
const emailHash = getEmailHash(email)
- // Table: login_users
- const loginUser = new LoginUser()
- loginUser.email = email
- loginUser.firstName = firstName
- loginUser.lastName = lastName
- loginUser.username = username
- loginUser.description = ''
+ const dbUser = new DbUser()
+ dbUser.email = email
+ dbUser.firstName = firstName
+ dbUser.lastName = lastName
+ dbUser.emailHash = emailHash
+ dbUser.language = language
+ dbUser.publisherId = publisherId
+ dbUser.passphrase = passphrase.join(' ')
+ if (redeemCode) {
+ const transactionLink = await dbTransactionLink.findOne({ code: redeemCode })
+ if (transactionLink) {
+ dbUser.referrerId = transactionLink.userId
+ }
+ }
+ // TODO this field has no null allowed unlike the loginServer table
+ // dbUser.pubKey = Buffer.from(randomBytes(32)) // Buffer.alloc(32, 0) default to 0000...
+ // dbUser.pubkey = keyPair[0]
// loginUser.password = passwordHash[0].readBigUInt64LE() // using the shorthash
- loginUser.emailHash = emailHash
- loginUser.language = language
- loginUser.groupId = 1
- loginUser.publisherId = publisherId
// loginUser.pubKey = keyPair[0]
// loginUser.privKey = encryptedPrivkey
@@ -408,60 +357,37 @@ export class UserResolver {
await queryRunner.connect()
await queryRunner.startTransaction('READ UNCOMMITTED')
try {
- const { id: loginUserId } = await queryRunner.manager.save(loginUser).catch((error) => {
+ await queryRunner.manager.save(dbUser).catch((error) => {
// eslint-disable-next-line no-console
- console.log('insert LoginUser failed', error)
- throw new Error('insert user failed')
- })
-
- // Table: login_user_backups
- const loginUserBackup = new LoginUserBackup()
- loginUserBackup.userId = loginUserId
- loginUserBackup.passphrase = passphrase.join(' ') + ' ' // login server saves trailing space
- loginUserBackup.mnemonicType = 2 // ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER;
-
- await queryRunner.manager.save(loginUserBackup).catch((error) => {
- // eslint-disable-next-line no-console
- console.log('insert LoginUserBackup failed', error)
- throw new Error('insert user backup failed')
- })
-
- // Table: state_users
- const dbUser = new DbUser()
- dbUser.email = email
- dbUser.firstName = firstName
- dbUser.lastName = lastName
- dbUser.username = username
- // TODO this field has no null allowed unlike the loginServer table
- dbUser.pubkey = Buffer.from(randomBytes(32)) // Buffer.alloc(32, 0) default to 0000...
- // dbUser.pubkey = keyPair[0]
-
- await queryRunner.manager.save(dbUser).catch((er) => {
- // eslint-disable-next-line no-console
- console.log('Error while saving dbUser', er)
+ console.log('Error while saving dbUser', error)
throw new Error('error saving user')
})
// Store EmailOptIn in DB
// TODO: this has duplicate code with sendResetPasswordEmail
- const emailOptIn = await createEmailOptIn(loginUserId, queryRunner)
+ const emailOptIn = await createEmailOptIn(dbUser.id, queryRunner)
const activationLink = CONFIG.EMAIL_LINK_VERIFICATION.replace(
- /\$1/g,
+ /{optin}/g,
emailOptIn.verificationCode.toString(),
- )
- const emailSent = await this.sendAccountActivationEmail(
- activationLink,
+ ).replace(/{code}/g, redeemCode ? '/' + redeemCode : '')
+
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const emailSent = await sendAccountActivationEmail({
+ link: activationLink,
firstName,
lastName,
email,
- )
+ })
+ /* uncomment this, when you need the activation link on the console
// In case EMails are disabled log the activation link for the user
if (!emailSent) {
// eslint-disable-next-line no-console
console.log(`Account confirmation link: ${activationLink}`)
}
+ */
+
await queryRunner.commitTransaction()
} catch (e) {
await queryRunner.rollbackTransaction()
@@ -469,61 +395,43 @@ export class UserResolver {
} finally {
await queryRunner.release()
}
- return 'success'
- }
-
- private sendAccountActivationEmail(
- activationLink: string,
- firstName: string,
- lastName: string,
- email: string,
- ): Promise {
- return sendEMail({
- from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`,
- to: `${firstName} ${lastName} <${email}>`,
- subject: 'Gradido: E-Mail Überprüfung',
- text: `Hallo ${firstName} ${lastName},
-
- Deine EMail wurde soeben bei Gradido registriert.
-
- Klicke bitte auf diesen Link, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren:
- ${activationLink}
- oder kopiere den obigen Link in dein Browserfenster.
-
- Mit freundlichen Grüßen,
- dein Gradido-Team`,
- })
+ return new User(dbUser)
}
+ // THis is used by the admin only - should we move it to the admin resolver?
+ @Authorized([RIGHTS.SEND_ACTIVATION_EMAIL])
@Mutation(() => Boolean)
async sendActivationEmail(@Arg('email') email: string): Promise {
- const loginUserRepository = getCustomRepository(LoginUserRepository)
- const loginUser = await loginUserRepository.findOneOrFail({ email: email })
+ email = email.trim().toLowerCase()
+ const user = await DbUser.findOneOrFail({ email: email })
const queryRunner = getConnection().createQueryRunner()
await queryRunner.connect()
await queryRunner.startTransaction('READ UNCOMMITTED')
try {
- const emailOptIn = await createEmailOptIn(loginUser.id, queryRunner)
+ const emailOptIn = await createEmailOptIn(user.id, queryRunner)
const activationLink = CONFIG.EMAIL_LINK_VERIFICATION.replace(
- /\$1/g,
+ /{optin}/g,
emailOptIn.verificationCode.toString(),
)
- const emailSent = await this.sendAccountActivationEmail(
- activationLink,
- loginUser.firstName,
- loginUser.lastName,
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const emailSent = await sendAccountActivationEmail({
+ link: activationLink,
+ firstName: user.firstName,
+ lastName: user.lastName,
email,
- )
+ })
+ /* uncomment this, when you need the activation link on the console
// In case EMails are disabled log the activation link for the user
if (!emailSent) {
// eslint-disable-next-line no-console
console.log(`Account confirmation link: ${activationLink}`)
}
+ */
await queryRunner.commitTransaction()
} catch (e) {
await queryRunner.rollbackTransaction()
@@ -538,36 +446,31 @@ export class UserResolver {
@Query(() => Boolean)
async sendResetPasswordEmail(@Arg('email') email: string): Promise {
// TODO: this has duplicate code with createUser
+ email = email.trim().toLowerCase()
+ const user = await DbUser.findOneOrFail({ email })
- const loginUserRepository = await getCustomRepository(LoginUserRepository)
- const loginUser = await loginUserRepository.findOneOrFail({ email })
-
- const optInCode = await getOptInCode(loginUser)
+ const optInCode = await getOptInCode(user.id)
const link = CONFIG.EMAIL_LINK_SETPASSWORD.replace(
- /\$1/g,
+ /{optin}/g,
optInCode.verificationCode.toString(),
)
- const emailSent = await sendEMail({
- from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`,
- to: `${loginUser.firstName} ${loginUser.lastName} <${email}>`,
- subject: 'Gradido: Reset Password',
- text: `Hallo ${loginUser.firstName} ${loginUser.lastName},
-
- Du oder jemand anderes hat für dieses Konto ein Zurücksetzen des Passworts angefordert.
- Wenn du es warst, klicke bitte auf den Link: ${link}
- oder kopiere den obigen Link in Dein Browserfenster.
-
- Mit freundlichen Grüßen,
- dein Gradido-Team`,
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const emailSent = await sendResetPasswordEmail({
+ link,
+ firstName: user.firstName,
+ lastName: user.lastName,
+ email,
})
+ /* uncomment this, when you need the activation link on the console
// In case EMails are disabled log the activation link for the user
if (!emailSent) {
// eslint-disable-next-line no-console
console.log(`Reset password link: ${link}`)
}
+ */
return true
}
@@ -586,70 +489,52 @@ export class UserResolver {
}
// Load code
- const loginEmailOptInRepository = await getRepository(LoginEmailOptIn)
- const optInCode = await loginEmailOptInRepository
- .findOneOrFail({ verificationCode: code })
- .catch(() => {
- throw new Error('Could not login with emailVerificationCode')
- })
-
- // Code is only valid for 10minutes
- const timeElapsed = Date.now() - new Date(optInCode.updatedAt).getTime()
- if (timeElapsed > 10 * 60 * 1000) {
- throw new Error('Code is older than 10 minutes')
- }
-
- // load loginUser
- const loginUserRepository = await getCustomRepository(LoginUserRepository)
- const loginUser = await loginUserRepository
- .findOneOrFail({ id: optInCode.userId })
- .catch(() => {
- throw new Error('Could not find corresponding Login User')
- })
-
- // load user
- const dbUserRepository = await getCustomRepository(UserRepository)
- const dbUser = await dbUserRepository.findOneOrFail({ email: loginUser.email }).catch(() => {
- throw new Error('Could not find corresponding User')
+ const optInCode = await LoginEmailOptIn.findOneOrFail({ verificationCode: code }).catch(() => {
+ throw new Error('Could not login with emailVerificationCode')
})
- const loginUserBackupRepository = await getRepository(LoginUserBackup)
- const loginUserBackup = await loginUserBackupRepository
- .findOneOrFail({ userId: loginUser.id })
- .catch(() => {
- throw new Error('Could not find corresponding BackupUser')
- })
+ // Code is only valid for `CONFIG.EMAIL_CODE_VALID_TIME` minutes
+ if (!isOptInCodeValid(optInCode)) {
+ throw new Error(`email already more than $(CONFIG.EMAIL_CODE_VALID_TIME} minutes ago`)
+ }
- const passphrase = loginUserBackup.passphrase.slice(0, -1).split(' ')
+ // load user
+ const user = await DbUser.findOneOrFail({ id: optInCode.userId }).catch(() => {
+ throw new Error('Could not find corresponding Login User')
+ })
+
+ // Generate Passphrase if needed
+ if (!user.passphrase) {
+ const passphrase = PassphraseGenerate()
+ user.passphrase = passphrase.join(' ')
+ }
+
+ const passphrase = user.passphrase.split(' ')
if (passphrase.length < PHRASE_WORD_COUNT) {
// TODO if this can happen we cannot recover from that
+ // this seem to be good on production data, if we dont
+ // make a coding mistake we do not have a problem here
throw new Error('Could not load a correct passphrase')
}
// Activate EMail
- loginUser.emailChecked = true
+ user.emailChecked = true
// Update Password
- const passwordHash = SecretKeyCryptographyCreateKey(loginUser.email, password) // return short and long hash
+ const passwordHash = SecretKeyCryptographyCreateKey(user.email, password) // return short and long hash
const keyPair = KeyPairEd25519Create(passphrase) // return pub, priv Key
const encryptedPrivkey = SecretKeyCryptographyEncrypt(keyPair[1], passwordHash[1])
- loginUser.password = passwordHash[0].readBigUInt64LE() // using the shorthash
- loginUser.pubKey = keyPair[0]
- loginUser.privKey = encryptedPrivkey
- dbUser.pubkey = keyPair[0]
+ user.password = passwordHash[0].readBigUInt64LE() // using the shorthash
+ user.pubKey = keyPair[0]
+ user.privKey = encryptedPrivkey
const queryRunner = getConnection().createQueryRunner()
await queryRunner.connect()
await queryRunner.startTransaction('READ UNCOMMITTED')
try {
- // Save loginUser
- await queryRunner.manager.save(loginUser).catch((error) => {
- throw new Error('error saving loginUser: ' + error)
- })
-
// Save user
- await queryRunner.manager.save(dbUser).catch((error) => {
+ await queryRunner.manager.save(user).catch((error) => {
throw new Error('error saving user: ' + error)
})
@@ -670,17 +555,30 @@ export class UserResolver {
// TODO do we always signUp the user? How to handle things with old users?
if (optInCode.emailOptInTypeId === EMAIL_OPT_IN_REGISTER) {
try {
- await signIn(loginUser.email, loginUser.language, loginUser.firstName, loginUser.lastName)
+ await klicktippSignIn(user.email, user.language, user.firstName, user.lastName)
} catch {
// TODO is this a problem?
// eslint-disable-next-line no-console
+ /* uncomment this, when you need the activation link on the console
console.log('Could not subscribe to klicktipp')
+ */
}
}
return true
}
+ @Authorized([RIGHTS.QUERY_OPT_IN])
+ @Query(() => Boolean)
+ async queryOptIn(@Arg('optIn') optIn: string): Promise {
+ const optInCode = await LoginEmailOptIn.findOneOrFail({ verificationCode: optIn })
+ // Code is only valid for `CONFIG.EMAIL_CODE_VALID_TIME` minutes
+ if (!isOptInCodeValid(optInCode)) {
+ throw new Error(`email was sent more than $(CONFIG.EMAIL_CODE_VALID_TIME} minutes ago`)
+ }
+ return true
+ }
+
@Authorized([RIGHTS.UPDATE_USER_INFOS])
@Mutation(() => Boolean)
async updateUserInfos(
@@ -688,8 +586,6 @@ export class UserResolver {
{
firstName,
lastName,
- description,
- username,
language,
publisherId,
password,
@@ -698,63 +594,50 @@ export class UserResolver {
}: UpdateUserInfosArgs,
@Ctx() context: any,
): Promise {
- const userRepository = getCustomRepository(UserRepository)
- const userEntity = await userRepository.findByPubkeyHex(context.pubKey)
- const loginUserRepository = getCustomRepository(LoginUserRepository)
- const loginUser = await loginUserRepository.findOneOrFail({ email: userEntity.email })
-
- if (username) {
- throw new Error('change username currently not supported!')
- // TODO: this error was thrown on login_server whenever you tried to change the username
- // to anything except "" which is an exception to the rules below. Those were defined
- // aswell, even tho never used.
- // ^[a-zA-Z][a-zA-Z0-9_-]*$
- // username must start with [a-z] or [A-Z] and than can contain also [0-9], - and _
- // username already used
- // userEntity.username = username
- }
+ const userEntity = context.user
if (firstName) {
- loginUser.firstName = firstName
userEntity.firstName = firstName
}
if (lastName) {
- loginUser.lastName = lastName
userEntity.lastName = lastName
}
- if (description) {
- loginUser.description = description
- }
-
if (language) {
if (!isLanguage(language)) {
throw new Error(`"${language}" isn't a valid language`)
}
- loginUser.language = language
+ userEntity.language = language
}
if (password && passwordNew) {
+ // Validate Password
+ if (!isPassword(passwordNew)) {
+ throw new Error(
+ 'Please enter a valid password with at least 8 characters, upper and lower case letters, at least one number and one special character!',
+ )
+ }
+
// TODO: This had some error cases defined - like missing private key. This is no longer checked.
- const oldPasswordHash = SecretKeyCryptographyCreateKey(loginUser.email, password)
- if (loginUser.password !== oldPasswordHash[0].readBigUInt64LE()) {
+ const oldPasswordHash = SecretKeyCryptographyCreateKey(userEntity.email, password)
+ if (BigInt(userEntity.password.toString()) !== oldPasswordHash[0].readBigUInt64LE()) {
throw new Error(`Old password is invalid`)
}
- const privKey = SecretKeyCryptographyDecrypt(loginUser.privKey, oldPasswordHash[1])
+ const privKey = SecretKeyCryptographyDecrypt(userEntity.privKey, oldPasswordHash[1])
- const newPasswordHash = SecretKeyCryptographyCreateKey(loginUser.email, passwordNew) // return short and long hash
+ const newPasswordHash = SecretKeyCryptographyCreateKey(userEntity.email, passwordNew) // return short and long hash
const encryptedPrivkey = SecretKeyCryptographyEncrypt(privKey, newPasswordHash[1])
// Save new password hash and newly encrypted private key
- loginUser.password = newPasswordHash[0].readBigInt64LE()
- loginUser.privKey = encryptedPrivkey
+ userEntity.password = newPasswordHash[0].readBigUInt64LE()
+ userEntity.privKey = encryptedPrivkey
}
// Save publisherId only if Elopage is not yet registered
if (publisherId && !(await this.hasElopage(context))) {
- loginUser.publisherId = publisherId
+ userEntity.publisherId = publisherId
}
const queryRunner = getConnection().createQueryRunner()
@@ -771,10 +654,6 @@ export class UserResolver {
})
}
- await queryRunner.manager.save(loginUser).catch((error) => {
- throw new Error('error saving loginUser: ' + error)
- })
-
await queryRunner.manager.save(userEntity).catch((error) => {
throw new Error('error saving user: ' + error)
})
@@ -790,41 +669,18 @@ export class UserResolver {
return true
}
- @Authorized([RIGHTS.CHECK_USERNAME])
- @Query(() => Boolean)
- async checkUsername(@Args() { username }: CheckUsernameArgs): Promise {
- // Username empty?
- if (username === '') {
- throw new Error('Username must be set.')
- }
-
- // Do we fullfil the minimum character length?
- const MIN_CHARACTERS_USERNAME = 2
- if (username.length < MIN_CHARACTERS_USERNAME) {
- throw new Error(`Username must be at minimum ${MIN_CHARACTERS_USERNAME} characters long.`)
- }
-
- const usersFound = await LoginUser.count({ username })
-
- // Username already present?
- if (usersFound !== 0) {
- throw new Error(`Username "${username}" already taken.`)
- }
-
- return true
- }
-
@Authorized([RIGHTS.HAS_ELOPAGE])
@Query(() => Boolean)
async hasElopage(@Ctx() context: any): Promise {
- const userRepository = getCustomRepository(UserRepository)
- const userEntity = await userRepository.findByPubkeyHex(context.pubKey).catch()
+ const userEntity = context.user
if (!userEntity) {
return false
}
- const loginElopageBuysRepository = getCustomRepository(LoginElopageBuysRepository)
- const elopageBuyCount = await loginElopageBuysRepository.count({ payerEmail: userEntity.email })
- return elopageBuyCount > 0
+ return hasElopageBuys(userEntity.email)
}
}
+function isOptInCodeValid(optInCode: LoginEmailOptIn) {
+ const timeElapsed = Date.now() - new Date(optInCode.updatedAt).getTime()
+ return timeElapsed <= CONFIG.EMAIL_CODE_VALID_TIME * 60 * 1000
+}
diff --git a/backend/src/graphql/scalar/Decimal.ts b/backend/src/graphql/scalar/Decimal.ts
new file mode 100644
index 000000000..da5a99e0c
--- /dev/null
+++ b/backend/src/graphql/scalar/Decimal.ts
@@ -0,0 +1,23 @@
+import { GraphQLScalarType, Kind } from 'graphql'
+import Decimal from 'decimal.js-light'
+
+export default new GraphQLScalarType({
+ name: 'Decimal',
+ description: 'The `Decimal` scalar type to represent currency values',
+
+ serialize(value: Decimal) {
+ return value.toString()
+ },
+
+ parseValue(value) {
+ return new Decimal(value)
+ },
+
+ parseLiteral(ast) {
+ if (ast.kind !== Kind.STRING) {
+ throw new TypeError(`${String(ast)} is not a valid decimal value.`)
+ }
+
+ return new Decimal(ast.value)
+ },
+})
diff --git a/backend/src/graphql/schema.ts b/backend/src/graphql/schema.ts
index 02caf2784..f14f45efa 100644
--- a/backend/src/graphql/schema.ts
+++ b/backend/src/graphql/schema.ts
@@ -3,11 +3,14 @@ import { buildSchema } from 'type-graphql'
import path from 'path'
import isAuthorized from './directive/isAuthorized'
+import DecimalScalar from './scalar/Decimal'
+import Decimal from 'decimal.js-light'
const schema = async (): Promise => {
return buildSchema({
resolvers: [path.join(__dirname, 'resolver', `!(*.test).{js,ts}`)],
authChecker: isAuthorized,
+ scalarsMap: [{ type: Decimal, scalar: DecimalScalar }],
})
}
diff --git a/backend/src/index.ts b/backend/src/index.ts
index a2e533e34..4c08b422d 100644
--- a/backend/src/index.ts
+++ b/backend/src/index.ts
@@ -13,7 +13,7 @@ async function main() {
console.log(`Server is running at http://localhost:${CONFIG.PORT}`)
if (CONFIG.GRAPHIQL) {
// eslint-disable-next-line no-console
- console.log(`GraphIQL available at http://localhost:${CONFIG.PORT}/graphql`)
+ console.log(`GraphIQL available at http://localhost:${CONFIG.PORT}`)
}
})
}
diff --git a/backend/src/mailer/sendAccountActivationEmail.test.ts b/backend/src/mailer/sendAccountActivationEmail.test.ts
new file mode 100644
index 000000000..c53fc0994
--- /dev/null
+++ b/backend/src/mailer/sendAccountActivationEmail.test.ts
@@ -0,0 +1,29 @@
+import { sendAccountActivationEmail } from './sendAccountActivationEmail'
+import { sendEMail } from './sendEMail'
+
+jest.mock('./sendEMail', () => {
+ return {
+ __esModule: true,
+ sendEMail: jest.fn(),
+ }
+})
+
+describe('sendAccountActivationEmail', () => {
+ beforeEach(async () => {
+ await sendAccountActivationEmail({
+ link: 'activationLink',
+ firstName: 'Peter',
+ lastName: 'Lustig',
+ email: 'peter@lustig.de',
+ })
+ })
+
+ it('calls sendEMail', () => {
+ expect(sendEMail).toBeCalledWith({
+ to: `Peter Lustig `,
+ subject: 'Gradido: E-Mail Überprüfung',
+ text:
+ expect.stringContaining('Hallo Peter Lustig') && expect.stringContaining('activationLink'),
+ })
+ })
+})
diff --git a/backend/src/mailer/sendAccountActivationEmail.ts b/backend/src/mailer/sendAccountActivationEmail.ts
new file mode 100644
index 000000000..05c3104cb
--- /dev/null
+++ b/backend/src/mailer/sendAccountActivationEmail.ts
@@ -0,0 +1,15 @@
+import { sendEMail } from './sendEMail'
+import { accountActivation } from './text/accountActivation'
+
+export const sendAccountActivationEmail = (data: {
+ link: string
+ firstName: string
+ lastName: string
+ email: string
+}): Promise => {
+ return sendEMail({
+ to: `${data.firstName} ${data.lastName} <${data.email}>`,
+ subject: accountActivation.de.subject,
+ text: accountActivation.de.text(data),
+ })
+}
diff --git a/backend/src/mailer/sendEMail.test.ts b/backend/src/mailer/sendEMail.test.ts
new file mode 100644
index 000000000..b7cc06a60
--- /dev/null
+++ b/backend/src/mailer/sendEMail.test.ts
@@ -0,0 +1,92 @@
+import { sendEMail } from './sendEMail'
+import { createTransport } from 'nodemailer'
+import CONFIG from '@/config'
+
+CONFIG.EMAIL = false
+CONFIG.EMAIL_SMTP_URL = 'EMAIL_SMTP_URL'
+CONFIG.EMAIL_SMTP_PORT = '1234'
+CONFIG.EMAIL_USERNAME = 'user'
+CONFIG.EMAIL_PASSWORD = 'pwd'
+
+jest.mock('nodemailer', () => {
+ return {
+ __esModule: true,
+ createTransport: jest.fn(() => {
+ return {
+ sendMail: jest.fn(() => {
+ return {
+ messageId: 'message',
+ }
+ }),
+ }
+ }),
+ }
+})
+
+describe('sendEMail', () => {
+ let result: boolean
+ describe('config email is false', () => {
+ // eslint-disable-next-line no-console
+ const consoleLog = console.log
+ const consoleLogMock = jest.fn()
+ // eslint-disable-next-line no-console
+ console.log = consoleLogMock
+ beforeEach(async () => {
+ result = await sendEMail({
+ to: 'receiver@mail.org',
+ subject: 'Subject',
+ text: 'Text text text',
+ })
+ })
+
+ afterAll(() => {
+ // eslint-disable-next-line no-console
+ console.log = consoleLog
+ })
+
+ it('logs warining to console', () => {
+ expect(consoleLogMock).toBeCalledWith('Emails are disabled via config')
+ })
+
+ it('returns false', () => {
+ expect(result).toBeFalsy()
+ })
+ })
+
+ describe('config email is true', () => {
+ beforeEach(async () => {
+ CONFIG.EMAIL = true
+ result = await sendEMail({
+ to: 'receiver@mail.org',
+ subject: 'Subject',
+ text: 'Text text text',
+ })
+ })
+
+ it('calls the transporter', () => {
+ expect(createTransport).toBeCalledWith({
+ host: 'EMAIL_SMTP_URL',
+ port: 1234,
+ secure: false,
+ requireTLS: true,
+ auth: {
+ user: 'user',
+ pass: 'pwd',
+ },
+ })
+ })
+
+ it('calls sendMail of transporter', () => {
+ expect((createTransport as jest.Mock).mock.results[0].value.sendMail).toBeCalledWith({
+ from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`,
+ to: 'receiver@mail.org',
+ subject: 'Subject',
+ text: 'Text text text',
+ })
+ })
+
+ it('returns true', () => {
+ expect(result).toBeTruthy()
+ })
+ })
+})
diff --git a/backend/src/util/sendEMail.ts b/backend/src/mailer/sendEMail.ts
similarity index 81%
rename from backend/src/util/sendEMail.ts
rename to backend/src/mailer/sendEMail.ts
index 4c239980d..13c28996b 100644
--- a/backend/src/util/sendEMail.ts
+++ b/backend/src/mailer/sendEMail.ts
@@ -1,9 +1,8 @@
import { createTransport } from 'nodemailer'
-import CONFIG from '../config'
+import CONFIG from '@/config'
export const sendEMail = async (emailDef: {
- from: string
to: string
subject: string
text: string
@@ -23,7 +22,10 @@ export const sendEMail = async (emailDef: {
pass: CONFIG.EMAIL_PASSWORD,
},
})
- const info = await transporter.sendMail(emailDef)
+ const info = await transporter.sendMail({
+ ...emailDef,
+ from: `Gradido (nicht antworten) <${CONFIG.EMAIL_SENDER}>`,
+ })
if (!info.messageId) {
throw new Error('error sending notification email, but transaction succeed')
}
diff --git a/backend/src/mailer/sendResetPasswordEmail.test.ts b/backend/src/mailer/sendResetPasswordEmail.test.ts
new file mode 100644
index 000000000..4bc8ceba0
--- /dev/null
+++ b/backend/src/mailer/sendResetPasswordEmail.test.ts
@@ -0,0 +1,28 @@
+import { sendResetPasswordEmail } from './sendResetPasswordEmail'
+import { sendEMail } from './sendEMail'
+
+jest.mock('./sendEMail', () => {
+ return {
+ __esModule: true,
+ sendEMail: jest.fn(),
+ }
+})
+
+describe('sendResetPasswordEmail', () => {
+ beforeEach(async () => {
+ await sendResetPasswordEmail({
+ link: 'resetLink',
+ firstName: 'Peter',
+ lastName: 'Lustig',
+ email: 'peter@lustig.de',
+ })
+ })
+
+ it('calls sendEMail', () => {
+ expect(sendEMail).toBeCalledWith({
+ to: `Peter Lustig `,
+ subject: 'Gradido: Passwort zurücksetzen',
+ text: expect.stringContaining('Hallo Peter Lustig') && expect.stringContaining('resetLink'),
+ })
+ })
+})
diff --git a/backend/src/mailer/sendResetPasswordEmail.ts b/backend/src/mailer/sendResetPasswordEmail.ts
new file mode 100644
index 000000000..c9f5b23e9
--- /dev/null
+++ b/backend/src/mailer/sendResetPasswordEmail.ts
@@ -0,0 +1,15 @@
+import { sendEMail } from './sendEMail'
+import { resetPassword } from './text/resetPassword'
+
+export const sendResetPasswordEmail = (data: {
+ link: string
+ firstName: string
+ lastName: string
+ email: string
+}): Promise => {
+ return sendEMail({
+ to: `${data.firstName} ${data.lastName} <${data.email}>`,
+ subject: resetPassword.de.subject,
+ text: resetPassword.de.text(data),
+ })
+}
diff --git a/backend/src/mailer/sendTransactionReceivedEmail.test.ts b/backend/src/mailer/sendTransactionReceivedEmail.test.ts
new file mode 100644
index 000000000..1ebc9dae3
--- /dev/null
+++ b/backend/src/mailer/sendTransactionReceivedEmail.test.ts
@@ -0,0 +1,38 @@
+import { sendTransactionReceivedEmail } from './sendTransactionReceivedEmail'
+import { sendEMail } from './sendEMail'
+import Decimal from 'decimal.js-light'
+
+jest.mock('./sendEMail', () => {
+ return {
+ __esModule: true,
+ sendEMail: jest.fn(),
+ }
+})
+
+describe('sendTransactionReceivedEmail', () => {
+ beforeEach(async () => {
+ await sendTransactionReceivedEmail({
+ senderFirstName: 'Bibi',
+ senderLastName: 'Bloxberg',
+ recipientFirstName: 'Peter',
+ recipientLastName: 'Lustig',
+ email: 'peter@lustig.de',
+ senderEmail: 'bibi@bloxberg.de',
+ amount: new Decimal(42.0),
+ memo: 'Vielen herzlichen Dank für den neuen Hexenbesen!',
+ })
+ })
+
+ it('calls sendEMail', () => {
+ expect(sendEMail).toBeCalledWith({
+ to: `Peter Lustig `,
+ subject: 'Gradido Überweisung',
+ text:
+ expect.stringContaining('Hallo Peter Lustig') &&
+ expect.stringContaining('42,00 GDD') &&
+ expect.stringContaining('Bibi Bloxberg') &&
+ expect.stringContaining('(bibi@bloxberg.de)') &&
+ expect.stringContaining('Vielen herzlichen Dank für den neuen Hexenbesen!'),
+ })
+ })
+})
diff --git a/backend/src/mailer/sendTransactionReceivedEmail.ts b/backend/src/mailer/sendTransactionReceivedEmail.ts
new file mode 100644
index 000000000..934783449
--- /dev/null
+++ b/backend/src/mailer/sendTransactionReceivedEmail.ts
@@ -0,0 +1,20 @@
+import Decimal from 'decimal.js-light'
+import { sendEMail } from './sendEMail'
+import { transactionReceived } from './text/transactionReceived'
+
+export const sendTransactionReceivedEmail = (data: {
+ senderFirstName: string
+ senderLastName: string
+ recipientFirstName: string
+ recipientLastName: string
+ email: string
+ senderEmail: string
+ amount: Decimal
+ memo: string
+}): Promise => {
+ return sendEMail({
+ to: `${data.recipientFirstName} ${data.recipientLastName} <${data.email}>`,
+ subject: transactionReceived.de.subject,
+ text: transactionReceived.de.text(data),
+ })
+}
diff --git a/backend/src/mailer/text/accountActivation.ts b/backend/src/mailer/text/accountActivation.ts
new file mode 100644
index 000000000..bf5d1a2e9
--- /dev/null
+++ b/backend/src/mailer/text/accountActivation.ts
@@ -0,0 +1,16 @@
+export const accountActivation = {
+ de: {
+ subject: 'Gradido: E-Mail Überprüfung',
+ text: (data: { link: string; firstName: string; lastName: string; email: string }): string =>
+ `Hallo ${data.firstName} ${data.lastName},
+
+Deine E-Mail-Adresse wurde soeben bei Gradido registriert.
+
+Klicke bitte auf diesen Link, um die Registrierung abzuschließen und dein Gradido-Konto zu aktivieren:
+${data.link}
+oder kopiere den obigen Link in dein Browserfenster.
+
+Mit freundlichen Grüßen,
+dein Gradido-Team`,
+ },
+}
diff --git a/backend/src/mailer/text/resetPassword.ts b/backend/src/mailer/text/resetPassword.ts
new file mode 100644
index 000000000..58b13cbcd
--- /dev/null
+++ b/backend/src/mailer/text/resetPassword.ts
@@ -0,0 +1,14 @@
+export const resetPassword = {
+ de: {
+ subject: 'Gradido: Passwort zurücksetzen',
+ text: (data: { link: string; firstName: string; lastName: string; email: string }): string =>
+ `Hallo ${data.firstName} ${data.lastName},
+
+Du oder jemand anderes hat für dieses Konto ein Zurücksetzen des Passworts angefordert.
+Wenn du es warst, klicke bitte auf den Link: ${data.link}
+oder kopiere den obigen Link in Dein Browserfenster.
+
+Mit freundlichen Grüßen,
+dein Gradido-Team`,
+ },
+}
diff --git a/backend/src/mailer/text/transactionReceived.ts b/backend/src/mailer/text/transactionReceived.ts
new file mode 100644
index 000000000..520ee43bf
--- /dev/null
+++ b/backend/src/mailer/text/transactionReceived.ts
@@ -0,0 +1,30 @@
+import Decimal from 'decimal.js-light'
+
+export const transactionReceived = {
+ de: {
+ subject: 'Gradido Überweisung',
+ text: (data: {
+ senderFirstName: string
+ senderLastName: string
+ recipientFirstName: string
+ recipientLastName: string
+ email: string
+ senderEmail: string
+ amount: Decimal
+ memo: string
+ }): string =>
+ `Hallo ${data.recipientFirstName} ${data.recipientLastName}
+
+Du hast soeben ${data.amount.toFixed(2).replace('.', ',')} GDD von ${data.senderFirstName} ${
+ data.senderLastName
+ } (${data.senderEmail}) erhalten.
+${data.senderFirstName} ${data.senderLastName} schreibt:
+
+${data.memo}
+
+Bitte antworte nicht auf diese E-Mail!
+
+Mit freundlichen Grüßen,
+dein Gradido-Team`,
+ },
+}
diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts
index 69a74480d..b3699f29b 100644
--- a/backend/src/middleware/klicktippMiddleware.ts
+++ b/backend/src/middleware/klicktippMiddleware.ts
@@ -1,7 +1,7 @@
import { MiddlewareFn } from 'type-graphql'
-import { /* signIn, */ getKlickTippUser } from '../apis/KlicktippController'
-import { KlickTipp } from '../graphql/model/KlickTipp'
-import CONFIG from '../config/index'
+import { /* klicktippSignIn, */ getKlickTippUser } from '@/apis/KlicktippController'
+import { KlickTipp } from '@model/KlickTipp'
+import CONFIG from '@/config'
// export const klicktippRegistrationMiddleware: MiddlewareFn = async (
// // Only for demo
@@ -12,7 +12,7 @@ import CONFIG from '../config/index'
// // Do Something here before resolver is called
// const result = await next()
// // Do Something here after resolver is completed
-// await signIn(result.email, result.language, result.firstName, result.lastName)
+// await klicktippSignIn(result.email, result.language, result.firstName, result.lastName)
// return result
// }
diff --git a/backend/src/seeds/creation/CreationInterface.ts b/backend/src/seeds/creation/CreationInterface.ts
new file mode 100644
index 000000000..8723f441d
--- /dev/null
+++ b/backend/src/seeds/creation/CreationInterface.ts
@@ -0,0 +1,7 @@
+export interface CreationInterface {
+ email: string
+ amount: number
+ memo: string
+ creationDate: string
+ confirmed?: boolean
+}
diff --git a/backend/src/seeds/creation/index.ts b/backend/src/seeds/creation/index.ts
new file mode 100644
index 000000000..7396a7ec8
--- /dev/null
+++ b/backend/src/seeds/creation/index.ts
@@ -0,0 +1,29 @@
+import { CreationInterface } from './CreationInterface'
+
+const lastMonth = (date: Date): string => {
+ return new Date(date.getFullYear(), date.getMonth() - 1, 1).toISOString()
+}
+
+export const creations: CreationInterface[] = [
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 1000,
+ memo: 'Herzlich Willkommen bei Gradido!',
+ creationDate: lastMonth(new Date()),
+ confirmed: true,
+ },
+ {
+ email: 'bob@baumeister.de',
+ amount: 1000,
+ memo: 'Herzlich Willkommen bei Gradido!',
+ creationDate: lastMonth(new Date()),
+ confirmed: true,
+ },
+ {
+ email: 'raeuber@hotzenplotz.de',
+ amount: 1000,
+ memo: 'Herzlich Willkommen bei Gradido!',
+ creationDate: lastMonth(new Date()),
+ confirmed: true,
+ },
+]
diff --git a/backend/src/seeds/factory/creation.ts b/backend/src/seeds/factory/creation.ts
new file mode 100644
index 000000000..d4d4c8101
--- /dev/null
+++ b/backend/src/seeds/factory/creation.ts
@@ -0,0 +1,38 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
+
+import { createPendingCreation, confirmPendingCreation } from '@/seeds/graphql/mutations'
+import { login } from '@/seeds/graphql/queries'
+import { CreationInterface } from '@/seeds/creation/CreationInterface'
+import { ApolloServerTestClient } from 'apollo-server-testing'
+import { User } from '@entity/User'
+import { AdminPendingCreation } from '@entity/AdminPendingCreation'
+// import CONFIG from '@/config/index'
+
+export const creationFactory = async (
+ client: ApolloServerTestClient,
+ creation: CreationInterface,
+): Promise => {
+ const { mutate, query } = client
+
+ // login as Peter Lustig (admin) and get his user ID
+ const {
+ data: {
+ login: { id },
+ },
+ } = await query({ query: login, variables: { email: 'peter@lustig.de', password: 'Aa12345_' } })
+
+ await mutate({ mutation: createPendingCreation, variables: { ...creation, moderator: id } })
+
+ // get User
+ const user = await User.findOneOrFail({ where: { email: creation.email } })
+
+ if (creation.confirmed) {
+ const pendingCreation = await AdminPendingCreation.findOneOrFail({
+ where: { userId: user.id },
+ order: { created: 'DESC' },
+ })
+
+ await mutate({ mutation: confirmPendingCreation, variables: { id: pendingCreation.id } })
+ }
+}
diff --git a/backend/src/seeds/factory/transactionLink.ts b/backend/src/seeds/factory/transactionLink.ts
new file mode 100644
index 000000000..2f54dc70c
--- /dev/null
+++ b/backend/src/seeds/factory/transactionLink.ts
@@ -0,0 +1,43 @@
+import { ApolloServerTestClient } from 'apollo-server-testing'
+import { createTransactionLink } from '@/seeds/graphql/mutations'
+import { login } from '@/seeds/graphql/queries'
+import { TransactionLinkInterface } from '@/seeds/transactionLink/TransactionLinkInterface'
+import { transactionLinkExpireDate } from '@/graphql/resolver/TransactionLinkResolver'
+import { TransactionLink } from '@entity/TransactionLink'
+
+export const transactionLinkFactory = async (
+ client: ApolloServerTestClient,
+ transactionLink: TransactionLinkInterface,
+): Promise => {
+ const { mutate, query } = client
+
+ // login
+ await query({ query: login, variables: { email: transactionLink.email, password: 'Aa12345_' } })
+
+ const variables = {
+ amount: transactionLink.amount,
+ memo: transactionLink.memo,
+ }
+
+ // get the transaction links's id
+ const {
+ data: {
+ createTransactionLink: { id },
+ },
+ } = await mutate({ mutation: createTransactionLink, variables })
+
+ if (transactionLink.createdAt || transactionLink.deletedAt) {
+ const dbTransactionLink = await TransactionLink.findOneOrFail({ id })
+
+ if (transactionLink.createdAt) {
+ dbTransactionLink.createdAt = transactionLink.createdAt
+ dbTransactionLink.validUntil = transactionLinkExpireDate(transactionLink.createdAt)
+ await dbTransactionLink.save()
+ }
+
+ if (transactionLink.deletedAt) {
+ dbTransactionLink.deletedAt = new Date()
+ await dbTransactionLink.save()
+ }
+ }
+}
diff --git a/backend/src/seeds/factory/user.ts b/backend/src/seeds/factory/user.ts
new file mode 100644
index 000000000..ff4c1d6c9
--- /dev/null
+++ b/backend/src/seeds/factory/user.ts
@@ -0,0 +1,51 @@
+import { createUser, setPassword } from '@/seeds/graphql/mutations'
+import { User } from '@entity/User'
+import { LoginEmailOptIn } from '@entity/LoginEmailOptIn'
+import { ServerUser } from '@entity/ServerUser'
+import { UserInterface } from '@/seeds/users/UserInterface'
+import { ApolloServerTestClient } from 'apollo-server-testing'
+
+export const userFactory = async (
+ client: ApolloServerTestClient,
+ user: UserInterface,
+): Promise => {
+ const { mutate } = client
+
+ const {
+ data: {
+ createUser: { id },
+ },
+ } = await mutate({ mutation: createUser, variables: user })
+
+ if (user.emailChecked) {
+ const optin = await LoginEmailOptIn.findOneOrFail({ userId: id })
+ await mutate({
+ mutation: setPassword,
+ variables: { password: 'Aa12345_', code: optin.verificationCode },
+ })
+ }
+
+ if (user.createdAt || user.deletedAt || user.isAdmin) {
+ // get user from database
+ const dbUser = await User.findOneOrFail({ id })
+
+ if (user.createdAt || user.deletedAt) {
+ if (user.createdAt) dbUser.createdAt = user.createdAt
+ if (user.deletedAt) dbUser.deletedAt = user.deletedAt
+ await dbUser.save()
+ }
+
+ if (user.isAdmin) {
+ const admin = new ServerUser()
+ admin.username = dbUser.firstName
+ admin.password = 'please_refactor'
+ admin.email = dbUser.email
+ admin.role = 'admin'
+ admin.activated = 1
+ admin.lastLogin = new Date()
+ admin.created = dbUser.createdAt
+ admin.modified = dbUser.createdAt
+ await admin.save()
+ }
+ }
+}
diff --git a/backend/src/seeds/graphql/enums.ts b/backend/src/seeds/graphql/enums.ts
new file mode 100644
index 000000000..6e40dd19c
--- /dev/null
+++ b/backend/src/seeds/graphql/enums.ts
@@ -0,0 +1,9 @@
+export const GdtEntryType = {
+ FORM: 'FORM',
+ CVS: 'CVS',
+ ELOPAGE: 'ELOPAGE',
+ ELOPAGE_PUBLISHER: 'ELOPAGE_PUBLISHER',
+ DIGISTORE: 'DIGISTORE',
+ CVS2: 'CVS2',
+ GLOBAL_MODIFICATOR: 'GLOBAL_MODIFICATOR',
+}
diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts
new file mode 100644
index 000000000..298d56bdb
--- /dev/null
+++ b/backend/src/seeds/graphql/mutations.ts
@@ -0,0 +1,102 @@
+import gql from 'graphql-tag'
+
+export const subscribeNewsletter = gql`
+ mutation ($email: String!, $language: String!) {
+ subscribeNewsletter(email: $email, language: $language)
+ }
+`
+
+export const unsubscribeNewsletter = gql`
+ mutation ($email: String!) {
+ unsubscribeNewsletter(email: $email)
+ }
+`
+
+export const setPassword = gql`
+ mutation ($code: String!, $password: String!) {
+ setPassword(code: $code, password: $password)
+ }
+`
+
+export const updateUserInfos = gql`
+ mutation (
+ $firstName: String
+ $lastName: String
+ $password: String
+ $passwordNew: String
+ $locale: String
+ $coinanimation: Boolean
+ ) {
+ updateUserInfos(
+ firstName: $firstName
+ lastName: $lastName
+ password: $password
+ passwordNew: $passwordNew
+ language: $locale
+ coinanimation: $coinanimation
+ )
+ }
+`
+
+export const createUser = gql`
+ mutation (
+ $firstName: String!
+ $lastName: String!
+ $email: String!
+ $language: String!
+ $publisherId: Int
+ $redeemCode: String
+ ) {
+ createUser(
+ email: $email
+ firstName: $firstName
+ lastName: $lastName
+ language: $language
+ publisherId: $publisherId
+ redeemCode: $redeemCode
+ ) {
+ id
+ }
+ }
+`
+
+export const sendCoins = gql`
+ mutation ($email: String!, $amount: Decimal!, $memo: String!) {
+ sendCoins(email: $email, amount: $amount, memo: $memo)
+ }
+`
+
+export const createTransactionLink = gql`
+ mutation ($amount: Decimal!, $memo: String!) {
+ createTransactionLink(amount: $amount, memo: $memo) {
+ id
+ code
+ }
+ }
+`
+
+// from admin interface
+
+export const createPendingCreation = gql`
+ mutation (
+ $email: String!
+ $amount: Float!
+ $memo: String!
+ $creationDate: String!
+ $moderator: Int!
+ ) {
+ createPendingCreation(
+ email: $email
+ amount: $amount
+ memo: $memo
+ creationDate: $creationDate
+ moderator: $moderator
+ )
+ }
+`
+
+export const confirmPendingCreation = gql`
+ mutation ($id: Int!) {
+ confirmPendingCreation(id: $id)
+ }
+`
diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts
new file mode 100644
index 000000000..04f849727
--- /dev/null
+++ b/backend/src/seeds/graphql/queries.ts
@@ -0,0 +1,145 @@
+import gql from 'graphql-tag'
+
+export const login = gql`
+ query ($email: String!, $password: String!, $publisherId: Int) {
+ login(email: $email, password: $password, publisherId: $publisherId) {
+ id
+ email
+ firstName
+ lastName
+ language
+ coinanimation
+ klickTipp {
+ newsletterState
+ }
+ hasElopage
+ publisherId
+ isAdmin
+ }
+ }
+`
+
+export const verifyLogin = gql`
+ query {
+ verifyLogin {
+ email
+ firstName
+ lastName
+ language
+ coinanimation
+ klickTipp {
+ newsletterState
+ }
+ hasElopage
+ publisherId
+ isAdmin
+ }
+ }
+`
+
+export const logout = gql`
+ query {
+ logout
+ }
+`
+
+export const transactionsQuery = gql`
+ query (
+ $currentPage: Int = 1
+ $pageSize: Int = 25
+ $order: Order = DESC
+ $onlyCreations: Boolean = false
+ ) {
+ transactionList(
+ currentPage: $currentPage
+ pageSize: $pageSize
+ order: $order
+ onlyCreations: $onlyCreations
+ ) {
+ balanceGDT
+ count
+ balance
+ decayStartBlock
+ transactions {
+ id
+ typeId
+ amount
+ balance
+ balanceDate
+ memo
+ linkedUser {
+ firstName
+ lastName
+ }
+ decay {
+ decay
+ start
+ end
+ duration
+ }
+ }
+ }
+ }
+`
+
+export const sendResetPasswordEmail = gql`
+ query ($email: String!) {
+ sendResetPasswordEmail(email: $email)
+ }
+`
+
+export const listGDTEntriesQuery = gql`
+ query ($currentPage: Int!, $pageSize: Int!) {
+ listGDTEntries(currentPage: $currentPage, pageSize: $pageSize) {
+ count
+ gdtEntries {
+ id
+ amount
+ date
+ comment
+ gdtEntryType
+ factor
+ gdt
+ }
+ gdtSum
+ }
+ }
+`
+
+export const communityInfo = gql`
+ query {
+ getCommunityInfo {
+ name
+ description
+ registerUrl
+ url
+ }
+ }
+`
+
+export const communities = gql`
+ query {
+ communities {
+ id
+ name
+ url
+ description
+ registerUrl
+ }
+ }
+`
+
+export const queryTransactionLink = gql`
+ query ($code: String!) {
+ queryTransactionLink(code: $code) {
+ amount
+ memo
+ createdAt
+ validUntil
+ user {
+ firstName
+ publisherId
+ }
+ }
+ }
+`
diff --git a/backend/src/seeds/index.ts b/backend/src/seeds/index.ts
new file mode 100644
index 000000000..37c9992a7
--- /dev/null
+++ b/backend/src/seeds/index.ts
@@ -0,0 +1,77 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
+
+import createServer from '../server/createServer'
+import { createTestClient } from 'apollo-server-testing'
+
+import { name, internet, random } from 'faker'
+
+import { users } from './users/index'
+import { creations } from './creation/index'
+import { transactionLinks } from './transactionLink/index'
+import { userFactory } from './factory/user'
+import { creationFactory } from './factory/creation'
+import { transactionLinkFactory } from './factory/transactionLink'
+import { entities } from '@entity/index'
+
+const context = {
+ token: '',
+ setHeaders: {
+ push: (value: { key: string; value: string }): void => {
+ context.token = value.value
+ },
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ forEach: (): void => {},
+ },
+}
+
+export const cleanDB = async () => {
+ // this only works as lond we do not have foreign key constraints
+ for (let i = 0; i < entities.length; i++) {
+ await resetEntity(entities[i])
+ }
+}
+
+const resetEntity = async (entity: any) => {
+ const items = await entity.find({ withDeleted: true })
+ if (items.length > 0) {
+ const ids = items.map((i: any) => i.id)
+ await entity.delete(ids)
+ }
+}
+
+const run = async () => {
+ const server = await createServer(context)
+ const seedClient = createTestClient(server.apollo)
+ const { con } = server
+ await cleanDB()
+
+ // seed the standard users
+ for (let i = 0; i < users.length; i++) {
+ await userFactory(seedClient, users[i])
+ }
+
+ // seed 100 random users
+ for (let i = 0; i < 100; i++) {
+ await userFactory(seedClient, {
+ firstName: name.firstName(),
+ lastName: name.lastName(),
+ email: internet.email(),
+ language: random.boolean() ? 'en' : 'de',
+ })
+ }
+
+ // create GDD
+ for (let i = 0; i < creations.length; i++) {
+ await creationFactory(seedClient, creations[i])
+ }
+
+ // create Transaction Links
+ for (let i = 0; i < transactionLinks.length; i++) {
+ await transactionLinkFactory(seedClient, transactionLinks[i])
+ }
+
+ await con.close()
+}
+
+run()
diff --git a/backend/src/seeds/transactionLink/TransactionLinkInterface.ts b/backend/src/seeds/transactionLink/TransactionLinkInterface.ts
new file mode 100644
index 000000000..ddc835b33
--- /dev/null
+++ b/backend/src/seeds/transactionLink/TransactionLinkInterface.ts
@@ -0,0 +1,7 @@
+export interface TransactionLinkInterface {
+ email: string
+ amount: number
+ memo: string
+ createdAt?: Date
+ deletedAt?: boolean
+}
diff --git a/backend/src/seeds/transactionLink/index.ts b/backend/src/seeds/transactionLink/index.ts
new file mode 100644
index 000000000..25755c0f2
--- /dev/null
+++ b/backend/src/seeds/transactionLink/index.ts
@@ -0,0 +1,52 @@
+import { TransactionLinkInterface } from './TransactionLinkInterface'
+
+export const transactionLinks: TransactionLinkInterface[] = [
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 19.99,
+ memo: 'Leider wollte niemand meine Gradidos zum Neujahr haben :(',
+ createdAt: new Date(2022, 0, 1),
+ },
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 19.99,
+ memo: `Kein Trick, keine Zauberrei,
+bei Gradidio sei dabei!`,
+ },
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 19.99,
+ memo: `Kein Trick, keine Zauberrei,
+bei Gradidio sei dabei!`,
+ },
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 19.99,
+ memo: `Kein Trick, keine Zauberrei,
+bei Gradidio sei dabei!`,
+ },
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 19.99,
+ memo: `Kein Trick, keine Zauberrei,
+bei Gradidio sei dabei!`,
+ },
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 19.99,
+ memo: `Kein Trick, keine Zauberrei,
+bei Gradidio sei dabei!`,
+ },
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 19.99,
+ memo: `Kein Trick, keine Zauberrei,
+bei Gradidio sei dabei!`,
+ },
+ {
+ email: 'bibi@bloxberg.de',
+ amount: 19.99,
+ memo: 'Da habe ich mich wohl etwas übernommen.',
+ deletedAt: true,
+ },
+]
diff --git a/backend/src/seeds/users/UserInterface.ts b/backend/src/seeds/users/UserInterface.ts
new file mode 100644
index 000000000..08aa5d19d
--- /dev/null
+++ b/backend/src/seeds/users/UserInterface.ts
@@ -0,0 +1,12 @@
+export interface UserInterface {
+ email?: string
+ firstName?: string
+ lastName?: string
+ // description?: string
+ createdAt?: Date
+ emailChecked?: boolean
+ language?: string
+ deletedAt?: Date
+ publisherId?: number
+ isAdmin?: boolean
+}
diff --git a/backend/src/seeds/users/bibi-bloxberg.ts b/backend/src/seeds/users/bibi-bloxberg.ts
new file mode 100644
index 000000000..7c372848e
--- /dev/null
+++ b/backend/src/seeds/users/bibi-bloxberg.ts
@@ -0,0 +1,11 @@
+import { UserInterface } from './UserInterface'
+
+export const bibiBloxberg: UserInterface = {
+ email: 'bibi@bloxberg.de',
+ firstName: 'Bibi',
+ lastName: 'Bloxberg',
+ // description: 'Hex Hex',
+ emailChecked: true,
+ language: 'de',
+ publisherId: 1234,
+}
diff --git a/backend/src/seeds/users/bob-baumeister.ts b/backend/src/seeds/users/bob-baumeister.ts
new file mode 100644
index 000000000..ac88611b8
--- /dev/null
+++ b/backend/src/seeds/users/bob-baumeister.ts
@@ -0,0 +1,10 @@
+import { UserInterface } from './UserInterface'
+
+export const bobBaumeister: UserInterface = {
+ email: 'bob@baumeister.de',
+ firstName: 'Bob',
+ lastName: 'der Baumeister',
+ // description: 'Können wir das schaffen? Ja, wir schaffen das!',
+ emailChecked: true,
+ language: 'de',
+}
diff --git a/backend/src/seeds/users/garrick-ollivander.ts b/backend/src/seeds/users/garrick-ollivander.ts
new file mode 100644
index 000000000..264a866bd
--- /dev/null
+++ b/backend/src/seeds/users/garrick-ollivander.ts
@@ -0,0 +1,12 @@
+import { UserInterface } from './UserInterface'
+
+export const garrickOllivander: UserInterface = {
+ email: 'garrick@ollivander.com',
+ firstName: 'Garrick',
+ lastName: 'Ollivander',
+ // description: `Curious ... curious ...
+ // Renowned wandmaker Mr Ollivander owns the wand shop Ollivanders: Makers of Fine Wands Since 382 BC in Diagon Alley. His shop is widely considered the best place to purchase a wand.`,
+ createdAt: new Date('2022-01-10T10:23:17'),
+ emailChecked: false,
+ language: 'en',
+}
diff --git a/backend/src/seeds/users/index.ts b/backend/src/seeds/users/index.ts
new file mode 100644
index 000000000..7a6dbe519
--- /dev/null
+++ b/backend/src/seeds/users/index.ts
@@ -0,0 +1,15 @@
+import { peterLustig } from './peter-lustig'
+import { bibiBloxberg } from './bibi-bloxberg'
+import { bobBaumeister } from './bob-baumeister'
+import { raeuberHotzenplotz } from './raeuber-hotzenplotz'
+import { stephenHawking } from './stephen-hawking'
+import { garrickOllivander } from './garrick-ollivander'
+
+export const users = [
+ peterLustig,
+ bibiBloxberg,
+ bobBaumeister,
+ raeuberHotzenplotz,
+ stephenHawking,
+ garrickOllivander,
+]
diff --git a/backend/src/seeds/users/peter-lustig.ts b/backend/src/seeds/users/peter-lustig.ts
new file mode 100644
index 000000000..0cdc67829
--- /dev/null
+++ b/backend/src/seeds/users/peter-lustig.ts
@@ -0,0 +1,12 @@
+import { UserInterface } from './UserInterface'
+
+export const peterLustig: UserInterface = {
+ email: 'peter@lustig.de',
+ firstName: 'Peter',
+ lastName: 'Lustig',
+ // description: 'Latzhose und Nickelbrille',
+ createdAt: new Date('2020-11-25T10:48:43'),
+ emailChecked: true,
+ language: 'de',
+ isAdmin: true,
+}
diff --git a/backend/src/seeds/users/raeuber-hotzenplotz.ts b/backend/src/seeds/users/raeuber-hotzenplotz.ts
new file mode 100644
index 000000000..62601efff
--- /dev/null
+++ b/backend/src/seeds/users/raeuber-hotzenplotz.ts
@@ -0,0 +1,10 @@
+import { UserInterface } from './UserInterface'
+
+export const raeuberHotzenplotz: UserInterface = {
+ email: 'raeuber@hotzenplotz.de',
+ firstName: 'Räuber',
+ lastName: 'Hotzenplotz',
+ // description: 'Pfefferpistole',
+ emailChecked: true,
+ language: 'de',
+}
diff --git a/backend/src/seeds/users/stephen-hawking.ts b/backend/src/seeds/users/stephen-hawking.ts
new file mode 100644
index 000000000..a683b7579
--- /dev/null
+++ b/backend/src/seeds/users/stephen-hawking.ts
@@ -0,0 +1,12 @@
+import { UserInterface } from './UserInterface'
+
+export const stephenHawking: UserInterface = {
+ email: 'stephen@hawking.uk',
+ firstName: 'Stephen',
+ lastName: 'Hawking',
+ // description: 'A Brief History of Time',
+ emailChecked: true,
+ createdAt: new Date('1942-01-08T09:17:52'),
+ deletedAt: new Date('2018-03-14T09:17:52'),
+ language: 'en',
+}
diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts
index 4ed20232d..8315fda58 100644
--- a/backend/src/server/createServer.ts
+++ b/backend/src/server/createServer.ts
@@ -1,16 +1,11 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-
import 'reflect-metadata'
-import 'module-alias/register'
import { ApolloServer } from 'apollo-server-express'
-import express from 'express'
-import bodyParser from 'body-parser'
+import express, { Express } from 'express'
// database
-import connection from '../typeorm/connection'
-import getDBVersion from '../typeorm/getDBVersion'
+import connection from '@/typeorm/connection'
+import { checkDBVersion } from '@/typeorm/DBVersion'
// server
import cors from './cors'
@@ -18,34 +13,32 @@ import serverContext from './context'
import plugins from './plugins'
// config
-import CONFIG from '../config'
+import CONFIG from '@/config'
// graphql
-import schema from '../graphql/schema'
+import schema from '@/graphql/schema'
// webhooks
-import { elopageWebhook } from '../webhook/elopage'
+import { elopageWebhook } from '@/webhook/elopage'
+import { Connection } from '@dbTools/typeorm'
// TODO implement
// import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity";
-const DB_VERSION = '0006-login_users_collation'
+type ServerDef = { apollo: ApolloServer; app: Express; con: Connection }
-const createServer = async (context: any = serverContext): Promise => {
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+const createServer = async (context: any = serverContext): Promise => {
// open mysql connection
const con = await connection()
if (!con || !con.isConnected) {
- throw new Error(`Couldn't open connection to database`)
+ throw new Error(`Fatal: Couldn't open connection to database`)
}
// check for correct database version
- const dbVersion = await getDBVersion()
- if (!dbVersion || dbVersion.indexOf(DB_VERSION) === -1) {
- throw new Error(
- `Wrong database version - the backend requires '${DB_VERSION}' but found '${
- dbVersion || 'None'
- }'`,
- )
+ const dbVersion = await checkDBVersion(CONFIG.DB_VERSION)
+ if (!dbVersion) {
+ throw new Error('Fatal: Database Version incorrect')
}
// Express Server
@@ -54,8 +47,10 @@ const createServer = async (context: any = serverContext): Promise => {
// cors
app.use(cors)
- // bodyparser
- app.use(bodyParser.json())
+ // bodyparser json
+ app.use(express.json())
+ // bodyparser urlencoded for elopage
+ app.use(express.urlencoded({ extended: true }))
// Elopage Webhook
app.post('/hook/elopage/' + CONFIG.WEBHOOK_ELOPAGE_SECRET, elopageWebhook)
@@ -64,10 +59,11 @@ const createServer = async (context: any = serverContext): Promise => {
const apollo = new ApolloServer({
schema: await schema(),
playground: CONFIG.GRAPHIQL,
+ introspection: CONFIG.GRAPHIQL,
context,
plugins,
})
- apollo.applyMiddleware({ app })
+ apollo.applyMiddleware({ app, path: '/' })
return { apollo, app, con }
}
diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts
index 5436d595b..a407135ea 100644
--- a/backend/src/server/plugins.ts
+++ b/backend/src/server/plugins.ts
@@ -1,20 +1,45 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-const plugins = [
- {
- requestDidStart() {
- return {
- willSendResponse(requestContext: any) {
- const { setHeaders = [] } = requestContext.context
- setHeaders.forEach(({ key, value }: { [key: string]: string }) => {
+import { ApolloLogPlugin, LogMutateData } from 'apollo-log'
+import cloneDeep from 'lodash.clonedeep'
+
+const setHeadersPlugin = {
+ requestDidStart() {
+ return {
+ willSendResponse(requestContext: any) {
+ const { setHeaders = [] } = requestContext.context
+ setHeaders.forEach(({ key, value }: { [key: string]: string }) => {
+ if (requestContext.response.http.headers.get(key)) {
+ requestContext.response.http.headers.set(key, value)
+ } else {
requestContext.response.http.headers.append(key, value)
- })
- return requestContext
- },
- }
- },
+ }
+ })
+ return requestContext
+ },
+ }
},
-]
+}
+
+const apolloLogPlugin = ApolloLogPlugin({
+ mutate: (data: LogMutateData) => {
+ // We need to deep clone the object in order to not modify the actual request
+ const dataCopy = cloneDeep(data)
+
+ // mask password if part of the query
+ if (dataCopy.context.request.variables && dataCopy.context.request.variables.password) {
+ dataCopy.context.request.variables.password = '***'
+ }
+
+ // mask token at all times
+ dataCopy.context.context.token = '***'
+
+ return dataCopy
+ },
+})
+
+const plugins =
+ process.env.NODE_ENV === 'development' ? [setHeadersPlugin] : [setHeadersPlugin, apolloLogPlugin]
export default plugins
diff --git a/backend/src/typeorm/DBVersion.ts b/backend/src/typeorm/DBVersion.ts
new file mode 100644
index 000000000..a8cb70489
--- /dev/null
+++ b/backend/src/typeorm/DBVersion.ts
@@ -0,0 +1,28 @@
+import { Migration } from '@entity/Migration'
+
+const getDBVersion = async (): Promise => {
+ try {
+ const dbVersion = await Migration.findOne({ order: { version: 'DESC' } })
+ return dbVersion ? dbVersion.fileName : null
+ } catch (error) {
+ // eslint-disable-next-line no-console
+ console.log(error)
+ return null
+ }
+}
+
+const checkDBVersion = async (DB_VERSION: string): Promise => {
+ const dbVersion = await getDBVersion()
+ if (!dbVersion || dbVersion.indexOf(DB_VERSION) === -1) {
+ // eslint-disable-next-line no-console
+ console.log(
+ `Wrong database version detected - the backend requires '${DB_VERSION}' but found '${
+ dbVersion || 'None'
+ }`,
+ )
+ return false
+ }
+ return true
+}
+
+export { checkDBVersion, getDBVersion }
diff --git a/backend/src/typeorm/connection.ts b/backend/src/typeorm/connection.ts
index 5709c29b6..745b2da94 100644
--- a/backend/src/typeorm/connection.ts
+++ b/backend/src/typeorm/connection.ts
@@ -1,11 +1,12 @@
-import { createConnection, Connection } from 'typeorm'
-import CONFIG from '../config'
+// TODO This is super weird - since the entities are defined in another project they have their own globals.
+// We cannot use our connection here, but must use the external typeorm installation
+import { Connection, createConnection, FileLogger } from '@dbTools/typeorm'
+import CONFIG from '@/config'
import { entities } from '@entity/index'
const connection = async (): Promise => {
- let con = null
try {
- con = await createConnection({
+ return createConnection({
name: 'default',
type: 'mysql',
host: CONFIG.DB_HOST,
@@ -15,13 +16,16 @@ const connection = async (): Promise => {
database: CONFIG.DB_DATABASE,
entities,
synchronize: false,
+ logging: true,
+ logger: new FileLogger('all', {
+ logPath: CONFIG.TYPEORM_LOGGING_RELATIVE_PATH,
+ }),
})
} catch (error) {
// eslint-disable-next-line no-console
console.log(error)
+ return null
}
-
- return con
}
export default connection
diff --git a/backend/src/typeorm/getDBVersion.ts b/backend/src/typeorm/getDBVersion.ts
deleted file mode 100644
index a64a6c2b7..000000000
--- a/backend/src/typeorm/getDBVersion.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { getRepository } from 'typeorm'
-import { Migration } from '@entity/Migration'
-
-const getDBVersion = async (): Promise => {
- try {
- const dbVersion = await getRepository(Migration).findOne({ order: { version: 'DESC' } })
- return dbVersion ? dbVersion.fileName : null
- } catch (error) {
- // eslint-disable-next-line no-console
- console.log(error)
- return null
- }
-}
-
-export default getDBVersion
diff --git a/backend/src/typeorm/repository/Balance.ts b/backend/src/typeorm/repository/Balance.ts
deleted file mode 100644
index b7c20650f..000000000
--- a/backend/src/typeorm/repository/Balance.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { Balance } from '@entity/Balance'
-
-@EntityRepository(Balance)
-export class BalanceRepository extends Repository {
- findByUser(userId: number): Promise {
- return this.createQueryBuilder('balance').where('balance.userId = :userId', { userId }).getOne()
- }
-}
diff --git a/backend/src/typeorm/repository/LoginElopageBuys.ts b/backend/src/typeorm/repository/LoginElopageBuys.ts
deleted file mode 100644
index 15f2a8492..000000000
--- a/backend/src/typeorm/repository/LoginElopageBuys.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { LoginElopageBuys } from '@entity/LoginElopageBuys'
-
-@EntityRepository(LoginElopageBuys)
-export class LoginElopageBuysRepository extends Repository {}
diff --git a/backend/src/typeorm/repository/LoginEmailOptIn.ts b/backend/src/typeorm/repository/LoginEmailOptIn.ts
deleted file mode 100644
index cb486d922..000000000
--- a/backend/src/typeorm/repository/LoginEmailOptIn.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { LoginEmailOptIn } from '@entity/LoginEmailOptIn'
-
-@EntityRepository(LoginEmailOptIn)
-export class LoginEmailOptInRepository extends Repository {}
diff --git a/backend/src/typeorm/repository/LoginPendingTasksAdmin.ts b/backend/src/typeorm/repository/LoginPendingTasksAdmin.ts
deleted file mode 100644
index b5c55fcd2..000000000
--- a/backend/src/typeorm/repository/LoginPendingTasksAdmin.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { LoginPendingTasksAdmin } from '@entity/LoginPendingTasksAdmin'
-
-@EntityRepository(LoginPendingTasksAdmin)
-export class LoginPendingTasksAdminRepository extends Repository {}
diff --git a/backend/src/typeorm/repository/LoginUser.ts b/backend/src/typeorm/repository/LoginUser.ts
deleted file mode 100644
index ac7ff31b6..000000000
--- a/backend/src/typeorm/repository/LoginUser.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { LoginUser } from '@entity/LoginUser'
-
-@EntityRepository(LoginUser)
-export class LoginUserRepository extends Repository {
- async findByEmail(email: string): Promise {
- return this.createQueryBuilder('loginUser')
- .where('loginUser.email = :email', { email })
- .getOneOrFail()
- }
-
- async findBySearchCriteria(searchCriteria: string): Promise {
- return await this.createQueryBuilder('user')
- .where(
- 'user.firstName like :name or user.lastName like :lastName or user.email like :email',
- {
- name: `%${searchCriteria}%`,
- lastName: `%${searchCriteria}%`,
- email: `%${searchCriteria}%`,
- },
- )
- .getMany()
- }
-}
diff --git a/backend/src/typeorm/repository/LoginUserBackup.ts b/backend/src/typeorm/repository/LoginUserBackup.ts
deleted file mode 100644
index 8c729139a..000000000
--- a/backend/src/typeorm/repository/LoginUserBackup.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { LoginUserBackup } from '@entity/LoginUserBackup'
-
-@EntityRepository(LoginUserBackup)
-export class LoginUserBackupRepository extends Repository {}
diff --git a/backend/src/typeorm/repository/ServerUser.ts b/backend/src/typeorm/repository/ServerUser.ts
deleted file mode 100644
index 59d7a09f4..000000000
--- a/backend/src/typeorm/repository/ServerUser.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { ServerUser } from '@entity/ServerUser'
-
-@EntityRepository(ServerUser)
-export class ServerUserRepository extends Repository {}
diff --git a/backend/src/typeorm/repository/Transaction.ts b/backend/src/typeorm/repository/Transaction.ts
index ab4e301c7..f84b57626 100644
--- a/backend/src/typeorm/repository/Transaction.ts
+++ b/backend/src/typeorm/repository/Transaction.ts
@@ -1,28 +1,40 @@
-import { EntityRepository, Repository } from 'typeorm'
+import { EntityRepository, Repository } from '@dbTools/typeorm'
import { Transaction } from '@entity/Transaction'
+import { Order } from '@enum/Order'
+import { TransactionTypeId } from '@enum/TransactionTypeId'
@EntityRepository(Transaction)
export class TransactionRepository extends Repository {
- async findDecayStartBlock(): Promise {
- return this.createQueryBuilder('transaction')
- .where('transaction.transactionTypeId = :transactionTypeId', { transactionTypeId: 9 })
- .orderBy('received', 'ASC')
- .getOne()
+ findByUserPaged(
+ userId: number,
+ limit: number,
+ offset: number,
+ order: Order,
+ onlyCreation?: boolean,
+ ): Promise<[Transaction[], number]> {
+ if (onlyCreation) {
+ return this.createQueryBuilder('userTransaction')
+ .where('userTransaction.userId = :userId', { userId })
+ .andWhere('userTransaction.typeId = :typeId', {
+ typeId: TransactionTypeId.CREATION,
+ })
+ .orderBy('userTransaction.balanceDate', order)
+ .limit(limit)
+ .offset(offset)
+ .getManyAndCount()
+ }
+ return this.createQueryBuilder('userTransaction')
+ .where('userTransaction.userId = :userId', { userId })
+ .orderBy('userTransaction.balanceDate', order)
+ .limit(limit)
+ .offset(offset)
+ .getManyAndCount()
}
- async joinFullTransactionsByIds(transactionIds: number[]): Promise {
- return this.createQueryBuilder('transaction')
- .where('transaction.id IN (:...transactions)', { transactions: transactionIds })
- .leftJoinAndSelect(
- 'transaction.transactionSendCoin',
- 'transactionSendCoin',
- // 'transactionSendCoin.transaction_id = transaction.id',
- )
- .leftJoinAndSelect(
- 'transaction.transactionCreation',
- 'transactionCreation',
- // 'transactionSendCoin.transaction_id = transaction.id',
- )
- .getMany()
+ findLastForUser(userId: number): Promise {
+ return this.createQueryBuilder('userTransaction')
+ .where('userTransaction.userId = :userId', { userId })
+ .orderBy('userTransaction.balanceDate', 'DESC')
+ .getOne()
}
}
diff --git a/backend/src/typeorm/repository/TransactionCreation.ts b/backend/src/typeorm/repository/TransactionCreation.ts
deleted file mode 100644
index 89266838a..000000000
--- a/backend/src/typeorm/repository/TransactionCreation.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { TransactionCreation } from '@entity/TransactionCreation'
-
-@EntityRepository(TransactionCreation)
-export class TransactionCreationRepository extends Repository {}
diff --git a/backend/src/typeorm/repository/TransactionLink.ts b/backend/src/typeorm/repository/TransactionLink.ts
new file mode 100644
index 000000000..46926673a
--- /dev/null
+++ b/backend/src/typeorm/repository/TransactionLink.ts
@@ -0,0 +1,39 @@
+import { Repository, EntityRepository } from '@dbTools/typeorm'
+import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
+import Decimal from 'decimal.js-light'
+
+@EntityRepository(dbTransactionLink)
+export class TransactionLinkRepository extends Repository {
+ async summary(
+ userId: number,
+ date: Date,
+ ): Promise<{
+ sumHoldAvailableAmount: Decimal
+ sumAmount: Decimal
+ lastDate: Date | null
+ firstDate: Date | null
+ transactionLinkcount: number
+ }> {
+ const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, count } =
+ await this.createQueryBuilder('transactionLinks')
+ .select('SUM(transactionLinks.holdAvailableAmount)', 'sumHoldAvailableAmount')
+ .addSelect('SUM(transactionLinks.amount)', 'sumAmount')
+ .addSelect('MAX(transactionLinks.validUntil)', 'lastDate')
+ .addSelect('MIN(transactionLinks.createdAt)', 'firstDate')
+ .addSelect('COUNT(*)', 'count')
+ .where('transactionLinks.userId = :userId', { userId })
+ .andWhere('transactionLinks.redeemedAt is NULL')
+ .andWhere('transactionLinks.validUntil > :date', { date })
+ .orderBy('transactionLinks.createdAt', 'DESC')
+ .getRawOne()
+ return {
+ sumHoldAvailableAmount: sumHoldAvailableAmount
+ ? new Decimal(sumHoldAvailableAmount)
+ : new Decimal(0),
+ sumAmount: sumAmount ? new Decimal(sumAmount) : new Decimal(0),
+ lastDate: lastDate || null,
+ firstDate: firstDate || null,
+ transactionLinkcount: count || 0,
+ }
+ }
+}
diff --git a/backend/src/typeorm/repository/User.ts b/backend/src/typeorm/repository/User.ts
index cf67c837b..01f61dcbc 100644
--- a/backend/src/typeorm/repository/User.ts
+++ b/backend/src/typeorm/repository/User.ts
@@ -1,46 +1,42 @@
-import { EntityRepository, Repository } from 'typeorm'
+import { Brackets, EntityRepository, ObjectLiteral, Repository } from '@dbTools/typeorm'
import { User } from '@entity/User'
@EntityRepository(User)
export class UserRepository extends Repository {
async findByPubkeyHex(pubkeyHex: string): Promise {
return this.createQueryBuilder('user')
- .where('hex(user.pubkey) = :pubkeyHex', { pubkeyHex })
+ .where('hex(user.pubKey) = :pubkeyHex', { pubkeyHex })
.getOneOrFail()
}
- async findByPubkeyHexBuffer(pubkeyHexBuffer: Buffer): Promise {
- const pubKeyString = pubkeyHexBuffer.toString('hex')
- return await this.findByPubkeyHex(pubKeyString)
- }
-
- async findByEmail(email: string): Promise {
- return this.createQueryBuilder('user').where('user.email = :email', { email }).getOneOrFail()
- }
-
- async getUsersIndiced(userIds: number[]): Promise {
- if (!userIds.length) return []
- const users = await this.createQueryBuilder('user')
- .select(['user.id', 'user.firstName', 'user.lastName', 'user.email'])
- .where('user.id IN (:...users)', { users: userIds })
- .getMany()
- const usersIndiced: User[] = []
- users.forEach((value) => {
- usersIndiced[value.id] = value
- })
- return usersIndiced
- }
-
- async findBySearchCriteria(searchCriteria: string): Promise {
- return await this.createQueryBuilder('user')
+ async findBySearchCriteriaPagedFiltered(
+ select: string[],
+ searchCriteria: string,
+ filterCriteria: ObjectLiteral[],
+ currentPage: number,
+ pageSize: number,
+ ): Promise<[User[], number]> {
+ const query = await this.createQueryBuilder('user')
+ .select(select)
+ .withDeleted()
.where(
- 'user.firstName like :name or user.lastName like :lastName or user.email like :email',
- {
- name: `%${searchCriteria}%`,
- lastName: `%${searchCriteria}%`,
- email: `%${searchCriteria}%`,
- },
+ new Brackets((qb) => {
+ qb.where(
+ 'user.firstName like :name or user.lastName like :lastName or user.email like :email',
+ {
+ name: `%${searchCriteria}%`,
+ lastName: `%${searchCriteria}%`,
+ email: `%${searchCriteria}%`,
+ },
+ )
+ }),
)
- .getMany()
+ filterCriteria.forEach((filter) => {
+ query.andWhere(filter)
+ })
+ return query
+ .take(pageSize)
+ .skip((currentPage - 1) * pageSize)
+ .getManyAndCount()
}
}
diff --git a/backend/src/typeorm/repository/UserSettingRepository.ts b/backend/src/typeorm/repository/UserSettingRepository.ts
index 80c44802b..528090ff2 100644
--- a/backend/src/typeorm/repository/UserSettingRepository.ts
+++ b/backend/src/typeorm/repository/UserSettingRepository.ts
@@ -1,7 +1,7 @@
-import { EntityRepository, Repository } from 'typeorm'
+import { EntityRepository, Repository } from '@dbTools/typeorm'
import { UserSetting } from '@entity/UserSetting'
-import { Setting } from '../../graphql/enum/Setting'
-import { isStringBoolean } from '../../util/validate'
+import { Setting } from '@enum/Setting'
+import { isStringBoolean } from '@/util/validate'
@EntityRepository(UserSetting)
export class UserSettingRepository extends Repository {
diff --git a/backend/src/typeorm/repository/UserTransaction.ts b/backend/src/typeorm/repository/UserTransaction.ts
deleted file mode 100644
index 57f89d5a5..000000000
--- a/backend/src/typeorm/repository/UserTransaction.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { EntityRepository, Repository } from 'typeorm'
-import { Order } from '../../graphql/enum/Order'
-import { UserTransaction } from '@entity/UserTransaction'
-
-@EntityRepository(UserTransaction)
-export class UserTransactionRepository extends Repository {
- findByUserPaged(
- userId: number,
- limit: number,
- offset: number,
- order: Order,
- onlyCreation?: boolean,
- ): Promise<[UserTransaction[], number]> {
- if (onlyCreation) {
- return this.createQueryBuilder('userTransaction')
- .where('userTransaction.userId = :userId', { userId })
- .andWhere('userTransaction.type = "creation"')
- .orderBy('userTransaction.balanceDate', order)
- .limit(limit)
- .offset(offset)
- .getManyAndCount()
- }
- return this.createQueryBuilder('userTransaction')
- .where('userTransaction.userId = :userId', { userId })
- .orderBy('userTransaction.balanceDate', order)
- .limit(limit)
- .offset(offset)
- .getManyAndCount()
- }
-
- findLastForUser(userId: number): Promise {
- return this.createQueryBuilder('userTransaction')
- .where('userTransaction.userId = :userId', { userId })
- .orderBy('userTransaction.transactionId', 'DESC')
- .getOne()
- }
-}
diff --git a/backend/src/util/communityUser.ts b/backend/src/util/communityUser.ts
new file mode 100644
index 000000000..33ac2fad2
--- /dev/null
+++ b/backend/src/util/communityUser.ts
@@ -0,0 +1,44 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+
+import { SaveOptions, RemoveOptions } from '@dbTools/typeorm'
+import { User as dbUser } from '@entity/User'
+import { User } from '@model/User'
+
+const communityDbUser: dbUser = {
+ id: -1,
+ email: 'support@gradido.net',
+ firstName: 'Gradido',
+ lastName: 'Akademie',
+ pubKey: Buffer.from(''),
+ privKey: Buffer.from(''),
+ deletedAt: null,
+ password: BigInt(0),
+ emailHash: Buffer.from(''),
+ createdAt: new Date(),
+ emailChecked: false,
+ language: '',
+ publisherId: 0,
+ passphrase: '',
+ settings: [],
+ hasId: function (): boolean {
+ throw new Error('Function not implemented.')
+ },
+ save: function (options?: SaveOptions): Promise {
+ throw new Error('Function not implemented.')
+ },
+ remove: function (options?: RemoveOptions): Promise {
+ throw new Error('Function not implemented.')
+ },
+ softRemove: function (options?: SaveOptions): Promise {
+ throw new Error('Function not implemented.')
+ },
+ recover: function (options?: SaveOptions): Promise {
+ throw new Error('Function not implemented.')
+ },
+ reload: function (): Promise {
+ throw new Error('Function not implemented.')
+ },
+}
+const communityUser = new User(communityDbUser)
+
+export { communityDbUser, communityUser }
diff --git a/backend/src/util/decay.test.ts b/backend/src/util/decay.test.ts
index e34d8b58b..f1111fab4 100644
--- a/backend/src/util/decay.test.ts
+++ b/backend/src/util/decay.test.ts
@@ -1,40 +1,41 @@
+import Decimal from 'decimal.js-light'
+import 'reflect-metadata' // This might be wise to load in a test setup file
import { decayFormula, calculateDecay } from './decay'
describe('utils/decay', () => {
describe('decayFormula', () => {
it('has base 0.99999997802044727', () => {
- const amount = 1.0
+ const amount = new Decimal(1.0)
const seconds = 1
- expect(decayFormula(amount, seconds)).toBe(0.99999997802044727)
- })
- // Not sure if the following skiped tests make sence!?
- it('has negative decay?', async () => {
- const amount = -1.0
- const seconds = 1
- expect(await decayFormula(amount, seconds)).toBe(-0.99999997802044727)
+ // TODO: toString() was required, we could not compare two decimals
+ expect(decayFormula(amount, seconds).toString()).toBe('0.999999978035040489732012')
})
it('has correct backward calculation', async () => {
- const amount = 1.0
+ const amount = new Decimal(1.0)
const seconds = -1
- expect(await decayFormula(amount, seconds)).toBe(1.0000000219795533)
+ expect(decayFormula(amount, seconds).toString()).toBe('1.000000021964959992727444')
})
- // not possible, nodejs hasn't enough accuracy
- it('has correct forward calculation', async () => {
- const amount = 1.0 / 0.99999997802044727
+ // we get pretty close, but not exact here, skipping
+ it.skip('has correct forward calculation', async () => {
+ const amount = new Decimal(1.0).div(
+ new Decimal('0.99999997803504048973201202316767079413460520837376'),
+ )
const seconds = 1
- expect(await decayFormula(amount, seconds)).toBe(1.0)
+ expect(decayFormula(amount, seconds).toString()).toBe('1.0')
})
})
- it.skip('has base 0.99999997802044727', async () => {
+ it('has base 0.99999997802044727', async () => {
const now = new Date()
now.setSeconds(1)
const oneSecondAgo = new Date(now.getTime())
oneSecondAgo.setSeconds(0)
- expect(await calculateDecay(1.0, oneSecondAgo, now)).toBe(0.99999997802044727)
+ expect(calculateDecay(new Decimal(1.0), oneSecondAgo, now).balance.toString()).toBe(
+ '0.999999978035040489732012',
+ )
})
it('returns input amount when from and to is the same', async () => {
const now = new Date()
- expect(await calculateDecay(100.0, now, now)).toBe(100.0)
+ expect(calculateDecay(new Decimal(100.0), now, now).balance.toString()).toBe('100')
})
})
diff --git a/backend/src/util/decay.ts b/backend/src/util/decay.ts
index 75f96f18c..36f83f23f 100644
--- a/backend/src/util/decay.ts
+++ b/backend/src/util/decay.ts
@@ -1,70 +1,58 @@
-import { getCustomRepository } from 'typeorm'
-import { Decay } from '../graphql/model/Decay'
-import { TransactionRepository } from '../typeorm/repository/Transaction'
+import Decimal from 'decimal.js-light'
+import CONFIG from '@/config'
+import { Decay } from '@model/Decay'
-function decayFormula(amount: number, seconds: number): number {
- return amount * Math.pow(0.99999997802044727, seconds) // This number represents 50% decay a year
+// TODO: externalize all those definitions and functions into an external decay library
+
+function decayFormula(value: Decimal, seconds: number): Decimal {
+ // TODO why do we need to convert this here to a stting to work properly?
+ return value.mul(
+ new Decimal('0.99999997803504048973201202316767079413460520837376').pow(seconds).toString(),
+ )
}
-async function calculateDecay(amount: number, from: Date, to: Date): Promise {
- if (amount === undefined || !from || !to) {
- throw new Error('at least one parameter is undefined')
+function calculateDecay(
+ amount: Decimal,
+ from: Date,
+ to: Date,
+ startBlock: Date = CONFIG.DECAY_START_TIME,
+): Decay {
+ const fromMs = from.getTime()
+ const toMs = to.getTime()
+ const startBlockMs = startBlock.getTime()
+
+ if (toMs < fromMs) {
+ throw new Error('to < from, reverse decay calculation is invalid')
}
- if (from === to) {
- return amount
+
+ // Initialize with no decay
+ const decay: Decay = {
+ balance: amount,
+ decay: new Decimal(0),
+ start: null,
+ end: null,
+ duration: null,
}
- if (to < from) {
- throw new Error('to < from, so the target date is in the past?')
+
+ // decay started after end date; no decay
+ if (startBlockMs > toMs) {
+ return decay
}
- // load decay start block
- const transactionRepository = getCustomRepository(TransactionRepository)
- const decayStartBlock = await transactionRepository.findDecayStartBlock()
-
- // if decay hasn't started yet we return input amount
- if (!decayStartBlock) return amount
-
- // what happens when from > to
- // Do we want to have negative decay?
- const decayDuration = (to.getTime() - from.getTime()) / 1000
- return decayFormula(amount, decayDuration)
-}
-
-async function calculateDecayWithInterval(
- amount: number,
- from: number | Date,
- to: number | Date,
-): Promise {
- const transactionRepository = getCustomRepository(TransactionRepository)
- const decayStartBlock = await transactionRepository.findDecayStartBlock()
-
- const result = new Decay(undefined)
- result.balance = amount
- const fromMillis = typeof from === 'number' ? from : from.getTime()
- const toMillis = typeof to === 'number' ? to : to.getTime()
- result.decayStart = (fromMillis / 1000).toString()
- result.decayEnd = (toMillis / 1000).toString()
-
- // (amount, from.getTime(), to.getTime())
-
- // if no decay start block exist or decay startet after end date
- if (!decayStartBlock || decayStartBlock.received.getTime() > toMillis) {
- return result
+ // decay started before start date; decay for full duration
+ if (startBlockMs < fromMs) {
+ decay.start = from
+ decay.duration = (toMs - fromMs) / 1000
}
- const decayStartBlockMillis = decayStartBlock.received.getTime()
-
- // if decay start date is before start date we calculate decay for full duration
- if (decayStartBlockMillis < fromMillis) {
- result.decayDuration = toMillis - fromMillis
- }
- // if decay start in between start date and end date we caculcate decay from decay start time to end date
+ // decay started between start and end date; decay from decay start till end date
else {
- result.decayDuration = toMillis - decayStartBlockMillis
- result.decayStart = (decayStartBlockMillis / 1000).toString()
+ decay.start = startBlock
+ decay.duration = (toMs - startBlockMs) / 1000
}
- // js use timestamp in milliseconds but we calculate with seconds
- result.decayDuration /= 1000
- result.balance = decayFormula(amount, result.decayDuration)
- return result
+
+ decay.end = to
+ decay.balance = decayFormula(amount, decay.duration)
+ decay.decay = decay.balance.minus(amount)
+ return decay
}
-export { decayFormula, calculateDecay, calculateDecayWithInterval }
+export { decayFormula, calculateDecay }
diff --git a/backend/src/util/hasElopageBuys.ts b/backend/src/util/hasElopageBuys.ts
new file mode 100644
index 000000000..4e23e717c
--- /dev/null
+++ b/backend/src/util/hasElopageBuys.ts
@@ -0,0 +1,6 @@
+import { LoginElopageBuys } from '@entity/LoginElopageBuys'
+
+export async function hasElopageBuys(email: string): Promise {
+ const elopageBuyCount = await LoginElopageBuys.count({ payerEmail: email })
+ return elopageBuyCount > 0
+}
diff --git a/backend/src/util/round.test.ts b/backend/src/util/round.test.ts
deleted file mode 100644
index a33867157..000000000
--- a/backend/src/util/round.test.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { roundCeilFrom4, roundFloorFrom4, roundCeilFrom2, roundFloorFrom2 } from './round'
-
-describe('utils/round', () => {
- it('roundCeilFrom4', () => {
- const amount = 11617
- expect(roundCeilFrom4(amount)).toBe(1.17)
- })
- // Not sure if the following skiped tests make sence!?
- it('roundFloorFrom4', () => {
- const amount = 11617
- expect(roundFloorFrom4(amount)).toBe(1.16)
- })
- it('roundCeilFrom2', () => {
- const amount = 1216
- expect(roundCeilFrom2(amount)).toBe(13)
- })
- // not possible, nodejs hasn't enough accuracy
- it('roundFloorFrom2', () => {
- const amount = 1216
- expect(roundFloorFrom2(amount)).toBe(12)
- })
-})
diff --git a/backend/src/util/round.ts b/backend/src/util/round.ts
deleted file mode 100644
index 18e15afcd..000000000
--- a/backend/src/util/round.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-function roundCeilFrom4(decimal: number): number {
- return Math.ceil(decimal / 100) / 100
-}
-
-function roundFloorFrom4(decimal: number): number {
- return Math.floor(decimal / 100) / 100
-}
-
-function roundCeilFrom2(decimal: number): number {
- return Math.ceil(decimal / 100)
-}
-
-function roundFloorFrom2(decimal: number): number {
- return Math.floor(decimal / 100)
-}
-
-export { roundCeilFrom4, roundFloorFrom4, roundCeilFrom2, roundFloorFrom2 }
diff --git a/backend/src/util/validate.ts b/backend/src/util/validate.ts
index 55449cb8e..95e1bf699 100644
--- a/backend/src/util/validate.ts
+++ b/backend/src/util/validate.ts
@@ -1,7 +1,9 @@
-import { User as dbUser } from '@entity/User'
-import { Balance as dbBalance } from '@entity/Balance'
-import { getRepository } from 'typeorm'
import { calculateDecay } from './decay'
+import Decimal from 'decimal.js-light'
+import { Transaction } from '@entity/Transaction'
+import { Decay } from '@model/Decay'
+import { getCustomRepository } from '@dbTools/typeorm'
+import { TransactionLinkRepository } from '@repository/TransactionLink'
function isStringBoolean(value: string): boolean {
const lowerValue = value.toLowerCase()
@@ -15,14 +17,25 @@ function isHexPublicKey(publicKey: string): boolean {
return /^[0-9A-Fa-f]{64}$/i.test(publicKey)
}
-async function hasUserAmount(user: dbUser, amount: number): Promise {
- if (amount < 0) return false
- const balanceRepository = getRepository(dbBalance)
- const balance = await balanceRepository.findOne({ userId: user.id })
- if (!balance) return false
+async function calculateBalance(
+ userId: number,
+ amount: Decimal,
+ time: Date,
+): Promise<{ balance: Decimal; decay: Decay; lastTransactionId: number } | null> {
+ const lastTransaction = await Transaction.findOne({ userId }, { order: { balanceDate: 'DESC' } })
+ if (!lastTransaction) return null
- const decay = await calculateDecay(balance.amount, balance.recordDate, new Date())
- return decay > amount
+ const decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, time)
+
+ // TODO why we have to use toString() here?
+ const balance = decay.balance.add(amount.toString())
+ const transactionLinkRepository = getCustomRepository(TransactionLinkRepository)
+ const { sumHoldAvailableAmount } = await transactionLinkRepository.summary(userId, time)
+
+ if (balance.minus(sumHoldAvailableAmount.toString()).lessThan(0)) {
+ return null
+ }
+ return { balance, lastTransactionId: lastTransaction.id, decay }
}
-export { isHexPublicKey, hasUserAmount, isStringBoolean }
+export { isHexPublicKey, calculateBalance, isStringBoolean }
diff --git a/backend/src/util/virtualTransactions.ts b/backend/src/util/virtualTransactions.ts
new file mode 100644
index 000000000..e4b9eec1f
--- /dev/null
+++ b/backend/src/util/virtualTransactions.ts
@@ -0,0 +1,82 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+import { Transaction } from '@model/Transaction'
+import { SaveOptions, RemoveOptions } from '@dbTools/typeorm'
+import { Transaction as dbTransaction } from '@entity/Transaction'
+import { TransactionTypeId } from '@enum/TransactionTypeId'
+import { calculateDecay } from './decay'
+import { User } from '@model/User'
+import Decimal from 'decimal.js-light'
+
+const defaultModelFunctions = {
+ hasId: function (): boolean {
+ throw new Error('Function not implemented.')
+ },
+ save: function (options?: SaveOptions): Promise {
+ throw new Error('Function not implemented.')
+ },
+ remove: function (options?: RemoveOptions): Promise {
+ throw new Error('Function not implemented.')
+ },
+ softRemove: function (options?: SaveOptions): Promise {
+ throw new Error('Function not implemented.')
+ },
+ recover: function (options?: SaveOptions): Promise {
+ throw new Error('Function not implemented.')
+ },
+ reload: function (): Promise {
+ throw new Error('Function not implemented.')
+ },
+}
+
+const virtualLinkTransaction = (
+ balance: Decimal,
+ amount: Decimal,
+ holdAvailableAmount: Decimal,
+ decay: Decimal,
+ createdAt: Date,
+ validUntil: Date,
+ user: User,
+): Transaction => {
+ const linkDbTransaction: dbTransaction = {
+ id: -2,
+ userId: -1,
+ previous: -1,
+ typeId: TransactionTypeId.LINK_SUMMARY,
+ amount: amount,
+ balance: balance,
+ balanceDate: validUntil,
+ decayStart: createdAt,
+ decay: decay,
+ memo: '',
+ creationDate: null,
+ ...defaultModelFunctions,
+ }
+ return new Transaction(linkDbTransaction, user)
+}
+
+const virtualDecayTransaction = (
+ balance: Decimal,
+ balanceDate: Date,
+ time: Date = new Date(),
+ user: User,
+): Transaction => {
+ const decay = calculateDecay(balance, balanceDate, time)
+ // const balance = decay.balance.minus(lastTransaction.balance)
+ const decayDbTransaction: dbTransaction = {
+ id: -1,
+ userId: -1,
+ previous: -1,
+ typeId: TransactionTypeId.DECAY,
+ amount: decay.decay ? decay.decay : new Decimal(0), // new Decimal(0), // this kinda is wrong, but helps with the frontend query
+ balance: decay.balance,
+ balanceDate: time,
+ decay: decay.decay ? decay.decay : new Decimal(0),
+ decayStart: decay.start,
+ memo: '',
+ creationDate: null,
+ ...defaultModelFunctions,
+ }
+ return new Transaction(decayDbTransaction, user)
+}
+
+export { virtualLinkTransaction, virtualDecayTransaction }
diff --git a/backend/src/webhook/elopage.ts b/backend/src/webhook/elopage.ts
index 80fa90933..d5eaef521 100644
--- a/backend/src/webhook/elopage.ts
+++ b/backend/src/webhook/elopage.ts
@@ -28,80 +28,71 @@
*/
import { LoginElopageBuys } from '@entity/LoginElopageBuys'
-import { LoginUser } from '@entity/LoginUser'
-import { UserResolver } from '../graphql/resolver/UserResolver'
+import { UserResolver } from '@/graphql/resolver/UserResolver'
+import { User as dbUser } from '@entity/User'
export const elopageWebhook = async (req: any, res: any): Promise => {
+ // eslint-disable-next-line no-console
+ console.log('Elopage Hook received', req.body)
res.status(200).end() // Responding is important
+ const loginElopageBuy = new LoginElopageBuys()
- const loginElopgaeBuy = new LoginElopageBuys()
- let firstName = ''
- let lastName = ''
- const entries = req.body.split('&')
- entries.foreach((entry: string) => {
- const keyVal = entry.split('=')
- if (keyVal.length !== 2) {
- throw new Error(`Error parsing entry '${entry}'`)
- }
- const key = keyVal[0]
- const val = decodeURIComponent(keyVal[1]).replace('+', ' ').trim()
- switch (key) {
- case 'product[affiliate_program_id]':
- loginElopgaeBuy.affiliateProgramId = parseInt(val)
- break
- case 'publisher[id]':
- loginElopgaeBuy.publisherId = parseInt(val)
- break
- case 'order_id':
- loginElopgaeBuy.orderId = parseInt(val)
- break
- case 'product_id':
- loginElopgaeBuy.productId = parseInt(val)
- break
- case 'product[price]':
- // TODO: WHAT THE ACTUAL FUK? Please save this as float in the future directly in the database
- loginElopgaeBuy.productPrice = Math.trunc(parseFloat(val) * 100)
- break
- case 'payer[email]':
- loginElopgaeBuy.payerEmail = val
- break
- case 'publisher[email]':
- loginElopgaeBuy.publisherEmail = val
- break
- case 'payment_state':
- loginElopgaeBuy.payed = val === 'paid'
- break
- case 'success_date':
- loginElopgaeBuy.successDate = new Date(val)
- break
- case 'event':
- loginElopgaeBuy.event = val
- break
- case 'membership[id]':
- // TODO this was never set on login_server - its unclear if this is the correct value
- loginElopgaeBuy.elopageUserId = parseInt(val)
- break
- case 'payer[first_name]':
- firstName = val
- break
- case 'payer[last_name]':
- lastName = val
- break
- default:
- // eslint-disable-next-line no-console
- console.log(`Unknown Elopage Value '${entry}'`)
- }
- })
+ const {
+ payer,
+ product,
+ publisher,
+ // eslint-disable-next-line camelcase
+ order_id,
+ // eslint-disable-next-line camelcase
+ product_id,
+ // eslint-disable-next-line camelcase
+ payment_state,
+ // eslint-disable-next-line camelcase
+ success_date,
+ event,
+ membership,
+ } = req.body
// Do not process certain events
- if (['lesson.viewed', 'lesson.completed', 'lesson.commented'].includes(loginElopgaeBuy.event)) {
+ if (['lesson.viewed', 'lesson.completed', 'lesson.commented'].includes(event)) {
// eslint-disable-next-line no-console
console.log('User viewed, completed or commented - not saving hook')
return
}
+ if (!product || !publisher || !membership || !payer) {
+ // eslint-disable-next-line no-console
+ console.log('Elopage Hook: Not an event we can process')
+ return
+ }
+
+ loginElopageBuy.affiliateProgramId = parseInt(product.affiliate_program_id) || null
+ loginElopageBuy.publisherId = parseInt(publisher.id) || null
+ loginElopageBuy.orderId = parseInt(order_id) || null
+ loginElopageBuy.productId = parseInt(product_id) || null
+ // TODO: WHAT THE ACTUAL FUK? Please save this as float in the future directly in the database
+ const productPrice = parseFloat(product.price)
+ loginElopageBuy.productPrice = productPrice ? Math.trunc(productPrice * 100) : 0
+ loginElopageBuy.payerEmail = payer.email
+ loginElopageBuy.publisherEmail = publisher.email
+ // eslint-disable-next-line camelcase
+ loginElopageBuy.payed = payment_state === 'paid'
+ loginElopageBuy.successDate = new Date(success_date)
+ loginElopageBuy.event = event
+ // TODO this was never set on login_server - its unclear if this is the correct value
+ loginElopageBuy.elopageUserId = parseInt(membership.id) || null
+
+ const firstName = payer.first_name
+ const lastName = payer.last_name
+
// Save the hook data
- await loginElopgaeBuy.save()
+ try {
+ await LoginElopageBuys.save(loginElopageBuy)
+ } catch (error) {
+ // eslint-disable-next-line no-console
+ console.log('Error saving LoginElopageBuy', error)
+ return
+ }
// create user for certain products
/*
@@ -112,8 +103,11 @@ export const elopageWebhook = async (req: any, res: any): Promise => {
Business-Mitgliedschaft, 43960
Förderbeitrag: 49106
*/
- if ([36001, 43741, 43870, 43944, 43960, 49106].includes(loginElopgaeBuy.productId)) {
- const email = loginElopgaeBuy.payerEmail
+ if (
+ loginElopageBuy.productId &&
+ [36001, 43741, 43870, 43944, 43960, 49106].includes(loginElopageBuy.productId)
+ ) {
+ const email = loginElopageBuy.payerEmail
const VALIDATE_EMAIL = /^[a-zA-Z0-9.!#$%&?*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
const VALIDATE_NAME = /^<>&;]{2,}$/
@@ -133,7 +127,7 @@ export const elopageWebhook = async (req: any, res: any): Promise => {
}
// Do we already have such a user?
- if ((await LoginUser.count({ email })) !== 0) {
+ if ((await dbUser.count({ email })) !== 0) {
// eslint-disable-next-line no-console
console.log(`Did not create User - already exists with email: ${email}`)
return
@@ -145,7 +139,7 @@ export const elopageWebhook = async (req: any, res: any): Promise => {
email,
firstName,
lastName,
- publisherId: loginElopgaeBuy.publisherId,
+ publisherId: loginElopageBuy.publisherId || 0, // This seemed to be the default value if not set
})
} catch (error) {
// eslint-disable-next-line no-console
diff --git a/backend/test/helpers.ts b/backend/test/helpers.ts
new file mode 100644
index 000000000..51610b07e
--- /dev/null
+++ b/backend/test/helpers.ts
@@ -0,0 +1,48 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
+
+import { createTestClient } from 'apollo-server-testing'
+import createServer from '../src/server/createServer'
+import { initialize } from '@dbTools/helpers'
+import { entities } from '@entity/index'
+
+export const headerPushMock = jest.fn((t) => {
+ context.token = t.value
+})
+
+const context = {
+ token: '',
+ setHeaders: {
+ push: headerPushMock,
+ forEach: jest.fn(),
+ },
+}
+
+export const cleanDB = async () => {
+ // this only works as lond we do not have foreign key constraints
+ for (let i = 0; i < entities.length; i++) {
+ await resetEntity(entities[i])
+ }
+}
+
+export const testEnvironment = async () => {
+ const server = await createServer(context)
+ const con = server.con
+ const testClient = createTestClient(server.apollo)
+ const mutate = testClient.mutate
+ const query = testClient.query
+ await initialize()
+ return { mutate, query, con }
+}
+
+export const resetEntity = async (entity: any) => {
+ const items = await entity.find({ withDeleted: true })
+ if (items.length > 0) {
+ const ids = items.map((i: any) => i.id)
+ await entity.delete(ids)
+ }
+}
+
+export const resetToken = () => {
+ context.token = ''
+}
diff --git a/backend/test/testSetup.ts b/backend/test/testSetup.ts
new file mode 100644
index 000000000..d42836626
--- /dev/null
+++ b/backend/test/testSetup.ts
@@ -0,0 +1,7 @@
+/* eslint-disable no-console */
+
+// disable console.info for apollo log
+
+// eslint-disable-next-line @typescript-eslint/no-empty-function
+console.info = () => {}
+jest.setTimeout(1000000)
diff --git a/backend/tsconfig.json b/backend/tsconfig.json
index eabdc75b0..f81bf22d5 100644
--- a/backend/tsconfig.json
+++ b/backend/tsconfig.json
@@ -45,10 +45,17 @@
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
- // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
+ "baseUrl": ".", /* Base directory to resolve non-absolute module names. */
"paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
- "@entity/*": ["../database/entity/*"],
- "@dbTools/*": ["../database/src/*"]
+ "@/*": ["src/*"],
+ "@arg/*": ["src/graphql/arg/*"],
+ "@enum/*": ["src/graphql/enum/*"],
+ "@model/*": ["src/graphql/model/*"],
+ "@repository/*": ["src/typeorm/repository/*"],
+ "@test/*": ["test/*"],
+ /* external */
+ "@dbTools/*": ["../database/src/*", "../../database/build/src/*"],
+ "@entity/*": ["../database/entity/*", "../../database/build/entity/*"]
},
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
@@ -76,7 +83,7 @@
{
"path": "../database/tsconfig.json",
// add 'prepend' if you want to include the referenced project in your output file
- // "prepend": true,
+ // "prepend": true
}
]
}
diff --git a/backend/yarn.lock b/backend/yarn.lock
index b46bc183d..4134e1d37 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -2,7 +2,7 @@
# yarn lockfile v1
-"@apollo/protobufjs@1.2.2":
+"@apollo/protobufjs@1.2.2", "@apollo/protobufjs@^1.0.3":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.2.tgz#4bd92cd7701ccaef6d517cdb75af2755f049f87c"
integrity sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==
@@ -677,11 +677,6 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
-"@sqltools/formatter@^1.2.2":
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20"
- integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg==
-
"@szmarczak/http-timer@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
@@ -816,6 +811,11 @@
"@types/qs" "*"
"@types/serve-static" "*"
+"@types/faker@^5.5.9":
+ version "5.5.9"
+ resolved "https://registry.yarnpkg.com/@types/faker/-/faker-5.5.9.tgz#588ede92186dc557bff8341d294335d50d255f0c"
+ integrity sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA==
+
"@types/fs-capacitor@*":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz#17113e25817f584f58100fb7a08eed288b81956e"
@@ -918,6 +918,18 @@
"@types/koa-compose" "*"
"@types/node" "*"
+"@types/lodash.clonedeep@^4.5.6":
+ version "4.5.6"
+ resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz#3b6c40a0affe0799a2ce823b440a6cf33571d32b"
+ integrity sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==
+ dependencies:
+ "@types/lodash" "*"
+
+"@types/lodash@*":
+ version "4.14.178"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8"
+ integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==
+
"@types/long@^4.0.0":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
@@ -1012,11 +1024,6 @@
dependencies:
"@types/yargs-parser" "*"
-"@types/zen-observable@0.8.3":
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3"
- integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==
-
"@typescript-eslint/eslint-plugin@^4.28.0":
version "4.33.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276"
@@ -1191,21 +1198,11 @@ ansi-escapes@^4.2.1:
dependencies:
type-fest "^0.21.3"
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
- integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
- integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -1225,11 +1222,6 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-any-promise@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
- integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
-
anymatch@^3.0.3, anymatch@~3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
@@ -1273,6 +1265,24 @@ apollo-link@^1.2.14:
tslib "^1.9.3"
zen-observable-ts "^0.8.21"
+apollo-log@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/apollo-log/-/apollo-log-1.1.0.tgz#e21287c917cf735b77adc06f07034f965e9b24de"
+ integrity sha512-TciLu+85LSqk7t7ZGKrYN5jFiCcRMLujBjrLiOQGHGgVVkvmKlwK0oELSS9kiHQIhTq23p8qVVWb08spLpQ7Jw==
+ dependencies:
+ apollo-server-plugin-base "^0.10.4"
+ chalk "^4.1.0"
+ fast-safe-stringify "^2.0.7"
+ loglevelnext "^4.0.1"
+ nanoid "^3.1.20"
+
+apollo-reporting-protobuf@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.2.tgz#5572866be9b77f133916532b10e15fbaa4158304"
+ integrity sha512-WJTJxLM+MRHNUxt1RTl4zD0HrLdH44F2mDzMweBj1yHL0kSt8I1WwoiF/wiGVSpnG48LZrBegCaOJeuVbJTbtw==
+ dependencies:
+ "@apollo/protobufjs" "^1.0.3"
+
apollo-reporting-protobuf@^0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.8.0.tgz#ae9d967934d3d8ed816fc85a0d8068ef45c371b9"
@@ -1280,6 +1290,13 @@ apollo-reporting-protobuf@^0.8.0:
dependencies:
"@apollo/protobufjs" "1.2.2"
+apollo-server-caching@^0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.5.3.tgz#cf42a77ad09a46290a246810075eaa029b5305e1"
+ integrity sha512-iMi3087iphDAI0U2iSBE9qtx9kQoMMEWr6w+LwXruBD95ek9DWyj7OeC2U/ngLjRsXM43DoBDXlu7R+uMjahrQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
apollo-server-caching@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.7.0.tgz#e6d1e68e3bb571cba63a61f60b434fb771c6ff39"
@@ -1318,7 +1335,7 @@ apollo-server-core@^2.25.2:
subscriptions-transport-ws "^0.9.19"
uuid "^8.0.0"
-apollo-server-env@^3.1.0:
+apollo-server-env@^3.0.0, apollo-server-env@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-3.1.0.tgz#0733c2ef50aea596cc90cf40a53f6ea2ad402cd0"
integrity sha512-iGdZgEOAuVop3vb0F2J3+kaBVi4caMoxefHosxmgzAbbSpvWehB8Y1QiSyyMeouYC38XNVk5wnZl+jdGSsWsIQ==
@@ -1354,6 +1371,13 @@ apollo-server-express@^2.25.2:
subscriptions-transport-ws "^0.9.19"
type-is "^1.6.16"
+apollo-server-plugin-base@^0.10.4:
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.10.4.tgz#fbf73f64f95537ca9f9639dd7c535eb5eeb95dcd"
+ integrity sha512-HRhbyHgHFTLP0ImubQObYhSgpmVH4Rk1BinnceZmwudIVLKrqayIVOELdyext/QnSmmzg5W7vF3NLGBcVGMqDg==
+ dependencies:
+ apollo-server-types "^0.6.3"
+
apollo-server-plugin-base@^0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.13.0.tgz#3f85751a420d3c4625355b6cb3fbdd2acbe71f13"
@@ -1368,6 +1392,15 @@ apollo-server-testing@^2.25.2:
dependencies:
apollo-server-core "^2.25.2"
+apollo-server-types@^0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.6.3.tgz#f7aa25ff7157863264d01a77d7934aa6e13399e8"
+ integrity sha512-aVR7SlSGGY41E1f11YYz5bvwA89uGmkVUtzMiklDhZ7IgRJhysT5Dflt5IuwDxp+NdQkIhVCErUXakopocFLAg==
+ dependencies:
+ apollo-reporting-protobuf "^0.6.2"
+ apollo-server-caching "^0.5.3"
+ apollo-server-env "^3.0.0"
+
apollo-server-types@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.9.0.tgz#ccf550b33b07c48c72f104fbe2876232b404848b"
@@ -1395,11 +1428,6 @@ apollo-utilities@^1.0.1, apollo-utilities@^1.3.0:
ts-invariant "^0.4.0"
tslib "^1.10.0"
-app-root-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad"
- integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==
-
arg@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
@@ -1412,11 +1440,6 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
-argparse@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
- integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -1542,17 +1565,12 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-base64-js@^1.3.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-body-parser@1.19.0, body-parser@^1.18.3, body-parser@^1.19.0:
+body-parser@1.19.0, body-parser@^1.18.3:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
@@ -1637,14 +1655,6 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-buffer@^6.0.3:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
- integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
- dependencies:
- base64-js "^1.3.1"
- ieee754 "^1.2.1"
-
busboy@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
@@ -1698,17 +1708,6 @@ caniuse-lite@^1.0.30001264:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz#0613c9e6c922e422792e6fcefdf9a3afeee4f8c3"
integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==
-chalk@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
chalk@^2.0.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
@@ -1775,18 +1774,6 @@ cli-boxes@^2.2.1:
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
-cli-highlight@^2.1.11:
- version "2.1.11"
- resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf"
- integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==
- dependencies:
- chalk "^4.0.0"
- highlight.js "^10.7.1"
- mz "^2.4.0"
- parse5 "^5.1.1"
- parse5-htmlparser2-tree-adapter "^6.0.0"
- yargs "^16.0.0"
-
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@@ -1979,6 +1966,11 @@ debug@^3.2.6, debug@^3.2.7:
dependencies:
ms "^2.1.1"
+decimal.js-light@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934"
+ integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==
+
decimal.js@^10.2.1:
version "10.3.1"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
@@ -2110,11 +2102,6 @@ dotenv@^10.0.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
-dotenv@^8.2.0:
- version "8.6.0"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
- integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
-
duplexer3@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
@@ -2223,7 +2210,7 @@ escape-html@~1.0.3:
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
@@ -2528,6 +2515,11 @@ express@^4.17.1:
utils-merge "1.0.1"
vary "~1.1.2"
+faker@^5.5.3:
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.3.tgz#c57974ee484431b25205c2c8dc09fda861e51e0e"
+ integrity sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==
+
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -2559,6 +2551,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+fast-safe-stringify@^2.0.7:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
+ integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
+
fastq@^1.6.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
@@ -2573,11 +2570,6 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
-figlet@^1.1.1:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634"
- integrity sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==
-
file-entry-cache@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@@ -2865,13 +2857,6 @@ graphql@^15.5.1:
resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.6.1.tgz#9125bdf057553525da251e19e96dab3d3855ddfc"
integrity sha512-3i5lu0z6dRvJ48QP9kFxBkJ7h4Kso7PS8eahyTFz5Jm6CvQfLtNIE8LX9N6JLnXTuwR+sIYnXzaWp6anOg0QQw==
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
- dependencies:
- ansi-regex "^2.0.0"
-
has-bigints@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
@@ -2911,11 +2896,6 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
-highlight.js@^10.7.1:
- version "10.7.3"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
- integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
-
hosted-git-info@^2.1.4:
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
@@ -3007,11 +2987,6 @@ iconv-lite@^0.6.2:
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
-ieee754@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
- integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
ignore-by-default@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
@@ -3751,13 +3726,6 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
-js-yaml@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
- integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
- dependencies:
- argparse "^2.0.1"
-
jsdom@^16.6.0:
version "16.7.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
@@ -4008,6 +3976,11 @@ loglevel@^1.6.7:
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197"
integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==
+loglevelnext@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-4.0.1.tgz#4406c6348c243a35272ac75d7d8e4e60ecbcd011"
+ integrity sha512-/tlMUn5wqgzg9msy0PiWc+8fpVXEuYPq49c2RGyw2NAh0hSrgq6j/Z3YPnwWsILMoFJ+ZT6ePHnWUonkjDnq2Q==
+
long@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
@@ -4129,21 +4102,6 @@ minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-mkdirp@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-module-alias@^2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0"
- integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==
-
-moment@^2.29.1:
- version "2.29.1"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
- integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
-
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -4178,15 +4136,6 @@ mysql2@^2.3.0:
seq-queue "^0.0.5"
sqlstring "^2.3.2"
-mz@^2.4.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
- integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
- dependencies:
- any-promise "^1.0.0"
- object-assign "^4.0.1"
- thenify-all "^1.0.0"
-
named-placeholders@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8"
@@ -4194,6 +4143,11 @@ named-placeholders@^1.1.2:
dependencies:
lru-cache "^4.1.3"
+nanoid@^3.1.20:
+ version "3.1.32"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.32.tgz#8f96069e6239cc0a9ae8c0d3b41a3b4933a88c0a"
+ integrity sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==
+
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -4291,7 +4245,7 @@ nwsapi@^2.2.0:
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
-object-assign@^4, object-assign@^4.0.1:
+object-assign@^4:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -4444,11 +4398,6 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parent-require@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977"
- integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=
-
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -4457,23 +4406,11 @@ parse-json@^4.0.0:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
-parse5-htmlparser2-tree-adapter@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
- integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==
- dependencies:
- parse5 "^6.0.1"
-
-parse5@6.0.1, parse5@^6.0.1:
+parse5@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-parse5@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
- integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
-
parseurl@^1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -4831,11 +4768,6 @@ safe-buffer@^5.0.1:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-sax@>=0.6.0:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
saxes@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
@@ -5080,13 +5012,6 @@ string.prototype.trimstart@^1.0.4:
call-bind "^1.0.2"
define-properties "^1.1.3"
-strip-ansi@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
- dependencies:
- ansi-regex "^2.0.0"
-
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -5130,11 +5055,6 @@ subscriptions-transport-ws@^0.9.19:
symbol-observable "^1.0.4"
ws "^5.2.0 || ^6.0.0 || ^7.0.0"
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
- integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-
supports-color@^5.3.0, supports-color@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -5208,20 +5128,6 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-thenify-all@^1.0.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
- integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
- dependencies:
- thenify ">= 3.1.0 < 4"
-
-"thenify@>= 3.1.0 < 4":
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
- integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
- dependencies:
- any-promise "^1.0.0"
-
throat@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
@@ -5331,6 +5237,16 @@ tsconfig-paths@^3.11.0:
minimist "^1.2.0"
strip-bom "^3.0.0"
+tsconfig-paths@^3.14.0:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz#4fcc48f9ccea8826c41b9ca093479de7f5018976"
+ integrity sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.1"
+ minimist "^1.2.0"
+ strip-bom "^3.0.0"
+
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.3:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
@@ -5406,29 +5322,6 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
-typeorm@^0.2.38:
- version "0.2.38"
- resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.38.tgz#2af08079919f6ab04cd17017f9faa2c8d5cd566f"
- integrity sha512-M6Y3KQcAREQcphOVJciywf4mv6+A0I/SeR+lWNjKsjnQ+a3XcMwGYMGL0Jonsx3H0Cqlf/3yYqVki1jIXSK/xg==
- dependencies:
- "@sqltools/formatter" "^1.2.2"
- app-root-path "^3.0.0"
- buffer "^6.0.3"
- chalk "^4.1.0"
- cli-highlight "^2.1.11"
- debug "^4.3.1"
- dotenv "^8.2.0"
- glob "^7.1.6"
- js-yaml "^4.0.0"
- mkdirp "^1.0.4"
- reflect-metadata "^0.1.13"
- sha.js "^2.4.11"
- tslib "^2.1.0"
- xml2js "^0.4.23"
- yargonaut "^1.1.4"
- yargs "^17.0.1"
- zen-observable-ts "^1.0.0"
-
typescript@^4.3.4:
version "4.4.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324"
@@ -5694,19 +5587,6 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-xml2js@^0.4.23:
- version "0.4.23"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
- integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~11.0.0"
-
-xmlbuilder@~11.0.0:
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
- integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
-
xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
@@ -5735,21 +5615,12 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yargonaut@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c"
- integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==
- dependencies:
- chalk "^1.1.1"
- figlet "^1.1.1"
- parent-require "^1.0.0"
-
yargs-parser@20.x, yargs-parser@^20.2.2:
version "20.2.9"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-yargs@^16.0.0, yargs@^16.2.0:
+yargs@^16.2.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
@@ -5762,19 +5633,6 @@ yargs@^16.0.0, yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
-yargs@^17.0.1:
- version "17.2.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea"
- integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==
- dependencies:
- cliui "^7.0.2"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.0"
- y18n "^5.0.5"
- yargs-parser "^20.2.2"
-
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
@@ -5788,15 +5646,7 @@ zen-observable-ts@^0.8.21:
tslib "^1.9.3"
zen-observable "^0.8.0"
-zen-observable-ts@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83"
- integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==
- dependencies:
- "@types/zen-observable" "0.8.3"
- zen-observable "0.8.15"
-
-zen-observable@0.8.15, zen-observable@^0.8.0:
+zen-observable@^0.8.0:
version "0.8.15"
resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15"
integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==
diff --git a/community_server/.gitignore b/community_server/.gitignore
deleted file mode 100644
index 633978598..000000000
--- a/community_server/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-config/app.php
-logs/
-src/GPBMetadata/
-tmp/
-vendor/
-websrc/node_modules/
-websrc/package-lock.json
-mithril_client/
-websrc/src/less-files.css
-
diff --git a/community_server/.gitmodules b/community_server/.gitmodules
deleted file mode 100644
index 8499eaac6..000000000
--- a/community_server/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "src/protobuf"]
- path = src/protobuf
- url = git@github.com:gradido/gradido_protocol.git
diff --git a/community_server/Dockerfile b/community_server/Dockerfile
deleted file mode 100644
index c553137c6..000000000
--- a/community_server/Dockerfile
+++ /dev/null
@@ -1,30 +0,0 @@
-FROM phpdockerio/php74-fpm as community_server
-
-# install php fpm
-RUN apt-get update \
- && apt-get -y --no-install-recommends install curl unzip php7.4-curl php7.4-fpm php7.4-mbstring php7.4-intl php7.4-xml php7.4-pdo php7.4-mysql php7.4-xdebug \
- && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
-
-WORKDIR /var/www/cakephp
-RUN mkdir logs && mkdir tmp && chmod 777 logs && chmod 777 tmp
-COPY ./community_server/ .
-COPY ./configs/community_server/app.php ./config/
-
-RUN composer update
-RUN composer dump-autoload
-
-######### special for code coverage and testing
-FROM community_server as test
-
-
-RUN apt-get update \
- && apt-get -y --no-install-recommends install php7.4-xdebug \
- && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
-
-
-ENV XDEBUG_MODE=coverage
-#RUN composer require --dev rregeer/phpunit-coverage-check
-
-#CMD ./vendor/bin/phpunit --coverage-clover=./webroot/coverage/clover.xml
-CMD ./vendor/bin/phpunit --coverage-text=./webroot/coverage/coverage.info
-
diff --git a/community_server/README.md b/community_server/README.md
deleted file mode 100644
index 61f89d306..000000000
--- a/community_server/README.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# CakePHP Application Skeleton
-
-[](https://travis-ci.org/cakephp/app)
-[](https://packagist.org/packages/cakephp/app)
-
-A skeleton for creating applications with [CakePHP](https://cakephp.org) 3.x.
-
-The framework source code can be found here: [cakephp/cakephp](https://github.com/cakephp/cakephp).
-
-## Installation
-
-1. Download [Composer](https://getcomposer.org/doc/00-intro.md) or update `composer self-update`.
-2. Run `php composer.phar create-project --prefer-dist cakephp/app [app_name]`.
-
-If Composer is installed globally, run
-
-```bash
-composer create-project --prefer-dist cakephp/app
-```
-
-In case you want to use a custom app dir name (e.g. `/myapp/`):
-
-```bash
-composer create-project --prefer-dist cakephp/app myapp
-```
-
-You can now either use your machine's webserver to view the default home page, or start
-up the built-in webserver with:
-
-```bash
-bin/cake server -p 8765
-```
-
-Then visit `http://localhost:8765` to see the welcome page.
-
-## Update
-
-Since this skeleton is a starting point for your application and various files
-would have been modified as per your needs, there isn't a way to provide
-automated upgrades, so you have to do any updates manually.
-
-## Configuration
-
-Read and edit `config/app.php` and setup the `'Datasources'` and any other
-configuration relevant for your application.
-
-## Layout
-
-The app skeleton uses a subset of [Foundation](http://foundation.zurb.com/) (v5) CSS
-framework by default. You can, however, replace it with any other library or
-custom styles.
diff --git a/community_server/bin/cake b/community_server/bin/cake
deleted file mode 100755
index 4b696c883..000000000
--- a/community_server/bin/cake
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env sh
-################################################################################
-#
-# Cake is a shell script for invoking CakePHP shell commands
-#
-# CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
-# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
-#
-# Licensed under The MIT License
-# For full copyright and license information, please see the LICENSE.txt
-# Redistributions of files must retain the above copyright notice.
-#
-# @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
-# @link https://cakephp.org CakePHP(tm) Project
-# @since 1.2.0
-# @license https://opensource.org/licenses/mit-license.php MIT License
-#
-################################################################################
-
-# Canonicalize by following every symlink of the given name recursively
-canonicalize() {
- NAME="$1"
- if [ -f "$NAME" ]
- then
- DIR=$(dirname -- "$NAME")
- NAME=$(cd -P "$DIR" > /dev/null && pwd -P)/$(basename -- "$NAME")
- fi
- while [ -h "$NAME" ]; do
- DIR=$(dirname -- "$NAME")
- SYM=$(readlink "$NAME")
- NAME=$(cd "$DIR" > /dev/null && cd "$(dirname -- "$SYM")" > /dev/null && pwd)/$(basename -- "$SYM")
- done
- echo "$NAME"
-}
-
-# Find a CLI version of PHP
-findCliPhp() {
- for TESTEXEC in php php-cli /usr/local/bin/php
- do
- SAPI=$(echo "= PHP_SAPI ?>" | $TESTEXEC 2>/dev/null)
- if [ "$SAPI" = "cli" ]
- then
- echo $TESTEXEC
- return
- fi
- done
- echo "Failed to find a CLI version of PHP; falling back to system standard php executable" >&2
- echo "php";
-}
-
-# If current path is a symlink, resolve to real path
-realname="$0"
-if [ -L "$realname" ]
-then
- realname=$(readlink -f "$0")
-fi
-
-CONSOLE=$(dirname -- "$(canonicalize "$realname")")
-APP=$(dirname "$CONSOLE")
-
-# If your CLI PHP is somewhere that this doesn't find, you can define a PHP environment
-# variable with the correct path in it.
-if [ -z "$PHP" ]
-then
- PHP=$(findCliPhp)
-fi
-
-if [ "$(basename "$realname")" != 'cake' ]
-then
- exec "$PHP" "$CONSOLE"/cake.php "$(basename "$realname")" "$@"
-else
- exec "$PHP" "$CONSOLE"/cake.php "$@"
-fi
-
-exit
diff --git a/community_server/bin/cake.bat b/community_server/bin/cake.bat
deleted file mode 100644
index ad1378229..000000000
--- a/community_server/bin/cake.bat
+++ /dev/null
@@ -1,27 +0,0 @@
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-::
-:: Cake is a Windows batch script for invoking CakePHP shell commands
-::
-:: CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
-:: Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
-::
-:: Licensed under The MIT License
-:: Redistributions of files must retain the above copyright notice.
-::
-:: @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
-:: @link https://cakephp.org CakePHP(tm) Project
-:: @since 2.0.0
-:: @license https://opensource.org/licenses/mit-license.php MIT License
-::
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-@echo off
-
-SET app=%0
-SET lib=%~dp0
-
-php "%lib%cake.php" %*
-
-echo.
-
-exit /B %ERRORLEVEL%
diff --git a/community_server/bin/cake.php b/community_server/bin/cake.php
deleted file mode 100644
index 320ee3643..000000000
--- a/community_server/bin/cake.php
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/php -q
-run($argv));
diff --git a/community_server/composer.json b/community_server/composer.json
deleted file mode 100644
index dbd031048..000000000
--- a/community_server/composer.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "name": "cakephp/app",
- "description": "CakePHP skeleton app",
- "homepage": "https://cakephp.org",
- "type": "project",
- "license": "MIT",
- "require": {
- "php": ">=5.6",
- "cakephp/cakephp": "3.9.*",
- "cakephp/plugin-installer": "^1.0",
- "datto/json-rpc": "^6.0",
- "google/protobuf": "v3.10.*",
- "mobiledetect/mobiledetectlib": "2.*",
- "paragonie/sodium_compat": "^1.11",
- "tuupola/base58": "^2.0"
- },
- "require-dev": {
- "cakephp/bake": "^1.9.0",
- "cakephp/cakephp-codesniffer": "^3.0",
- "cakephp/debug_kit": "^3.17.0",
- "josegonzalez/dotenv": "3.*",
- "phpunit/phpunit": "^5.7|^6.0",
- "psy/psysh": "@stable"
- },
- "suggest": {
- "markstory/asset_compress": "An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.",
- "dereuromark/cakephp-ide-helper": "After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan compatibility."
- },
- "autoload": {
- "psr-4": {
- "App\\": "src/",
- "" : "src/",
- "GPBMetadata\\Gradido\\": "src/Model/Messages/GPBMetadata/Gradido/",
- "Proto\\Gradido\\" : "src/Model/Messages/Proto/Gradido/"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "App\\Test\\": "tests/",
- "Cake\\Test\\": "vendor/cakephp/cakephp/tests/"
- }
- },
- "scripts": {
- "post-install-cmd": "App\\Console\\Installer::postInstall",
- "post-create-project-cmd": "App\\Console\\Installer::postInstall",
- "check": [
- "@test",
- "@cs-check"
- ],
- "cs-check": "phpcs --colors -p --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/",
- "cs-fix": "phpcbf --colors --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/",
- "test": "phpunit --colors=always"
- },
- "prefer-stable": true,
- "config": {
- "sort-packages": true
- }
-}
diff --git a/community_server/composer.lock b/community_server/composer.lock
deleted file mode 100644
index 41674bb88..000000000
--- a/community_server/composer.lock
+++ /dev/null
@@ -1,5577 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
- "This file is @generated automatically"
- ],
- "content-hash": "8a3d1923190a6c9d6066359057844457",
- "packages": [
- {
- "name": "aura/intl",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/auraphp/Aura.Intl.git",
- "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/auraphp/Aura.Intl/zipball/7fce228980b19bf4dee2d7bbd6202a69b0dde926",
- "reference": "7fce228980b19bf4dee2d7bbd6202a69b0dde926",
- "shasum": ""
- },
- "require": {
- "php": "^5.6|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Aura\\Intl\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Aura.Intl Contributors",
- "homepage": "https://github.com/auraphp/Aura.Intl/contributors"
- }
- ],
- "description": "The Aura Intl package provides internationalization tools, specifically message translation.",
- "homepage": "https://github.com/auraphp/Aura.Intl",
- "keywords": [
- "g11n",
- "globalization",
- "i18n",
- "internationalization",
- "intl",
- "l10n",
- "localization"
- ],
- "support": {
- "issues": "https://github.com/auraphp/Aura.Intl/issues",
- "source": "https://github.com/auraphp/Aura.Intl/tree/3.x"
- },
- "time": "2017-01-20T05:00:11+00:00"
- },
- {
- "name": "cakephp/cakephp",
- "version": "3.9.8",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/cakephp.git",
- "reference": "b0e43e810132a8b1f66cf89b038b54c090811c32"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/cakephp/zipball/b0e43e810132a8b1f66cf89b038b54c090811c32",
- "reference": "b0e43e810132a8b1f66cf89b038b54c090811c32",
- "shasum": ""
- },
- "require": {
- "aura/intl": "^3.0.0",
- "cakephp/chronos": "^1.0.1",
- "ext-intl": "*",
- "ext-mbstring": "*",
- "laminas/laminas-diactoros": "^1.4.0",
- "paragonie/random_compat": "^1.4|^2.0|9.99.99",
- "php": ">=5.6.0,<8.0.0",
- "psr/log": "^1.0.0",
- "psr/simple-cache": "^1.0.0"
- },
- "conflict": {
- "phpunit/phpunit": "<5.7"
- },
- "replace": {
- "cakephp/cache": "self.version",
- "cakephp/collection": "self.version",
- "cakephp/core": "self.version",
- "cakephp/database": "self.version",
- "cakephp/datasource": "self.version",
- "cakephp/event": "self.version",
- "cakephp/filesystem": "self.version",
- "cakephp/form": "self.version",
- "cakephp/i18n": "self.version",
- "cakephp/log": "self.version",
- "cakephp/orm": "self.version",
- "cakephp/utility": "self.version",
- "cakephp/validation": "self.version"
- },
- "require-dev": {
- "cakephp/cakephp-codesniffer": "^3.0",
- "cakephp/chronos": "^1.2.1",
- "paragonie/csp-builder": "^1.4|^2.3",
- "phpunit/phpunit": "^5.7.14|^6.0"
- },
- "suggest": {
- "ext-curl": "To enable more efficient network calls in Http\\Client.",
- "ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.",
- "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()",
- "paragonie/csp-builder": "CSP builder, to use the CSP Middleware"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cake\\": "src/"
- },
- "files": [
- "src/Core/functions.php",
- "src/Collection/functions.php",
- "src/I18n/functions.php",
- "src/Utility/bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/cakephp/graphs/contributors"
- }
- ],
- "description": "The CakePHP framework",
- "homepage": "https://cakephp.org",
- "keywords": [
- "conventions over configuration",
- "dry",
- "form",
- "framework",
- "mvc",
- "orm",
- "psr-7",
- "rapid-development",
- "validation"
- ],
- "support": {
- "forum": "https://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/cakephp/issues",
- "source": "https://github.com/cakephp/cakephp"
- },
- "time": "2021-03-10T02:10:31+00:00"
- },
- {
- "name": "cakephp/chronos",
- "version": "1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/chronos.git",
- "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/chronos/zipball/ba2bab98849e7bf29b02dd634ada49ab36472959",
- "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "require-dev": {
- "athletic/athletic": "~0.1",
- "cakephp/cakephp-codesniffer": "^3.0",
- "phpbench/phpbench": "@dev",
- "phpunit/phpunit": "<6.0 || ^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cake\\Chronos\\": "src/"
- },
- "files": [
- "src/carbon_compat.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Brian Nesbitt",
- "email": "brian@nesbot.com",
- "homepage": "http://nesbot.com"
- },
- {
- "name": "The CakePHP Team",
- "homepage": "http://cakephp.org"
- }
- ],
- "description": "A simple API extension for DateTime.",
- "homepage": "http://cakephp.org",
- "keywords": [
- "date",
- "datetime",
- "time"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/chronos/issues",
- "source": "https://github.com/cakephp/chronos"
- },
- "time": "2019-11-30T02:33:19+00:00"
- },
- {
- "name": "cakephp/migrations",
- "version": "2.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/migrations.git",
- "reference": "7fa4f1f8a4cd90df59cd8e3a46958c822abe457e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/migrations/zipball/7fa4f1f8a4cd90df59cd8e3a46958c822abe457e",
- "reference": "7fa4f1f8a4cd90df59cd8e3a46958c822abe457e",
- "shasum": ""
- },
- "require": {
- "cakephp/cache": "^3.6.0",
- "cakephp/orm": "^3.6.0",
- "php": ">=5.6.0",
- "robmorgan/phinx": "^0.10.3|^0.11.1"
- },
- "require-dev": {
- "cakephp/bake": "^1.7.0",
- "cakephp/cakephp": "^3.6.0",
- "cakephp/cakephp-codesniffer": "^3.0",
- "phpunit/phpunit": "^5.7.14|^6.0"
- },
- "suggest": {
- "cakephp/bake": "If you want to generate migrations."
- },
- "type": "cakephp-plugin",
- "autoload": {
- "psr-4": {
- "Migrations\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/migrations/graphs/contributors"
- }
- ],
- "description": "Database Migration plugin for CakePHP based on Phinx",
- "homepage": "https://github.com/cakephp/migrations",
- "keywords": [
- "cakephp",
- "migrations"
- ],
- "support": {
- "forum": "https://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/migrations/issues",
- "source": "https://github.com/cakephp/migrations"
- },
- "time": "2020-02-05T15:00:43+00:00"
- },
- {
- "name": "cakephp/plugin-installer",
- "version": "1.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/plugin-installer.git",
- "reference": "e27027aa2d3d8ab64452c6817629558685a064cb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/plugin-installer/zipball/e27027aa2d3d8ab64452c6817629558685a064cb",
- "reference": "e27027aa2d3d8ab64452c6817629558685a064cb",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.0 || ^2.0",
- "php": ">=5.6.0"
- },
- "require-dev": {
- "cakephp/cakephp-codesniffer": "^3.3",
- "composer/composer": "^2.0",
- "phpunit/phpunit": "^5.7 || ^6.5 || ^8.5 || ^9.3"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "Cake\\Composer\\Plugin"
- },
- "autoload": {
- "psr-4": {
- "Cake\\Composer\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://cakephp.org"
- }
- ],
- "description": "A composer installer for CakePHP 3.0+ plugins.",
- "support": {
- "issues": "https://github.com/cakephp/plugin-installer/issues",
- "source": "https://github.com/cakephp/plugin-installer/tree/1.3.1"
- },
- "time": "2020-10-29T04:00:42+00:00"
- },
- {
- "name": "datto/json-rpc",
- "version": "6.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/datto/php-json-rpc.git",
- "reference": "ad4d735f48d80c6b53f7405e5007d97c996533f6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/datto/php-json-rpc/zipball/ad4d735f48d80c6b53f7405e5007d97c996533f6",
- "reference": "ad4d735f48d80c6b53f7405e5007d97c996533f6",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Datto\\JsonRpc\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-3.0+"
- ],
- "authors": [
- {
- "name": "Spencer Mortensen",
- "email": "smortensen@datto.com",
- "homepage": "http://spencermortensen.com",
- "role": "Developer"
- }
- ],
- "description": "Fully unit-tested JSON-RPC 2.0 for PHP",
- "homepage": "http://datto.com",
- "keywords": [
- "json",
- "json-rpc",
- "jsonrpc",
- "php",
- "php-json-rpc",
- "rpc"
- ],
- "support": {
- "issues": "https://github.com/datto/php-json-rpc/issues",
- "source": "https://github.com/datto/php-json-rpc/tree/6.1.0"
- },
- "time": "2020-02-28T23:54:06+00:00"
- },
- {
- "name": "google/protobuf",
- "version": "v3.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/protocolbuffers/protobuf-php.git",
- "reference": "5dffdd2c84112e6c91fd84f92e3df96649426881"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/5dffdd2c84112e6c91fd84f92e3df96649426881",
- "reference": "5dffdd2c84112e6c91fd84f92e3df96649426881",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.0"
- },
- "require-dev": {
- "phpunit/phpunit": ">=4.8.0"
- },
- "suggest": {
- "ext-bcmath": "Need to support JSON deserialization"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Google\\Protobuf\\": "src/Google/Protobuf",
- "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "proto library for PHP",
- "homepage": "https://developers.google.com/protocol-buffers/",
- "keywords": [
- "proto"
- ],
- "support": {
- "issues": "https://github.com/protocolbuffers/protobuf-php/issues",
- "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.10.0"
- },
- "time": "2019-10-03T20:08:37+00:00"
- },
- {
- "name": "laminas/laminas-diactoros",
- "version": "1.8.7p2",
- "source": {
- "type": "git",
- "url": "https://github.com/laminas/laminas-diactoros.git",
- "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6991c1af7c8d2c8efee81b22ba97024781824aaa",
- "reference": "6991c1af7c8d2c8efee81b22ba97024781824aaa",
- "shasum": ""
- },
- "require": {
- "laminas/laminas-zendframework-bridge": "^1.0",
- "php": "^5.6 || ^7.0",
- "psr/http-message": "^1.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "replace": {
- "zendframework/zend-diactoros": "~1.8.7.0"
- },
- "require-dev": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "laminas/laminas-coding-standard": "~1.0",
- "php-http/psr7-integration-tests": "dev-master",
- "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-release-1.8": "1.8.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions/create_uploaded_file.php",
- "src/functions/marshal_headers_from_sapi.php",
- "src/functions/marshal_method_from_sapi.php",
- "src/functions/marshal_protocol_version_from_sapi.php",
- "src/functions/marshal_uri_from_sapi.php",
- "src/functions/normalize_server.php",
- "src/functions/normalize_uploaded_files.php",
- "src/functions/parse_cookie_header.php",
- "src/functions/create_uploaded_file.legacy.php",
- "src/functions/marshal_headers_from_sapi.legacy.php",
- "src/functions/marshal_method_from_sapi.legacy.php",
- "src/functions/marshal_protocol_version_from_sapi.legacy.php",
- "src/functions/marshal_uri_from_sapi.legacy.php",
- "src/functions/normalize_server.legacy.php",
- "src/functions/normalize_uploaded_files.legacy.php",
- "src/functions/parse_cookie_header.legacy.php"
- ],
- "psr-4": {
- "Laminas\\Diactoros\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "PSR HTTP Message implementations",
- "homepage": "https://laminas.dev",
- "keywords": [
- "http",
- "laminas",
- "psr",
- "psr-7"
- ],
- "support": {
- "chat": "https://laminas.dev/chat",
- "docs": "https://docs.laminas.dev/laminas-diactoros/",
- "forum": "https://discourse.laminas.dev",
- "issues": "https://github.com/laminas/laminas-diactoros/issues",
- "rss": "https://github.com/laminas/laminas-diactoros/releases.atom",
- "source": "https://github.com/laminas/laminas-diactoros"
- },
- "time": "2020-03-23T15:28:28+00:00"
- },
- {
- "name": "laminas/laminas-zendframework-bridge",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/laminas/laminas-zendframework-bridge.git",
- "reference": "6ede70583e101030bcace4dcddd648f760ddf642"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642",
- "reference": "6ede70583e101030bcace4dcddd648f760ddf642",
- "shasum": ""
- },
- "require": {
- "php": "^5.6 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3",
- "squizlabs/php_codesniffer": "^3.5"
- },
- "type": "library",
- "extra": {
- "laminas": {
- "module": "Laminas\\ZendFrameworkBridge"
- }
- },
- "autoload": {
- "files": [
- "src/autoload.php"
- ],
- "psr-4": {
- "Laminas\\ZendFrameworkBridge\\": "src//"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "Alias legacy ZF class names to Laminas Project equivalents.",
- "keywords": [
- "ZendFramework",
- "autoloading",
- "laminas",
- "zf"
- ],
- "support": {
- "forum": "https://discourse.laminas.dev/",
- "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
- "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
- "source": "https://github.com/laminas/laminas-zendframework-bridge"
- },
- "funding": [
- {
- "url": "https://funding.communitybridge.org/projects/laminas-project",
- "type": "community_bridge"
- }
- ],
- "time": "2020-09-14T14:23:00+00:00"
- },
- {
- "name": "mobiledetect/mobiledetectlib",
- "version": "2.8.37",
- "source": {
- "type": "git",
- "url": "https://github.com/serbanghita/Mobile-Detect.git",
- "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/9841e3c46f5bd0739b53aed8ac677fa712943df7",
- "reference": "9841e3c46f5bd0739b53aed8ac677fa712943df7",
- "shasum": ""
- },
- "require": {
- "php": ">=5.0.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8.35||~5.7"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "Mobile_Detect.php"
- ],
- "psr-0": {
- "Detection": "namespaced/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Serban Ghita",
- "email": "serbanghita@gmail.com",
- "homepage": "http://mobiledetect.net",
- "role": "Developer"
- }
- ],
- "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
- "homepage": "https://github.com/serbanghita/Mobile-Detect",
- "keywords": [
- "detect mobile devices",
- "mobile",
- "mobile detect",
- "mobile detector",
- "php mobile detect"
- ],
- "support": {
- "issues": "https://github.com/serbanghita/Mobile-Detect/issues",
- "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.37"
- },
- "funding": [
- {
- "url": "https://github.com/serbanghita",
- "type": "github"
- }
- ],
- "time": "2021-02-19T21:22:57+00:00"
- },
- {
- "name": "paragonie/random_compat",
- "version": "v9.99.99",
- "source": {
- "type": "git",
- "url": "https://github.com/paragonie/random_compat.git",
- "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
- "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
- "shasum": ""
- },
- "require": {
- "php": "^7"
- },
- "require-dev": {
- "phpunit/phpunit": "4.*|5.*",
- "vimeo/psalm": "^1"
- },
- "suggest": {
- "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
- },
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com",
- "homepage": "https://paragonie.com"
- }
- ],
- "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
- "keywords": [
- "csprng",
- "polyfill",
- "pseudorandom",
- "random"
- ],
- "support": {
- "email": "info@paragonie.com",
- "issues": "https://github.com/paragonie/random_compat/issues",
- "source": "https://github.com/paragonie/random_compat"
- },
- "time": "2018-07-02T15:55:56+00:00"
- },
- {
- "name": "paragonie/sodium_compat",
- "version": "v1.14.0",
- "source": {
- "type": "git",
- "url": "https://github.com/paragonie/sodium_compat.git",
- "reference": "a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3",
- "reference": "a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3",
- "shasum": ""
- },
- "require": {
- "paragonie/random_compat": ">=1",
- "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8"
- },
- "require-dev": {
- "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9"
- },
- "suggest": {
- "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.",
- "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
- },
- "type": "library",
- "autoload": {
- "files": [
- "autoload.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "ISC"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com"
- },
- {
- "name": "Frank Denis",
- "email": "jedisct1@pureftpd.org"
- }
- ],
- "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists",
- "keywords": [
- "Authentication",
- "BLAKE2b",
- "ChaCha20",
- "ChaCha20-Poly1305",
- "Chapoly",
- "Curve25519",
- "Ed25519",
- "EdDSA",
- "Edwards-curve Digital Signature Algorithm",
- "Elliptic Curve Diffie-Hellman",
- "Poly1305",
- "Pure-PHP cryptography",
- "RFC 7748",
- "RFC 8032",
- "Salpoly",
- "Salsa20",
- "X25519",
- "XChaCha20-Poly1305",
- "XSalsa20-Poly1305",
- "Xchacha20",
- "Xsalsa20",
- "aead",
- "cryptography",
- "ecdh",
- "elliptic curve",
- "elliptic curve cryptography",
- "encryption",
- "libsodium",
- "php",
- "public-key cryptography",
- "secret-key cryptography",
- "side-channel resistant"
- ],
- "support": {
- "issues": "https://github.com/paragonie/sodium_compat/issues",
- "source": "https://github.com/paragonie/sodium_compat/tree/v1.14.0"
- },
- "time": "2020-12-03T16:26:19+00:00"
- },
- {
- "name": "psr/container",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
- "support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.1"
- },
- "time": "2021-03-05T17:36:06+00:00"
- },
- {
- "name": "psr/http-message",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-message.git",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP messages",
- "homepage": "https://github.com/php-fig/http-message",
- "keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-message/tree/master"
- },
- "time": "2016-08-06T14:39:51+00:00"
- },
- {
- "name": "psr/log",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
- "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Log\\": "Psr/Log/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
- "keywords": [
- "log",
- "psr",
- "psr-3"
- ],
- "support": {
- "source": "https://github.com/php-fig/log/tree/1.1.3"
- },
- "time": "2020-03-23T09:12:05+00:00"
- },
- {
- "name": "psr/simple-cache",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/simple-cache.git",
- "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
- "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\SimpleCache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interfaces for simple caching",
- "keywords": [
- "cache",
- "caching",
- "psr",
- "psr-16",
- "simple-cache"
- ],
- "support": {
- "source": "https://github.com/php-fig/simple-cache/tree/master"
- },
- "time": "2017-10-23T01:57:42+00:00"
- },
- {
- "name": "robmorgan/phinx",
- "version": "0.11.7",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/phinx.git",
- "reference": "3cdde73e0c33c410e076108b3e1603fabb5b330d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/phinx/zipball/3cdde73e0c33c410e076108b3e1603fabb5b330d",
- "reference": "3cdde73e0c33c410e076108b3e1603fabb5b330d",
- "shasum": ""
- },
- "require": {
- "cakephp/collection": "^3.7",
- "cakephp/database": "^3.7",
- "php": ">=5.6",
- "symfony/config": "^3.4|^4.0|^5.0",
- "symfony/console": "^3.4|^4.0|^5.0",
- "symfony/yaml": "^3.4|^4.0|^5.0"
- },
- "require-dev": {
- "cakephp/cakephp-codesniffer": "^3.0",
- "ext-json": "*",
- "phpunit/phpunit": ">=5.7,<8.0",
- "sebastian/comparator": ">=1.2.3"
- },
- "suggest": {
- "ext-json": "Install if using JSON configuration format",
- "symfony/yaml": "Install if using YAML configuration format"
- },
- "bin": [
- "bin/phinx"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Phinx\\": "src/Phinx/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Rob Morgan",
- "email": "robbym@gmail.com",
- "homepage": "https://robmorgan.id.au",
- "role": "Lead Developer"
- },
- {
- "name": "Woody Gilk",
- "email": "woody.gilk@gmail.com",
- "homepage": "https://shadowhand.me",
- "role": "Developer"
- },
- {
- "name": "Richard Quadling",
- "email": "rquadling@gmail.com",
- "role": "Developer"
- },
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/phinx/graphs/contributors",
- "role": "Developer"
- }
- ],
- "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
- "homepage": "https://phinx.org",
- "keywords": [
- "database",
- "database migrations",
- "db",
- "migrations",
- "phinx"
- ],
- "support": {
- "issues": "https://github.com/cakephp/phinx/issues",
- "source": "https://github.com/cakephp/phinx/tree/0.11.7"
- },
- "time": "2020-05-09T13:59:05+00:00"
- },
- {
- "name": "symfony/config",
- "version": "v5.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/config.git",
- "reference": "212d54675bf203ff8aef7d8cee8eecfb72f4a263"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/212d54675bf203ff8aef7d8cee8eecfb72f4a263",
- "reference": "212d54675bf203ff8aef7d8cee8eecfb72f4a263",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/filesystem": "^4.4|^5.0",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-php80": "^1.15"
- },
- "conflict": {
- "symfony/finder": "<4.4"
- },
- "require-dev": {
- "symfony/event-dispatcher": "^4.4|^5.0",
- "symfony/finder": "^4.4|^5.0",
- "symfony/messenger": "^4.4|^5.0",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/yaml": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/yaml": "To use the yaml reference dumper"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Config\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/config/tree/v5.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-23T23:58:19+00:00"
- },
- {
- "name": "symfony/console",
- "version": "v5.2.6",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/35f039df40a3b335ebf310f244cb242b3a83ac8d",
- "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.8",
- "symfony/polyfill-php80": "^1.15",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/string": "^5.1"
- },
- "conflict": {
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
- },
- "provide": {
- "psr/log-implementation": "1.0"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "^4.4|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/event-dispatcher": "^4.4|^5.0",
- "symfony/lock": "^4.4|^5.0",
- "symfony/process": "^4.4|^5.0",
- "symfony/var-dumper": "^4.4|^5.0"
- },
- "suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
- "keywords": [
- "cli",
- "command line",
- "console",
- "terminal"
- ],
- "support": {
- "source": "https://github.com/symfony/console/tree/v5.2.6"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-28T09:42:18+00:00"
- },
- {
- "name": "symfony/deprecation-contracts",
- "version": "v2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665",
- "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "files": [
- "function.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/master"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-09-07T11:33:47+00:00"
- },
- {
- "name": "symfony/filesystem",
- "version": "v5.2.6",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "8c86a82f51658188119e62cff0a050a12d09836f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c86a82f51658188119e62cff0a050a12d09836f",
- "reference": "8c86a82f51658188119e62cff0a050a12d09836f",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Filesystem\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides basic utilities for the filesystem",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.2.6"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-28T14:30:26+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
- "reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-ctype": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170",
- "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's grapheme_* functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "grapheme",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248",
- "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
- "reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-php73",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
- "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
- "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/service-contracts",
- "version": "v2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
- "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "psr/container": "^1.0"
- },
- "suggest": {
- "symfony/service-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/service-contracts/tree/master"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-09-07T11:33:47+00:00"
- },
- {
- "name": "symfony/string",
- "version": "v5.2.6",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572",
- "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
- },
- "require-dev": {
- "symfony/error-handler": "^4.4|^5.0",
- "symfony/http-client": "^4.4|^5.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "files": [
- "Resources/functions.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
- "support": {
- "source": "https://github.com/symfony/string/tree/v5.2.6"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-17T17:12:15+00:00"
- },
- {
- "name": "symfony/yaml",
- "version": "v5.2.5",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "298a08ddda623485208506fcee08817807a251dd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/298a08ddda623485208506fcee08817807a251dd",
- "reference": "298a08ddda623485208506fcee08817807a251dd",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-ctype": "~1.8"
- },
- "conflict": {
- "symfony/console": "<4.4"
- },
- "require-dev": {
- "symfony/console": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
- },
- "bin": [
- "Resources/bin/yaml-lint"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Loads and dumps YAML files",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/yaml/tree/v5.2.5"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-06T07:59:01+00:00"
- },
- {
- "name": "tuupola/base58",
- "version": "2.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/tuupola/base58.git",
- "reference": "4cd1a3972679946e87c0746f59ff8f0760240b4c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/tuupola/base58/zipball/4cd1a3972679946e87c0746f59ff8f0760240b4c",
- "reference": "4cd1a3972679946e87c0746f59ff8f0760240b4c",
- "shasum": ""
- },
- "require": {
- "php": "^7.1|^8.0"
- },
- "require-dev": {
- "overtrue/phplint": "^1.0.0",
- "phpbench/phpbench": "^0.13.0",
- "phpstan/phpstan": "^0.12.37",
- "phpunit/phpunit": "^7.0|^8.0|^9.0",
- "squizlabs/php_codesniffer": "^3.0"
- },
- "suggest": {
- "ext-gmp": "GMP extension provides the fastest encoding and decoding."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Tuupola\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mika Tuupola",
- "email": "tuupola@appelsiini.net",
- "homepage": "https://appelsiini.net/",
- "role": "Developer"
- }
- ],
- "description": "Base58 encoder and decoder for arbitrary data",
- "homepage": "https://github.com/tuupola/base58",
- "keywords": [
- "base58"
- ],
- "support": {
- "issues": "https://github.com/tuupola/base58/issues",
- "source": "https://github.com/tuupola/base58/tree/2.1.0"
- },
- "funding": [
- {
- "url": "https://github.com/tuupola",
- "type": "github"
- }
- ],
- "time": "2020-09-09T11:38:20+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "ajgl/breakpoint-twig-extension",
- "version": "0.3.5",
- "source": {
- "type": "git",
- "url": "https://github.com/ajgarlag/AjglBreakpointTwigExtension.git",
- "reference": "9875feea0ac4bc3c9f308c62bae4727669d6052a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ajgarlag/AjglBreakpointTwigExtension/zipball/9875feea0ac4bc3c9f308c62bae4727669d6052a",
- "reference": "9875feea0ac4bc3c9f308c62bae4727669d6052a",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6",
- "twig/twig": "^1.34|^2.0|^3.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.18",
- "symfony/framework-bundle": "^2.7|^3.4|^4.4|^5.2",
- "symfony/phpunit-bridge": "^4.4|^5.2",
- "symfony/twig-bundle": "^2.7|^3.4|^4.4|^5.2"
- },
- "suggest": {
- "ext-xdebug": "The Xdebug extension is required for the breakpoint to work",
- "symfony/framework-bundle": "The framework bundle to integrate the extension into Symfony",
- "symfony/twig-bundle": "The twig bundle to integrate the extension into Symfony"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Ajgl\\Twig\\Extension\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Antonio J. García Lagar",
- "email": "aj@garcialagar.es",
- "homepage": "http://aj.garcialagar.es",
- "role": "developer"
- }
- ],
- "description": "Twig extension to set breakpoints",
- "homepage": "https://github.com/ajgarlag/AjglBreakpointTwigExtension",
- "keywords": [
- "Xdebug",
- "breakpoint",
- "twig"
- ],
- "support": {
- "issues": "https://github.com/ajgarlag/AjglBreakpointTwigExtension/issues",
- "source": "https://github.com/ajgarlag/AjglBreakpointTwigExtension/tree/0.3.5"
- },
- "time": "2021-02-08T10:48:05+00:00"
- },
- {
- "name": "aptoma/twig-markdown",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/aptoma/twig-markdown.git",
- "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/aptoma/twig-markdown/zipball/64a9c5c7418c08faf91c4410b34bdb65fb25c23d",
- "reference": "64a9c5c7418c08faf91c4410b34bdb65fb25c23d",
- "shasum": ""
- },
- "require": {
- "twig/twig": "~1.12"
- },
- "require-dev": {
- "codeclimate/php-test-reporter": "dev-master",
- "erusev/parsedown": "^1.6",
- "knplabs/github-api": "~1.2",
- "league/commonmark": "~0.5",
- "michelf/php-markdown": "~1",
- "phpunit/phpunit": "~4.0",
- "satooshi/php-coveralls": "~0.6"
- },
- "suggest": {
- "knplabs/github-api": "Needed for using GitHub's Markdown engine provided through their API.",
- "michelf/php-markdown": "Original Markdown engine with MarkdownExtra."
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "Aptoma": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Joris Berthelot",
- "email": "joris@berthelot.tel"
- },
- {
- "name": "Gunnar Lium",
- "email": "gunnar@aptoma.com"
- }
- ],
- "description": "Twig extension to work with Markdown content",
- "keywords": [
- "markdown",
- "twig"
- ],
- "support": {
- "issues": "https://github.com/aptoma/twig-markdown/issues",
- "source": "https://github.com/aptoma/twig-markdown/tree/master"
- },
- "time": "2015-10-23T20:27:08+00:00"
- },
- {
- "name": "asm89/twig-cache-extension",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/asm89/twig-cache-extension.git",
- "reference": "13787226956ec766f4770722082288097aebaaf3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/asm89/twig-cache-extension/zipball/13787226956ec766f4770722082288097aebaaf3",
- "reference": "13787226956ec766f4770722082288097aebaaf3",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2",
- "twig/twig": "^1.0|^2.0"
- },
- "require-dev": {
- "doctrine/cache": "~1.0",
- "phpunit/phpunit": "^5.0 || ^4.8.10"
- },
- "suggest": {
- "psr/cache-implementation": "To make use of PSR-6 cache implementation via PsrCacheAdapter."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Alexander",
- "email": "iam.asm89@gmail.com"
- }
- ],
- "description": "Cache fragments of templates directly within Twig.",
- "homepage": "https://github.com/asm89/twig-cache-extension",
- "keywords": [
- "cache",
- "extension",
- "twig"
- ],
- "support": {
- "issues": "https://github.com/asm89/twig-cache-extension/issues",
- "source": "https://github.com/asm89/twig-cache-extension/tree/1.4.0"
- },
- "abandoned": "twig/cache-extension",
- "time": "2020-01-01T20:47:37+00:00"
- },
- {
- "name": "cakephp/bake",
- "version": "1.12.0",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/bake.git",
- "reference": "33e8ee8419ba36c13fa4074c208c93352b5530cf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/bake/zipball/33e8ee8419ba36c13fa4074c208c93352b5530cf",
- "reference": "33e8ee8419ba36c13fa4074c208c93352b5530cf",
- "shasum": ""
- },
- "require": {
- "cakephp/cakephp": "^3.8.0",
- "cakephp/plugin-installer": "^1.0",
- "php": ">=5.6.0",
- "wyrihaximus/twig-view": "^4.3.7"
- },
- "require-dev": {
- "cakephp/cakephp-codesniffer": "^3.0",
- "phpunit/phpunit": "^5.7.14|^6.0"
- },
- "type": "cakephp-plugin",
- "autoload": {
- "psr-4": {
- "Bake\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/bake/graphs/contributors"
- }
- ],
- "description": "Bake plugin for CakePHP 3",
- "homepage": "https://github.com/cakephp/bake",
- "keywords": [
- "bake",
- "cakephp"
- ],
- "support": {
- "forum": "https://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/bake/issues",
- "source": "https://github.com/cakephp/bake"
- },
- "time": "2019-12-07T20:34:43+00:00"
- },
- {
- "name": "cakephp/cakephp-codesniffer",
- "version": "3.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/cakephp-codesniffer.git",
- "reference": "7998a191e787fd5b68cb635d7050cb0d7b55e1a1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/7998a191e787fd5b68cb635d7050cb0d7b55e1a1",
- "reference": "7998a191e787fd5b68cb635d7050cb0d7b55e1a1",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6",
- "squizlabs/php_codesniffer": "^3.0.0"
- },
- "require-dev": {
- "phpunit/phpunit": "<6.0"
- },
- "type": "phpcodesniffer-standard",
- "autoload": {
- "psr-4": {
- "CakePHP\\": "CakePHP/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/cakephp-codesniffer/graphs/contributors"
- }
- ],
- "description": "CakePHP CodeSniffer Standards",
- "homepage": "https://cakephp.org",
- "keywords": [
- "codesniffer",
- "framework"
- ],
- "support": {
- "forum": "https://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/cakephp-codesniffer/issues",
- "source": "https://github.com/cakephp/cakephp-codesniffer"
- },
- "time": "2019-12-07T03:02:34+00:00"
- },
- {
- "name": "cakephp/debug_kit",
- "version": "3.22.4",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/debug_kit.git",
- "reference": "5bec3c49a2b8d9bd12655f2ec35e52ec90befe17"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/5bec3c49a2b8d9bd12655f2ec35e52ec90befe17",
- "reference": "5bec3c49a2b8d9bd12655f2ec35e52ec90befe17",
- "shasum": ""
- },
- "require": {
- "cakephp/cakephp": "^3.7.0",
- "cakephp/chronos": "^1.0.0",
- "cakephp/plugin-installer": "^1.0.0",
- "composer/composer": "^1.3.0",
- "jdorn/sql-formatter": "^1.2.0",
- "php": ">=5.6.0"
- },
- "require-dev": {
- "cakephp/authorization": "^1.3.2",
- "cakephp/cakephp-codesniffer": "^3.0",
- "phpunit/phpunit": "^5.7.14|^6.0"
- },
- "suggest": {
- "ext-pdo_sqlite": "DebugKit needs to store panel data in a database. SQLite is simple and easy to use."
- },
- "type": "cakephp-plugin",
- "autoload": {
- "psr-4": {
- "DebugKit\\": "src/",
- "DebugKit\\Test\\Fixture\\": "tests/Fixture/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mark Story",
- "homepage": "https://mark-story.com",
- "role": "Author"
- },
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/debug_kit/graphs/contributors"
- }
- ],
- "description": "CakePHP Debug Kit",
- "homepage": "https://github.com/cakephp/debug_kit",
- "keywords": [
- "cakephp",
- "debug",
- "kit"
- ],
- "support": {
- "forum": "http://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/debug_kit/issues",
- "source": "https://github.com/cakephp/debug_kit"
- },
- "time": "2020-04-22T17:27:39+00:00"
- },
- {
- "name": "composer/ca-bundle",
- "version": "1.2.9",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/ca-bundle.git",
- "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
- "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
- "shasum": ""
- },
- "require": {
- "ext-openssl": "*",
- "ext-pcre": "*",
- "php": "^5.3.2 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^0.12.55",
- "psr/log": "^1.0",
- "symfony/phpunit-bridge": "^4.2 || ^5",
- "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\CaBundle\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
- "keywords": [
- "cabundle",
- "cacert",
- "certificate",
- "ssl",
- "tls"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.2.9"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-12T12:10:35+00:00"
- },
- {
- "name": "composer/composer",
- "version": "1.10.21",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/composer.git",
- "reference": "04021432f4a9cbd9351dd166b8c193f42c36a39c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/04021432f4a9cbd9351dd166b8c193f42c36a39c",
- "reference": "04021432f4a9cbd9351dd166b8c193f42c36a39c",
- "shasum": ""
- },
- "require": {
- "composer/ca-bundle": "^1.0",
- "composer/semver": "^1.0",
- "composer/spdx-licenses": "^1.2",
- "composer/xdebug-handler": "^1.1",
- "justinrainbow/json-schema": "^5.2.10",
- "php": "^5.3.2 || ^7.0 || ^8.0",
- "psr/log": "^1.0",
- "seld/jsonlint": "^1.4",
- "seld/phar-utils": "^1.0",
- "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0"
- },
- "conflict": {
- "symfony/console": "2.8.38"
- },
- "require-dev": {
- "phpspec/prophecy": "^1.10",
- "symfony/phpunit-bridge": "^4.2"
- },
- "suggest": {
- "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
- "ext-zip": "Enabling the zip extension allows you to unzip archives",
- "ext-zlib": "Allow gzip compression of HTTP requests"
- },
- "bin": [
- "bin/composer"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\": "src/Composer"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
- "homepage": "https://getcomposer.org/",
- "keywords": [
- "autoload",
- "dependency",
- "package"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/composer/issues",
- "source": "https://github.com/composer/composer/tree/1.10.21"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-01T07:16:35+00:00"
- },
- {
- "name": "composer/semver",
- "version": "1.7.2",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/semver.git",
- "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/647490bbcaf7fc4891c58f47b825eb99d19c377a",
- "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.5 || ^5.0.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Semver\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- },
- {
- "name": "Rob Bast",
- "email": "rob.bast@gmail.com",
- "homepage": "http://robbast.nl"
- }
- ],
- "description": "Semver library that offers utilities, version constraint parsing and validation.",
- "keywords": [
- "semantic",
- "semver",
- "validation",
- "versioning"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/1.7.2"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2020-12-03T15:47:16+00:00"
- },
- {
- "name": "composer/spdx-licenses",
- "version": "1.5.5",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/spdx-licenses.git",
- "reference": "de30328a7af8680efdc03e396aad24befd513200"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200",
- "reference": "de30328a7af8680efdc03e396aad24befd513200",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Spdx\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- },
- {
- "name": "Rob Bast",
- "email": "rob.bast@gmail.com",
- "homepage": "http://robbast.nl"
- }
- ],
- "description": "SPDX licenses list and validation library.",
- "keywords": [
- "license",
- "spdx",
- "validator"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/spdx-licenses/issues",
- "source": "https://github.com/composer/spdx-licenses/tree/1.5.5"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2020-12-03T16:04:16+00:00"
- },
- {
- "name": "composer/xdebug-handler",
- "version": "1.4.6",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/xdebug-handler.git",
- "reference": "f27e06cd9675801df441b3656569b328e04aa37c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c",
- "reference": "f27e06cd9675801df441b3656569b328e04aa37c",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.2 || ^7.0 || ^8.0",
- "psr/log": "^1.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^0.12.55",
- "symfony/phpunit-bridge": "^4.2 || ^5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Composer\\XdebugHandler\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "John Stevenson",
- "email": "john-stevenson@blueyonder.co.uk"
- }
- ],
- "description": "Restarts a process without Xdebug.",
- "keywords": [
- "Xdebug",
- "performance"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/1.4.6"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-25T17:01:18+00:00"
- },
- {
- "name": "dnoegel/php-xdg-base-dir",
- "version": "v0.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "XdgBaseDir\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "implementation of xdg base directory specification for php",
- "support": {
- "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
- "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
- },
- "time": "2019-12-04T15:06:13+00:00"
- },
- {
- "name": "doctrine/instantiator",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^8.0",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-10T18:47:58+00:00"
- },
- {
- "name": "jasny/twig-extensions",
- "version": "v1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/jasny/twig-extensions.git",
- "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jasny/twig-extensions/zipball/30bdf3a3903c021544f36332c9d5d4d563527da4",
- "reference": "30bdf3a3903c021544f36332c9d5d4d563527da4",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0.0 | >=5.6.0",
- "twig/twig": "^2.0 | ^1.12"
- },
- "require-dev": {
- "ext-intl": "*",
- "ext-pcre": "*",
- "jasny/php-code-quality": "^2.1",
- "phpunit/phpunit": "^5.0"
- },
- "suggest": {
- "ext-intl": "Required for the use of the LocalDate Twig extension",
- "ext-pcre": "Required for the use of the PCRE Twig extension"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Jasny\\Twig\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Arnold Daniels",
- "email": "arnold@jasny.net",
- "homepage": "http://www.jasny.net"
- }
- ],
- "description": "A set of useful Twig filters",
- "homepage": "http://github.com/jasny/twig-extensions#README",
- "keywords": [
- "PCRE",
- "array",
- "date",
- "datetime",
- "preg",
- "regex",
- "templating",
- "text",
- "time"
- ],
- "support": {
- "issues": "https://github.com/jasny/twig-extensions/issues",
- "source": "https://github.com/jasny/twig-extensions"
- },
- "time": "2017-09-13T07:38:01+00:00"
- },
- {
- "name": "jdorn/sql-formatter",
- "version": "v1.2.17",
- "source": {
- "type": "git",
- "url": "https://github.com/jdorn/sql-formatter.git",
- "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc",
- "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc",
- "shasum": ""
- },
- "require": {
- "php": ">=5.2.4"
- },
- "require-dev": {
- "phpunit/phpunit": "3.7.*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "lib"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jeremy Dorn",
- "email": "jeremy@jeremydorn.com",
- "homepage": "http://jeremydorn.com/"
- }
- ],
- "description": "a PHP SQL highlighting library",
- "homepage": "https://github.com/jdorn/sql-formatter/",
- "keywords": [
- "highlight",
- "sql"
- ],
- "support": {
- "issues": "https://github.com/jdorn/sql-formatter/issues",
- "source": "https://github.com/jdorn/sql-formatter/tree/master"
- },
- "time": "2014-01-12T16:20:24+00:00"
- },
- {
- "name": "josegonzalez/dotenv",
- "version": "3.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/josegonzalez/php-dotenv.git",
- "reference": "f19174d9d7213a6c20e8e5e268aa7dd042d821ca"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/josegonzalez/php-dotenv/zipball/f19174d9d7213a6c20e8e5e268aa7dd042d821ca",
- "reference": "f19174d9d7213a6c20e8e5e268aa7dd042d821ca",
- "shasum": ""
- },
- "require": {
- "m1/env": "2.*",
- "php": ">=5.5.0"
- },
- "require-dev": {
- "php-mock/php-mock-phpunit": "^1.1",
- "satooshi/php-coveralls": "1.*",
- "squizlabs/php_codesniffer": "2.*"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "josegonzalez\\Dotenv": [
- "src",
- "tests"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jose Diaz-Gonzalez",
- "email": "dotenv@josegonzalez.com",
- "homepage": "http://josediazgonzalez.com",
- "role": "Maintainer"
- }
- ],
- "description": "dotenv file parsing for PHP",
- "homepage": "https://github.com/josegonzalez/php-dotenv",
- "keywords": [
- "configuration",
- "dotenv",
- "php"
- ],
- "support": {
- "issues": "https://github.com/josegonzalez/php-dotenv/issues",
- "source": "https://github.com/josegonzalez/php-dotenv/tree/master"
- },
- "time": "2017-09-19T15:49:58+00:00"
- },
- {
- "name": "justinrainbow/json-schema",
- "version": "5.2.10",
- "source": {
- "type": "git",
- "url": "https://github.com/justinrainbow/json-schema.git",
- "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
- "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
- "json-schema/json-schema-test-suite": "1.2.0",
- "phpunit/phpunit": "^4.8.35"
- },
- "bin": [
- "bin/validate-json"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "JsonSchema\\": "src/JsonSchema/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bruno Prieto Reis",
- "email": "bruno.p.reis@gmail.com"
- },
- {
- "name": "Justin Rainbow",
- "email": "justin.rainbow@gmail.com"
- },
- {
- "name": "Igor Wiedler",
- "email": "igor@wiedler.ch"
- },
- {
- "name": "Robert Schönthal",
- "email": "seroscho@googlemail.com"
- }
- ],
- "description": "A library to validate a json schema.",
- "homepage": "https://github.com/justinrainbow/json-schema",
- "keywords": [
- "json",
- "schema"
- ],
- "support": {
- "issues": "https://github.com/justinrainbow/json-schema/issues",
- "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10"
- },
- "time": "2020-05-27T16:41:55+00:00"
- },
- {
- "name": "m1/env",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/m1/Env.git",
- "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/m1/Env/zipball/5c296e3e13450a207e12b343f3af1d7ab569f6f3",
- "reference": "5c296e3e13450a207e12b343f3af1d7ab569f6f3",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "4.*",
- "scrutinizer/ocular": "~1.1",
- "squizlabs/php_codesniffer": "^2.3"
- },
- "suggest": {
- "josegonzalez/dotenv": "For loading of .env",
- "m1/vars": "For loading of configs"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "M1\\Env\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Miles Croxford",
- "email": "hello@milescroxford.com",
- "homepage": "http://milescroxford.com",
- "role": "Developer"
- }
- ],
- "description": "Env is a lightweight library bringing .env file parser compatibility to PHP. In short - it enables you to read .env files with PHP.",
- "homepage": "https://github.com/m1/Env",
- "keywords": [
- ".env",
- "config",
- "dotenv",
- "env",
- "loader",
- "m1",
- "parser",
- "support"
- ],
- "support": {
- "issues": "https://github.com/m1/Env/issues",
- "source": "https://github.com/m1/Env/tree/2.2.0"
- },
- "time": "2020-02-19T09:02:13+00:00"
- },
- {
- "name": "myclabs/deep-copy",
- "version": "1.10.2",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "replace": {
- "myclabs/deep-copy": "self.version"
- },
- "require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- },
- "files": [
- "src/DeepCopy/deep_copy.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Create deep copies (clones) of your objects",
- "keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
- ],
- "support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T09:40:50+00:00"
- },
- {
- "name": "nikic/php-parser",
- "version": "v4.10.4",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e",
- "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=7.0"
- },
- "require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
- },
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.9-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4"
- },
- "time": "2020-12-20T10:01:03+00:00"
- },
- {
- "name": "phar-io/manifest",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0",
- "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-phar": "*",
- "phar-io/version": "^1.0.1",
- "php": "^5.6 || ^7.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "support": {
- "issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/master"
- },
- "time": "2017-03-05T18:14:27+00:00"
- },
- {
- "name": "phar-io/version",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df",
- "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df",
- "shasum": ""
- },
- "require": {
- "php": "^5.6 || ^7.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/master"
- },
- "time": "2017-03-05T17:38:23+00:00"
- },
- {
- "name": "phpdocumentor/reflection-common",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-2.x": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
- }
- ],
- "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
- "homepage": "http://www.phpdoc.org",
- "keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
- },
- "time": "2020-06-27T09:03:43+00:00"
- },
- {
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
- "shasum": ""
- },
- "require": {
- "ext-filter": "*",
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- },
- {
- "name": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
- }
- ],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
- },
- "time": "2020-09-03T19:13:55+00:00"
- },
- {
- "name": "phpdocumentor/type-resolver",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0"
- },
- "require-dev": {
- "ext-tokenizer": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-1.x": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- }
- ],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
- },
- "time": "2020-09-17T18:55:26+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "v1.10.3",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "451c3cd1418cf640de218914901e51b064abb093"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
- "reference": "451c3cd1418cf640de218914901e51b064abb093",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.0.2",
- "php": "^5.3|^7.0",
- "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
- "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
- "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
- },
- "require-dev": {
- "phpspec/phpspec": "^2.5 || ^3.2",
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.10.3"
- },
- "time": "2020-03-05T15:02:03+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "5.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "c89677919c5dd6d3b3852f230a663118762218ac"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac",
- "reference": "c89677919c5dd6d3b3852f230a663118762218ac",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-xmlwriter": "*",
- "php": "^7.0",
- "phpunit/php-file-iterator": "^1.4.2",
- "phpunit/php-text-template": "^1.2.1",
- "phpunit/php-token-stream": "^2.0.1",
- "sebastian/code-unit-reverse-lookup": "^1.0.1",
- "sebastian/environment": "^3.0",
- "sebastian/version": "^2.0.1",
- "theseer/tokenizer": "^1.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "suggest": {
- "ext-xdebug": "^2.5.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.3.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/5.3"
- },
- "time": "2018-04-06T15:36:58+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "1.4.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
- "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "irc": "irc://irc.freenode.net/phpunit",
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5"
- },
- "time": "2017-11-27T13:52:08+00:00"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
- },
- "time": "2015-06-21T13:50:34+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "1.0.9",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
- "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.3 || ^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/master"
- },
- "time": "2017-02-26T11:10:40+00:00"
- },
- {
- "name": "phpunit/php-token-stream",
- "version": "2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "791198a2c6254db10131eecfe8c06670700904db"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
- "reference": "791198a2c6254db10131eecfe8c06670700904db",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": "^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.2.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Wrapper around PHP's tokenizer extension.",
- "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
- "keywords": [
- "tokenizer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
- "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master"
- },
- "abandoned": true,
- "time": "2017-11-27T05:48:46+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "6.5.14",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
- "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "myclabs/deep-copy": "^1.6.1",
- "phar-io/manifest": "^1.0.1",
- "phar-io/version": "^1.0",
- "php": "^7.0",
- "phpspec/prophecy": "^1.7",
- "phpunit/php-code-coverage": "^5.3",
- "phpunit/php-file-iterator": "^1.4.3",
- "phpunit/php-text-template": "^1.2.1",
- "phpunit/php-timer": "^1.0.9",
- "phpunit/phpunit-mock-objects": "^5.0.9",
- "sebastian/comparator": "^2.1",
- "sebastian/diff": "^2.0",
- "sebastian/environment": "^3.1",
- "sebastian/exporter": "^3.1",
- "sebastian/global-state": "^2.0",
- "sebastian/object-enumerator": "^3.0.3",
- "sebastian/resource-operations": "^1.0",
- "sebastian/version": "^2.0.1"
- },
- "conflict": {
- "phpdocumentor/reflection-docblock": "3.0.2",
- "phpunit/dbunit": "<3.0"
- },
- "require-dev": {
- "ext-pdo": "*"
- },
- "suggest": {
- "ext-xdebug": "*",
- "phpunit/php-invoker": "^1.1"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "6.5.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/6.5.14"
- },
- "time": "2019-02-01T05:22:47+00:00"
- },
- {
- "name": "phpunit/phpunit-mock-objects",
- "version": "5.0.10",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f",
- "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.0.5",
- "php": "^7.0",
- "phpunit/php-text-template": "^1.2.1",
- "sebastian/exporter": "^3.1"
- },
- "conflict": {
- "phpunit/phpunit": "<6.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.5.11"
- },
- "suggest": {
- "ext-soap": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Mock Object library for PHPUnit",
- "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
- "keywords": [
- "mock",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues",
- "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/5.0.10"
- },
- "abandoned": true,
- "time": "2018-08-09T05:50:03+00:00"
- },
- {
- "name": "psy/psysh",
- "version": "v0.10.7",
- "source": {
- "type": "git",
- "url": "https://github.com/bobthecow/psysh.git",
- "reference": "a395af46999a12006213c0c8346c9445eb31640c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a395af46999a12006213c0c8346c9445eb31640c",
- "reference": "a395af46999a12006213c0c8346c9445eb31640c",
- "shasum": ""
- },
- "require": {
- "dnoegel/php-xdg-base-dir": "0.1.*",
- "ext-json": "*",
- "ext-tokenizer": "*",
- "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
- "php": "^8.0 || ^7.0 || ^5.5.9",
- "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
- "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.2",
- "hoa/console": "3.17.*"
- },
- "suggest": {
- "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
- "ext-pdo-sqlite": "The doc command requires SQLite to work.",
- "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
- "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
- "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
- },
- "bin": [
- "bin/psysh"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "0.10.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "Psy\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Justin Hileman",
- "email": "justin@justinhileman.info",
- "homepage": "http://justinhileman.com"
- }
- ],
- "description": "An interactive shell for modern PHP.",
- "homepage": "http://psysh.org",
- "keywords": [
- "REPL",
- "console",
- "interactive",
- "shell"
- ],
- "support": {
- "issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.10.7"
- },
- "time": "2021-03-14T02:14:56+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619",
- "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T08:15:22+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "2.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9",
- "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9",
- "shasum": ""
- },
- "require": {
- "php": "^7.0",
- "sebastian/diff": "^2.0 || ^3.0",
- "sebastian/exporter": "^3.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.1.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/master"
- },
- "time": "2018-02-01T13:46:46+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
- "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
- "shasum": ""
- },
- "require": {
- "php": "^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/master"
- },
- "time": "2017-08-03T08:09:46+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
- "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
- "shasum": ""
- },
- "require": {
- "php": "^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/master"
- },
- "time": "2017-07-01T08:51:00+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "3.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e",
- "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0",
- "sebastian/recursion-context": "^3.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:47:53+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
- "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
- "shasum": ""
- },
- "require": {
- "php": "^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0"
- },
- "time": "2017-04-27T15:39:26+00:00"
- },
- {
- "name": "sebastian/object-enumerator",
- "version": "3.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
- "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0",
- "sebastian/object-reflector": "^1.1.1",
- "sebastian/recursion-context": "^3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:40:27+00:00"
- },
- {
- "name": "sebastian/object-reflector",
- "version": "1.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
- "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:37:18+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb",
- "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:34:24+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
- "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/master"
- },
- "time": "2015-07-28T20:34:47+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
- "support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/master"
- },
- "time": "2016-10-03T07:35:21+00:00"
- },
- {
- "name": "seld/jsonlint",
- "version": "1.8.3",
- "source": {
- "type": "git",
- "url": "https://github.com/Seldaek/jsonlint.git",
- "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
- "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57",
- "shasum": ""
- },
- "require": {
- "php": "^5.3 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
- },
- "bin": [
- "bin/jsonlint"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Seld\\JsonLint\\": "src/Seld/JsonLint/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "JSON Linter",
- "keywords": [
- "json",
- "linter",
- "parser",
- "validator"
- ],
- "support": {
- "issues": "https://github.com/Seldaek/jsonlint/issues",
- "source": "https://github.com/Seldaek/jsonlint/tree/1.8.3"
- },
- "funding": [
- {
- "url": "https://github.com/Seldaek",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-11T09:19:24+00:00"
- },
- {
- "name": "seld/phar-utils",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/Seldaek/phar-utils.git",
- "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
- "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Seld\\PharUtils\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be"
- }
- ],
- "description": "PHAR file format utilities, for when PHP phars you up",
- "keywords": [
- "phar"
- ],
- "support": {
- "issues": "https://github.com/Seldaek/phar-utils/issues",
- "source": "https://github.com/Seldaek/phar-utils/tree/master"
- },
- "time": "2020-07-07T18:42:57+00:00"
- },
- {
- "name": "squizlabs/php_codesniffer",
- "version": "3.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
- "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ffced0d2c8fa8e6cdc4d695a743271fab6c38625",
- "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625",
- "shasum": ""
- },
- "require": {
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": ">=5.4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
- },
- "bin": [
- "bin/phpcs",
- "bin/phpcbf"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Greg Sherwood",
- "role": "lead"
- }
- ],
- "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
- "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
- "keywords": [
- "phpcs",
- "standards"
- ],
- "support": {
- "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
- "source": "https://github.com/squizlabs/PHP_CodeSniffer",
- "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
- },
- "time": "2021-04-09T00:54:41+00:00"
- },
- {
- "name": "symfony/finder",
- "version": "v5.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "0d639a0943822626290d169965804f79400e6a04"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04",
- "reference": "0d639a0943822626290d169965804f79400e6a04",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Finder\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Finds files and directories via an intuitive fluent interface",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/finder/tree/v5.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-15T18:55:04+00:00"
- },
- {
- "name": "symfony/process",
- "version": "v5.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/313a38f09c77fbcdc1d223e57d368cea76a2fd2f",
- "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.15"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Process\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Executes commands in sub-processes",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/process/tree/v5.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-27T10:15:41+00:00"
- },
- {
- "name": "symfony/var-dumper",
- "version": "v5.2.6",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-dumper.git",
- "reference": "89412a68ea2e675b4e44f260a5666729f77f668e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89412a68ea2e675b4e44f260a5666729f77f668e",
- "reference": "89412a68ea2e675b4e44f260a5666729f77f668e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.15"
- },
- "conflict": {
- "phpunit/phpunit": "<5.4.3",
- "symfony/console": "<4.4"
- },
- "require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^4.4|^5.0",
- "symfony/process": "^4.4|^5.0",
- "twig/twig": "^2.13|^3.0.4"
- },
- "suggest": {
- "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
- "ext-intl": "To show region name in time zone dump",
- "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions/dump.php"
- ],
- "psr-4": {
- "Symfony\\Component\\VarDumper\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides mechanisms for walking through any arbitrary PHP variable",
- "homepage": "https://symfony.com",
- "keywords": [
- "debug",
- "dump"
- ],
- "support": {
- "source": "https://github.com/symfony/var-dumper/tree/v5.2.6"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-28T09:42:18+00:00"
- },
- {
- "name": "theseer/tokenizer",
- "version": "1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/theseer/tokenizer.git",
- "reference": "75a63c33a8577608444246075ea0af0d052e452a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
- "reference": "75a63c33a8577608444246075ea0af0d052e452a",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- }
- ],
- "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
- "support": {
- "issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/master"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2020-07-12T23:59:07+00:00"
- },
- {
- "name": "twig/twig",
- "version": "v1.44.2",
- "source": {
- "type": "git",
- "url": "https://github.com/twigphp/Twig.git",
- "reference": "138c493c5b8ee7cff3821f80b8896d371366b5fe"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/138c493c5b8ee7cff3821f80b8896d371366b5fe",
- "reference": "138c493c5b8ee7cff3821f80b8896d371366b5fe",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "^1.8"
- },
- "require-dev": {
- "psr/container": "^1.0",
- "symfony/phpunit-bridge": "^4.4.9|^5.0.9"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.44-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Twig_": "lib/"
- },
- "psr-4": {
- "Twig\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com",
- "homepage": "http://fabien.potencier.org",
- "role": "Lead Developer"
- },
- {
- "name": "Twig Team",
- "role": "Contributors"
- },
- {
- "name": "Armin Ronacher",
- "email": "armin.ronacher@active-4.com",
- "role": "Project Founder"
- }
- ],
- "description": "Twig, the flexible, fast, and secure template language for PHP",
- "homepage": "https://twig.symfony.com",
- "keywords": [
- "templating"
- ],
- "support": {
- "issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v1.44.2"
- },
- "funding": [
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/twig/twig",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-05T10:10:05+00:00"
- },
- {
- "name": "umpirsky/twig-php-function",
- "version": "v0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/umpirsky/twig-php-function.git",
- "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/umpirsky/twig-php-function/zipball/53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc",
- "reference": "53b4b1eb0c5eacbd7d66c504b7d809c79b4bedbc",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "twig/twig": "~1.12"
- },
- "require-dev": {
- "phpspec/phpspec": "~2.0",
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "Umpirsky\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Saša Stamenković",
- "email": "umpirsky@gmail.com"
- }
- ],
- "description": "Call (almost) any PHP function from your Twig templates.",
- "support": {
- "issues": "https://github.com/umpirsky/twig-php-function/issues",
- "source": "https://github.com/umpirsky/twig-php-function/tree/master"
- },
- "time": "2016-03-12T16:36:32+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.10.0"
- },
- "time": "2021-03-09T10:59:23+00:00"
- },
- {
- "name": "wyrihaximus/twig-view",
- "version": "4.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/legacy-twig-view.git",
- "reference": "463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/legacy-twig-view/zipball/463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb",
- "reference": "463e1a6ed493d4fe99eaeaaf39d80172b51fc0fb",
- "shasum": ""
- },
- "require": {
- "ajgl/breakpoint-twig-extension": "^0.3.0",
- "aptoma/twig-markdown": "^2.0",
- "asm89/twig-cache-extension": "^1.0",
- "cakephp/cakephp": "^3.7",
- "jasny/twig-extensions": "^1.0",
- "php": "^5.6 || ^7.0",
- "twig/twig": "^1.27",
- "umpirsky/twig-php-function": "0.1"
- },
- "require-dev": {
- "cakephp/bake": "^1.5",
- "cakephp/debug_kit": "^3.0",
- "phake/phake": "^2.3.2",
- "phpunit/phpunit": "^5.7.14",
- "squizlabs/php_codesniffer": "^3.4.0",
- "wyrihaximus/phpunit-class-reflection-helpers": "dev-master"
- },
- "type": "cakephp-plugin",
- "autoload": {
- "psr-4": {
- "WyriHaximus\\TwigView\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Cees-Jan Kiewiet",
- "email": "ceesjank@gmail.com",
- "homepage": "http://wyrihaximus.net/"
- }
- ],
- "description": "Twig powered View for CakePHP3",
- "keywords": [
- "cakephp",
- "cakephp3",
- "twig",
- "view"
- ],
- "support": {
- "issues": "https://github.com/cakephp/legacy-twig-view/issues",
- "source": "https://github.com/cakephp/legacy-twig-view/tree/4.4.0"
- },
- "time": "2021-04-06T15:42:50+00:00"
- }
- ],
- "aliases": [],
- "minimum-stability": "stable",
- "stability-flags": {
- "psy/psysh": 0
- },
- "prefer-stable": true,
- "prefer-lowest": false,
- "platform": {
- "php": ">=5.6"
- },
- "platform-dev": [],
- "plugin-api-version": "2.0.0"
-}
diff --git a/community_server/config/app.default.php b/community_server/config/app.default.php
deleted file mode 100644
index 04c8cede2..000000000
--- a/community_server/config/app.default.php
+++ /dev/null
@@ -1,407 +0,0 @@
- filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),
-
- /**
- * Configure basic information about the application.
- *
- * - namespace - The namespace to find app classes under.
- * - defaultLocale - The default locale for translation, formatting currencies and numbers, date and time.
- * - encoding - The encoding used for HTML + database connections.
- * - base - The base directory the app resides in. If false this
- * will be auto detected.
- * - dir - Name of app directory.
- * - webroot - The webroot directory.
- * - wwwRoot - The file path to webroot.
- * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to
- * use CakePHP pretty URLs, remove these .htaccess
- * files:
- * /.htaccess
- * /webroot/.htaccess
- * And uncomment the baseUrl key below.
- * - fullBaseUrl - A base URL to use for absolute links. When set to false (default)
- * CakePHP generates required value based on `HTTP_HOST` environment variable.
- * However, you can define it manually to optimize performance or if you
- * are concerned about people manipulating the `Host` header.
- * - imageBaseUrl - Web path to the public images directory under webroot.
- * - cssBaseUrl - Web path to the public css directory under webroot.
- * - jsBaseUrl - Web path to the public js directory under webroot.
- * - paths - Configure paths for non class based resources. Supports the
- * `plugins`, `templates`, `locales` subkeys, which allow the definition of
- * paths for plugins, view templates and locale files respectively.
- */
- 'App' => [
- 'namespace' => 'App',
- 'encoding' => env('APP_ENCODING', 'UTF-8'),
- 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
- 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'),
- 'base' => false,
- 'dir' => 'src',
- 'webroot' => 'webroot',
- 'wwwRoot' => WWW_ROOT,
- //'baseUrl' => env('SCRIPT_NAME'),
- 'fullBaseUrl' => false,
- 'imageBaseUrl' => 'img/',
- 'cssBaseUrl' => 'css/',
- 'jsBaseUrl' => 'js/',
- 'paths' => [
- 'plugins' => [ROOT . DS . 'plugins' . DS],
- 'templates' => [APP . 'Template' . DS],
- 'locales' => [APP . 'Locale' . DS],
- ],
- ],
-
- /**
- * Security and encryption configuration
- *
- * - salt - A random string used in security hashing methods.
- * The salt value is also used as the encryption key.
- * You should treat it as extremely sensitive data.
- */
- 'Security' => [
- 'salt' => env('SECURITY_SALT', '__SALT__'),
- ],
-
- /**
- * Apply timestamps with the last modified time to static assets (js, css, images).
- * Will append a querystring parameter containing the time the file was modified.
- * This is useful for busting browser caches.
- *
- * Set to true to apply timestamps when debug is true. Set to 'force' to always
- * enable timestamping regardless of debug value.
- */
- 'Asset' => [
- //'timestamp' => true,
- // 'cacheTime' => '+1 year'
- ],
-
- /**
- * Configure the cache adapters.
- */
- 'Cache' => [
- 'default' => [
- 'className' => FileEngine::class,
- 'path' => CACHE,
- 'url' => env('CACHE_DEFAULT_URL', null),
- ],
-
- /**
- * Configure the cache used for general framework caching.
- * Translation cache files are stored with this configuration.
- * Duration will be set to '+2 minutes' in bootstrap.php when debug = true
- * If you set 'className' => 'Null' core cache will be disabled.
- */
- '_cake_core_' => [
- 'className' => FileEngine::class,
- 'prefix' => 'myapp_cake_core_',
- 'path' => CACHE . 'persistent/',
- 'serialize' => true,
- 'duration' => '+1 years',
- 'url' => env('CACHE_CAKECORE_URL', null),
- ],
-
- /**
- * Configure the cache for model and datasource caches. This cache
- * configuration is used to store schema descriptions, and table listings
- * in connections.
- * Duration will be set to '+2 minutes' in bootstrap.php when debug = true
- */
- '_cake_model_' => [
- 'className' => FileEngine::class,
- 'prefix' => 'myapp_cake_model_',
- 'path' => CACHE . 'models/',
- 'serialize' => true,
- 'duration' => '+1 years',
- 'url' => env('CACHE_CAKEMODEL_URL', null),
- ],
-
- /**
- * Configure the cache for routes. The cached routes collection is built the
- * first time the routes are processed via `config/routes.php`.
- * Duration will be set to '+2 seconds' in bootstrap.php when debug = true
- */
- '_cake_routes_' => [
- 'className' => FileEngine::class,
- 'prefix' => 'myapp_cake_routes_',
- 'path' => CACHE,
- 'serialize' => true,
- 'duration' => '+1 years',
- 'url' => env('CACHE_CAKEROUTES_URL', null),
- ],
- ],
-
- /**
- * Configure the Error and Exception handlers used by your application.
- *
- * By default errors are displayed using Debugger, when debug is true and logged
- * by Cake\Log\Log when debug is false.
- *
- * In CLI environments exceptions will be printed to stderr with a backtrace.
- * In web environments an HTML page will be displayed for the exception.
- * With debug true, framework errors like Missing Controller will be displayed.
- * When debug is false, framework errors will be coerced into generic HTTP errors.
- *
- * Options:
- *
- * - `errorLevel` - int - The level of errors you are interested in capturing.
- * - `trace` - boolean - Whether or not backtraces should be included in
- * logged errors/exceptions.
- * - `log` - boolean - Whether or not you want exceptions logged.
- * - `exceptionRenderer` - string - The class responsible for rendering
- * uncaught exceptions. If you choose a custom class you should place
- * the file for that class in src/Error. This class needs to implement a
- * render method.
- * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that
- * extend one of the listed exceptions will also be skipped for logging.
- * E.g.:
- * `'skipLog' => ['Cake\Http\Exception\NotFoundException', 'Cake\Http\Exception\UnauthorizedException']`
- * - `extraFatalErrorMemory` - int - The number of megabytes to increase
- * the memory limit by when a fatal error is encountered. This allows
- * breathing room to complete logging or error handling.
- */
- 'Error' => [
- 'errorLevel' => E_ALL,
- 'exceptionRenderer' => ExceptionRenderer::class,
- 'skipLog' => [],
- 'log' => true,
- 'trace' => true,
- ],
-
- /**
- * Email configuration.
- *
- * By defining transports separately from delivery profiles you can easily
- * re-use transport configuration across multiple profiles.
- *
- * You can specify multiple configurations for production, development and
- * testing.
- *
- * Each transport needs a `className`. Valid options are as follows:
- *
- * Mail - Send using PHP mail function
- * Smtp - Send using SMTP
- * Debug - Do not send the email, just return the result
- *
- * You can add custom transports (or override existing transports) by adding the
- * appropriate file to src/Mailer/Transport. Transports should be named
- * 'YourTransport.php', where 'Your' is the name of the transport.
- */
- 'EmailTransport' => [
- 'default' => [
- 'className' => MailTransport::class,
- /*
- * The following keys are used in SMTP transports:
- */
- 'host' => 'localhost',
- 'port' => 25,
- 'timeout' => 30,
- 'username' => null,
- 'password' => null,
- 'client' => null,
- 'tls' => null,
- 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
- ],
- ],
-
- /**
- * Email delivery profiles
- *
- * Delivery profiles allow you to predefine various properties about email
- * messages from your application and give the settings a name. This saves
- * duplication across your application and makes maintenance and development
- * easier. Each profile accepts a number of keys. See `Cake\Mailer\Email`
- * for more information.
- */
- 'Email' => [
- 'default' => [
- 'transport' => 'default',
- 'from' => 'you@localhost',
- //'charset' => 'utf-8',
- //'headerCharset' => 'utf-8',
- ],
- ],
-
- /**
- * Connection information used by the ORM to connect
- * to your application's datastores.
- *
- * ### Notes
- * - Drivers include Mysql Postgres Sqlite Sqlserver
- * See vendor\cakephp\cakephp\src\Database\Driver for complete list
- * - Do not use periods in database name - it may lead to error.
- * See https://github.com/cakephp/cakephp/issues/6471 for details.
- * - 'encoding' is recommended to be set to full UTF-8 4-Byte support.
- * E.g set it to 'utf8mb4' in MariaDB and MySQL and 'utf8' for any
- * other RDBMS.
- */
- 'Datasources' => [
- 'default' => [
- 'className' => Connection::class,
- 'driver' => Mysql::class,
- 'persistent' => false,
- 'host' => 'localhost',
- /*
- * CakePHP will use the default DB port based on the driver selected
- * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
- * the following line and set the port accordingly
- */
- //'port' => 'non_standard_port_number',
- 'username' => 'my_app',
- 'password' => 'secret',
- 'database' => 'my_app',
- /*
- * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6).
- */
- //'encoding' => 'utf8mb4',
- 'timezone' => 'UTC',
- 'flags' => [],
- 'cacheMetadata' => true,
- 'log' => false,
-
- /**
- * Set identifier quoting to true if you are using reserved words or
- * special characters in your table or column names. Enabling this
- * setting will result in queries built using the Query Builder having
- * identifiers quoted when creating SQL. It should be noted that this
- * decreases performance because each query needs to be traversed and
- * manipulated before being executed.
- */
- 'quoteIdentifiers' => false,
-
- /**
- * During development, if using MySQL < 5.6, uncommenting the
- * following line could boost the speed at which schema metadata is
- * fetched from the database. It can also be set directly with the
- * mysql configuration directive 'innodb_stats_on_metadata = 0'
- * which is the recommended value in production environments
- */
- //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
-
- 'url' => env('DATABASE_URL', null),
- ],
-
- /**
- * The test connection is used during the test suite.
- */
- 'test' => [
- 'className' => Connection::class,
- 'driver' => Mysql::class,
- 'persistent' => false,
- 'host' => 'localhost',
- //'port' => 'non_standard_port_number',
- 'username' => 'my_app',
- 'password' => 'secret',
- 'database' => 'test_myapp',
- //'encoding' => 'utf8mb4',
- 'timezone' => 'UTC',
- 'cacheMetadata' => true,
- 'quoteIdentifiers' => false,
- 'log' => false,
- //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
- 'url' => env('DATABASE_TEST_URL', null),
- ],
- ],
-
- /**
- * Configures logging options
- */
- 'Log' => [
- 'debug' => [
- 'className' => FileLog::class,
- 'path' => LOGS,
- 'file' => 'debug',
- 'url' => env('LOG_DEBUG_URL', null),
- 'scopes' => false,
- 'levels' => ['notice', 'info', 'debug'],
- ],
- 'error' => [
- 'className' => FileLog::class,
- 'path' => LOGS,
- 'file' => 'error',
- 'url' => env('LOG_ERROR_URL', null),
- 'scopes' => false,
- 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
- ],
- // To enable this dedicated query log, you need set your datasource's log flag to true
- 'queries' => [
- 'className' => FileLog::class,
- 'path' => LOGS,
- 'file' => 'queries',
- 'url' => env('LOG_QUERIES_URL', null),
- 'scopes' => ['queriesLog'],
- ],
- ],
-
- /**
- * Session configuration.
- *
- * Contains an array of settings to use for session configuration. The
- * `defaults` key is used to define a default preset to use for sessions, any
- * settings declared here will override the settings of the default config.
- *
- * ## Options
- *
- * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. Avoid using `.` in cookie names,
- * as PHP will drop sessions from cookies with `.` in the name.
- * - `cookiePath` - The url path for which session cookie is set. Maps to the
- * `session.cookie_path` php.ini config. Defaults to base path of app.
- * - `timeout` - The time in minutes the session should be valid for.
- * Pass 0 to disable checking timeout.
- * Please note that php.ini's session.gc_maxlifetime must be equal to or greater
- * than the largest Session['timeout'] in all served websites for it to have the
- * desired effect.
- * - `defaults` - The default configuration set to use as a basis for your session.
- * There are four built-in options: php, cake, cache, database.
- * - `handler` - Can be used to enable a custom session handler. Expects an
- * array with at least the `engine` key, being the name of the Session engine
- * class to use for managing the session. CakePHP bundles the `CacheSession`
- * and `DatabaseSession` engines.
- * - `ini` - An associative array of additional ini values to set.
- *
- * The built-in `defaults` options are:
- *
- * - 'php' - Uses settings defined in your php.ini.
- * - 'cake' - Saves session files in CakePHP's /tmp directory.
- * - 'database' - Uses CakePHP's database sessions.
- * - 'cache' - Use the Cache class to save sessions.
- *
- * To define a custom session handler, save it at src/Network/Session/.php.
- * Make sure the class implements PHP's `SessionHandlerInterface` and set
- * Session.handler to
- *
- * To use database sessions, load the SQL file located at config/schema/sessions.sql
- */
- 'Session' => [
- 'defaults' => 'php',
- ],
- // Gradido specific configuration
- // Login Server ip and port
- 'LoginServer' => [
- 'host' => 'http://127.0.0.1',
- 'port' => 1201
- ],
- 'API' => [
- 'allowedCaller' => [''] // insert domains or ips from login-server and gdt if they not at localhost
- ],
- 'ServerAdminEmail' => 'info@gradido.net', // email 'from' field for transfer notification emails
- 'noReplyEmail' => 'no-replay@gradido.net', // email sender for creation notification emails to user
-
- 'GroupNode' => false
-];
diff --git a/community_server/config/bootstrap.php b/community_server/config/bootstrap.php
deleted file mode 100644
index 77264ee0a..000000000
--- a/community_server/config/bootstrap.php
+++ /dev/null
@@ -1,212 +0,0 @@
-parse()
-// ->putenv()
-// ->toEnv()
-// ->toServer();
-// }
-
-/*
- * Read configuration file and inject configuration into various
- * CakePHP classes.
- *
- * By default there is only one configuration file. It is often a good
- * idea to create multiple configuration files, and separate the configuration
- * that changes from configuration that does not. This makes deployment simpler.
- */
-try {
- Configure::config('default', new PhpConfig());
- Configure::load('app', 'default', false);
-} catch (\Exception $e) {
- exit($e->getMessage() . "\n");
-}
-
-/*
- * Load an environment local configuration file.
- * You can use a file like app_local.php to provide local overrides to your
- * shared configuration.
- */
-//Configure::load('app_local', 'default');
-
-/*
- * When debug = true the metadata cache should only last
- * for a short time.
- */
-if (Configure::read('debug')) {
- Configure::write('Cache._cake_model_.duration', '+2 minutes');
- Configure::write('Cache._cake_core_.duration', '+2 minutes');
- // disable router cache during development
- Configure::write('Cache._cake_routes_.duration', '+2 seconds');
-}
-
-/*
- * Set the default server timezone. Using UTC makes time calculations / conversions easier.
- * Check http://php.net/manual/en/timezones.php for list of valid timezone strings.
- */
-date_default_timezone_set(Configure::read('App.defaultTimezone'));
-
-/*
- * Configure the mbstring extension to use the correct encoding.
- */
-mb_internal_encoding(Configure::read('App.encoding'));
-
-/*
- * Set the default locale. This controls how dates, number and currency is
- * formatted and sets the default language to use for translations.
- */
-ini_set('intl.default_locale', Configure::read('App.defaultLocale'));
-
-/*
- * Register application error and exception handlers.
- */
-
-$isCli = PHP_SAPI === 'cli';
-
-if ($isCli) {
- (new ConsoleErrorHandler(Configure::read('Error')))->register();
-} else {
- (new ErrorHandler(Configure::read('Error')))->register();
-}
-
-/*
- * Include the CLI bootstrap overrides.
- */
-if ($isCli) {
- require __DIR__ . '/bootstrap_cli.php';
-}
-
-/*
- * Set the full base URL.
- * This URL is used as the base of all absolute links.
- *
- * If you define fullBaseUrl in your config file you can remove this.
- */
-if (!Configure::read('App.fullBaseUrl')) {
- $s = null;
- if (env('HTTPS')) {
- $s = 's';
- }
-
- $httpHost = env('HTTP_HOST');
- if (isset($httpHost)) {
- Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost);
- }
- unset($httpHost, $s);
-}
-
-Cache::setConfig(Configure::consume('Cache'));
-ConnectionManager::setConfig(Configure::consume('Datasources'));
-TransportFactory::setConfig(Configure::consume('EmailTransport'));
-Email::setConfig(Configure::consume('Email'));
-Log::setConfig(Configure::consume('Log'));
-Security::setSalt(Configure::consume('Security.salt'));
-
-/*
- * The default crypto extension in 3.0 is OpenSSL.
- * If you are migrating from 2.x uncomment this code to
- * use a more compatible Mcrypt based implementation
- */
-//Security::engine(new \Cake\Utility\Crypto\Mcrypt());
-
-/*
- * Setup detectors for mobile and tablet.
- */
-ServerRequest::addDetector('mobile', function ($request) {
- $detector = new \Detection\MobileDetect();
-
- return $detector->isMobile();
-});
-ServerRequest::addDetector('tablet', function ($request) {
- $detector = new \Detection\MobileDetect();
-
- return $detector->isTablet();
-});
-
-/*
- * Enable immutable time objects in the ORM.
- *
- * You can enable default locale format parsing by adding calls
- * to `useLocaleParser()`. This enables the automatic conversion of
- * locale specific date formats. For details see
- * @link https://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data
- */
-Type::build('time')
- ->useImmutable();
-Type::build('date')
- ->useImmutable();
-Type::build('datetime')
- ->useImmutable();
-Type::build('timestamp')
- ->useImmutable();
-
-header('Access-Control-Allow-Origin: *');
-header('Access-Control-Allow-Methods: POST, GET, PUT, PATCH, DELETE, OPTIONS');
-header('Access-Control-Allow-Headers: *');
-if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
- exit(0);
-}
-
-/*
- * Custom Inflector rules, can be set to correctly pluralize or singularize
- * table, model, controller names or whatever other string is passed to the
- * inflection functions.
- */
-//Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']);
-//Inflector::rules('irregular', ['red' => 'redlings']);
-//Inflector::rules('uninflected', ['dontinflectme']);
-//Inflector::rules('transliteration', ['/å/' => 'aa']);
diff --git a/community_server/config/bootstrap_cli.php b/community_server/config/bootstrap_cli.php
deleted file mode 100644
index d3679d754..000000000
--- a/community_server/config/bootstrap_cli.php
+++ /dev/null
@@ -1,28 +0,0 @@
- '{{content}}',
- // Container element used by control() when a field has an error.
- 'inputContainerError' => '{{content}}{{error}}
',
- // Label element when inputs are not nested inside the label.
- 'label' => '{{text}} ',
- // Generic input element.
- 'input' => ' ',
- // Textarea input element,
- 'textarea' => '',
- // Error message wrapper elements.
- 'error' => ''
- . '{{content}}'
- . '
',
- // Container for error items.
- 'errorList' => '{{content}}',
- // Error item wrapper.
- 'errorItem' => '{{text}}
'
-];
-/*
-
-
-
-
-
- Amount
-
-
-
- */
diff --git a/community_server/config/nginx/fastcgi.conf b/community_server/config/nginx/fastcgi.conf
deleted file mode 100644
index 238f7869f..000000000
--- a/community_server/config/nginx/fastcgi.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
-fastcgi_param QUERY_STRING $query_string;
-fastcgi_param REQUEST_METHOD $request_method;
-fastcgi_param CONTENT_TYPE $content_type;
-fastcgi_param CONTENT_LENGTH $content_length;
-
-fastcgi_param SCRIPT_NAME $fastcgi_script_name;
-fastcgi_param REQUEST_URI $request_uri;
-fastcgi_param DOCUMENT_URI $document_uri;
-fastcgi_param DOCUMENT_ROOT $document_root;
-fastcgi_param SERVER_PROTOCOL $server_protocol;
-fastcgi_param REQUEST_SCHEME $scheme;
-fastcgi_param HTTPS $https if_not_empty;
-
-fastcgi_param GATEWAY_INTERFACE CGI/1.1;
-fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
-
-fastcgi_param REMOTE_ADDR $remote_addr;
-fastcgi_param REMOTE_PORT $remote_port;
-fastcgi_param SERVER_ADDR $server_addr;
-fastcgi_param SERVER_PORT $server_port;
-fastcgi_param SERVER_NAME $server_name;
-
-# PHP only, required if PHP was built with --enable-force-cgi-redirect
-fastcgi_param REDIRECT_STATUS 200;
\ No newline at end of file
diff --git a/community_server/config/nginx/mime.types b/community_server/config/nginx/mime.types
deleted file mode 100644
index cd3d700ea..000000000
--- a/community_server/config/nginx/mime.types
+++ /dev/null
@@ -1,88 +0,0 @@
-types {
- text/html html htm shtml;
- text/css css;
- text/xml xml;
- image/gif gif;
- image/jpeg jpeg jpg;
- application/javascript js;
- application/atom+xml atom;
- application/rss+xml rss;
-
- text/mathml mml;
- text/plain txt;
- text/vnd.sun.j2me.app-descriptor jad;
- text/vnd.wap.wml wml;
- text/x-component htc;
-
- image/png png;
- image/tiff tif tiff;
- image/vnd.wap.wbmp wbmp;
- image/x-icon ico;
- image/x-jng jng;
- image/x-ms-bmp bmp;
- image/svg+xml svg svgz;
- image/webp webp;
-
- application/font-woff woff;
- application/java-archive jar war ear;
- application/json json;
- application/mac-binhex40 hqx;
- application/msword doc;
- application/pdf pdf;
- application/postscript ps eps ai;
- application/rtf rtf;
- application/vnd.apple.mpegurl m3u8;
- application/vnd.ms-excel xls;
- application/vnd.ms-fontobject eot;
- application/vnd.ms-powerpoint ppt;
- application/vnd.wap.wmlc wmlc;
- application/vnd.google-earth.kml+xml kml;
- application/vnd.google-earth.kmz kmz;
- application/x-7z-compressed 7z;
- application/x-cocoa cco;
- application/x-java-archive-diff jardiff;
- application/x-java-jnlp-file jnlp;
- application/x-makeself run;
- application/x-perl pl pm;
- application/x-pilot prc pdb;
- application/x-rar-compressed rar;
- application/x-redhat-package-manager rpm;
- application/x-sea sea;
- application/x-shockwave-flash swf;
- application/x-stuffit sit;
- application/x-tcl tcl tk;
- application/x-x509-ca-cert der pem crt;
- application/x-xpinstall xpi;
- application/xhtml+xml xhtml;
- application/xspf+xml xspf;
- application/zip zip;
-
- application/octet-stream bin exe dll;
- application/octet-stream deb;
- application/octet-stream dmg;
- application/octet-stream iso img;
- application/octet-stream msi msp msm;
-
- application/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
- application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
- application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
-
- audio/midi mid midi kar;
- audio/mpeg mp3;
- audio/ogg ogg;
- audio/x-m4a m4a;
- audio/x-realaudio ra;
-
- video/3gpp 3gpp 3gp;
- video/mp2t ts;
- video/mp4 mp4;
- video/mpeg mpeg mpg;
- video/quicktime mov;
- video/webm webm;
- video/x-flv flv;
- video/x-m4v m4v;
- video/x-mng mng;
- video/x-ms-asf asx asf;
- video/x-ms-wmv wmv;
- video/x-msvideo avi;
-}
diff --git a/community_server/config/nginx/nginx.conf b/community_server/config/nginx/nginx.conf
deleted file mode 100644
index 197c96167..000000000
--- a/community_server/config/nginx/nginx.conf
+++ /dev/null
@@ -1,86 +0,0 @@
-
-server {
-
- listen 80 ;
- listen [::]:80;
- server_name 0.0.0.0;
-
- #include /etc/nginx/common/protect.conf;
- #include /etc/nginx/common/protect_add_header.conf;
- #include /etc/nginx/common/ssl.conf;
-
-
- root /usr/share/nginx/html/webroot;
- index index.php;
-
- location ~* \.(png|jpg|ico|webp)\$ {
- expires 30d;
- }
-
- location ~* \.(js|css) {
- # expires 1d;
- expires 1d;
- }
-
- location ~ \.php\$ {
- # regex to split $uri to $fastcgi_script_name and $fastcgi_path
- fastcgi_split_path_info ^(.+\.php)(/.+)$;
-
- # Check that the PHP script exists before passing it
- try_files $fastcgi_script_name =404;
-
- # Bypass the fact that try_files resets $fastcgi_path_info
- # see: http://trac.nginx.org/nginx/ticket/321
- set $path_info $fastcgi_path_info;
- fastcgi_param PATH_INFO $path_info;
-
- fastcgi_index index.php;
- include fastcgi.conf;
-
- #fastcgi_pass unix:/run/php/php7.3-fpm.sock;
- fastcgi_pass 127.0.0.1:9000;
-
- }
-
- location ~ /\.ht {
- deny all;
- }
-
- location /account {
- proxy_http_version 1.1;
- proxy_set_header Upgrade \$http_upgrade;
- proxy_set_header Connection 'upgrade';
- proxy_cache_bypass \$http_upgrade;
- proxy_set_header X-Real-IP \$remote_addr;
- proxy_set_header X-Forwarded-For \$remote_addr;
- proxy_set_header Host \$host;
- rewrite /account/(.*) /\$1 break;
-
- #proxy_next_upstream error timeout invalid_header http_502 non_idempotent;
- proxy_pass http://login-server:1200;
- proxy_redirect off;
-
-
- }
-
- location /login_api {
- proxy_http_version 1.1;
- proxy_set_header Upgrade \$http_upgrade;
- proxy_set_header Connection 'upgrade';
- proxy_cache_bypass \$http_upgrade;
- proxy_set_header X-Real-IP \$remote_addr;
- proxy_set_header X-Forwarded-For \$remote_addr;
- proxy_set_header Host \$host;
- rewrite /login_api/(.*) /\$1 break;
-
- proxy_pass http://login-server:1201;
- proxy_redirect off;
- }
-
- location / {
- try_files \$uri \$uri/ /index.php?\$args;
- }
-
-# access_log /var/log/nginx/access.log main;
-
-}
\ No newline at end of file
diff --git a/community_server/config/paths.php b/community_server/config/paths.php
deleted file mode 100644
index 1c8121588..000000000
--- a/community_server/config/paths.php
+++ /dev/null
@@ -1,89 +0,0 @@
- '{{content}}',
- 'input' => ''
- . ' '
- . '
',
- 'error' => ''
- . '{{content}}'
- . '
',
-
- // Container for error items.
- //'errorList' => '',
- 'errorList' => '{{content}}',
-
- // Error item wrapper.
- //'errorItem' => '{{text}} ',
- 'errorItem' => '{{text}}
'
-];
diff --git a/community_server/config/routes.php b/community_server/config/routes.php
deleted file mode 100644
index 20fc1ff62..000000000
--- a/community_server/config/routes.php
+++ /dev/null
@@ -1,160 +0,0 @@
- true
- ]);
-
- // Token check will be skipped when callback returns `true`.
- $csrf->whitelistCallback(function ($request) {
- // Skip token check for API URLs.
- //die($request->getParam('controller'));
- $whitelist = ['JsonRequestHandler', 'ElopageWebhook', 'AppRequests'];
- $ajaxWhitelist = ['TransactionSendCoins', 'TransactionCreations'];
-
- $callerIp = $request->clientIp();
-
- foreach($whitelist as $entry) {
- if($request->getParam('controller') === $entry) {
- if($entry == 'ElopageWebhook' || $entry == 'AppRequests') {
- return true;
- }
- $allowedIpLocalhost = ['127.0.0.1', 'localhost', '', '::1'];
- if(in_array($callerIp, $allowedIpLocalhost)) {
- return true;
- }
- $allowedCaller = Configure::read('API.allowedCaller');
- $ipPerHost = [];
- if($allowedCaller && count($allowedCaller) > 0) {
-
- foreach($allowedCaller as $allowed) {
- $ip = gethostbyname($allowed);
- $ipPerHost[$allowed] = $ip;
- if($ip === $callerIp) return true;
- }
- //die("caller ip: $callerIp ");
- }
- //var_dump(['caller_ip' => $callerIp, 'ips' => $ipPerHost]);
- die(json_encode(['state' => 'error', 'details' => ['caller_ip' => $callerIp, 'ips' => $ipPerHost]]));
- }
- }
- // disable csfr for all ajax requests in ajax whitelisted controller
- foreach($ajaxWhitelist as $entry) {
- if($request->getParam('controller') === $entry) {
- $action = $request->getParam('action');
- if(preg_match('/^ajax/', $action)) {
- return true;
- }
- }
- }
- });
-
- // Register scoped middleware for in scopes.
- $routes->registerMiddleware('csrf', $csrf);
-
- /**
- * Apply a middleware to the current route scope.
- * Requires middleware to be registered via `Application::routes()` with `registerMiddleware()`
- */
- $routes->applyMiddleware('csrf');
-
- /**
- * Here, we are connecting '/' (base path) to a controller called 'Pages',
- * its action called 'display', and we pass a param to select the view file
- * to use (in this case, src/Template/Pages/home.ctp)...
- */
- //$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
- $routes->connect('/', ['controller' => 'Dashboard', 'action' => 'index']);
- $routes->connect('/api/:action/*', ['controller' => 'AppRequests'], ['routeClass' => 'DashedRoute']);
- //$routes->connect('/client', ['controller' => 'Pages', 'action' => 'display', 'js']);
- $routes->connect('/server', ['controller' => 'Dashboard', 'action' => 'serverIndex']);
- $routes->connect('/client', ['controller' => 'Pages', 'action' => 'display', 'vue']);
- $routes->connect('/vue-dev', ['controller' => 'Pages', 'action' => 'display', 'vue-dev']);
- //$routes->connect('/', 'https://gradido2.dario-rekowski.de/account', array('status' => 303));
-
- /**
- * ...and connect the rest of 'Pages' controller's URLs.
- */
- $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
-
- /**
- * Connect catchall routes for all controllers.
- *
- * Using the argument `DashedRoute`, the `fallbacks` method is a shortcut for
- *
- * ```
- * $routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'DashedRoute']);
- * $routes->connect('/:controller/:action/*', [], ['routeClass' => 'DashedRoute']);
- * ```
- *
- * Any route class can be used with this method, such as:
- * - DashedRoute
- * - InflectedRoute
- * - Route
- * - Or your own route class
- *
- * You can remove these routes once you've connected the
- * routes you want in your application.
- */
- $routes->fallbacks(DashedRoute::class);
-});
-
-/**
- * If you need a different set of middleware or none at all,
- * open new scope and define routes there.
- *
- * ```
- * Router::scope('/api', function (RouteBuilder $routes) {
- * // No $routes->applyMiddleware() here.
- * // Connect API actions here.
- * });
- * ```
- */
diff --git a/community_server/config/schema/i18n.sql b/community_server/config/schema/i18n.sql
deleted file mode 100644
index e59d1e651..000000000
--- a/community_server/config/schema/i18n.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
-#
-# Licensed under The MIT License
-# For full copyright and license information, please see the LICENSE.txt
-# Redistributions of files must retain the above copyright notice.
-# MIT License (https://opensource.org/licenses/mit-license.php)
-
-CREATE TABLE i18n (
- id int NOT NULL auto_increment,
- locale varchar(6) NOT NULL,
- model varchar(255) NOT NULL,
- foreign_key int(10) NOT NULL,
- field varchar(255) NOT NULL,
- content text,
- PRIMARY KEY (id),
- UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field),
- INDEX I18N_FIELD(model, foreign_key, field)
-);
diff --git a/community_server/config/schema/sessions.sql b/community_server/config/schema/sessions.sql
deleted file mode 100644
index 1aa0a0f54..000000000
--- a/community_server/config/schema/sessions.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
-#
-# Licensed under The MIT License
-# For full copyright and license information, please see the LICENSE.txt
-# Redistributions of files must retain the above copyright notice.
-# MIT License (https://opensource.org/licenses/mit-license.php)
-
-CREATE TABLE `sessions` (
- `id` char(40) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
- `created` datetime DEFAULT CURRENT_TIMESTAMP, -- optional, requires MySQL 5.6.5+
- `modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- optional, requires MySQL 5.6.5+
- `data` blob DEFAULT NULL, -- for PostgreSQL use bytea instead of blob
- `expires` int(10) unsigned DEFAULT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
diff --git a/community_server/copy_to_www.sh b/community_server/copy_to_www.sh
deleted file mode 100755
index f6519919f..000000000
--- a/community_server/copy_to_www.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-[! -z "${FOLDER_NAME}"] && FOLDER_NAME=community_server
-
-COLOR_GREEN="\033[0;32m"
-COLOR_YELLOW="\e[33m"
-COLOR_NONE="\033[0m"
-
-SCRIPT=`realpath -s $0`
-SCRIPTPATH=`dirname $SCRIPT`
-#echo -e "script: $SCRIPT, Path: $SCRIPTPATH "
-
-cd /var/www/html
-if [ ! -d "$FOLDER_NAME" ] ; then
- mkdir $FOLDER_NAME
-else
- chmod -R 0755 $FOLDER_NAME
-fi
-cd $FOLDER_NAME
-cp -r $SCRIPTPATH/src .
-cp -r $SCRIPTPATH/config .
-cp -r $SCRIPTPATH/composer.json .
-cp -r $SCRIPTPATH/webroot .
-composer install
-if [ ! -d "tmp" ] ; then
- mkdir tmp
- chown -R www-data:www-data ./tmp
-fi
-if [ ! -d "logs" ] ; then
- mkdir logs
- chown -R www-data:www-data ./logs
-fi
-
-cd ..
-chown -R www-data:www-data $FOLDER_NAME
-chmod -R 0755 $FOLDER_NAME/src
-chmod -R 0755 $FOLDER_NAME/config
-chmod -R 0755 $FOLDER_NAME/webroot
diff --git a/community_server/docu/community-server.api.md b/community_server/docu/community-server.api.md
deleted file mode 100644
index 6032ce0a2..000000000
--- a/community_server/docu/community-server.api.md
+++ /dev/null
@@ -1,132 +0,0 @@
-
-# community server api
-
-In this examples I assume that you use gradido with docker-compose build on your local maschine
-
-## Konto Overview
-return current account balance
-
-GET http://localhost/state-balances/ajaxGetBalance/-127182
-
-If session is valid, return:
-```json
-{"state":"success","balance":174500}
-```
-- balance: Gradido Cent, 4 Nachkommastellen (2 Reserve), 174500 = 17,45 GDD
-
-## List Transactions
-List all transactions from logged in user, currently without paging
-Ajax:
-GET http://localhost/state-balances/ajaxListTransactions/-127182/
-or
-GET http://localhost/state-balances/ajaxListTransactions/-127182/DESC
-to get transaction in descending order
-
-Antwort:
-Wenn alles okay:
-```json
-{"state":"success", "transactions":
- [
- {
- "name": "Max Mustermann",
- "email": "Maxim Mustermann",
- "type": "send",
- "transaction_id": 2,
- "date": "2021-02-19T13:25:36+00:00",
- "balance": 1920000,
- "memo": "a piece of cake :)",
- "pubkey": "038a6f93270dc57b91d76bf110ad3863fcb7d1b08e7692e793fcdb4467e5b6a7"
- }
- ],
- "transactionExecutingCount": 0,
- "count": 1,
- "gdtSum": 0,
- "timeUsed": 0.04562687873840332
-}
-```
-
-- name: name of other involved party or empty if unknown (if other party don't belong to group)
- - if type is send, name is name of receiver
- - if type is receive, name is name of sender
- - if type is creation currently I use a static string ("Gradido Akademie)
-- email: optional, only if type is send or receive and other user is known
-- pubkey: optional, only if type is send or receive and other user isn't known
-- type: type of transaction
- - creation: user has get gradidos created
- - send: user has send another user gradidos
- - receiver: user has received gradidos from another user
-- transaction_id: id of transaction in db, in stage2 also the hedera sequence number of transaction
-- date: date of ordering transaction (booking date)
-- balance: Gradido Cent, 4 Nachkommastellen (2 Reserve), 1920000 = 192,00 GDD
-- memo: Details about transaction
-- pubkey: optional, if other party isn't known, hexadecimal representation of 32 Byte public key of user [0-9a-f]
-
-- transactionExecutingCount: how many transaction for this user currently pending and waiting for signing
-- count: sum of finished transactions user is involved
-- gdtSum: sum of gdt of user in cent with 2 places (Nachkommastellen)
-- timeUsed: time used for getting data from db in seconds, only for analyse backend performance
-
-## Creation Transaction
-Make a creation transaction
-With new Option set in Login-Server:
-```ini
-unsecure.allow_auto_sign_transactions = 1
-```
-transactions can be auto-signed directly with handing in transaction.
-Normally a forwarding to login-server check transactions side is neccessary to minimize security risks.
-
-POST http://localhost/transaction-creations/ajaxCreate
-```json
-{
- "session_id" : -127182,
- "email": "max.musterman@gmail.de",
- "amount": 10000000,
- "target_date":"2021-02-19T13:25:36+00:00",
- "memo":"AGE",
- "auto_sign": true
-}
-```
-return if everything is ok:
-```json
-{"state":"success", "timeUsed": 0.0122}
-```
-- timeUsed: time used for getting data from db in seconds, only for analyse backend performance
-
-## Send Coins Transaction
-Make a simple GDD Transaction, send Coins from one user to other.
-With new Option set in Login-Server:
-```ini
-unsecure.allow_auto_sign_transactions = 1
-```
-transactions can be auto-signed directly with handing in transaction.
-Normally a forwarding to login-server check transactions side is neccessary to minimize security risks.
-
-POST http://localhost/transaction-send-coins/ajaxCreate
-```json
-{
- "session_id" : -127182,
- "amount": 2000000,
- "email": "max.musterman@gmail.de",
- "memo":"Thank you :)",
- "auto_sign": true
-}
-```
-- amout: amount to transfer, 2000000 = 200,00 GDD
-- email: receiver email address, must be differ from user email
-- memo: Details about transaction
-- auto_sign: set to true to directly sign transaction if unsecure.allow_auto_sign_transactions = 1 is set
-
-return if everything is ok:
-```json
-{"state":"success", "timeUsed": 0.0122}
-```
-- timeUsed: time used for getting data from db in seconds, only for analyse backend performance
-
-Than the transaction was created on community server, send to login-server, signed (if unsecure.allow_auto_sign_transactions = 1 and auto_sign = true)
-and send back to community server and put into db.
-After you get this answear you see the new transaction if you list transactions or call for the balance.
-
-Without auto-sign the transaction is pending on login-server and waits for the user to review it at
-http://localhost/account/checkTransactions
-
-
diff --git a/community_server/index.php b/community_server/index.php
deleted file mode 100644
index 459176916..000000000
--- a/community_server/index.php
+++ /dev/null
@@ -1,16 +0,0 @@
-=2.1.2 <3.0.0',
-175 silly cache add type: 'range' }
-176 silly addNamed clone@>=2.1.2 <3.0.0
-177 verbose addNamed ">=2.1.2 <3.0.0" is a valid semver range for clone
-178 silly addNameRange { name: 'clone', range: '>=2.1.2 <3.0.0', hasData: false }
-179 silly mapToRegistry name clone
-180 silly mapToRegistry using default registry
-181 silly mapToRegistry registry https://registry.npmjs.org/
-182 silly mapToRegistry uri https://registry.npmjs.org/clone
-183 verbose addNameRange registry:https://registry.npmjs.org/clone not in flight; fetching
-184 verbose get https://registry.npmjs.org/clone not expired, no request
-185 silly addNameRange number 2 { name: 'clone', range: '>=2.1.2 <3.0.0', hasData: true }
-186 silly addNameRange versions [ 'clone',
-186 silly addNameRange [ '0.0.0',
-186 silly addNameRange '0.0.1',
-186 silly addNameRange '0.0.2',
-186 silly addNameRange '0.0.3',
-186 silly addNameRange '0.0.4',
-186 silly addNameRange '0.0.5',
-186 silly addNameRange '0.0.6',
-186 silly addNameRange '0.0.7',
-186 silly addNameRange '0.1.0',
-186 silly addNameRange '0.1.1',
-186 silly addNameRange '0.1.2',
-186 silly addNameRange '0.1.3',
-186 silly addNameRange '0.1.4',
-186 silly addNameRange '0.1.5',
-186 silly addNameRange '0.1.6',
-186 silly addNameRange '0.1.7',
-186 silly addNameRange '0.1.8',
-186 silly addNameRange '0.1.9',
-186 silly addNameRange '0.1.10',
-186 silly addNameRange '0.1.11',
-186 silly addNameRange '0.1.12',
-186 silly addNameRange '0.1.13',
-186 silly addNameRange '0.1.14',
-186 silly addNameRange '0.1.15',
-186 silly addNameRange '0.1.16',
-186 silly addNameRange '0.1.17',
-186 silly addNameRange '0.1.18',
-186 silly addNameRange '0.2.0',
-186 silly addNameRange '0.1.19',
-186 silly addNameRange '1.0.0',
-186 silly addNameRange '1.0.1',
-186 silly addNameRange '1.0.2',
-186 silly addNameRange '2.0.0',
-186 silly addNameRange '2.1.0',
-186 silly addNameRange '2.1.1',
-186 silly addNameRange '1.0.3',
-186 silly addNameRange '2.1.2',
-186 silly addNameRange '1.0.4' ] ]
-187 silly addNamed clone@2.1.2
-188 verbose addNamed "2.1.2" is a plain semver version for clone
-189 silly mapToRegistry name clone
-190 silly mapToRegistry using default registry
-191 silly mapToRegistry registry https://registry.npmjs.org/
-192 silly mapToRegistry uri https://registry.npmjs.org/clone
-193 verbose addRemoteTarball https://registry.npmjs.org/clone/-/clone-2.1.2.tgz not in flight; adding
-194 verbose addRemoteTarball [ 'https://registry.npmjs.org/clone/-/clone-2.1.2.tgz',
-194 verbose addRemoteTarball '1b7f4b9f591f1e8f83670401600345a02887435f' ]
-195 info retry fetch attempt 1 at 13:48:57
-196 info attempt registry request try #1 at 13:48:57
-197 http fetch GET https://registry.npmjs.org/clone/-/clone-2.1.2.tgz
-198 http fetch 200 https://registry.npmjs.org/clone/-/clone-2.1.2.tgz
-199 silly fetchAndShaCheck shasum 1b7f4b9f591f1e8f83670401600345a02887435f
-200 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/clone/-/clone-2.1.2.tgz not in flight; adding
-201 verbose addTmpTarball already have metadata; skipping unpack for clone@2.1.2
-202 http 200 https://registry.npmjs.org/mime
-203 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-203 verbose headers 'content-type': 'application/json',
-203 verbose headers 'transfer-encoding': 'chunked',
-203 verbose headers connection: 'keep-alive',
-203 verbose headers 'set-cookie':
-203 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-203 verbose headers 'cf-ray': '59764fa1caba6347-FRA',
-203 verbose headers age: '5658',
-203 verbose headers 'cache-control': 'public, max-age=300',
-203 verbose headers etag: 'W/"06d541b2c21df82e268be063f8846ba5"',
-203 verbose headers 'last-modified': 'Fri, 01 May 2020 23:10:52 GMT',
-203 verbose headers vary: 'accept-encoding, accept',
-203 verbose headers 'cf-cache-status': 'HIT',
-203 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-203 verbose headers server: 'cloudflare',
-203 verbose headers 'content-encoding': 'gzip',
-203 verbose headers 'cf-request-id': '02ddd0192000006347e8890200000001' }
-204 silly get cb [ 200,
-204 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-204 silly get 'content-type': 'application/json',
-204 silly get 'transfer-encoding': 'chunked',
-204 silly get connection: 'keep-alive',
-204 silly get 'set-cookie':
-204 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-204 silly get 'cf-ray': '59764fa1caba6347-FRA',
-204 silly get age: '5658',
-204 silly get 'cache-control': 'public, max-age=300',
-204 silly get etag: 'W/"06d541b2c21df82e268be063f8846ba5"',
-204 silly get 'last-modified': 'Fri, 01 May 2020 23:10:52 GMT',
-204 silly get vary: 'accept-encoding, accept',
-204 silly get 'cf-cache-status': 'HIT',
-204 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-204 silly get server: 'cloudflare',
-204 silly get 'content-encoding': 'gzip',
-204 silly get 'cf-request-id': '02ddd0192000006347e8890200000001' } ]
-205 verbose get saving mime to /home/christine/.npm/registry.npmjs.org/mime/.cache.json
-206 http 304 https://registry.npmjs.org/errno
-207 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-207 verbose headers connection: 'keep-alive',
-207 verbose headers 'set-cookie':
-207 verbose headers [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-207 verbose headers 'cf-ray': '59764fa1ddccd6e9-FRA',
-207 verbose headers age: '5629',
-207 verbose headers 'cache-control': 'public, max-age=300',
-207 verbose headers etag: '"93d3c79a655f99137298121fc95d36c6"',
-207 verbose headers 'last-modified': 'Sat, 26 May 2018 23:40:24 GMT',
-207 verbose headers vary: 'Accept-Encoding',
-207 verbose headers 'cf-cache-status': 'HIT',
-207 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-207 verbose headers server: 'cloudflare',
-207 verbose headers 'cf-request-id': '02ddd019240000d6e975b00200000001' }
-208 silly get cb [ 304,
-208 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-208 silly get connection: 'keep-alive',
-208 silly get 'set-cookie':
-208 silly get [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-208 silly get 'cf-ray': '59764fa1ddccd6e9-FRA',
-208 silly get age: '5629',
-208 silly get 'cache-control': 'public, max-age=300',
-208 silly get etag: '"93d3c79a655f99137298121fc95d36c6"',
-208 silly get 'last-modified': 'Sat, 26 May 2018 23:40:24 GMT',
-208 silly get vary: 'Accept-Encoding',
-208 silly get 'cf-cache-status': 'HIT',
-208 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-208 silly get server: 'cloudflare',
-208 silly get 'cf-request-id': '02ddd019240000d6e975b00200000001' } ]
-209 verbose etag https://registry.npmjs.org/errno from cache
-210 verbose get saving errno to /home/christine/.npm/registry.npmjs.org/errno/.cache.json
-211 http 200 https://registry.npmjs.org/promise
-212 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-212 verbose headers 'content-type': 'application/json',
-212 verbose headers 'transfer-encoding': 'chunked',
-212 verbose headers connection: 'keep-alive',
-212 verbose headers 'set-cookie':
-212 verbose headers [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-212 verbose headers 'cf-ray': '59764fa1c9c76413-FRA',
-212 verbose headers age: '5628',
-212 verbose headers 'cache-control': 'public, max-age=300',
-212 verbose headers etag: 'W/"0560bb757d840a7a46bf8d008bc75194"',
-212 verbose headers 'last-modified': 'Mon, 02 Mar 2020 10:57:46 GMT',
-212 verbose headers vary: 'accept-encoding, accept',
-212 verbose headers 'cf-cache-status': 'HIT',
-212 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-212 verbose headers server: 'cloudflare',
-212 verbose headers 'content-encoding': 'gzip',
-212 verbose headers 'cf-request-id': '02ddd01920000064135f8cb200000001' }
-213 silly get cb [ 200,
-213 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-213 silly get 'content-type': 'application/json',
-213 silly get 'transfer-encoding': 'chunked',
-213 silly get connection: 'keep-alive',
-213 silly get 'set-cookie':
-213 silly get [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-213 silly get 'cf-ray': '59764fa1c9c76413-FRA',
-213 silly get age: '5628',
-213 silly get 'cache-control': 'public, max-age=300',
-213 silly get etag: 'W/"0560bb757d840a7a46bf8d008bc75194"',
-213 silly get 'last-modified': 'Mon, 02 Mar 2020 10:57:46 GMT',
-213 silly get vary: 'accept-encoding, accept',
-213 silly get 'cf-cache-status': 'HIT',
-213 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-213 silly get server: 'cloudflare',
-213 silly get 'content-encoding': 'gzip',
-213 silly get 'cf-request-id': '02ddd01920000064135f8cb200000001' } ]
-214 verbose get saving promise to /home/christine/.npm/registry.npmjs.org/promise/.cache.json
-215 http 200 https://registry.npmjs.org/graceful-fs
-216 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-216 verbose headers 'content-type': 'application/json',
-216 verbose headers 'transfer-encoding': 'chunked',
-216 verbose headers connection: 'keep-alive',
-216 verbose headers 'set-cookie':
-216 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-216 verbose headers 'cf-ray': '59764fa1da22325c-FRA',
-216 verbose headers age: '5345',
-216 verbose headers 'cache-control': 'public, max-age=300',
-216 verbose headers etag: 'W/"84e1c483529d18a582ac0265096141af"',
-216 verbose headers 'last-modified': 'Tue, 28 Apr 2020 15:14:15 GMT',
-216 verbose headers vary: 'accept-encoding, accept',
-216 verbose headers 'cf-cache-status': 'HIT',
-216 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-216 verbose headers server: 'cloudflare',
-216 verbose headers 'content-encoding': 'gzip',
-216 verbose headers 'cf-request-id': '02ddd019250000325c4cbef200000001' }
-217 silly get cb [ 200,
-217 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-217 silly get 'content-type': 'application/json',
-217 silly get 'transfer-encoding': 'chunked',
-217 silly get connection: 'keep-alive',
-217 silly get 'set-cookie':
-217 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-217 silly get 'cf-ray': '59764fa1da22325c-FRA',
-217 silly get age: '5345',
-217 silly get 'cache-control': 'public, max-age=300',
-217 silly get etag: 'W/"84e1c483529d18a582ac0265096141af"',
-217 silly get 'last-modified': 'Tue, 28 Apr 2020 15:14:15 GMT',
-217 silly get vary: 'accept-encoding, accept',
-217 silly get 'cf-cache-status': 'HIT',
-217 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-217 silly get server: 'cloudflare',
-217 silly get 'content-encoding': 'gzip',
-217 silly get 'cf-request-id': '02ddd019250000325c4cbef200000001' } ]
-218 verbose get saving graceful-fs to /home/christine/.npm/registry.npmjs.org/graceful-fs/.cache.json
-219 silly resolveWithNewModule errno@0.1.7 checking installable status
-220 silly cache add args [ 'errno@^0.1.1', null ]
-221 verbose cache add spec errno@^0.1.1
-222 silly cache add parsed spec Result {
-222 silly cache add raw: 'errno@^0.1.1',
-222 silly cache add scope: null,
-222 silly cache add name: 'errno',
-222 silly cache add rawSpec: '^0.1.1',
-222 silly cache add spec: '>=0.1.1 <0.2.0',
-222 silly cache add type: 'range' }
-223 silly addNamed errno@>=0.1.1 <0.2.0
-224 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for errno
-225 silly addNameRange { name: 'errno', range: '>=0.1.1 <0.2.0', hasData: false }
-226 silly mapToRegistry name errno
-227 silly mapToRegistry using default registry
-228 silly mapToRegistry registry https://registry.npmjs.org/
-229 silly mapToRegistry uri https://registry.npmjs.org/errno
-230 verbose addNameRange registry:https://registry.npmjs.org/errno not in flight; fetching
-231 silly resolveWithNewModule mime@1.6.0 checking installable status
-232 silly cache add args [ 'mime@^1.4.1', null ]
-233 verbose cache add spec mime@^1.4.1
-234 silly cache add parsed spec Result {
-234 silly cache add raw: 'mime@^1.4.1',
-234 silly cache add scope: null,
-234 silly cache add name: 'mime',
-234 silly cache add rawSpec: '^1.4.1',
-234 silly cache add spec: '>=1.4.1 <2.0.0',
-234 silly cache add type: 'range' }
-235 silly addNamed mime@>=1.4.1 <2.0.0
-236 verbose addNamed ">=1.4.1 <2.0.0" is a valid semver range for mime
-237 silly addNameRange { name: 'mime', range: '>=1.4.1 <2.0.0', hasData: false }
-238 silly mapToRegistry name mime
-239 silly mapToRegistry using default registry
-240 silly mapToRegistry registry https://registry.npmjs.org/
-241 silly mapToRegistry uri https://registry.npmjs.org/mime
-242 verbose addNameRange registry:https://registry.npmjs.org/mime not in flight; fetching
-243 http 200 https://registry.npmjs.org/tslib
-244 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-244 verbose headers 'content-type': 'application/json',
-244 verbose headers 'transfer-encoding': 'chunked',
-244 verbose headers connection: 'keep-alive',
-244 verbose headers 'set-cookie':
-244 verbose headers [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-244 verbose headers 'cf-ray': '59764fa1d9e7d715-FRA',
-244 verbose headers age: '5299',
-244 verbose headers 'cache-control': 'public, max-age=300',
-244 verbose headers etag: 'W/"2b86a514bc0f750da0d0f62d3dbfde51"',
-244 verbose headers 'last-modified': 'Wed, 13 May 2020 23:18:43 GMT',
-244 verbose headers vary: 'accept-encoding, accept',
-244 verbose headers 'cf-cache-status': 'HIT',
-244 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-244 verbose headers server: 'cloudflare',
-244 verbose headers 'content-encoding': 'gzip',
-244 verbose headers 'cf-request-id': '02ddd019240000d715c11d3200000001' }
-245 silly get cb [ 200,
-245 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-245 silly get 'content-type': 'application/json',
-245 silly get 'transfer-encoding': 'chunked',
-245 silly get connection: 'keep-alive',
-245 silly get 'set-cookie':
-245 silly get [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-245 silly get 'cf-ray': '59764fa1d9e7d715-FRA',
-245 silly get age: '5299',
-245 silly get 'cache-control': 'public, max-age=300',
-245 silly get etag: 'W/"2b86a514bc0f750da0d0f62d3dbfde51"',
-245 silly get 'last-modified': 'Wed, 13 May 2020 23:18:43 GMT',
-245 silly get vary: 'accept-encoding, accept',
-245 silly get 'cf-cache-status': 'HIT',
-245 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-245 silly get server: 'cloudflare',
-245 silly get 'content-encoding': 'gzip',
-245 silly get 'cf-request-id': '02ddd019240000d715c11d3200000001' } ]
-246 verbose get saving tslib to /home/christine/.npm/registry.npmjs.org/tslib/.cache.json
-247 verbose get https://registry.npmjs.org/errno not expired, no request
-248 silly addNameRange number 2 { name: 'errno', range: '>=0.1.1 <0.2.0', hasData: true }
-249 silly addNameRange versions [ 'errno',
-249 silly addNameRange [ '0.0.1',
-249 silly addNameRange '0.0.2',
-249 silly addNameRange '0.0.3',
-249 silly addNameRange '0.0.4',
-249 silly addNameRange '0.0.5',
-249 silly addNameRange '0.1.0',
-249 silly addNameRange '0.1.1',
-249 silly addNameRange '0.1.2',
-249 silly addNameRange '0.1.3',
-249 silly addNameRange '0.1.4',
-249 silly addNameRange '0.1.5',
-249 silly addNameRange '0.1.6',
-249 silly addNameRange '0.1.7' ] ]
-250 silly addNamed errno@0.1.7
-251 verbose addNamed "0.1.7" is a plain semver version for errno
-252 verbose get https://registry.npmjs.org/mime not expired, no request
-253 silly addNameRange number 2 { name: 'mime', range: '>=1.4.1 <2.0.0', hasData: true }
-254 silly addNameRange versions [ 'mime',
-254 silly addNameRange [ '1.0.0',
-254 silly addNameRange '1.1.0',
-254 silly addNameRange '1.2.1',
-254 silly addNameRange '1.2.2',
-254 silly addNameRange '1.2.3',
-254 silly addNameRange '1.2.4',
-254 silly addNameRange '1.2.5',
-254 silly addNameRange '1.2.6',
-254 silly addNameRange '1.2.7',
-254 silly addNameRange '1.2.8',
-254 silly addNameRange '1.2.9',
-254 silly addNameRange '1.2.10',
-254 silly addNameRange '1.2.11',
-254 silly addNameRange '1.3.0',
-254 silly addNameRange '1.3.2',
-254 silly addNameRange '1.3.3',
-254 silly addNameRange '1.3.4',
-254 silly addNameRange '1.3.5',
-254 silly addNameRange '1.3.6',
-254 silly addNameRange '1.4.0',
-254 silly addNameRange '2.0.0',
-254 silly addNameRange '2.0.1',
-254 silly addNameRange '2.0.2',
-254 silly addNameRange '1.4.1',
-254 silly addNameRange '2.0.3',
-254 silly addNameRange '1.5.0',
-254 silly addNameRange '1.6.0',
-254 silly addNameRange '2.0.5',
-254 silly addNameRange '2.1.0',
-254 silly addNameRange '2.2.0',
-254 silly addNameRange '2.2.1',
-254 silly addNameRange '2.2.2',
-254 silly addNameRange '2.3.0',
-254 silly addNameRange '2.3.1',
-254 silly addNameRange '2.4.0',
-254 silly addNameRange '2.4.1',
-254 silly addNameRange '2.4.2',
-254 silly addNameRange '2.4.3',
-254 silly addNameRange '2.4.4',
-254 silly addNameRange '2.4.5' ] ]
-255 silly addNamed mime@1.6.0
-256 verbose addNamed "1.6.0" is a plain semver version for mime
-257 silly cache afterAdd clone@2.1.2
-258 verbose afterAdd /home/christine/.npm/clone/2.1.2/package/package.json not in flight; writing
-259 silly mapToRegistry name mime
-260 silly mapToRegistry using default registry
-261 silly mapToRegistry registry https://registry.npmjs.org/
-262 silly mapToRegistry uri https://registry.npmjs.org/mime
-263 verbose addRemoteTarball https://registry.npmjs.org/mime/-/mime-1.6.0.tgz not in flight; adding
-264 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime/-/mime-1.6.0.tgz',
-264 verbose addRemoteTarball '32cd9e5c64553bd58d19a568af452acff04981b1' ]
-265 http 200 https://registry.npmjs.org/mkdirp
-266 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-266 verbose headers 'content-type': 'application/json',
-266 verbose headers 'transfer-encoding': 'chunked',
-266 verbose headers connection: 'keep-alive',
-266 verbose headers 'set-cookie':
-266 verbose headers [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-266 verbose headers 'cf-ray': '59764fa1fe51175a-FRA',
-266 verbose headers age: '5346',
-266 verbose headers 'cache-control': 'public, max-age=300',
-266 verbose headers etag: 'W/"0730d9c43c136c318d8e19c69cbd72aa"',
-266 verbose headers 'last-modified': 'Wed, 22 Apr 2020 06:03:24 GMT',
-266 verbose headers vary: 'accept-encoding, accept',
-266 verbose headers 'cf-cache-status': 'HIT',
-266 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-266 verbose headers server: 'cloudflare',
-266 verbose headers 'content-encoding': 'gzip',
-266 verbose headers 'cf-request-id': '02ddd019380000175a1e1e7200000001' }
-267 silly get cb [ 200,
-267 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-267 silly get 'content-type': 'application/json',
-267 silly get 'transfer-encoding': 'chunked',
-267 silly get connection: 'keep-alive',
-267 silly get 'set-cookie':
-267 silly get [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-267 silly get 'cf-ray': '59764fa1fe51175a-FRA',
-267 silly get age: '5346',
-267 silly get 'cache-control': 'public, max-age=300',
-267 silly get etag: 'W/"0730d9c43c136c318d8e19c69cbd72aa"',
-267 silly get 'last-modified': 'Wed, 22 Apr 2020 06:03:24 GMT',
-267 silly get vary: 'accept-encoding, accept',
-267 silly get 'cf-cache-status': 'HIT',
-267 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-267 silly get server: 'cloudflare',
-267 silly get 'content-encoding': 'gzip',
-267 silly get 'cf-request-id': '02ddd019380000175a1e1e7200000001' } ]
-268 verbose get saving mkdirp to /home/christine/.npm/registry.npmjs.org/mkdirp/.cache.json
-269 silly resolveWithNewModule graceful-fs@4.2.4 checking installable status
-270 silly cache add args [ 'graceful-fs@^4.1.2', null ]
-271 verbose cache add spec graceful-fs@^4.1.2
-272 silly cache add parsed spec Result {
-272 silly cache add raw: 'graceful-fs@^4.1.2',
-272 silly cache add scope: null,
-272 silly cache add name: 'graceful-fs',
-272 silly cache add rawSpec: '^4.1.2',
-272 silly cache add spec: '>=4.1.2 <5.0.0',
-272 silly cache add type: 'range' }
-273 silly addNamed graceful-fs@>=4.1.2 <5.0.0
-274 verbose addNamed ">=4.1.2 <5.0.0" is a valid semver range for graceful-fs
-275 silly addNameRange { name: 'graceful-fs', range: '>=4.1.2 <5.0.0', hasData: false }
-276 silly mapToRegistry name graceful-fs
-277 silly mapToRegistry using default registry
-278 silly mapToRegistry registry https://registry.npmjs.org/
-279 silly mapToRegistry uri https://registry.npmjs.org/graceful-fs
-280 verbose addNameRange registry:https://registry.npmjs.org/graceful-fs not in flight; fetching
-281 http 200 https://registry.npmjs.org/image-size
-282 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-282 verbose headers 'content-type': 'application/json',
-282 verbose headers 'transfer-encoding': 'chunked',
-282 verbose headers connection: 'keep-alive',
-282 verbose headers 'set-cookie':
-282 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-282 verbose headers 'cf-ray': '59764fa1cf14648b-FRA',
-282 verbose headers age: '4621',
-282 verbose headers 'cache-control': 'public, max-age=300',
-282 verbose headers etag: 'W/"c223fda42dcf547145c5fcea3c32c5da"',
-282 verbose headers 'last-modified': 'Mon, 30 Sep 2019 10:49:43 GMT',
-282 verbose headers vary: 'accept-encoding, accept',
-282 verbose headers 'cf-cache-status': 'HIT',
-282 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-282 verbose headers server: 'cloudflare',
-282 verbose headers 'content-encoding': 'gzip',
-282 verbose headers 'cf-request-id': '02ddd0191b0000648bda3f1200000001' }
-283 silly get cb [ 200,
-283 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-283 silly get 'content-type': 'application/json',
-283 silly get 'transfer-encoding': 'chunked',
-283 silly get connection: 'keep-alive',
-283 silly get 'set-cookie':
-283 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-283 silly get 'cf-ray': '59764fa1cf14648b-FRA',
-283 silly get age: '4621',
-283 silly get 'cache-control': 'public, max-age=300',
-283 silly get etag: 'W/"c223fda42dcf547145c5fcea3c32c5da"',
-283 silly get 'last-modified': 'Mon, 30 Sep 2019 10:49:43 GMT',
-283 silly get vary: 'accept-encoding, accept',
-283 silly get 'cf-cache-status': 'HIT',
-283 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-283 silly get server: 'cloudflare',
-283 silly get 'content-encoding': 'gzip',
-283 silly get 'cf-request-id': '02ddd0191b0000648bda3f1200000001' } ]
-284 verbose get saving image-size to /home/christine/.npm/registry.npmjs.org/image-size/.cache.json
-285 silly resolveWithNewModule promise@7.3.1 checking installable status
-286 silly cache add args [ 'promise@^7.1.1', null ]
-287 verbose cache add spec promise@^7.1.1
-288 silly cache add parsed spec Result {
-288 silly cache add raw: 'promise@^7.1.1',
-288 silly cache add scope: null,
-288 silly cache add name: 'promise',
-288 silly cache add rawSpec: '^7.1.1',
-288 silly cache add spec: '>=7.1.1 <8.0.0',
-288 silly cache add type: 'range' }
-289 silly addNamed promise@>=7.1.1 <8.0.0
-290 verbose addNamed ">=7.1.1 <8.0.0" is a valid semver range for promise
-291 silly addNameRange { name: 'promise', range: '>=7.1.1 <8.0.0', hasData: false }
-292 silly mapToRegistry name promise
-293 silly mapToRegistry using default registry
-294 silly mapToRegistry registry https://registry.npmjs.org/
-295 silly mapToRegistry uri https://registry.npmjs.org/promise
-296 verbose addNameRange registry:https://registry.npmjs.org/promise not in flight; fetching
-297 info retry fetch attempt 1 at 13:48:57
-298 info attempt registry request try #1 at 13:48:57
-299 http fetch GET https://registry.npmjs.org/mime/-/mime-1.6.0.tgz
-300 silly resolveWithNewModule tslib@1.13.0 checking installable status
-301 silly cache add args [ 'tslib@^1.10.0', null ]
-302 verbose cache add spec tslib@^1.10.0
-303 silly cache add parsed spec Result {
-303 silly cache add raw: 'tslib@^1.10.0',
-303 silly cache add scope: null,
-303 silly cache add name: 'tslib',
-303 silly cache add rawSpec: '^1.10.0',
-303 silly cache add spec: '>=1.10.0 <2.0.0',
-303 silly cache add type: 'range' }
-304 silly addNamed tslib@>=1.10.0 <2.0.0
-305 verbose addNamed ">=1.10.0 <2.0.0" is a valid semver range for tslib
-306 silly addNameRange { name: 'tslib', range: '>=1.10.0 <2.0.0', hasData: false }
-307 silly mapToRegistry name tslib
-308 silly mapToRegistry using default registry
-309 silly mapToRegistry registry https://registry.npmjs.org/
-310 silly mapToRegistry uri https://registry.npmjs.org/tslib
-311 verbose addNameRange registry:https://registry.npmjs.org/tslib not in flight; fetching
-312 verbose afterAdd /home/christine/.npm/clone/2.1.2/package/package.json written
-313 verbose get https://registry.npmjs.org/graceful-fs not expired, no request
-314 silly addNameRange number 2 { name: 'graceful-fs', range: '>=4.1.2 <5.0.0', hasData: true }
-315 silly addNameRange versions [ 'graceful-fs',
-315 silly addNameRange [ '1.0.0',
-315 silly addNameRange '1.0.1',
-315 silly addNameRange '1.0.2',
-315 silly addNameRange '1.1.0',
-315 silly addNameRange '1.1.1',
-315 silly addNameRange '1.1.2',
-315 silly addNameRange '1.1.3',
-315 silly addNameRange '1.1.4',
-315 silly addNameRange '1.1.5',
-315 silly addNameRange '1.1.6',
-315 silly addNameRange '1.1.7',
-315 silly addNameRange '1.1.8',
-315 silly addNameRange '1.1.9',
-315 silly addNameRange '1.1.10',
-315 silly addNameRange '1.1.11',
-315 silly addNameRange '1.1.12',
-315 silly addNameRange '1.1.13',
-315 silly addNameRange '1.1.14',
-315 silly addNameRange '1.2.0',
-315 silly addNameRange '1.2.1',
-315 silly addNameRange '1.2.2',
-315 silly addNameRange '1.2.3',
-315 silly addNameRange '2.0.0',
-315 silly addNameRange '2.0.1',
-315 silly addNameRange '2.0.2',
-315 silly addNameRange '2.0.3',
-315 silly addNameRange '3.0.0',
-315 silly addNameRange '3.0.1',
-315 silly addNameRange '3.0.2',
-315 silly addNameRange '3.0.3',
-315 silly addNameRange '3.0.4',
-315 silly addNameRange '3.0.5',
-315 silly addNameRange '3.0.6',
-315 silly addNameRange '3.0.7',
-315 silly addNameRange '3.0.8',
-315 silly addNameRange '4.1.0',
-315 silly addNameRange '4.1.1',
-315 silly addNameRange '4.1.2',
-315 silly addNameRange '4.1.3',
-315 silly addNameRange '4.1.4',
-315 silly addNameRange '4.1.5',
-315 silly addNameRange '3.0.9',
-315 silly addNameRange '4.1.6',
-315 silly addNameRange '3.0.10',
-315 silly addNameRange '3.0.11',
-315 silly addNameRange '4.1.7',
-315 silly addNameRange '4.1.8',
-315 silly addNameRange '4.1.9',
-315 silly addNameRange '4.1.10',
-315 silly addNameRange '4.1.11',
-315 silly addNameRange '4.1.12',
-315 silly addNameRange '4.1.13',
-315 silly addNameRange '4.1.14',
-315 silly addNameRange '4.1.15',
-315 silly addNameRange '4.2.0',
-315 silly addNameRange '4.2.1',
-315 silly addNameRange '3.0.12',
-315 silly addNameRange '4.2.2',
-315 silly addNameRange '4.2.3',
-315 silly addNameRange '4.2.4' ] ]
-316 silly addNamed graceful-fs@4.2.4
-317 verbose addNamed "4.2.4" is a plain semver version for graceful-fs
-318 silly cache afterAdd errno@0.1.7
-319 verbose afterAdd /home/christine/.npm/errno/0.1.7/package/package.json not in flight; writing
-320 silly mapToRegistry name graceful-fs
-321 silly mapToRegistry using default registry
-322 silly mapToRegistry registry https://registry.npmjs.org/
-323 silly mapToRegistry uri https://registry.npmjs.org/graceful-fs
-324 verbose addRemoteTarball https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz not in flight; adding
-325 verbose addRemoteTarball [ 'https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz',
-325 verbose addRemoteTarball '2256bde14d3632958c465ebc96dc467ca07a29fb' ]
-326 verbose get https://registry.npmjs.org/promise not expired, no request
-327 silly addNameRange number 2 { name: 'promise', range: '>=7.1.1 <8.0.0', hasData: true }
-328 silly addNameRange versions [ 'promise',
-328 silly addNameRange [ '1.2.1',
-328 silly addNameRange '1.2.2',
-328 silly addNameRange '1.3.0',
-328 silly addNameRange '2.0.0',
-328 silly addNameRange '3.0.0',
-328 silly addNameRange '3.0.1',
-328 silly addNameRange '3.1.0',
-328 silly addNameRange '3.2.0',
-328 silly addNameRange '4.0.0',
-328 silly addNameRange '5.0.0',
-328 silly addNameRange '6.0.0',
-328 silly addNameRange '6.0.1',
-328 silly addNameRange '6.1.0',
-328 silly addNameRange '7.0.0',
-328 silly addNameRange '7.0.1',
-328 silly addNameRange '7.0.2',
-328 silly addNameRange '7.0.3',
-328 silly addNameRange '7.0.4',
-328 silly addNameRange '7.1.0',
-328 silly addNameRange '7.1.1',
-328 silly addNameRange '7.2.0',
-328 silly addNameRange '7.3.0',
-328 silly addNameRange '7.3.1',
-328 silly addNameRange '8.0.0',
-328 silly addNameRange '8.0.1',
-328 silly addNameRange '8.0.2',
-328 silly addNameRange '8.0.3',
-328 silly addNameRange '8.1.0' ] ]
-329 silly addNamed promise@7.3.1
-330 verbose addNamed "7.3.1" is a plain semver version for promise
-331 verbose get https://registry.npmjs.org/tslib not expired, no request
-332 silly addNameRange number 2 { name: 'tslib', range: '>=1.10.0 <2.0.0', hasData: true }
-333 silly addNameRange versions [ 'tslib',
-333 silly addNameRange [ '0.0.1-security',
-333 silly addNameRange '1.0.0',
-333 silly addNameRange '1.1.0',
-333 silly addNameRange '1.2.0',
-333 silly addNameRange '1.3.0',
-333 silly addNameRange '1.4.0',
-333 silly addNameRange '1.5.0',
-333 silly addNameRange '1.6.0',
-333 silly addNameRange '1.6.1',
-333 silly addNameRange '1.7.0',
-333 silly addNameRange '1.7.1',
-333 silly addNameRange '1.8.0',
-333 silly addNameRange '1.8.1',
-333 silly addNameRange '1.9.0',
-333 silly addNameRange '1.9.1',
-333 silly addNameRange '1.9.2',
-333 silly addNameRange '1.9.3',
-333 silly addNameRange '1.10.0',
-333 silly addNameRange '1.11.0',
-333 silly addNameRange '1.11.1',
-333 silly addNameRange '1.11.2',
-333 silly addNameRange '1.12.0',
-333 silly addNameRange '1.13.0',
-333 silly addNameRange '2.0.0' ] ]
-334 silly addNamed tslib@1.13.0
-335 verbose addNamed "1.13.0" is a plain semver version for tslib
-336 silly mapToRegistry name promise
-337 silly mapToRegistry using default registry
-338 silly mapToRegistry registry https://registry.npmjs.org/
-339 silly mapToRegistry uri https://registry.npmjs.org/promise
-340 verbose addRemoteTarball https://registry.npmjs.org/promise/-/promise-7.3.1.tgz not in flight; adding
-341 verbose addRemoteTarball [ 'https://registry.npmjs.org/promise/-/promise-7.3.1.tgz',
-341 verbose addRemoteTarball '064b72602b18f90f29192b8b1bc418ffd1ebd3bf' ]
-342 silly resolveWithNewModule mkdirp@0.5.5 checking installable status
-343 silly cache add args [ 'mkdirp@^0.5.0', null ]
-344 verbose cache add spec mkdirp@^0.5.0
-345 silly cache add parsed spec Result {
-345 silly cache add raw: 'mkdirp@^0.5.0',
-345 silly cache add scope: null,
-345 silly cache add name: 'mkdirp',
-345 silly cache add rawSpec: '^0.5.0',
-345 silly cache add spec: '>=0.5.0 <0.6.0',
-345 silly cache add type: 'range' }
-346 silly addNamed mkdirp@>=0.5.0 <0.6.0
-347 verbose addNamed ">=0.5.0 <0.6.0" is a valid semver range for mkdirp
-348 silly addNameRange { name: 'mkdirp', range: '>=0.5.0 <0.6.0', hasData: false }
-349 silly mapToRegistry name mkdirp
-350 silly mapToRegistry using default registry
-351 silly mapToRegistry registry https://registry.npmjs.org/
-352 silly mapToRegistry uri https://registry.npmjs.org/mkdirp
-353 verbose addNameRange registry:https://registry.npmjs.org/mkdirp not in flight; fetching
-354 silly mapToRegistry name tslib
-355 silly mapToRegistry using default registry
-356 silly mapToRegistry registry https://registry.npmjs.org/
-357 silly mapToRegistry uri https://registry.npmjs.org/tslib
-358 verbose addRemoteTarball https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz not in flight; adding
-359 verbose addRemoteTarball [ 'https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz',
-359 verbose addRemoteTarball 'c881e13cc7015894ed914862d276436fa9a47043' ]
-360 info retry fetch attempt 1 at 13:48:57
-361 info attempt registry request try #1 at 13:48:57
-362 http fetch GET https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz
-363 info retry fetch attempt 1 at 13:48:57
-364 info attempt registry request try #1 at 13:48:57
-365 http fetch GET https://registry.npmjs.org/promise/-/promise-7.3.1.tgz
-366 http 200 https://registry.npmjs.org/source-map
-367 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-367 verbose headers 'content-type': 'application/json',
-367 verbose headers 'transfer-encoding': 'chunked',
-367 verbose headers connection: 'keep-alive',
-367 verbose headers 'set-cookie':
-367 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-367 verbose headers 'cf-ray': '59764fa1f8a405fd-FRA',
-367 verbose headers age: '5629',
-367 verbose headers 'cache-control': 'public, max-age=300',
-367 verbose headers etag: 'W/"ed6422e25077febab77501a786cb4bdd"',
-367 verbose headers 'last-modified': 'Thu, 07 May 2020 17:23:05 GMT',
-367 verbose headers vary: 'accept-encoding, accept',
-367 verbose headers 'cf-cache-status': 'HIT',
-367 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-367 verbose headers server: 'cloudflare',
-367 verbose headers 'content-encoding': 'gzip',
-367 verbose headers 'cf-request-id': '02ddd0193d000005fd8da0d200000001' }
-368 silly get cb [ 200,
-368 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-368 silly get 'content-type': 'application/json',
-368 silly get 'transfer-encoding': 'chunked',
-368 silly get connection: 'keep-alive',
-368 silly get 'set-cookie':
-368 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-368 silly get 'cf-ray': '59764fa1f8a405fd-FRA',
-368 silly get age: '5629',
-368 silly get 'cache-control': 'public, max-age=300',
-368 silly get etag: 'W/"ed6422e25077febab77501a786cb4bdd"',
-368 silly get 'last-modified': 'Thu, 07 May 2020 17:23:05 GMT',
-368 silly get vary: 'accept-encoding, accept',
-368 silly get 'cf-cache-status': 'HIT',
-368 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-368 silly get server: 'cloudflare',
-368 silly get 'content-encoding': 'gzip',
-368 silly get 'cf-request-id': '02ddd0193d000005fd8da0d200000001' } ]
-369 verbose get saving source-map to /home/christine/.npm/registry.npmjs.org/source-map/.cache.json
-370 silly resolveWithNewModule image-size@0.5.5 checking installable status
-371 silly cache add args [ 'image-size@~0.5.0', null ]
-372 verbose cache add spec image-size@~0.5.0
-373 silly cache add parsed spec Result {
-373 silly cache add raw: 'image-size@~0.5.0',
-373 silly cache add scope: null,
-373 silly cache add name: 'image-size',
-373 silly cache add rawSpec: '~0.5.0',
-373 silly cache add spec: '>=0.5.0 <0.6.0',
-373 silly cache add type: 'range' }
-374 silly addNamed image-size@>=0.5.0 <0.6.0
-375 verbose addNamed ">=0.5.0 <0.6.0" is a valid semver range for image-size
-376 silly addNameRange { name: 'image-size', range: '>=0.5.0 <0.6.0', hasData: false }
-377 silly mapToRegistry name image-size
-378 silly mapToRegistry using default registry
-379 silly mapToRegistry registry https://registry.npmjs.org/
-380 silly mapToRegistry uri https://registry.npmjs.org/image-size
-381 verbose addNameRange registry:https://registry.npmjs.org/image-size not in flight; fetching
-382 info retry fetch attempt 1 at 13:48:57
-383 info attempt registry request try #1 at 13:48:57
-384 http fetch GET https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz
-385 verbose afterAdd /home/christine/.npm/errno/0.1.7/package/package.json written
-386 verbose get https://registry.npmjs.org/mkdirp not expired, no request
-387 silly addNameRange number 2 { name: 'mkdirp', range: '>=0.5.0 <0.6.0', hasData: true }
-388 silly addNameRange versions [ 'mkdirp',
-388 silly addNameRange [ '0.0.1',
-388 silly addNameRange '0.0.2',
-388 silly addNameRange '0.0.3',
-388 silly addNameRange '0.0.4',
-388 silly addNameRange '0.0.5',
-388 silly addNameRange '0.0.6',
-388 silly addNameRange '0.0.7',
-388 silly addNameRange '0.1.0',
-388 silly addNameRange '0.2.0',
-388 silly addNameRange '0.2.1',
-388 silly addNameRange '0.2.2',
-388 silly addNameRange '0.3.0',
-388 silly addNameRange '0.3.1',
-388 silly addNameRange '0.3.2',
-388 silly addNameRange '0.3.3',
-388 silly addNameRange '0.3.4',
-388 silly addNameRange '0.3.5',
-388 silly addNameRange '0.4.0',
-388 silly addNameRange '0.4.1',
-388 silly addNameRange '0.4.2',
-388 silly addNameRange '0.5.0',
-388 silly addNameRange '0.5.1',
-388 silly addNameRange '1.0.0',
-388 silly addNameRange '1.0.1',
-388 silly addNameRange '1.0.2',
-388 silly addNameRange '1.0.3',
-388 silly addNameRange '0.5.2',
-388 silly addNameRange '0.5.3',
-388 silly addNameRange '0.5.4',
-388 silly addNameRange '1.0.4',
-388 silly addNameRange '0.5.5' ] ]
-389 silly addNamed mkdirp@0.5.5
-390 verbose addNamed "0.5.5" is a plain semver version for mkdirp
-391 silly mapToRegistry name mkdirp
-392 silly mapToRegistry using default registry
-393 silly mapToRegistry registry https://registry.npmjs.org/
-394 silly mapToRegistry uri https://registry.npmjs.org/mkdirp
-395 verbose addRemoteTarball https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz not in flight; adding
-396 verbose addRemoteTarball [ 'https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz',
-396 verbose addRemoteTarball 'd91cefd62d1436ca0f41620e251288d420099def' ]
-397 verbose get https://registry.npmjs.org/image-size not expired, no request
-398 silly addNameRange number 2 { name: 'image-size', range: '>=0.5.0 <0.6.0', hasData: true }
-399 silly addNameRange versions [ 'image-size',
-399 silly addNameRange [ '0.0.2',
-399 silly addNameRange '0.0.3',
-399 silly addNameRange '0.0.5',
-399 silly addNameRange '0.1.0',
-399 silly addNameRange '0.1.1',
-399 silly addNameRange '0.1.2',
-399 silly addNameRange '0.1.3',
-399 silly addNameRange '0.1.4',
-399 silly addNameRange '0.1.5',
-399 silly addNameRange '0.1.6',
-399 silly addNameRange '0.1.7',
-399 silly addNameRange '0.1.10',
-399 silly addNameRange '0.1.15',
-399 silly addNameRange '0.0.16',
-399 silly addNameRange '0.1.16',
-399 silly addNameRange '0.1.17',
-399 silly addNameRange '0.1.20',
-399 silly addNameRange '0.2.1',
-399 silly addNameRange '0.2.2',
-399 silly addNameRange '0.2.3',
-399 silly addNameRange '0.2.4',
-399 silly addNameRange '0.2.5',
-399 silly addNameRange '0.3.0',
-399 silly addNameRange '0.3.1',
-399 silly addNameRange '0.3.2',
-399 silly addNameRange '0.3.3',
-399 silly addNameRange '0.3.5',
-399 silly addNameRange '0.4.0',
-399 silly addNameRange '0.5.0',
-399 silly addNameRange '0.5.1',
-399 silly addNameRange '0.5.2',
-399 silly addNameRange '0.5.3',
-399 silly addNameRange '0.5.4',
-399 silly addNameRange '0.5.5',
-399 silly addNameRange '0.6.0',
-399 silly addNameRange '0.6.1',
-399 silly addNameRange '0.6.2',
-399 silly addNameRange '0.6.3',
-399 silly addNameRange '0.7.0',
-399 silly addNameRange '0.7.1',
-399 silly addNameRange '0.7.2',
-399 silly addNameRange '0.7.3',
-399 silly addNameRange '0.7.4',
-399 silly addNameRange '0.7.5',
-399 silly addNameRange '0.8.0',
-399 silly addNameRange '0.8.1',
-399 silly addNameRange '0.8.2',
-399 silly addNameRange '0.8.3' ] ]
-400 silly addNamed image-size@0.5.5
-401 verbose addNamed "0.5.5" is a plain semver version for image-size
-402 silly mapToRegistry name image-size
-403 silly mapToRegistry using default registry
-404 silly mapToRegistry registry https://registry.npmjs.org/
-405 silly mapToRegistry uri https://registry.npmjs.org/image-size
-406 verbose addRemoteTarball https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz not in flight; adding
-407 verbose addRemoteTarball [ 'https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz',
-407 verbose addRemoteTarball '09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c' ]
-408 http fetch 200 https://registry.npmjs.org/mime/-/mime-1.6.0.tgz
-409 info retry fetch attempt 1 at 13:48:57
-410 info attempt registry request try #1 at 13:48:57
-411 http fetch GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz
-412 http 200 https://registry.npmjs.org/request
-413 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-413 verbose headers 'content-type': 'application/json',
-413 verbose headers 'transfer-encoding': 'chunked',
-413 verbose headers connection: 'keep-alive',
-413 verbose headers 'set-cookie':
-413 verbose headers [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-413 verbose headers 'cf-ray': '59764fa1dc0ec272-FRA',
-413 verbose headers age: '5668',
-413 verbose headers 'cache-control': 'public, max-age=300',
-413 verbose headers etag: 'W/"f6a50554348a0710692c70f1bd6574ab"',
-413 verbose headers 'last-modified': 'Mon, 11 May 2020 15:19:07 GMT',
-413 verbose headers vary: 'accept-encoding, accept',
-413 verbose headers 'cf-cache-status': 'HIT',
-413 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-413 verbose headers server: 'cloudflare',
-413 verbose headers 'content-encoding': 'gzip',
-413 verbose headers 'cf-request-id': '02ddd0192b0000c27238899200000001' }
-414 silly get cb [ 200,
-414 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-414 silly get 'content-type': 'application/json',
-414 silly get 'transfer-encoding': 'chunked',
-414 silly get connection: 'keep-alive',
-414 silly get 'set-cookie':
-414 silly get [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-414 silly get 'cf-ray': '59764fa1dc0ec272-FRA',
-414 silly get age: '5668',
-414 silly get 'cache-control': 'public, max-age=300',
-414 silly get etag: 'W/"f6a50554348a0710692c70f1bd6574ab"',
-414 silly get 'last-modified': 'Mon, 11 May 2020 15:19:07 GMT',
-414 silly get vary: 'accept-encoding, accept',
-414 silly get 'cf-cache-status': 'HIT',
-414 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-414 silly get server: 'cloudflare',
-414 silly get 'content-encoding': 'gzip',
-414 silly get 'cf-request-id': '02ddd0192b0000c27238899200000001' } ]
-415 verbose get saving request to /home/christine/.npm/registry.npmjs.org/request/.cache.json
-416 silly resolveWithNewModule source-map@0.6.1 checking installable status
-417 silly cache add args [ 'source-map@~0.6.0', null ]
-418 verbose cache add spec source-map@~0.6.0
-419 silly cache add parsed spec Result {
-419 silly cache add raw: 'source-map@~0.6.0',
-419 silly cache add scope: null,
-419 silly cache add name: 'source-map',
-419 silly cache add rawSpec: '~0.6.0',
-419 silly cache add spec: '>=0.6.0 <0.7.0',
-419 silly cache add type: 'range' }
-420 silly addNamed source-map@>=0.6.0 <0.7.0
-421 verbose addNamed ">=0.6.0 <0.7.0" is a valid semver range for source-map
-422 silly addNameRange { name: 'source-map', range: '>=0.6.0 <0.7.0', hasData: false }
-423 silly mapToRegistry name source-map
-424 silly mapToRegistry using default registry
-425 silly mapToRegistry registry https://registry.npmjs.org/
-426 silly mapToRegistry uri https://registry.npmjs.org/source-map
-427 verbose addNameRange registry:https://registry.npmjs.org/source-map not in flight; fetching
-428 info retry fetch attempt 1 at 13:48:57
-429 info attempt registry request try #1 at 13:48:57
-430 http fetch GET https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz
-431 silly fetchAndShaCheck shasum 32cd9e5c64553bd58d19a568af452acff04981b1
-432 http fetch 200 https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz
-433 http fetch 200 https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz
-434 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime/-/mime-1.6.0.tgz not in flight; adding
-435 verbose addTmpTarball already have metadata; skipping unpack for mime@1.6.0
-436 verbose get https://registry.npmjs.org/source-map not expired, no request
-437 silly addNameRange number 2 { name: 'source-map', range: '>=0.6.0 <0.7.0', hasData: true }
-438 silly addNameRange versions [ 'source-map',
-438 silly addNameRange [ '0.0.0',
-438 silly addNameRange '0.1.0',
-438 silly addNameRange '0.1.1',
-438 silly addNameRange '0.1.2',
-438 silly addNameRange '0.1.3',
-438 silly addNameRange '0.1.4',
-438 silly addNameRange '0.1.5',
-438 silly addNameRange '0.1.6',
-438 silly addNameRange '0.1.7',
-438 silly addNameRange '0.1.8',
-438 silly addNameRange '0.1.9',
-438 silly addNameRange '0.1.10',
-438 silly addNameRange '0.1.11',
-438 silly addNameRange '0.1.12',
-438 silly addNameRange '0.1.13',
-438 silly addNameRange '0.1.14',
-438 silly addNameRange '0.1.15',
-438 silly addNameRange '0.1.16',
-438 silly addNameRange '0.1.17',
-438 silly addNameRange '0.1.18',
-438 silly addNameRange '0.1.19',
-438 silly addNameRange '0.1.20',
-438 silly addNameRange '0.1.21',
-438 silly addNameRange '0.1.22',
-438 silly addNameRange '0.1.23',
-438 silly addNameRange '0.1.24',
-438 silly addNameRange '0.1.25',
-438 silly addNameRange '0.1.26',
-438 silly addNameRange '0.1.27',
-438 silly addNameRange '0.1.28',
-438 silly addNameRange '0.1.29',
-438 silly addNameRange '0.1.30',
-438 silly addNameRange '0.1.31',
-438 silly addNameRange '0.1.32',
-438 silly addNameRange '0.1.33',
-438 silly addNameRange '0.1.34',
-438 silly addNameRange '0.1.35',
-438 silly addNameRange '0.1.36',
-438 silly addNameRange '0.1.37',
-438 silly addNameRange '0.1.38',
-438 silly addNameRange '0.1.39',
-438 silly addNameRange '0.1.40',
-438 silly addNameRange '0.1.41',
-438 silly addNameRange '0.1.42',
-438 silly addNameRange '0.1.43',
-438 silly addNameRange '0.2.0',
-438 silly addNameRange '0.3.0',
-438 silly addNameRange '0.4.0',
-438 silly addNameRange '0.4.1',
-438 silly addNameRange '0.4.2',
-438 silly addNameRange '0.4.3',
-438 silly addNameRange '0.4.4',
-438 silly addNameRange '0.5.0',
-438 silly addNameRange '0.5.1',
-438 silly addNameRange '0.5.2',
-438 silly addNameRange '0.5.3',
-438 silly addNameRange '0.5.4',
-438 silly addNameRange '0.5.5',
-438 silly addNameRange '0.5.6',
-438 silly addNameRange '0.5.7',
-438 silly addNameRange '0.6.0',
-438 silly addNameRange '0.6.1',
-438 silly addNameRange '0.7.0',
-438 silly addNameRange '0.7.1',
-438 silly addNameRange '0.7.2',
-438 silly addNameRange '0.7.3',
-438 silly addNameRange '0.8.0-beta.0' ] ]
-439 silly addNamed source-map@0.6.1
-440 verbose addNamed "0.6.1" is a plain semver version for source-map
-441 silly fetchAndShaCheck shasum 2256bde14d3632958c465ebc96dc467ca07a29fb
-442 silly fetchAndShaCheck shasum c881e13cc7015894ed914862d276436fa9a47043
-443 silly resolveWithNewModule request@2.88.2 checking installable status
-444 silly cache add args [ 'request@^2.83.0', null ]
-445 verbose cache add spec request@^2.83.0
-446 silly cache add parsed spec Result {
-446 silly cache add raw: 'request@^2.83.0',
-446 silly cache add scope: null,
-446 silly cache add name: 'request',
-446 silly cache add rawSpec: '^2.83.0',
-446 silly cache add spec: '>=2.83.0 <3.0.0',
-446 silly cache add type: 'range' }
-447 silly addNamed request@>=2.83.0 <3.0.0
-448 verbose addNamed ">=2.83.0 <3.0.0" is a valid semver range for request
-449 silly addNameRange { name: 'request', range: '>=2.83.0 <3.0.0', hasData: false }
-450 silly mapToRegistry name request
-451 silly mapToRegistry using default registry
-452 silly mapToRegistry registry https://registry.npmjs.org/
-453 silly mapToRegistry uri https://registry.npmjs.org/request
-454 verbose addNameRange registry:https://registry.npmjs.org/request not in flight; fetching
-455 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz not in flight; adding
-456 verbose addTmpTarball already have metadata; skipping unpack for graceful-fs@4.2.4
-457 http fetch 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz
-458 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/tslib/-/tslib-1.13.0.tgz not in flight; adding
-459 verbose addTmpTarball already have metadata; skipping unpack for tslib@1.13.0
-460 verbose get https://registry.npmjs.org/request not expired, no request
-461 silly addNameRange number 2 { name: 'request', range: '>=2.83.0 <3.0.0', hasData: true }
-462 silly addNameRange versions [ 'request',
-462 silly addNameRange [ '0.10.0',
-462 silly addNameRange '0.8.3',
-462 silly addNameRange '0.9.0',
-462 silly addNameRange '0.9.1',
-462 silly addNameRange '0.9.5',
-462 silly addNameRange '1.0.0',
-462 silly addNameRange '1.1.0',
-462 silly addNameRange '1.1.1',
-462 silly addNameRange '1.2.0',
-462 silly addNameRange '1.9.0',
-462 silly addNameRange '1.9.1',
-462 silly addNameRange '1.9.2',
-462 silly addNameRange '1.9.3',
-462 silly addNameRange '1.9.5',
-462 silly addNameRange '1.9.7',
-462 silly addNameRange '1.9.8',
-462 silly addNameRange '1.9.9',
-462 silly addNameRange '2.0.0',
-462 silly addNameRange '2.0.1',
-462 silly addNameRange '2.0.2',
-462 silly addNameRange '2.0.3',
-462 silly addNameRange '2.0.4',
-462 silly addNameRange '2.0.5',
-462 silly addNameRange '2.1.0',
-462 silly addNameRange '2.1.1',
-462 silly addNameRange '2.2.0',
-462 silly addNameRange '2.2.5',
-462 silly addNameRange '2.2.6',
-462 silly addNameRange '2.2.9',
-462 silly addNameRange '2.9.0',
-462 silly addNameRange '2.9.1',
-462 silly addNameRange '2.9.2',
-462 silly addNameRange '2.9.3',
-462 silly addNameRange '2.9.100',
-462 silly addNameRange '2.9.150',
-462 silly addNameRange '2.9.151',
-462 silly addNameRange '2.9.152',
-462 silly addNameRange '2.9.153',
-462 silly addNameRange '2.9.200',
-462 silly addNameRange '2.9.201',
-462 silly addNameRange '2.9.202',
-462 silly addNameRange '2.9.203',
-462 silly addNameRange '2.10.0',
-462 silly addNameRange '2.11.0',
-462 silly addNameRange '2.11.1',
-462 silly addNameRange '2.11.2',
-462 silly addNameRange '2.11.3',
-462 silly addNameRange '2.11.4',
-462 silly addNameRange '2.12.0',
-462 silly addNameRange '2.14.0',
-462 silly addNameRange '2.16.0',
-462 silly addNameRange '2.16.2',
-462 silly addNameRange '2.16.4',
-462 silly addNameRange '2.16.6',
-462 silly addNameRange '2.18.0',
-462 silly addNameRange '2.19.0',
-462 silly addNameRange '2.20.0',
-462 silly addNameRange '2.21.0',
-462 silly addNameRange '2.22.0',
-462 silly addNameRange '2.23.0',
-462 silly addNameRange '2.24.0',
-462 silly addNameRange '2.25.0',
-462 silly addNameRange '2.26.0',
-462 silly addNameRange '2.27.0',
-462 silly addNameRange '2.28.0',
-462 silly addNameRange '2.29.0',
-462 silly addNameRange '2.30.0',
-462 silly addNameRange '2.31.0',
-462 silly addNameRange '2.32.0',
-462 silly addNameRange '2.33.0',
-462 silly addNameRange '2.34.0',
-462 silly addNameRange '2.35.0',
-462 silly addNameRange '2.36.0',
-462 silly addNameRange '2.37.0',
-462 silly addNameRange '2.38.0',
-462 silly addNameRange '2.39.0',
-462 silly addNameRange '2.40.0',
-462 silly addNameRange '2.41.0',
-462 silly addNameRange '2.42.0',
-462 silly addNameRange '2.43.0',
-462 silly addNameRange '2.44.0',
-462 silly addNameRange '2.45.0',
-462 silly addNameRange '2.46.0',
-462 silly addNameRange '2.47.0',
-462 silly addNameRange '2.48.0',
-462 silly addNameRange '2.49.0',
-462 silly addNameRange '2.50.0',
-462 silly addNameRange '2.51.0',
-462 silly addNameRange '2.52.0',
-462 silly addNameRange '2.53.0',
-462 silly addNameRange '2.54.0',
-462 silly addNameRange '2.55.0',
-462 silly addNameRange '2.56.0',
-462 silly addNameRange '2.57.0',
-462 silly addNameRange '2.58.0',
-462 silly addNameRange '2.59.0',
-462 silly addNameRange '2.60.0',
-462 silly addNameRange '2.61.0',
-462 silly addNameRange '2.62.0',
-462 silly addNameRange '2.63.0',
-462 silly addNameRange ... 26 more items ] ]
-463 silly addNamed request@2.88.2
-464 verbose addNamed "2.88.2" is a plain semver version for request
-465 warn deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
-466 silly fetchAndShaCheck shasum d91cefd62d1436ca0f41620e251288d420099def
-467 silly cache afterAdd source-map@0.6.1
-468 verbose afterAdd /home/christine/.npm/source-map/0.6.1/package/package.json not in flight; writing
-469 silly mapToRegistry name request
-470 silly mapToRegistry using default registry
-471 silly mapToRegistry registry https://registry.npmjs.org/
-472 silly mapToRegistry uri https://registry.npmjs.org/request
-473 verbose addRemoteTarball https://registry.npmjs.org/request/-/request-2.88.2.tgz not in flight; adding
-474 verbose addRemoteTarball [ 'https://registry.npmjs.org/request/-/request-2.88.2.tgz',
-474 verbose addRemoteTarball 'd73c918731cb5a87da047e207234146f664d12b3' ]
-475 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz not in flight; adding
-476 verbose addTmpTarball already have metadata; skipping unpack for mkdirp@0.5.5
-477 info retry fetch attempt 1 at 13:48:57
-478 info attempt registry request try #1 at 13:48:57
-479 http fetch GET https://registry.npmjs.org/request/-/request-2.88.2.tgz
-480 verbose afterAdd /home/christine/.npm/source-map/0.6.1/package/package.json written
-481 silly cache afterAdd graceful-fs@4.2.4
-482 verbose afterAdd /home/christine/.npm/graceful-fs/4.2.4/package/package.json not in flight; writing
-483 silly cache afterAdd tslib@1.13.0
-484 verbose afterAdd /home/christine/.npm/tslib/1.13.0/package/package.json not in flight; writing
-485 silly cache afterAdd mime@1.6.0
-486 verbose afterAdd /home/christine/.npm/mime/1.6.0/package/package.json not in flight; writing
-487 verbose afterAdd /home/christine/.npm/graceful-fs/4.2.4/package/package.json written
-488 verbose afterAdd /home/christine/.npm/tslib/1.13.0/package/package.json written
-489 verbose afterAdd /home/christine/.npm/mime/1.6.0/package/package.json written
-490 silly cache afterAdd mkdirp@0.5.5
-491 verbose afterAdd /home/christine/.npm/mkdirp/0.5.5/package/package.json not in flight; writing
-492 verbose afterAdd /home/christine/.npm/mkdirp/0.5.5/package/package.json written
-493 http fetch 200 https://registry.npmjs.org/promise/-/promise-7.3.1.tgz
-494 silly fetchAndShaCheck shasum 064b72602b18f90f29192b8b1bc418ffd1ebd3bf
-495 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/promise/-/promise-7.3.1.tgz not in flight; adding
-496 verbose addTmpTarball already have metadata; skipping unpack for promise@7.3.1
-497 silly cache afterAdd promise@7.3.1
-498 verbose afterAdd /home/christine/.npm/promise/7.3.1/package/package.json not in flight; writing
-499 verbose afterAdd /home/christine/.npm/promise/7.3.1/package/package.json written
-500 http fetch 200 https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz
-501 silly fetchAndShaCheck shasum 09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c
-502 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/image-size/-/image-size-0.5.5.tgz not in flight; adding
-503 verbose addTmpTarball already have metadata; skipping unpack for image-size@0.5.5
-504 http fetch 200 https://registry.npmjs.org/request/-/request-2.88.2.tgz
-505 silly cache afterAdd image-size@0.5.5
-506 verbose afterAdd /home/christine/.npm/image-size/0.5.5/package/package.json not in flight; writing
-507 verbose afterAdd /home/christine/.npm/image-size/0.5.5/package/package.json written
-508 silly fetchAndShaCheck shasum d73c918731cb5a87da047e207234146f664d12b3
-509 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/request/-/request-2.88.2.tgz not in flight; adding
-510 verbose addTmpTarball already have metadata; skipping unpack for request@2.88.2
-511 silly cache afterAdd request@2.88.2
-512 verbose afterAdd /home/christine/.npm/request/2.88.2/package/package.json not in flight; writing
-513 verbose afterAdd /home/christine/.npm/request/2.88.2/package/package.json written
-514 silly fetchNamedPackageData prr
-515 silly mapToRegistry name prr
-516 silly mapToRegistry using default registry
-517 silly mapToRegistry registry https://registry.npmjs.org/
-518 silly mapToRegistry uri https://registry.npmjs.org/prr
-519 verbose request uri https://registry.npmjs.org/prr
-520 verbose request no auth needed
-521 info attempt registry request try #1 at 13:48:57
-522 verbose etag W/"07ebb6c11e7a8b0a67aabb93f8b3aa09"
-523 verbose lastModified Sun, 27 May 2018 13:04:47 GMT
-524 http request GET https://registry.npmjs.org/prr
-525 http 304 https://registry.npmjs.org/prr
-526 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-526 verbose headers connection: 'keep-alive',
-526 verbose headers 'set-cookie':
-526 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-526 verbose headers 'cf-ray': '59764fa31fae648b-FRA',
-526 verbose headers age: '5629',
-526 verbose headers 'cache-control': 'public, max-age=300',
-526 verbose headers etag: '"07ebb6c11e7a8b0a67aabb93f8b3aa09"',
-526 verbose headers 'last-modified': 'Sun, 27 May 2018 13:04:47 GMT',
-526 verbose headers vary: 'Accept-Encoding',
-526 verbose headers 'cf-cache-status': 'HIT',
-526 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-526 verbose headers server: 'cloudflare',
-526 verbose headers 'cf-request-id': '02ddd019ef0000648bda3f9200000001' }
-527 silly get cb [ 304,
-527 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-527 silly get connection: 'keep-alive',
-527 silly get 'set-cookie':
-527 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-527 silly get 'cf-ray': '59764fa31fae648b-FRA',
-527 silly get age: '5629',
-527 silly get 'cache-control': 'public, max-age=300',
-527 silly get etag: '"07ebb6c11e7a8b0a67aabb93f8b3aa09"',
-527 silly get 'last-modified': 'Sun, 27 May 2018 13:04:47 GMT',
-527 silly get vary: 'Accept-Encoding',
-527 silly get 'cf-cache-status': 'HIT',
-527 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-527 silly get server: 'cloudflare',
-527 silly get 'cf-request-id': '02ddd019ef0000648bda3f9200000001' } ]
-528 verbose etag https://registry.npmjs.org/prr from cache
-529 verbose get saving prr to /home/christine/.npm/registry.npmjs.org/prr/.cache.json
-530 silly resolveWithNewModule prr@1.0.1 checking installable status
-531 silly cache add args [ 'prr@~1.0.1', null ]
-532 verbose cache add spec prr@~1.0.1
-533 silly cache add parsed spec Result {
-533 silly cache add raw: 'prr@~1.0.1',
-533 silly cache add scope: null,
-533 silly cache add name: 'prr',
-533 silly cache add rawSpec: '~1.0.1',
-533 silly cache add spec: '>=1.0.1 <1.1.0',
-533 silly cache add type: 'range' }
-534 silly addNamed prr@>=1.0.1 <1.1.0
-535 verbose addNamed ">=1.0.1 <1.1.0" is a valid semver range for prr
-536 silly addNameRange { name: 'prr', range: '>=1.0.1 <1.1.0', hasData: false }
-537 silly mapToRegistry name prr
-538 silly mapToRegistry using default registry
-539 silly mapToRegistry registry https://registry.npmjs.org/
-540 silly mapToRegistry uri https://registry.npmjs.org/prr
-541 verbose addNameRange registry:https://registry.npmjs.org/prr not in flight; fetching
-542 verbose get https://registry.npmjs.org/prr not expired, no request
-543 silly addNameRange number 2 { name: 'prr', range: '>=1.0.1 <1.1.0', hasData: true }
-544 silly addNameRange versions [ 'prr', [ '0.0.0', '1.0.0', '1.0.1' ] ]
-545 silly addNamed prr@1.0.1
-546 verbose addNamed "1.0.1" is a plain semver version for prr
-547 silly cache afterAdd prr@1.0.1
-548 verbose afterAdd /home/christine/.npm/prr/1.0.1/package/package.json not in flight; writing
-549 verbose afterAdd /home/christine/.npm/prr/1.0.1/package/package.json written
-550 silly fetchNamedPackageData minimist
-551 silly mapToRegistry name minimist
-552 silly mapToRegistry using default registry
-553 silly mapToRegistry registry https://registry.npmjs.org/
-554 silly mapToRegistry uri https://registry.npmjs.org/minimist
-555 verbose request uri https://registry.npmjs.org/minimist
-556 verbose request no auth needed
-557 info attempt registry request try #1 at 13:48:57
-558 verbose etag W/"81c2eaf8bba19c1bd6131ba9e932902f"
-559 verbose lastModified Sun, 11 Aug 2019 09:03:19 GMT
-560 http request GET https://registry.npmjs.org/minimist
-561 http 200 https://registry.npmjs.org/minimist
-562 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-562 verbose headers 'content-type': 'application/json',
-562 verbose headers 'transfer-encoding': 'chunked',
-562 verbose headers connection: 'keep-alive',
-562 verbose headers 'set-cookie':
-562 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-562 verbose headers 'cf-ray': '59764fa35d5205fd-FRA',
-562 verbose headers age: '5653',
-562 verbose headers 'cache-control': 'public, max-age=300',
-562 verbose headers etag: 'W/"ab6c93df45eeb8867cab5ea4f62b4b74"',
-562 verbose headers 'last-modified': 'Thu, 12 Mar 2020 22:16:24 GMT',
-562 verbose headers vary: 'accept-encoding, accept',
-562 verbose headers 'cf-cache-status': 'HIT',
-562 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-562 verbose headers server: 'cloudflare',
-562 verbose headers 'content-encoding': 'gzip',
-562 verbose headers 'cf-request-id': '02ddd01a16000005fd8da2d200000001' }
-563 silly get cb [ 200,
-563 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-563 silly get 'content-type': 'application/json',
-563 silly get 'transfer-encoding': 'chunked',
-563 silly get connection: 'keep-alive',
-563 silly get 'set-cookie':
-563 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-563 silly get 'cf-ray': '59764fa35d5205fd-FRA',
-563 silly get age: '5653',
-563 silly get 'cache-control': 'public, max-age=300',
-563 silly get etag: 'W/"ab6c93df45eeb8867cab5ea4f62b4b74"',
-563 silly get 'last-modified': 'Thu, 12 Mar 2020 22:16:24 GMT',
-563 silly get vary: 'accept-encoding, accept',
-563 silly get 'cf-cache-status': 'HIT',
-563 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-563 silly get server: 'cloudflare',
-563 silly get 'content-encoding': 'gzip',
-563 silly get 'cf-request-id': '02ddd01a16000005fd8da2d200000001' } ]
-564 verbose get saving minimist to /home/christine/.npm/registry.npmjs.org/minimist/.cache.json
-565 silly resolveWithNewModule minimist@1.2.5 checking installable status
-566 silly cache add args [ 'minimist@^1.2.5', null ]
-567 verbose cache add spec minimist@^1.2.5
-568 silly cache add parsed spec Result {
-568 silly cache add raw: 'minimist@^1.2.5',
-568 silly cache add scope: null,
-568 silly cache add name: 'minimist',
-568 silly cache add rawSpec: '^1.2.5',
-568 silly cache add spec: '>=1.2.5 <2.0.0',
-568 silly cache add type: 'range' }
-569 silly addNamed minimist@>=1.2.5 <2.0.0
-570 verbose addNamed ">=1.2.5 <2.0.0" is a valid semver range for minimist
-571 silly addNameRange { name: 'minimist', range: '>=1.2.5 <2.0.0', hasData: false }
-572 silly mapToRegistry name minimist
-573 silly mapToRegistry using default registry
-574 silly mapToRegistry registry https://registry.npmjs.org/
-575 silly mapToRegistry uri https://registry.npmjs.org/minimist
-576 verbose addNameRange registry:https://registry.npmjs.org/minimist not in flight; fetching
-577 verbose get https://registry.npmjs.org/minimist not expired, no request
-578 silly addNameRange number 2 { name: 'minimist', range: '>=1.2.5 <2.0.0', hasData: true }
-579 silly addNameRange versions [ 'minimist',
-579 silly addNameRange [ '0.0.0',
-579 silly addNameRange '0.0.1',
-579 silly addNameRange '0.0.2',
-579 silly addNameRange '0.0.3',
-579 silly addNameRange '0.0.4',
-579 silly addNameRange '0.0.5',
-579 silly addNameRange '0.0.6',
-579 silly addNameRange '0.0.7',
-579 silly addNameRange '0.0.8',
-579 silly addNameRange '0.0.9',
-579 silly addNameRange '0.0.10',
-579 silly addNameRange '0.1.0',
-579 silly addNameRange '0.2.0',
-579 silly addNameRange '1.0.0',
-579 silly addNameRange '1.1.0',
-579 silly addNameRange '1.1.1',
-579 silly addNameRange '1.1.2',
-579 silly addNameRange '1.1.3',
-579 silly addNameRange '1.2.0',
-579 silly addNameRange '1.2.1',
-579 silly addNameRange '1.2.2',
-579 silly addNameRange '1.2.3',
-579 silly addNameRange '1.2.4',
-579 silly addNameRange '0.2.1',
-579 silly addNameRange '1.2.5' ] ]
-580 silly addNamed minimist@1.2.5
-581 verbose addNamed "1.2.5" is a plain semver version for minimist
-582 silly mapToRegistry name minimist
-583 silly mapToRegistry using default registry
-584 silly mapToRegistry registry https://registry.npmjs.org/
-585 silly mapToRegistry uri https://registry.npmjs.org/minimist
-586 verbose addRemoteTarball https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz not in flight; adding
-587 verbose addRemoteTarball [ 'https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz',
-587 verbose addRemoteTarball '67d66014b66a6a8aaa0c083c5fd58df4e4e97602' ]
-588 info retry fetch attempt 1 at 13:48:57
-589 info attempt registry request try #1 at 13:48:57
-590 http fetch GET https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz
-591 http fetch 200 https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz
-592 silly fetchAndShaCheck shasum 67d66014b66a6a8aaa0c083c5fd58df4e4e97602
-593 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/minimist/-/minimist-1.2.5.tgz not in flight; adding
-594 verbose addTmpTarball already have metadata; skipping unpack for minimist@1.2.5
-595 silly cache afterAdd minimist@1.2.5
-596 verbose afterAdd /home/christine/.npm/minimist/1.2.5/package/package.json not in flight; writing
-597 verbose afterAdd /home/christine/.npm/minimist/1.2.5/package/package.json written
-598 silly fetchNamedPackageData asap
-599 silly mapToRegistry name asap
-600 silly mapToRegistry using default registry
-601 silly mapToRegistry registry https://registry.npmjs.org/
-602 silly mapToRegistry uri https://registry.npmjs.org/asap
-603 verbose request uri https://registry.npmjs.org/asap
-604 verbose request no auth needed
-605 info attempt registry request try #1 at 13:48:57
-606 http request GET https://registry.npmjs.org/asap
-607 http 200 https://registry.npmjs.org/asap
-608 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-608 verbose headers 'content-type': 'application/json; charset=UTF-8',
-608 verbose headers 'transfer-encoding': 'chunked',
-608 verbose headers connection: 'keep-alive',
-608 verbose headers 'set-cookie':
-608 verbose headers [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-608 verbose headers 'cf-ray': '59764fa3da5bdfc7-FRA',
-608 verbose headers age: '5027',
-608 verbose headers 'cache-control': 'public, max-age=300',
-608 verbose headers etag: 'W/"b9309e9e7d929bcdb698cfa401f3696f"',
-608 verbose headers 'last-modified': 'Sat, 26 May 2018 17:25:23 GMT',
-608 verbose headers vary: 'accept-encoding, accept',
-608 verbose headers 'cf-cache-status': 'HIT',
-608 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-608 verbose headers server: 'cloudflare',
-608 verbose headers 'content-encoding': 'gzip',
-608 verbose headers 'cf-request-id': '02ddd01a6b0000dfc72a89b200000001' }
-609 silly get cb [ 200,
-609 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-609 silly get 'content-type': 'application/json; charset=UTF-8',
-609 silly get 'transfer-encoding': 'chunked',
-609 silly get connection: 'keep-alive',
-609 silly get 'set-cookie':
-609 silly get [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-609 silly get 'cf-ray': '59764fa3da5bdfc7-FRA',
-609 silly get age: '5027',
-609 silly get 'cache-control': 'public, max-age=300',
-609 silly get etag: 'W/"b9309e9e7d929bcdb698cfa401f3696f"',
-609 silly get 'last-modified': 'Sat, 26 May 2018 17:25:23 GMT',
-609 silly get vary: 'accept-encoding, accept',
-609 silly get 'cf-cache-status': 'HIT',
-609 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-609 silly get server: 'cloudflare',
-609 silly get 'content-encoding': 'gzip',
-609 silly get 'cf-request-id': '02ddd01a6b0000dfc72a89b200000001' } ]
-610 verbose get saving asap to /home/christine/.npm/registry.npmjs.org/asap/.cache.json
-611 silly resolveWithNewModule asap@2.0.6 checking installable status
-612 silly cache add args [ 'asap@~2.0.3', null ]
-613 verbose cache add spec asap@~2.0.3
-614 silly cache add parsed spec Result {
-614 silly cache add raw: 'asap@~2.0.3',
-614 silly cache add scope: null,
-614 silly cache add name: 'asap',
-614 silly cache add rawSpec: '~2.0.3',
-614 silly cache add spec: '>=2.0.3 <2.1.0',
-614 silly cache add type: 'range' }
-615 silly addNamed asap@>=2.0.3 <2.1.0
-616 verbose addNamed ">=2.0.3 <2.1.0" is a valid semver range for asap
-617 silly addNameRange { name: 'asap', range: '>=2.0.3 <2.1.0', hasData: false }
-618 silly mapToRegistry name asap
-619 silly mapToRegistry using default registry
-620 silly mapToRegistry registry https://registry.npmjs.org/
-621 silly mapToRegistry uri https://registry.npmjs.org/asap
-622 verbose addNameRange registry:https://registry.npmjs.org/asap not in flight; fetching
-623 verbose get https://registry.npmjs.org/asap not expired, no request
-624 silly addNameRange number 2 { name: 'asap', range: '>=2.0.3 <2.1.0', hasData: true }
-625 silly addNameRange versions [ 'asap',
-625 silly addNameRange [ '0.0.0',
-625 silly addNameRange '1.0.0',
-625 silly addNameRange '2.0.0',
-625 silly addNameRange '2.0.1',
-625 silly addNameRange '2.0.2',
-625 silly addNameRange '2.0.3',
-625 silly addNameRange '2.0.4',
-625 silly addNameRange '2.0.5',
-625 silly addNameRange '2.0.6' ] ]
-626 silly addNamed asap@2.0.6
-627 verbose addNamed "2.0.6" is a plain semver version for asap
-628 silly mapToRegistry name asap
-629 silly mapToRegistry using default registry
-630 silly mapToRegistry registry https://registry.npmjs.org/
-631 silly mapToRegistry uri https://registry.npmjs.org/asap
-632 verbose addRemoteTarball https://registry.npmjs.org/asap/-/asap-2.0.6.tgz not in flight; adding
-633 verbose addRemoteTarball [ 'https://registry.npmjs.org/asap/-/asap-2.0.6.tgz',
-633 verbose addRemoteTarball 'e50347611d7e690943208bbdafebcbc2fb866d46' ]
-634 info retry fetch attempt 1 at 13:48:57
-635 info attempt registry request try #1 at 13:48:57
-636 http fetch GET https://registry.npmjs.org/asap/-/asap-2.0.6.tgz
-637 http fetch 200 https://registry.npmjs.org/asap/-/asap-2.0.6.tgz
-638 silly fetchAndShaCheck shasum e50347611d7e690943208bbdafebcbc2fb866d46
-639 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/asap/-/asap-2.0.6.tgz not in flight; adding
-640 verbose addTmpTarball already have metadata; skipping unpack for asap@2.0.6
-641 silly cache afterAdd asap@2.0.6
-642 verbose afterAdd /home/christine/.npm/asap/2.0.6/package/package.json not in flight; writing
-643 verbose afterAdd /home/christine/.npm/asap/2.0.6/package/package.json written
-644 silly fetchNamedPackageData aws-sign2
-645 silly mapToRegistry name aws-sign2
-646 silly mapToRegistry using default registry
-647 silly mapToRegistry registry https://registry.npmjs.org/
-648 silly mapToRegistry uri https://registry.npmjs.org/aws-sign2
-649 silly fetchNamedPackageData aws4
-650 silly mapToRegistry name aws4
-651 silly mapToRegistry using default registry
-652 silly mapToRegistry registry https://registry.npmjs.org/
-653 silly mapToRegistry uri https://registry.npmjs.org/aws4
-654 silly fetchNamedPackageData caseless
-655 silly mapToRegistry name caseless
-656 silly mapToRegistry using default registry
-657 silly mapToRegistry registry https://registry.npmjs.org/
-658 silly mapToRegistry uri https://registry.npmjs.org/caseless
-659 silly fetchNamedPackageData combined-stream
-660 silly mapToRegistry name combined-stream
-661 silly mapToRegistry using default registry
-662 silly mapToRegistry registry https://registry.npmjs.org/
-663 silly mapToRegistry uri https://registry.npmjs.org/combined-stream
-664 silly fetchNamedPackageData extend
-665 silly mapToRegistry name extend
-666 silly mapToRegistry using default registry
-667 silly mapToRegistry registry https://registry.npmjs.org/
-668 silly mapToRegistry uri https://registry.npmjs.org/extend
-669 silly fetchNamedPackageData forever-agent
-670 silly mapToRegistry name forever-agent
-671 silly mapToRegistry using default registry
-672 silly mapToRegistry registry https://registry.npmjs.org/
-673 silly mapToRegistry uri https://registry.npmjs.org/forever-agent
-674 silly fetchNamedPackageData form-data
-675 silly mapToRegistry name form-data
-676 silly mapToRegistry using default registry
-677 silly mapToRegistry registry https://registry.npmjs.org/
-678 silly mapToRegistry uri https://registry.npmjs.org/form-data
-679 silly fetchNamedPackageData har-validator
-680 silly mapToRegistry name har-validator
-681 silly mapToRegistry using default registry
-682 silly mapToRegistry registry https://registry.npmjs.org/
-683 silly mapToRegistry uri https://registry.npmjs.org/har-validator
-684 silly fetchNamedPackageData http-signature
-685 silly mapToRegistry name http-signature
-686 silly mapToRegistry using default registry
-687 silly mapToRegistry registry https://registry.npmjs.org/
-688 silly mapToRegistry uri https://registry.npmjs.org/http-signature
-689 silly fetchNamedPackageData is-typedarray
-690 silly mapToRegistry name is-typedarray
-691 silly mapToRegistry using default registry
-692 silly mapToRegistry registry https://registry.npmjs.org/
-693 silly mapToRegistry uri https://registry.npmjs.org/is-typedarray
-694 silly fetchNamedPackageData isstream
-695 silly mapToRegistry name isstream
-696 silly mapToRegistry using default registry
-697 silly mapToRegistry registry https://registry.npmjs.org/
-698 silly mapToRegistry uri https://registry.npmjs.org/isstream
-699 silly fetchNamedPackageData json-stringify-safe
-700 silly mapToRegistry name json-stringify-safe
-701 silly mapToRegistry using default registry
-702 silly mapToRegistry registry https://registry.npmjs.org/
-703 silly mapToRegistry uri https://registry.npmjs.org/json-stringify-safe
-704 silly fetchNamedPackageData mime-types
-705 silly mapToRegistry name mime-types
-706 silly mapToRegistry using default registry
-707 silly mapToRegistry registry https://registry.npmjs.org/
-708 silly mapToRegistry uri https://registry.npmjs.org/mime-types
-709 silly fetchNamedPackageData oauth-sign
-710 silly mapToRegistry name oauth-sign
-711 silly mapToRegistry using default registry
-712 silly mapToRegistry registry https://registry.npmjs.org/
-713 silly mapToRegistry uri https://registry.npmjs.org/oauth-sign
-714 silly fetchNamedPackageData performance-now
-715 silly mapToRegistry name performance-now
-716 silly mapToRegistry using default registry
-717 silly mapToRegistry registry https://registry.npmjs.org/
-718 silly mapToRegistry uri https://registry.npmjs.org/performance-now
-719 silly fetchNamedPackageData qs
-720 silly mapToRegistry name qs
-721 silly mapToRegistry using default registry
-722 silly mapToRegistry registry https://registry.npmjs.org/
-723 silly mapToRegistry uri https://registry.npmjs.org/qs
-724 silly fetchNamedPackageData safe-buffer
-725 silly mapToRegistry name safe-buffer
-726 silly mapToRegistry using default registry
-727 silly mapToRegistry registry https://registry.npmjs.org/
-728 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer
-729 silly fetchNamedPackageData tough-cookie
-730 silly mapToRegistry name tough-cookie
-731 silly mapToRegistry using default registry
-732 silly mapToRegistry registry https://registry.npmjs.org/
-733 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie
-734 silly fetchNamedPackageData tunnel-agent
-735 silly mapToRegistry name tunnel-agent
-736 silly mapToRegistry using default registry
-737 silly mapToRegistry registry https://registry.npmjs.org/
-738 silly mapToRegistry uri https://registry.npmjs.org/tunnel-agent
-739 silly fetchNamedPackageData uuid
-740 silly mapToRegistry name uuid
-741 silly mapToRegistry using default registry
-742 silly mapToRegistry registry https://registry.npmjs.org/
-743 silly mapToRegistry uri https://registry.npmjs.org/uuid
-744 verbose request uri https://registry.npmjs.org/aws-sign2
-745 verbose request no auth needed
-746 info attempt registry request try #1 at 13:48:57
-747 verbose etag W/"7bf763d2cccd0806178c5c3e43895950"
-748 verbose lastModified Sat, 26 May 2018 17:48:52 GMT
-749 http request GET https://registry.npmjs.org/aws-sign2
-750 verbose request uri https://registry.npmjs.org/aws4
-751 verbose request no auth needed
-752 info attempt registry request try #1 at 13:48:57
-753 verbose etag W/"95c9834de9b7164b9a063970ba631035"
-754 verbose lastModified Mon, 13 Jan 2020 23:25:51 GMT
-755 http request GET https://registry.npmjs.org/aws4
-756 verbose request uri https://registry.npmjs.org/caseless
-757 verbose request no auth needed
-758 info attempt registry request try #1 at 13:48:57
-759 verbose etag W/"37dc2c2e48fd048da76bb52a97386418"
-760 verbose lastModified Sat, 26 May 2018 19:27:25 GMT
-761 http request GET https://registry.npmjs.org/caseless
-762 verbose request uri https://registry.npmjs.org/combined-stream
-763 verbose request no auth needed
-764 info attempt registry request try #1 at 13:48:57
-765 verbose etag W/"01d038e7b9fcfd5e5654a7d7003bfe74"
-766 verbose lastModified Sun, 12 May 2019 17:49:50 GMT
-767 http request GET https://registry.npmjs.org/combined-stream
-768 verbose request uri https://registry.npmjs.org/extend
-769 verbose request no auth needed
-770 info attempt registry request try #1 at 13:48:57
-771 verbose etag W/"924fa39abddd399eb964b1aa611da651"
-772 verbose lastModified Thu, 19 Jul 2018 22:12:47 GMT
-773 http request GET https://registry.npmjs.org/extend
-774 verbose request uri https://registry.npmjs.org/forever-agent
-775 verbose request no auth needed
-776 info attempt registry request try #1 at 13:48:57
-777 verbose etag W/"9e6ef96089dd23304c2ea7d2fb731c9c"
-778 verbose lastModified Sun, 27 May 2018 01:06:13 GMT
-779 http request GET https://registry.npmjs.org/forever-agent
-780 verbose request uri https://registry.npmjs.org/form-data
-781 verbose request no auth needed
-782 info attempt registry request try #1 at 13:48:57
-783 verbose etag W/"5e211bf0fabf58f7b2a855c8b4ce28a4"
-784 verbose lastModified Wed, 06 Nov 2019 07:57:03 GMT
-785 http request GET https://registry.npmjs.org/form-data
-786 verbose request uri https://registry.npmjs.org/har-validator
-787 verbose request no auth needed
-788 info attempt registry request try #1 at 13:48:57
-789 verbose etag W/"a261ac4614f4e022065b83613ee209ab"
-790 verbose lastModified Fri, 04 Jan 2019 02:36:17 GMT
-791 http request GET https://registry.npmjs.org/har-validator
-792 verbose request uri https://registry.npmjs.org/http-signature
-793 verbose request no auth needed
-794 info attempt registry request try #1 at 13:48:57
-795 verbose etag W/"a22cccd7d585d00e5e26fe5111bee01d"
-796 verbose lastModified Fri, 13 Dec 2019 16:32:29 GMT
-797 http request GET https://registry.npmjs.org/http-signature
-798 verbose request uri https://registry.npmjs.org/is-typedarray
-799 verbose request no auth needed
-800 info attempt registry request try #1 at 13:48:57
-801 verbose etag W/"e7b88219ebe721b877b678c51795c9c5"
-802 verbose lastModified Sun, 27 May 2018 04:59:55 GMT
-803 http request GET https://registry.npmjs.org/is-typedarray
-804 verbose request uri https://registry.npmjs.org/isstream
-805 verbose request no auth needed
-806 info attempt registry request try #1 at 13:48:57
-807 verbose etag W/"9dc7f37e087df077683bf238c847ad45"
-808 verbose lastModified Sun, 27 May 2018 05:02:31 GMT
-809 http request GET https://registry.npmjs.org/isstream
-810 verbose request uri https://registry.npmjs.org/json-stringify-safe
-811 verbose request no auth needed
-812 info attempt registry request try #1 at 13:48:57
-813 verbose etag W/"7f39a9aafcaefe8efbf43a9f2e56c4eb"
-814 verbose lastModified Sun, 27 May 2018 05:41:03 GMT
-815 http request GET https://registry.npmjs.org/json-stringify-safe
-816 verbose request uri https://registry.npmjs.org/oauth-sign
-817 verbose request no auth needed
-818 info attempt registry request try #1 at 13:48:57
-819 verbose etag W/"3032c1efe9ec61d748d027a1da2bab61"
-820 verbose lastModified Thu, 02 Aug 2018 18:04:02 GMT
-821 http request GET https://registry.npmjs.org/oauth-sign
-822 verbose request uri https://registry.npmjs.org/mime-types
-823 verbose request no auth needed
-824 info attempt registry request try #1 at 13:48:57
-825 verbose etag W/"ace0d1d2bbdfabcc2f0fdf5db2297cb9"
-826 verbose lastModified Mon, 06 Jan 2020 03:47:58 GMT
-827 http request GET https://registry.npmjs.org/mime-types
-828 verbose request uri https://registry.npmjs.org/performance-now
-829 verbose request no auth needed
-830 info attempt registry request try #1 at 13:48:57
-831 verbose etag W/"5f12ad497b3e39323dcdde75c34f5767"
-832 verbose lastModified Sun, 27 May 2018 12:05:53 GMT
-833 http request GET https://registry.npmjs.org/performance-now
-834 verbose request uri https://registry.npmjs.org/qs
-835 verbose request no auth needed
-836 info attempt registry request try #1 at 13:48:57
-837 verbose etag W/"ccaef4541845c31c4cc05bcf8dd00ce6"
-838 verbose lastModified Fri, 08 Nov 2019 06:46:39 GMT
-839 http request GET https://registry.npmjs.org/qs
-840 verbose request uri https://registry.npmjs.org/tough-cookie
-841 verbose request no auth needed
-842 info attempt registry request try #1 at 13:48:57
-843 verbose etag W/"f1d93d88b646bb4c354f8c481852a1b7"
-844 verbose lastModified Tue, 05 Feb 2019 03:09:49 GMT
-845 http request GET https://registry.npmjs.org/tough-cookie
-846 verbose request uri https://registry.npmjs.org/tunnel-agent
-847 verbose request no auth needed
-848 info attempt registry request try #1 at 13:48:57
-849 verbose etag W/"03911fc1f433b33bccf8a4a2a5de2375"
-850 verbose lastModified Sun, 27 May 2018 20:02:57 GMT
-851 http request GET https://registry.npmjs.org/tunnel-agent
-852 verbose request uri https://registry.npmjs.org/safe-buffer
-853 verbose request no auth needed
-854 info attempt registry request try #1 at 13:48:57
-855 verbose etag W/"00b820fed08175238fc3473b2b3e0278"
-856 verbose lastModified Fri, 05 Jul 2019 18:04:37 GMT
-857 http request GET https://registry.npmjs.org/safe-buffer
-858 verbose request uri https://registry.npmjs.org/uuid
-859 verbose request no auth needed
-860 info attempt registry request try #1 at 13:48:57
-861 verbose etag W/"e1230e67a078f82b785335adbba5abd3"
-862 verbose lastModified Thu, 16 Jan 2020 21:05:42 GMT
-863 http request GET https://registry.npmjs.org/uuid
-864 http 304 https://registry.npmjs.org/aws-sign2
-865 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-865 verbose headers connection: 'keep-alive',
-865 verbose headers 'set-cookie':
-865 verbose headers [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-865 verbose headers 'cf-ray': '59764fa49cf4d6e9-FRA',
-865 verbose headers age: '5657',
-865 verbose headers 'cache-control': 'public, max-age=300',
-865 verbose headers etag: '"7bf763d2cccd0806178c5c3e43895950"',
-865 verbose headers 'last-modified': 'Sat, 26 May 2018 17:48:52 GMT',
-865 verbose headers vary: 'Accept-Encoding',
-865 verbose headers 'cf-cache-status': 'HIT',
-865 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-865 verbose headers server: 'cloudflare',
-865 verbose headers 'cf-request-id': '02ddd01ae00000d6e975b28200000001' }
-866 silly get cb [ 304,
-866 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-866 silly get connection: 'keep-alive',
-866 silly get 'set-cookie':
-866 silly get [ '__cfduid=d6501da2c31d6ed13bf98ae2d437c1a051590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-866 silly get 'cf-ray': '59764fa49cf4d6e9-FRA',
-866 silly get age: '5657',
-866 silly get 'cache-control': 'public, max-age=300',
-866 silly get etag: '"7bf763d2cccd0806178c5c3e43895950"',
-866 silly get 'last-modified': 'Sat, 26 May 2018 17:48:52 GMT',
-866 silly get vary: 'Accept-Encoding',
-866 silly get 'cf-cache-status': 'HIT',
-866 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-866 silly get server: 'cloudflare',
-866 silly get 'cf-request-id': '02ddd01ae00000d6e975b28200000001' } ]
-867 verbose etag https://registry.npmjs.org/aws-sign2 from cache
-868 verbose get saving aws-sign2 to /home/christine/.npm/registry.npmjs.org/aws-sign2/.cache.json
-869 silly resolveWithNewModule aws-sign2@0.7.0 checking installable status
-870 silly cache add args [ 'aws-sign2@~0.7.0', null ]
-871 verbose cache add spec aws-sign2@~0.7.0
-872 silly cache add parsed spec Result {
-872 silly cache add raw: 'aws-sign2@~0.7.0',
-872 silly cache add scope: null,
-872 silly cache add name: 'aws-sign2',
-872 silly cache add rawSpec: '~0.7.0',
-872 silly cache add spec: '>=0.7.0 <0.8.0',
-872 silly cache add type: 'range' }
-873 silly addNamed aws-sign2@>=0.7.0 <0.8.0
-874 verbose addNamed ">=0.7.0 <0.8.0" is a valid semver range for aws-sign2
-875 silly addNameRange { name: 'aws-sign2', range: '>=0.7.0 <0.8.0', hasData: false }
-876 silly mapToRegistry name aws-sign2
-877 silly mapToRegistry using default registry
-878 silly mapToRegistry registry https://registry.npmjs.org/
-879 silly mapToRegistry uri https://registry.npmjs.org/aws-sign2
-880 verbose addNameRange registry:https://registry.npmjs.org/aws-sign2 not in flight; fetching
-881 verbose get https://registry.npmjs.org/aws-sign2 not expired, no request
-882 silly addNameRange number 2 { name: 'aws-sign2', range: '>=0.7.0 <0.8.0', hasData: true }
-883 silly addNameRange versions [ 'aws-sign2', [ '0.4.0', '0.5.0', '0.6.0', '0.7.0' ] ]
-884 silly addNamed aws-sign2@0.7.0
-885 verbose addNamed "0.7.0" is a plain semver version for aws-sign2
-886 silly cache afterAdd aws-sign2@0.7.0
-887 verbose afterAdd /home/christine/.npm/aws-sign2/0.7.0/package/package.json not in flight; writing
-888 verbose afterAdd /home/christine/.npm/aws-sign2/0.7.0/package/package.json written
-889 http 304 https://registry.npmjs.org/form-data
-890 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-890 verbose headers connection: 'keep-alive',
-890 verbose headers 'set-cookie':
-890 verbose headers [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-890 verbose headers 'cf-ray': '59764fa4ba1305fd-FRA',
-890 verbose headers age: '5355',
-890 verbose headers 'cache-control': 'public, max-age=300',
-890 verbose headers etag: '"5e211bf0fabf58f7b2a855c8b4ce28a4"',
-890 verbose headers 'last-modified': 'Wed, 06 Nov 2019 07:57:03 GMT',
-890 verbose headers vary: 'Accept-Encoding',
-890 verbose headers 'cf-cache-status': 'HIT',
-890 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-890 verbose headers server: 'cloudflare',
-890 verbose headers 'cf-request-id': '02ddd01af4000005fd8da55200000001' }
-891 silly get cb [ 304,
-891 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-891 silly get connection: 'keep-alive',
-891 silly get 'set-cookie':
-891 silly get [ '__cfduid=d850f5e63141a007f397139d82cf517f01590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-891 silly get 'cf-ray': '59764fa4ba1305fd-FRA',
-891 silly get age: '5355',
-891 silly get 'cache-control': 'public, max-age=300',
-891 silly get etag: '"5e211bf0fabf58f7b2a855c8b4ce28a4"',
-891 silly get 'last-modified': 'Wed, 06 Nov 2019 07:57:03 GMT',
-891 silly get vary: 'Accept-Encoding',
-891 silly get 'cf-cache-status': 'HIT',
-891 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-891 silly get server: 'cloudflare',
-891 silly get 'cf-request-id': '02ddd01af4000005fd8da55200000001' } ]
-892 verbose etag https://registry.npmjs.org/form-data from cache
-893 verbose get saving form-data to /home/christine/.npm/registry.npmjs.org/form-data/.cache.json
-894 http 304 https://registry.npmjs.org/har-validator
-895 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-895 verbose headers connection: 'keep-alive',
-895 verbose headers 'set-cookie':
-895 verbose headers [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-895 verbose headers 'cf-ray': '59764fa4b9a6c272-FRA',
-895 verbose headers age: '5655',
-895 verbose headers 'cache-control': 'public, max-age=300',
-895 verbose headers etag: '"a261ac4614f4e022065b83613ee209ab"',
-895 verbose headers 'last-modified': 'Fri, 04 Jan 2019 02:36:17 GMT',
-895 verbose headers vary: 'Accept-Encoding',
-895 verbose headers 'cf-cache-status': 'HIT',
-895 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-895 verbose headers server: 'cloudflare',
-895 verbose headers 'cf-request-id': '02ddd01af40000c272388b2200000001' }
-896 silly get cb [ 304,
-896 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-896 silly get connection: 'keep-alive',
-896 silly get 'set-cookie':
-896 silly get [ '__cfduid=da26bd26924c67acdff0555528c279ae61590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-896 silly get 'cf-ray': '59764fa4b9a6c272-FRA',
-896 silly get age: '5655',
-896 silly get 'cache-control': 'public, max-age=300',
-896 silly get etag: '"a261ac4614f4e022065b83613ee209ab"',
-896 silly get 'last-modified': 'Fri, 04 Jan 2019 02:36:17 GMT',
-896 silly get vary: 'Accept-Encoding',
-896 silly get 'cf-cache-status': 'HIT',
-896 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-896 silly get server: 'cloudflare',
-896 silly get 'cf-request-id': '02ddd01af40000c272388b2200000001' } ]
-897 verbose etag https://registry.npmjs.org/har-validator from cache
-898 verbose get saving har-validator to /home/christine/.npm/registry.npmjs.org/har-validator/.cache.json
-899 http 304 https://registry.npmjs.org/caseless
-900 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-900 verbose headers connection: 'keep-alive',
-900 verbose headers 'set-cookie':
-900 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-900 verbose headers 'cf-ray': '59764fa4b9de325c-FRA',
-900 verbose headers age: '5655',
-900 verbose headers 'cache-control': 'public, max-age=300',
-900 verbose headers etag: '"37dc2c2e48fd048da76bb52a97386418"',
-900 verbose headers 'last-modified': 'Sat, 26 May 2018 19:27:25 GMT',
-900 verbose headers vary: 'Accept-Encoding',
-900 verbose headers 'cf-cache-status': 'HIT',
-900 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-900 verbose headers server: 'cloudflare',
-900 verbose headers 'cf-request-id': '02ddd01af40000325c4c810200000001' }
-901 silly get cb [ 304,
-901 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-901 silly get connection: 'keep-alive',
-901 silly get 'set-cookie':
-901 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-901 silly get 'cf-ray': '59764fa4b9de325c-FRA',
-901 silly get age: '5655',
-901 silly get 'cache-control': 'public, max-age=300',
-901 silly get etag: '"37dc2c2e48fd048da76bb52a97386418"',
-901 silly get 'last-modified': 'Sat, 26 May 2018 19:27:25 GMT',
-901 silly get vary: 'Accept-Encoding',
-901 silly get 'cf-cache-status': 'HIT',
-901 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-901 silly get server: 'cloudflare',
-901 silly get 'cf-request-id': '02ddd01af40000325c4c810200000001' } ]
-902 verbose etag https://registry.npmjs.org/caseless from cache
-903 verbose get saving caseless to /home/christine/.npm/registry.npmjs.org/caseless/.cache.json
-904 http 304 https://registry.npmjs.org/is-typedarray
-905 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-905 verbose headers connection: 'keep-alive',
-905 verbose headers 'set-cookie':
-905 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-905 verbose headers 'cf-ray': '59764fa4bc4a6347-FRA',
-905 verbose headers age: '5655',
-905 verbose headers 'cache-control': 'public, max-age=300',
-905 verbose headers etag: '"e7b88219ebe721b877b678c51795c9c5"',
-905 verbose headers 'last-modified': 'Sun, 27 May 2018 04:59:55 GMT',
-905 verbose headers vary: 'Accept-Encoding',
-905 verbose headers 'cf-cache-status': 'HIT',
-905 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-905 verbose headers server: 'cloudflare',
-905 verbose headers 'cf-request-id': '02ddd01af400006347e88ad200000001' }
-906 silly get cb [ 304,
-906 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-906 silly get connection: 'keep-alive',
-906 silly get 'set-cookie':
-906 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-906 silly get 'cf-ray': '59764fa4bc4a6347-FRA',
-906 silly get age: '5655',
-906 silly get 'cache-control': 'public, max-age=300',
-906 silly get etag: '"e7b88219ebe721b877b678c51795c9c5"',
-906 silly get 'last-modified': 'Sun, 27 May 2018 04:59:55 GMT',
-906 silly get vary: 'Accept-Encoding',
-906 silly get 'cf-cache-status': 'HIT',
-906 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-906 silly get server: 'cloudflare',
-906 silly get 'cf-request-id': '02ddd01af400006347e88ad200000001' } ]
-907 verbose etag https://registry.npmjs.org/is-typedarray from cache
-908 verbose get saving is-typedarray to /home/christine/.npm/registry.npmjs.org/is-typedarray/.cache.json
-909 http 304 https://registry.npmjs.org/forever-agent
-910 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-910 verbose headers connection: 'keep-alive',
-910 verbose headers 'set-cookie':
-910 verbose headers [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-910 verbose headers 'cf-ray': '59764fa4b87c648b-FRA',
-910 verbose headers age: '5655',
-910 verbose headers 'cache-control': 'public, max-age=300',
-910 verbose headers etag: '"9e6ef96089dd23304c2ea7d2fb731c9c"',
-910 verbose headers 'last-modified': 'Sun, 27 May 2018 01:06:13 GMT',
-910 verbose headers vary: 'Accept-Encoding',
-910 verbose headers 'cf-cache-status': 'HIT',
-910 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-910 verbose headers server: 'cloudflare',
-910 verbose headers 'cf-request-id': '02ddd01af40000648bda003200000001' }
-911 silly get cb [ 304,
-911 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-911 silly get connection: 'keep-alive',
-911 silly get 'set-cookie':
-911 silly get [ '__cfduid=d69b2d3a0ed04b60eed400c38cdaaf9511590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-911 silly get 'cf-ray': '59764fa4b87c648b-FRA',
-911 silly get age: '5655',
-911 silly get 'cache-control': 'public, max-age=300',
-911 silly get etag: '"9e6ef96089dd23304c2ea7d2fb731c9c"',
-911 silly get 'last-modified': 'Sun, 27 May 2018 01:06:13 GMT',
-911 silly get vary: 'Accept-Encoding',
-911 silly get 'cf-cache-status': 'HIT',
-911 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-911 silly get server: 'cloudflare',
-911 silly get 'cf-request-id': '02ddd01af40000648bda003200000001' } ]
-912 verbose etag https://registry.npmjs.org/forever-agent from cache
-913 verbose get saving forever-agent to /home/christine/.npm/registry.npmjs.org/forever-agent/.cache.json
-914 silly resolveWithNewModule form-data@2.3.3 checking installable status
-915 silly cache add args [ 'form-data@~2.3.2', null ]
-916 verbose cache add spec form-data@~2.3.2
-917 silly cache add parsed spec Result {
-917 silly cache add raw: 'form-data@~2.3.2',
-917 silly cache add scope: null,
-917 silly cache add name: 'form-data',
-917 silly cache add rawSpec: '~2.3.2',
-917 silly cache add spec: '>=2.3.2 <2.4.0',
-917 silly cache add type: 'range' }
-918 silly addNamed form-data@>=2.3.2 <2.4.0
-919 verbose addNamed ">=2.3.2 <2.4.0" is a valid semver range for form-data
-920 silly addNameRange { name: 'form-data', range: '>=2.3.2 <2.4.0', hasData: false }
-921 silly mapToRegistry name form-data
-922 silly mapToRegistry using default registry
-923 silly mapToRegistry registry https://registry.npmjs.org/
-924 silly mapToRegistry uri https://registry.npmjs.org/form-data
-925 verbose addNameRange registry:https://registry.npmjs.org/form-data not in flight; fetching
-926 silly resolveWithNewModule har-validator@5.1.3 checking installable status
-927 silly cache add args [ 'har-validator@~5.1.3', null ]
-928 verbose cache add spec har-validator@~5.1.3
-929 silly cache add parsed spec Result {
-929 silly cache add raw: 'har-validator@~5.1.3',
-929 silly cache add scope: null,
-929 silly cache add name: 'har-validator',
-929 silly cache add rawSpec: '~5.1.3',
-929 silly cache add spec: '>=5.1.3 <5.2.0',
-929 silly cache add type: 'range' }
-930 silly addNamed har-validator@>=5.1.3 <5.2.0
-931 verbose addNamed ">=5.1.3 <5.2.0" is a valid semver range for har-validator
-932 silly addNameRange { name: 'har-validator',
-932 silly addNameRange range: '>=5.1.3 <5.2.0',
-932 silly addNameRange hasData: false }
-933 silly mapToRegistry name har-validator
-934 silly mapToRegistry using default registry
-935 silly mapToRegistry registry https://registry.npmjs.org/
-936 silly mapToRegistry uri https://registry.npmjs.org/har-validator
-937 verbose addNameRange registry:https://registry.npmjs.org/har-validator not in flight; fetching
-938 http 304 https://registry.npmjs.org/extend
-939 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-939 verbose headers connection: 'keep-alive',
-939 verbose headers 'set-cookie':
-939 verbose headers [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-939 verbose headers 'cf-ray': '59764fa4bc61175a-FRA',
-939 verbose headers age: '5656',
-939 verbose headers 'cache-control': 'public, max-age=300',
-939 verbose headers etag: '"924fa39abddd399eb964b1aa611da651"',
-939 verbose headers 'last-modified': 'Thu, 19 Jul 2018 22:12:47 GMT',
-939 verbose headers vary: 'Accept-Encoding',
-939 verbose headers 'cf-cache-status': 'HIT',
-939 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-939 verbose headers server: 'cloudflare',
-939 verbose headers 'cf-request-id': '02ddd01af40000175a1e1fb200000001' }
-940 silly get cb [ 304,
-940 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-940 silly get connection: 'keep-alive',
-940 silly get 'set-cookie':
-940 silly get [ '__cfduid=d29dbbf504bb01fed0e3216d3e4c64fcc1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-940 silly get 'cf-ray': '59764fa4bc61175a-FRA',
-940 silly get age: '5656',
-940 silly get 'cache-control': 'public, max-age=300',
-940 silly get etag: '"924fa39abddd399eb964b1aa611da651"',
-940 silly get 'last-modified': 'Thu, 19 Jul 2018 22:12:47 GMT',
-940 silly get vary: 'Accept-Encoding',
-940 silly get 'cf-cache-status': 'HIT',
-940 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-940 silly get server: 'cloudflare',
-940 silly get 'cf-request-id': '02ddd01af40000175a1e1fb200000001' } ]
-941 verbose etag https://registry.npmjs.org/extend from cache
-942 verbose get saving extend to /home/christine/.npm/registry.npmjs.org/extend/.cache.json
-943 http 304 https://registry.npmjs.org/combined-stream
-944 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-944 verbose headers connection: 'keep-alive',
-944 verbose headers 'set-cookie':
-944 verbose headers [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-944 verbose headers 'cf-ray': '59764fa4b963d715-FRA',
-944 verbose headers age: '5355',
-944 verbose headers 'cache-control': 'public, max-age=300',
-944 verbose headers etag: '"01d038e7b9fcfd5e5654a7d7003bfe74"',
-944 verbose headers 'last-modified': 'Sun, 12 May 2019 17:49:50 GMT',
-944 verbose headers vary: 'Accept-Encoding',
-944 verbose headers 'cf-cache-status': 'HIT',
-944 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-944 verbose headers server: 'cloudflare',
-944 verbose headers 'cf-request-id': '02ddd01af40000d715c11f3200000001' }
-945 silly get cb [ 304,
-945 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-945 silly get connection: 'keep-alive',
-945 silly get 'set-cookie':
-945 silly get [ '__cfduid=de2f13b30bfc4f0fe2c257a08857023531590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-945 silly get 'cf-ray': '59764fa4b963d715-FRA',
-945 silly get age: '5355',
-945 silly get 'cache-control': 'public, max-age=300',
-945 silly get etag: '"01d038e7b9fcfd5e5654a7d7003bfe74"',
-945 silly get 'last-modified': 'Sun, 12 May 2019 17:49:50 GMT',
-945 silly get vary: 'Accept-Encoding',
-945 silly get 'cf-cache-status': 'HIT',
-945 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-945 silly get server: 'cloudflare',
-945 silly get 'cf-request-id': '02ddd01af40000d715c11f3200000001' } ]
-946 verbose etag https://registry.npmjs.org/combined-stream from cache
-947 verbose get saving combined-stream to /home/christine/.npm/registry.npmjs.org/combined-stream/.cache.json
-948 silly resolveWithNewModule is-typedarray@1.0.0 checking installable status
-949 silly cache add args [ 'is-typedarray@~1.0.0', null ]
-950 verbose cache add spec is-typedarray@~1.0.0
-951 silly cache add parsed spec Result {
-951 silly cache add raw: 'is-typedarray@~1.0.0',
-951 silly cache add scope: null,
-951 silly cache add name: 'is-typedarray',
-951 silly cache add rawSpec: '~1.0.0',
-951 silly cache add spec: '>=1.0.0 <1.1.0',
-951 silly cache add type: 'range' }
-952 silly addNamed is-typedarray@>=1.0.0 <1.1.0
-953 verbose addNamed ">=1.0.0 <1.1.0" is a valid semver range for is-typedarray
-954 silly addNameRange { name: 'is-typedarray',
-954 silly addNameRange range: '>=1.0.0 <1.1.0',
-954 silly addNameRange hasData: false }
-955 silly mapToRegistry name is-typedarray
-956 silly mapToRegistry using default registry
-957 silly mapToRegistry registry https://registry.npmjs.org/
-958 silly mapToRegistry uri https://registry.npmjs.org/is-typedarray
-959 verbose addNameRange registry:https://registry.npmjs.org/is-typedarray not in flight; fetching
-960 silly resolveWithNewModule caseless@0.12.0 checking installable status
-961 silly cache add args [ 'caseless@~0.12.0', null ]
-962 verbose cache add spec caseless@~0.12.0
-963 silly cache add parsed spec Result {
-963 silly cache add raw: 'caseless@~0.12.0',
-963 silly cache add scope: null,
-963 silly cache add name: 'caseless',
-963 silly cache add rawSpec: '~0.12.0',
-963 silly cache add spec: '>=0.12.0 <0.13.0',
-963 silly cache add type: 'range' }
-964 silly addNamed caseless@>=0.12.0 <0.13.0
-965 verbose addNamed ">=0.12.0 <0.13.0" is a valid semver range for caseless
-966 silly addNameRange { name: 'caseless', range: '>=0.12.0 <0.13.0', hasData: false }
-967 silly mapToRegistry name caseless
-968 silly mapToRegistry using default registry
-969 silly mapToRegistry registry https://registry.npmjs.org/
-970 silly mapToRegistry uri https://registry.npmjs.org/caseless
-971 verbose addNameRange registry:https://registry.npmjs.org/caseless not in flight; fetching
-972 http 304 https://registry.npmjs.org/aws4
-973 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-973 verbose headers connection: 'keep-alive',
-973 verbose headers 'set-cookie':
-973 verbose headers [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-973 verbose headers 'cf-ray': '59764fa4bb7d6413-FRA',
-973 verbose headers age: '5655',
-973 verbose headers 'cache-control': 'public, max-age=300',
-973 verbose headers etag: '"95c9834de9b7164b9a063970ba631035"',
-973 verbose headers 'last-modified': 'Mon, 13 Jan 2020 23:25:51 GMT',
-973 verbose headers vary: 'Accept-Encoding',
-973 verbose headers 'cf-cache-status': 'HIT',
-973 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-973 verbose headers server: 'cloudflare',
-973 verbose headers 'cf-request-id': '02ddd01af4000064135f8e3200000001' }
-974 silly get cb [ 304,
-974 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-974 silly get connection: 'keep-alive',
-974 silly get 'set-cookie':
-974 silly get [ '__cfduid=d0651730248de197cc0bf9e0b3e6fc5ab1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-974 silly get 'cf-ray': '59764fa4bb7d6413-FRA',
-974 silly get age: '5655',
-974 silly get 'cache-control': 'public, max-age=300',
-974 silly get etag: '"95c9834de9b7164b9a063970ba631035"',
-974 silly get 'last-modified': 'Mon, 13 Jan 2020 23:25:51 GMT',
-974 silly get vary: 'Accept-Encoding',
-974 silly get 'cf-cache-status': 'HIT',
-974 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-974 silly get server: 'cloudflare',
-974 silly get 'cf-request-id': '02ddd01af4000064135f8e3200000001' } ]
-975 verbose etag https://registry.npmjs.org/aws4 from cache
-976 verbose get saving aws4 to /home/christine/.npm/registry.npmjs.org/aws4/.cache.json
-977 silly resolveWithNewModule forever-agent@0.6.1 checking installable status
-978 silly cache add args [ 'forever-agent@~0.6.1', null ]
-979 verbose cache add spec forever-agent@~0.6.1
-980 silly cache add parsed spec Result {
-980 silly cache add raw: 'forever-agent@~0.6.1',
-980 silly cache add scope: null,
-980 silly cache add name: 'forever-agent',
-980 silly cache add rawSpec: '~0.6.1',
-980 silly cache add spec: '>=0.6.1 <0.7.0',
-980 silly cache add type: 'range' }
-981 silly addNamed forever-agent@>=0.6.1 <0.7.0
-982 verbose addNamed ">=0.6.1 <0.7.0" is a valid semver range for forever-agent
-983 silly addNameRange { name: 'forever-agent',
-983 silly addNameRange range: '>=0.6.1 <0.7.0',
-983 silly addNameRange hasData: false }
-984 silly mapToRegistry name forever-agent
-985 silly mapToRegistry using default registry
-986 silly mapToRegistry registry https://registry.npmjs.org/
-987 silly mapToRegistry uri https://registry.npmjs.org/forever-agent
-988 verbose addNameRange registry:https://registry.npmjs.org/forever-agent not in flight; fetching
-989 verbose get https://registry.npmjs.org/form-data not expired, no request
-990 silly addNameRange number 2 { name: 'form-data', range: '>=2.3.2 <2.4.0', hasData: true }
-991 silly addNameRange versions [ 'form-data',
-991 silly addNameRange [ '0.0.0',
-991 silly addNameRange '0.0.2',
-991 silly addNameRange '0.0.3',
-991 silly addNameRange '0.0.4',
-991 silly addNameRange '0.0.5',
-991 silly addNameRange '0.0.6',
-991 silly addNameRange '0.0.7',
-991 silly addNameRange '0.0.8',
-991 silly addNameRange '0.0.9',
-991 silly addNameRange '0.0.10',
-991 silly addNameRange '0.1.0',
-991 silly addNameRange '0.1.1',
-991 silly addNameRange '0.1.2',
-991 silly addNameRange '0.1.3',
-991 silly addNameRange '0.1.4',
-991 silly addNameRange '0.2.0',
-991 silly addNameRange '1.0.0-rc1',
-991 silly addNameRange '1.0.0-rc2',
-991 silly addNameRange '1.0.0-rc3',
-991 silly addNameRange '1.0.0-rc4',
-991 silly addNameRange '1.0.0',
-991 silly addNameRange '1.0.1',
-991 silly addNameRange '2.0.0',
-991 silly addNameRange '2.1.0',
-991 silly addNameRange '2.1.1',
-991 silly addNameRange '2.1.2',
-991 silly addNameRange '2.1.4',
-991 silly addNameRange '2.2.0',
-991 silly addNameRange '2.3.1',
-991 silly addNameRange '2.3.2-rc1',
-991 silly addNameRange '2.3.2',
-991 silly addNameRange '2.3.3',
-991 silly addNameRange '2.4.0',
-991 silly addNameRange '2.5.0',
-991 silly addNameRange '2.5.1',
-991 silly addNameRange '3.0.0' ] ]
-992 silly addNamed form-data@2.3.3
-993 verbose addNamed "2.3.3" is a plain semver version for form-data
-994 http 200 https://registry.npmjs.org/http-signature
-995 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-995 verbose headers 'content-type': 'application/json',
-995 verbose headers 'transfer-encoding': 'chunked',
-995 verbose headers connection: 'keep-alive',
-995 verbose headers 'set-cookie':
-995 verbose headers [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-995 verbose headers 'cf-ray': '59764fa4bcfedfc7-FRA',
-995 verbose headers age: '5657',
-995 verbose headers 'cache-control': 'public, max-age=300',
-995 verbose headers etag: 'W/"3b46cb4c3a2db9af415ea171ef07cebe"',
-995 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:40 GMT',
-995 verbose headers vary: 'accept-encoding, accept',
-995 verbose headers 'cf-cache-status': 'HIT',
-995 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-995 verbose headers server: 'cloudflare',
-995 verbose headers 'content-encoding': 'gzip',
-995 verbose headers 'cf-request-id': '02ddd01af40000dfc72a8a0200000001' }
-996 silly get cb [ 200,
-996 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-996 silly get 'content-type': 'application/json',
-996 silly get 'transfer-encoding': 'chunked',
-996 silly get connection: 'keep-alive',
-996 silly get 'set-cookie':
-996 silly get [ '__cfduid=d3adb321249b44604682ca627e182cc9b1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-996 silly get 'cf-ray': '59764fa4bcfedfc7-FRA',
-996 silly get age: '5657',
-996 silly get 'cache-control': 'public, max-age=300',
-996 silly get etag: 'W/"3b46cb4c3a2db9af415ea171ef07cebe"',
-996 silly get 'last-modified': 'Wed, 06 May 2020 14:47:40 GMT',
-996 silly get vary: 'accept-encoding, accept',
-996 silly get 'cf-cache-status': 'HIT',
-996 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-996 silly get server: 'cloudflare',
-996 silly get 'content-encoding': 'gzip',
-996 silly get 'cf-request-id': '02ddd01af40000dfc72a8a0200000001' } ]
-997 verbose get saving http-signature to /home/christine/.npm/registry.npmjs.org/http-signature/.cache.json
-998 verbose get https://registry.npmjs.org/har-validator not expired, no request
-999 silly addNameRange number 2 { name: 'har-validator', range: '>=5.1.3 <5.2.0', hasData: true }
-1000 silly addNameRange versions [ 'har-validator',
-1000 silly addNameRange [ '1.0.0',
-1000 silly addNameRange '1.0.1',
-1000 silly addNameRange '1.0.2',
-1000 silly addNameRange '1.1.0',
-1000 silly addNameRange '1.1.1',
-1000 silly addNameRange '1.1.2',
-1000 silly addNameRange '1.1.3',
-1000 silly addNameRange '1.2.0',
-1000 silly addNameRange '1.3.0',
-1000 silly addNameRange '1.3.1',
-1000 silly addNameRange '1.4.0',
-1000 silly addNameRange '1.5.0',
-1000 silly addNameRange '1.5.1',
-1000 silly addNameRange '1.6.0',
-1000 silly addNameRange '1.6.1',
-1000 silly addNameRange '1.7.0',
-1000 silly addNameRange '1.7.1',
-1000 silly addNameRange '1.8.0',
-1000 silly addNameRange '2.0.0',
-1000 silly addNameRange '2.0.1',
-1000 silly addNameRange '2.0.2',
-1000 silly addNameRange '2.0.3',
-1000 silly addNameRange '2.0.4',
-1000 silly addNameRange '2.0.5',
-1000 silly addNameRange '2.0.6',
-1000 silly addNameRange '2.1.0',
-1000 silly addNameRange '2.1.1',
-1000 silly addNameRange '2.1.2',
-1000 silly addNameRange '2.1.3',
-1000 silly addNameRange '3.0.0',
-1000 silly addNameRange '3.1.0',
-1000 silly addNameRange '3.2.0',
-1000 silly addNameRange '3.3.0',
-1000 silly addNameRange '3.3.1',
-1000 silly addNameRange '3.4.0',
-1000 silly addNameRange '4.0.0',
-1000 silly addNameRange '4.0.1',
-1000 silly addNameRange '4.0.2',
-1000 silly addNameRange '4.0.3',
-1000 silly addNameRange '4.0.4',
-1000 silly addNameRange '4.1.0',
-1000 silly addNameRange '4.1.1',
-1000 silly addNameRange '4.1.2',
-1000 silly addNameRange '4.2.0',
-1000 silly addNameRange '4.2.1',
-1000 silly addNameRange '5.0.0',
-1000 silly addNameRange '5.0.1',
-1000 silly addNameRange '5.0.2',
-1000 silly addNameRange '5.0.3',
-1000 silly addNameRange '5.1.0',
-1000 silly addNameRange '5.1.3' ] ]
-1001 silly addNamed har-validator@5.1.3
-1002 verbose addNamed "5.1.3" is a plain semver version for har-validator
-1003 verbose get https://registry.npmjs.org/is-typedarray not expired, no request
-1004 silly addNameRange number 2 { name: 'is-typedarray', range: '>=1.0.0 <1.1.0', hasData: true }
-1005 silly addNameRange versions [ 'is-typedarray', [ '0.0.0', '1.0.0' ] ]
-1006 silly addNamed is-typedarray@1.0.0
-1007 verbose addNamed "1.0.0" is a plain semver version for is-typedarray
-1008 verbose get https://registry.npmjs.org/caseless not expired, no request
-1009 silly addNameRange number 2 { name: 'caseless', range: '>=0.12.0 <0.13.0', hasData: true }
-1010 silly addNameRange versions [ 'caseless',
-1010 silly addNameRange [ '0.1.0',
-1010 silly addNameRange '0.2.0',
-1010 silly addNameRange '0.3.0',
-1010 silly addNameRange '0.4.0',
-1010 silly addNameRange '0.5.0',
-1010 silly addNameRange '0.6.0',
-1010 silly addNameRange '0.7.0',
-1010 silly addNameRange '0.8.0',
-1010 silly addNameRange '0.9.0',
-1010 silly addNameRange '0.10.0',
-1010 silly addNameRange '0.11.0',
-1010 silly addNameRange '0.12.0' ] ]
-1011 silly addNamed caseless@0.12.0
-1012 verbose addNamed "0.12.0" is a plain semver version for caseless
-1013 verbose get https://registry.npmjs.org/forever-agent not expired, no request
-1014 silly addNameRange number 2 { name: 'forever-agent', range: '>=0.6.1 <0.7.0', hasData: true }
-1015 silly addNameRange versions [ 'forever-agent',
-1015 silly addNameRange [ '0.2.0', '0.3.0', '0.4.0', '0.5.0', '0.5.2', '0.6.0', '0.6.1' ] ]
-1016 silly addNamed forever-agent@0.6.1
-1017 verbose addNamed "0.6.1" is a plain semver version for forever-agent
-1018 silly resolveWithNewModule combined-stream@1.0.8 checking installable status
-1019 silly cache add args [ 'combined-stream@~1.0.6', null ]
-1020 verbose cache add spec combined-stream@~1.0.6
-1021 silly cache add parsed spec Result {
-1021 silly cache add raw: 'combined-stream@~1.0.6',
-1021 silly cache add scope: null,
-1021 silly cache add name: 'combined-stream',
-1021 silly cache add rawSpec: '~1.0.6',
-1021 silly cache add spec: '>=1.0.6 <1.1.0',
-1021 silly cache add type: 'range' }
-1022 silly addNamed combined-stream@>=1.0.6 <1.1.0
-1023 verbose addNamed ">=1.0.6 <1.1.0" is a valid semver range for combined-stream
-1024 silly addNameRange { name: 'combined-stream',
-1024 silly addNameRange range: '>=1.0.6 <1.1.0',
-1024 silly addNameRange hasData: false }
-1025 silly mapToRegistry name combined-stream
-1026 silly mapToRegistry using default registry
-1027 silly mapToRegistry registry https://registry.npmjs.org/
-1028 silly mapToRegistry uri https://registry.npmjs.org/combined-stream
-1029 verbose addNameRange registry:https://registry.npmjs.org/combined-stream not in flight; fetching
-1030 silly resolveWithNewModule extend@3.0.2 checking installable status
-1031 silly cache add args [ 'extend@~3.0.2', null ]
-1032 verbose cache add spec extend@~3.0.2
-1033 silly cache add parsed spec Result {
-1033 silly cache add raw: 'extend@~3.0.2',
-1033 silly cache add scope: null,
-1033 silly cache add name: 'extend',
-1033 silly cache add rawSpec: '~3.0.2',
-1033 silly cache add spec: '>=3.0.2 <3.1.0',
-1033 silly cache add type: 'range' }
-1034 silly addNamed extend@>=3.0.2 <3.1.0
-1035 verbose addNamed ">=3.0.2 <3.1.0" is a valid semver range for extend
-1036 silly addNameRange { name: 'extend', range: '>=3.0.2 <3.1.0', hasData: false }
-1037 silly mapToRegistry name extend
-1038 silly mapToRegistry using default registry
-1039 silly mapToRegistry registry https://registry.npmjs.org/
-1040 silly mapToRegistry uri https://registry.npmjs.org/extend
-1041 verbose addNameRange registry:https://registry.npmjs.org/extend not in flight; fetching
-1042 silly cache afterAdd form-data@2.3.3
-1043 verbose afterAdd /home/christine/.npm/form-data/2.3.3/package/package.json not in flight; writing
-1044 silly resolveWithNewModule aws4@1.9.1 checking installable status
-1045 silly cache add args [ 'aws4@^1.8.0', null ]
-1046 verbose cache add spec aws4@^1.8.0
-1047 silly cache add parsed spec Result {
-1047 silly cache add raw: 'aws4@^1.8.0',
-1047 silly cache add scope: null,
-1047 silly cache add name: 'aws4',
-1047 silly cache add rawSpec: '^1.8.0',
-1047 silly cache add spec: '>=1.8.0 <2.0.0',
-1047 silly cache add type: 'range' }
-1048 silly addNamed aws4@>=1.8.0 <2.0.0
-1049 verbose addNamed ">=1.8.0 <2.0.0" is a valid semver range for aws4
-1050 silly addNameRange { name: 'aws4', range: '>=1.8.0 <2.0.0', hasData: false }
-1051 silly mapToRegistry name aws4
-1052 silly mapToRegistry using default registry
-1053 silly mapToRegistry registry https://registry.npmjs.org/
-1054 silly mapToRegistry uri https://registry.npmjs.org/aws4
-1055 verbose addNameRange registry:https://registry.npmjs.org/aws4 not in flight; fetching
-1056 silly resolveWithNewModule http-signature@1.2.0 checking installable status
-1057 silly cache add args [ 'http-signature@~1.2.0', null ]
-1058 verbose cache add spec http-signature@~1.2.0
-1059 silly cache add parsed spec Result {
-1059 silly cache add raw: 'http-signature@~1.2.0',
-1059 silly cache add scope: null,
-1059 silly cache add name: 'http-signature',
-1059 silly cache add rawSpec: '~1.2.0',
-1059 silly cache add spec: '>=1.2.0 <1.3.0',
-1059 silly cache add type: 'range' }
-1060 silly addNamed http-signature@>=1.2.0 <1.3.0
-1061 verbose addNamed ">=1.2.0 <1.3.0" is a valid semver range for http-signature
-1062 silly addNameRange { name: 'http-signature',
-1062 silly addNameRange range: '>=1.2.0 <1.3.0',
-1062 silly addNameRange hasData: false }
-1063 silly mapToRegistry name http-signature
-1064 silly mapToRegistry using default registry
-1065 silly mapToRegistry registry https://registry.npmjs.org/
-1066 silly mapToRegistry uri https://registry.npmjs.org/http-signature
-1067 verbose addNameRange registry:https://registry.npmjs.org/http-signature not in flight; fetching
-1068 silly cache afterAdd har-validator@5.1.3
-1069 verbose afterAdd /home/christine/.npm/har-validator/5.1.3/package/package.json not in flight; writing
-1070 verbose get https://registry.npmjs.org/extend not expired, no request
-1071 silly addNameRange number 2 { name: 'extend', range: '>=3.0.2 <3.1.0', hasData: true }
-1072 silly addNameRange versions [ 'extend',
-1072 silly addNameRange [ '1.0.0',
-1072 silly addNameRange '1.1.0',
-1072 silly addNameRange '1.1.1',
-1072 silly addNameRange '1.1.3',
-1072 silly addNameRange '1.2.0',
-1072 silly addNameRange '1.2.1',
-1072 silly addNameRange '1.3.0',
-1072 silly addNameRange '2.0.0',
-1072 silly addNameRange '2.0.1',
-1072 silly addNameRange '3.0.0',
-1072 silly addNameRange '3.0.1',
-1072 silly addNameRange '3.0.2',
-1072 silly addNameRange '2.0.2' ] ]
-1073 silly addNamed extend@3.0.2
-1074 verbose addNamed "3.0.2" is a plain semver version for extend
-1075 verbose get https://registry.npmjs.org/combined-stream not expired, no request
-1076 silly addNameRange number 2 { name: 'combined-stream',
-1076 silly addNameRange range: '>=1.0.6 <1.1.0',
-1076 silly addNameRange hasData: true }
-1077 silly addNameRange versions [ 'combined-stream',
-1077 silly addNameRange [ '0.0.0',
-1077 silly addNameRange '0.0.1',
-1077 silly addNameRange '0.0.2',
-1077 silly addNameRange '0.0.3',
-1077 silly addNameRange '0.0.4',
-1077 silly addNameRange '0.0.5',
-1077 silly addNameRange '0.0.7',
-1077 silly addNameRange '1.0.0',
-1077 silly addNameRange '1.0.1',
-1077 silly addNameRange '1.0.2',
-1077 silly addNameRange '1.0.3',
-1077 silly addNameRange '1.0.4',
-1077 silly addNameRange '1.0.5',
-1077 silly addNameRange '1.0.6-rc1',
-1077 silly addNameRange '1.0.6',
-1077 silly addNameRange '1.0.7',
-1077 silly addNameRange '1.0.8' ] ]
-1078 silly addNamed combined-stream@1.0.8
-1079 verbose addNamed "1.0.8" is a plain semver version for combined-stream
-1080 silly cache afterAdd is-typedarray@1.0.0
-1081 verbose afterAdd /home/christine/.npm/is-typedarray/1.0.0/package/package.json not in flight; writing
-1082 silly cache afterAdd caseless@0.12.0
-1083 verbose afterAdd /home/christine/.npm/caseless/0.12.0/package/package.json not in flight; writing
-1084 silly cache afterAdd forever-agent@0.6.1
-1085 verbose afterAdd /home/christine/.npm/forever-agent/0.6.1/package/package.json not in flight; writing
-1086 verbose get https://registry.npmjs.org/aws4 not expired, no request
-1087 silly addNameRange number 2 { name: 'aws4', range: '>=1.8.0 <2.0.0', hasData: true }
-1088 silly addNameRange versions [ 'aws4',
-1088 silly addNameRange [ '0.0.1',
-1088 silly addNameRange '0.1.0',
-1088 silly addNameRange '0.1.1',
-1088 silly addNameRange '0.1.2',
-1088 silly addNameRange '0.1.3',
-1088 silly addNameRange '0.1.4',
-1088 silly addNameRange '0.1.5',
-1088 silly addNameRange '0.1.6',
-1088 silly addNameRange '0.1.7',
-1088 silly addNameRange '0.1.8',
-1088 silly addNameRange '0.1.9',
-1088 silly addNameRange '0.1.10',
-1088 silly addNameRange '0.1.12',
-1088 silly addNameRange '0.2.0',
-1088 silly addNameRange '0.2.1',
-1088 silly addNameRange '0.2.2',
-1088 silly addNameRange '0.2.3',
-1088 silly addNameRange '0.3.0',
-1088 silly addNameRange '0.4.0',
-1088 silly addNameRange '0.4.1',
-1088 silly addNameRange '0.4.2',
-1088 silly addNameRange '0.5.0',
-1088 silly addNameRange '0.5.1',
-1088 silly addNameRange '1.0.0',
-1088 silly addNameRange '1.0.1',
-1088 silly addNameRange '1.0.2',
-1088 silly addNameRange '1.0.3',
-1088 silly addNameRange '1.0.4',
-1088 silly addNameRange '1.1.0',
-1088 silly addNameRange '1.2.0',
-1088 silly addNameRange '1.2.1',
-1088 silly addNameRange '1.3.1',
-1088 silly addNameRange '1.3.2',
-1088 silly addNameRange '1.4.0',
-1088 silly addNameRange '1.4.1',
-1088 silly addNameRange '1.5.0',
-1088 silly addNameRange '1.6.0',
-1088 silly addNameRange '1.7.0',
-1088 silly addNameRange '1.8.0',
-1088 silly addNameRange '1.9.0',
-1088 silly addNameRange '1.9.1' ] ]
-1089 silly addNamed aws4@1.9.1
-1090 verbose addNamed "1.9.1" is a plain semver version for aws4
-1091 verbose afterAdd /home/christine/.npm/form-data/2.3.3/package/package.json written
-1092 verbose get https://registry.npmjs.org/http-signature not expired, no request
-1093 silly addNameRange number 2 { name: 'http-signature',
-1093 silly addNameRange range: '>=1.2.0 <1.3.0',
-1093 silly addNameRange hasData: true }
-1094 silly addNameRange versions [ 'http-signature',
-1094 silly addNameRange [ '0.9.0',
-1094 silly addNameRange '0.9.2',
-1094 silly addNameRange '0.9.3',
-1094 silly addNameRange '0.9.4',
-1094 silly addNameRange '0.9.5',
-1094 silly addNameRange '0.9.6',
-1094 silly addNameRange '0.9.7',
-1094 silly addNameRange '0.9.8',
-1094 silly addNameRange '0.9.9',
-1094 silly addNameRange '0.9.10',
-1094 silly addNameRange '0.9.11',
-1094 silly addNameRange '0.10.0',
-1094 silly addNameRange '0.10.1',
-1094 silly addNameRange '0.11.0',
-1094 silly addNameRange '1.0.0',
-1094 silly addNameRange '1.0.1',
-1094 silly addNameRange '1.0.2',
-1094 silly addNameRange '1.1.0',
-1094 silly addNameRange '1.1.1',
-1094 silly addNameRange '1.2.0',
-1094 silly addNameRange '1.3.0',
-1094 silly addNameRange '1.3.1',
-1094 silly addNameRange '1.3.2',
-1094 silly addNameRange '1.3.3',
-1094 silly addNameRange '1.3.4' ] ]
-1095 silly addNamed http-signature@1.2.0
-1096 verbose addNamed "1.2.0" is a plain semver version for http-signature
-1097 verbose afterAdd /home/christine/.npm/har-validator/5.1.3/package/package.json written
-1098 http 304 https://registry.npmjs.org/isstream
-1099 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1099 verbose headers connection: 'keep-alive',
-1099 verbose headers 'set-cookie':
-1099 verbose headers [ '__cfduid=daf4947ff118e7cd8a36c058a538ff6131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1099 verbose headers 'cf-ray': '59764fa4fe4d05bb-FRA',
-1099 verbose headers age: '5355',
-1099 verbose headers 'cache-control': 'public, max-age=300',
-1099 verbose headers etag: '"9dc7f37e087df077683bf238c847ad45"',
-1099 verbose headers 'last-modified': 'Sun, 27 May 2018 05:02:31 GMT',
-1099 verbose headers vary: 'Accept-Encoding',
-1099 verbose headers 'cf-cache-status': 'HIT',
-1099 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1099 verbose headers server: 'cloudflare',
-1099 verbose headers 'cf-request-id': '02ddd01b1f000005bb0ca62200000001' }
-1100 silly get cb [ 304,
-1100 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1100 silly get connection: 'keep-alive',
-1100 silly get 'set-cookie':
-1100 silly get [ '__cfduid=daf4947ff118e7cd8a36c058a538ff6131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1100 silly get 'cf-ray': '59764fa4fe4d05bb-FRA',
-1100 silly get age: '5355',
-1100 silly get 'cache-control': 'public, max-age=300',
-1100 silly get etag: '"9dc7f37e087df077683bf238c847ad45"',
-1100 silly get 'last-modified': 'Sun, 27 May 2018 05:02:31 GMT',
-1100 silly get vary: 'Accept-Encoding',
-1100 silly get 'cf-cache-status': 'HIT',
-1100 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1100 silly get server: 'cloudflare',
-1100 silly get 'cf-request-id': '02ddd01b1f000005bb0ca62200000001' } ]
-1101 verbose etag https://registry.npmjs.org/isstream from cache
-1102 verbose get saving isstream to /home/christine/.npm/registry.npmjs.org/isstream/.cache.json
-1103 verbose afterAdd /home/christine/.npm/is-typedarray/1.0.0/package/package.json written
-1104 silly cache afterAdd combined-stream@1.0.8
-1105 verbose afterAdd /home/christine/.npm/combined-stream/1.0.8/package/package.json not in flight; writing
-1106 verbose afterAdd /home/christine/.npm/caseless/0.12.0/package/package.json written
-1107 verbose afterAdd /home/christine/.npm/forever-agent/0.6.1/package/package.json written
-1108 silly cache afterAdd extend@3.0.2
-1109 verbose afterAdd /home/christine/.npm/extend/3.0.2/package/package.json not in flight; writing
-1110 silly cache afterAdd aws4@1.9.1
-1111 verbose afterAdd /home/christine/.npm/aws4/1.9.1/package/package.json not in flight; writing
-1112 http 304 https://registry.npmjs.org/json-stringify-safe
-1113 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1113 verbose headers connection: 'keep-alive',
-1113 verbose headers 'set-cookie':
-1113 verbose headers [ '__cfduid=dd03692ace9824ebd46c46f408f2989131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1113 verbose headers 'cf-ray': '59764fa4fe54d6e1-FRA',
-1113 verbose headers age: '5657',
-1113 verbose headers 'cache-control': 'public, max-age=300',
-1113 verbose headers etag: '"7f39a9aafcaefe8efbf43a9f2e56c4eb"',
-1113 verbose headers 'last-modified': 'Sun, 27 May 2018 05:41:03 GMT',
-1113 verbose headers vary: 'Accept-Encoding',
-1113 verbose headers 'cf-cache-status': 'HIT',
-1113 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1113 verbose headers server: 'cloudflare',
-1113 verbose headers 'cf-request-id': '02ddd01b1e0000d6e132367200000001' }
-1114 silly get cb [ 304,
-1114 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1114 silly get connection: 'keep-alive',
-1114 silly get 'set-cookie':
-1114 silly get [ '__cfduid=dd03692ace9824ebd46c46f408f2989131590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1114 silly get 'cf-ray': '59764fa4fe54d6e1-FRA',
-1114 silly get age: '5657',
-1114 silly get 'cache-control': 'public, max-age=300',
-1114 silly get etag: '"7f39a9aafcaefe8efbf43a9f2e56c4eb"',
-1114 silly get 'last-modified': 'Sun, 27 May 2018 05:41:03 GMT',
-1114 silly get vary: 'Accept-Encoding',
-1114 silly get 'cf-cache-status': 'HIT',
-1114 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1114 silly get server: 'cloudflare',
-1114 silly get 'cf-request-id': '02ddd01b1e0000d6e132367200000001' } ]
-1115 verbose etag https://registry.npmjs.org/json-stringify-safe from cache
-1116 verbose get saving json-stringify-safe to /home/christine/.npm/registry.npmjs.org/json-stringify-safe/.cache.json
-1117 silly cache afterAdd http-signature@1.2.0
-1118 verbose afterAdd /home/christine/.npm/http-signature/1.2.0/package/package.json not in flight; writing
-1119 verbose afterAdd /home/christine/.npm/combined-stream/1.0.8/package/package.json written
-1120 verbose afterAdd /home/christine/.npm/extend/3.0.2/package/package.json written
-1121 verbose afterAdd /home/christine/.npm/aws4/1.9.1/package/package.json written
-1122 silly resolveWithNewModule isstream@0.1.2 checking installable status
-1123 silly cache add args [ 'isstream@~0.1.2', null ]
-1124 verbose cache add spec isstream@~0.1.2
-1125 silly cache add parsed spec Result {
-1125 silly cache add raw: 'isstream@~0.1.2',
-1125 silly cache add scope: null,
-1125 silly cache add name: 'isstream',
-1125 silly cache add rawSpec: '~0.1.2',
-1125 silly cache add spec: '>=0.1.2 <0.2.0',
-1125 silly cache add type: 'range' }
-1126 silly addNamed isstream@>=0.1.2 <0.2.0
-1127 verbose addNamed ">=0.1.2 <0.2.0" is a valid semver range for isstream
-1128 silly addNameRange { name: 'isstream', range: '>=0.1.2 <0.2.0', hasData: false }
-1129 silly mapToRegistry name isstream
-1130 silly mapToRegistry using default registry
-1131 silly mapToRegistry registry https://registry.npmjs.org/
-1132 silly mapToRegistry uri https://registry.npmjs.org/isstream
-1133 verbose addNameRange registry:https://registry.npmjs.org/isstream not in flight; fetching
-1134 http 304 https://registry.npmjs.org/tunnel-agent
-1135 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1135 verbose headers connection: 'keep-alive',
-1135 verbose headers 'set-cookie':
-1135 verbose headers [ '__cfduid=dd8a9957676dab4f7a1bd7377a7d9ca671590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1135 verbose headers 'cf-ray': '59764fa51970c2f9-FRA',
-1135 verbose headers age: '5655',
-1135 verbose headers 'cache-control': 'public, max-age=300',
-1135 verbose headers etag: '"03911fc1f433b33bccf8a4a2a5de2375"',
-1135 verbose headers 'last-modified': 'Sun, 27 May 2018 20:02:57 GMT',
-1135 verbose headers vary: 'Accept-Encoding',
-1135 verbose headers 'cf-cache-status': 'HIT',
-1135 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1135 verbose headers server: 'cloudflare',
-1135 verbose headers 'cf-request-id': '02ddd01b2a0000c2f926071200000001' }
-1136 silly get cb [ 304,
-1136 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1136 silly get connection: 'keep-alive',
-1136 silly get 'set-cookie':
-1136 silly get [ '__cfduid=dd8a9957676dab4f7a1bd7377a7d9ca671590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1136 silly get 'cf-ray': '59764fa51970c2f9-FRA',
-1136 silly get age: '5655',
-1136 silly get 'cache-control': 'public, max-age=300',
-1136 silly get etag: '"03911fc1f433b33bccf8a4a2a5de2375"',
-1136 silly get 'last-modified': 'Sun, 27 May 2018 20:02:57 GMT',
-1136 silly get vary: 'Accept-Encoding',
-1136 silly get 'cf-cache-status': 'HIT',
-1136 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1136 silly get server: 'cloudflare',
-1136 silly get 'cf-request-id': '02ddd01b2a0000c2f926071200000001' } ]
-1137 verbose etag https://registry.npmjs.org/tunnel-agent from cache
-1138 verbose get saving tunnel-agent to /home/christine/.npm/registry.npmjs.org/tunnel-agent/.cache.json
-1139 verbose afterAdd /home/christine/.npm/http-signature/1.2.0/package/package.json written
-1140 http 304 https://registry.npmjs.org/performance-now
-1141 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1141 verbose headers connection: 'keep-alive',
-1141 verbose headers 'set-cookie':
-1141 verbose headers [ '__cfduid=d42ce80dcff65dca26b6883967f7411d41590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1141 verbose headers 'cf-ray': '59764fa51f721772-FRA',
-1141 verbose headers age: '5657',
-1141 verbose headers 'cache-control': 'public, max-age=300',
-1141 verbose headers etag: '"5f12ad497b3e39323dcdde75c34f5767"',
-1141 verbose headers 'last-modified': 'Sun, 27 May 2018 12:05:53 GMT',
-1141 verbose headers vary: 'Accept-Encoding',
-1141 verbose headers 'cf-cache-status': 'HIT',
-1141 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1141 verbose headers server: 'cloudflare',
-1141 verbose headers 'cf-request-id': '02ddd01b2a0000177264160200000001' }
-1142 silly get cb [ 304,
-1142 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1142 silly get connection: 'keep-alive',
-1142 silly get 'set-cookie':
-1142 silly get [ '__cfduid=d42ce80dcff65dca26b6883967f7411d41590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1142 silly get 'cf-ray': '59764fa51f721772-FRA',
-1142 silly get age: '5657',
-1142 silly get 'cache-control': 'public, max-age=300',
-1142 silly get etag: '"5f12ad497b3e39323dcdde75c34f5767"',
-1142 silly get 'last-modified': 'Sun, 27 May 2018 12:05:53 GMT',
-1142 silly get vary: 'Accept-Encoding',
-1142 silly get 'cf-cache-status': 'HIT',
-1142 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1142 silly get server: 'cloudflare',
-1142 silly get 'cf-request-id': '02ddd01b2a0000177264160200000001' } ]
-1143 verbose etag https://registry.npmjs.org/performance-now from cache
-1144 verbose get saving performance-now to /home/christine/.npm/registry.npmjs.org/performance-now/.cache.json
-1145 silly resolveWithNewModule json-stringify-safe@5.0.1 checking installable status
-1146 silly cache add args [ 'json-stringify-safe@~5.0.1', null ]
-1147 verbose cache add spec json-stringify-safe@~5.0.1
-1148 silly cache add parsed spec Result {
-1148 silly cache add raw: 'json-stringify-safe@~5.0.1',
-1148 silly cache add scope: null,
-1148 silly cache add name: 'json-stringify-safe',
-1148 silly cache add rawSpec: '~5.0.1',
-1148 silly cache add spec: '>=5.0.1 <5.1.0',
-1148 silly cache add type: 'range' }
-1149 silly addNamed json-stringify-safe@>=5.0.1 <5.1.0
-1150 verbose addNamed ">=5.0.1 <5.1.0" is a valid semver range for json-stringify-safe
-1151 silly addNameRange { name: 'json-stringify-safe',
-1151 silly addNameRange range: '>=5.0.1 <5.1.0',
-1151 silly addNameRange hasData: false }
-1152 silly mapToRegistry name json-stringify-safe
-1153 silly mapToRegistry using default registry
-1154 silly mapToRegistry registry https://registry.npmjs.org/
-1155 silly mapToRegistry uri https://registry.npmjs.org/json-stringify-safe
-1156 verbose addNameRange registry:https://registry.npmjs.org/json-stringify-safe not in flight; fetching
-1157 verbose get https://registry.npmjs.org/isstream not expired, no request
-1158 silly addNameRange number 2 { name: 'isstream', range: '>=0.1.2 <0.2.0', hasData: true }
-1159 silly addNameRange versions [ 'isstream', [ '0.0.0', '0.1.0', '0.1.1', '0.1.2' ] ]
-1160 silly addNamed isstream@0.1.2
-1161 verbose addNamed "0.1.2" is a plain semver version for isstream
-1162 http 200 https://registry.npmjs.org/safe-buffer
-1163 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1163 verbose headers 'content-type': 'application/json',
-1163 verbose headers 'transfer-encoding': 'chunked',
-1163 verbose headers connection: 'keep-alive',
-1163 verbose headers 'set-cookie':
-1163 verbose headers [ '__cfduid=d242459e8d4d49451c98a98743f04b3251590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1163 verbose headers 'cf-ray': '59764fa51a7b0eab-FRA',
-1163 verbose headers age: '5658',
-1163 verbose headers 'cache-control': 'public, max-age=300',
-1163 verbose headers etag: 'W/"7d10eeac57e4baa4c8bd0dd7caa1703c"',
-1163 verbose headers 'last-modified': 'Sun, 10 May 2020 16:37:34 GMT',
-1163 verbose headers vary: 'accept-encoding, accept',
-1163 verbose headers 'cf-cache-status': 'HIT',
-1163 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1163 verbose headers server: 'cloudflare',
-1163 verbose headers 'content-encoding': 'gzip',
-1163 verbose headers 'cf-request-id': '02ddd01b2a00000eabe9143200000001' }
-1164 silly get cb [ 200,
-1164 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1164 silly get 'content-type': 'application/json',
-1164 silly get 'transfer-encoding': 'chunked',
-1164 silly get connection: 'keep-alive',
-1164 silly get 'set-cookie':
-1164 silly get [ '__cfduid=d242459e8d4d49451c98a98743f04b3251590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1164 silly get 'cf-ray': '59764fa51a7b0eab-FRA',
-1164 silly get age: '5658',
-1164 silly get 'cache-control': 'public, max-age=300',
-1164 silly get etag: 'W/"7d10eeac57e4baa4c8bd0dd7caa1703c"',
-1164 silly get 'last-modified': 'Sun, 10 May 2020 16:37:34 GMT',
-1164 silly get vary: 'accept-encoding, accept',
-1164 silly get 'cf-cache-status': 'HIT',
-1164 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1164 silly get server: 'cloudflare',
-1164 silly get 'content-encoding': 'gzip',
-1164 silly get 'cf-request-id': '02ddd01b2a00000eabe9143200000001' } ]
-1165 verbose get saving safe-buffer to /home/christine/.npm/registry.npmjs.org/safe-buffer/.cache.json
-1166 http 304 https://registry.npmjs.org/oauth-sign
-1167 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1167 verbose headers connection: 'keep-alive',
-1167 verbose headers 'set-cookie':
-1167 verbose headers [ '__cfduid=d287f9144cf6663f63602865423a0b4ea1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1167 verbose headers 'cf-ray': '59764fa51ff7dfbb-FRA',
-1167 verbose headers age: '5355',
-1167 verbose headers 'cache-control': 'public, max-age=300',
-1167 verbose headers etag: '"3032c1efe9ec61d748d027a1da2bab61"',
-1167 verbose headers 'last-modified': 'Thu, 02 Aug 2018 18:04:02 GMT',
-1167 verbose headers vary: 'Accept-Encoding',
-1167 verbose headers 'cf-cache-status': 'HIT',
-1167 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1167 verbose headers server: 'cloudflare',
-1167 verbose headers 'cf-request-id': '02ddd01b2a0000dfbb5fa74200000001' }
-1168 silly get cb [ 304,
-1168 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1168 silly get connection: 'keep-alive',
-1168 silly get 'set-cookie':
-1168 silly get [ '__cfduid=d287f9144cf6663f63602865423a0b4ea1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1168 silly get 'cf-ray': '59764fa51ff7dfbb-FRA',
-1168 silly get age: '5355',
-1168 silly get 'cache-control': 'public, max-age=300',
-1168 silly get etag: '"3032c1efe9ec61d748d027a1da2bab61"',
-1168 silly get 'last-modified': 'Thu, 02 Aug 2018 18:04:02 GMT',
-1168 silly get vary: 'Accept-Encoding',
-1168 silly get 'cf-cache-status': 'HIT',
-1168 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1168 silly get server: 'cloudflare',
-1168 silly get 'cf-request-id': '02ddd01b2a0000dfbb5fa74200000001' } ]
-1169 verbose etag https://registry.npmjs.org/oauth-sign from cache
-1170 verbose get saving oauth-sign to /home/christine/.npm/registry.npmjs.org/oauth-sign/.cache.json
-1171 verbose get https://registry.npmjs.org/json-stringify-safe not expired, no request
-1172 silly addNameRange number 2 { name: 'json-stringify-safe',
-1172 silly addNameRange range: '>=5.0.1 <5.1.0',
-1172 silly addNameRange hasData: true }
-1173 silly addNameRange versions [ 'json-stringify-safe',
-1173 silly addNameRange [ '2.0.0', '3.0.0', '4.0.0', '5.0.0', '5.0.1' ] ]
-1174 silly addNamed json-stringify-safe@5.0.1
-1175 verbose addNamed "5.0.1" is a plain semver version for json-stringify-safe
-1176 silly resolveWithNewModule tunnel-agent@0.6.0 checking installable status
-1177 silly cache add args [ 'tunnel-agent@^0.6.0', null ]
-1178 verbose cache add spec tunnel-agent@^0.6.0
-1179 silly cache add parsed spec Result {
-1179 silly cache add raw: 'tunnel-agent@^0.6.0',
-1179 silly cache add scope: null,
-1179 silly cache add name: 'tunnel-agent',
-1179 silly cache add rawSpec: '^0.6.0',
-1179 silly cache add spec: '>=0.6.0 <0.7.0',
-1179 silly cache add type: 'range' }
-1180 silly addNamed tunnel-agent@>=0.6.0 <0.7.0
-1181 verbose addNamed ">=0.6.0 <0.7.0" is a valid semver range for tunnel-agent
-1182 silly addNameRange { name: 'tunnel-agent', range: '>=0.6.0 <0.7.0', hasData: false }
-1183 silly mapToRegistry name tunnel-agent
-1184 silly mapToRegistry using default registry
-1185 silly mapToRegistry registry https://registry.npmjs.org/
-1186 silly mapToRegistry uri https://registry.npmjs.org/tunnel-agent
-1187 verbose addNameRange registry:https://registry.npmjs.org/tunnel-agent not in flight; fetching
-1188 silly resolveWithNewModule performance-now@2.1.0 checking installable status
-1189 silly cache add args [ 'performance-now@^2.1.0', null ]
-1190 verbose cache add spec performance-now@^2.1.0
-1191 silly cache add parsed spec Result {
-1191 silly cache add raw: 'performance-now@^2.1.0',
-1191 silly cache add scope: null,
-1191 silly cache add name: 'performance-now',
-1191 silly cache add rawSpec: '^2.1.0',
-1191 silly cache add spec: '>=2.1.0 <3.0.0',
-1191 silly cache add type: 'range' }
-1192 silly addNamed performance-now@>=2.1.0 <3.0.0
-1193 verbose addNamed ">=2.1.0 <3.0.0" is a valid semver range for performance-now
-1194 silly addNameRange { name: 'performance-now',
-1194 silly addNameRange range: '>=2.1.0 <3.0.0',
-1194 silly addNameRange hasData: false }
-1195 silly mapToRegistry name performance-now
-1196 silly mapToRegistry using default registry
-1197 silly mapToRegistry registry https://registry.npmjs.org/
-1198 silly mapToRegistry uri https://registry.npmjs.org/performance-now
-1199 verbose addNameRange registry:https://registry.npmjs.org/performance-now not in flight; fetching
-1200 silly cache afterAdd isstream@0.1.2
-1201 verbose afterAdd /home/christine/.npm/isstream/0.1.2/package/package.json not in flight; writing
-1202 http 200 https://registry.npmjs.org/tough-cookie
-1203 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1203 verbose headers 'content-type': 'application/json',
-1203 verbose headers 'transfer-encoding': 'chunked',
-1203 verbose headers connection: 'keep-alive',
-1203 verbose headers 'set-cookie':
-1203 verbose headers [ '__cfduid=d898cd72de597ecab2d8a354f76a0072c1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1203 verbose headers 'cf-ray': '59764fa518cb05e9-FRA',
-1203 verbose headers age: '5655',
-1203 verbose headers 'cache-control': 'public, max-age=300',
-1203 verbose headers etag: 'W/"818fa172eb6f27e219e81140db530363"',
-1203 verbose headers 'last-modified': 'Thu, 19 Mar 2020 19:20:30 GMT',
-1203 verbose headers vary: 'accept-encoding, accept',
-1203 verbose headers 'cf-cache-status': 'HIT',
-1203 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1203 verbose headers server: 'cloudflare',
-1203 verbose headers 'content-encoding': 'gzip',
-1203 verbose headers 'cf-request-id': '02ddd01b2a000005e903b1d200000001' }
-1204 silly get cb [ 200,
-1204 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1204 silly get 'content-type': 'application/json',
-1204 silly get 'transfer-encoding': 'chunked',
-1204 silly get connection: 'keep-alive',
-1204 silly get 'set-cookie':
-1204 silly get [ '__cfduid=d898cd72de597ecab2d8a354f76a0072c1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1204 silly get 'cf-ray': '59764fa518cb05e9-FRA',
-1204 silly get age: '5655',
-1204 silly get 'cache-control': 'public, max-age=300',
-1204 silly get etag: 'W/"818fa172eb6f27e219e81140db530363"',
-1204 silly get 'last-modified': 'Thu, 19 Mar 2020 19:20:30 GMT',
-1204 silly get vary: 'accept-encoding, accept',
-1204 silly get 'cf-cache-status': 'HIT',
-1204 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1204 silly get server: 'cloudflare',
-1204 silly get 'content-encoding': 'gzip',
-1204 silly get 'cf-request-id': '02ddd01b2a000005e903b1d200000001' } ]
-1205 verbose get saving tough-cookie to /home/christine/.npm/registry.npmjs.org/tough-cookie/.cache.json
-1206 silly cache afterAdd json-stringify-safe@5.0.1
-1207 verbose afterAdd /home/christine/.npm/json-stringify-safe/5.0.1/package/package.json not in flight; writing
-1208 silly resolveWithNewModule safe-buffer@5.2.1 checking installable status
-1209 silly cache add args [ 'safe-buffer@^5.1.2', null ]
-1210 verbose cache add spec safe-buffer@^5.1.2
-1211 silly cache add parsed spec Result {
-1211 silly cache add raw: 'safe-buffer@^5.1.2',
-1211 silly cache add scope: null,
-1211 silly cache add name: 'safe-buffer',
-1211 silly cache add rawSpec: '^5.1.2',
-1211 silly cache add spec: '>=5.1.2 <6.0.0',
-1211 silly cache add type: 'range' }
-1212 silly addNamed safe-buffer@>=5.1.2 <6.0.0
-1213 verbose addNamed ">=5.1.2 <6.0.0" is a valid semver range for safe-buffer
-1214 silly addNameRange { name: 'safe-buffer', range: '>=5.1.2 <6.0.0', hasData: false }
-1215 silly mapToRegistry name safe-buffer
-1216 silly mapToRegistry using default registry
-1217 silly mapToRegistry registry https://registry.npmjs.org/
-1218 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer
-1219 verbose addNameRange registry:https://registry.npmjs.org/safe-buffer not in flight; fetching
-1220 http 200 https://registry.npmjs.org/mime-types
-1221 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1221 verbose headers 'content-type': 'application/json',
-1221 verbose headers 'transfer-encoding': 'chunked',
-1221 verbose headers connection: 'keep-alive',
-1221 verbose headers 'set-cookie':
-1221 verbose headers [ '__cfduid=d8091989cd66bf129670ccfa4d20cf63d1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1221 verbose headers 'cf-ray': '59764fa51e27c2ae-FRA',
-1221 verbose headers age: '5656',
-1221 verbose headers 'cache-control': 'public, max-age=300',
-1221 verbose headers etag: 'W/"b0572cbc8ddbbb6b61205820d06deb3a"',
-1221 verbose headers 'last-modified': 'Fri, 24 Apr 2020 03:36:16 GMT',
-1221 verbose headers vary: 'accept-encoding, accept',
-1221 verbose headers 'cf-cache-status': 'HIT',
-1221 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1221 verbose headers server: 'cloudflare',
-1221 verbose headers 'content-encoding': 'gzip',
-1221 verbose headers 'cf-request-id': '02ddd01b2a0000c2aea0161200000001' }
-1222 silly get cb [ 200,
-1222 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1222 silly get 'content-type': 'application/json',
-1222 silly get 'transfer-encoding': 'chunked',
-1222 silly get connection: 'keep-alive',
-1222 silly get 'set-cookie':
-1222 silly get [ '__cfduid=d8091989cd66bf129670ccfa4d20cf63d1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1222 silly get 'cf-ray': '59764fa51e27c2ae-FRA',
-1222 silly get age: '5656',
-1222 silly get 'cache-control': 'public, max-age=300',
-1222 silly get etag: 'W/"b0572cbc8ddbbb6b61205820d06deb3a"',
-1222 silly get 'last-modified': 'Fri, 24 Apr 2020 03:36:16 GMT',
-1222 silly get vary: 'accept-encoding, accept',
-1222 silly get 'cf-cache-status': 'HIT',
-1222 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1222 silly get server: 'cloudflare',
-1222 silly get 'content-encoding': 'gzip',
-1222 silly get 'cf-request-id': '02ddd01b2a0000c2aea0161200000001' } ]
-1223 verbose get saving mime-types to /home/christine/.npm/registry.npmjs.org/mime-types/.cache.json
-1224 verbose get https://registry.npmjs.org/tunnel-agent not expired, no request
-1225 silly addNameRange number 2 { name: 'tunnel-agent', range: '>=0.6.0 <0.7.0', hasData: true }
-1226 silly addNameRange versions [ 'tunnel-agent',
-1226 silly addNameRange [ '0.2.0',
-1226 silly addNameRange '0.3.0',
-1226 silly addNameRange '0.4.0',
-1226 silly addNameRange '0.4.1',
-1226 silly addNameRange '0.4.2',
-1226 silly addNameRange '0.4.3',
-1226 silly addNameRange '0.5.0',
-1226 silly addNameRange '0.6.0' ] ]
-1227 silly addNamed tunnel-agent@0.6.0
-1228 verbose addNamed "0.6.0" is a plain semver version for tunnel-agent
-1229 silly resolveWithNewModule oauth-sign@0.9.0 checking installable status
-1230 silly cache add args [ 'oauth-sign@~0.9.0', null ]
-1231 verbose cache add spec oauth-sign@~0.9.0
-1232 silly cache add parsed spec Result {
-1232 silly cache add raw: 'oauth-sign@~0.9.0',
-1232 silly cache add scope: null,
-1232 silly cache add name: 'oauth-sign',
-1232 silly cache add rawSpec: '~0.9.0',
-1232 silly cache add spec: '>=0.9.0 <0.10.0',
-1232 silly cache add type: 'range' }
-1233 silly addNamed oauth-sign@>=0.9.0 <0.10.0
-1234 verbose addNamed ">=0.9.0 <0.10.0" is a valid semver range for oauth-sign
-1235 silly addNameRange { name: 'oauth-sign', range: '>=0.9.0 <0.10.0', hasData: false }
-1236 silly mapToRegistry name oauth-sign
-1237 silly mapToRegistry using default registry
-1238 silly mapToRegistry registry https://registry.npmjs.org/
-1239 silly mapToRegistry uri https://registry.npmjs.org/oauth-sign
-1240 verbose addNameRange registry:https://registry.npmjs.org/oauth-sign not in flight; fetching
-1241 verbose get https://registry.npmjs.org/performance-now not expired, no request
-1242 silly addNameRange number 2 { name: 'performance-now',
-1242 silly addNameRange range: '>=2.1.0 <3.0.0',
-1242 silly addNameRange hasData: true }
-1243 silly addNameRange versions [ 'performance-now',
-1243 silly addNameRange [ '0.1.0',
-1243 silly addNameRange '0.1.1',
-1243 silly addNameRange '0.1.2',
-1243 silly addNameRange '0.1.3',
-1243 silly addNameRange '0.1.4',
-1243 silly addNameRange '0.2.0',
-1243 silly addNameRange '1.0.0',
-1243 silly addNameRange '1.0.1',
-1243 silly addNameRange '1.0.2',
-1243 silly addNameRange '2.0.0',
-1243 silly addNameRange '2.1.0' ] ]
-1244 silly addNamed performance-now@2.1.0
-1245 verbose addNamed "2.1.0" is a plain semver version for performance-now
-1246 verbose afterAdd /home/christine/.npm/isstream/0.1.2/package/package.json written
-1247 http 200 https://registry.npmjs.org/uuid
-1248 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1248 verbose headers 'content-type': 'application/json',
-1248 verbose headers 'transfer-encoding': 'chunked',
-1248 verbose headers connection: 'keep-alive',
-1248 verbose headers 'set-cookie':
-1248 verbose headers [ '__cfduid=d42e977fd11818895c4979b1006ea23be1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1248 verbose headers 'cf-ray': '59764fa5195d1f2d-FRA',
-1248 verbose headers age: '5355',
-1248 verbose headers 'cache-control': 'public, max-age=300',
-1248 verbose headers etag: 'W/"3fc4e0f16b6e5d55bc0144a7f38b6e49"',
-1248 verbose headers 'last-modified': 'Wed, 20 May 2020 18:52:41 GMT',
-1248 verbose headers vary: 'accept-encoding, accept',
-1248 verbose headers 'cf-cache-status': 'HIT',
-1248 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1248 verbose headers server: 'cloudflare',
-1248 verbose headers 'content-encoding': 'gzip',
-1248 verbose headers 'cf-request-id': '02ddd01b2a00001f2df51ed200000001' }
-1249 silly get cb [ 200,
-1249 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1249 silly get 'content-type': 'application/json',
-1249 silly get 'transfer-encoding': 'chunked',
-1249 silly get connection: 'keep-alive',
-1249 silly get 'set-cookie':
-1249 silly get [ '__cfduid=d42e977fd11818895c4979b1006ea23be1590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1249 silly get 'cf-ray': '59764fa5195d1f2d-FRA',
-1249 silly get age: '5355',
-1249 silly get 'cache-control': 'public, max-age=300',
-1249 silly get etag: 'W/"3fc4e0f16b6e5d55bc0144a7f38b6e49"',
-1249 silly get 'last-modified': 'Wed, 20 May 2020 18:52:41 GMT',
-1249 silly get vary: 'accept-encoding, accept',
-1249 silly get 'cf-cache-status': 'HIT',
-1249 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1249 silly get server: 'cloudflare',
-1249 silly get 'content-encoding': 'gzip',
-1249 silly get 'cf-request-id': '02ddd01b2a00001f2df51ed200000001' } ]
-1250 verbose get saving uuid to /home/christine/.npm/registry.npmjs.org/uuid/.cache.json
-1251 verbose get https://registry.npmjs.org/safe-buffer not expired, no request
-1252 silly addNameRange number 2 { name: 'safe-buffer', range: '>=5.1.2 <6.0.0', hasData: true }
-1253 silly addNameRange versions [ 'safe-buffer',
-1253 silly addNameRange [ '1.0.0',
-1253 silly addNameRange '2.0.0',
-1253 silly addNameRange '3.0.0',
-1253 silly addNameRange '4.0.0',
-1253 silly addNameRange '5.0.0',
-1253 silly addNameRange '5.0.1',
-1253 silly addNameRange '5.1.0',
-1253 silly addNameRange '5.1.1',
-1253 silly addNameRange '5.1.2',
-1253 silly addNameRange '5.2.0',
-1253 silly addNameRange '5.2.1' ] ]
-1254 silly addNamed safe-buffer@5.2.1
-1255 verbose addNamed "5.2.1" is a plain semver version for safe-buffer
-1256 verbose afterAdd /home/christine/.npm/json-stringify-safe/5.0.1/package/package.json written
-1257 verbose get https://registry.npmjs.org/oauth-sign not expired, no request
-1258 silly addNameRange number 2 { name: 'oauth-sign', range: '>=0.9.0 <0.10.0', hasData: true }
-1259 silly addNameRange versions [ 'oauth-sign',
-1259 silly addNameRange [ '0.2.0',
-1259 silly addNameRange '0.3.0',
-1259 silly addNameRange '0.4.0',
-1259 silly addNameRange '0.5.0',
-1259 silly addNameRange '0.6.0',
-1259 silly addNameRange '0.7.0',
-1259 silly addNameRange '0.8.0',
-1259 silly addNameRange '0.8.1',
-1259 silly addNameRange '0.8.2',
-1259 silly addNameRange '0.9.0' ] ]
-1260 silly addNamed oauth-sign@0.9.0
-1261 verbose addNamed "0.9.0" is a plain semver version for oauth-sign
-1262 silly mapToRegistry name safe-buffer
-1263 silly mapToRegistry using default registry
-1264 silly mapToRegistry registry https://registry.npmjs.org/
-1265 silly mapToRegistry uri https://registry.npmjs.org/safe-buffer
-1266 verbose addRemoteTarball https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz not in flight; adding
-1267 verbose addRemoteTarball [ 'https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz',
-1267 verbose addRemoteTarball '1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6' ]
-1268 silly resolveWithNewModule tough-cookie@2.5.0 checking installable status
-1269 silly cache add args [ 'tough-cookie@~2.5.0', null ]
-1270 verbose cache add spec tough-cookie@~2.5.0
-1271 silly cache add parsed spec Result {
-1271 silly cache add raw: 'tough-cookie@~2.5.0',
-1271 silly cache add scope: null,
-1271 silly cache add name: 'tough-cookie',
-1271 silly cache add rawSpec: '~2.5.0',
-1271 silly cache add spec: '>=2.5.0 <2.6.0',
-1271 silly cache add type: 'range' }
-1272 silly addNamed tough-cookie@>=2.5.0 <2.6.0
-1273 verbose addNamed ">=2.5.0 <2.6.0" is a valid semver range for tough-cookie
-1274 silly addNameRange { name: 'tough-cookie', range: '>=2.5.0 <2.6.0', hasData: false }
-1275 silly mapToRegistry name tough-cookie
-1276 silly mapToRegistry using default registry
-1277 silly mapToRegistry registry https://registry.npmjs.org/
-1278 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie
-1279 verbose addNameRange registry:https://registry.npmjs.org/tough-cookie not in flight; fetching
-1280 silly cache afterAdd tunnel-agent@0.6.0
-1281 verbose afterAdd /home/christine/.npm/tunnel-agent/0.6.0/package/package.json not in flight; writing
-1282 silly cache afterAdd performance-now@2.1.0
-1283 verbose afterAdd /home/christine/.npm/performance-now/2.1.0/package/package.json not in flight; writing
-1284 silly resolveWithNewModule mime-types@2.1.27 checking installable status
-1285 silly cache add args [ 'mime-types@~2.1.19', null ]
-1286 verbose cache add spec mime-types@~2.1.19
-1287 silly cache add parsed spec Result {
-1287 silly cache add raw: 'mime-types@~2.1.19',
-1287 silly cache add scope: null,
-1287 silly cache add name: 'mime-types',
-1287 silly cache add rawSpec: '~2.1.19',
-1287 silly cache add spec: '>=2.1.19 <2.2.0',
-1287 silly cache add type: 'range' }
-1288 silly addNamed mime-types@>=2.1.19 <2.2.0
-1289 verbose addNamed ">=2.1.19 <2.2.0" is a valid semver range for mime-types
-1290 silly addNameRange { name: 'mime-types', range: '>=2.1.19 <2.2.0', hasData: false }
-1291 silly mapToRegistry name mime-types
-1292 silly mapToRegistry using default registry
-1293 silly mapToRegistry registry https://registry.npmjs.org/
-1294 silly mapToRegistry uri https://registry.npmjs.org/mime-types
-1295 verbose addNameRange registry:https://registry.npmjs.org/mime-types not in flight; fetching
-1296 http 200 https://registry.npmjs.org/qs
-1297 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1297 verbose headers 'content-type': 'application/json',
-1297 verbose headers 'transfer-encoding': 'chunked',
-1297 verbose headers connection: 'keep-alive',
-1297 verbose headers 'set-cookie':
-1297 verbose headers [ '__cfduid=dd8aaa3b832fe3de3ea175ff8604d63411590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1297 verbose headers 'cf-ray': '59764fa5183d176a-FRA',
-1297 verbose headers age: '5657',
-1297 verbose headers 'cache-control': 'public, max-age=300',
-1297 verbose headers etag: 'W/"679aa380b84cf75f89f99363ed5f9c98"',
-1297 verbose headers 'last-modified': 'Sun, 03 May 2020 21:52:54 GMT',
-1297 verbose headers vary: 'accept-encoding, accept',
-1297 verbose headers 'cf-cache-status': 'HIT',
-1297 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1297 verbose headers server: 'cloudflare',
-1297 verbose headers 'content-encoding': 'gzip',
-1297 verbose headers 'cf-request-id': '02ddd01b2a0000176a65b45200000001' }
-1298 silly get cb [ 200,
-1298 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1298 silly get 'content-type': 'application/json',
-1298 silly get 'transfer-encoding': 'chunked',
-1298 silly get connection: 'keep-alive',
-1298 silly get 'set-cookie':
-1298 silly get [ '__cfduid=dd8aaa3b832fe3de3ea175ff8604d63411590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1298 silly get 'cf-ray': '59764fa5183d176a-FRA',
-1298 silly get age: '5657',
-1298 silly get 'cache-control': 'public, max-age=300',
-1298 silly get etag: 'W/"679aa380b84cf75f89f99363ed5f9c98"',
-1298 silly get 'last-modified': 'Sun, 03 May 2020 21:52:54 GMT',
-1298 silly get vary: 'accept-encoding, accept',
-1298 silly get 'cf-cache-status': 'HIT',
-1298 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1298 silly get server: 'cloudflare',
-1298 silly get 'content-encoding': 'gzip',
-1298 silly get 'cf-request-id': '02ddd01b2a0000176a65b45200000001' } ]
-1299 verbose get saving qs to /home/christine/.npm/registry.npmjs.org/qs/.cache.json
-1300 info retry fetch attempt 1 at 13:48:57
-1301 info attempt registry request try #1 at 13:48:57
-1302 http fetch GET https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz
-1303 verbose get https://registry.npmjs.org/tough-cookie not expired, no request
-1304 silly addNameRange number 2 { name: 'tough-cookie', range: '>=2.5.0 <2.6.0', hasData: true }
-1305 silly addNameRange versions [ 'tough-cookie',
-1305 silly addNameRange [ '0.9.0',
-1305 silly addNameRange '0.9.1',
-1305 silly addNameRange '0.9.3',
-1305 silly addNameRange '0.9.4',
-1305 silly addNameRange '0.9.5',
-1305 silly addNameRange '0.9.6',
-1305 silly addNameRange '0.9.7',
-1305 silly addNameRange '0.9.8',
-1305 silly addNameRange '0.9.9',
-1305 silly addNameRange '0.9.11',
-1305 silly addNameRange '0.9.12',
-1305 silly addNameRange '0.9.13',
-1305 silly addNameRange '0.9.14',
-1305 silly addNameRange '0.9.15',
-1305 silly addNameRange '0.10.0',
-1305 silly addNameRange '0.11.0',
-1305 silly addNameRange '0.12.0',
-1305 silly addNameRange '0.12.1',
-1305 silly addNameRange '0.13.0',
-1305 silly addNameRange '1.0.0',
-1305 silly addNameRange '1.1.0',
-1305 silly addNameRange '1.2.0',
-1305 silly addNameRange '2.0.0',
-1305 silly addNameRange '2.1.0',
-1305 silly addNameRange '2.2.0',
-1305 silly addNameRange '2.2.1',
-1305 silly addNameRange '2.2.2',
-1305 silly addNameRange '2.3.0',
-1305 silly addNameRange '2.3.1',
-1305 silly addNameRange '2.3.2',
-1305 silly addNameRange '2.3.3',
-1305 silly addNameRange '2.3.4',
-1305 silly addNameRange '2.4.2',
-1305 silly addNameRange '2.4.3',
-1305 silly addNameRange '2.5.0',
-1305 silly addNameRange '3.0.0',
-1305 silly addNameRange '3.0.1',
-1305 silly addNameRange '4.0.0' ] ]
-1306 silly addNamed tough-cookie@2.5.0
-1307 verbose addNamed "2.5.0" is a plain semver version for tough-cookie
-1308 silly cache afterAdd oauth-sign@0.9.0
-1309 verbose afterAdd /home/christine/.npm/oauth-sign/0.9.0/package/package.json not in flight; writing
-1310 silly resolveWithNewModule uuid@3.4.0 checking installable status
-1311 silly cache add args [ 'uuid@^3.3.2', null ]
-1312 verbose cache add spec uuid@^3.3.2
-1313 silly cache add parsed spec Result {
-1313 silly cache add raw: 'uuid@^3.3.2',
-1313 silly cache add scope: null,
-1313 silly cache add name: 'uuid',
-1313 silly cache add rawSpec: '^3.3.2',
-1313 silly cache add spec: '>=3.3.2 <4.0.0',
-1313 silly cache add type: 'range' }
-1314 silly addNamed uuid@>=3.3.2 <4.0.0
-1315 verbose addNamed ">=3.3.2 <4.0.0" is a valid semver range for uuid
-1316 silly addNameRange { name: 'uuid', range: '>=3.3.2 <4.0.0', hasData: false }
-1317 silly mapToRegistry name uuid
-1318 silly mapToRegistry using default registry
-1319 silly mapToRegistry registry https://registry.npmjs.org/
-1320 silly mapToRegistry uri https://registry.npmjs.org/uuid
-1321 verbose addNameRange registry:https://registry.npmjs.org/uuid not in flight; fetching
-1322 verbose afterAdd /home/christine/.npm/tunnel-agent/0.6.0/package/package.json written
-1323 silly mapToRegistry name tough-cookie
-1324 silly mapToRegistry using default registry
-1325 silly mapToRegistry registry https://registry.npmjs.org/
-1326 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie
-1327 verbose addRemoteTarball https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz not in flight; adding
-1328 verbose addRemoteTarball [ 'https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz',
-1328 verbose addRemoteTarball 'cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2' ]
-1329 verbose afterAdd /home/christine/.npm/performance-now/2.1.0/package/package.json written
-1330 verbose get https://registry.npmjs.org/mime-types not expired, no request
-1331 silly addNameRange number 2 { name: 'mime-types', range: '>=2.1.19 <2.2.0', hasData: true }
-1332 silly addNameRange versions [ 'mime-types',
-1332 silly addNameRange [ '0.1.0',
-1332 silly addNameRange '1.0.0',
-1332 silly addNameRange '1.0.1',
-1332 silly addNameRange '1.0.2',
-1332 silly addNameRange '2.0.0',
-1332 silly addNameRange '2.0.1',
-1332 silly addNameRange '2.0.2',
-1332 silly addNameRange '2.0.3',
-1332 silly addNameRange '2.0.4',
-1332 silly addNameRange '2.0.5',
-1332 silly addNameRange '2.0.6',
-1332 silly addNameRange '2.0.7',
-1332 silly addNameRange '2.0.8',
-1332 silly addNameRange '2.0.9',
-1332 silly addNameRange '2.0.10',
-1332 silly addNameRange '2.0.11',
-1332 silly addNameRange '2.0.12',
-1332 silly addNameRange '2.0.13',
-1332 silly addNameRange '2.0.14',
-1332 silly addNameRange '2.1.0',
-1332 silly addNameRange '2.1.1',
-1332 silly addNameRange '2.1.2',
-1332 silly addNameRange '2.1.3',
-1332 silly addNameRange '2.1.4',
-1332 silly addNameRange '2.1.5',
-1332 silly addNameRange '2.1.6',
-1332 silly addNameRange '2.1.7',
-1332 silly addNameRange '2.1.8',
-1332 silly addNameRange '2.1.9',
-1332 silly addNameRange '2.1.10',
-1332 silly addNameRange '2.1.11',
-1332 silly addNameRange '2.1.12',
-1332 silly addNameRange '2.1.13',
-1332 silly addNameRange '2.1.14',
-1332 silly addNameRange '2.1.15',
-1332 silly addNameRange '2.1.16',
-1332 silly addNameRange '2.1.17',
-1332 silly addNameRange '2.1.18',
-1332 silly addNameRange '2.1.19',
-1332 silly addNameRange '2.1.20',
-1332 silly addNameRange '2.1.21',
-1332 silly addNameRange '2.1.22',
-1332 silly addNameRange '2.1.23',
-1332 silly addNameRange '2.1.24',
-1332 silly addNameRange '2.1.25',
-1332 silly addNameRange '2.1.26',
-1332 silly addNameRange '2.1.27' ] ]
-1333 silly addNamed mime-types@2.1.27
-1334 verbose addNamed "2.1.27" is a plain semver version for mime-types
-1335 silly mapToRegistry name mime-types
-1336 silly mapToRegistry using default registry
-1337 silly mapToRegistry registry https://registry.npmjs.org/
-1338 silly mapToRegistry uri https://registry.npmjs.org/mime-types
-1339 verbose addRemoteTarball https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz not in flight; adding
-1340 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz',
-1340 verbose addRemoteTarball '47949f98e279ea53119f5722e0f34e529bec009f' ]
-1341 info retry fetch attempt 1 at 13:48:57
-1342 info attempt registry request try #1 at 13:48:57
-1343 http fetch GET https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz
-1344 verbose get https://registry.npmjs.org/uuid not expired, no request
-1345 silly addNameRange number 2 { name: 'uuid', range: '>=3.3.2 <4.0.0', hasData: true }
-1346 silly addNameRange versions [ 'uuid',
-1346 silly addNameRange [ '0.0.1',
-1346 silly addNameRange '0.0.2',
-1346 silly addNameRange '1.4.0',
-1346 silly addNameRange '1.4.1',
-1346 silly addNameRange '1.4.2',
-1346 silly addNameRange '2.0.0',
-1346 silly addNameRange '2.0.1',
-1346 silly addNameRange '2.0.2',
-1346 silly addNameRange '2.0.3',
-1346 silly addNameRange '3.0.0',
-1346 silly addNameRange '3.0.1',
-1346 silly addNameRange '3.1.0',
-1346 silly addNameRange '3.2.0',
-1346 silly addNameRange '3.2.1',
-1346 silly addNameRange '3.3.0',
-1346 silly addNameRange '3.3.2',
-1346 silly addNameRange '3.3.3',
-1346 silly addNameRange '3.4.0',
-1346 silly addNameRange '7.0.0-beta.0',
-1346 silly addNameRange '7.0.0',
-1346 silly addNameRange '7.0.1',
-1346 silly addNameRange '7.0.2-beta.0',
-1346 silly addNameRange '7.0.2',
-1346 silly addNameRange '7.0.3',
-1346 silly addNameRange '8.0.0-beta.0',
-1346 silly addNameRange '8.0.0',
-1346 silly addNameRange '8.1.0' ] ]
-1347 silly addNamed uuid@3.4.0
-1348 verbose addNamed "3.4.0" is a plain semver version for uuid
-1349 silly resolveWithNewModule qs@6.5.2 checking installable status
-1350 silly cache add args [ 'qs@~6.5.2', null ]
-1351 verbose cache add spec qs@~6.5.2
-1352 silly cache add parsed spec Result {
-1352 silly cache add raw: 'qs@~6.5.2',
-1352 silly cache add scope: null,
-1352 silly cache add name: 'qs',
-1352 silly cache add rawSpec: '~6.5.2',
-1352 silly cache add spec: '>=6.5.2 <6.6.0',
-1352 silly cache add type: 'range' }
-1353 silly addNamed qs@>=6.5.2 <6.6.0
-1354 verbose addNamed ">=6.5.2 <6.6.0" is a valid semver range for qs
-1355 silly addNameRange { name: 'qs', range: '>=6.5.2 <6.6.0', hasData: false }
-1356 silly mapToRegistry name qs
-1357 silly mapToRegistry using default registry
-1358 silly mapToRegistry registry https://registry.npmjs.org/
-1359 silly mapToRegistry uri https://registry.npmjs.org/qs
-1360 verbose addNameRange registry:https://registry.npmjs.org/qs not in flight; fetching
-1361 verbose afterAdd /home/christine/.npm/oauth-sign/0.9.0/package/package.json written
-1362 http fetch 200 https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz
-1363 info retry fetch attempt 1 at 13:48:57
-1364 info attempt registry request try #1 at 13:48:57
-1365 http fetch GET https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz
-1366 verbose get https://registry.npmjs.org/qs not expired, no request
-1367 silly addNameRange number 2 { name: 'qs', range: '>=6.5.2 <6.6.0', hasData: true }
-1368 silly addNameRange versions [ 'qs',
-1368 silly addNameRange [ '0.0.1',
-1368 silly addNameRange '0.0.2',
-1368 silly addNameRange '0.0.3',
-1368 silly addNameRange '0.0.4',
-1368 silly addNameRange '0.0.5',
-1368 silly addNameRange '0.0.6',
-1368 silly addNameRange '0.0.7',
-1368 silly addNameRange '0.1.0',
-1368 silly addNameRange '0.2.0',
-1368 silly addNameRange '0.3.0',
-1368 silly addNameRange '0.3.1',
-1368 silly addNameRange '0.3.2',
-1368 silly addNameRange '0.4.0',
-1368 silly addNameRange '0.4.1',
-1368 silly addNameRange '0.4.2',
-1368 silly addNameRange '0.5.0',
-1368 silly addNameRange '0.5.1',
-1368 silly addNameRange '0.5.2',
-1368 silly addNameRange '0.5.3',
-1368 silly addNameRange '0.5.4',
-1368 silly addNameRange '0.5.5',
-1368 silly addNameRange '0.5.6',
-1368 silly addNameRange '0.6.0',
-1368 silly addNameRange '0.6.1',
-1368 silly addNameRange '0.6.2',
-1368 silly addNameRange '0.6.3',
-1368 silly addNameRange '0.6.4',
-1368 silly addNameRange '0.6.5',
-1368 silly addNameRange '0.6.6',
-1368 silly addNameRange '1.0.0',
-1368 silly addNameRange '1.0.1',
-1368 silly addNameRange '1.0.2',
-1368 silly addNameRange '1.1.0',
-1368 silly addNameRange '1.2.0',
-1368 silly addNameRange '1.2.1',
-1368 silly addNameRange '1.2.2',
-1368 silly addNameRange '2.0.0',
-1368 silly addNameRange '2.1.0',
-1368 silly addNameRange '2.2.0',
-1368 silly addNameRange '2.2.1',
-1368 silly addNameRange '2.2.2',
-1368 silly addNameRange '2.2.3',
-1368 silly addNameRange '2.2.4',
-1368 silly addNameRange '2.2.5',
-1368 silly addNameRange '2.3.0',
-1368 silly addNameRange '2.3.1',
-1368 silly addNameRange '2.3.2',
-1368 silly addNameRange '2.3.3',
-1368 silly addNameRange '2.4.0',
-1368 silly addNameRange '2.4.1',
-1368 silly addNameRange '2.4.2',
-1368 silly addNameRange '3.0.0',
-1368 silly addNameRange '3.1.0',
-1368 silly addNameRange '4.0.0',
-1368 silly addNameRange '5.0.0',
-1368 silly addNameRange '5.1.0',
-1368 silly addNameRange '5.2.0',
-1368 silly addNameRange '6.0.0',
-1368 silly addNameRange '6.0.1',
-1368 silly addNameRange '6.0.2',
-1368 silly addNameRange '6.1.0',
-1368 silly addNameRange '6.2.0',
-1368 silly addNameRange '5.2.1',
-1368 silly addNameRange '6.2.1',
-1368 silly addNameRange '6.3.0',
-1368 silly addNameRange '6.3.1',
-1368 silly addNameRange '6.1.1',
-1368 silly addNameRange '6.0.3',
-1368 silly addNameRange '6.2.2',
-1368 silly addNameRange '6.4.0',
-1368 silly addNameRange '6.3.2',
-1368 silly addNameRange '6.2.3',
-1368 silly addNameRange '6.1.2',
-1368 silly addNameRange '6.0.4',
-1368 silly addNameRange '6.5.0',
-1368 silly addNameRange '6.5.1',
-1368 silly addNameRange '6.5.2',
-1368 silly addNameRange '6.6.0',
-1368 silly addNameRange '6.7.0',
-1368 silly addNameRange '6.8.0',
-1368 silly addNameRange '6.9.0',
-1368 silly addNameRange '6.9.1',
-1368 silly addNameRange '6.9.2',
-1368 silly addNameRange '6.8.1',
-1368 silly addNameRange '6.7.1',
-1368 silly addNameRange '6.7.2',
-1368 silly addNameRange '6.8.2',
-1368 silly addNameRange '6.9.3',
-1368 silly addNameRange '6.9.4' ] ]
-1369 silly addNamed qs@6.5.2
-1370 verbose addNamed "6.5.2" is a plain semver version for qs
-1371 silly fetchAndShaCheck shasum 1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6
-1372 http fetch 200 https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz
-1373 silly cache afterAdd uuid@3.4.0
-1374 verbose afterAdd /home/christine/.npm/uuid/3.4.0/package/package.json not in flight; writing
-1375 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz not in flight; adding
-1376 verbose addTmpTarball already have metadata; skipping unpack for safe-buffer@5.2.1
-1377 silly cache afterAdd qs@6.5.2
-1378 verbose afterAdd /home/christine/.npm/qs/6.5.2/package/package.json not in flight; writing
-1379 verbose afterAdd /home/christine/.npm/uuid/3.4.0/package/package.json written
-1380 silly fetchAndShaCheck shasum cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2
-1381 verbose afterAdd /home/christine/.npm/qs/6.5.2/package/package.json written
-1382 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz not in flight; adding
-1383 verbose addTmpTarball already have metadata; skipping unpack for tough-cookie@2.5.0
-1384 silly cache afterAdd safe-buffer@5.2.1
-1385 verbose afterAdd /home/christine/.npm/safe-buffer/5.2.1/package/package.json not in flight; writing
-1386 verbose afterAdd /home/christine/.npm/safe-buffer/5.2.1/package/package.json written
-1387 silly cache afterAdd tough-cookie@2.5.0
-1388 verbose afterAdd /home/christine/.npm/tough-cookie/2.5.0/package/package.json not in flight; writing
-1389 verbose afterAdd /home/christine/.npm/tough-cookie/2.5.0/package/package.json written
-1390 http fetch 200 https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz
-1391 silly fetchAndShaCheck shasum 47949f98e279ea53119f5722e0f34e529bec009f
-1392 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz not in flight; adding
-1393 verbose addTmpTarball already have metadata; skipping unpack for mime-types@2.1.27
-1394 silly cache afterAdd mime-types@2.1.27
-1395 verbose afterAdd /home/christine/.npm/mime-types/2.1.27/package/package.json not in flight; writing
-1396 verbose afterAdd /home/christine/.npm/mime-types/2.1.27/package/package.json written
-1397 silly fetchNamedPackageData delayed-stream
-1398 silly mapToRegistry name delayed-stream
-1399 silly mapToRegistry using default registry
-1400 silly mapToRegistry registry https://registry.npmjs.org/
-1401 silly mapToRegistry uri https://registry.npmjs.org/delayed-stream
-1402 verbose request uri https://registry.npmjs.org/delayed-stream
-1403 verbose request no auth needed
-1404 info attempt registry request try #1 at 13:48:57
-1405 verbose etag W/"d93fb1e0b12584f566e6f17a70c49721"
-1406 verbose lastModified Sat, 26 May 2018 21:57:10 GMT
-1407 http request GET https://registry.npmjs.org/delayed-stream
-1408 http 304 https://registry.npmjs.org/delayed-stream
-1409 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1409 verbose headers connection: 'keep-alive',
-1409 verbose headers 'set-cookie':
-1409 verbose headers [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1409 verbose headers 'cf-ray': '59764fa5ecd6325c-FRA',
-1409 verbose headers age: '5355',
-1409 verbose headers 'cache-control': 'public, max-age=300',
-1409 verbose headers etag: '"d93fb1e0b12584f566e6f17a70c49721"',
-1409 verbose headers 'last-modified': 'Sat, 26 May 2018 21:57:10 GMT',
-1409 verbose headers vary: 'Accept-Encoding',
-1409 verbose headers 'cf-cache-status': 'HIT',
-1409 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1409 verbose headers server: 'cloudflare',
-1409 verbose headers 'cf-request-id': '02ddd01baf0000325c4c82b200000001' }
-1410 silly get cb [ 304,
-1410 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1410 silly get connection: 'keep-alive',
-1410 silly get 'set-cookie':
-1410 silly get [ '__cfduid=d1ba0ebb5b0def6eb801cd0e2e5f4b1541590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1410 silly get 'cf-ray': '59764fa5ecd6325c-FRA',
-1410 silly get age: '5355',
-1410 silly get 'cache-control': 'public, max-age=300',
-1410 silly get etag: '"d93fb1e0b12584f566e6f17a70c49721"',
-1410 silly get 'last-modified': 'Sat, 26 May 2018 21:57:10 GMT',
-1410 silly get vary: 'Accept-Encoding',
-1410 silly get 'cf-cache-status': 'HIT',
-1410 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1410 silly get server: 'cloudflare',
-1410 silly get 'cf-request-id': '02ddd01baf0000325c4c82b200000001' } ]
-1411 verbose etag https://registry.npmjs.org/delayed-stream from cache
-1412 verbose get saving delayed-stream to /home/christine/.npm/registry.npmjs.org/delayed-stream/.cache.json
-1413 silly resolveWithNewModule delayed-stream@1.0.0 checking installable status
-1414 silly cache add args [ 'delayed-stream@~1.0.0', null ]
-1415 verbose cache add spec delayed-stream@~1.0.0
-1416 silly cache add parsed spec Result {
-1416 silly cache add raw: 'delayed-stream@~1.0.0',
-1416 silly cache add scope: null,
-1416 silly cache add name: 'delayed-stream',
-1416 silly cache add rawSpec: '~1.0.0',
-1416 silly cache add spec: '>=1.0.0 <1.1.0',
-1416 silly cache add type: 'range' }
-1417 silly addNamed delayed-stream@>=1.0.0 <1.1.0
-1418 verbose addNamed ">=1.0.0 <1.1.0" is a valid semver range for delayed-stream
-1419 silly addNameRange { name: 'delayed-stream',
-1419 silly addNameRange range: '>=1.0.0 <1.1.0',
-1419 silly addNameRange hasData: false }
-1420 silly mapToRegistry name delayed-stream
-1421 silly mapToRegistry using default registry
-1422 silly mapToRegistry registry https://registry.npmjs.org/
-1423 silly mapToRegistry uri https://registry.npmjs.org/delayed-stream
-1424 verbose addNameRange registry:https://registry.npmjs.org/delayed-stream not in flight; fetching
-1425 verbose get https://registry.npmjs.org/delayed-stream not expired, no request
-1426 silly addNameRange number 2 { name: 'delayed-stream',
-1426 silly addNameRange range: '>=1.0.0 <1.1.0',
-1426 silly addNameRange hasData: true }
-1427 silly addNameRange versions [ 'delayed-stream',
-1427 silly addNameRange [ '0.0.0',
-1427 silly addNameRange '0.0.1',
-1427 silly addNameRange '0.0.2',
-1427 silly addNameRange '0.0.3',
-1427 silly addNameRange '0.0.4',
-1427 silly addNameRange '0.0.5',
-1427 silly addNameRange '0.0.6',
-1427 silly addNameRange '0.0.7',
-1427 silly addNameRange '1.0.0' ] ]
-1428 silly addNamed delayed-stream@1.0.0
-1429 verbose addNamed "1.0.0" is a plain semver version for delayed-stream
-1430 silly cache afterAdd delayed-stream@1.0.0
-1431 verbose afterAdd /home/christine/.npm/delayed-stream/1.0.0/package/package.json not in flight; writing
-1432 verbose afterAdd /home/christine/.npm/delayed-stream/1.0.0/package/package.json written
-1433 silly fetchNamedPackageData asynckit
-1434 silly mapToRegistry name asynckit
-1435 silly mapToRegistry using default registry
-1436 silly mapToRegistry registry https://registry.npmjs.org/
-1437 silly mapToRegistry uri https://registry.npmjs.org/asynckit
-1438 verbose request uri https://registry.npmjs.org/asynckit
-1439 verbose request no auth needed
-1440 info attempt registry request try #1 at 13:48:57
-1441 verbose etag W/"34349b180d8fff99867769eadfb4b93e"
-1442 verbose lastModified Sat, 26 May 2018 17:31:47 GMT
-1443 http request GET https://registry.npmjs.org/asynckit
-1444 http 304 https://registry.npmjs.org/asynckit
-1445 verbose headers { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1445 verbose headers connection: 'keep-alive',
-1445 verbose headers 'set-cookie':
-1445 verbose headers [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1445 verbose headers 'cf-ray': '59764fa64d096347-FRA',
-1445 verbose headers age: '5354',
-1445 verbose headers 'cache-control': 'public, max-age=300',
-1445 verbose headers etag: '"34349b180d8fff99867769eadfb4b93e"',
-1445 verbose headers 'last-modified': 'Sat, 26 May 2018 17:31:47 GMT',
-1445 verbose headers vary: 'Accept-Encoding',
-1445 verbose headers 'cf-cache-status': 'HIT',
-1445 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1445 verbose headers server: 'cloudflare',
-1445 verbose headers 'cf-request-id': '02ddd01be900006347e88c6200000001' }
-1446 silly get cb [ 304,
-1446 silly get { date: 'Fri, 22 May 2020 11:48:57 GMT',
-1446 silly get connection: 'keep-alive',
-1446 silly get 'set-cookie':
-1446 silly get [ '__cfduid=d2f816bc144e9d07683b5f46095af6dd51590148137; expires=Sun, 21-Jun-20 11:48:57 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1446 silly get 'cf-ray': '59764fa64d096347-FRA',
-1446 silly get age: '5354',
-1446 silly get 'cache-control': 'public, max-age=300',
-1446 silly get etag: '"34349b180d8fff99867769eadfb4b93e"',
-1446 silly get 'last-modified': 'Sat, 26 May 2018 17:31:47 GMT',
-1446 silly get vary: 'Accept-Encoding',
-1446 silly get 'cf-cache-status': 'HIT',
-1446 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1446 silly get server: 'cloudflare',
-1446 silly get 'cf-request-id': '02ddd01be900006347e88c6200000001' } ]
-1447 verbose etag https://registry.npmjs.org/asynckit from cache
-1448 verbose get saving asynckit to /home/christine/.npm/registry.npmjs.org/asynckit/.cache.json
-1449 silly resolveWithNewModule asynckit@0.4.0 checking installable status
-1450 silly cache add args [ 'asynckit@^0.4.0', null ]
-1451 verbose cache add spec asynckit@^0.4.0
-1452 silly cache add parsed spec Result {
-1452 silly cache add raw: 'asynckit@^0.4.0',
-1452 silly cache add scope: null,
-1452 silly cache add name: 'asynckit',
-1452 silly cache add rawSpec: '^0.4.0',
-1452 silly cache add spec: '>=0.4.0 <0.5.0',
-1452 silly cache add type: 'range' }
-1453 silly addNamed asynckit@>=0.4.0 <0.5.0
-1454 verbose addNamed ">=0.4.0 <0.5.0" is a valid semver range for asynckit
-1455 silly addNameRange { name: 'asynckit', range: '>=0.4.0 <0.5.0', hasData: false }
-1456 silly mapToRegistry name asynckit
-1457 silly mapToRegistry using default registry
-1458 silly mapToRegistry registry https://registry.npmjs.org/
-1459 silly mapToRegistry uri https://registry.npmjs.org/asynckit
-1460 verbose addNameRange registry:https://registry.npmjs.org/asynckit not in flight; fetching
-1461 verbose get https://registry.npmjs.org/asynckit not expired, no request
-1462 silly addNameRange number 2 { name: 'asynckit', range: '>=0.4.0 <0.5.0', hasData: true }
-1463 silly addNameRange versions [ 'asynckit', [ '0.1.0', '0.2.0', '0.3.0', '0.4.0' ] ]
-1464 silly addNamed asynckit@0.4.0
-1465 verbose addNamed "0.4.0" is a plain semver version for asynckit
-1466 silly cache afterAdd asynckit@0.4.0
-1467 verbose afterAdd /home/christine/.npm/asynckit/0.4.0/package/package.json not in flight; writing
-1468 verbose afterAdd /home/christine/.npm/asynckit/0.4.0/package/package.json written
-1469 silly fetchNamedPackageData mime-db
-1470 silly mapToRegistry name mime-db
-1471 silly mapToRegistry using default registry
-1472 silly mapToRegistry registry https://registry.npmjs.org/
-1473 silly mapToRegistry uri https://registry.npmjs.org/mime-db
-1474 verbose request uri https://registry.npmjs.org/mime-db
-1475 verbose request no auth needed
-1476 info attempt registry request try #1 at 13:48:57
-1477 verbose etag W/"2b27fd56fd1f376697dd3c190a16cbca"
-1478 verbose lastModified Mon, 06 Jan 2020 03:24:41 GMT
-1479 http request GET https://registry.npmjs.org/mime-db
-1480 http 200 https://registry.npmjs.org/mime-db
-1481 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1481 verbose headers 'content-type': 'application/json',
-1481 verbose headers 'transfer-encoding': 'chunked',
-1481 verbose headers connection: 'keep-alive',
-1481 verbose headers 'set-cookie':
-1481 verbose headers [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1481 verbose headers 'cf-ray': '59764fa68978648b-FRA',
-1481 verbose headers age: '5355',
-1481 verbose headers 'cache-control': 'public, max-age=300',
-1481 verbose headers etag: 'W/"b954c5c9a96f2fe6e200fdac9b6d1184"',
-1481 verbose headers 'last-modified': 'Thu, 23 Apr 2020 00:55:28 GMT',
-1481 verbose headers vary: 'accept-encoding, accept',
-1481 verbose headers 'cf-cache-status': 'HIT',
-1481 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1481 verbose headers server: 'cloudflare',
-1481 verbose headers 'content-encoding': 'gzip',
-1481 verbose headers 'cf-request-id': '02ddd01c160000648bda012200000001' }
-1482 silly get cb [ 200,
-1482 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1482 silly get 'content-type': 'application/json',
-1482 silly get 'transfer-encoding': 'chunked',
-1482 silly get connection: 'keep-alive',
-1482 silly get 'set-cookie':
-1482 silly get [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1482 silly get 'cf-ray': '59764fa68978648b-FRA',
-1482 silly get age: '5355',
-1482 silly get 'cache-control': 'public, max-age=300',
-1482 silly get etag: 'W/"b954c5c9a96f2fe6e200fdac9b6d1184"',
-1482 silly get 'last-modified': 'Thu, 23 Apr 2020 00:55:28 GMT',
-1482 silly get vary: 'accept-encoding, accept',
-1482 silly get 'cf-cache-status': 'HIT',
-1482 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1482 silly get server: 'cloudflare',
-1482 silly get 'content-encoding': 'gzip',
-1482 silly get 'cf-request-id': '02ddd01c160000648bda012200000001' } ]
-1483 verbose get saving mime-db to /home/christine/.npm/registry.npmjs.org/mime-db/.cache.json
-1484 silly resolveWithNewModule mime-db@1.44.0 checking installable status
-1485 silly cache add args [ 'mime-db@1.44.0', null ]
-1486 verbose cache add spec mime-db@1.44.0
-1487 silly cache add parsed spec Result {
-1487 silly cache add raw: 'mime-db@1.44.0',
-1487 silly cache add scope: null,
-1487 silly cache add name: 'mime-db',
-1487 silly cache add rawSpec: '1.44.0',
-1487 silly cache add spec: '1.44.0',
-1487 silly cache add type: 'version' }
-1488 silly addNamed mime-db@1.44.0
-1489 verbose addNamed "1.44.0" is a plain semver version for mime-db
-1490 silly mapToRegistry name mime-db
-1491 silly mapToRegistry using default registry
-1492 silly mapToRegistry registry https://registry.npmjs.org/
-1493 silly mapToRegistry uri https://registry.npmjs.org/mime-db
-1494 verbose addNameVersion registry:https://registry.npmjs.org/mime-db not in flight; fetching
-1495 verbose get https://registry.npmjs.org/mime-db not expired, no request
-1496 silly mapToRegistry name mime-db
-1497 silly mapToRegistry using default registry
-1498 silly mapToRegistry registry https://registry.npmjs.org/
-1499 silly mapToRegistry uri https://registry.npmjs.org/mime-db
-1500 verbose addRemoteTarball https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz not in flight; adding
-1501 verbose addRemoteTarball [ 'https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz',
-1501 verbose addRemoteTarball 'fa11c5eb0aca1334b4233cb4d52f10c5a6272f92' ]
-1502 info retry fetch attempt 1 at 13:48:58
-1503 info attempt registry request try #1 at 13:48:58
-1504 http fetch GET https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz
-1505 http fetch 200 https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz
-1506 silly fetchAndShaCheck shasum fa11c5eb0aca1334b4233cb4d52f10c5a6272f92
-1507 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz not in flight; adding
-1508 verbose addTmpTarball already have metadata; skipping unpack for mime-db@1.44.0
-1509 silly cache afterAdd mime-db@1.44.0
-1510 verbose afterAdd /home/christine/.npm/mime-db/1.44.0/package/package.json not in flight; writing
-1511 verbose afterAdd /home/christine/.npm/mime-db/1.44.0/package/package.json written
-1512 silly fetchNamedPackageData ajv
-1513 silly mapToRegistry name ajv
-1514 silly mapToRegistry using default registry
-1515 silly mapToRegistry registry https://registry.npmjs.org/
-1516 silly mapToRegistry uri https://registry.npmjs.org/ajv
-1517 silly fetchNamedPackageData har-schema
-1518 silly mapToRegistry name har-schema
-1519 silly mapToRegistry using default registry
-1520 silly mapToRegistry registry https://registry.npmjs.org/
-1521 silly mapToRegistry uri https://registry.npmjs.org/har-schema
-1522 verbose request uri https://registry.npmjs.org/har-schema
-1523 verbose request no auth needed
-1524 info attempt registry request try #1 at 13:48:58
-1525 verbose etag W/"63c48c25d01ab9ec3e3fb5fe89f0600c"
-1526 verbose lastModified Tue, 08 Jan 2019 06:13:01 GMT
-1527 http request GET https://registry.npmjs.org/har-schema
-1528 verbose request uri https://registry.npmjs.org/ajv
-1529 verbose request no auth needed
-1530 info attempt registry request try #1 at 13:48:58
-1531 verbose etag W/"da116ce9064cf3ae300f7c5410f85976"
-1532 verbose lastModified Sat, 22 Feb 2020 13:51:53 GMT
-1533 http request GET https://registry.npmjs.org/ajv
-1534 http 304 https://registry.npmjs.org/har-schema
-1535 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1535 verbose headers connection: 'keep-alive',
-1535 verbose headers 'set-cookie':
-1535 verbose headers [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1535 verbose headers 'cf-ray': '59764fa77b11175a-FRA',
-1535 verbose headers age: '5352',
-1535 verbose headers 'cache-control': 'public, max-age=300',
-1535 verbose headers etag: '"63c48c25d01ab9ec3e3fb5fe89f0600c"',
-1535 verbose headers 'last-modified': 'Tue, 08 Jan 2019 06:13:01 GMT',
-1535 verbose headers vary: 'Accept-Encoding',
-1535 verbose headers 'cf-cache-status': 'HIT',
-1535 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1535 verbose headers server: 'cloudflare',
-1535 verbose headers 'cf-request-id': '02ddd01caf0000175a1e21a200000001' }
-1536 silly get cb [ 304,
-1536 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1536 silly get connection: 'keep-alive',
-1536 silly get 'set-cookie':
-1536 silly get [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1536 silly get 'cf-ray': '59764fa77b11175a-FRA',
-1536 silly get age: '5352',
-1536 silly get 'cache-control': 'public, max-age=300',
-1536 silly get etag: '"63c48c25d01ab9ec3e3fb5fe89f0600c"',
-1536 silly get 'last-modified': 'Tue, 08 Jan 2019 06:13:01 GMT',
-1536 silly get vary: 'Accept-Encoding',
-1536 silly get 'cf-cache-status': 'HIT',
-1536 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1536 silly get server: 'cloudflare',
-1536 silly get 'cf-request-id': '02ddd01caf0000175a1e21a200000001' } ]
-1537 verbose etag https://registry.npmjs.org/har-schema from cache
-1538 verbose get saving har-schema to /home/christine/.npm/registry.npmjs.org/har-schema/.cache.json
-1539 silly resolveWithNewModule har-schema@2.0.0 checking installable status
-1540 silly cache add args [ 'har-schema@^2.0.0', null ]
-1541 verbose cache add spec har-schema@^2.0.0
-1542 silly cache add parsed spec Result {
-1542 silly cache add raw: 'har-schema@^2.0.0',
-1542 silly cache add scope: null,
-1542 silly cache add name: 'har-schema',
-1542 silly cache add rawSpec: '^2.0.0',
-1542 silly cache add spec: '>=2.0.0 <3.0.0',
-1542 silly cache add type: 'range' }
-1543 silly addNamed har-schema@>=2.0.0 <3.0.0
-1544 verbose addNamed ">=2.0.0 <3.0.0" is a valid semver range for har-schema
-1545 silly addNameRange { name: 'har-schema', range: '>=2.0.0 <3.0.0', hasData: false }
-1546 silly mapToRegistry name har-schema
-1547 silly mapToRegistry using default registry
-1548 silly mapToRegistry registry https://registry.npmjs.org/
-1549 silly mapToRegistry uri https://registry.npmjs.org/har-schema
-1550 verbose addNameRange registry:https://registry.npmjs.org/har-schema not in flight; fetching
-1551 verbose get https://registry.npmjs.org/har-schema not expired, no request
-1552 silly addNameRange number 2 { name: 'har-schema', range: '>=2.0.0 <3.0.0', hasData: true }
-1553 silly addNameRange versions [ 'har-schema',
-1553 silly addNameRange [ '0.0.1',
-1553 silly addNameRange '0.1.0',
-1553 silly addNameRange '0.2.0',
-1553 silly addNameRange '1.0.0',
-1553 silly addNameRange '1.0.1',
-1553 silly addNameRange '1.0.2',
-1553 silly addNameRange '1.0.3',
-1553 silly addNameRange '1.0.4',
-1553 silly addNameRange '1.0.5',
-1553 silly addNameRange '2.0.0' ] ]
-1554 silly addNamed har-schema@2.0.0
-1555 verbose addNamed "2.0.0" is a plain semver version for har-schema
-1556 silly cache afterAdd har-schema@2.0.0
-1557 verbose afterAdd /home/christine/.npm/har-schema/2.0.0/package/package.json not in flight; writing
-1558 verbose afterAdd /home/christine/.npm/har-schema/2.0.0/package/package.json written
-1559 http 200 https://registry.npmjs.org/ajv
-1560 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1560 verbose headers 'content-type': 'application/json',
-1560 verbose headers 'transfer-encoding': 'chunked',
-1560 verbose headers connection: 'keep-alive',
-1560 verbose headers 'set-cookie':
-1560 verbose headers [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1560 verbose headers 'cf-ray': '59764fa798ddd715-FRA',
-1560 verbose headers age: '5352',
-1560 verbose headers 'cache-control': 'public, max-age=300',
-1560 verbose headers etag: 'W/"ba29f88f088d4acc36748d3083785459"',
-1560 verbose headers 'last-modified': 'Sun, 19 Apr 2020 23:18:27 GMT',
-1560 verbose headers vary: 'accept-encoding, accept',
-1560 verbose headers 'cf-cache-status': 'HIT',
-1560 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1560 verbose headers server: 'cloudflare',
-1560 verbose headers 'content-encoding': 'gzip',
-1560 verbose headers 'cf-request-id': '02ddd01cc30000d715c1209200000001' }
-1561 silly get cb [ 200,
-1561 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1561 silly get 'content-type': 'application/json',
-1561 silly get 'transfer-encoding': 'chunked',
-1561 silly get connection: 'keep-alive',
-1561 silly get 'set-cookie':
-1561 silly get [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1561 silly get 'cf-ray': '59764fa798ddd715-FRA',
-1561 silly get age: '5352',
-1561 silly get 'cache-control': 'public, max-age=300',
-1561 silly get etag: 'W/"ba29f88f088d4acc36748d3083785459"',
-1561 silly get 'last-modified': 'Sun, 19 Apr 2020 23:18:27 GMT',
-1561 silly get vary: 'accept-encoding, accept',
-1561 silly get 'cf-cache-status': 'HIT',
-1561 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1561 silly get server: 'cloudflare',
-1561 silly get 'content-encoding': 'gzip',
-1561 silly get 'cf-request-id': '02ddd01cc30000d715c1209200000001' } ]
-1562 verbose get saving ajv to /home/christine/.npm/registry.npmjs.org/ajv/.cache.json
-1563 silly resolveWithNewModule ajv@6.12.2 checking installable status
-1564 silly cache add args [ 'ajv@^6.5.5', null ]
-1565 verbose cache add spec ajv@^6.5.5
-1566 silly cache add parsed spec Result {
-1566 silly cache add raw: 'ajv@^6.5.5',
-1566 silly cache add scope: null,
-1566 silly cache add name: 'ajv',
-1566 silly cache add rawSpec: '^6.5.5',
-1566 silly cache add spec: '>=6.5.5 <7.0.0',
-1566 silly cache add type: 'range' }
-1567 silly addNamed ajv@>=6.5.5 <7.0.0
-1568 verbose addNamed ">=6.5.5 <7.0.0" is a valid semver range for ajv
-1569 silly addNameRange { name: 'ajv', range: '>=6.5.5 <7.0.0', hasData: false }
-1570 silly mapToRegistry name ajv
-1571 silly mapToRegistry using default registry
-1572 silly mapToRegistry registry https://registry.npmjs.org/
-1573 silly mapToRegistry uri https://registry.npmjs.org/ajv
-1574 verbose addNameRange registry:https://registry.npmjs.org/ajv not in flight; fetching
-1575 verbose get https://registry.npmjs.org/ajv not expired, no request
-1576 silly addNameRange number 2 { name: 'ajv', range: '>=6.5.5 <7.0.0', hasData: true }
-1577 silly addNameRange versions [ 'ajv',
-1577 silly addNameRange [ '0.0.4',
-1577 silly addNameRange '0.0.5',
-1577 silly addNameRange '0.0.6',
-1577 silly addNameRange '0.0.7',
-1577 silly addNameRange '0.0.8',
-1577 silly addNameRange '0.0.9',
-1577 silly addNameRange '0.0.10',
-1577 silly addNameRange '0.0.11',
-1577 silly addNameRange '0.0.12',
-1577 silly addNameRange '0.1.0',
-1577 silly addNameRange '0.1.1',
-1577 silly addNameRange '0.1.2',
-1577 silly addNameRange '0.1.3',
-1577 silly addNameRange '0.1.4',
-1577 silly addNameRange '0.1.5',
-1577 silly addNameRange '0.1.6',
-1577 silly addNameRange '0.1.7',
-1577 silly addNameRange '0.1.8',
-1577 silly addNameRange '0.1.9',
-1577 silly addNameRange '0.1.10',
-1577 silly addNameRange '0.1.11',
-1577 silly addNameRange '0.1.12',
-1577 silly addNameRange '0.1.13',
-1577 silly addNameRange '0.1.14',
-1577 silly addNameRange '0.1.15',
-1577 silly addNameRange '0.1.16',
-1577 silly addNameRange '0.2.0',
-1577 silly addNameRange '0.2.1',
-1577 silly addNameRange '0.2.2',
-1577 silly addNameRange '0.2.3',
-1577 silly addNameRange '0.2.4',
-1577 silly addNameRange '0.2.5',
-1577 silly addNameRange '0.2.6',
-1577 silly addNameRange '0.2.7',
-1577 silly addNameRange '0.2.8',
-1577 silly addNameRange '0.2.9',
-1577 silly addNameRange '0.3.0',
-1577 silly addNameRange '0.3.1',
-1577 silly addNameRange '0.3.2',
-1577 silly addNameRange '0.3.3',
-1577 silly addNameRange '0.3.4',
-1577 silly addNameRange '0.3.5',
-1577 silly addNameRange '0.3.6',
-1577 silly addNameRange '0.3.7',
-1577 silly addNameRange '0.3.8',
-1577 silly addNameRange '0.3.11',
-1577 silly addNameRange '0.3.12',
-1577 silly addNameRange '0.4.0',
-1577 silly addNameRange '0.4.1',
-1577 silly addNameRange '0.4.2',
-1577 silly addNameRange '0.4.3',
-1577 silly addNameRange '0.4.4',
-1577 silly addNameRange '0.4.5',
-1577 silly addNameRange '0.4.6',
-1577 silly addNameRange '0.4.7',
-1577 silly addNameRange '0.4.8',
-1577 silly addNameRange '0.4.9',
-1577 silly addNameRange '0.4.10',
-1577 silly addNameRange '0.4.12',
-1577 silly addNameRange '0.4.14',
-1577 silly addNameRange '0.4.15',
-1577 silly addNameRange '0.5.0',
-1577 silly addNameRange '0.5.2',
-1577 silly addNameRange '0.5.3',
-1577 silly addNameRange '0.5.4',
-1577 silly addNameRange '0.5.5',
-1577 silly addNameRange '0.5.6',
-1577 silly addNameRange '0.5.7',
-1577 silly addNameRange '0.5.8',
-1577 silly addNameRange '0.5.9',
-1577 silly addNameRange '0.5.10',
-1577 silly addNameRange '0.5.11',
-1577 silly addNameRange '0.5.12',
-1577 silly addNameRange '0.6.0',
-1577 silly addNameRange '0.6.1',
-1577 silly addNameRange '0.6.2',
-1577 silly addNameRange '0.6.3',
-1577 silly addNameRange '0.6.4',
-1577 silly addNameRange '0.6.5',
-1577 silly addNameRange '0.6.6',
-1577 silly addNameRange '0.6.7',
-1577 silly addNameRange '0.6.8',
-1577 silly addNameRange '0.6.9',
-1577 silly addNameRange '0.6.10',
-1577 silly addNameRange '0.6.11',
-1577 silly addNameRange '0.6.12',
-1577 silly addNameRange '0.6.13',
-1577 silly addNameRange '0.6.14',
-1577 silly addNameRange '0.6.15',
-1577 silly addNameRange '0.7.0',
-1577 silly addNameRange '0.7.1',
-1577 silly addNameRange '0.7.2',
-1577 silly addNameRange '1.0.0',
-1577 silly addNameRange '1.0.1',
-1577 silly addNameRange '1.1.1',
-1577 silly addNameRange '1.2.0',
-1577 silly addNameRange '1.2.1',
-1577 silly addNameRange '1.3.0',
-1577 silly addNameRange '1.3.1',
-1577 silly addNameRange '1.3.2',
-1577 silly addNameRange ... 185 more items ] ]
-1578 silly addNamed ajv@6.12.2
-1579 verbose addNamed "6.12.2" is a plain semver version for ajv
-1580 silly mapToRegistry name ajv
-1581 silly mapToRegistry using default registry
-1582 silly mapToRegistry registry https://registry.npmjs.org/
-1583 silly mapToRegistry uri https://registry.npmjs.org/ajv
-1584 verbose addRemoteTarball https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz not in flight; adding
-1585 verbose addRemoteTarball [ 'https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz',
-1585 verbose addRemoteTarball 'c629c5eced17baf314437918d2da88c99d5958cd' ]
-1586 info retry fetch attempt 1 at 13:48:58
-1587 info attempt registry request try #1 at 13:48:58
-1588 http fetch GET https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz
-1589 http fetch 200 https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz
-1590 silly fetchAndShaCheck shasum c629c5eced17baf314437918d2da88c99d5958cd
-1591 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/ajv/-/ajv-6.12.2.tgz not in flight; adding
-1592 verbose addTmpTarball already have metadata; skipping unpack for ajv@6.12.2
-1593 silly cache afterAdd ajv@6.12.2
-1594 verbose afterAdd /home/christine/.npm/ajv/6.12.2/package/package.json not in flight; writing
-1595 verbose afterAdd /home/christine/.npm/ajv/6.12.2/package/package.json written
-1596 silly fetchNamedPackageData fast-deep-equal
-1597 silly mapToRegistry name fast-deep-equal
-1598 silly mapToRegistry using default registry
-1599 silly mapToRegistry registry https://registry.npmjs.org/
-1600 silly mapToRegistry uri https://registry.npmjs.org/fast-deep-equal
-1601 silly fetchNamedPackageData fast-json-stable-stringify
-1602 silly mapToRegistry name fast-json-stable-stringify
-1603 silly mapToRegistry using default registry
-1604 silly mapToRegistry registry https://registry.npmjs.org/
-1605 silly mapToRegistry uri https://registry.npmjs.org/fast-json-stable-stringify
-1606 silly fetchNamedPackageData json-schema-traverse
-1607 silly mapToRegistry name json-schema-traverse
-1608 silly mapToRegistry using default registry
-1609 silly mapToRegistry registry https://registry.npmjs.org/
-1610 silly mapToRegistry uri https://registry.npmjs.org/json-schema-traverse
-1611 silly fetchNamedPackageData uri-js
-1612 silly mapToRegistry name uri-js
-1613 silly mapToRegistry using default registry
-1614 silly mapToRegistry registry https://registry.npmjs.org/
-1615 silly mapToRegistry uri https://registry.npmjs.org/uri-js
-1616 verbose request uri https://registry.npmjs.org/fast-deep-equal
-1617 verbose request no auth needed
-1618 info attempt registry request try #1 at 13:48:58
-1619 verbose etag W/"db2dac15e1de3baf39963d09ad4d32a5"
-1620 verbose lastModified Wed, 22 Jan 2020 05:22:55 GMT
-1621 http request GET https://registry.npmjs.org/fast-deep-equal
-1622 verbose request uri https://registry.npmjs.org/json-schema-traverse
-1623 verbose request no auth needed
-1624 info attempt registry request try #1 at 13:48:58
-1625 verbose etag W/"ff9cf4d0fe6dae90110c679f03d42f51"
-1626 verbose lastModified Sun, 10 Jun 2018 08:42:10 GMT
-1627 http request GET https://registry.npmjs.org/json-schema-traverse
-1628 verbose request uri https://registry.npmjs.org/fast-json-stable-stringify
-1629 verbose request no auth needed
-1630 info attempt registry request try #1 at 13:48:58
-1631 verbose etag W/"ae0fff93e18698c6aa2dc573fe85ad0a"
-1632 verbose lastModified Sat, 14 Dec 2019 16:18:01 GMT
-1633 http request GET https://registry.npmjs.org/fast-json-stable-stringify
-1634 verbose request uri https://registry.npmjs.org/uri-js
-1635 verbose request no auth needed
-1636 info attempt registry request try #1 at 13:48:58
-1637 verbose etag W/"98dc8f4198063595fc640811868341b2"
-1638 verbose lastModified Wed, 09 Jan 2019 05:32:41 GMT
-1639 http request GET https://registry.npmjs.org/uri-js
-1640 http 304 https://registry.npmjs.org/fast-deep-equal
-1641 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1641 verbose headers connection: 'keep-alive',
-1641 verbose headers 'set-cookie':
-1641 verbose headers [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1641 verbose headers 'cf-ray': '59764fa919db05bb-FRA',
-1641 verbose headers age: '5351',
-1641 verbose headers 'cache-control': 'public, max-age=300',
-1641 verbose headers etag: '"db2dac15e1de3baf39963d09ad4d32a5"',
-1641 verbose headers 'last-modified': 'Wed, 22 Jan 2020 05:22:55 GMT',
-1641 verbose headers vary: 'Accept-Encoding',
-1641 verbose headers 'cf-cache-status': 'HIT',
-1641 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1641 verbose headers server: 'cloudflare',
-1641 verbose headers 'cf-request-id': '02ddd01db3000005bb0ca9e200000001' }
-1642 silly get cb [ 304,
-1642 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1642 silly get connection: 'keep-alive',
-1642 silly get 'set-cookie':
-1642 silly get [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1642 silly get 'cf-ray': '59764fa919db05bb-FRA',
-1642 silly get age: '5351',
-1642 silly get 'cache-control': 'public, max-age=300',
-1642 silly get etag: '"db2dac15e1de3baf39963d09ad4d32a5"',
-1642 silly get 'last-modified': 'Wed, 22 Jan 2020 05:22:55 GMT',
-1642 silly get vary: 'Accept-Encoding',
-1642 silly get 'cf-cache-status': 'HIT',
-1642 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1642 silly get server: 'cloudflare',
-1642 silly get 'cf-request-id': '02ddd01db3000005bb0ca9e200000001' } ]
-1643 verbose etag https://registry.npmjs.org/fast-deep-equal from cache
-1644 verbose get saving fast-deep-equal to /home/christine/.npm/registry.npmjs.org/fast-deep-equal/.cache.json
-1645 silly resolveWithNewModule fast-deep-equal@3.1.1 checking installable status
-1646 silly cache add args [ 'fast-deep-equal@^3.1.1', null ]
-1647 verbose cache add spec fast-deep-equal@^3.1.1
-1648 silly cache add parsed spec Result {
-1648 silly cache add raw: 'fast-deep-equal@^3.1.1',
-1648 silly cache add scope: null,
-1648 silly cache add name: 'fast-deep-equal',
-1648 silly cache add rawSpec: '^3.1.1',
-1648 silly cache add spec: '>=3.1.1 <4.0.0',
-1648 silly cache add type: 'range' }
-1649 silly addNamed fast-deep-equal@>=3.1.1 <4.0.0
-1650 verbose addNamed ">=3.1.1 <4.0.0" is a valid semver range for fast-deep-equal
-1651 silly addNameRange { name: 'fast-deep-equal',
-1651 silly addNameRange range: '>=3.1.1 <4.0.0',
-1651 silly addNameRange hasData: false }
-1652 silly mapToRegistry name fast-deep-equal
-1653 silly mapToRegistry using default registry
-1654 silly mapToRegistry registry https://registry.npmjs.org/
-1655 silly mapToRegistry uri https://registry.npmjs.org/fast-deep-equal
-1656 verbose addNameRange registry:https://registry.npmjs.org/fast-deep-equal not in flight; fetching
-1657 verbose get https://registry.npmjs.org/fast-deep-equal not expired, no request
-1658 silly addNameRange number 2 { name: 'fast-deep-equal',
-1658 silly addNameRange range: '>=3.1.1 <4.0.0',
-1658 silly addNameRange hasData: true }
-1659 silly addNameRange versions [ 'fast-deep-equal',
-1659 silly addNameRange [ '0.0.1',
-1659 silly addNameRange '0.1.0',
-1659 silly addNameRange '1.0.0',
-1659 silly addNameRange '1.1.0',
-1659 silly addNameRange '2.0.0',
-1659 silly addNameRange '2.0.1',
-1659 silly addNameRange '3.0.0-beta.0',
-1659 silly addNameRange '3.0.0-beta.1',
-1659 silly addNameRange '3.0.0-beta.2',
-1659 silly addNameRange '3.0.0',
-1659 silly addNameRange '3.0.1',
-1659 silly addNameRange '3.1.0',
-1659 silly addNameRange '3.1.1' ] ]
-1660 silly addNamed fast-deep-equal@3.1.1
-1661 verbose addNamed "3.1.1" is a plain semver version for fast-deep-equal
-1662 silly cache afterAdd fast-deep-equal@3.1.1
-1663 verbose afterAdd /home/christine/.npm/fast-deep-equal/3.1.1/package/package.json not in flight; writing
-1664 verbose afterAdd /home/christine/.npm/fast-deep-equal/3.1.1/package/package.json written
-1665 http 304 https://registry.npmjs.org/fast-json-stable-stringify
-1666 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1666 verbose headers connection: 'keep-alive',
-1666 verbose headers 'set-cookie':
-1666 verbose headers [ '__cfduid=d2af9fdb41f2d4571645353fe78c8280d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1666 verbose headers 'cf-ray': '59764fa92ba70eab-FRA',
-1666 verbose headers age: '5351',
-1666 verbose headers 'cache-control': 'public, max-age=300',
-1666 verbose headers etag: '"ae0fff93e18698c6aa2dc573fe85ad0a"',
-1666 verbose headers 'last-modified': 'Sat, 14 Dec 2019 16:18:01 GMT',
-1666 verbose headers vary: 'Accept-Encoding',
-1666 verbose headers 'cf-cache-status': 'HIT',
-1666 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1666 verbose headers server: 'cloudflare',
-1666 verbose headers 'cf-request-id': '02ddd01db900000eabe9180200000001' }
-1667 silly get cb [ 304,
-1667 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1667 silly get connection: 'keep-alive',
-1667 silly get 'set-cookie':
-1667 silly get [ '__cfduid=d2af9fdb41f2d4571645353fe78c8280d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1667 silly get 'cf-ray': '59764fa92ba70eab-FRA',
-1667 silly get age: '5351',
-1667 silly get 'cache-control': 'public, max-age=300',
-1667 silly get etag: '"ae0fff93e18698c6aa2dc573fe85ad0a"',
-1667 silly get 'last-modified': 'Sat, 14 Dec 2019 16:18:01 GMT',
-1667 silly get vary: 'Accept-Encoding',
-1667 silly get 'cf-cache-status': 'HIT',
-1667 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1667 silly get server: 'cloudflare',
-1667 silly get 'cf-request-id': '02ddd01db900000eabe9180200000001' } ]
-1668 verbose etag https://registry.npmjs.org/fast-json-stable-stringify from cache
-1669 verbose get saving fast-json-stable-stringify to /home/christine/.npm/registry.npmjs.org/fast-json-stable-stringify/.cache.json
-1670 silly resolveWithNewModule fast-json-stable-stringify@2.1.0 checking installable status
-1671 silly cache add args [ 'fast-json-stable-stringify@^2.0.0', null ]
-1672 verbose cache add spec fast-json-stable-stringify@^2.0.0
-1673 silly cache add parsed spec Result {
-1673 silly cache add raw: 'fast-json-stable-stringify@^2.0.0',
-1673 silly cache add scope: null,
-1673 silly cache add name: 'fast-json-stable-stringify',
-1673 silly cache add rawSpec: '^2.0.0',
-1673 silly cache add spec: '>=2.0.0 <3.0.0',
-1673 silly cache add type: 'range' }
-1674 silly addNamed fast-json-stable-stringify@>=2.0.0 <3.0.0
-1675 verbose addNamed ">=2.0.0 <3.0.0" is a valid semver range for fast-json-stable-stringify
-1676 silly addNameRange { name: 'fast-json-stable-stringify',
-1676 silly addNameRange range: '>=2.0.0 <3.0.0',
-1676 silly addNameRange hasData: false }
-1677 silly mapToRegistry name fast-json-stable-stringify
-1678 silly mapToRegistry using default registry
-1679 silly mapToRegistry registry https://registry.npmjs.org/
-1680 silly mapToRegistry uri https://registry.npmjs.org/fast-json-stable-stringify
-1681 verbose addNameRange registry:https://registry.npmjs.org/fast-json-stable-stringify not in flight; fetching
-1682 http 304 https://registry.npmjs.org/json-schema-traverse
-1683 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1683 verbose headers connection: 'keep-alive',
-1683 verbose headers 'set-cookie':
-1683 verbose headers [ '__cfduid=d3221de8ef62ba021521e3facdf4646ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1683 verbose headers 'cf-ray': '59764fa928dbd6e1-FRA',
-1683 verbose headers age: '5351',
-1683 verbose headers 'cache-control': 'public, max-age=300',
-1683 verbose headers etag: '"ff9cf4d0fe6dae90110c679f03d42f51"',
-1683 verbose headers 'last-modified': 'Sun, 10 Jun 2018 08:42:10 GMT',
-1683 verbose headers vary: 'Accept-Encoding',
-1683 verbose headers 'cf-cache-status': 'HIT',
-1683 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1683 verbose headers server: 'cloudflare',
-1683 verbose headers 'cf-request-id': '02ddd01db80000d6e132393200000001' }
-1684 silly get cb [ 304,
-1684 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1684 silly get connection: 'keep-alive',
-1684 silly get 'set-cookie':
-1684 silly get [ '__cfduid=d3221de8ef62ba021521e3facdf4646ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1684 silly get 'cf-ray': '59764fa928dbd6e1-FRA',
-1684 silly get age: '5351',
-1684 silly get 'cache-control': 'public, max-age=300',
-1684 silly get etag: '"ff9cf4d0fe6dae90110c679f03d42f51"',
-1684 silly get 'last-modified': 'Sun, 10 Jun 2018 08:42:10 GMT',
-1684 silly get vary: 'Accept-Encoding',
-1684 silly get 'cf-cache-status': 'HIT',
-1684 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1684 silly get server: 'cloudflare',
-1684 silly get 'cf-request-id': '02ddd01db80000d6e132393200000001' } ]
-1685 verbose etag https://registry.npmjs.org/json-schema-traverse from cache
-1686 verbose get saving json-schema-traverse to /home/christine/.npm/registry.npmjs.org/json-schema-traverse/.cache.json
-1687 http 304 https://registry.npmjs.org/uri-js
-1688 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1688 verbose headers connection: 'keep-alive',
-1688 verbose headers 'set-cookie':
-1688 verbose headers [ '__cfduid=daac5443483b19b682dfd1142d78174b81590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1688 verbose headers 'cf-ray': '59764fa92aaec2f9-FRA',
-1688 verbose headers age: '5351',
-1688 verbose headers 'cache-control': 'public, max-age=300',
-1688 verbose headers etag: '"98dc8f4198063595fc640811868341b2"',
-1688 verbose headers 'last-modified': 'Wed, 09 Jan 2019 05:32:41 GMT',
-1688 verbose headers vary: 'Accept-Encoding',
-1688 verbose headers 'cf-cache-status': 'HIT',
-1688 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1688 verbose headers server: 'cloudflare',
-1688 verbose headers 'cf-request-id': '02ddd01db90000c2f92609d200000001' }
-1689 silly get cb [ 304,
-1689 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1689 silly get connection: 'keep-alive',
-1689 silly get 'set-cookie':
-1689 silly get [ '__cfduid=daac5443483b19b682dfd1142d78174b81590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1689 silly get 'cf-ray': '59764fa92aaec2f9-FRA',
-1689 silly get age: '5351',
-1689 silly get 'cache-control': 'public, max-age=300',
-1689 silly get etag: '"98dc8f4198063595fc640811868341b2"',
-1689 silly get 'last-modified': 'Wed, 09 Jan 2019 05:32:41 GMT',
-1689 silly get vary: 'Accept-Encoding',
-1689 silly get 'cf-cache-status': 'HIT',
-1689 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1689 silly get server: 'cloudflare',
-1689 silly get 'cf-request-id': '02ddd01db90000c2f92609d200000001' } ]
-1690 verbose etag https://registry.npmjs.org/uri-js from cache
-1691 verbose get saving uri-js to /home/christine/.npm/registry.npmjs.org/uri-js/.cache.json
-1692 verbose get https://registry.npmjs.org/fast-json-stable-stringify not expired, no request
-1693 silly addNameRange number 2 { name: 'fast-json-stable-stringify',
-1693 silly addNameRange range: '>=2.0.0 <3.0.0',
-1693 silly addNameRange hasData: true }
-1694 silly addNameRange versions [ 'fast-json-stable-stringify', [ '1.0.2', '2.0.0', '2.1.0' ] ]
-1695 silly addNamed fast-json-stable-stringify@2.1.0
-1696 verbose addNamed "2.1.0" is a plain semver version for fast-json-stable-stringify
-1697 silly resolveWithNewModule json-schema-traverse@0.4.1 checking installable status
-1698 silly cache add args [ 'json-schema-traverse@^0.4.1', null ]
-1699 verbose cache add spec json-schema-traverse@^0.4.1
-1700 silly cache add parsed spec Result {
-1700 silly cache add raw: 'json-schema-traverse@^0.4.1',
-1700 silly cache add scope: null,
-1700 silly cache add name: 'json-schema-traverse',
-1700 silly cache add rawSpec: '^0.4.1',
-1700 silly cache add spec: '>=0.4.1 <0.5.0',
-1700 silly cache add type: 'range' }
-1701 silly addNamed json-schema-traverse@>=0.4.1 <0.5.0
-1702 verbose addNamed ">=0.4.1 <0.5.0" is a valid semver range for json-schema-traverse
-1703 silly addNameRange { name: 'json-schema-traverse',
-1703 silly addNameRange range: '>=0.4.1 <0.5.0',
-1703 silly addNameRange hasData: false }
-1704 silly mapToRegistry name json-schema-traverse
-1705 silly mapToRegistry using default registry
-1706 silly mapToRegistry registry https://registry.npmjs.org/
-1707 silly mapToRegistry uri https://registry.npmjs.org/json-schema-traverse
-1708 verbose addNameRange registry:https://registry.npmjs.org/json-schema-traverse not in flight; fetching
-1709 silly resolveWithNewModule uri-js@4.2.2 checking installable status
-1710 silly cache add args [ 'uri-js@^4.2.2', null ]
-1711 verbose cache add spec uri-js@^4.2.2
-1712 silly cache add parsed spec Result {
-1712 silly cache add raw: 'uri-js@^4.2.2',
-1712 silly cache add scope: null,
-1712 silly cache add name: 'uri-js',
-1712 silly cache add rawSpec: '^4.2.2',
-1712 silly cache add spec: '>=4.2.2 <5.0.0',
-1712 silly cache add type: 'range' }
-1713 silly addNamed uri-js@>=4.2.2 <5.0.0
-1714 verbose addNamed ">=4.2.2 <5.0.0" is a valid semver range for uri-js
-1715 silly addNameRange { name: 'uri-js', range: '>=4.2.2 <5.0.0', hasData: false }
-1716 silly mapToRegistry name uri-js
-1717 silly mapToRegistry using default registry
-1718 silly mapToRegistry registry https://registry.npmjs.org/
-1719 silly mapToRegistry uri https://registry.npmjs.org/uri-js
-1720 verbose addNameRange registry:https://registry.npmjs.org/uri-js not in flight; fetching
-1721 verbose get https://registry.npmjs.org/json-schema-traverse not expired, no request
-1722 silly addNameRange number 2 { name: 'json-schema-traverse',
-1722 silly addNameRange range: '>=0.4.1 <0.5.0',
-1722 silly addNameRange hasData: true }
-1723 silly addNameRange versions [ 'json-schema-traverse',
-1723 silly addNameRange [ '0.0.1', '0.1.0', '0.2.0', '0.3.0', '0.3.1', '0.4.0', '0.4.1' ] ]
-1724 silly addNamed json-schema-traverse@0.4.1
-1725 verbose addNamed "0.4.1" is a plain semver version for json-schema-traverse
-1726 verbose get https://registry.npmjs.org/uri-js not expired, no request
-1727 silly addNameRange number 2 { name: 'uri-js', range: '>=4.2.2 <5.0.0', hasData: true }
-1728 silly addNameRange versions [ 'uri-js',
-1728 silly addNameRange [ '1.4.0',
-1728 silly addNameRange '1.4.2',
-1728 silly addNameRange '2.0.0',
-1728 silly addNameRange '2.1.0',
-1728 silly addNameRange '2.1.1',
-1728 silly addNameRange '3.0.0',
-1728 silly addNameRange '3.0.1',
-1728 silly addNameRange '3.0.2',
-1728 silly addNameRange '4.2.0',
-1728 silly addNameRange '4.2.1',
-1728 silly addNameRange '4.2.2' ] ]
-1729 silly addNamed uri-js@4.2.2
-1730 verbose addNamed "4.2.2" is a plain semver version for uri-js
-1731 silly cache afterAdd fast-json-stable-stringify@2.1.0
-1732 verbose afterAdd /home/christine/.npm/fast-json-stable-stringify/2.1.0/package/package.json not in flight; writing
-1733 verbose afterAdd /home/christine/.npm/fast-json-stable-stringify/2.1.0/package/package.json written
-1734 silly cache afterAdd json-schema-traverse@0.4.1
-1735 verbose afterAdd /home/christine/.npm/json-schema-traverse/0.4.1/package/package.json not in flight; writing
-1736 silly cache afterAdd uri-js@4.2.2
-1737 verbose afterAdd /home/christine/.npm/uri-js/4.2.2/package/package.json not in flight; writing
-1738 verbose afterAdd /home/christine/.npm/json-schema-traverse/0.4.1/package/package.json written
-1739 verbose afterAdd /home/christine/.npm/uri-js/4.2.2/package/package.json written
-1740 silly fetchNamedPackageData punycode
-1741 silly mapToRegistry name punycode
-1742 silly mapToRegistry using default registry
-1743 silly mapToRegistry registry https://registry.npmjs.org/
-1744 silly mapToRegistry uri https://registry.npmjs.org/punycode
-1745 verbose request uri https://registry.npmjs.org/punycode
-1746 verbose request no auth needed
-1747 info attempt registry request try #1 at 13:48:58
-1748 verbose etag W/"27ef686d9a29403de9242fe625c85934"
-1749 verbose lastModified Sun, 27 May 2018 13:11:15 GMT
-1750 http request GET https://registry.npmjs.org/punycode
-1751 http 304 https://registry.npmjs.org/punycode
-1752 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1752 verbose headers connection: 'keep-alive',
-1752 verbose headers 'set-cookie':
-1752 verbose headers [ '__cfduid=d27785e001b27740005b62566f67820581590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1752 verbose headers 'cf-ray': '59764fa969ce1772-FRA',
-1752 verbose headers age: '5655',
-1752 verbose headers 'cache-control': 'public, max-age=300',
-1752 verbose headers etag: '"27ef686d9a29403de9242fe625c85934"',
-1752 verbose headers 'last-modified': 'Sun, 27 May 2018 13:11:15 GMT',
-1752 verbose headers vary: 'Accept-Encoding',
-1752 verbose headers 'cf-cache-status': 'HIT',
-1752 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1752 verbose headers server: 'cloudflare',
-1752 verbose headers 'cf-request-id': '02ddd01de4000017726419b200000001' }
-1753 silly get cb [ 304,
-1753 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1753 silly get connection: 'keep-alive',
-1753 silly get 'set-cookie':
-1753 silly get [ '__cfduid=d27785e001b27740005b62566f67820581590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1753 silly get 'cf-ray': '59764fa969ce1772-FRA',
-1753 silly get age: '5655',
-1753 silly get 'cache-control': 'public, max-age=300',
-1753 silly get etag: '"27ef686d9a29403de9242fe625c85934"',
-1753 silly get 'last-modified': 'Sun, 27 May 2018 13:11:15 GMT',
-1753 silly get vary: 'Accept-Encoding',
-1753 silly get 'cf-cache-status': 'HIT',
-1753 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1753 silly get server: 'cloudflare',
-1753 silly get 'cf-request-id': '02ddd01de4000017726419b200000001' } ]
-1754 verbose etag https://registry.npmjs.org/punycode from cache
-1755 verbose get saving punycode to /home/christine/.npm/registry.npmjs.org/punycode/.cache.json
-1756 silly resolveWithNewModule punycode@2.1.1 checking installable status
-1757 silly cache add args [ 'punycode@^2.1.0', null ]
-1758 verbose cache add spec punycode@^2.1.0
-1759 silly cache add parsed spec Result {
-1759 silly cache add raw: 'punycode@^2.1.0',
-1759 silly cache add scope: null,
-1759 silly cache add name: 'punycode',
-1759 silly cache add rawSpec: '^2.1.0',
-1759 silly cache add spec: '>=2.1.0 <3.0.0',
-1759 silly cache add type: 'range' }
-1760 silly addNamed punycode@>=2.1.0 <3.0.0
-1761 verbose addNamed ">=2.1.0 <3.0.0" is a valid semver range for punycode
-1762 silly addNameRange { name: 'punycode', range: '>=2.1.0 <3.0.0', hasData: false }
-1763 silly mapToRegistry name punycode
-1764 silly mapToRegistry using default registry
-1765 silly mapToRegistry registry https://registry.npmjs.org/
-1766 silly mapToRegistry uri https://registry.npmjs.org/punycode
-1767 verbose addNameRange registry:https://registry.npmjs.org/punycode not in flight; fetching
-1768 verbose get https://registry.npmjs.org/punycode not expired, no request
-1769 silly addNameRange number 2 { name: 'punycode', range: '>=2.1.0 <3.0.0', hasData: true }
-1770 silly addNameRange versions [ 'punycode',
-1770 silly addNameRange [ '0.0.1',
-1770 silly addNameRange '0.0.2',
-1770 silly addNameRange '0.0.1337',
-1770 silly addNameRange '0.1.0',
-1770 silly addNameRange '0.1.1',
-1770 silly addNameRange '0.1.2',
-1770 silly addNameRange '0.2.0',
-1770 silly addNameRange '0.2.1',
-1770 silly addNameRange '0.2.2',
-1770 silly addNameRange '0.3.0',
-1770 silly addNameRange '1.0.0',
-1770 silly addNameRange '1.1.0',
-1770 silly addNameRange '1.1.1',
-1770 silly addNameRange '1.2.0',
-1770 silly addNameRange '1.2.1',
-1770 silly addNameRange '1.2.2',
-1770 silly addNameRange '1.2.3',
-1770 silly addNameRange '1.2.4',
-1770 silly addNameRange '1.3.0',
-1770 silly addNameRange '1.3.1',
-1770 silly addNameRange '1.3.2',
-1770 silly addNameRange '1.4.0',
-1770 silly addNameRange '1.4.1',
-1770 silly addNameRange '2.0.0',
-1770 silly addNameRange '2.0.1',
-1770 silly addNameRange '2.1.0',
-1770 silly addNameRange '2.1.1' ] ]
-1771 silly addNamed punycode@2.1.1
-1772 verbose addNamed "2.1.1" is a plain semver version for punycode
-1773 silly cache afterAdd punycode@2.1.1
-1774 verbose afterAdd /home/christine/.npm/punycode/2.1.1/package/package.json not in flight; writing
-1775 verbose afterAdd /home/christine/.npm/punycode/2.1.1/package/package.json written
-1776 silly fetchNamedPackageData assert-plus
-1777 silly mapToRegistry name assert-plus
-1778 silly mapToRegistry using default registry
-1779 silly mapToRegistry registry https://registry.npmjs.org/
-1780 silly mapToRegistry uri https://registry.npmjs.org/assert-plus
-1781 silly fetchNamedPackageData jsprim
-1782 silly mapToRegistry name jsprim
-1783 silly mapToRegistry using default registry
-1784 silly mapToRegistry registry https://registry.npmjs.org/
-1785 silly mapToRegistry uri https://registry.npmjs.org/jsprim
-1786 silly fetchNamedPackageData sshpk
-1787 silly mapToRegistry name sshpk
-1788 silly mapToRegistry using default registry
-1789 silly mapToRegistry registry https://registry.npmjs.org/
-1790 silly mapToRegistry uri https://registry.npmjs.org/sshpk
-1791 verbose request uri https://registry.npmjs.org/assert-plus
-1792 verbose request no auth needed
-1793 info attempt registry request try #1 at 13:48:58
-1794 verbose etag W/"5f1c38f02647d4e0324c53fe90ea160c"
-1795 verbose lastModified Fri, 13 Dec 2019 16:32:10 GMT
-1796 http request GET https://registry.npmjs.org/assert-plus
-1797 verbose request uri https://registry.npmjs.org/jsprim
-1798 verbose request no auth needed
-1799 info attempt registry request try #1 at 13:48:58
-1800 verbose etag W/"ec307a0d291a7abbcabe4ca63c75468e"
-1801 verbose lastModified Fri, 13 Dec 2019 16:32:36 GMT
-1802 http request GET https://registry.npmjs.org/jsprim
-1803 verbose request uri https://registry.npmjs.org/sshpk
-1804 verbose request no auth needed
-1805 info attempt registry request try #1 at 13:48:58
-1806 verbose etag W/"e8e015112a9fbc16cc4a367405b14614"
-1807 verbose lastModified Fri, 13 Dec 2019 16:33:04 GMT
-1808 http request GET https://registry.npmjs.org/sshpk
-1809 http 200 https://registry.npmjs.org/assert-plus
-1810 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1810 verbose headers 'content-type': 'application/json',
-1810 verbose headers 'transfer-encoding': 'chunked',
-1810 verbose headers connection: 'keep-alive',
-1810 verbose headers 'set-cookie':
-1810 verbose headers [ '__cfduid=d7b1200d8018131cb680b33099b4da6111590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1810 verbose headers 'cf-ray': '59764fa9af0505e9-FRA',
-1810 verbose headers age: '5654',
-1810 verbose headers 'cache-control': 'public, max-age=300',
-1810 verbose headers etag: 'W/"a6e598834cba689561f3d676e817bde6"',
-1810 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT',
-1810 verbose headers vary: 'accept-encoding, accept',
-1810 verbose headers 'cf-cache-status': 'HIT',
-1810 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1810 verbose headers server: 'cloudflare',
-1810 verbose headers 'content-encoding': 'gzip',
-1810 verbose headers 'cf-request-id': '02ddd01e0b000005e903b57200000001' }
-1811 silly get cb [ 200,
-1811 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1811 silly get 'content-type': 'application/json',
-1811 silly get 'transfer-encoding': 'chunked',
-1811 silly get connection: 'keep-alive',
-1811 silly get 'set-cookie':
-1811 silly get [ '__cfduid=d7b1200d8018131cb680b33099b4da6111590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1811 silly get 'cf-ray': '59764fa9af0505e9-FRA',
-1811 silly get age: '5654',
-1811 silly get 'cache-control': 'public, max-age=300',
-1811 silly get etag: 'W/"a6e598834cba689561f3d676e817bde6"',
-1811 silly get 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT',
-1811 silly get vary: 'accept-encoding, accept',
-1811 silly get 'cf-cache-status': 'HIT',
-1811 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1811 silly get server: 'cloudflare',
-1811 silly get 'content-encoding': 'gzip',
-1811 silly get 'cf-request-id': '02ddd01e0b000005e903b57200000001' } ]
-1812 verbose get saving assert-plus to /home/christine/.npm/registry.npmjs.org/assert-plus/.cache.json
-1813 silly resolveWithNewModule assert-plus@1.0.0 checking installable status
-1814 silly cache add args [ 'assert-plus@^1.0.0', null ]
-1815 verbose cache add spec assert-plus@^1.0.0
-1816 silly cache add parsed spec Result {
-1816 silly cache add raw: 'assert-plus@^1.0.0',
-1816 silly cache add scope: null,
-1816 silly cache add name: 'assert-plus',
-1816 silly cache add rawSpec: '^1.0.0',
-1816 silly cache add spec: '>=1.0.0 <2.0.0',
-1816 silly cache add type: 'range' }
-1817 silly addNamed assert-plus@>=1.0.0 <2.0.0
-1818 verbose addNamed ">=1.0.0 <2.0.0" is a valid semver range for assert-plus
-1819 silly addNameRange { name: 'assert-plus', range: '>=1.0.0 <2.0.0', hasData: false }
-1820 silly mapToRegistry name assert-plus
-1821 silly mapToRegistry using default registry
-1822 silly mapToRegistry registry https://registry.npmjs.org/
-1823 silly mapToRegistry uri https://registry.npmjs.org/assert-plus
-1824 verbose addNameRange registry:https://registry.npmjs.org/assert-plus not in flight; fetching
-1825 verbose get https://registry.npmjs.org/assert-plus not expired, no request
-1826 silly addNameRange number 2 { name: 'assert-plus', range: '>=1.0.0 <2.0.0', hasData: true }
-1827 silly addNameRange versions [ 'assert-plus',
-1827 silly addNameRange [ '0.1.0',
-1827 silly addNameRange '0.1.1',
-1827 silly addNameRange '0.1.2',
-1827 silly addNameRange '0.1.3',
-1827 silly addNameRange '0.1.4',
-1827 silly addNameRange '0.1.5',
-1827 silly addNameRange '0.2.0',
-1827 silly addNameRange '1.0.0' ] ]
-1828 silly addNamed assert-plus@1.0.0
-1829 verbose addNamed "1.0.0" is a plain semver version for assert-plus
-1830 silly cache afterAdd assert-plus@1.0.0
-1831 verbose afterAdd /home/christine/.npm/assert-plus/1.0.0/package/package.json not in flight; writing
-1832 verbose afterAdd /home/christine/.npm/assert-plus/1.0.0/package/package.json written
-1833 http 200 https://registry.npmjs.org/jsprim
-1834 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1834 verbose headers 'content-type': 'application/json',
-1834 verbose headers 'transfer-encoding': 'chunked',
-1834 verbose headers connection: 'keep-alive',
-1834 verbose headers 'set-cookie':
-1834 verbose headers [ '__cfduid=d570054c58525c9612ff8b11e8fa974871590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1834 verbose headers 'cf-ray': '59764fa9bc0d176a-FRA',
-1834 verbose headers age: '5654',
-1834 verbose headers 'cache-control': 'public, max-age=300',
-1834 verbose headers etag: 'W/"64e1b4713c2eacf5f810b5a6ad366cd9"',
-1834 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:51 GMT',
-1834 verbose headers vary: 'accept-encoding, accept',
-1834 verbose headers 'cf-cache-status': 'HIT',
-1834 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1834 verbose headers server: 'cloudflare',
-1834 verbose headers 'content-encoding': 'gzip',
-1834 verbose headers 'cf-request-id': '02ddd01e100000176a65ba5200000001' }
-1835 silly get cb [ 200,
-1835 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1835 silly get 'content-type': 'application/json',
-1835 silly get 'transfer-encoding': 'chunked',
-1835 silly get connection: 'keep-alive',
-1835 silly get 'set-cookie':
-1835 silly get [ '__cfduid=d570054c58525c9612ff8b11e8fa974871590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1835 silly get 'cf-ray': '59764fa9bc0d176a-FRA',
-1835 silly get age: '5654',
-1835 silly get 'cache-control': 'public, max-age=300',
-1835 silly get etag: 'W/"64e1b4713c2eacf5f810b5a6ad366cd9"',
-1835 silly get 'last-modified': 'Wed, 06 May 2020 14:47:51 GMT',
-1835 silly get vary: 'accept-encoding, accept',
-1835 silly get 'cf-cache-status': 'HIT',
-1835 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1835 silly get server: 'cloudflare',
-1835 silly get 'content-encoding': 'gzip',
-1835 silly get 'cf-request-id': '02ddd01e100000176a65ba5200000001' } ]
-1836 verbose get saving jsprim to /home/christine/.npm/registry.npmjs.org/jsprim/.cache.json
-1837 silly resolveWithNewModule jsprim@1.4.1 checking installable status
-1838 silly cache add args [ 'jsprim@^1.2.2', null ]
-1839 verbose cache add spec jsprim@^1.2.2
-1840 silly cache add parsed spec Result {
-1840 silly cache add raw: 'jsprim@^1.2.2',
-1840 silly cache add scope: null,
-1840 silly cache add name: 'jsprim',
-1840 silly cache add rawSpec: '^1.2.2',
-1840 silly cache add spec: '>=1.2.2 <2.0.0',
-1840 silly cache add type: 'range' }
-1841 silly addNamed jsprim@>=1.2.2 <2.0.0
-1842 verbose addNamed ">=1.2.2 <2.0.0" is a valid semver range for jsprim
-1843 silly addNameRange { name: 'jsprim', range: '>=1.2.2 <2.0.0', hasData: false }
-1844 silly mapToRegistry name jsprim
-1845 silly mapToRegistry using default registry
-1846 silly mapToRegistry registry https://registry.npmjs.org/
-1847 silly mapToRegistry uri https://registry.npmjs.org/jsprim
-1848 verbose addNameRange registry:https://registry.npmjs.org/jsprim not in flight; fetching
-1849 verbose get https://registry.npmjs.org/jsprim not expired, no request
-1850 silly addNameRange number 2 { name: 'jsprim', range: '>=1.2.2 <2.0.0', hasData: true }
-1851 silly addNameRange versions [ 'jsprim',
-1851 silly addNameRange [ '0.0.1',
-1851 silly addNameRange '0.0.2',
-1851 silly addNameRange '0.0.3',
-1851 silly addNameRange '0.0.4',
-1851 silly addNameRange '0.0.5',
-1851 silly addNameRange '0.1.0',
-1851 silly addNameRange '0.2.0',
-1851 silly addNameRange '0.3.0',
-1851 silly addNameRange '0.3.1',
-1851 silly addNameRange '0.4.0',
-1851 silly addNameRange '0.5.0',
-1851 silly addNameRange '0.5.1',
-1851 silly addNameRange '0.6.0',
-1851 silly addNameRange '0.6.1',
-1851 silly addNameRange '0.7.0',
-1851 silly addNameRange '0.8.0',
-1851 silly addNameRange '1.0.0',
-1851 silly addNameRange '1.1.0',
-1851 silly addNameRange '1.2.0',
-1851 silly addNameRange '1.2.1',
-1851 silly addNameRange '1.2.2',
-1851 silly addNameRange '1.3.0',
-1851 silly addNameRange '1.3.1',
-1851 silly addNameRange '1.4.0',
-1851 silly addNameRange '1.4.1',
-1851 silly addNameRange '2.0.0' ] ]
-1852 silly addNamed jsprim@1.4.1
-1853 verbose addNamed "1.4.1" is a plain semver version for jsprim
-1854 http 200 https://registry.npmjs.org/sshpk
-1855 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1855 verbose headers 'content-type': 'application/json',
-1855 verbose headers 'transfer-encoding': 'chunked',
-1855 verbose headers connection: 'keep-alive',
-1855 verbose headers 'set-cookie':
-1855 verbose headers [ '__cfduid=def5a536cfc1c142382a82585aa4561c11590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1855 verbose headers 'cf-ray': '59764fa9bc65dfbb-FRA',
-1855 verbose headers age: '5654',
-1855 verbose headers 'cache-control': 'public, max-age=300',
-1855 verbose headers etag: 'W/"4bb612bfd8ff73b94a8861a146b38953"',
-1855 verbose headers 'last-modified': 'Wed, 06 May 2020 14:48:13 GMT',
-1855 verbose headers vary: 'accept-encoding, accept',
-1855 verbose headers 'cf-cache-status': 'HIT',
-1855 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1855 verbose headers server: 'cloudflare',
-1855 verbose headers 'content-encoding': 'gzip',
-1855 verbose headers 'cf-request-id': '02ddd01e100000dfbb5fae5200000001' }
-1856 silly get cb [ 200,
-1856 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1856 silly get 'content-type': 'application/json',
-1856 silly get 'transfer-encoding': 'chunked',
-1856 silly get connection: 'keep-alive',
-1856 silly get 'set-cookie':
-1856 silly get [ '__cfduid=def5a536cfc1c142382a82585aa4561c11590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1856 silly get 'cf-ray': '59764fa9bc65dfbb-FRA',
-1856 silly get age: '5654',
-1856 silly get 'cache-control': 'public, max-age=300',
-1856 silly get etag: 'W/"4bb612bfd8ff73b94a8861a146b38953"',
-1856 silly get 'last-modified': 'Wed, 06 May 2020 14:48:13 GMT',
-1856 silly get vary: 'accept-encoding, accept',
-1856 silly get 'cf-cache-status': 'HIT',
-1856 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1856 silly get server: 'cloudflare',
-1856 silly get 'content-encoding': 'gzip',
-1856 silly get 'cf-request-id': '02ddd01e100000dfbb5fae5200000001' } ]
-1857 verbose get saving sshpk to /home/christine/.npm/registry.npmjs.org/sshpk/.cache.json
-1858 silly cache afterAdd jsprim@1.4.1
-1859 verbose afterAdd /home/christine/.npm/jsprim/1.4.1/package/package.json not in flight; writing
-1860 silly resolveWithNewModule sshpk@1.16.1 checking installable status
-1861 silly cache add args [ 'sshpk@^1.7.0', null ]
-1862 verbose cache add spec sshpk@^1.7.0
-1863 silly cache add parsed spec Result {
-1863 silly cache add raw: 'sshpk@^1.7.0',
-1863 silly cache add scope: null,
-1863 silly cache add name: 'sshpk',
-1863 silly cache add rawSpec: '^1.7.0',
-1863 silly cache add spec: '>=1.7.0 <2.0.0',
-1863 silly cache add type: 'range' }
-1864 silly addNamed sshpk@>=1.7.0 <2.0.0
-1865 verbose addNamed ">=1.7.0 <2.0.0" is a valid semver range for sshpk
-1866 silly addNameRange { name: 'sshpk', range: '>=1.7.0 <2.0.0', hasData: false }
-1867 silly mapToRegistry name sshpk
-1868 silly mapToRegistry using default registry
-1869 silly mapToRegistry registry https://registry.npmjs.org/
-1870 silly mapToRegistry uri https://registry.npmjs.org/sshpk
-1871 verbose addNameRange registry:https://registry.npmjs.org/sshpk not in flight; fetching
-1872 verbose afterAdd /home/christine/.npm/jsprim/1.4.1/package/package.json written
-1873 verbose get https://registry.npmjs.org/sshpk not expired, no request
-1874 silly addNameRange number 2 { name: 'sshpk', range: '>=1.7.0 <2.0.0', hasData: true }
-1875 silly addNameRange versions [ 'sshpk',
-1875 silly addNameRange [ '1.0.0',
-1875 silly addNameRange '1.0.1',
-1875 silly addNameRange '1.0.2',
-1875 silly addNameRange '1.0.3',
-1875 silly addNameRange '1.0.4',
-1875 silly addNameRange '1.1.0',
-1875 silly addNameRange '1.2.0',
-1875 silly addNameRange '1.2.1',
-1875 silly addNameRange '1.3.0',
-1875 silly addNameRange '1.4.0',
-1875 silly addNameRange '1.4.1',
-1875 silly addNameRange '1.4.2',
-1875 silly addNameRange '1.4.3',
-1875 silly addNameRange '1.4.4',
-1875 silly addNameRange '1.4.5',
-1875 silly addNameRange '1.4.6',
-1875 silly addNameRange '1.4.7',
-1875 silly addNameRange '1.5.0',
-1875 silly addNameRange '1.5.1',
-1875 silly addNameRange '1.6.0',
-1875 silly addNameRange '1.6.1',
-1875 silly addNameRange '1.6.2',
-1875 silly addNameRange '1.7.0',
-1875 silly addNameRange '1.7.1',
-1875 silly addNameRange '1.7.2',
-1875 silly addNameRange '1.7.3',
-1875 silly addNameRange '1.7.4',
-1875 silly addNameRange '1.8.0',
-1875 silly addNameRange '1.8.1',
-1875 silly addNameRange '1.8.2',
-1875 silly addNameRange '1.8.3',
-1875 silly addNameRange '1.9.0',
-1875 silly addNameRange '1.9.1',
-1875 silly addNameRange '1.9.2',
-1875 silly addNameRange '1.10.0',
-1875 silly addNameRange '1.10.1',
-1875 silly addNameRange '1.10.2',
-1875 silly addNameRange '1.11.0',
-1875 silly addNameRange '1.13.0',
-1875 silly addNameRange '1.13.1',
-1875 silly addNameRange '1.13.2',
-1875 silly addNameRange '1.14.1',
-1875 silly addNameRange '1.14.2',
-1875 silly addNameRange '1.15.0',
-1875 silly addNameRange '1.15.1',
-1875 silly addNameRange '1.15.2',
-1875 silly addNameRange '1.16.0',
-1875 silly addNameRange '1.16.1' ] ]
-1876 silly addNamed sshpk@1.16.1
-1877 verbose addNamed "1.16.1" is a plain semver version for sshpk
-1878 silly cache afterAdd sshpk@1.16.1
-1879 verbose afterAdd /home/christine/.npm/sshpk/1.16.1/package/package.json not in flight; writing
-1880 verbose afterAdd /home/christine/.npm/sshpk/1.16.1/package/package.json written
-1881 silly fetchNamedPackageData extsprintf
-1882 silly mapToRegistry name extsprintf
-1883 silly mapToRegistry using default registry
-1884 silly mapToRegistry registry https://registry.npmjs.org/
-1885 silly mapToRegistry uri https://registry.npmjs.org/extsprintf
-1886 silly fetchNamedPackageData json-schema
-1887 silly mapToRegistry name json-schema
-1888 silly mapToRegistry using default registry
-1889 silly mapToRegistry registry https://registry.npmjs.org/
-1890 silly mapToRegistry uri https://registry.npmjs.org/json-schema
-1891 silly fetchNamedPackageData verror
-1892 silly mapToRegistry name verror
-1893 silly mapToRegistry using default registry
-1894 silly mapToRegistry registry https://registry.npmjs.org/
-1895 silly mapToRegistry uri https://registry.npmjs.org/verror
-1896 verbose request uri https://registry.npmjs.org/json-schema
-1897 verbose request no auth needed
-1898 info attempt registry request try #1 at 13:48:58
-1899 verbose etag W/"5274dd0ff41b090868548552fd39da3b"
-1900 verbose lastModified Fri, 06 Sep 2019 03:31:48 GMT
-1901 http request GET https://registry.npmjs.org/json-schema
-1902 verbose request uri https://registry.npmjs.org/extsprintf
-1903 verbose request no auth needed
-1904 info attempt registry request try #1 at 13:48:58
-1905 verbose etag W/"181f798a7717cf280fb342d9306fa973"
-1906 verbose lastModified Fri, 13 Dec 2019 16:32:18 GMT
-1907 http request GET https://registry.npmjs.org/extsprintf
-1908 verbose request uri https://registry.npmjs.org/verror
-1909 verbose request no auth needed
-1910 info attempt registry request try #1 at 13:48:58
-1911 verbose etag W/"cee3cbe58715caedf23b4d5aa0f1317b"
-1912 verbose lastModified Fri, 13 Dec 2019 16:33:19 GMT
-1913 http request GET https://registry.npmjs.org/verror
-1914 http 200 https://registry.npmjs.org/extsprintf
-1915 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1915 verbose headers 'content-type': 'application/json',
-1915 verbose headers 'transfer-encoding': 'chunked',
-1915 verbose headers connection: 'keep-alive',
-1915 verbose headers 'set-cookie':
-1915 verbose headers [ '__cfduid=d97096327dc35362784756beebc4958ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1915 verbose headers 'cf-ray': '59764faa2855c2ae-FRA',
-1915 verbose headers age: '5351',
-1915 verbose headers 'cache-control': 'public, max-age=300',
-1915 verbose headers etag: 'W/"c1458bfec410835c4eaea2e0b344814b"',
-1915 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:29 GMT',
-1915 verbose headers vary: 'accept-encoding, accept',
-1915 verbose headers 'cf-cache-status': 'HIT',
-1915 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1915 verbose headers server: 'cloudflare',
-1915 verbose headers 'content-encoding': 'gzip',
-1915 verbose headers 'cf-request-id': '02ddd01e550000c2aea018c200000001' }
-1916 silly get cb [ 200,
-1916 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1916 silly get 'content-type': 'application/json',
-1916 silly get 'transfer-encoding': 'chunked',
-1916 silly get connection: 'keep-alive',
-1916 silly get 'set-cookie':
-1916 silly get [ '__cfduid=d97096327dc35362784756beebc4958ed1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1916 silly get 'cf-ray': '59764faa2855c2ae-FRA',
-1916 silly get age: '5351',
-1916 silly get 'cache-control': 'public, max-age=300',
-1916 silly get etag: 'W/"c1458bfec410835c4eaea2e0b344814b"',
-1916 silly get 'last-modified': 'Wed, 06 May 2020 14:47:29 GMT',
-1916 silly get vary: 'accept-encoding, accept',
-1916 silly get 'cf-cache-status': 'HIT',
-1916 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1916 silly get server: 'cloudflare',
-1916 silly get 'content-encoding': 'gzip',
-1916 silly get 'cf-request-id': '02ddd01e550000c2aea018c200000001' } ]
-1917 verbose get saving extsprintf to /home/christine/.npm/registry.npmjs.org/extsprintf/.cache.json
-1918 silly resolveWithNewModule extsprintf@1.3.0 checking installable status
-1919 silly cache add args [ 'extsprintf@1.3.0', null ]
-1920 verbose cache add spec extsprintf@1.3.0
-1921 silly cache add parsed spec Result {
-1921 silly cache add raw: 'extsprintf@1.3.0',
-1921 silly cache add scope: null,
-1921 silly cache add name: 'extsprintf',
-1921 silly cache add rawSpec: '1.3.0',
-1921 silly cache add spec: '1.3.0',
-1921 silly cache add type: 'version' }
-1922 silly addNamed extsprintf@1.3.0
-1923 verbose addNamed "1.3.0" is a plain semver version for extsprintf
-1924 silly mapToRegistry name extsprintf
-1925 silly mapToRegistry using default registry
-1926 silly mapToRegistry registry https://registry.npmjs.org/
-1927 silly mapToRegistry uri https://registry.npmjs.org/extsprintf
-1928 verbose addNameVersion registry:https://registry.npmjs.org/extsprintf not in flight; fetching
-1929 verbose get https://registry.npmjs.org/extsprintf not expired, no request
-1930 silly cache afterAdd extsprintf@1.3.0
-1931 verbose afterAdd /home/christine/.npm/extsprintf/1.3.0/package/package.json not in flight; writing
-1932 verbose afterAdd /home/christine/.npm/extsprintf/1.3.0/package/package.json written
-1933 http 200 https://registry.npmjs.org/verror
-1934 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1934 verbose headers 'content-type': 'application/json',
-1934 verbose headers 'transfer-encoding': 'chunked',
-1934 verbose headers connection: 'keep-alive',
-1934 verbose headers 'set-cookie':
-1934 verbose headers [ '__cfduid=dddfaf86196e34967260afba6c78f92301590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1934 verbose headers 'cf-ray': '59764faa2b02d6e9-FRA',
-1934 verbose headers age: '5351',
-1934 verbose headers 'cache-control': 'public, max-age=300',
-1934 verbose headers etag: 'W/"2464db9fac3b8d5a76540c0581baa37d"',
-1934 verbose headers 'last-modified': 'Wed, 06 May 2020 14:48:30 GMT',
-1934 verbose headers vary: 'accept-encoding, accept',
-1934 verbose headers 'cf-cache-status': 'HIT',
-1934 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1934 verbose headers server: 'cloudflare',
-1934 verbose headers 'content-encoding': 'gzip',
-1934 verbose headers 'cf-request-id': '02ddd01e550000d6e975b63200000001' }
-1935 silly get cb [ 200,
-1935 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1935 silly get 'content-type': 'application/json',
-1935 silly get 'transfer-encoding': 'chunked',
-1935 silly get connection: 'keep-alive',
-1935 silly get 'set-cookie':
-1935 silly get [ '__cfduid=dddfaf86196e34967260afba6c78f92301590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1935 silly get 'cf-ray': '59764faa2b02d6e9-FRA',
-1935 silly get age: '5351',
-1935 silly get 'cache-control': 'public, max-age=300',
-1935 silly get etag: 'W/"2464db9fac3b8d5a76540c0581baa37d"',
-1935 silly get 'last-modified': 'Wed, 06 May 2020 14:48:30 GMT',
-1935 silly get vary: 'accept-encoding, accept',
-1935 silly get 'cf-cache-status': 'HIT',
-1935 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1935 silly get server: 'cloudflare',
-1935 silly get 'content-encoding': 'gzip',
-1935 silly get 'cf-request-id': '02ddd01e550000d6e975b63200000001' } ]
-1936 verbose get saving verror to /home/christine/.npm/registry.npmjs.org/verror/.cache.json
-1937 silly resolveWithNewModule verror@1.10.0 checking installable status
-1938 silly cache add args [ 'verror@1.10.0', null ]
-1939 verbose cache add spec verror@1.10.0
-1940 silly cache add parsed spec Result {
-1940 silly cache add raw: 'verror@1.10.0',
-1940 silly cache add scope: null,
-1940 silly cache add name: 'verror',
-1940 silly cache add rawSpec: '1.10.0',
-1940 silly cache add spec: '1.10.0',
-1940 silly cache add type: 'version' }
-1941 silly addNamed verror@1.10.0
-1942 verbose addNamed "1.10.0" is a plain semver version for verror
-1943 silly mapToRegistry name verror
-1944 silly mapToRegistry using default registry
-1945 silly mapToRegistry registry https://registry.npmjs.org/
-1946 silly mapToRegistry uri https://registry.npmjs.org/verror
-1947 verbose addNameVersion registry:https://registry.npmjs.org/verror not in flight; fetching
-1948 verbose get https://registry.npmjs.org/verror not expired, no request
-1949 http 304 https://registry.npmjs.org/json-schema
-1950 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1950 verbose headers connection: 'keep-alive',
-1950 verbose headers 'set-cookie':
-1950 verbose headers [ '__cfduid=dcd1e19ee0a127106f70d3cbc3e6456db1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1950 verbose headers 'cf-ray': '59764faa2c451f2d-FRA',
-1950 verbose headers age: '5351',
-1950 verbose headers 'cache-control': 'public, max-age=300',
-1950 verbose headers etag: '"5274dd0ff41b090868548552fd39da3b"',
-1950 verbose headers 'last-modified': 'Fri, 06 Sep 2019 03:31:48 GMT',
-1950 verbose headers vary: 'Accept-Encoding',
-1950 verbose headers 'cf-cache-status': 'HIT',
-1950 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1950 verbose headers server: 'cloudflare',
-1950 verbose headers 'cf-request-id': '02ddd01e5500001f2df5221200000001' }
-1951 silly get cb [ 304,
-1951 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1951 silly get connection: 'keep-alive',
-1951 silly get 'set-cookie':
-1951 silly get [ '__cfduid=dcd1e19ee0a127106f70d3cbc3e6456db1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1951 silly get 'cf-ray': '59764faa2c451f2d-FRA',
-1951 silly get age: '5351',
-1951 silly get 'cache-control': 'public, max-age=300',
-1951 silly get etag: '"5274dd0ff41b090868548552fd39da3b"',
-1951 silly get 'last-modified': 'Fri, 06 Sep 2019 03:31:48 GMT',
-1951 silly get vary: 'Accept-Encoding',
-1951 silly get 'cf-cache-status': 'HIT',
-1951 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1951 silly get server: 'cloudflare',
-1951 silly get 'cf-request-id': '02ddd01e5500001f2df5221200000001' } ]
-1952 verbose etag https://registry.npmjs.org/json-schema from cache
-1953 verbose get saving json-schema to /home/christine/.npm/registry.npmjs.org/json-schema/.cache.json
-1954 silly cache afterAdd verror@1.10.0
-1955 verbose afterAdd /home/christine/.npm/verror/1.10.0/package/package.json not in flight; writing
-1956 silly resolveWithNewModule json-schema@0.2.3 checking installable status
-1957 silly cache add args [ 'json-schema@0.2.3', null ]
-1958 verbose cache add spec json-schema@0.2.3
-1959 silly cache add parsed spec Result {
-1959 silly cache add raw: 'json-schema@0.2.3',
-1959 silly cache add scope: null,
-1959 silly cache add name: 'json-schema',
-1959 silly cache add rawSpec: '0.2.3',
-1959 silly cache add spec: '0.2.3',
-1959 silly cache add type: 'version' }
-1960 silly addNamed json-schema@0.2.3
-1961 verbose addNamed "0.2.3" is a plain semver version for json-schema
-1962 silly mapToRegistry name json-schema
-1963 silly mapToRegistry using default registry
-1964 silly mapToRegistry registry https://registry.npmjs.org/
-1965 silly mapToRegistry uri https://registry.npmjs.org/json-schema
-1966 verbose addNameVersion registry:https://registry.npmjs.org/json-schema not in flight; fetching
-1967 verbose afterAdd /home/christine/.npm/verror/1.10.0/package/package.json written
-1968 verbose get https://registry.npmjs.org/json-schema not expired, no request
-1969 silly cache afterAdd json-schema@0.2.3
-1970 verbose afterAdd /home/christine/.npm/json-schema/0.2.3/package/package.json not in flight; writing
-1971 verbose afterAdd /home/christine/.npm/json-schema/0.2.3/package/package.json written
-1972 silly fetchNamedPackageData core-util-is
-1973 silly mapToRegistry name core-util-is
-1974 silly mapToRegistry using default registry
-1975 silly mapToRegistry registry https://registry.npmjs.org/
-1976 silly mapToRegistry uri https://registry.npmjs.org/core-util-is
-1977 verbose request uri https://registry.npmjs.org/core-util-is
-1978 verbose request no auth needed
-1979 info attempt registry request try #1 at 13:48:58
-1980 verbose etag W/"8076d16a76bac5764f6fda9911b2b501"
-1981 verbose lastModified Sat, 26 May 2018 21:08:01 GMT
-1982 http request GET https://registry.npmjs.org/core-util-is
-1983 http 304 https://registry.npmjs.org/core-util-is
-1984 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1984 verbose headers connection: 'keep-alive',
-1984 verbose headers 'set-cookie':
-1984 verbose headers [ '__cfduid=dd8c554223c8c1f8d1054bd78bd816a791590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1984 verbose headers 'cf-ray': '59764faa6c9405fd-FRA',
-1984 verbose headers age: '5358',
-1984 verbose headers 'cache-control': 'public, max-age=300',
-1984 verbose headers etag: '"8076d16a76bac5764f6fda9911b2b501"',
-1984 verbose headers 'last-modified': 'Sat, 26 May 2018 21:08:01 GMT',
-1984 verbose headers vary: 'Accept-Encoding',
-1984 verbose headers 'cf-cache-status': 'HIT',
-1984 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1984 verbose headers server: 'cloudflare',
-1984 verbose headers 'cf-request-id': '02ddd01e80000005fd8daad200000001' }
-1985 silly get cb [ 304,
-1985 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-1985 silly get connection: 'keep-alive',
-1985 silly get 'set-cookie':
-1985 silly get [ '__cfduid=dd8c554223c8c1f8d1054bd78bd816a791590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-1985 silly get 'cf-ray': '59764faa6c9405fd-FRA',
-1985 silly get age: '5358',
-1985 silly get 'cache-control': 'public, max-age=300',
-1985 silly get etag: '"8076d16a76bac5764f6fda9911b2b501"',
-1985 silly get 'last-modified': 'Sat, 26 May 2018 21:08:01 GMT',
-1985 silly get vary: 'Accept-Encoding',
-1985 silly get 'cf-cache-status': 'HIT',
-1985 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-1985 silly get server: 'cloudflare',
-1985 silly get 'cf-request-id': '02ddd01e80000005fd8daad200000001' } ]
-1986 verbose etag https://registry.npmjs.org/core-util-is from cache
-1987 verbose get saving core-util-is to /home/christine/.npm/registry.npmjs.org/core-util-is/.cache.json
-1988 silly resolveWithNewModule core-util-is@1.0.2 checking installable status
-1989 silly cache add args [ 'core-util-is@1.0.2', null ]
-1990 verbose cache add spec core-util-is@1.0.2
-1991 silly cache add parsed spec Result {
-1991 silly cache add raw: 'core-util-is@1.0.2',
-1991 silly cache add scope: null,
-1991 silly cache add name: 'core-util-is',
-1991 silly cache add rawSpec: '1.0.2',
-1991 silly cache add spec: '1.0.2',
-1991 silly cache add type: 'version' }
-1992 silly addNamed core-util-is@1.0.2
-1993 verbose addNamed "1.0.2" is a plain semver version for core-util-is
-1994 silly mapToRegistry name core-util-is
-1995 silly mapToRegistry using default registry
-1996 silly mapToRegistry registry https://registry.npmjs.org/
-1997 silly mapToRegistry uri https://registry.npmjs.org/core-util-is
-1998 verbose addNameVersion registry:https://registry.npmjs.org/core-util-is not in flight; fetching
-1999 verbose get https://registry.npmjs.org/core-util-is not expired, no request
-2000 silly cache afterAdd core-util-is@1.0.2
-2001 verbose afterAdd /home/christine/.npm/core-util-is/1.0.2/package/package.json not in flight; writing
-2002 verbose afterAdd /home/christine/.npm/core-util-is/1.0.2/package/package.json written
-2003 silly fetchNamedPackageData asn1
-2004 silly mapToRegistry name asn1
-2005 silly mapToRegistry using default registry
-2006 silly mapToRegistry registry https://registry.npmjs.org/
-2007 silly mapToRegistry uri https://registry.npmjs.org/asn1
-2008 silly fetchNamedPackageData dashdash
-2009 silly mapToRegistry name dashdash
-2010 silly mapToRegistry using default registry
-2011 silly mapToRegistry registry https://registry.npmjs.org/
-2012 silly mapToRegistry uri https://registry.npmjs.org/dashdash
-2013 silly fetchNamedPackageData getpass
-2014 silly mapToRegistry name getpass
-2015 silly mapToRegistry using default registry
-2016 silly mapToRegistry registry https://registry.npmjs.org/
-2017 silly mapToRegistry uri https://registry.npmjs.org/getpass
-2018 silly fetchNamedPackageData safer-buffer
-2019 silly mapToRegistry name safer-buffer
-2020 silly mapToRegistry using default registry
-2021 silly mapToRegistry registry https://registry.npmjs.org/
-2022 silly mapToRegistry uri https://registry.npmjs.org/safer-buffer
-2023 silly fetchNamedPackageData jsbn
-2024 silly mapToRegistry name jsbn
-2025 silly mapToRegistry using default registry
-2026 silly mapToRegistry registry https://registry.npmjs.org/
-2027 silly mapToRegistry uri https://registry.npmjs.org/jsbn
-2028 silly fetchNamedPackageData tweetnacl
-2029 silly mapToRegistry name tweetnacl
-2030 silly mapToRegistry using default registry
-2031 silly mapToRegistry registry https://registry.npmjs.org/
-2032 silly mapToRegistry uri https://registry.npmjs.org/tweetnacl
-2033 silly fetchNamedPackageData ecc-jsbn
-2034 silly mapToRegistry name ecc-jsbn
-2035 silly mapToRegistry using default registry
-2036 silly mapToRegistry registry https://registry.npmjs.org/
-2037 silly mapToRegistry uri https://registry.npmjs.org/ecc-jsbn
-2038 silly fetchNamedPackageData bcrypt-pbkdf
-2039 silly mapToRegistry name bcrypt-pbkdf
-2040 silly mapToRegistry using default registry
-2041 silly mapToRegistry registry https://registry.npmjs.org/
-2042 silly mapToRegistry uri https://registry.npmjs.org/bcrypt-pbkdf
-2043 verbose request uri https://registry.npmjs.org/asn1
-2044 verbose request no auth needed
-2045 info attempt registry request try #1 at 13:48:58
-2046 verbose etag W/"de813efa4f95d8b4547fcf05d55dc504"
-2047 verbose lastModified Fri, 13 Dec 2019 16:32:09 GMT
-2048 http request GET https://registry.npmjs.org/asn1
-2049 verbose request uri https://registry.npmjs.org/jsbn
-2050 verbose request no auth needed
-2051 info attempt registry request try #1 at 13:48:58
-2052 verbose etag W/"0611ae2a6c0b557511e766ff564197a0"
-2053 verbose lastModified Sun, 27 May 2018 05:34:52 GMT
-2054 http request GET https://registry.npmjs.org/jsbn
-2055 verbose request uri https://registry.npmjs.org/getpass
-2056 verbose request no auth needed
-2057 info attempt registry request try #1 at 13:48:58
-2058 verbose etag W/"cbefe53bd31f73e662e9120b48930d2f"
-2059 verbose lastModified Fri, 13 Dec 2019 16:32:27 GMT
-2060 http request GET https://registry.npmjs.org/getpass
-2061 verbose request uri https://registry.npmjs.org/safer-buffer
-2062 verbose request no auth needed
-2063 info attempt registry request try #1 at 13:48:58
-2064 verbose etag W/"af6bd5bd8c6f8fc6f2baa03c0e1637e9"
-2065 verbose lastModified Sun, 27 May 2018 16:29:44 GMT
-2066 http request GET https://registry.npmjs.org/safer-buffer
-2067 verbose request uri https://registry.npmjs.org/ecc-jsbn
-2068 verbose request no auth needed
-2069 info attempt registry request try #1 at 13:48:58
-2070 verbose etag W/"972b128f4c15e931ec8836237cce37e0"
-2071 verbose lastModified Sun, 29 Jul 2018 17:44:41 GMT
-2072 http request GET https://registry.npmjs.org/ecc-jsbn
-2073 verbose request uri https://registry.npmjs.org/dashdash
-2074 verbose request no auth needed
-2075 info attempt registry request try #1 at 13:48:58
-2076 verbose etag W/"4ed0f11669a0fcb66513077f2f321ea9"
-2077 verbose lastModified Sat, 26 May 2018 21:43:37 GMT
-2078 http request GET https://registry.npmjs.org/dashdash
-2079 verbose request uri https://registry.npmjs.org/tweetnacl
-2080 verbose request no auth needed
-2081 info attempt registry request try #1 at 13:48:58
-2082 verbose etag W/"fbf94e62e5226cbf0f67805b6d51d6fe"
-2083 verbose lastModified Thu, 16 Jan 2020 19:29:00 GMT
-2084 http request GET https://registry.npmjs.org/tweetnacl
-2085 verbose request uri https://registry.npmjs.org/bcrypt-pbkdf
-2086 verbose request no auth needed
-2087 info attempt registry request try #1 at 13:48:58
-2088 verbose etag W/"46ae03958b9d75cded3b6f53d3277a12"
-2089 verbose lastModified Fri, 13 Dec 2019 16:32:11 GMT
-2090 http request GET https://registry.npmjs.org/bcrypt-pbkdf
-2091 http 304 https://registry.npmjs.org/jsbn
-2092 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2092 verbose headers connection: 'keep-alive',
-2092 verbose headers 'set-cookie':
-2092 verbose headers [ '__cfduid=d7325b855bbed19ce898226d1ffb9a3291590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2092 verbose headers 'cf-ray': '59764faad8fd325c-FRA',
-2092 verbose headers age: '5657',
-2092 verbose headers 'cache-control': 'public, max-age=300',
-2092 verbose headers etag: '"0611ae2a6c0b557511e766ff564197a0"',
-2092 verbose headers 'last-modified': 'Sun, 27 May 2018 05:34:52 GMT',
-2092 verbose headers vary: 'Accept-Encoding',
-2092 verbose headers 'cf-cache-status': 'HIT',
-2092 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2092 verbose headers server: 'cloudflare',
-2092 verbose headers 'cf-request-id': '02ddd01ec40000325c4c86d200000001' }
-2093 silly get cb [ 304,
-2093 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2093 silly get connection: 'keep-alive',
-2093 silly get 'set-cookie':
-2093 silly get [ '__cfduid=d7325b855bbed19ce898226d1ffb9a3291590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2093 silly get 'cf-ray': '59764faad8fd325c-FRA',
-2093 silly get age: '5657',
-2093 silly get 'cache-control': 'public, max-age=300',
-2093 silly get etag: '"0611ae2a6c0b557511e766ff564197a0"',
-2093 silly get 'last-modified': 'Sun, 27 May 2018 05:34:52 GMT',
-2093 silly get vary: 'Accept-Encoding',
-2093 silly get 'cf-cache-status': 'HIT',
-2093 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2093 silly get server: 'cloudflare',
-2093 silly get 'cf-request-id': '02ddd01ec40000325c4c86d200000001' } ]
-2094 verbose etag https://registry.npmjs.org/jsbn from cache
-2095 verbose get saving jsbn to /home/christine/.npm/registry.npmjs.org/jsbn/.cache.json
-2096 silly resolveWithNewModule jsbn@0.1.1 checking installable status
-2097 silly cache add args [ 'jsbn@~0.1.0', null ]
-2098 verbose cache add spec jsbn@~0.1.0
-2099 silly cache add parsed spec Result {
-2099 silly cache add raw: 'jsbn@~0.1.0',
-2099 silly cache add scope: null,
-2099 silly cache add name: 'jsbn',
-2099 silly cache add rawSpec: '~0.1.0',
-2099 silly cache add spec: '>=0.1.0 <0.2.0',
-2099 silly cache add type: 'range' }
-2100 silly addNamed jsbn@>=0.1.0 <0.2.0
-2101 verbose addNamed ">=0.1.0 <0.2.0" is a valid semver range for jsbn
-2102 silly addNameRange { name: 'jsbn', range: '>=0.1.0 <0.2.0', hasData: false }
-2103 silly mapToRegistry name jsbn
-2104 silly mapToRegistry using default registry
-2105 silly mapToRegistry registry https://registry.npmjs.org/
-2106 silly mapToRegistry uri https://registry.npmjs.org/jsbn
-2107 verbose addNameRange registry:https://registry.npmjs.org/jsbn not in flight; fetching
-2108 http 304 https://registry.npmjs.org/safer-buffer
-2109 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2109 verbose headers connection: 'keep-alive',
-2109 verbose headers 'set-cookie':
-2109 verbose headers [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2109 verbose headers 'cf-ray': '59764faadb96648b-FRA',
-2109 verbose headers age: '5660',
-2109 verbose headers 'cache-control': 'public, max-age=300',
-2109 verbose headers etag: '"af6bd5bd8c6f8fc6f2baa03c0e1637e9"',
-2109 verbose headers 'last-modified': 'Sun, 27 May 2018 16:29:44 GMT',
-2109 verbose headers vary: 'Accept-Encoding',
-2109 verbose headers 'cf-cache-status': 'HIT',
-2109 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2109 verbose headers server: 'cloudflare',
-2109 verbose headers 'cf-request-id': '02ddd01ec80000648bda035200000001' }
-2110 silly get cb [ 304,
-2110 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2110 silly get connection: 'keep-alive',
-2110 silly get 'set-cookie':
-2110 silly get [ '__cfduid=d5c44467f99426bc8ed81135e17d288951590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2110 silly get 'cf-ray': '59764faadb96648b-FRA',
-2110 silly get age: '5660',
-2110 silly get 'cache-control': 'public, max-age=300',
-2110 silly get etag: '"af6bd5bd8c6f8fc6f2baa03c0e1637e9"',
-2110 silly get 'last-modified': 'Sun, 27 May 2018 16:29:44 GMT',
-2110 silly get vary: 'Accept-Encoding',
-2110 silly get 'cf-cache-status': 'HIT',
-2110 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2110 silly get server: 'cloudflare',
-2110 silly get 'cf-request-id': '02ddd01ec80000648bda035200000001' } ]
-2111 verbose etag https://registry.npmjs.org/safer-buffer from cache
-2112 verbose get saving safer-buffer to /home/christine/.npm/registry.npmjs.org/safer-buffer/.cache.json
-2113 http 200 https://registry.npmjs.org/getpass
-2114 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2114 verbose headers 'content-type': 'application/json',
-2114 verbose headers 'transfer-encoding': 'chunked',
-2114 verbose headers connection: 'keep-alive',
-2114 verbose headers 'set-cookie':
-2114 verbose headers [ '__cfduid=dd010058b9e3e0b8be866b1c539f3a13d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2114 verbose headers 'cf-ray': '59764faadf226347-FRA',
-2114 verbose headers age: '5656',
-2114 verbose headers 'cache-control': 'public, max-age=300',
-2114 verbose headers etag: 'W/"869ca13d164a27967315d623e8ce7ed7"',
-2114 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:37 GMT',
-2114 verbose headers vary: 'accept-encoding, accept',
-2114 verbose headers 'cf-cache-status': 'HIT',
-2114 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2114 verbose headers server: 'cloudflare',
-2114 verbose headers 'content-encoding': 'gzip',
-2114 verbose headers 'cf-request-id': '02ddd01ec800006347e88e6200000001' }
-2115 silly get cb [ 200,
-2115 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2115 silly get 'content-type': 'application/json',
-2115 silly get 'transfer-encoding': 'chunked',
-2115 silly get connection: 'keep-alive',
-2115 silly get 'set-cookie':
-2115 silly get [ '__cfduid=dd010058b9e3e0b8be866b1c539f3a13d1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2115 silly get 'cf-ray': '59764faadf226347-FRA',
-2115 silly get age: '5656',
-2115 silly get 'cache-control': 'public, max-age=300',
-2115 silly get etag: 'W/"869ca13d164a27967315d623e8ce7ed7"',
-2115 silly get 'last-modified': 'Wed, 06 May 2020 14:47:37 GMT',
-2115 silly get vary: 'accept-encoding, accept',
-2115 silly get 'cf-cache-status': 'HIT',
-2115 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2115 silly get server: 'cloudflare',
-2115 silly get 'content-encoding': 'gzip',
-2115 silly get 'cf-request-id': '02ddd01ec800006347e88e6200000001' } ]
-2116 verbose get saving getpass to /home/christine/.npm/registry.npmjs.org/getpass/.cache.json
-2117 http 200 https://registry.npmjs.org/bcrypt-pbkdf
-2118 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2118 verbose headers 'content-type': 'application/json',
-2118 verbose headers 'transfer-encoding': 'chunked',
-2118 verbose headers connection: 'keep-alive',
-2118 verbose headers 'set-cookie':
-2118 verbose headers [ '__cfduid=d0e932d8ab348df1bf36d2b5c827b275c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2118 verbose headers 'cf-ray': '59764faaef896413-FRA',
-2118 verbose headers age: '5653',
-2118 verbose headers 'cache-control': 'public, max-age=300',
-2118 verbose headers etag: 'W/"f08505ab6749543a27b96d63fd64d6c1"',
-2118 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT',
-2118 verbose headers vary: 'accept-encoding, accept',
-2118 verbose headers 'cf-cache-status': 'HIT',
-2118 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2118 verbose headers server: 'cloudflare',
-2118 verbose headers 'content-encoding': 'gzip',
-2118 verbose headers 'cf-request-id': '02ddd01ece000064135f93f200000001' }
-2119 silly get cb [ 200,
-2119 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2119 silly get 'content-type': 'application/json',
-2119 silly get 'transfer-encoding': 'chunked',
-2119 silly get connection: 'keep-alive',
-2119 silly get 'set-cookie':
-2119 silly get [ '__cfduid=d0e932d8ab348df1bf36d2b5c827b275c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2119 silly get 'cf-ray': '59764faaef896413-FRA',
-2119 silly get age: '5653',
-2119 silly get 'cache-control': 'public, max-age=300',
-2119 silly get etag: 'W/"f08505ab6749543a27b96d63fd64d6c1"',
-2119 silly get 'last-modified': 'Wed, 06 May 2020 14:47:21 GMT',
-2119 silly get vary: 'accept-encoding, accept',
-2119 silly get 'cf-cache-status': 'HIT',
-2119 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2119 silly get server: 'cloudflare',
-2119 silly get 'content-encoding': 'gzip',
-2119 silly get 'cf-request-id': '02ddd01ece000064135f93f200000001' } ]
-2120 verbose get saving bcrypt-pbkdf to /home/christine/.npm/registry.npmjs.org/bcrypt-pbkdf/.cache.json
-2121 http 200 https://registry.npmjs.org/asn1
-2122 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2122 verbose headers 'content-type': 'application/json',
-2122 verbose headers 'transfer-encoding': 'chunked',
-2122 verbose headers connection: 'keep-alive',
-2122 verbose headers 'set-cookie':
-2122 verbose headers [ '__cfduid=d2a12158e0b1816dc3511d38bce84223a1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2122 verbose headers 'cf-ray': '59764faadddcc272-FRA',
-2122 verbose headers age: '5652',
-2122 verbose headers 'cache-control': 'public, max-age=300',
-2122 verbose headers etag: 'W/"53988a6250256bd0f9e9b253aaf39e0b"',
-2122 verbose headers 'last-modified': 'Wed, 06 May 2020 14:47:19 GMT',
-2122 verbose headers vary: 'accept-encoding, accept',
-2122 verbose headers 'cf-cache-status': 'HIT',
-2122 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2122 verbose headers server: 'cloudflare',
-2122 verbose headers 'content-encoding': 'gzip',
-2122 verbose headers 'cf-request-id': '02ddd01ec40000c272388f9200000001' }
-2123 silly get cb [ 200,
-2123 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2123 silly get 'content-type': 'application/json',
-2123 silly get 'transfer-encoding': 'chunked',
-2123 silly get connection: 'keep-alive',
-2123 silly get 'set-cookie':
-2123 silly get [ '__cfduid=d2a12158e0b1816dc3511d38bce84223a1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2123 silly get 'cf-ray': '59764faadddcc272-FRA',
-2123 silly get age: '5652',
-2123 silly get 'cache-control': 'public, max-age=300',
-2123 silly get etag: 'W/"53988a6250256bd0f9e9b253aaf39e0b"',
-2123 silly get 'last-modified': 'Wed, 06 May 2020 14:47:19 GMT',
-2123 silly get vary: 'accept-encoding, accept',
-2123 silly get 'cf-cache-status': 'HIT',
-2123 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2123 silly get server: 'cloudflare',
-2123 silly get 'content-encoding': 'gzip',
-2123 silly get 'cf-request-id': '02ddd01ec40000c272388f9200000001' } ]
-2124 verbose get saving asn1 to /home/christine/.npm/registry.npmjs.org/asn1/.cache.json
-2125 verbose get https://registry.npmjs.org/jsbn not expired, no request
-2126 silly addNameRange number 2 { name: 'jsbn', range: '>=0.1.0 <0.2.0', hasData: true }
-2127 silly addNameRange versions [ 'jsbn', [ '0.0.0', '0.1.0', '0.1.1', '1.1.0' ] ]
-2128 silly addNamed jsbn@0.1.1
-2129 verbose addNamed "0.1.1" is a plain semver version for jsbn
-2130 http 304 https://registry.npmjs.org/dashdash
-2131 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2131 verbose headers connection: 'keep-alive',
-2131 verbose headers 'set-cookie':
-2131 verbose headers [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2131 verbose headers 'cf-ray': '59764faaeb21175a-FRA',
-2131 verbose headers age: '5350',
-2131 verbose headers 'cache-control': 'public, max-age=300',
-2131 verbose headers etag: '"4ed0f11669a0fcb66513077f2f321ea9"',
-2131 verbose headers 'last-modified': 'Sat, 26 May 2018 21:43:37 GMT',
-2131 verbose headers vary: 'Accept-Encoding',
-2131 verbose headers 'cf-cache-status': 'HIT',
-2131 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2131 verbose headers server: 'cloudflare',
-2131 verbose headers 'cf-request-id': '02ddd01ece0000175a1e236200000001' }
-2132 silly get cb [ 304,
-2132 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2132 silly get connection: 'keep-alive',
-2132 silly get 'set-cookie':
-2132 silly get [ '__cfduid=d4522c061ac7d1a53e179487bb5d818481590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2132 silly get 'cf-ray': '59764faaeb21175a-FRA',
-2132 silly get age: '5350',
-2132 silly get 'cache-control': 'public, max-age=300',
-2132 silly get etag: '"4ed0f11669a0fcb66513077f2f321ea9"',
-2132 silly get 'last-modified': 'Sat, 26 May 2018 21:43:37 GMT',
-2132 silly get vary: 'Accept-Encoding',
-2132 silly get 'cf-cache-status': 'HIT',
-2132 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2132 silly get server: 'cloudflare',
-2132 silly get 'cf-request-id': '02ddd01ece0000175a1e236200000001' } ]
-2133 verbose etag https://registry.npmjs.org/dashdash from cache
-2134 verbose get saving dashdash to /home/christine/.npm/registry.npmjs.org/dashdash/.cache.json
-2135 silly resolveWithNewModule safer-buffer@2.1.2 checking installable status
-2136 silly cache add args [ 'safer-buffer@^2.0.2', null ]
-2137 verbose cache add spec safer-buffer@^2.0.2
-2138 silly cache add parsed spec Result {
-2138 silly cache add raw: 'safer-buffer@^2.0.2',
-2138 silly cache add scope: null,
-2138 silly cache add name: 'safer-buffer',
-2138 silly cache add rawSpec: '^2.0.2',
-2138 silly cache add spec: '>=2.0.2 <3.0.0',
-2138 silly cache add type: 'range' }
-2139 silly addNamed safer-buffer@>=2.0.2 <3.0.0
-2140 verbose addNamed ">=2.0.2 <3.0.0" is a valid semver range for safer-buffer
-2141 silly addNameRange { name: 'safer-buffer', range: '>=2.0.2 <3.0.0', hasData: false }
-2142 silly mapToRegistry name safer-buffer
-2143 silly mapToRegistry using default registry
-2144 silly mapToRegistry registry https://registry.npmjs.org/
-2145 silly mapToRegistry uri https://registry.npmjs.org/safer-buffer
-2146 verbose addNameRange registry:https://registry.npmjs.org/safer-buffer not in flight; fetching
-2147 silly resolveWithNewModule getpass@0.1.7 checking installable status
-2148 silly cache add args [ 'getpass@^0.1.1', null ]
-2149 verbose cache add spec getpass@^0.1.1
-2150 silly cache add parsed spec Result {
-2150 silly cache add raw: 'getpass@^0.1.1',
-2150 silly cache add scope: null,
-2150 silly cache add name: 'getpass',
-2150 silly cache add rawSpec: '^0.1.1',
-2150 silly cache add spec: '>=0.1.1 <0.2.0',
-2150 silly cache add type: 'range' }
-2151 silly addNamed getpass@>=0.1.1 <0.2.0
-2152 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for getpass
-2153 silly addNameRange { name: 'getpass', range: '>=0.1.1 <0.2.0', hasData: false }
-2154 silly mapToRegistry name getpass
-2155 silly mapToRegistry using default registry
-2156 silly mapToRegistry registry https://registry.npmjs.org/
-2157 silly mapToRegistry uri https://registry.npmjs.org/getpass
-2158 verbose addNameRange registry:https://registry.npmjs.org/getpass not in flight; fetching
-2159 silly resolveWithNewModule bcrypt-pbkdf@1.0.2 checking installable status
-2160 silly cache add args [ 'bcrypt-pbkdf@^1.0.0', null ]
-2161 verbose cache add spec bcrypt-pbkdf@^1.0.0
-2162 silly cache add parsed spec Result {
-2162 silly cache add raw: 'bcrypt-pbkdf@^1.0.0',
-2162 silly cache add scope: null,
-2162 silly cache add name: 'bcrypt-pbkdf',
-2162 silly cache add rawSpec: '^1.0.0',
-2162 silly cache add spec: '>=1.0.0 <2.0.0',
-2162 silly cache add type: 'range' }
-2163 silly addNamed bcrypt-pbkdf@>=1.0.0 <2.0.0
-2164 verbose addNamed ">=1.0.0 <2.0.0" is a valid semver range for bcrypt-pbkdf
-2165 silly addNameRange { name: 'bcrypt-pbkdf', range: '>=1.0.0 <2.0.0', hasData: false }
-2166 silly mapToRegistry name bcrypt-pbkdf
-2167 silly mapToRegistry using default registry
-2168 silly mapToRegistry registry https://registry.npmjs.org/
-2169 silly mapToRegistry uri https://registry.npmjs.org/bcrypt-pbkdf
-2170 verbose addNameRange registry:https://registry.npmjs.org/bcrypt-pbkdf not in flight; fetching
-2171 silly cache afterAdd jsbn@0.1.1
-2172 verbose afterAdd /home/christine/.npm/jsbn/0.1.1/package/package.json not in flight; writing
-2173 silly resolveWithNewModule asn1@0.2.4 checking installable status
-2174 silly cache add args [ 'asn1@~0.2.3', null ]
-2175 verbose cache add spec asn1@~0.2.3
-2176 silly cache add parsed spec Result {
-2176 silly cache add raw: 'asn1@~0.2.3',
-2176 silly cache add scope: null,
-2176 silly cache add name: 'asn1',
-2176 silly cache add rawSpec: '~0.2.3',
-2176 silly cache add spec: '>=0.2.3 <0.3.0',
-2176 silly cache add type: 'range' }
-2177 silly addNamed asn1@>=0.2.3 <0.3.0
-2178 verbose addNamed ">=0.2.3 <0.3.0" is a valid semver range for asn1
-2179 silly addNameRange { name: 'asn1', range: '>=0.2.3 <0.3.0', hasData: false }
-2180 silly mapToRegistry name asn1
-2181 silly mapToRegistry using default registry
-2182 silly mapToRegistry registry https://registry.npmjs.org/
-2183 silly mapToRegistry uri https://registry.npmjs.org/asn1
-2184 verbose addNameRange registry:https://registry.npmjs.org/asn1 not in flight; fetching
-2185 silly resolveWithNewModule dashdash@1.14.1 checking installable status
-2186 silly cache add args [ 'dashdash@^1.12.0', null ]
-2187 verbose cache add spec dashdash@^1.12.0
-2188 silly cache add parsed spec Result {
-2188 silly cache add raw: 'dashdash@^1.12.0',
-2188 silly cache add scope: null,
-2188 silly cache add name: 'dashdash',
-2188 silly cache add rawSpec: '^1.12.0',
-2188 silly cache add spec: '>=1.12.0 <2.0.0',
-2188 silly cache add type: 'range' }
-2189 silly addNamed dashdash@>=1.12.0 <2.0.0
-2190 verbose addNamed ">=1.12.0 <2.0.0" is a valid semver range for dashdash
-2191 silly addNameRange { name: 'dashdash', range: '>=1.12.0 <2.0.0', hasData: false }
-2192 silly mapToRegistry name dashdash
-2193 silly mapToRegistry using default registry
-2194 silly mapToRegistry registry https://registry.npmjs.org/
-2195 silly mapToRegistry uri https://registry.npmjs.org/dashdash
-2196 verbose addNameRange registry:https://registry.npmjs.org/dashdash not in flight; fetching
-2197 http 200 https://registry.npmjs.org/tweetnacl
-2198 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2198 verbose headers 'content-type': 'application/json',
-2198 verbose headers 'transfer-encoding': 'chunked',
-2198 verbose headers connection: 'keep-alive',
-2198 verbose headers 'set-cookie':
-2198 verbose headers [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2198 verbose headers 'cf-ray': '59764faae943d715-FRA',
-2198 verbose headers age: '5653',
-2198 verbose headers 'cache-control': 'public, max-age=300',
-2198 verbose headers etag: 'W/"1b4cf5c8f09886b489d11782a23a9cbf"',
-2198 verbose headers 'last-modified': 'Sat, 09 May 2020 13:43:32 GMT',
-2198 verbose headers vary: 'accept-encoding, accept',
-2198 verbose headers 'cf-cache-status': 'HIT',
-2198 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2198 verbose headers server: 'cloudflare',
-2198 verbose headers 'content-encoding': 'gzip',
-2198 verbose headers 'cf-request-id': '02ddd01ecf0000d715c122c200000001' }
-2199 silly get cb [ 200,
-2199 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2199 silly get 'content-type': 'application/json',
-2199 silly get 'transfer-encoding': 'chunked',
-2199 silly get connection: 'keep-alive',
-2199 silly get 'set-cookie':
-2199 silly get [ '__cfduid=da40e9f27d1dea0fa61ff6ca4322cb73c1590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2199 silly get 'cf-ray': '59764faae943d715-FRA',
-2199 silly get age: '5653',
-2199 silly get 'cache-control': 'public, max-age=300',
-2199 silly get etag: 'W/"1b4cf5c8f09886b489d11782a23a9cbf"',
-2199 silly get 'last-modified': 'Sat, 09 May 2020 13:43:32 GMT',
-2199 silly get vary: 'accept-encoding, accept',
-2199 silly get 'cf-cache-status': 'HIT',
-2199 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2199 silly get server: 'cloudflare',
-2199 silly get 'content-encoding': 'gzip',
-2199 silly get 'cf-request-id': '02ddd01ecf0000d715c122c200000001' } ]
-2200 verbose get saving tweetnacl to /home/christine/.npm/registry.npmjs.org/tweetnacl/.cache.json
-2201 verbose get https://registry.npmjs.org/safer-buffer not expired, no request
-2202 silly addNameRange number 2 { name: 'safer-buffer', range: '>=2.0.2 <3.0.0', hasData: true }
-2203 silly addNameRange versions [ 'safer-buffer',
-2203 silly addNameRange [ '2.0.0', '2.0.1', '2.0.2', '2.1.0', '2.1.1', '2.1.2' ] ]
-2204 silly addNamed safer-buffer@2.1.2
-2205 verbose addNamed "2.1.2" is a plain semver version for safer-buffer
-2206 verbose get https://registry.npmjs.org/getpass not expired, no request
-2207 silly addNameRange number 2 { name: 'getpass', range: '>=0.1.1 <0.2.0', hasData: true }
-2208 silly addNameRange versions [ 'getpass',
-2208 silly addNameRange [ '0.1.0',
-2208 silly addNameRange '0.1.1',
-2208 silly addNameRange '0.1.2',
-2208 silly addNameRange '0.1.3',
-2208 silly addNameRange '0.1.4',
-2208 silly addNameRange '0.1.5',
-2208 silly addNameRange '0.1.6',
-2208 silly addNameRange '0.1.7' ] ]
-2209 silly addNamed getpass@0.1.7
-2210 verbose addNamed "0.1.7" is a plain semver version for getpass
-2211 verbose get https://registry.npmjs.org/bcrypt-pbkdf not expired, no request
-2212 silly addNameRange number 2 { name: 'bcrypt-pbkdf', range: '>=1.0.0 <2.0.0', hasData: true }
-2213 silly addNameRange versions [ 'bcrypt-pbkdf', [ '1.0.0', '1.0.1', '1.0.2' ] ]
-2214 silly addNamed bcrypt-pbkdf@1.0.2
-2215 verbose addNamed "1.0.2" is a plain semver version for bcrypt-pbkdf
-2216 verbose get https://registry.npmjs.org/asn1 not expired, no request
-2217 silly addNameRange number 2 { name: 'asn1', range: '>=0.2.3 <0.3.0', hasData: true }
-2218 silly addNameRange versions [ 'asn1',
-2218 silly addNameRange [ '0.1.0',
-2218 silly addNameRange '0.1.1',
-2218 silly addNameRange '0.1.2',
-2218 silly addNameRange '0.1.3',
-2218 silly addNameRange '0.1.4',
-2218 silly addNameRange '0.1.5',
-2218 silly addNameRange '0.1.6',
-2218 silly addNameRange '0.1.7',
-2218 silly addNameRange '0.1.8',
-2218 silly addNameRange '0.1.9',
-2218 silly addNameRange '0.1.10',
-2218 silly addNameRange '0.1.11',
-2218 silly addNameRange '0.2.0',
-2218 silly addNameRange '0.2.1',
-2218 silly addNameRange '0.2.2',
-2218 silly addNameRange '0.2.3',
-2218 silly addNameRange '0.2.4' ] ]
-2219 silly addNamed asn1@0.2.4
-2220 verbose addNamed "0.2.4" is a plain semver version for asn1
-2221 verbose afterAdd /home/christine/.npm/jsbn/0.1.1/package/package.json written
-2222 http 304 https://registry.npmjs.org/ecc-jsbn
-2223 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2223 verbose headers connection: 'keep-alive',
-2223 verbose headers 'set-cookie':
-2223 verbose headers [ '__cfduid=d3be9a0b80d7155f3e9da29972b7410c41590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2223 verbose headers 'cf-ray': '59764faaec18dfc7-FRA',
-2223 verbose headers age: '5653',
-2223 verbose headers 'cache-control': 'public, max-age=300',
-2223 verbose headers etag: '"972b128f4c15e931ec8836237cce37e0"',
-2223 verbose headers 'last-modified': 'Sun, 29 Jul 2018 17:44:41 GMT',
-2223 verbose headers vary: 'Accept-Encoding',
-2223 verbose headers 'cf-cache-status': 'HIT',
-2223 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2223 verbose headers server: 'cloudflare',
-2223 verbose headers 'cf-request-id': '02ddd01ece0000dfc72a8d3200000001' }
-2224 silly get cb [ 304,
-2224 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2224 silly get connection: 'keep-alive',
-2224 silly get 'set-cookie':
-2224 silly get [ '__cfduid=d3be9a0b80d7155f3e9da29972b7410c41590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2224 silly get 'cf-ray': '59764faaec18dfc7-FRA',
-2224 silly get age: '5653',
-2224 silly get 'cache-control': 'public, max-age=300',
-2224 silly get etag: '"972b128f4c15e931ec8836237cce37e0"',
-2224 silly get 'last-modified': 'Sun, 29 Jul 2018 17:44:41 GMT',
-2224 silly get vary: 'Accept-Encoding',
-2224 silly get 'cf-cache-status': 'HIT',
-2224 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2224 silly get server: 'cloudflare',
-2224 silly get 'cf-request-id': '02ddd01ece0000dfc72a8d3200000001' } ]
-2225 verbose etag https://registry.npmjs.org/ecc-jsbn from cache
-2226 verbose get saving ecc-jsbn to /home/christine/.npm/registry.npmjs.org/ecc-jsbn/.cache.json
-2227 verbose get https://registry.npmjs.org/dashdash not expired, no request
-2228 silly addNameRange number 2 { name: 'dashdash', range: '>=1.12.0 <2.0.0', hasData: true }
-2229 silly addNameRange versions [ 'dashdash',
-2229 silly addNameRange [ '1.0.0',
-2229 silly addNameRange '1.0.1',
-2229 silly addNameRange '1.0.2',
-2229 silly addNameRange '1.1.0',
-2229 silly addNameRange '1.2.0',
-2229 silly addNameRange '1.2.1',
-2229 silly addNameRange '1.3.0',
-2229 silly addNameRange '1.3.1',
-2229 silly addNameRange '1.3.2',
-2229 silly addNameRange '1.4.0',
-2229 silly addNameRange '1.5.0',
-2229 silly addNameRange '1.6.0',
-2229 silly addNameRange '1.7.0',
-2229 silly addNameRange '1.7.1',
-2229 silly addNameRange '1.7.2',
-2229 silly addNameRange '1.7.3',
-2229 silly addNameRange '1.8.0',
-2229 silly addNameRange '1.9.0',
-2229 silly addNameRange '1.10.0',
-2229 silly addNameRange '1.10.1',
-2229 silly addNameRange '1.11.0',
-2229 silly addNameRange '1.12.0',
-2229 silly addNameRange '1.12.1',
-2229 silly addNameRange '1.12.2',
-2229 silly addNameRange '1.13.0',
-2229 silly addNameRange '1.13.1',
-2229 silly addNameRange '1.14.0',
-2229 silly addNameRange '1.14.1' ] ]
-2230 silly addNamed dashdash@1.14.1
-2231 verbose addNamed "1.14.1" is a plain semver version for dashdash
-2232 silly cache afterAdd safer-buffer@2.1.2
-2233 verbose afterAdd /home/christine/.npm/safer-buffer/2.1.2/package/package.json not in flight; writing
-2234 silly resolveWithNewModule tweetnacl@0.14.5 checking installable status
-2235 silly cache add args [ 'tweetnacl@~0.14.0', null ]
-2236 verbose cache add spec tweetnacl@~0.14.0
-2237 silly cache add parsed spec Result {
-2237 silly cache add raw: 'tweetnacl@~0.14.0',
-2237 silly cache add scope: null,
-2237 silly cache add name: 'tweetnacl',
-2237 silly cache add rawSpec: '~0.14.0',
-2237 silly cache add spec: '>=0.14.0 <0.15.0',
-2237 silly cache add type: 'range' }
-2238 silly addNamed tweetnacl@>=0.14.0 <0.15.0
-2239 verbose addNamed ">=0.14.0 <0.15.0" is a valid semver range for tweetnacl
-2240 silly addNameRange { name: 'tweetnacl', range: '>=0.14.0 <0.15.0', hasData: false }
-2241 silly mapToRegistry name tweetnacl
-2242 silly mapToRegistry using default registry
-2243 silly mapToRegistry registry https://registry.npmjs.org/
-2244 silly mapToRegistry uri https://registry.npmjs.org/tweetnacl
-2245 verbose addNameRange registry:https://registry.npmjs.org/tweetnacl not in flight; fetching
-2246 silly cache afterAdd getpass@0.1.7
-2247 verbose afterAdd /home/christine/.npm/getpass/0.1.7/package/package.json not in flight; writing
-2248 silly cache afterAdd asn1@0.2.4
-2249 verbose afterAdd /home/christine/.npm/asn1/0.2.4/package/package.json not in flight; writing
-2250 silly cache afterAdd bcrypt-pbkdf@1.0.2
-2251 verbose afterAdd /home/christine/.npm/bcrypt-pbkdf/1.0.2/package/package.json not in flight; writing
-2252 silly resolveWithNewModule ecc-jsbn@0.1.2 checking installable status
-2253 silly cache add args [ 'ecc-jsbn@~0.1.1', null ]
-2254 verbose cache add spec ecc-jsbn@~0.1.1
-2255 silly cache add parsed spec Result {
-2255 silly cache add raw: 'ecc-jsbn@~0.1.1',
-2255 silly cache add scope: null,
-2255 silly cache add name: 'ecc-jsbn',
-2255 silly cache add rawSpec: '~0.1.1',
-2255 silly cache add spec: '>=0.1.1 <0.2.0',
-2255 silly cache add type: 'range' }
-2256 silly addNamed ecc-jsbn@>=0.1.1 <0.2.0
-2257 verbose addNamed ">=0.1.1 <0.2.0" is a valid semver range for ecc-jsbn
-2258 silly addNameRange { name: 'ecc-jsbn', range: '>=0.1.1 <0.2.0', hasData: false }
-2259 silly mapToRegistry name ecc-jsbn
-2260 silly mapToRegistry using default registry
-2261 silly mapToRegistry registry https://registry.npmjs.org/
-2262 silly mapToRegistry uri https://registry.npmjs.org/ecc-jsbn
-2263 verbose addNameRange registry:https://registry.npmjs.org/ecc-jsbn not in flight; fetching
-2264 silly cache afterAdd dashdash@1.14.1
-2265 verbose afterAdd /home/christine/.npm/dashdash/1.14.1/package/package.json not in flight; writing
-2266 verbose afterAdd /home/christine/.npm/safer-buffer/2.1.2/package/package.json written
-2267 verbose get https://registry.npmjs.org/tweetnacl not expired, no request
-2268 silly addNameRange number 2 { name: 'tweetnacl', range: '>=0.14.0 <0.15.0', hasData: true }
-2269 silly addNameRange versions [ 'tweetnacl',
-2269 silly addNameRange [ '0.9.1',
-2269 silly addNameRange '0.9.2',
-2269 silly addNameRange '0.10.0',
-2269 silly addNameRange '0.10.1',
-2269 silly addNameRange '0.11.0',
-2269 silly addNameRange '0.11.1',
-2269 silly addNameRange '0.11.2',
-2269 silly addNameRange '0.12.0',
-2269 silly addNameRange '0.12.1',
-2269 silly addNameRange '0.12.2',
-2269 silly addNameRange '0.13.0',
-2269 silly addNameRange '0.13.1',
-2269 silly addNameRange '0.13.2',
-2269 silly addNameRange '0.13.3',
-2269 silly addNameRange '0.14.0',
-2269 silly addNameRange '0.14.1',
-2269 silly addNameRange '0.14.2',
-2269 silly addNameRange '0.14.3',
-2269 silly addNameRange '0.14.4',
-2269 silly addNameRange '0.14.5',
-2269 silly addNameRange '1.0.0-rc.1',
-2269 silly addNameRange '1.0.0',
-2269 silly addNameRange '1.0.1',
-2269 silly addNameRange '1.0.2',
-2269 silly addNameRange '1.0.3' ] ]
-2270 silly addNamed tweetnacl@0.14.5
-2271 verbose addNamed "0.14.5" is a plain semver version for tweetnacl
-2272 verbose afterAdd /home/christine/.npm/getpass/0.1.7/package/package.json written
-2273 verbose afterAdd /home/christine/.npm/asn1/0.2.4/package/package.json written
-2274 verbose afterAdd /home/christine/.npm/bcrypt-pbkdf/1.0.2/package/package.json written
-2275 verbose get https://registry.npmjs.org/ecc-jsbn not expired, no request
-2276 silly addNameRange number 2 { name: 'ecc-jsbn', range: '>=0.1.1 <0.2.0', hasData: true }
-2277 silly addNameRange versions [ 'ecc-jsbn', [ '0.0.1', '0.1.1', '0.1.2', '0.2.0' ] ]
-2278 silly addNamed ecc-jsbn@0.1.2
-2279 verbose addNamed "0.1.2" is a plain semver version for ecc-jsbn
-2280 verbose afterAdd /home/christine/.npm/dashdash/1.14.1/package/package.json written
-2281 silly cache afterAdd tweetnacl@0.14.5
-2282 verbose afterAdd /home/christine/.npm/tweetnacl/0.14.5/package/package.json not in flight; writing
-2283 silly cache afterAdd ecc-jsbn@0.1.2
-2284 verbose afterAdd /home/christine/.npm/ecc-jsbn/0.1.2/package/package.json not in flight; writing
-2285 verbose afterAdd /home/christine/.npm/tweetnacl/0.14.5/package/package.json written
-2286 verbose afterAdd /home/christine/.npm/ecc-jsbn/0.1.2/package/package.json written
-2287 silly fetchNamedPackageData psl
-2288 silly mapToRegistry name psl
-2289 silly mapToRegistry using default registry
-2290 silly mapToRegistry registry https://registry.npmjs.org/
-2291 silly mapToRegistry uri https://registry.npmjs.org/psl
-2292 verbose request uri https://registry.npmjs.org/psl
-2293 verbose request no auth needed
-2294 info attempt registry request try #1 at 13:48:58
-2295 verbose etag W/"101ba2d632d4780d2de3d351ee1405be"
-2296 verbose lastModified Sat, 28 Dec 2019 13:07:08 GMT
-2297 http request GET https://registry.npmjs.org/psl
-2298 http 200 https://registry.npmjs.org/psl
-2299 verbose headers { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2299 verbose headers 'content-type': 'application/json',
-2299 verbose headers 'transfer-encoding': 'chunked',
-2299 verbose headers connection: 'keep-alive',
-2299 verbose headers 'set-cookie':
-2299 verbose headers [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2299 verbose headers 'cf-ray': '59764fab685905bb-FRA',
-2299 verbose headers age: '5659',
-2299 verbose headers 'cache-control': 'public, max-age=300',
-2299 verbose headers etag: 'W/"da7a245ac77d8bce14f4297f73f7e4b3"',
-2299 verbose headers 'last-modified': 'Wed, 25 Mar 2020 13:29:16 GMT',
-2299 verbose headers vary: 'accept-encoding, accept',
-2299 verbose headers 'cf-cache-status': 'HIT',
-2299 verbose headers 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2299 verbose headers server: 'cloudflare',
-2299 verbose headers 'content-encoding': 'gzip',
-2299 verbose headers 'cf-request-id': '02ddd01f1d000005bb0cac0200000001' }
-2300 silly get cb [ 200,
-2300 silly get { date: 'Fri, 22 May 2020 11:48:58 GMT',
-2300 silly get 'content-type': 'application/json',
-2300 silly get 'transfer-encoding': 'chunked',
-2300 silly get connection: 'keep-alive',
-2300 silly get 'set-cookie':
-2300 silly get [ '__cfduid=dde7af43ea1a3381d8e635d144d452f041590148138; expires=Sun, 21-Jun-20 11:48:58 GMT; path=/; domain=.npmjs.org; HttpOnly; SameSite=Lax' ],
-2300 silly get 'cf-ray': '59764fab685905bb-FRA',
-2300 silly get age: '5659',
-2300 silly get 'cache-control': 'public, max-age=300',
-2300 silly get etag: 'W/"da7a245ac77d8bce14f4297f73f7e4b3"',
-2300 silly get 'last-modified': 'Wed, 25 Mar 2020 13:29:16 GMT',
-2300 silly get vary: 'accept-encoding, accept',
-2300 silly get 'cf-cache-status': 'HIT',
-2300 silly get 'expect-ct': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"',
-2300 silly get server: 'cloudflare',
-2300 silly get 'content-encoding': 'gzip',
-2300 silly get 'cf-request-id': '02ddd01f1d000005bb0cac0200000001' } ]
-2301 verbose get saving psl to /home/christine/.npm/registry.npmjs.org/psl/.cache.json
-2302 silly resolveWithNewModule psl@1.8.0 checking installable status
-2303 silly cache add args [ 'psl@^1.1.28', null ]
-2304 verbose cache add spec psl@^1.1.28
-2305 silly cache add parsed spec Result {
-2305 silly cache add raw: 'psl@^1.1.28',
-2305 silly cache add scope: null,
-2305 silly cache add name: 'psl',
-2305 silly cache add rawSpec: '^1.1.28',
-2305 silly cache add spec: '>=1.1.28 <2.0.0',
-2305 silly cache add type: 'range' }
-2306 silly addNamed psl@>=1.1.28 <2.0.0
-2307 verbose addNamed ">=1.1.28 <2.0.0" is a valid semver range for psl
-2308 silly addNameRange { name: 'psl', range: '>=1.1.28 <2.0.0', hasData: false }
-2309 silly mapToRegistry name psl
-2310 silly mapToRegistry using default registry
-2311 silly mapToRegistry registry https://registry.npmjs.org/
-2312 silly mapToRegistry uri https://registry.npmjs.org/psl
-2313 verbose addNameRange registry:https://registry.npmjs.org/psl not in flight; fetching
-2314 verbose get https://registry.npmjs.org/psl not expired, no request
-2315 silly addNameRange number 2 { name: 'psl', range: '>=1.1.28 <2.0.0', hasData: true }
-2316 silly addNameRange versions [ 'psl',
-2316 silly addNameRange [ '1.0.0',
-2316 silly addNameRange '1.0.1',
-2316 silly addNameRange '1.0.2',
-2316 silly addNameRange '1.1.0',
-2316 silly addNameRange '1.1.1',
-2316 silly addNameRange '1.1.2',
-2316 silly addNameRange '1.1.3',
-2316 silly addNameRange '1.1.4',
-2316 silly addNameRange '1.1.5',
-2316 silly addNameRange '1.1.6',
-2316 silly addNameRange '1.1.7',
-2316 silly addNameRange '1.1.8',
-2316 silly addNameRange '1.1.9',
-2316 silly addNameRange '1.1.10',
-2316 silly addNameRange '1.1.11',
-2316 silly addNameRange '1.1.12',
-2316 silly addNameRange '1.1.13',
-2316 silly addNameRange '1.1.14',
-2316 silly addNameRange '1.1.15',
-2316 silly addNameRange '1.1.16',
-2316 silly addNameRange '1.1.17',
-2316 silly addNameRange '1.1.18',
-2316 silly addNameRange '1.1.19',
-2316 silly addNameRange '1.1.20',
-2316 silly addNameRange '1.1.21',
-2316 silly addNameRange '1.1.22',
-2316 silly addNameRange '1.1.23',
-2316 silly addNameRange '1.1.24',
-2316 silly addNameRange '1.1.25',
-2316 silly addNameRange '1.1.26',
-2316 silly addNameRange '1.1.27',
-2316 silly addNameRange '1.1.28',
-2316 silly addNameRange '1.1.29',
-2316 silly addNameRange '1.1.30',
-2316 silly addNameRange '1.1.31',
-2316 silly addNameRange '1.1.32',
-2316 silly addNameRange '1.1.33',
-2316 silly addNameRange '1.2.0',
-2316 silly addNameRange '1.3.0',
-2316 silly addNameRange '1.3.1',
-2316 silly addNameRange '1.4.0',
-2316 silly addNameRange '1.5.0',
-2316 silly addNameRange '1.6.0',
-2316 silly addNameRange '1.7.0',
-2316 silly addNameRange '1.8.0' ] ]
-2317 silly addNamed psl@1.8.0
-2318 verbose addNamed "1.8.0" is a plain semver version for psl
-2319 silly mapToRegistry name psl
-2320 silly mapToRegistry using default registry
-2321 silly mapToRegistry registry https://registry.npmjs.org/
-2322 silly mapToRegistry uri https://registry.npmjs.org/psl
-2323 verbose addRemoteTarball https://registry.npmjs.org/psl/-/psl-1.8.0.tgz not in flight; adding
-2324 verbose addRemoteTarball [ 'https://registry.npmjs.org/psl/-/psl-1.8.0.tgz',
-2324 verbose addRemoteTarball '9326f8bcfb013adcc005fdff056acce020e51c24' ]
-2325 info retry fetch attempt 1 at 13:48:58
-2326 info attempt registry request try #1 at 13:48:58
-2327 http fetch GET https://registry.npmjs.org/psl/-/psl-1.8.0.tgz
-2328 http fetch 200 https://registry.npmjs.org/psl/-/psl-1.8.0.tgz
-2329 silly fetchAndShaCheck shasum 9326f8bcfb013adcc005fdff056acce020e51c24
-2330 verbose addTmpTarball /tmp/npm-5369-43d945e1/registry.npmjs.org/psl/-/psl-1.8.0.tgz not in flight; adding
-2331 verbose addTmpTarball already have metadata; skipping unpack for psl@1.8.0
-2332 silly cache afterAdd psl@1.8.0
-2333 verbose afterAdd /home/christine/.npm/psl/1.8.0/package/package.json not in flight; writing
-2334 verbose afterAdd /home/christine/.npm/psl/1.8.0/package/package.json written
-2335 silly loadAllDepsIntoIdealTree Finishing
-2336 silly idealTree:prePrune lib
-2336 silly idealTree:prePrune └─┬ less@3.11.1
-2336 silly idealTree:prePrune ├── ajv@6.12.2
-2336 silly idealTree:prePrune ├── asap@2.0.6
-2336 silly idealTree:prePrune ├── asn1@0.2.4
-2336 silly idealTree:prePrune ├── assert-plus@1.0.0
-2336 silly idealTree:prePrune ├── asynckit@0.4.0
-2336 silly idealTree:prePrune ├── aws-sign2@0.7.0
-2336 silly idealTree:prePrune ├── aws4@1.9.1
-2336 silly idealTree:prePrune ├── bcrypt-pbkdf@1.0.2
-2336 silly idealTree:prePrune ├── caseless@0.12.0
-2336 silly idealTree:prePrune ├── clone@2.1.2
-2336 silly idealTree:prePrune ├── combined-stream@1.0.8
-2336 silly idealTree:prePrune ├── core-util-is@1.0.2
-2336 silly idealTree:prePrune ├── dashdash@1.14.1
-2336 silly idealTree:prePrune ├── delayed-stream@1.0.0
-2336 silly idealTree:prePrune ├── ecc-jsbn@0.1.2
-2336 silly idealTree:prePrune ├── errno@0.1.7
-2336 silly idealTree:prePrune ├── extend@3.0.2
-2336 silly idealTree:prePrune ├── extsprintf@1.3.0
-2336 silly idealTree:prePrune ├── fast-deep-equal@3.1.1
-2336 silly idealTree:prePrune ├── fast-json-stable-stringify@2.1.0
-2336 silly idealTree:prePrune ├── forever-agent@0.6.1
-2336 silly idealTree:prePrune ├── form-data@2.3.3
-2336 silly idealTree:prePrune ├── getpass@0.1.7
-2336 silly idealTree:prePrune ├── graceful-fs@4.2.4
-2336 silly idealTree:prePrune ├── har-schema@2.0.0
-2336 silly idealTree:prePrune ├── har-validator@5.1.3
-2336 silly idealTree:prePrune ├── http-signature@1.2.0
-2336 silly idealTree:prePrune ├── image-size@0.5.5
-2336 silly idealTree:prePrune ├── is-typedarray@1.0.0
-2336 silly idealTree:prePrune ├── isstream@0.1.2
-2336 silly idealTree:prePrune ├── jsbn@0.1.1
-2336 silly idealTree:prePrune ├── json-schema-traverse@0.4.1
-2336 silly idealTree:prePrune ├── json-schema@0.2.3
-2336 silly idealTree:prePrune ├── json-stringify-safe@5.0.1
-2336 silly idealTree:prePrune ├── jsprim@1.4.1
-2336 silly idealTree:prePrune ├── mime-db@1.44.0
-2336 silly idealTree:prePrune ├── mime-types@2.1.27
-2336 silly idealTree:prePrune ├── mime@1.6.0
-2336 silly idealTree:prePrune ├── minimist@1.2.5
-2336 silly idealTree:prePrune ├── mkdirp@0.5.5
-2336 silly idealTree:prePrune ├── oauth-sign@0.9.0
-2336 silly idealTree:prePrune ├── performance-now@2.1.0
-2336 silly idealTree:prePrune ├── promise@7.3.1
-2336 silly idealTree:prePrune ├── prr@1.0.1
-2336 silly idealTree:prePrune ├── psl@1.8.0
-2336 silly idealTree:prePrune ├── punycode@2.1.1
-2336 silly idealTree:prePrune ├── qs@6.5.2
-2336 silly idealTree:prePrune ├── request@2.88.2
-2336 silly idealTree:prePrune ├── safe-buffer@5.2.1
-2336 silly idealTree:prePrune ├── safer-buffer@2.1.2
-2336 silly idealTree:prePrune ├── source-map@0.6.1
-2336 silly idealTree:prePrune ├── sshpk@1.16.1
-2336 silly idealTree:prePrune ├── tough-cookie@2.5.0
-2336 silly idealTree:prePrune ├── tslib@1.13.0
-2336 silly idealTree:prePrune ├── tunnel-agent@0.6.0
-2336 silly idealTree:prePrune ├── tweetnacl@0.14.5
-2336 silly idealTree:prePrune ├── uri-js@4.2.2
-2336 silly idealTree:prePrune ├── uuid@3.4.0
-2336 silly idealTree:prePrune └── verror@1.10.0
-2337 silly loadIdealTree Finishing
-2338 silly currentTree lib
-2339 silly idealTree lib
-2339 silly idealTree └─┬ less@3.11.1
-2339 silly idealTree ├── ajv@6.12.2
-2339 silly idealTree ├── asap@2.0.6
-2339 silly idealTree ├── asn1@0.2.4
-2339 silly idealTree ├── assert-plus@1.0.0
-2339 silly idealTree ├── asynckit@0.4.0
-2339 silly idealTree ├── aws-sign2@0.7.0
-2339 silly idealTree ├── aws4@1.9.1
-2339 silly idealTree ├── bcrypt-pbkdf@1.0.2
-2339 silly idealTree ├── caseless@0.12.0
-2339 silly idealTree ├── clone@2.1.2
-2339 silly idealTree ├── combined-stream@1.0.8
-2339 silly idealTree ├── core-util-is@1.0.2
-2339 silly idealTree ├── dashdash@1.14.1
-2339 silly idealTree ├── delayed-stream@1.0.0
-2339 silly idealTree ├── ecc-jsbn@0.1.2
-2339 silly idealTree ├── errno@0.1.7
-2339 silly idealTree ├── extend@3.0.2
-2339 silly idealTree ├── extsprintf@1.3.0
-2339 silly idealTree ├── fast-deep-equal@3.1.1
-2339 silly idealTree ├── fast-json-stable-stringify@2.1.0
-2339 silly idealTree ├── forever-agent@0.6.1
-2339 silly idealTree ├── form-data@2.3.3
-2339 silly idealTree ├── getpass@0.1.7
-2339 silly idealTree ├── graceful-fs@4.2.4
-2339 silly idealTree ├── har-schema@2.0.0
-2339 silly idealTree ├── har-validator@5.1.3
-2339 silly idealTree ├── http-signature@1.2.0
-2339 silly idealTree ├── image-size@0.5.5
-2339 silly idealTree ├── is-typedarray@1.0.0
-2339 silly idealTree ├── isstream@0.1.2
-2339 silly idealTree ├── jsbn@0.1.1
-2339 silly idealTree ├── json-schema-traverse@0.4.1
-2339 silly idealTree ├── json-schema@0.2.3
-2339 silly idealTree ├── json-stringify-safe@5.0.1
-2339 silly idealTree ├── jsprim@1.4.1
-2339 silly idealTree ├── mime-db@1.44.0
-2339 silly idealTree ├── mime-types@2.1.27
-2339 silly idealTree ├── mime@1.6.0
-2339 silly idealTree ├── minimist@1.2.5
-2339 silly idealTree ├── mkdirp@0.5.5
-2339 silly idealTree ├── oauth-sign@0.9.0
-2339 silly idealTree ├── performance-now@2.1.0
-2339 silly idealTree ├── promise@7.3.1
-2339 silly idealTree ├── prr@1.0.1
-2339 silly idealTree ├── psl@1.8.0
-2339 silly idealTree ├── punycode@2.1.1
-2339 silly idealTree ├── qs@6.5.2
-2339 silly idealTree ├── request@2.88.2
-2339 silly idealTree ├── safe-buffer@5.2.1
-2339 silly idealTree ├── safer-buffer@2.1.2
-2339 silly idealTree ├── source-map@0.6.1
-2339 silly idealTree ├── sshpk@1.16.1
-2339 silly idealTree ├── tough-cookie@2.5.0
-2339 silly idealTree ├── tslib@1.13.0
-2339 silly idealTree ├── tunnel-agent@0.6.0
-2339 silly idealTree ├── tweetnacl@0.14.5
-2339 silly idealTree ├── uri-js@4.2.2
-2339 silly idealTree ├── uuid@3.4.0
-2339 silly idealTree └── verror@1.10.0
-2340 silly generateActionsToTake Starting
-2341 silly install generateActionsToTake
-2342 warn checkPermissions Missing write access to /usr/local/lib/node_modules
-2343 silly rollbackFailedOptional Starting
-2344 silly rollbackFailedOptional Finishing
-2345 silly runTopLevelLifecycles Starting
-2346 silly runTopLevelLifecycles Finishing
-2347 silly install printInstalled
-2348 verbose stack Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
-2349 verbose cwd /home/christine/0_WORK/gradcomm
-2350 error Linux 4.15.0-99-generic
-2351 error argv "/usr/bin/node" "/usr/bin/npm" "install" "-g" "less"
-2352 error node v8.10.0
-2353 error npm v3.5.2
-2354 error path /usr/local/lib/node_modules
-2355 error code EACCES
-2356 error errno -13
-2357 error syscall access
-2358 error Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
-2358 error { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
-2358 error errno: -13,
-2358 error code: 'EACCES',
-2358 error syscall: 'access',
-2358 error path: '/usr/local/lib/node_modules' }
-2359 error Please try running this command again as root/Administrator.
-2360 verbose exit [ -13, true ]
diff --git a/community_server/parse_proto.sh b/community_server/parse_proto.sh
deleted file mode 100755
index e6ccb451f..000000000
--- a/community_server/parse_proto.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-# Copyright 2015 gRPC authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# need grpc only for hedera hashgraph
-#PHP_PLUGIN="$(which grpc_php_plugin)"
-#protoc --proto_path=./src/protobuf/gradido --php_out=./src/ --grpc_out=./src/ --plugin=protoc-gen-grpc=$PHP_PLUGIN ./src/protobuf/gradido/*.proto
-
-protoc --proto_path=./src/protobuf --php_out=./src/Model/Messages ./src/protobuf/gradido/*.proto
-
diff --git a/community_server/phpunit.xml.dist b/community_server/phpunit.xml.dist
deleted file mode 100644
index ba971b637..000000000
--- a/community_server/phpunit.xml.dist
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- tests/TestCase/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- src/
- plugins/*/src/
-
- src/Console/Installer.php
-
-
-
-
diff --git a/community_server/src/Application.php b/community_server/src/Application.php
deleted file mode 100644
index 66e00f733..000000000
--- a/community_server/src/Application.php
+++ /dev/null
@@ -1,117 +0,0 @@
-bootstrapCli();
- }
-
- /*
- * Only try to load DebugKit in development mode
- * Debug Kit should not be installed on a production system
- */
- if (Configure::read('debug')) {
- $this->addPlugin(\DebugKit\Plugin::class);
- }
-
- // Load more plugins here
- }
-
-
-
- /**
- * Setup the middleware queue your application will use.
- *
- * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to setup.
- * @return \Cake\Http\MiddlewareQueue The updated middleware queue.
- */
- public function middleware($middlewareQueue)
- {
- //$csrf = new CsrfProtectionMiddleware();
-
- // Token check will be skipped when callback returns `true`.
- /*$csrf->whitelistCallback(function ($request) {
- // Skip token check for API URLs.
- //if ($request->getParam('prefix') === 'api') {
- if($request->getAttribute('base') === 'TransactionJsonRequestHandler') {
- return true;
- }
- });
-*/
- // Ensure routing middleware is added to the queue before CSRF protection middleware.
- //$middlewareQueue->;
-
- $middlewareQueue
- // ->add($csrf)
- // Catch any exceptions in the lower layers,
- // and make an error page/response
- ->add(new ErrorHandlerMiddleware(null, Configure::read('Error')))
-
- // Handle plugin/theme assets like CakePHP normally does.
- ->add(new AssetMiddleware([
- 'cacheTime' => Configure::read('Asset.cacheTime')
- ]))
-
- // Add routing middleware.
- // If you have a large number of routes connected, turning on routes
- // caching in production could improve performance. For that when
- // creating the middleware instance specify the cache config name by
- // using it's second constructor argument:
- // `new RoutingMiddleware($this, '_cake_routes_')`
- ->add(new RoutingMiddleware($this));
-
- return $middlewareQueue;
- }
-
- /**
- * @return void
- */
- protected function bootstrapCli()
- {
- try {
- $this->addPlugin('Bake');
- } catch (MissingPluginException $e) {
- // Do not halt if the plugin is missing
- }
-
- // Load more plugins here
- }
-}
diff --git a/community_server/src/Console/Installer.php b/community_server/src/Console/Installer.php
deleted file mode 100644
index 3bcef473b..000000000
--- a/community_server/src/Console/Installer.php
+++ /dev/null
@@ -1,246 +0,0 @@
-getIO();
-
- $rootDir = dirname(dirname(__DIR__));
-
- static::createAppConfig($rootDir, $io);
- static::createWritableDirectories($rootDir, $io);
-
- // ask if the permissions should be changed
- if ($io->isInteractive()) {
- $validator = function ($arg) {
- if (in_array($arg, ['Y', 'y', 'N', 'n'])) {
- return $arg;
- }
- throw new Exception('This is not a valid answer. Please choose Y or n.');
- };
- $setFolderPermissions = $io->askAndValidate(
- 'Set Folder Permissions ? (Default to Y) [Y,n ]? ',
- $validator,
- 10,
- 'Y'
- );
-
- if (in_array($setFolderPermissions, ['Y', 'y'])) {
- static::setFolderPermissions($rootDir, $io);
- }
- } else {
- static::setFolderPermissions($rootDir, $io);
- }
-
- static::setSecuritySalt($rootDir, $io);
-
- $class = 'Cake\Codeception\Console\Installer';
- if (class_exists($class)) {
- $class::customizeCodeceptionBinary($event);
- }
- }
-
- /**
- * Create the config/app.php file if it does not exist.
- *
- * @param string $dir The application's root directory.
- * @param \Composer\IO\IOInterface $io IO interface to write to console.
- * @return void
- */
- public static function createAppConfig($dir, $io)
- {
- $appConfig = $dir . '/config/app.php';
- $defaultConfig = $dir . '/config/app.default.php';
- if (!file_exists($appConfig)) {
- copy($defaultConfig, $appConfig);
- $io->write('Created `config/app.php` file');
- }
- }
-
- /**
- * Create the `logs` and `tmp` directories.
- *
- * @param string $dir The application's root directory.
- * @param \Composer\IO\IOInterface $io IO interface to write to console.
- * @return void
- */
- public static function createWritableDirectories($dir, $io)
- {
- foreach (static::WRITABLE_DIRS as $path) {
- $path = $dir . '/' . $path;
- if (!file_exists($path)) {
- mkdir($path);
- $io->write('Created `' . $path . '` directory');
- }
- }
- }
-
- /**
- * Set globally writable permissions on the "tmp" and "logs" directory.
- *
- * This is not the most secure default, but it gets people up and running quickly.
- *
- * @param string $dir The application's root directory.
- * @param \Composer\IO\IOInterface $io IO interface to write to console.
- * @return void
- */
- public static function setFolderPermissions($dir, $io)
- {
- // Change the permissions on a path and output the results.
- $changePerms = function ($path) use ($io) {
- $currentPerms = fileperms($path) & 0777;
- $worldWritable = $currentPerms | 0007;
- if ($worldWritable == $currentPerms) {
- return;
- }
-
- $res = chmod($path, $worldWritable);
- if ($res) {
- $io->write('Permissions set on ' . $path);
- } else {
- $io->write('Failed to set permissions on ' . $path);
- }
- };
-
- $walker = function ($dir) use (&$walker, $changePerms) {
- $files = array_diff(scandir($dir), ['.', '..']);
- foreach ($files as $file) {
- $path = $dir . '/' . $file;
-
- if (!is_dir($path)) {
- continue;
- }
-
- $changePerms($path);
- $walker($path);
- }
- };
-
- $walker($dir . '/tmp');
- $changePerms($dir . '/tmp');
- $changePerms($dir . '/logs');
- }
-
- /**
- * Set the security.salt value in the application's config file.
- *
- * @param string $dir The application's root directory.
- * @param \Composer\IO\IOInterface $io IO interface to write to console.
- * @return void
- */
- public static function setSecuritySalt($dir, $io)
- {
- $newKey = hash('sha256', Security::randomBytes(64));
- static::setSecuritySaltInFile($dir, $io, $newKey, 'app.php');
- }
-
- /**
- * Set the security.salt value in a given file
- *
- * @param string $dir The application's root directory.
- * @param \Composer\IO\IOInterface $io IO interface to write to console.
- * @param string $newKey key to set in the file
- * @param string $file A path to a file relative to the application's root
- * @return void
- */
- public static function setSecuritySaltInFile($dir, $io, $newKey, $file)
- {
- $config = $dir . '/config/' . $file;
- $content = file_get_contents($config);
-
- $content = str_replace('__SALT__', $newKey, $content, $count);
-
- if ($count == 0) {
- $io->write('No Security.salt placeholder to replace.');
-
- return;
- }
-
- $result = file_put_contents($config, $content);
- if ($result) {
- $io->write('Updated Security.salt value in config/' . $file);
-
- return;
- }
- $io->write('Unable to update Security.salt value.');
- }
-
- /**
- * Set the APP_NAME value in a given file
- *
- * @param string $dir The application's root directory.
- * @param \Composer\IO\IOInterface $io IO interface to write to console.
- * @param string $appName app name to set in the file
- * @param string $file A path to a file relative to the application's root
- * @return void
- */
- public static function setAppNameInFile($dir, $io, $appName, $file)
- {
- $config = $dir . '/config/' . $file;
- $content = file_get_contents($config);
- $content = str_replace('__APP_NAME__', $appName, $content, $count);
-
- if ($count == 0) {
- $io->write('No __APP_NAME__ placeholder to replace.');
-
- return;
- }
-
- $result = file_put_contents($config, $content);
- if ($result) {
- $io->write('Updated __APP_NAME__ value in config/' . $file);
-
- return;
- }
- $io->write('Unable to update __APP_NAME__ value.');
- }
-}
diff --git a/community_server/src/Controller/AddressTypesController.php b/community_server/src/Controller/AddressTypesController.php
deleted file mode 100644
index 9b13a7720..000000000
--- a/community_server/src/Controller/AddressTypesController.php
+++ /dev/null
@@ -1,106 +0,0 @@
-paginate($this->AddressTypes);
-
- $this->set(compact('addressTypes'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Address Type id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $addressType = $this->AddressTypes->get($id, [
- 'contain' => ['StateGroupAddresses', 'TransactionGroupAddaddress'],
- ]);
-
- $this->set('addressType', $addressType);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $addressType = $this->AddressTypes->newEntity();
- if ($this->request->is('post')) {
- $addressType = $this->AddressTypes->patchEntity($addressType, $this->request->getData());
- if ($this->AddressTypes->save($addressType)) {
- $this->Flash->success(__('The address type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The address type could not be saved. Please, try again.'));
- }
- $this->set(compact('addressType'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Address Type id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $addressType = $this->AddressTypes->get($id, [
- 'contain' => [],
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $addressType = $this->AddressTypes->patchEntity($addressType, $this->request->getData());
- if ($this->AddressTypes->save($addressType)) {
- $this->Flash->success(__('The address type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The address type could not be saved. Please, try again.'));
- }
- $this->set(compact('addressType'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Address Type id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $addressType = $this->AddressTypes->get($id);
- if ($this->AddressTypes->delete($addressType)) {
- $this->Flash->success(__('The address type has been deleted.'));
- } else {
- $this->Flash->error(__('The address type could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/AdminErrorsController.php b/community_server/src/Controller/AdminErrorsController.php
deleted file mode 100644
index a9688008e..000000000
--- a/community_server/src/Controller/AdminErrorsController.php
+++ /dev/null
@@ -1,111 +0,0 @@
-paginate = [
- 'contain' => ['StateUsers']
- ];
- $adminErrors = $this->paginate($this->AdminErrors);
-
- $this->set(compact('adminErrors'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Admin Error id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $adminError = $this->AdminErrors->get($id, [
- 'contain' => ['StateUsers']
- ]);
-
- $this->set('adminError', $adminError);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $adminError = $this->AdminErrors->newEntity();
- if ($this->request->is('post')) {
- $adminError = $this->AdminErrors->patchEntity($adminError, $this->request->getData());
- if ($this->AdminErrors->save($adminError)) {
- $this->Flash->success(__('The admin error has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The admin error could not be saved. Please, try again.'));
- }
- $stateUsers = $this->AdminErrors->StateUsers->find('list', ['limit' => 200]);
- $this->set(compact('adminError', 'stateUsers'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Admin Error id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $adminError = $this->AdminErrors->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $adminError = $this->AdminErrors->patchEntity($adminError, $this->request->getData());
- if ($this->AdminErrors->save($adminError)) {
- $this->Flash->success(__('The admin error has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The admin error could not be saved. Please, try again.'));
- }
- $stateUsers = $this->AdminErrors->StateUsers->find('list', ['limit' => 200]);
- $this->set(compact('adminError', 'stateUsers'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Admin Error id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $adminError = $this->AdminErrors->get($id);
- if ($this->AdminErrors->delete($adminError)) {
- $this->Flash->success(__('The admin error has been deleted.'));
- } else {
- $this->Flash->error(__('The admin error could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/AppController.php b/community_server/src/Controller/AppController.php
deleted file mode 100644
index e70b8e7bd..000000000
--- a/community_server/src/Controller/AppController.php
+++ /dev/null
@@ -1,386 +0,0 @@
-loadComponent('Security');`
- *
- * @return void
- */
- public function initialize()
- {
- parent::initialize();
-
- $this->loadComponent('RequestHandler', [
- 'enableBeforeRedirect' => false,
- ]);
- $this->loadComponent('Flash');
-
- $this->loadComponent('Auth', [
- 'loginAction' => [
- 'controller' => 'ServerUsers',
- 'action' => 'login'
- ],
- 'loginRedirect' => [
- 'controller' => 'Transactions',
- 'action' => 'index'
- ],
- 'logoutRedirect' => [
- 'controller' => 'Pages',
- 'action' => 'display',
- 'gradido'
- ],
- 'authenticate' => [
- 'all' => ['userModel' => 'ServerUsers'],
- 'Form' => [
- 'userModel' => 'ServerUsers',
- ]
- ]
- ]);
-
- $this->Auth->deny(['index']);
-
- /*
- * Enable the following component for recommended CakePHP security settings.
- * see https://book.cakephp.org/3.0/en/controllers/components/security.html
- */
- //$this->loadComponent('Security');
-
-
- // load current balance
- $session = $this->getRequest()->getSession();
- $state_user_id = $session->read('StateUser.id');
-
-
- // load error count
- if ($state_user_id) {
- $stateErrorsTable = TableRegistry::getTableLocator()->get('stateErrors');
- $stateErrorQuery = $stateErrorsTable
- ->find('all')
- ->select('id')
- ->contain(false)
- ->where(['state_user_id' => $state_user_id]);
- $session->write('StateUser.errorCount', $stateErrorQuery->count());
- }
-
- // put current page into global for navi
- $GLOBALS["passed"] = null;
- $side = $this->request->getParam('controller');
- $GLOBALS["side"] = $side;
- $subside = $this->request->getParam('action');
- $passedArguments = $this->request->getParam('pass');
- if ($passedArguments) {
- $GLOBALS["passed"] = $passedArguments[0];
- }
- $GLOBALS["subside"] = $subside;
-
- // server login
- if ($this->Auth->user('id')) {
- $GLOBALS['ServerUser'] = $this->Auth->user();
- }
-
- // login server url
- $loginServer = Configure::read('LoginServer');
- if ($loginServer && isset($loginServer['url'])) {
- $this->loginServerUrl = $loginServer['url'] . '/';
- } else {
- $this->loginServerUrl = Router::url('/', true);
- }
- /*
- *
- * 'GradidoBlockchain' => [
- * // type:
- * // - mysql: centralized blockchain in mysql db, no cross group transactions
- * // - hedera: send transaction over hedera
- * 'type' => 'hedera',
- * // gradido nodes with blockchain (if type != mysql)
- * 'nodes' => [
- * ['host' => 'http://192.168.178.225', 'port' => 13702]
- * ]
- * ],
- */
- $blockchain = Configure::read('GradidoBlockchain');
- if($blockchain && isset($blockchain['type'])) {
- $this->blockchainType = $blockchain['type'];
- }
- }
-
- protected function requestLogin($sessionId = 0, $redirect = true)
- {
- $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances');
- $session = $this->getRequest()->getSession();
- // check login
- // disable encryption for cookies
- $session_id = 0;
- $php_session_id = 0;
- if($session->check('session_id')) {
- $php_session_id = intval($session->read('session_id'));
- }
- $cookie_session_id = intval($this->request->getCookie('GRADIDO_LOGIN', ''));
- // decide in which order session_ids are tried
- if($sessionId != 0) {
- $session_id = $sessionId;
- } else if($php_session_id != 0) {
- $session_id = $php_session_id;
- } else if($cookie_session_id != 0) {
- $session_id = $cookie_session_id;
- }
-
- $ip = $this->request->clientIp();
- if (!$session->check('client_ip')) {
- $session->write('client_ip', $ip);
- }
- // login server cannot detect host ip
- // TODO: update login server, recognize nginx real ip header
- $loginServer = Configure::read('LoginServer');
-
- if ($session_id != 0) {
- $userStored = $session->read('StateUser');
-
- $transactionPendings = $session->read('Transactions.pending');
- $transactionExecutings = $session->read('Transactions.executing');
- $transaction_can_signed = $session->read('Transactions.can_signed');
-
-
-
- if ($session->read('session_id') != $session_id ||
- ( $userStored && (!isset($userStored['id']) || !$userStored['email_checked'])) ||
- intval($transactionPendings) > 0 ||
- intval($transactionExecutings) > 0 ||
- intval($transaction_can_signed > 0))
- {
- $http = new Client();
-
- try {
- $url = $loginServer['host'] . ':' . $loginServer['port'];
-
- $response = $http->get($url . '/login', ['session_id' => $session_id]);
- $json = $response->getJson();
-
- if (isset($json) && count($json) > 0) {
- if ($json['state'] === 'success') {
- //echo "email checked: " . $json['user']['email_checked'] . "; ";
- if ($session->read('session_id') != $session_id ||
- ( $userStored && !isset($userStored['id']))) {
- $session->destroy();
- }
- foreach ($json['user'] as $key => $value) {
- // we don't need the id of user in login server db
- if($key == 'id') continue;
- $session->write('StateUser.' . $key, $value);
- }
- //var_dump($json);
- $transactionPendings = $json['Transactions.pending'];
- $transactionExecuting = $json['Transactions.executing'];
- $transaction_can_signed = $json['Transactions.can_signed'];
- //echo "read transaction pending: $transactionPendings ";
- $session->write('Transactions.pending', $transactionPendings);
- $session->write('Transactions.executing', $transactionExecuting);
- $session->write('Transactions.can_signed', $transaction_can_signed);
- $session->write('session_id', $session_id);
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
-
-
- if (isset($json['user']['public_hex']) && $json['user']['public_hex'] != '') {
- $public_key_bin = hex2bin($json['user']['public_hex']);
- $stateUserQuery = $stateUserTable
- ->find('all')
- ->where(['public_key' => $public_key_bin])
- ->contain('StateBalances', function ($q) {
- return $q->order(['record_date' => 'DESC'])
- ->limit(1);
- });
- if ($stateUserQuery->count() == 1) {
- $stateUser = $stateUserQuery->first();
- if ($stateUser->first_name != $json['user']['first_name'] ||
- $stateUser->last_name != $json['user']['last_name'] ||
- $stateUser->disabled != $json['user']['disabled'] ||
- //$stateUser->username != $json['user']['username'] ||
- // -> throws error
- $stateUser->email != $json['user']['email']
- ) {
- $stateUser->first_name = $json['user']['first_name'];
- $stateUser->last_name = $json['user']['last_name'];
- $stateUser->disabled = intval($json['user']['disabled']);
- //$stateUser->username = $json['user']['username'];
- $stateUser->email = $json['user']['email'];
- if (!$stateUserTable->save($stateUser)) {
- $this->Flash->error(__('error updating state user ' . json_encode($stateUser->errors())));
- }
- }
- $session->write('StateUser.id', $stateUser->id);
- //echo $stateUser['id'];
- } else {
- $newStateUser = $stateUserTable->newEntity();
- $newStateUser->public_key = $public_key_bin;
- $newStateUser->first_name = $json['user']['first_name'];
- $newStateUser->last_name = $json['user']['last_name'];
- $newStateUser->disabled = intval($json['user']['disabled']);
- //$newStateUser->username = $json['user']['username'];
- $newStateUser->email = $json['user']['email'];
- if (!$stateUserTable->save($newStateUser)) {
- $this->Flash->error(__('error saving state user ' . json_encode($newStateUser->errors())));
- }
- $session->write('StateUser.id', $newStateUser->id);
- //echo $newStateUser->id;
- }
- } else {
- if(!$redirect) {
- return ['state' => 'error', 'msg' => 'no pubkey'];
- }
- // we haven't get a pubkey? something seems to gone wrong on the login-server
- $this->Flash->error(__('no pubkey'));
- //var_dump($json);
- return $this->redirect($this->loginServerUrl . 'account/error500/noPubkey', 303);
- }
- } else {
- if(!$redirect) {
- return ['state' => 'not found', 'msg' => 'invalid session', 'details' => $json];
- }
- if ($json['state'] === 'not found') {
- $this->Flash->error(__('invalid session'));
- } else {
- $this->Flash->error(__('Konto ist nicht aktiviert!'));
- }
- //die(json_encode($json));
- if(preg_match('/client ip/', $json['msg'])) {
- return $this->redirect($this->loginServerUrl . 'account/error500/ipError', 303);
- }
- return $this->redirect($this->loginServerUrl . 'account/', 303);
- }
- }
- } catch (\Exception $e) {
- $msg = $e->getMessage();
- if(!$redirect) {
- return ['state' => 'error', 'msg' => 'login-server http request error', 'details' => $msg];
- }
- $this->Flash->error(__('error http request: ') . $msg);
- return $this->redirect(['controller' => 'Dashboard', 'action' => 'errorHttpRequest']);
- //continue;
- }
- }
- $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $session->read('StateUser.id')])->first();
- if ($state_balance) {
- $now = new FrozenTime;
- $session->write('StateUser.balance', $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now));
- }
- } else {
- // no login
- //die("no login");
- if(!$redirect) {
- return ['state' => 'error', 'msg' => 'not logged in'];
- }
- if (isset($loginServer['path'])) {
- return $this->redirect($loginServer['path'], 303);
- } else {
- return $this->redirect($this->loginServerUrl . 'account/', 303);
- }
- }
- return true;
- }
-
- /*
- public function beforeFilter(Event $event)
- {
- //$this->Auth->allow(['display']);
- }
- */
-
- public function addAdminError($controller, $action, array $returnTable, $state_user_id)
- {
- if (!is_array($returnTable)) {
- $this->addAdminError('AppController', 'addAdminError', ['state' => 'error', 'msg' => 'returnTable isn\'t array', 'details' => gettype($returnTable)], $state_user_id);
- return false;
- }
- $adminErrorTable = TableRegistry::getTableLocator()->get('AdminErrors');
- $adminErrorEntity = $adminErrorTable->newEntity();
- $adminErrorEntity->state_user_id = $state_user_id;
- $adminErrorEntity->controller = $controller;
- $adminErrorEntity->action = $action;
- $adminErrorEntity->state = $returnTable['state'];
- if (isset($returnTable['msg'])) {
- $adminErrorEntity->msg = $returnTable['msg'];
- } else {
- $adminErrorEntity->msg = __('(Leere Message)');
- }
- if (isset($returnTable['details'])) {
- $adminErrorEntity->details = $returnTable['details'];
- } else {
- $adminErrorEntity->details = __('(Leere Details)');
- }
- if (!$adminErrorTable->save($adminErrorEntity)) {
- $this->Flash->error(
- __('Serious error, couldn\'t save to db, please write the admin: ' . $this->getAdminEmailLink()),
- ['escape' => false]
- );
- }
- return true;
- }
-
- public function getAdminEmailLink($text = '')
- {
- $serverAdminEmail = Configure::read('ServerAdminEmail');
- return ''. $serverAdminEmail . ' ';
- }
-
- public function returnJsonEncoded($json)
- {
- $this->autoRender = false;
- $response = $this->response->withType('application/json');
- return $response->withStringBody($json);
- }
-
- public function returnJson($array)
- {
- $this->autoRender = false;
- $response = $this->response->withType('application/json');
- return $response->withStringBody(json_encode($array));
- }
-
- public function getStartEndForMonth($month, $year)
- {
- $timeString = $year . '-' . $month . '-01 00:00';
- $firstDay = new Time($timeString);
- $lastDay = new Time($timeString);
- $lastDay = $lastDay->addMonth(1);
- return [$firstDay, $lastDay];
- }
-}
diff --git a/community_server/src/Controller/AppRequestsController.php b/community_server/src/Controller/AppRequestsController.php
deleted file mode 100644
index 20b182f75..000000000
--- a/community_server/src/Controller/AppRequestsController.php
+++ /dev/null
@@ -1,465 +0,0 @@
-loadComponent('JsonRequestClient');
- $this->loadComponent('GradidoNumber');
- //$this->loadComponent('JsonRpcRequestClient');
- //$this->Auth->allow(['add', 'edit']);
- $this->Auth->allow([
- 'index', 'sendCoins', 'createCoins', 'getBalance',
- 'listTransactions','listGDTTransactions', 'getDecayStartBlock'
- ]);
- }
-
-
- public function index()
- {
- if($this->request->is('get')) {
- $method = $this->request->getQuery('method');
- switch($method) {
-
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for get', 'details' => $method]);
- }
- else if($this->request->is('post')) {
- $jsonData = $this->request->input('json_decode');
- //var_dump($jsonData);
- if($jsonData == NULL || !isset($jsonData->method)) {
- return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']);
- }
- $method = $jsonData->method;
-
- switch($method) {
-
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for post', 'details' => $method]);
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post or get']);
- }
-
- private function checkAndCopyRequiredFields($fields, &$param, $data = null) {
- if($data == null) {
- $data = $this->request->input('json_decode');
- }
- foreach($fields as $field) {
- if(is_array($field)) {
- $one_exist = false;
- foreach($field as $oneField) {
- if(isset($data->$oneField)) {
- $param[$oneField] = $data->$oneField;
- $one_exist = true;
- break;
- }
- }
- if(!$one_exist) {
- return ['state' => 'error', 'msg' => 'missing field of set', 'details' => $field];
- }
- } else {
- if(!isset($data->$field)) {
- return ['state' => 'error', 'msg' => 'missing field', 'details' => $field . ' not found'];
- } else {
- $param[$field] = $data->$field;
- }
- }
- }
- return true;
- }
-
- private function rewriteKeys(&$data, $replaceKeys)
- {
- foreach(array_keys($replaceKeys) as $key) {
- $newKey = $replaceKeys[$key];
- if(isset($data->$key)) {
- $data->$newKey = $data->$key;
- unset($data->$key);
- }
- }
- }
-
- private function parseParameterForCreateTransaction(&$param, $data = null)
- {
- if($data == null) {
- $data = $this->request->input('json_decode');
- }
- $session_id = 0;
- if(isset($data->session_id)) {
- $session_id = $data->session_id;
- }
- $login_request_result = $this->requestLogin($session_id, false);
- if($login_request_result !== true) {
- return $login_request_result;
- }
- $session = $this->getRequest()->getSession();
- $param['session_id'] = $session->read('session_id');
- $param['blockchain_type'] = $this->blockchainType;
-
- $this->rewriteKeys($data, ['email' => 'target_email', 'username' => 'target_username', 'pubkey' => 'target_pubkey']);
- $required_fields = $this->checkAndCopyRequiredFields(['amount', ['target_email', 'target_username', 'target_pubkey']], $param, $data);
- if($required_fields !== true) {
- return $required_fields;
- }
-
- if(floatval($param['amount']) <= 0.0) {
- return ['state' => 'error', 'msg' => 'amount is invalid', 'details' => $param['amount']];
- }
- $param['amount'] = $this->GradidoNumber->parseInputNumberToCentNumber($param['amount']);
-
- if(isset($data->memo)) {
- $param['memo'] = $data->memo;
- }
-
- if(isset($data->auto_sign)) {
- $param['auto_sign'] = boolval($data->auto_sign);
- }
-
- return true;
- }
-
- public function sendCoins()
- {
- /*
- * {
- "session_id" : -127182,
- "amount": 2000000,
- "email": "max.musterman@gmail.de",
- "memo":"Thank you :)",
- "group": "gdd1",
- "auto_sign": true
- */
- if(!$this->request->is('post')) {
- return $this->returnJson(['state' => 'error', 'msg' => 'no post']);
- }
- $data = $this->request->input('json_decode');
- $params = [];
- $result = $this->parseParameterForCreateTransaction($params, $data);
- if($result !== true) {
- return $this->returnJson($result);
- }
-
- if(!isset($params['memo']) || strlen($params['memo']) < 5 || strlen($params['memo']) > 150) {
- return $this->returnJson(['state' => 'error', 'msg' => 'memo is not set or not in expected range [5;150]']);
- }
- $params['transaction_type'] = 'transfer';
-
- $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode($params), '/createTransaction');
-
-
- if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) {
- $session = $this->getRequest()->getSession();
- $pendingTransactionCount = $session->read('Transactions.pending');
- if($pendingTransactionCount == null) {
- $pendingTransactionCount = 1;
- } else {
- $pendingTransactionCount++;
- }
- $session->write('Transactions.pending', $pendingTransactionCount);
- //echo "pending: " . $pendingTransactionCount;
- return $this->returnJson(['state' => 'success']);
- } else {
-
- /*
- * if request contain unknown parameter format, shouldn't happen't at all
- * {"state": "error", "msg": "parameter format unknown"}
- * if json parsing failed
- * {"state": "error", "msg": "json exception", "details":"exception text"}
- * if session_id is zero or not set
- * {"state": "error", "msg": "session_id invalid"}
- * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes)
- * {"state": "error", "msg": "session not found"}
- * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen
- * {"state": "code error", "msg":"user is zero"}
- * if transaction type not known
- * {"state": "error", "msg":"transaction_type unknown"}
- * if receiver wasn't known to Login-Server
- * {"state": "not found", "msg":"receiver not found"}
- * if receiver account disabled, and therefor cannto receive any coins
- * {"state": "disabled", "msg":"receiver is disabled"}
- * if transaction was okay and will be further proccessed
- * {"state":"success"}
- */
- $answear_data = $requestAnswear['data'];
- return $this->returnJson($answear_data);
-
- }
-
- }
-
- public function createCoins()
- {
- /*
- * "session_id" : -127182,
- * "email": "max.musterman@gmail.de",
- * "amount": 10000000,
- * "target_date":"2021-02-19T13:25:36+00:00",
- * "memo":"AGE",
- * "auto_sign": true
- */
- if(!$this->request->is('post')) {
- return $this->returnJson(['state' => 'error', 'msg' => 'no post']);
- }
- $data = $this->request->input('json_decode');
- $params = [];
- $result = $this->parseParameterForCreateTransaction($params, $data);
- if($result !== true) {
- return $this->returnJson($result);
- }
- $required_fields = $this->checkAndCopyRequiredFields(['target_date'], $params, $data);
- if($required_fields !== true) {
- return $this->returnJson($required_fields);
- }
- $params['transaction_type'] = 'creation';
-
- $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode($params), '/createTransaction');
-
- if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) {
- $session = $this->getRequest()->getSession();
- $pendingTransactionCount = $session->read('Transactions.pending');
- if($pendingTransactionCount == null) {
- $pendingTransactionCount = 1;
- } else {
- $pendingTransactionCount++;
- }
- $session->write('Transactions.pending', $pendingTransactionCount);
- //echo "pending: " . $pendingTransactionCount;
- return $this->returnJson(['state' => 'success']);
- } else {
-
- /*
- * if request contain unknown parameter format, shouldn't happen't at all
- * {"state": "error", "msg": "parameter format unknown"}
- * if json parsing failed
- * {"state": "error", "msg": "json exception", "details":"exception text"}
- * if session_id is zero or not set
- * {"state": "error", "msg": "session_id invalid"}
- * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes)
- * {"state": "error", "msg": "session not found"}
- * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen
- * {"state": "code error", "msg":"user is zero"}
- * if transaction type not known
- * {"state": "error", "msg":"transaction_type unknown"}
- * if receiver wasn't known to Login-Server
- * {"state": "not found", "msg":"receiver not found"}
- * if receiver account disabled, and therefor cannto receive any coins
- * {"state": "disabled", "msg":"receiver is disabled"}
- * if transaction was okay and will be further proccessed
- * {"state":"success"}
- */
- $answear_data = $requestAnswear['data'];
- return $this->returnJson($answear_data);
-
- }
-
- }
-
- public function getBalance($session_id = 0)
- {
- $this->viewBuilder()->setLayout('ajax');
- $login_result = $this->requestLogin($session_id, false);
- if($login_result !== true) {
- $this->set('body', $login_result);
- return;
- }
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
- $state_balances_table = TableRegistry::getTableLocator()->get('StateBalances');
- $state_balances_table->updateBalances($user['id']);
-
- $state_balance = $state_balances_table->find()->where(['state_user_id' => $user['id']])->first();
-
-
- $now = new FrozenTime();
- if(!$state_balance) {
- $body = [
- 'state' => 'success',
- 'balance' => 0,
- 'decay' => 0
- ];
- } else {
-
- $body = [
- 'state' => 'success',
- 'balance' => $state_balance->amount,
- 'decay' => $state_balance->partDecay($now),
- ];
- }
-
- $body['decay_date'] = $now;
- $this->set('body', $body);
- }
-
- public function listTransactions($page = 1, $count = 25, $orderDirection = 'ASC', $session_id = 0)
- {
- $this->viewBuilder()->setLayout('ajax');
- $startTime = microtime(true);
-
- $login_result = $this->requestLogin($session_id, false);
-
- if($login_result !== true) {
- return $this->returnJson($login_result);
- }
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
-
- $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances');
- $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions');
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
-
- $stateBalancesTable->updateBalances($user['id']);
-
- $gdtSum = 0;
-
- $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi');
-
- if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) {
- $gdtSum = intval($gdtEntries['data']['sum']);
- } else {
- $this->addAdminError('StateBalancesController', 'overview', $gdtEntries, $user['id'] ? $user['id'] : 0);
- }
-
- //echo "count: $count, page: $page ";
- $limit = $count;
- $offset = 0;
- $skip_first_transaction = false;
- if($page > 1) {
- $offset = (( $page - 1 ) * $count) - 1;
- $limit++;
- }
-
- if($offset && $orderDirection == 'ASC') {
- $offset--;
- }
-
- //echo "limit: $limit, offset: $offset, skip first transaction: $skip_first_transaction ";
- $stateUserTransactionsQuery = $stateUserTransactionsTable
- ->find()
- ->where(['state_user_id' => $user['id']])
- ->order(['balance_date' => $orderDirection])
- ->contain([])
- ->limit($limit)
- //->page($page)
- ->offset($offset)
- ;
- $state_user_transactions_count = $stateUserTransactionsQuery->count();
- if($state_user_transactions_count > $offset + $limit) {
- $skip_first_transaction = true;
- }
-
- $decay = true;
- if($page > 1) {
- $decay = false;
- }
- $transactions = [];
- $transactions_from_db = $stateUserTransactionsQuery->toArray();
-
- if(count($transactions_from_db)) {
- if($orderDirection == 'DESC') {
- $transactions_from_db = array_reverse($transactions_from_db);
- }
-
- $transactions = $transactionsTable->listTransactionsHumanReadable($transactions_from_db, $user, $decay, $skip_first_transaction);
- //echo "transactions count: " . count($transactions) . " ";
- if($orderDirection == 'DESC') {
- $transactions = array_reverse($transactions);
- }
- }
-
- $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $user['id']])->first();
-
- $body = [
- 'state' => 'success',
- 'transactions' => $transactions,
- 'transactionExecutingCount' => $session->read('Transactions.executing'),
- 'count' => $state_user_transactions_count,
- 'gdtSum' => $gdtSum,
- 'timeUsed' => microtime(true) - $startTime
- ];
- $now = new FrozenTime();
- $body['decay_date'] = $now;
-
- if(!$state_balance) {
- $body['balance'] = 0.0;
- $body['decay'] = 0.0;
- } else {
- $body['balance'] = $state_balance->amount;
- $body['decay'] = $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now);
- }
-
- $this->set('body', $body);
- }
-
- public function listGDTTransactions($page = 1, $count = 25, $orderDirection = 'ASC', $session_id = 0)
- {
- $timeBegin = microtime(true);
- $this->viewBuilder()->setLayout('ajax');
-
- $login_result = $this->requestLogin($session_id, false);
-
- if($login_result !== true) {
- return $this->returnJson($login_result);
- }
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
-
- if(!$user) {
- return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']);
- }
-
- $gdtEntries = $this->JsonRequestClient->sendRequestGDT([
- 'email' => $user['email'],
- 'page' => $page,
- 'count' => $count,
- 'orderDirection' => $orderDirection
- ], 'GdtEntries' . DS . 'listPerEmailApi');
-
- if('success' == $gdtEntries['state']) {
- $timeEnd = microtime(true);
- $gdtEntries['data']['timeUsed'] = $timeEnd - $timeBegin;
- return $this->returnJson($gdtEntries['data']);
-
- } else {
- if($user) {
- $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, $user['id']);
- } else {
- $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, 0);
- }
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'error by requesting gdt server', 'details' => $gdtEntries]);
- }
-
- public function getDecayStartBlock()
- {
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
- $decayStartBlock = $transactionsTable->find()->where(['transaction_type_id' => 9]);
- if(!$decayStartBlock->count()) {
- return $this->returnJson(['state' => 'error', 'msg' => 'not found']);
- }
- return $this->returnJson(['state' => 'success', 'decay_start' => $decayStartBlock->first()->received]);
- }
-
- private function acquireAccessToken($session_id)
- {
-
- }
-
-}
-
diff --git a/community_server/src/Controller/BlockchainTypesController.php b/community_server/src/Controller/BlockchainTypesController.php
deleted file mode 100644
index 2a94037df..000000000
--- a/community_server/src/Controller/BlockchainTypesController.php
+++ /dev/null
@@ -1,106 +0,0 @@
-paginate($this->BlockchainTypes);
-
- $this->set(compact('blockchainTypes'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Blockchain Type id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $blockchainType = $this->BlockchainTypes->get($id, [
- 'contain' => [],
- ]);
-
- $this->set('blockchainType', $blockchainType);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $blockchainType = $this->BlockchainTypes->newEntity();
- if ($this->request->is('post')) {
- $blockchainType = $this->BlockchainTypes->patchEntity($blockchainType, $this->request->getData());
- if ($this->BlockchainTypes->save($blockchainType)) {
- $this->Flash->success(__('The blockchain type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The blockchain type could not be saved. Please, try again.'));
- }
- $this->set(compact('blockchainType'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Blockchain Type id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $blockchainType = $this->BlockchainTypes->get($id, [
- 'contain' => [],
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $blockchainType = $this->BlockchainTypes->patchEntity($blockchainType, $this->request->getData());
- if ($this->BlockchainTypes->save($blockchainType)) {
- $this->Flash->success(__('The blockchain type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The blockchain type could not be saved. Please, try again.'));
- }
- $this->set(compact('blockchainType'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Blockchain Type id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $blockchainType = $this->BlockchainTypes->get($id);
- if ($this->BlockchainTypes->delete($blockchainType)) {
- $this->Flash->success(__('The blockchain type has been deleted.'));
- } else {
- $this->Flash->error(__('The blockchain type could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/CommunityProfilesController.php b/community_server/src/Controller/CommunityProfilesController.php
deleted file mode 100644
index c807da72c..000000000
--- a/community_server/src/Controller/CommunityProfilesController.php
+++ /dev/null
@@ -1,106 +0,0 @@
-paginate($this->CommunityProfiles);
-
- $this->set(compact('communityProfiles'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Community Profile id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $communityProfile = $this->CommunityProfiles->get($id, [
- 'contain' => [],
- ]);
-
- $this->set('communityProfile', $communityProfile);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $communityProfile = $this->CommunityProfiles->newEntity();
- if ($this->request->is('post')) {
- $communityProfile = $this->CommunityProfiles->patchEntity($communityProfile, $this->request->getData());
- if ($this->CommunityProfiles->save($communityProfile)) {
- $this->Flash->success(__('The community profile has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The community profile could not be saved. Please, try again.'));
- }
- $this->set(compact('communityProfile'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Community Profile id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $communityProfile = $this->CommunityProfiles->get($id, [
- 'contain' => [],
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $communityProfile = $this->CommunityProfiles->patchEntity($communityProfile, $this->request->getData());
- if ($this->CommunityProfiles->save($communityProfile)) {
- $this->Flash->success(__('The community profile has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The community profile could not be saved. Please, try again.'));
- }
- $this->set(compact('communityProfile'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Community Profile id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $communityProfile = $this->CommunityProfiles->get($id);
- if ($this->CommunityProfiles->delete($communityProfile)) {
- $this->Flash->success(__('The community profile has been deleted.'));
- } else {
- $this->Flash->error(__('The community profile could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/Component/GradidoNumberComponent.php b/community_server/src/Controller/Component/GradidoNumberComponent.php
deleted file mode 100644
index 5db208c3a..000000000
--- a/community_server/src/Controller/Component/GradidoNumberComponent.php
+++ /dev/null
@@ -1,33 +0,0 @@
- 'error', 'type' => 'parameter error', 'msg' => 'session_id isn\'t numeric'];
- }
- if(!is_numeric($user_balance) || intval($user_balance) < 0) {
- return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'user_balance invalid'];
- }
- if(is_array($base64Message)) {
- foreach($base64Message as $singleMessage) {
- if(!$this->is_base64($singleMessage)) {
- return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'at least one base64Message contain invalid base64 characters'];
- }
- }
- } else if(!$this->is_base64($base64Message)) {
- return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'base64Message contain invalid base64 characters'];
- }
-
- return $this->sendRequest(json_encode([
- 'session_id' => $session_id,
- 'transaction_base64' => $base64Message,
- 'balance' => $user_balance,
- 'auto_sign' => $auto_sign,
- 'blockchain_type' => $this->blockchainType
- ]), '/checkTransaction');
-
- }
-
- public function findePublicKeyForEmailHash($emailHash) {
- //'ask' = ['account_publickey' => '']
- $results = $this->sendRequestLoginServerNeighbors(json_encode(['ask' => ['account_publickey' => $emailHash]]), 'search');
- }
-
- public function getRunningUserTasks($email)
- {
- if($email == "") {
- return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'email is empty'];
- }
- if(!GenericValidation::email($email, [])) {
- return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'email is invalid'];
- }
-
- return $this->sendRequest(json_encode([
- 'email' => $email
- ]), '/getRunningUserTasks');
- }
-
- public function getUsers($session_id, $searchString, $accountState)
- {
- if($searchString == "") {
- return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'search string is empty'];
- }
- if(!is_numeric($session_id)) {
- return ['state' => 'error', 'type' => 'parameter error', 'msg' => 'session_id isn\'t numeric'];
- }
-
- return $this->sendRequest(json_encode([
- 'session_id' => $session_id,
- 'search' => $searchString,
- 'account_state' => $accountState,
- ]), '/getUsers');
- }
-
- public function sendRequest($transactionBody, $url_last_part) {
- $http = new Client();
-
- $response = $http->post($this->getLoginServerUrl() . $url_last_part, $transactionBody, ['type' => 'json']);
- $responseStatus = $response->getStatusCode();
- if($responseStatus != 200) {
- return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response status code isn\'t 200', 'details' => $responseStatus];
- }
- //$responseType = $response->getType();
- //if($responseType != 'application/json') {
-// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType];
-// }
- $json = $response->getJson();
- if($json == null) {
- //$responseType = $response->getType();
- return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json'];
- }
- return ['state' => 'success', 'data' => $json];
- }
-
- public function sendRequestGDT($transactionBody, $url) {
-
- $http = new Client();
- $gdtServerHost = $this->getGDTServerUrl();
- if(!$gdtServerHost) {
- return ['state' => 'warning', 'msg' => 'gdt server not configured'];
- }
- $fullUrl = $gdtServerHost . DS . $url;
- $response = $http->post($this->getGDTServerUrl() . DS . $url, $transactionBody, ['type' => 'json']);
- $responseStatus = $response->getStatusCode();
- if($responseStatus != 200) {
- return [
- 'state' => 'error',
- 'type' => 'request error',
- 'msg' => 'server response status code isn\'t 200',
- 'details' => $responseStatus,
- 'fullUrl' => $fullUrl
- ];
- }
- //$responseType = $response->getType();
- //if($responseType != 'application/json') {
-// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType];
-// }
- $json = $response->getJson();
- if($json == null) {
- //$responseType = $response->getType();
- return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json'];
- }
- return ['state' => 'success', 'data' => $json];
- }
-
- public function sendRequestLoginServerNeighbors($transactionBody, $url) {
-
- $http = new Client();
- if(!Configure::check('NeighborLoginServers')) {
- return ['state' => 'warning', 'msg' => 'no neighbor server configured'];
- }
- $nServers = Configure::read('NeighborLoginServers');
- $results = ['errors' => [], 'data' => []];
- foreach($nServers as $nServer) {
- $full_url = $nServer['host'] . ':' . $nServer['port'] . '/' . $url;
- $response = $http->post($full_url, $transactionBody, ['type' => 'json']);
- $responseStatus = $response->getStatusCode();
- if($responseStatus != 200) {
- $results['errors'][] = [
- 'state' => 'error',
- 'type' => 'request error',
- 'msg' => 'server response status code isn\'t 200',
- 'details' => $responseStatus,
- 'fullUrl' => $full_url
- ];
- continue;
- }
- $json = $response->getJson();
- if($json == null) {
- //$responseType = $response->getType();
- $results['errors'][] = ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json'];
- continue;
- }
- $results['data'][] = $json;
- }
- return $results;
- }
-
- static public function getLoginServerUrl()
- {
- $loginServer = Configure::read('LoginServer');
- return $loginServer['host'] . ':' . $loginServer['port'];
- }
-
- static public function getGDTServerUrl()
- {
- $gdtServer = Configure::read('GDTServer');
- if(isset($gdtServer['host'])) {
- return $gdtServer['host'];
- }
- return false;
- }
-
- static public function is_base64($s)
- {
- return (bool) preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s);
- }
-
-}
diff --git a/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php b/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php
deleted file mode 100644
index 504fc8fdd..000000000
--- a/community_server/src/Controller/Component/JsonRpcRequestClientComponent.php
+++ /dev/null
@@ -1,83 +0,0 @@
-rpcClient = new JsonRpcClient();
- }
-
- // @param id: if id = 0 call rand for it
- public function request($method, $params = [], $id = 0)
- {
-
- if(0 == $id) {
- $id = random_int(1, 12000);
- }
- $this->rpcClient->query($id, $method, $params);
-
- $message = $this->rpcClient->encode();
- return $this->sendRequest($message);
- // message: {"jsonrpc":"2.0","method":"add","params":[1,2],"id":1}
- }
-
- public function sendRequest($message) {
- $http = new Client();
-
- try {
- $url = $this->pickGradidoNodeUrl();
- if(is_array($url)) {
- return $url;
- }
- $response = $http->post($url, $message, ['type' => 'json']);
- } catch(Exception $e) {
- return ['state' => 'error', 'type' => 'http exception', 'details' => $e->getMessage()];
- }
- $responseStatus = $response->getStatusCode();
- if($responseStatus != 200) {
- return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response status code isn\'t 200', 'details' => $responseStatus];
- }
- //$responseType = $response->getType();
- //if($responseType != 'application/json') {
-// return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t json', 'details' => $responseType];
-// }
- $json = $response->getJson();
- if($json == null) {
- //$responseType = $response->getType();
- return ['state' => 'error', 'type' => 'request error', 'msg' => 'server response isn\'t valid json'];
- }
- return $json['result'];
- //return ['state' => 'success', 'data' => $json];
- }
-
- static public function pickGradidoNodeUrl()
- {
- $gradidoNodes = Configure::read('GradidoBlockchain.nodes');
- if(count($gradidoNodes) == 0) {
- return ['state' => 'error', 'msg' => 'no gradido nodes in config'];
- }
- $i = rand(0, count($gradidoNodes)-1);
- return $gradidoNodes[$i]['host'] . ':' . $gradidoNodes[$i]['port'];
- }
-
-
-}
-
-
diff --git a/community_server/src/Controller/DashboardController.php b/community_server/src/Controller/DashboardController.php
deleted file mode 100644
index e25374821..000000000
--- a/community_server/src/Controller/DashboardController.php
+++ /dev/null
@@ -1,78 +0,0 @@
-Auth->allow(['add', 'edit']);
- $this->Auth->allow(['index', 'errorHttpRequest']);
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', true))
- );
- }
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- $serverUser = $this->Auth->user('id');
- if($serverUser) {
- $adminErrorsTable = TableRegistry::getTableLocator()->get('AdminErrors');
- $adminErrorCount = $adminErrorsTable->find('all')->count();
- $this->set('adminErrorCount', $adminErrorCount);
- }
-
- $this->set('user', $user);
- $this->set('serverUser', $serverUser);
- $this->set('timeUsed', microtime(true) - $startTime);
-
- }
-
- public function serverIndex()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $adminErrorsTable = TableRegistry::getTableLocator()->get('AdminErrors');
- $adminErrorCount = $adminErrorsTable->find('all')->count();
-
- $this->set('adminErrorCount', $adminErrorCount);
- $this->set('timeUsed', microtime(true) - $startTime);
- }
-
- public function errorHttpRequest()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $this->set('timeUsed', microtime(true) - $startTime);
- }
-
-}
diff --git a/community_server/src/Controller/ElopageBuysController.php b/community_server/src/Controller/ElopageBuysController.php
deleted file mode 100644
index e097eddbb..000000000
--- a/community_server/src/Controller/ElopageBuysController.php
+++ /dev/null
@@ -1,165 +0,0 @@
-paginate = [
- 'contain' => false,
- ];
- $elopageBuys = $this->paginate($this->ElopageBuys);
-
- $this->set(compact('elopageBuys'));
- }
-
- public function statistics()
- {
- $this->viewBuilder()->setLayout('frontend');
- $connection = ConnectionManager::get('loginServer');
- $dates = $connection->execute('SELECT success_date FROM elopage_buys group by CAST(success_date as DATE)')->fetchAll('assoc');
-
- $datesTree = [];
- foreach($dates as $i => $date) {
-
- $date = new Time($date['success_date']);
- if(!isset($datesTree[$date->year])) {
- $datesTree[$date->year] = [];
- }
- if(!isset($datesTree[$date->year][$date->month])) {
- $datesTree[$date->year][$date->month] = true;
- }
- }
- //var_dump($datesTree);
-
- $now = Time::now();
- $lastDay = Time::now();
- $lastDay->day = 1;
- $now->day = 1;
- $lastDay->setTime(0,0,0,0);
- $now->setTime(0,0,0,0);
- // only for test
- $now->month = 11;
- $lastDay->month = 11;
- $now->year = 2019;
- $lastDay->year = 2019;
-// var_dump($now);
-
- $lastDay = $lastDay->addMonth(1);
- $sortDate = $this->getStartEndForMonth(11, 2019);
- $elopageBuys = $this->ElopageBuys
- ->find('all')
- ->where(['success_date >=' => $sortDate[0], 'success_date <' => $sortDate[1]]);
- $users = [];
- foreach($elopageBuys as $elopageEntry) {
- array_push($users, $elopageEntry->payer_email);
- }
- $unique_users = array_unique($users);
-
- $userTable = TableRegistry::getTableLocator()->get('Users');
- $users = $userTable->find('all')
- ->where(['created >=' => $sortDate[0], 'created <' => $sortDate[1]]);
-
- $this->set(compact('elopageBuys', 'users'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Elopage Buy id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $elopageBuy = $this->ElopageBuys->get($id, [
- 'contain' => false,
- ]);
-
- $this->set('elopageBuy', $elopageBuy);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $elopageBuy = $this->ElopageBuys->newEntity();
- if ($this->request->is('post')) {
- $elopageBuy = $this->ElopageBuys->patchEntity($elopageBuy, $this->request->getData());
- if ($this->ElopageBuys->save($elopageBuy)) {
- $this->Flash->success(__('The elopage buy has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The elopage buy could not be saved. Please, try again.'));
- }
-
- $this->set(compact('elopageBuy'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Elopage Buy id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $elopageBuy = $this->ElopageBuys->get($id, [
- 'contain' => false,
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $elopageBuy = $this->ElopageBuys->patchEntity($elopageBuy, $this->request->getData());
- if ($this->ElopageBuys->save($elopageBuy)) {
- $this->Flash->success(__('The elopage buy has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The elopage buy could not be saved. Please, try again.'));
- }
- $this->set(compact('elopageBuy'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Elopage Buy id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $elopageBuy = $this->ElopageBuys->get($id);
- if ($this->ElopageBuys->delete($elopageBuy)) {
- $this->Flash->success(__('The elopage buy has been deleted.'));
- } else {
- $this->Flash->error(__('The elopage buy could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/ElopageWebhookController.php b/community_server/src/Controller/ElopageWebhookController.php
deleted file mode 100644
index 4e806fa69..000000000
--- a/community_server/src/Controller/ElopageWebhookController.php
+++ /dev/null
@@ -1,51 +0,0 @@
-Auth->allow(['put']);
-
- }
-
- public function put()
- {
- $this->autoRender = false;
- $data = $this->request->getData();
- $response = $this->response->withType('text/plain');
-
- $dataString = http_build_query($data);
- //$this->recursiveArrayToString($data, $dataString);
- // %5B => [
- // %5D => ]
- $dataString = preg_replace(['/\%5B/', '/\%5D/'], ['[', ']'], $dataString);
- //var_dump($dataString);
-
- //2020-02-27T13:52:32+01:00
- $dateString = date('c');
- $fh = fopen('/etc/grd_login/php_elopage_requests.txt', 'a');
- if($fh === FALSE) {
- return $response->withStringBody('400 ERROR');
- }
- fwrite($fh, $dateString);
- fwrite($fh, "\n");
- fwrite($fh, $dataString);
- fwrite($fh, "\n");
- fclose($fh);
-
-
- return $response->withStringBody('200 OK');
-
- }
-}
diff --git a/community_server/src/Controller/ErrorController.php b/community_server/src/Controller/ErrorController.php
deleted file mode 100644
index c5421a24d..000000000
--- a/community_server/src/Controller/ErrorController.php
+++ /dev/null
@@ -1,70 +0,0 @@
-loadComponent('RequestHandler', [
- 'enableBeforeRedirect' => false,
- ]);
- }
-
- /**
- * beforeFilter callback.
- *
- * @param \Cake\Event\Event $event Event.
- * @return \Cake\Http\Response|null|void
- */
- public function beforeFilter(Event $event)
- {
- }
-
- /**
- * beforeRender callback.
- *
- * @param \Cake\Event\Event $event Event.
- * @return \Cake\Http\Response|null|void
- */
- public function beforeRender(Event $event)
- {
- parent::beforeRender($event);
- $this->RequestHandler->renderAs($this, 'json');
- $this->viewBuilder()->setTemplatePath('Error');
- }
-
- /**
- * afterFilter callback.
- *
- * @param \Cake\Event\Event $event Event.
- * @return \Cake\Http\Response|null|void
- */
- public function afterFilter(Event $event)
- {
- }
-}
diff --git a/community_server/src/Controller/JsonRequestHandlerController.php b/community_server/src/Controller/JsonRequestHandlerController.php
deleted file mode 100644
index 611984118..000000000
--- a/community_server/src/Controller/JsonRequestHandlerController.php
+++ /dev/null
@@ -1,559 +0,0 @@
-loadComponent('JsonRequestClient');
- $this->loadComponent('JsonRpcRequestClient');
- //$this->Auth->allow(['add', 'edit']);
- $this->Auth->allow('index');
- }
-
-
- public function index()
- {
- if($this->request->is('get')) {
- $method = $this->request->getQuery('method');
- switch($method) {
- case 'getRunningUserTasks': return $this->getRunningUserTasks();
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for get', 'details' => $method]);
- }
- else if($this->request->is('post')) {
- $jsonData = $this->request->input('json_decode');
- //var_dump($jsonData);
- if($jsonData == NULL || !isset($jsonData->method)) {
- return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']);
- }
- $method = $jsonData->method;
-
- switch($method) {
- case 'putTransaction':
- if(!isset($jsonData->transaction)) {
- return $this->returnJson(['state' => 'error', 'msg' => 'parameter error']);
- } else {
- return $this->putTransaction($jsonData->transaction);
- }
- case 'userDelete': return $this->userDelete($jsonData->user);
- case 'moveTransaction': return $this->moveTransaction($jsonData->pubkeys, $jsonData->memo, $jsonData->session_id);
- case 'checkUser': return $this->checkUser($jsonData->email, $jsonData->last_name);
- case 'getUsers' : return $this->getUsers($jsonData->page, $jsonData->limit);
- case 'getUserBalance': return $this->getUserBalance($jsonData->email, $jsonData->last_name);
- case 'errorInTransaction': return $this->errorInTransaction($jsonData);
- case 'updateReadNode': return $this->updateReadNode();
- case 'addUser' : return $this->addUser($jsonData->user);
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'unknown method for post', 'details' => $method]);
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post or get']);
- }
-
- private function addUser($newUser)
- {
- $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers');
- $entity = $stateUsersTable->newEntity();
- $required_fields = ['first_name', 'last_name', 'email', 'public_key', 'disabled'];
- foreach($required_fields as $required_field) {
- if(!isset($newUser->$required_field)) {
- return $this->returnJson(['state' => 'error', 'msg' => 'missing required field in addUser', 'details' => $required_field]);
- }
- if('public_key' == $required_field) {
- $entity->$required_field = hex2bin($newUser->public_hex);
- } else {
- $entity->$required_field = $newUser->$required_field;
- }
- }
- if($stateUsersTable->save($entity)) {
- return $this->returnJson(['state' => 'success']);
- } else {
- return $this->returnJson(['state' => 'error', 'msg' => 'error saving state_user', 'details' => $entity->getErrors()]);
- }
- }
-
- // Called from login server like a cron job every 10 minutes or after sending transaction to hedera
- private function updateReadNode()
- {
- $this->autoRender = false;
- $response = $this->response->withType('application/json');
-
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
- $last_transaction_query = $transactionsTable->find('all')->order(['id' => 'DESC']);
- $last_transaction_id = 0;
- if(!$last_transaction_query->isEmpty()) {
- $last_transaction_id = $last_transaction_query->first()->id;
- }
- $last_known_sequence_number = $last_transaction_id;
-
- if($last_transaction_query->count() < $last_transaction_id) {
- $last_transaction_id = $last_transaction_query->count();
- }
- //$last_transaction_id = 0;
-
-
- $group_alias = Configure::read('GroupAlias');
- $result = (array)$this->JsonRpcRequestClient->request('getTransactions', ['groupAlias' => $group_alias, 'lastKnownSequenceNumber' => $last_transaction_id]);
- if(isset($result['state']) && $result['state'] == 'error') {
- return $this->returnJson(['state' => 'error', 'msg' => 'jsonrpc error', 'details' => ['return' => $result, 'groupAlias' => $group_alias]]);
- }
- /* example
- $result = json_decode("[
- {
- \"record_type\":\"GRADIDO_TRANSACTION\",
- \"transaction\":{
- \"version_number\":1,
- \"signature\":{
- \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\",
- \"signature\":\"aed6725baacabf903e51f92503d49fa7e6b93c6402d56d9e3784be9a3366a77459213d858af46b579287aba8b1b63d206febce18bc80cec6fa63da6289e56403\"
- },
- \"signature_count\":1,
- \"hedera_transaction\":{
- \"consensusTimestamp\":{
- \"seconds\":1604392811,
- \"nanos\":172812
- },
- \"runningHash\":\"f9ccf04137be418c3117a28bb5add6dced9745bcab74b7a2f46c182c8c98eeabf0127c131d15ebea7d0ac376f5d2de45\",
- \"sequenceNumber\":94,
- \"runningHashVersion\":3
- },
- \"transaction_type\":\"ADD_USER\",
- \"add_user\":{
- \"user\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\"
- },
- \"result\":\"result\",
- \"parts\":1,
- \"memo\":\"\"
- }
- },
- {
- \"record_type\":\"GRADIDO_TRANSACTION\",
- \"transaction\":{
- \"version_number\":1,
- \"signature\":{
- \"pubkey\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\",
- \"signature\":\"3134adcd6cbccee17c2db398f91b6b6bdd098b6306fb2fa213eb9eb5a322af9078acca4d8b0383d4e906f3139eb3369e7c1ef0f3ac5fec724be0d085ba44af0b\"
- },
- \"signature_count\":2,
- \"hedera_transaction\":{
- \"consensusTimestamp\":{
- \"seconds\":1604392886,
- \"nanos\":1528
- },
- \"runningHash\":\"e1df5526331e3def11d6b652b8f248d20c250739b6eb98f1fe7b338901753d9d573a14601ba84f61318a48940b3c237a\",
- \"sequenceNumber\":95,
- \"runningHashVersion\":3
- },
- \"transaction_type\":\"ADD_USER\",
- \"add_user\":{
- \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\"
- },
- \"result\":\"result\",
- \"parts\":2,
- \"memo\":\"\"
- }
- },
- {
- \"record_type\":\"SIGNATURES\",
- \"signature\":[
- {
- \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\",
- \"signature\":\"401717e768617c0f3311931c34a61e66ab362599a0e2a48ae7c4955645aec6573773985dafb84a11bfaf2bc12140c30b2f8c8ee094bc35d609bc56d15b4e9f04\"
- }
- ]
- },
- {
- \"record_type\": \"GRADIDO_TRANSACTION\",
- \"transaction\":{
- \"version_number\":1,
- \"signature\":{
- \"pubkey\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\",
- \"signature\":\"99665dee9f2b475e426a2f449d0dae61924f6cf025903666ff72f2c7ef1af27523ebcd5fb684d17813fe7906b2f8cfe5ef4bdbb264ebf3ef80363491d9b86807\"
- },
- \"signature_count\":1,
- \"hedera_transaction\":{
- \"consensusTimestamp\":{
- \"seconds\":1604392904,
- \"nanos\":798541
- },
- \"runningHash\":\"f1fd03610a9788e9bac01e1efb8b99bafae450f9088cb940db954842e0799235c57d842be83d998e6c21786f77f967a7\",
- \"sequenceNumber\":96,
- \"runningHashVersion\":3
- },
- \"transaction_type\":\"GRADIDO_CREATION\",
- \"gradido_creation\":{
- \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\",
- \"new_balance\":10000000,
- \"prev_transfer_rec_num\":0,
- \"amount\":10000000
- },
- \"result\":\"result\",
- \"parts\":1,
- \"memo\":\"\"
- }
- },
- {
- \"record_type\": \"GRADIDO_TRANSACTION\",
- \"transaction\":{
- \"version_number\":1,
- \"signature\":{
- \"pubkey\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\",
- \"signature\":\"90125e0cfce61397d50ed9ba6c5df4cd4e0cf6fee8b10c70fee2898765982570d9a1208c222981429ae3c229e3fd36c2bf2333518cd0a4f0515937822e499d0b\"
- },
- \"signature_count\":1,
- \"hedera_transaction\":{
- \"consensusTimestamp\":{
- \"seconds\":1604392929,
- \"nanos\":52539
- },
- \"runningHash\":\"a4be8f54be4f806b61d31f6bd770d7742822f14f03ffe09c07f08bac3031a06d12de5e38fec5c307149c7faf6e9879b8\",
- \"sequenceNumber\":97,
- \"runningHashVersion\":3
- },
- \"transaction_type\":\"LOCAL_TRANSFER\",
- \"local_transfer\":{
- \"sender\":{
- \"user\":\"8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d\",
- \"new_balance\":9825500,
- \"prev_transfer_rec_num\":0
- },
- \"receiver\":{
- \"user\":\"2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b\",
- \"new_balance\":174500,
- \"prev_transfer_rec_num\":0
- },
- \"amount\":174500
- },
- \"result\":\"result\",
- \"parts\":1,
- \"memo\":\"\"
- }
- }
-]", true);*/
- $part_count = -1;
- $temp_record = new Record;
- $errors = [];
- foreach($result['blocks'] as $_record) {
- if(is_string($_record)) continue;
- $parse_result = $temp_record->parseRecord($_record);
-
- if($parse_result == true) {
- $sequenceNumber = $temp_record->getSequenceNumber();
- if($part_count == -1) {
- $part_count = $temp_record->getPartCount();
- }
- $part_count--;
-
- if($part_count == 0) {
- if($sequenceNumber > $last_known_sequence_number) {
- $finalize_result = $temp_record->finalize();
- if($finalize_result !== true) {
- $errors[] = ['msg' => 'error in finalize', 'record' => $_record, 'details' => $finalize_result, 'sequenceNumber' => $sequenceNumber];
- }
- }
-
- $temp_record = new Record;
- $part_count = -1;
- }
- } else {
- $temp_record = new Record;
- $part_count = -1;
- $errors[] = ['msg' => 'error in parse record', 'record' => $_record, 'details' => $parse_result];
- }
- }
- if(count($errors)) {
- return $this->returnJson(['state' => 'error', 'msg' => 'error in parsing records', 'details' => $errors]);
- }
- return $this->returnJson(['state' => 'success']);
- }
-
- /*
- * payload.set("created", created);
- * payload.set("id", task_model->getID());
- * payload.set("type", task_model->getTaskTypeString());
- * payload.set("public_key", user_model->getPublicKeyHex());
- * payload.set("error", error);
- * payload.set("errorMessage", errorDetails);
- */
- //! \param $transactionCreated creation of transaction in timestamp in seconds
- //! -1 if transaction couldn't decode
- //! \param $transactionBodyBase64Sha256 generic hash from transaction body serialized and converted to base64
- //! using sodium_crypto_generichash to calculate
- // hash also in base64 format
- //! \param $error short error name in user language
- //! \param $errorDetails more detailed error message in user language
- private function errorInTransaction($jsonData) {
- $stateErrorTable = TableRegistry::getTableLocator()->get('StateErrors');
- $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers');
- $transactionTypesTable = TableRegistry::getTableLocator()->get('TransactionTypes');
- $stateError = $stateErrorTable->newEntity();
- //
- $pubkey = hex2bin($jsonData->public_key);
- $user_query = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $pubkey]);
- if($user_query->count() != 1) {
- return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'user pubkey hex:' . $jsonData->public_key]);
- }
- $stateError->state_user_id = $user_query->first()->id;
- //$stateError->transaction_type_id
- // TODO:
- // - show state errors in navi_notify.ctp
- $transaction_type_query = $transactionTypesTable->find('all')->select(['id'])->where(['name' => $jsonData->type]);
- if($transaction_type_query->count() != 1) {
- return $this->returnJson(['state' => 'error', 'msg' => 'transaction type not found', 'details' => 'transaction type name: ' . $jsonData->type]);
- }
- $stateError->transaction_type_id = $transaction_type_query->first()->id;
- $stateError->created = $jsonData->created;
- $stateError->message_json = json_encode(['task_id' => $jsonData->id, 'error' => $jsonData->error, 'errorMessage' => $jsonData->errorMessage]);
- if(!$stateErrorTable->save($stateError)) {
- $this->returnJsonSaveError($stateError, [
- 'state' => 'error',
- 'msg' => 'error saving state_error in db',
- 'details' => json_encode($stateError->getErrors())
- ]);
- }
- return $this->returnJson(['state' => 'success']);
- }
-
- private function sendEMailTransactionFailed($transaction, $reason_type)
- {
- $disable_email = Configure::read('disableEmail', false);
- if($disable_email) {
- return;
- }
- $transaction_body = $transaction->getTransactionBody();
- $senderUser = $transaction->getFirstSigningUser();
- if($transaction_body != null) {
- $transaction_type_name = $transaction_body->getTransactionTypeName();
-
- if($transaction_type_name === 'transfer') {
- $senderUser = $transaction_body->getSpecificTransaction()->getSenderUser();
- }
- }
- // send notification email
- $noReplyEmail = Configure::read('noReplyEmail');
- if($senderUser) {
- try {
- $email = new Email();
- $emailViewBuilder = $email->viewBuilder();
- $emailViewBuilder->setTemplate('notificationTransactionFailed')
- ->setVars(['user' => $senderUser, 'transaction' => $transaction, 'reason' => $reason_type]);
- $receiverNames = $senderUser->getNames();
- if($receiverNames == '' || $senderUser->email == '') {
- $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $senderUser->id);
- return false;
- }
- $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)'])
- ->setTo([$senderUser->email => $senderUser->getNames()])
- ->setSubject(__('Gradido Transaktion fehlgeschlagen!'))
- ->send();
- } catch(Exception $e) {
- $this->addAdminError('JsonRequestController', 'sendEMailTransactionFailed', [$e->getMessage(), $reason_type], $senderUser->id);
-
- }
- }
- }
-
- private function putTransaction($transactionBase64) {
- $transaction = new Transaction($transactionBase64);
-
- if($transaction->hasErrors()) {
- $this->sendEMailTransactionFailed($transaction, 'parse');
- return $this->returnJson(['state' => 'error', 'msg' => 'error parsing transaction', 'details' => $transaction->getErrors()]);
- }
-
- if(!$transaction->validate()) {
- //$transaction_details
- $this->sendEMailTransactionFailed($transaction, 'validate');
- return $this->returnJsonSaveError($transaction, [
- 'state' => 'error',
- 'msg' => 'error validate transaction',
- 'details' => $transaction->getErrors()
- ]);
- }
-
- if ($transaction->save()) {
- $result = ['state' => 'success'];
- if($transaction->hasWarnings()) {
- $result['warnings'] = $transaction->getWarnings();
- }
- // success
- return $this->returnJson($result);
- } else {
-
- $this->sendEMailTransactionFailed($transaction, 'save');
- return $this->returnJsonSaveError($transaction, [
- 'state' => 'error',
- 'msg' => 'error saving transaction in db',
- 'details' => json_encode($transaction->getErrors())
- ]);
- }
- }
-
- private function moveTransaction($pubkeys, $memo, $session_id) {
- //$pubkeys->sender
- //$pubkeys->receiver
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
- $user = $stateUserTable->find('all')->where(['public_key' => hex2bin($pubkeys->sender)])->contain(['StateBalances']);
- if(!$user->count()) {
- return $this->returnJson(['state' => 'not found', 'msg' => 'user not found or empty balance']);
- }
- $amountCent = $user->first()->state_balances[0]->amount;
- //var_dump($user->first());
- $builderResult = TransactionTransfer::build(
- $amountCent,
- $memo,
- $pubkeys->receiver,
- $pubkeys->sender
- );
- if($builderResult['state'] === 'success') {
-
- $http = new Client();
- try {
- $loginServer = Configure::read('LoginServer');
- $url = $loginServer['host'] . ':' . $loginServer['port'];
-
- $response = $http->post($url . '/checkTransaction', json_encode([
- 'session_id' => $session_id,
- 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()),
- 'balance' => $amountCent
- ]), ['type' => 'json']);
- $json = $response->getJson();
- if($json['state'] != 'success') {
- if($json['msg'] == 'session not found') {
- return $this->returnJson(['state' => 'error', 'msg' => 'session not found']);
- } else {
- //$this->Flash->error(__('login server return error: ' . json_encode($json)));
- return $this->returnJson(['state' => 'error', 'msg' => 'login server return error', 'details' => $json]);
- }
- } else {
- return $this->returnJson(['state' => 'success']);
- }
-
- } catch(\Exception $e) {
- $msg = $e->getMessage();
- //$this->Flash->error(__('error http request: ') . $msg);
- return $this->returnJson(['state' => 'error', 'msg' => 'error http request', 'details' => $msg]);
- }
-
- } else {
- return $this->returnJson(['state' => 'error', 'msg' => 'error building transaction']);
- }
- }
-
- private function userDelete($userPubkeyHex) {
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
- $user = $stateUserTable->find('all')->where(['public_key' => hex2bin($userPubkeyHex)]);
- if(!$user || $user->count == 0) {
- return $this->returnJson(['state' => 'error', 'msg' => 'user not found']);
- }
-
- }
-
- private function checkUser($email, $last_name) {
- $userTable = TableRegistry::getTableLocator()->get('Users');
- $user = $userTable->find('all')
- ->where(['email' => $email])
- ->contain([])
- ->select(['first_name', 'last_name', 'email']);
- if(!$user->count()) {
- return $this->returnJson(['state' => 'not found', 'msg' => 'user not found']);
- }
- if($user->count() == 1 && $user->first()->last_name == $last_name) {
- return $this->returnJson(['state' => 'success']);
- }
- return $this->returnJson(['state' => 'not identical', 'user' => $user->toArray()]);
- }
-
- private function getUserBalance($email, $last_name) {
-
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
- $stateUsers = $stateUserTable->find('all')->where(['OR' => ['email' => $email, 'last_name' => $last_name]])->contain(['StateBalances']);
- $gdds = [];
- foreach($stateUsers as $stateUser) {
- foreach($stateUser->state_balances as $stateBalance) {
- if(!isset($gdds[$stateUser->email])) {
- $gdds[$stateUser->email] = [];
- }
- if(!isset($gdds[$stateUser->email][$stateUser->last_name])) {
- $gdds[$stateUser->email][$stateUser->last_name] = 0;
- }
- $gdds[$stateUser->email][$stateUser->last_name] += $stateBalance->amount;
- }
- }
- return $this->returnJson(['state' => 'success', 'gdds' => $gdds]);
- }
-
- private function getUsers($page, $count) {
-
- $userTable = TableRegistry::getTableLocator()->get('Users');
- $this->paginate = [
- 'limit' => $count,
- 'page' => $page
- ];
- $usersQuery = $userTable->find('all')
- ->select(['first_name', 'last_name', 'email'])
- ->order(['id']);
- try {
- return $this->returnJson(['state' => 'success', 'users' => $this->paginate($usersQuery)]);
- } catch (Exception $ex) {
- return $this->returnJson(['state' => 'exception', 'msg' => 'error paginate users', 'details' => $ex->getMessage()]);
- }
-
-
- //return $this->returnJson(['state' => 'success', 'users' => $users->toArray()]);
-
- }
-
- private function getRunningUserTasks() {
- $session = $this->getRequest()->getSession();
- $state_user_email = $session->read('StateUser.email');
- $requestResult = $this->JsonRequestClient->getRunningUserTasks($state_user_email);;
- return $this->returnJson($requestResult);
- }
-
-
- private function returnJsonSaveError($transaction, $errorArray) {
- $json = json_encode($errorArray);
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
- $pub = $transaction->getFirstPublic();
- $stateUserQuery = $stateUserTable
- ->find('all')
- ->where(['public_key' => $pub])
- ->contain(false);
- if($stateUserQuery->count() == 1) {
- $stateErrorsTable = TableRegistry::getTableLocator()->get('StateErrors');
- $stateErrorEntity = $stateErrorsTable->newEntity();
- $stateErrorEntity->state_user_id = $stateUserQuery->first()->id;
- $stateErrorEntity->transaction_type_id = $transaction->getTransactionBody()->getTransactionTypeId();
- $stateErrorEntity->message_json = $json;
- $stateErrorsTable->save($stateErrorEntity);
- } else {
- $errorArray['user_error'] = "user with $pub not found";
- $json = json_encode($errorArray);
- }
-
- return $this->returnJsonEncoded($json);
- }
-
-
-
-}
diff --git a/community_server/src/Controller/OperatorTypesController.php b/community_server/src/Controller/OperatorTypesController.php
deleted file mode 100644
index 41db53f53..000000000
--- a/community_server/src/Controller/OperatorTypesController.php
+++ /dev/null
@@ -1,106 +0,0 @@
-paginate($this->OperatorTypes);
-
- $this->set(compact('operatorTypes'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Operator Type id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $operatorType = $this->OperatorTypes->get($id, [
- 'contain' => ['Operators']
- ]);
-
- $this->set('operatorType', $operatorType);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $operatorType = $this->OperatorTypes->newEntity();
- if ($this->request->is('post')) {
- $operatorType = $this->OperatorTypes->patchEntity($operatorType, $this->request->getData());
- if ($this->OperatorTypes->save($operatorType)) {
- $this->Flash->success(__('The operator type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The operator type could not be saved. Please, try again.'));
- }
- $this->set(compact('operatorType'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Operator Type id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $operatorType = $this->OperatorTypes->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $operatorType = $this->OperatorTypes->patchEntity($operatorType, $this->request->getData());
- if ($this->OperatorTypes->save($operatorType)) {
- $this->Flash->success(__('The operator type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The operator type could not be saved. Please, try again.'));
- }
- $this->set(compact('operatorType'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Operator Type id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $operatorType = $this->OperatorTypes->get($id);
- if ($this->OperatorTypes->delete($operatorType)) {
- $this->Flash->success(__('The operator type has been deleted.'));
- } else {
- $this->Flash->error(__('The operator type could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/OperatorsController.php b/community_server/src/Controller/OperatorsController.php
deleted file mode 100644
index 974151a7b..000000000
--- a/community_server/src/Controller/OperatorsController.php
+++ /dev/null
@@ -1,236 +0,0 @@
-Auth->allow(['ajaxSave', 'ajaxLoad', 'ajaxDelete']);
- }
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $this->paginate = [
- 'contain' => ['OperatorTypes']
- ];
- $operators = $this->paginate($this->Operators);
-
- $this->set(compact('operators'));
- }
-
- public function ajaxSave()
- {
- if ($this->request->is('post')) {
-
- $operatorTypeName = $this->request->getData('operator_type_name');
- $username = $this->request->getData('username');
- $pubkey_bin = base64_decode($this->request->getData('user_pubkey'));
- $data = base64_decode($this->request->getData('data_base64'));
- $sign = base64_decode($this->request->getData('sign'));
-
- //$publicKey_hex = bin2hex($pubkey_bin);
- //$signature_hex = bin2hex($sign);
-
- if(!sodium_crypto_sign_verify_detached($sign, $data, $pubkey_bin)) {
- return $this->returnJson([
- 'state' => 'wrong signature',
- /* 'details' => [
- 'pubkey' => $publicKey_hex,
- 'sign' => $signature_hex,
- 'data' => bin2hex($data)
- ]
-*/
- ]);
- }
-
- $operatorTypeId = $this->Operators->OperatorTypes->
- find()
- ->where(['name' => $operatorTypeName])
- ->select(['id'])
- ->first();
-
- // load operator from db if already exist
- $operator = $this->Operators
- ->find()
- ->where([
- 'operator_type_id' => $operatorTypeId->id,
- 'username' => $username,
- 'user_pubkey' => $pubkey_bin])
- ->first();
- if(!$operator) {
- // create new entity
- $operator = $this->Operators->newEntity();
- } else {
- // check if request has valid signature
-
- }
-
- $operator = $this->Operators->patchEntity($operator, $this->request->getData());
- $operator->user_pubkey = $pubkey_bin;
- $operator->operator_type_id = $operatorTypeId->id;
- if ($this->Operators->save($operator)) {
- return $this->returnJson(['state' => 'success']);
- }
- return $this->returnJson(['state' => 'error', 'details' => $operator->getErrors()]);
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
- public function ajaxLoad()
- {
- if ($this->request->is('get')) {
- $username = $this->request->getQuery('username');
- $operators = $this->Operators
- ->find()
- ->where(['username' => $username])
- ->contain(['OperatorTypes'])
- ->select(['data_base64', 'OperatorTypes.name'])
- ->toArray();
- ;
- if($operators) {
- return $this->returnJson(['state' => 'success', 'operators' => $operators]);
- } else {
- return $this->returnJson(['state' => 'not found']);
- }
-
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
- function ajaxDelete() {
- if ($this->request->is('delete')) {
- $operatorTypeName = $this->request->getData('operator_type_name');
- $username = $this->request->getData('username');
- $pubkey_bin = base64_decode($this->request->getData('user_pubkey'));
- $sign = base64_decode($this->request->getData('sign'));
-
- $operatorTypeId = $this->Operators->OperatorTypes->
- find()
- ->where(['name' => $operatorTypeName])
- ->select(['id'])
- ->first();
-
- // load operator from db if already exist
- $operator = $this->Operators
- ->find()
- ->where([
- 'operator_type_id' => $operatorTypeId->id,
- 'username' => $username,
- 'user_pubkey' => $pubkey_bin])
- ->first();
- if(!$operator) {
- return $this->returnJson(['state' => 'error', 'msg' => 'not found']);
- } else {
- $data = base64_decode($operator->data_base64);
- // check if request has valid signature
- if(!sodium_crypto_sign_verify_detached($sign, $data, $pubkey_bin)) {
- return $this->returnJson(['state' => 'error', 'msg' => 'wrong signature']);
- }
- }
- if ($this->Operators->delete($operator)) {
- return $this->returnJson(['state' => 'success']);
- }
- return $this->returnJson(['state' => 'error', 'details' => $operator->getErrors()]);
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
- /**
- * View method
- *
- * @param string|null $id Operator id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $operator = $this->Operators->get($id, [
- 'contain' => ['OperatorTypes']
- ]);
-
- $this->set('operator', $operator);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $operator = $this->Operators->newEntity();
- if ($this->request->is('post')) {
- $operator = $this->Operators->patchEntity($operator, $this->request->getData());
- if ($this->Operators->save($operator)) {
- $this->Flash->success(__('The operator has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The operator could not be saved. Please, try again.'));
- }
- $operatorTypes = $this->Operators->OperatorTypes->find('list', ['limit' => 200]);
- $this->set(compact('operator', 'operatorTypes'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Operator id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $operator = $this->Operators->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $operator = $this->Operators->patchEntity($operator, $this->request->getData());
- if ($this->Operators->save($operator)) {
- $this->Flash->success(__('The operator has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The operator could not be saved. Please, try again.'));
- }
- $operatorTypes = $this->Operators->OperatorTypes->find('list', ['limit' => 200]);
- $this->set(compact('operator', 'operatorTypes'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Operator id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $operator = $this->Operators->get($id);
- if ($this->Operators->delete($operator)) {
- $this->Flash->success(__('The operator has been deleted.'));
- } else {
- $this->Flash->error(__('The operator could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/PagesController.php b/community_server/src/Controller/PagesController.php
deleted file mode 100644
index 69f57356b..000000000
--- a/community_server/src/Controller/PagesController.php
+++ /dev/null
@@ -1,86 +0,0 @@
-Auth->allow(['display']);
- }
-
- /**
- * Displays a view
- *
- * @param array ...$path Path segments.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Http\Exception\ForbiddenException When a directory traversal attempt.
- * @throws \Cake\Http\Exception\NotFoundException When the view file could not
- * be found or \Cake\View\Exception\MissingTemplateException in debug mode.
- */
- public function display(...$path)
- {
-
- $count = count($path);
- if (!$count) {
- return $this->redirect('/');
- }
- if (in_array('..', $path, true) || in_array('.', $path, true)) {
- throw new ForbiddenException();
- }
- $page = $subpage = null;
-
- if (!empty($path[0])) {
- $page = $path[0];
- }
- if (!empty($path[1])) {
- $subpage = $path[1];
- }
- /*$session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- $login_server_session = $this->request->getCookie('GRADIDO_LOGIN', '');*/
- if($page == "vue" || $page == "vue-dev") {
- $this->viewBuilder()->setLayout(false);
- }
- $this->set(compact('page', 'subpage'));
-
- try {
- $this->render(implode('/', $path));
- } catch (MissingTemplateException $exception) {
- if (Configure::read('debug')) {
- throw $exception;
- }
- throw new NotFoundException();
- }
- }
-}
diff --git a/community_server/src/Controller/ProfileController.php b/community_server/src/Controller/ProfileController.php
deleted file mode 100644
index 2a378e076..000000000
--- a/community_server/src/Controller/ProfileController.php
+++ /dev/null
@@ -1,206 +0,0 @@
-loadComponent('JsonRequestClient');
- $this->Auth->allow(['index', 'edit']);
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->
- add(new NaviHierarchyEntry(__('Mein Profil'), 'Profile', 'index', true))
- );
- }
- /**
- * Get binary file data from request data
- *
- * @return binary data
- */
- protected function getFileData($requestData)
- {
- $binaryFileData = null;
- // Get a list of UploadedFile objects
- $file = $requestData['profile_img'];
- // Read the file data.
- $type = $file['type'];
- $error = $file['error'];
- if ($error === 0 && strpos($type, 'image/') === 0) {
- $path = new File($file['tmp_name']);
- $binaryFileData = $path->read(true, 'r');
- $this->log("binaryFileData: ".$binaryFileData, 'debug');
- }
- return $binaryFileData;
- }
- /**
- * Update Profile Data
- *
- * ...which is spread over two tables, plus needs to be promoted to the Login Server.
- *
- * @throws Exception
- */
- protected function updateProfileData($requestData, $userId, $communityProfile)
- {
- // Update Profile with Form Data!
- $usersTable = TableRegistry::getTableLocator()->get('StateUsers');
- $stateUserQuery = $usersTable
- ->find('all')
- ->select(['id', 'first_name', 'last_name'])
- ->where(['id' => $userId]);
-
- if ($stateUserQuery->count() == 1) {
- $stateUser = $stateUserQuery->first();
- $stateUser = $usersTable->patchEntity($stateUser, $requestData);
-
- $profilesTable = TableRegistry::getTableLocator()->get('CommunityProfiles');
- // Save old binary data, because the file input is always empty, in HTML!
- $oldBinaryData = $communityProfile['profile_img'];
-
- $communityProfile = $profilesTable->patchEntity($communityProfile, $requestData);
- $communityProfile['state_user_id'] = $userId;
-
- $binaryFileData = $this->getFileData($requestData);
- if ($binaryFileData !== null) {
- $this->log("CommunityProfile: Writing binary img data.", 'debug');
- $communityProfile['profile_img'] = $binaryFileData;
- } else {
- $this->log("CommunityProfile: Nothing uploaded!", 'debug');
- $communityProfile['profile_img'] = $oldBinaryData;
- }
- if ($profilesTable->save($communityProfile) &&
- $usersTable->save($stateUser)
- ) {
- $session = $this->getRequest()->getSession();
- $session_id = $session->read('session_id');
- $email = $session->read('StateUser.email');
- $this->returnJson(
- $this->JsonRequestClient->sendRequest(
- json_encode(
- [
- 'session_id' => $session_id,
- 'email' => $email,
- 'update' => [
- 'User.first_name' => $requestData['first_name'],
- 'User.last_name' => $requestData['last_name']
- ]
- ]
- ),
- '/updateUserInfos'
- )
- );
- $this->Flash->success(__('Dein Profil wurde aktualisiert!'));
- }
- } else {
- $this->Flash->error(__("Non-recoverable database problem - state_user doesn't exist or not unique!"));
- }
- return [$stateUser, $communityProfile];
- }
- /**
- * Get or create CommunityProfile
- *
- * @return \Cake\ORM\CommunityProfile
- */
- protected function getCommunityProfile($userId)
- {
- $profilesTable = TableRegistry::getTableLocator()->get('CommunityProfiles');
- $communityProfileQuery = $profilesTable
- ->find('all')
- ->select(['id', 'profile_img', 'profile_desc'])
- ->where(['state_user_id' => $userId]);
- if ($communityProfileQuery->count() != 1) {
- $communityProfile = $profilesTable->newEntity();
- if ($profilesTable->save($communityProfile)) {
- $this->log("CommunityProfile created.", 'debug');
- }
- } else {
- $communityProfile = $communityProfileQuery->first();
- }
- return $communityProfile;
- }
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if ($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- $communityProfile = $session->read('CommunityProfile');
- if (!$communityProfile) {
- $this->log("CommunityProfile not found in session! Loading or creating new one.", 'debug');
- $session->write('CommunityProfile', $this->getCommunityProfile($user['id']));
- }
- $this->set('user', $user);
- $this->set('communityProfile', $communityProfile);
- $this->set('timeUsed', microtime(true) - $startTime);
- }
- /**
- * Edit method
- *
- * @return \Cake\Http\Response|null
- */
- public function edit()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
-
- $user = $session->read('StateUser');
- $communityProfile = $session->read('CommunityProfile');
- if (!$user) {
- $result = $this->requestLogin();
- if ($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- }
- if (!$communityProfile) {
- $this->log("CommunityProfile not found in session! Loading or creating new one.", 'debug');
- $session->write('CommunityProfile', $this->getCommunityProfile($user['id']));
- }
-
- $profileForm = new ProfileForm();
- if ($this->request->is('post')) {
- $requestData = $this->request->getData();
- if ($profileForm->validate($requestData)) {
- [$stateUser, $communityProfile] = $this->updateProfileData($requestData, $user['id'], $communityProfile);
- $user['first_name'] = $stateUser['first_name'];
- $user['last_name'] = $stateUser['last_name'];
- $session->write('StateUser.first_name', $stateUser['first_name']);
- $session->write('StateUser.last_name', $stateUser['last_name']);
- $session->write('CommunityProfile', $communityProfile);
- return $this->redirect(['action' => 'index']);
- } else {
- $this->Flash->error(__('Something was invalid, please try again!'));
- }
- }
- $this->set('user', $user);
- $this->set('communityProfile', $communityProfile);
- $this->set('profileForm', $profileForm);
- $this->set('timeUsed', microtime(true) - $startTime);
- }
-}
diff --git a/community_server/src/Controller/RolesController.php b/community_server/src/Controller/RolesController.php
deleted file mode 100644
index 80aa493d3..000000000
--- a/community_server/src/Controller/RolesController.php
+++ /dev/null
@@ -1,108 +0,0 @@
-paginate($this->Roles);
-
- $this->set(compact('roles'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Role id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $role = $this->Roles->get($id, [
- 'contain' => [],
- ]);
-
- $this->set('role', $role);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $role = $this->Roles->newEntity();
- if ($this->request->is('post')) {
- $role = $this->Roles->patchEntity($role, $this->request->getData());
- if ($this->Roles->save($role)) {
- $this->Flash->success(__('The role has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The role could not be saved. Please, try again.'));
- }
- $this->set(compact('role'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Role id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $role = $this->Roles->get($id, [
- 'contain' => [],
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $role = $this->Roles->patchEntity($role, $this->request->getData());
- if ($this->Roles->save($role)) {
- $this->Flash->success(__('The role has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The role could not be saved. Please, try again.'));
- }
- $this->set(compact('role'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Role id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $role = $this->Roles->get($id);
- if ($this->Roles->delete($role)) {
- $this->Flash->success(__('The role has been deleted.'));
- } else {
- $this->Flash->error(__('The role could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/ServerUsersController.php b/community_server/src/Controller/ServerUsersController.php
deleted file mode 100644
index 7255eee0f..000000000
--- a/community_server/src/Controller/ServerUsersController.php
+++ /dev/null
@@ -1,132 +0,0 @@
-Auth->allow(['add', 'edit']);
- $this->Auth->deny('index');
- }
-
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $serverUsers = $this->paginate($this->ServerUsers);
- $this->set(compact('serverUsers'));
- }
-
- public function login()
- {
- $startTime = microtime(true);
- if ($this->request->is('post')) {
- $user = $this->Auth->identify();
- if ($user) {
- $this->Auth->setUser($user);
- return $this->redirect($this->Auth->redirectUrl());
- }
- $this->Flash->error(__('Invalid username or password, try again'));
- }
- $this->set('timeUsed', microtime(true) - $startTime);
- }
-
- public function logout()
- {
- return $this->redirect($this->Auth->logout());
- }
-
- /**
- * View method
- *
- * @param string|null $id Server User id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $serverUser = $this->ServerUsers->get($id, [
- 'contain' => []
- ]);
-
- $this->set('serverUser', $serverUser);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $serverUser = $this->ServerUsers->newEntity();
- if ($this->request->is('post')) {
- $serverUser = $this->ServerUsers->patchEntity($serverUser, $this->request->getData());
- if ($this->ServerUsers->save($serverUser)) {
- $this->Flash->success(__('The server user has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The server user could not be saved. Please, try again.'));
- }
- $this->set(compact('serverUser'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Server User id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $serverUser = $this->ServerUsers->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $serverUser = $this->ServerUsers->patchEntity($serverUser, $this->request->getData());
- if ($this->ServerUsers->save($serverUser)) {
- $this->Flash->success(__('The server user has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The server user could not be saved. Please, try again.'));
- }
- $this->set(compact('serverUser'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Server User id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $serverUser = $this->ServerUsers->get($id);
- if ($this->ServerUsers->delete($serverUser)) {
- $this->Flash->success(__('The server user has been deleted.'));
- } else {
- $this->Flash->error(__('The server user could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateBalancesController.php b/community_server/src/Controller/StateBalancesController.php
deleted file mode 100644
index 249b6cb06..000000000
--- a/community_server/src/Controller/StateBalancesController.php
+++ /dev/null
@@ -1,399 +0,0 @@
-Auth->allow(['add', 'edit']);
- $this->Auth->allow(['overview', 'overviewGdt', 'ajaxListTransactions', 'ajaxGdtOverview', 'ajaxGetBalance', 'ajaxGdtTransactions']);
- $this->loadComponent('JsonRequestClient');
- }
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $this->paginate = [
- 'contain' => ['StateUsers']
- ];
- $stateBalances = $this->paginate($this->StateBalances);
-
- $this->set(compact('stateBalances'));
- }
-
-
-
- public function overview()
- {
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->
- add(new NaviHierarchyEntry(__('Kontoübersicht'), 'StateBalances', 'overview', true))
- );
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if ($result !== true) {
- return $result;
- }
-
- $user = $session->read('StateUser');
- $update_balance_result = $this->StateBalances->updateBalances($user['id']);
- if($update_balance_result['success'] !== true) {
- $this->addAdminError('StateBalances', 'overview', $update_balance_result, $user['id']);
- }
-
- $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances');
- $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions');
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
-
- $stateBalancesTable->updateBalances($user['id']);
- $gdtSum = 0;
- $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi');
- if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) {
- $gdtSum = intval($gdtEntries['data']['sum']);
- } else {
- $this->addAdminError('StateBalancesController', 'overview', $gdtEntries, $user['id'] ? $user['id'] : 0);
- }
-
-
- $stateUserTransactionsQuery = $stateUserTransactionsTable
- ->find()
- ->where(['state_user_id' => $user['id']])
- ->order(['balance_date' => 'ASC'])
- ->contain([])
- ;
- $decay = true;
- $transactions = [];
- if($stateUserTransactionsQuery->count() > 0) {
- $transactions_with_decay = $transactionsTable->listTransactionsHumanReadable($stateUserTransactionsQuery->toArray(), $user, $decay);
- foreach($transactions_with_decay as $tr) {
- if(isset($tr['decay'])) {
- $tr['decay']['type'] = 'decay';
- $tr['decay']['memo'] = '';
- $transactions[] = $tr['decay'];
- }
- $transactions[] = $tr;
- }
- }
-
- $state_balance = $stateBalancesTable->find()->where(['state_user_id' => $user['id']])->first();
-
- $body = [
- 'state' => 'success',
- 'transactions' => $transactions,
- 'transactionExecutingCount' => $session->read('Transactions.executing'),
- 'count' => count($transactions),
- 'gdtSum' => $gdtSum,
- 'timeUsed' => microtime(true) - $startTime
- ];
- $now = new FrozenTime();
- $body['decay_date'] = $now;
-
- if(!$state_balance) {
- $balance = 0.0;
- } else {
- $balance = $stateBalancesTable->calculateDecay($state_balance->amount, $state_balance->record_date, $now);
- //$balance = $state_balance->partDecay($now);
- }
- $calculated_balance = 0;
- foreach($transactions as $transaction) {
- if($transaction['type'] == 'decay' || $transaction['type'] == 'send') {
- $calculated_balance -= $transaction['balance'];
- } else {
- $calculated_balance += $transaction['balance'];
- }
- }
-
- $this->set('calculated_balance', $calculated_balance);
-
- $this->set('transactions', array_reverse($transactions));
- $this->set('transactionExecutingCount', $session->read('Transactions.executing'));
- $this->set('balance', $balance);
- $this->set('timeUsed', microtime(true) - $startTime);
- $this->set('gdtSum', $gdtSum);
- }
-
-
- public function ajaxGdtOverview()
- {
- $gdtSum = 0;
- $gdtCount = -1;
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
-
- if(!$user) {
- return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']);
- }
- $gdtEntries = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'sumPerEmailApi');
-
- if('success' == $gdtEntries['state'] && 'success' == $gdtEntries['data']['state']) {
- $gdtSum = intval($gdtEntries['data']['sum']);
- if(isset($gdtEntries['data']['count'])) {
- $gdtCount = intval($gdtEntries['data']['count']);
- }
- } else {
- if($user) {
- $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, $user['id']);
- } else {
- $this->addAdminError('StateBalancesController', 'ajaxGdtOverview', $gdtEntries, 0);
- }
- }
-
- return $this->returnJson([
- 'state' => 'success',
- 'transactions' => $transactions,
- 'transactionExecutingCount' => $session->read('Transaction.executing'),
- 'count' => $all_user_transactions_count
- ]);
- }
-
-
- public function overviewGdt()
- {
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->
- add(new NaviHierarchyEntry(__('GDT Kontoübersicht'), 'StateBalances', 'overviewGdt', true))
- );
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if ($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- $requestResult = $this->JsonRequestClient->sendRequestGDT([
- 'email' => $user['email'],
- 'page' => 1,
- 'count' => 100,
- 'orderDirection' => 'DESC'
- ], 'GdtEntries' . DS . 'listPerEmailApi');
-
- //var_dump($requestResult);
- if('success' === $requestResult['state'] && 'success' === $requestResult['data']['state'])
- {
- $moreEntrysAsShown = false;
- if(isset($requestResult['data']['count'])) {
- if($requestResult['data']['count'] > 100) {
- $moreEntrysAsShown = true;
- }
- } else {
- $moreEntrysAsShown = $requestResult['data']['moreEntrysAsShown'];
- }
- //var_dump(array_keys($requestResult['data']));
- if(isset($requestResult['data']['gdtEntries'])) {
- $ownEntries = $requestResult['data']['gdtEntries'];
- } else {
- $ownEntries = $requestResult['data']['ownEntries'];
- }
- //$gdtEntries = $requestResult['data']['entries'];
-
- $gdtSum = 0;
- foreach ($ownEntries as $i => $gdtEntry) {
- $gdtSum += $gdtEntry['gdt'];
- //echo "index: $i ";
- //var_dump($gdtEntry);
- }
- if (isset($requestResult['data']['connectEntrys'])) {
- $connectEntries = $requestResult['data']['connectEntrys'];
-
- foreach ($connectEntries as $entry) {
- //if(!$count) var_dump($entry);
- //$count++;
- $gdtSum += $entry['connect']['gdt_entry']['gdt'];
- }
- $this->set('connectEntries', $connectEntries);
- }
-
- //echo "gdtSum: $gdtSum ";
- $this->set('gdtSum', $gdtSum);
- $this->set('ownEntries', $ownEntries);
- $this->set('moreEntrysAsShown', $moreEntrysAsShown);
- $this->set('user', $user);
-
- if (isset($requestResult['data']['publishers'])) {
- $publishers = $requestResult['data']['publishers'];
- $this->set('publishers', $publishers);
- }
- } else {
- $this->addAdminError('StateBalancesController', 'overviewGdt', $requestResult, $user['id']);
- $this->Flash->error(__('Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!'));
- }
- }
-
- public function ajaxGdtTransactions()
- {
- $startTime = microtime(true);
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
- if(!$user) {
- return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']);
- }
-
- $requestResult = $this->JsonRequestClient->sendRequestGDT(['email' => $user['email']], 'GdtEntries' . DS . 'listPerEmailApi');
- $connectEntries = [];
- $publishers = [];
-
- //var_dump($requestResult);
- if('success' === $requestResult['state'] && 'success' === $requestResult['data']['state']) {
-
- //var_dump(array_keys($requestResult['data']));
- $ownEntries = $requestResult['data']['ownEntries'];
- //$gdtEntries = $requestResult['data']['entries'];
-
- $gdtSum = 0;
- foreach ($ownEntries as $i => $gdtEntry) {
- $gdtSum += $gdtEntry['gdt'];
- //echo "index: $i ";
- //var_dump($gdtEntry);
- }
- if (isset($requestResult['data']['connectEntrys'])) {
- $connectEntries = $requestResult['data']['connectEntrys'];
-
- foreach ($connectEntries as $entry) {
- //if(!$count) var_dump($entry);
- //$count++;
- $gdtSum += $entry['connect']['gdt_entry']['gdt'];
- }
- }
-
- //echo "gdtSum: $gdtSum ";
-
- if (isset($requestResult['data']['publishers'])) {
- $publishers = $requestResult['data']['publishers'];
- }
- } else {
- $this->addAdminError('StateBalancesController', 'ajaxGdtTransactions', $requestResult, $user['id']);
- //$this->Flash->error(__('Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!'));
- return $this->returnJson(['state' => 'error', 'msg' => 'error from gdt server', 'details' => $requestResult]);
- }
-
-
- return $this->returnJson([
- 'state' => 'success',
- 'gdtSum' => $gdtSum,
- 'ownEntries' => $ownEntries,
- 'connectEntries' => $connectEntries,
- 'publishers' => $publishers,
- 'gdtSumPerEmail' => $requestResult['data']['gdtSumPerEmail'],
- 'moreEntrysAsShown' => $requestResult['data']['moreEntrysAsShown'],
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
-
- public function sortTransactions($a, $b)
- {
- if ($a['date'] == $b['date']) {
- return 0;
- }
- return ($a['date'] > $b['date']) ? -1 : 1;
- }
-
- /**
- * View method
- *
- * @param string|null $id State Balance id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateBalance = $this->StateBalances->get($id, [
- 'contain' => ['StateUsers']
- ]);
-
- $this->set('stateBalance', $stateBalance);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateBalance = $this->StateBalances->newEntity();
- if ($this->request->is('post')) {
- $stateBalance = $this->StateBalances->patchEntity($stateBalance, $this->request->getData());
- if ($this->StateBalances->save($stateBalance)) {
- $this->Flash->success(__('The state balance has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state balance could not be saved. Please, try again.'));
- }
- $stateUsers = $this->StateBalances->StateUsers->find('list', ['limit' => 200]);
- $this->set(compact('stateBalance', 'stateUsers'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State Balance id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateBalance = $this->StateBalances->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateBalance = $this->StateBalances->patchEntity($stateBalance, $this->request->getData());
- if ($this->StateBalances->save($stateBalance)) {
- $this->Flash->success(__('The state balance has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state balance could not be saved. Please, try again.'));
- }
- $stateUsers = $this->StateBalances->StateUsers->find('list', ['limit' => 200]);
- $this->set(compact('stateBalance', 'stateUsers'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State Balance id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateBalance = $this->StateBalances->get($id);
- if ($this->StateBalances->delete($stateBalance)) {
- $this->Flash->success(__('The state balance has been deleted.'));
- } else {
- $this->Flash->error(__('The state balance could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateCreatedController.php b/community_server/src/Controller/StateCreatedController.php
deleted file mode 100644
index b66f1b7c1..000000000
--- a/community_server/src/Controller/StateCreatedController.php
+++ /dev/null
@@ -1,113 +0,0 @@
-paginate = [
- 'contain' => ['Transactions', 'StateUsers']
- ];
- $stateCreated = $this->paginate($this->StateCreated);
-
- $this->set(compact('stateCreated'));
- }
-
- /**
- * View method
- *
- * @param string|null $id State Created id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateCreated = $this->StateCreated->get($id, [
- 'contain' => ['Transactions', 'StateUsers']
- ]);
-
- $this->set('stateCreated', $stateCreated);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateCreated = $this->StateCreated->newEntity();
- if ($this->request->is('post')) {
- $stateCreated = $this->StateCreated->patchEntity($stateCreated, $this->request->getData());
- if ($this->StateCreated->save($stateCreated)) {
- $this->Flash->success(__('The state created has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state created could not be saved. Please, try again.'));
- }
- $transactions = $this->StateCreated->Transactions->find('list', ['limit' => 200]);
- $stateUsers = $this->StateCreated->StateUsers->find('list', ['limit' => 200]);
- $this->set(compact('stateCreated', 'transactions', 'stateUsers'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State Created id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateCreated = $this->StateCreated->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateCreated = $this->StateCreated->patchEntity($stateCreated, $this->request->getData());
- if ($this->StateCreated->save($stateCreated)) {
- $this->Flash->success(__('The state created has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state created could not be saved. Please, try again.'));
- }
- $transactions = $this->StateCreated->Transactions->find('list', ['limit' => 200]);
- $stateUsers = $this->StateCreated->StateUsers->find('list', ['limit' => 200]);
- $this->set(compact('stateCreated', 'transactions', 'stateUsers'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State Created id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateCreated = $this->StateCreated->get($id);
- if ($this->StateCreated->delete($stateCreated)) {
- $this->Flash->success(__('The state created has been deleted.'));
- } else {
- $this->Flash->error(__('The state created could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateErrorsController.php b/community_server/src/Controller/StateErrorsController.php
deleted file mode 100644
index 0c91d93e3..000000000
--- a/community_server/src/Controller/StateErrorsController.php
+++ /dev/null
@@ -1,173 +0,0 @@
-Auth->allow(['showForUser', 'deleteForUser']);
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->
- add(new NaviHierarchyEntry(__('Fehler'), 'StateErrors', 'ShowForUser', true))
- );
- }
-
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $this->paginate = [
- 'contain' => ['StateUsers', 'TransactionTypes']
- ];
- $stateErrors = $this->paginate($this->StateErrors);
-
- $this->set(compact('stateErrors'));
- }
-
- public function showForUser()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
- if(!$user) {
- $result = $this->requestLogin();
- if($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- }
-
- $errors = $this->StateErrors->find('all')->where(['state_user_id' => $user['id']])->contain(false);
- $transactionTypes = $this->StateErrors->TransactionTypes->find('all')->select(['id', 'name', 'text'])->order(['id']);
-
- $this->set('errors', $errors);
- $this->set('transactionTypes', $transactionTypes->toList());
- $this->set('timeUsed', microtime(true) - $startTime);
- }
-
- public function deleteForUser($id = null)
- {
- $this->request->allowMethod(['post', 'delete', 'get']);
- $stateError = $this->StateErrors->get($id);
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
- if($user['id'] != $stateError->state_user_id) {
- $this->Flash->error(__('Error belongs to another User, cannot delete'));
- }
- else if ($this->StateErrors->delete($stateError)) {
- $this->Flash->success(__('The state error has been deleted.'));
- } else {
- $this->Flash->error(__('The state error could not be deleted. Please, try again.'));
- }
- $errors = $this->StateErrors->find('all')->where(['state_user_id' => $user['id']])->contain(false);
- if($errors->count() == 0) {
- return $this->redirect(['controller' => 'Dashboard']);
- }
- return $this->redirect(['action' => 'showForUser']);
- }
-
-
- /**
- * View method
- *
- * @param string|null $id State Error id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateError = $this->StateErrors->get($id, [
- 'contain' => ['StateUsers', 'TransactionTypes']
- ]);
-
- $this->set('stateError', $stateError);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateError = $this->StateErrors->newEntity();
- if ($this->request->is('post')) {
- $stateError = $this->StateErrors->patchEntity($stateError, $this->request->getData());
- if ($this->StateErrors->save($stateError)) {
- $this->Flash->success(__('The state error has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state error could not be saved. Please, try again.'));
- }
- $stateUsers = $this->StateErrors->StateUsers->find('list', ['limit' => 200]);
- $transactionTypes = $this->StateErrors->TransactionTypes->find('list', ['limit' => 200]);
- $this->set(compact('stateError', 'stateUsers', 'transactionTypes'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State Error id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateError = $this->StateErrors->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateError = $this->StateErrors->patchEntity($stateError, $this->request->getData());
- if ($this->StateErrors->save($stateError)) {
- $this->Flash->success(__('The state error has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state error could not be saved. Please, try again.'));
- }
- $stateUsers = $this->StateErrors->StateUsers->find('list', ['limit' => 200]);
- $transactionTypes = $this->StateErrors->TransactionTypes->find('list', ['limit' => 200]);
- $this->set(compact('stateError', 'stateUsers', 'transactionTypes'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State Error id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateError = $this->StateErrors->get($id);
- if ($this->StateErrors->delete($stateError)) {
- $this->Flash->success(__('The state error has been deleted.'));
- } else {
- $this->Flash->error(__('The state error could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateGroupAddressesController.php b/community_server/src/Controller/StateGroupAddressesController.php
deleted file mode 100644
index 25afc82c7..000000000
--- a/community_server/src/Controller/StateGroupAddressesController.php
+++ /dev/null
@@ -1,113 +0,0 @@
-paginate = [
- 'contain' => ['AddressTypes'],
- ];
- $stateGroupAddresses = $this->paginate($this->StateGroupAddresses);
-
- $this->set(compact('stateGroupAddresses'));
- }
-
- /**
- * View method
- *
- * @param string|null $id State Group Address id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateGroupAddress = $this->StateGroupAddresses->get($id, [
- 'contain' => ['StateGroups', 'AddressTypes'],
- ]);
-
- $this->set('stateGroupAddress', $stateGroupAddress);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateGroupAddress = $this->StateGroupAddresses->newEntity();
- if ($this->request->is('post')) {
- $stateGroupAddress = $this->StateGroupAddresses->patchEntity($stateGroupAddress, $this->request->getData());
- if ($this->StateGroupAddresses->save($stateGroupAddress)) {
- $this->Flash->success(__('The state group address has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state group address could not be saved. Please, try again.'));
- }
- $stateGroups = $this->StateGroupAddresses->StateGroups->find('list', ['limit' => 200]);
- $addressTypes = $this->StateGroupAddresses->AddressTypes->find('list', ['limit' => 200]);
- $this->set(compact('stateGroupAddress', 'stateGroups', 'addressTypes'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State Group Address id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateGroupAddress = $this->StateGroupAddresses->get($id, [
- 'contain' => [],
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateGroupAddress = $this->StateGroupAddresses->patchEntity($stateGroupAddress, $this->request->getData());
- if ($this->StateGroupAddresses->save($stateGroupAddress)) {
- $this->Flash->success(__('The state group address has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state group address could not be saved. Please, try again.'));
- }
- $stateGroups = $this->StateGroupAddresses->StateGroups->find('list', ['limit' => 200]);
- $addressTypes = $this->StateGroupAddresses->AddressTypes->find('list', ['limit' => 200]);
- $this->set(compact('stateGroupAddress', 'stateGroups', 'addressTypes'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State Group Address id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateGroupAddress = $this->StateGroupAddresses->get($id);
- if ($this->StateGroupAddresses->delete($stateGroupAddress)) {
- $this->Flash->success(__('The state group address has been deleted.'));
- } else {
- $this->Flash->error(__('The state group address could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateGroupRelationshipsController.php b/community_server/src/Controller/StateGroupRelationshipsController.php
deleted file mode 100644
index 631ca13d1..000000000
--- a/community_server/src/Controller/StateGroupRelationshipsController.php
+++ /dev/null
@@ -1,115 +0,0 @@
-paginate = [
- 'contain' => ['StateGroup1s', 'StateGroup2s', 'StateRelationships']
- ];
- $stateGroupRelationships = $this->paginate($this->StateGroupRelationships);
-
- $this->set(compact('stateGroupRelationships'));
- }
-
- /**
- * View method
- *
- * @param string|null $id State Group Relationship id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateGroupRelationship = $this->StateGroupRelationships->get($id, [
- 'contain' => ['StateGroup1s', 'StateGroup2s', 'StateRelationships']
- ]);
-
- $this->set('stateGroupRelationship', $stateGroupRelationship);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateGroupRelationship = $this->StateGroupRelationships->newEntity();
- if ($this->request->is('post')) {
- $stateGroupRelationship = $this->StateGroupRelationships->patchEntity($stateGroupRelationship, $this->request->getData());
- if ($this->StateGroupRelationships->save($stateGroupRelationship)) {
- $this->Flash->success(__('The state group relationship has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state group relationship could not be saved. Please, try again.'));
- }
- $stateGroup1s = $this->StateGroupRelationships->StateGroup1s->find('list', ['limit' => 200]);
- $stateGroup2s = $this->StateGroupRelationships->StateGroup2s->find('list', ['limit' => 200]);
- $stateRelationships = $this->StateGroupRelationships->StateRelationships->find('list', ['limit' => 200]);
- $this->set(compact('stateGroupRelationship', 'stateGroup1s', 'stateGroup2s', 'stateRelationships'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State Group Relationship id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateGroupRelationship = $this->StateGroupRelationships->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateGroupRelationship = $this->StateGroupRelationships->patchEntity($stateGroupRelationship, $this->request->getData());
- if ($this->StateGroupRelationships->save($stateGroupRelationship)) {
- $this->Flash->success(__('The state group relationship has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state group relationship could not be saved. Please, try again.'));
- }
- $stateGroup1s = $this->StateGroupRelationships->StateGroup1s->find('list', ['limit' => 200]);
- $stateGroup2s = $this->StateGroupRelationships->StateGroup2s->find('list', ['limit' => 200]);
- $stateRelationships = $this->StateGroupRelationships->StateRelationships->find('list', ['limit' => 200]);
- $this->set(compact('stateGroupRelationship', 'stateGroup1s', 'stateGroup2s', 'stateRelationships'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State Group Relationship id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateGroupRelationship = $this->StateGroupRelationships->get($id);
- if ($this->StateGroupRelationships->delete($stateGroupRelationship)) {
- $this->Flash->success(__('The state group relationship has been deleted.'));
- } else {
- $this->Flash->error(__('The state group relationship could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateGroupsController.php b/community_server/src/Controller/StateGroupsController.php
deleted file mode 100644
index 36969671d..000000000
--- a/community_server/src/Controller/StateGroupsController.php
+++ /dev/null
@@ -1,111 +0,0 @@
-paginate = [
- 'contain' => ['Indices']
- ];
- $stateGroups = $this->paginate($this->StateGroups);
-
- $this->set(compact('stateGroups'));
- }
-
- /**
- * View method
- *
- * @param string|null $id State Group id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateGroup = $this->StateGroups->get($id, [
- 'contain' => ['Indices', 'StateGroupAddresses', 'StateUsers', 'TransactionGroupCreates', 'Transactions']
- ]);
-
- $this->set('stateGroup', $stateGroup);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateGroup = $this->StateGroups->newEntity();
- if ($this->request->is('post')) {
- $stateGroup = $this->StateGroups->patchEntity($stateGroup, $this->request->getData());
- if ($this->StateGroups->save($stateGroup)) {
- $this->Flash->success(__('The state group has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state group could not be saved. Please, try again.'));
- }
- $indices = $this->StateGroups->Indices->find('list', ['limit' => 200]);
- $this->set(compact('stateGroup', 'indices'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State Group id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateGroup = $this->StateGroups->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateGroup = $this->StateGroups->patchEntity($stateGroup, $this->request->getData());
- if ($this->StateGroups->save($stateGroup)) {
- $this->Flash->success(__('The state group has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state group could not be saved. Please, try again.'));
- }
- $indices = $this->StateGroups->Indices->find('list', ['limit' => 200]);
- $this->set(compact('stateGroup', 'indices'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State Group id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateGroup = $this->StateGroups->get($id);
- if ($this->StateGroups->delete($stateGroup)) {
- $this->Flash->success(__('The state group has been deleted.'));
- } else {
- $this->Flash->error(__('The state group could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateRelationshipTypesController.php b/community_server/src/Controller/StateRelationshipTypesController.php
deleted file mode 100644
index 954b594e2..000000000
--- a/community_server/src/Controller/StateRelationshipTypesController.php
+++ /dev/null
@@ -1,106 +0,0 @@
-paginate($this->StateRelationshipTypes);
-
- $this->set(compact('stateRelationshipTypes'));
- }
-
- /**
- * View method
- *
- * @param string|null $id State Relationship Type id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateRelationshipType = $this->StateRelationshipTypes->get($id, [
- 'contain' => []
- ]);
-
- $this->set('stateRelationshipType', $stateRelationshipType);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateRelationshipType = $this->StateRelationshipTypes->newEntity();
- if ($this->request->is('post')) {
- $stateRelationshipType = $this->StateRelationshipTypes->patchEntity($stateRelationshipType, $this->request->getData());
- if ($this->StateRelationshipTypes->save($stateRelationshipType)) {
- $this->Flash->success(__('The state relationship type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state relationship type could not be saved. Please, try again.'));
- }
- $this->set(compact('stateRelationshipType'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State Relationship Type id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateRelationshipType = $this->StateRelationshipTypes->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateRelationshipType = $this->StateRelationshipTypes->patchEntity($stateRelationshipType, $this->request->getData());
- if ($this->StateRelationshipTypes->save($stateRelationshipType)) {
- $this->Flash->success(__('The state relationship type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state relationship type could not be saved. Please, try again.'));
- }
- $this->set(compact('stateRelationshipType'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State Relationship Type id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateRelationshipType = $this->StateRelationshipTypes->get($id);
- if ($this->StateRelationshipTypes->delete($stateRelationshipType)) {
- $this->Flash->success(__('The state relationship type has been deleted.'));
- } else {
- $this->Flash->error(__('The state relationship type could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateUserRolesController.php b/community_server/src/Controller/StateUserRolesController.php
deleted file mode 100644
index 9238c7ad6..000000000
--- a/community_server/src/Controller/StateUserRolesController.php
+++ /dev/null
@@ -1,185 +0,0 @@
-loadComponent('JsonRequestClient');
- $this->Auth->allow([
-// 'search'
- ]);
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzer suchen'), 'StateUsers', 'search', true))
- );
- }
-
- public function search()
- {
- $this->loadModel('StateUsers');
- $startTime = microtime(true);
- I18n::setLocale('de_DE');
- $this->viewBuilder()->setLayout('frontend');
-
- $searchForm = new UserSearchForm();
-
- $timeUsed = microtime(true) - $startTime;
- //$this->set('timeUsed', $timeUsed);
- $this->set(compact('timeUsed', 'searchForm'));
-
- if ($this->request->is('post')) {
- $requestData = $this->request->getData();
-
- if ($searchForm->validate($requestData)) {
- //var_dump($requestData);
- $searchString = $requestData['search'];
-
- // find user on community server db
- $globalSearch = '%' . $searchString . '%';
- $communityUsers = $this->StateUsers
- ->find('all')
- ->contain([]);
-
- $communityUsers->where(['OR' => [
- 'first_name LIKE' => $globalSearch,
- 'last_name LIKE' => $globalSearch,
- //'username LIKE' => $globalSearch,
- 'email LIKE' => $globalSearch
- ]]);
-
- //var_dump($communityUsers->toArray());
- $finalUserEntrys = [];
- // detect states
- $this->loadModel('Roles');
-// foreach ($pubkeySorted as $pubhex => $user) {
- foreach($communityUsers as $communityUser) {
- $finalUser = $communityUser;
- $finalUser['pubkeyhex'] = bin2hex(stream_get_contents($communityUser->public_key));
-
- $state_user_id = $communityUser->id;
- $stateUserRole = $this->StateUserRoles->find('all')->where(['state_user_id' => $state_user_id])->all();
-
- $role_ids = "";
- foreach ($stateUserRole as $userRole) {
- if($role_ids != "")
- $role_ids .= ",".$userRole->role_id;
- else
- $role_ids = $userRole->role_id;
- }
-
- $roles = $this->Roles->find('all')->where(['id IN' => explode(",",$role_ids)])->all();
-
- $role_names = "";
- foreach($roles as $role)
- {
- if($role_names != "")
- $role_names .= " ".$role->title;
- else
- $role_names = $role->title;
- }
-
- $finalUser['role_name'] = $role_names;
-
- array_push($finalUserEntrys, $finalUser);
- }
-
- //var_dump($pubkeySorted);
- } else {
- $this->Flash->error(__('Something was invalid, please try again!'));
- }
- $this->set('finalUserEntrys', $finalUserEntrys);
- }
- $timeUsed = microtime(true) - $startTime;
- $this->set('timeUsed', $timeUsed);
- }
-
- public function assignRole()
- {
- $this->loadModel('Roles');
- $this->loadModel('StateUsers');
-
- if ($this->request->is('post')) {
- $requestData = $this->request->getData();
-
- $public_hex = hex2bin($requestData['public_hex']);
-
- $stateUser = $this->StateUsers->find('all')->where(['public_key' => $public_hex])->first();
-
- foreach($requestData['role_id'] as $role_id)
- {
- $newStateUserRole = $this->StateUserRoles->newEntity();
-
- $post_data = [];
- $post_data['state_user_id'] = $stateUser->id;
- $post_data['role_id'] = $role_id;
- $this->StateUserRoles->patchEntity($newStateUserRole, $post_data);
- $this->StateUserRoles->save($newStateUserRole);
-
- }
-
- $this->Flash->success(__('Role has been assigned to User.'));
-
- return $this->redirect(['controller' => 'state-user-roles', 'action' => 'search']);
-
- }
-
- $assignRoleForm = new AssignRoleForm();
-
- $public_hex = $this->request->getParam('pass')[0];
-
- $publichex = hex2bin($public_hex);
-
- $stateUser = $this->StateUsers->find('all')->where(['public_key' => $publichex])->first();
-
- $stateUserRoles = $this->StateUserRoles->find('all')->where(['state_user_id' => $stateUser->id])->all();
-
- $role_ids = "";
- foreach ($stateUserRoles as $userRole) {
- if($role_ids != "")
- $role_ids .= ",".$userRole->role_id;
- else
- $role_ids = $userRole->role_id;
- }
-
- $role_ids = explode(",", $role_ids);
-
- $roles = $this->Roles->find('list', array('fields' => array('id', 'title')));
-
-
- $this->set('roles', $roles);
- $this->set('stateUser', $stateUser);
- $this->set('role_ids', $role_ids);
- $this->set('assignRoleForm', $assignRoleForm);
- $this->set('public_hex', $public_hex);
- }
-
-}
diff --git a/community_server/src/Controller/StateUserTransactionsController.php b/community_server/src/Controller/StateUserTransactionsController.php
deleted file mode 100644
index f816192f3..000000000
--- a/community_server/src/Controller/StateUserTransactionsController.php
+++ /dev/null
@@ -1,291 +0,0 @@
-Auth->allow(['add', 'edit']);
- $this->Auth->allow(['ajaxListTransactions']);
- //$this->loadComponent('JsonRequestClient');
- }
-
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $this->paginate = [
- 'contain' => ['StateUsers', 'Transactions', 'TransactionTypes'],
- ];
- $stateUserTransactions = $this->paginate($this->StateUserTransactions);
-
- $this->set(compact('stateUserTransactions'));
- }
-
- public function sortTransactions($a, $b)
- {
- if ($a['date'] == $b['date']) {
- return 0;
- }
- return ($a['date'] > $b['date']) ? -1 : 1;
- }
-
-
- public function ajaxListTransactions($page = 1, $count = 20)
- {
- $startTime = microtime(true);
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
- if(!$user) {
- return $this->returnJson(['state' => 'error', 'msg' => 'user not found', 'details' => 'exist a valid session cookie?']);
- }
-
- $paged_state_user_transactions = $this->StateUserTransactions
- ->find('all')
- ->where(['state_user_id' => $user['id'], 'transaction_type_id IN' => [1,2]])
- ->limit($count)
- ->page($page)
- ->order(['transaction_id'])
- ;
- $all_user_transactions_count = $this->StateUserTransactions
- ->find('all')
- ->where(['state_user_id' => $user['id'], 'transaction_type_id IN' => [1,2]])
- ->count()
- ;
- $creationTransaction_ids = [];
- $transferTransaction_ids = [];
- $allTransaction_ids = [];
- foreach($paged_state_user_transactions as $state_user_transaction) {
- $allTransaction_ids[] = $state_user_transaction->transaction_id;
- switch($state_user_transaction->transaction_type_id) {
- case 1: $creationTransaction_ids[] = $state_user_transaction->transaction_id; break;
- case 2: $transferTransaction_ids[] = $state_user_transaction->transaction_id; break;
- }
- }
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
- $transactionCreationsTable = TableRegistry::getTableLocator()->get('TransactionCreations');
- $transactionSendCoinsTable = TableRegistry::getTableLocator()->get('TransactionSendCoins');
- $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers');
- if(count($allTransaction_ids) > 0) {
- $transactionEntries = $transactionsTable->find('all')->where(['id IN' => $allTransaction_ids])->order(['id'])->toArray();
- }
- if(count($creationTransaction_ids) > 0) {
- $transactionCreations = $transactionCreationsTable->find('all')->where(['transaction_id IN' => $creationTransaction_ids]);
- }
- if(count($transferTransaction_ids)) {
- $transactionTransfers = $transactionSendCoinsTable->find('all')->where(['transaction_id IN' => $transferTransaction_ids]);
- }
- //var_dump($transactions->all());
-
- $transactions = [];
- // creations
- if(isset($transactionCreations)) {
- foreach ($transactionCreations as $creation) {
- //var_dump($creation);
- $transaction_entries_index = array_search($creation->transaction_id, $allTransaction_ids);
- if(FALSE === $transaction_entries_index) {
- return $this->returnJson(['state' => 'error', 'msg' => 'code error', 'details' => 'creation, transaction_entries_index is FALSE, shouldn\'t occure']);
- }
- $transaction = $transactionEntries[$transaction_entries_index];
- array_push($transactions, [
- 'name' => 'Gradido Akademie',
- 'type' => 'creation',
- 'transaction_id' => $creation->transaction_id,
- 'date' => $transaction->received,
- 'balance' => $creation->amount,
- 'memo' => $transaction->memo
- ]);
- }
- }
-
- // involved users
- if(isset($transactionTransfers)) {
- $involvedUserIds = [];
-
- foreach ($transactionTransfers as $transfer) {
- //var_dump($sendCoins);
- if ($transfer->state_user_id != $user['id']) {
- array_push($involvedUserIds, intval($transfer->state_user_id));
- } elseif ($transfer->receiver_user_id != $user['id']) {
- array_push($involvedUserIds, intval($transfer->receiver_user_id));
- }
- }
-
- // exchange key with values and drop duplicates
- $involvedUser_temp = array_flip($involvedUserIds);
- // exchange back
- $involvedUserIds = array_flip($involvedUser_temp);
-
- $involvedUser = $stateUsersTable->find('all', [
- 'contain' => false,
- 'where' => ['id IN' => $involvedUserIds],
- 'fields' => ['id', 'first_name', 'last_name', 'email']
- ]);
- //var_dump($involvedUser->toArray());
- $involvedUserIndices = [];
- foreach ($involvedUser as $involvedUser) {
- $involvedUserIndices[$involvedUser->id] = $involvedUser;
- }
-
- // transfers - send coins
- foreach($transactionTransfers as $transfer)
- {
- $transaction_entries_index = array_search($transfer->transaction_id, $allTransaction_ids);
- if(FALSE === $transaction_entries_index) {
-
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'code error',
- 'details' => 'transfer, transaction_entries_index is FALSE, shouldn\'t occure',
- 'data' => ['haystack' => $allTransaction_ids, 'needle' => $transfer->transaction_id]
- ]);
- }
- $transaction = $transactionEntries[$transaction_entries_index];
- $type = '';
- $otherUser = null;
- $other_user_public = '';
-
- if ($transfer->state_user_id == $user['id']) {
- $type = 'send';
-
- if(isset($involvedUserIndices[$transfer->receiver_user_id])) {
- $otherUser = $involvedUserIndices[$transfer->receiver_user_id];
- }
- $other_user_public = bin2hex(stream_get_contents($transfer->receiver_public_key));
- } else if ($transfer->receiver_user_id == $user['id']) {
- $type = 'receive';
- if(isset($involvedUserIndices[$transfer->state_user_id])) {
- $otherUser = $involvedUserIndices[$transfer->state_user_id];
- }
- if($transfer->sender_public_key) {
- $other_user_public = bin2hex(stream_get_contents($transfer->sender_public_key));
- }
- }
- if(null == $otherUser) {
- $otherUser = $stateUsersTable->newEntity();
- }
- array_push($transactions, [
- 'name' => $otherUser->first_name . ' ' . $otherUser->last_name,
- 'email' => $otherUser->email,
- 'type' => $type,
- 'transaction_id' => $transfer->transaction_id,
- 'date' => $transaction->received,
- 'balance' => $transfer->amount,
- 'memo' => $transaction->memo,
- 'pubkey' => $other_user_public
- ]);
- //*/
-
- }
- }
- uasort($transactions, array($this, 'sortTransactions'));
-
- return $this->returnJson([
- 'state' => 'success',
- 'transactions' => $transactions,
- 'transactionExecutingCount' => $session->read('Transactions.executing'),
- 'count' => $all_user_transactions_count,
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
-
- /**
- * View method
- *
- * @param string|null $id State User Transaction id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateUserTransaction = $this->StateUserTransactions->get($id, [
- 'contain' => ['StateUsers', 'Transactions', 'TransactionTypes'],
- ]);
-
- $this->set('stateUserTransaction', $stateUserTransaction);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateUserTransaction = $this->StateUserTransactions->newEntity();
- if ($this->request->is('post')) {
- $stateUserTransaction = $this->StateUserTransactions->patchEntity($stateUserTransaction, $this->request->getData());
- if ($this->StateUserTransactions->save($stateUserTransaction)) {
- $this->Flash->success(__('The state user transaction has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state user transaction could not be saved. Please, try again.'));
- }
- $stateUsers = $this->StateUserTransactions->StateUsers->find('list', ['limit' => 200]);
- $transactions = $this->StateUserTransactions->Transactions->find('list', ['limit' => 200]);
- $transactionTypes = $this->StateUserTransactions->TransactionTypes->find('list', ['limit' => 200]);
- $this->set(compact('stateUserTransaction', 'stateUsers', 'transactions', 'transactionTypes'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State User Transaction id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateUserTransaction = $this->StateUserTransactions->get($id, [
- 'contain' => [],
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateUserTransaction = $this->StateUserTransactions->patchEntity($stateUserTransaction, $this->request->getData());
- if ($this->StateUserTransactions->save($stateUserTransaction)) {
- $this->Flash->success(__('The state user transaction has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state user transaction could not be saved. Please, try again.'));
- }
- $stateUsers = $this->StateUserTransactions->StateUsers->find('list', ['limit' => 200]);
- $transactions = $this->StateUserTransactions->Transactions->find('list', ['limit' => 200]);
- $transactionTypes = $this->StateUserTransactions->TransactionTypes->find('list', ['limit' => 200]);
- $this->set(compact('stateUserTransaction', 'stateUsers', 'transactions', 'transactionTypes'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State User Transaction id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateUserTransaction = $this->StateUserTransactions->get($id);
- if ($this->StateUserTransactions->delete($stateUserTransaction)) {
- $this->Flash->success(__('The state user transaction has been deleted.'));
- } else {
- $this->Flash->error(__('The state user transaction could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/StateUsersController.php b/community_server/src/Controller/StateUsersController.php
deleted file mode 100644
index fc6ec8614..000000000
--- a/community_server/src/Controller/StateUsersController.php
+++ /dev/null
@@ -1,616 +0,0 @@
-loadComponent('GradidoNumber');
- $this->loadComponent('JsonRequestClient');
- $this->loadComponent('Cookie');
- $this->Auth->allow([
- 'search', 'ajaxCopyLoginToCommunity', 'ajaxCopyCommunityToLogin',
- 'ajaxDelete', 'ajaxCountTransactions', 'ajaxVerificationEmailResend',
- 'ajaxGetUserEmailVerificationCode', 'ajaxGetCSFRToken', 'login'
- ]);
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzer suchen'), 'StateUsers', 'search', true))
- );
- }
-
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $this->paginate = [
- 'contain' => []
- ];
- $stateUsers = $this->paginate($this->StateUsers);
-
- $this->set(compact('stateUsers'));
- }
-
- /*public function listIdentHashes()
- {
- $stateUsers = $this->StateUsers->find('all')->toArray();
- foreach($stateUsers as $i => $user) {
- $stateUsers[$i]->identHash = TransactionCreation::DRMakeStringHash($user->email);
- }
- $this->set('stateUsers', $stateUsers);
- }*/
-
- public function login($session_id)
- {
- if(isset($session_id) && intval($session_id) !== 0) {
- $loginServer = Configure::read('LoginServer');
- $http = new Client();
-
- try {
- $url = $loginServer['host'] . ':' . $loginServer['port'];
-
- $response = $http->get($url . '/login', ['session_id' => $session_id]);
- $json = $response->getJson();
-
- if (isset($json) && count($json) > 0) {
- if ($json['state'] === 'success') {
- $this->Cookie->configKey('GRADIDO_LOGIN', 'encryption', false);
- $this->Cookie->write('GRADIDO_LOGIN', $session_id);
- return $this->redirect(['controller' => 'Dashboard', 'action' => 'index']);
- }
- }
- } catch (\Exception $e) {
- $msg = $e->getMessage();
- $this->Flash->error(__('error http request: ') . $msg);
- return $this->redirect(['controller' => 'Dashboard', 'action' => 'errorHttpRequest']);
- }
- }
- throw new NotFoundException();
- }
-
- public function search()
- {
- $startTime = microtime(true);
- I18n::setLocale('de_DE');
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- if($user['role'] != 'admin') {
- return $this->redirect(['controller' => 'dashboard', 'action' => 'index']);
- }
-
- $searchForm = new UserSearchForm();
-
- $timeUsed = microtime(true) - $startTime;
- //$this->set('timeUsed', $timeUsed);
- $csfr_token = $this->request->getParam('_csrfToken');
- $this->set(compact('timeUsed', 'searchForm', 'csfr_token'));
- $empty_string = '... empty ...';
- if ($this->request->is('post')) {
- $finalUserEntrys = [];
- $requestData = $this->request->getData();
- $account_state = $requestData['account_state'];
- if($requestData['search'] == '' && $account_state != 'all') {
- $requestData['search'] = $empty_string;
- }
-
- if($searchForm->validate($requestData)) {
- //var_dump($requestData);
- $searchString = $requestData['search'];
- $searchType = 'unknown';
- if(GenericValidation::email($searchString, [])) {
- $searchType = 'email';
- }
- // find users on login server
- $resultJson = $this->JsonRequestClient->getUsers($session->read('session_id'), $searchString, $account_state);
- $loginServerUser = [];
- if($resultJson['state'] == 'success') {
- $dataJson = $resultJson['data'];
- if($dataJson['state'] != 'success') {
- if($dataJson['msg'] == 'session not found') {
- $session->destroy();
- return $this->redirect(Router::url('/', true) . 'account', 303);
- }
- }
- //var_dump($dataJson);
- if(isset($dataJson['users'])) {
- $loginServerUser = $dataJson['users'];
- }
- }
- $pubkeySorted = [];
- $emptyPubkeys = [];
- foreach($loginServerUser as $u) {
- if(!isset($u['public_hex']) || $u['public_hex'] == '') {
- array_push($emptyPubkeys, $u);
- } else {
- if(!isset($pubkeySorted[$u['public_hex']])) {
- $pubkeySorted[$u['public_hex']] = ['login' => [], 'community' => []];
- }
- array_push($pubkeySorted[$u['public_hex']]['login'], $u);
- }
- }
- // find user on community server db
-
-
-
- $communityUsers = $this->StateUsers
- ->find('all')
- ->contain(['StateBalances' => ['fields' => ['amount', 'state_user_id']]]);
-
- if($account_state == 'email not activated') {
- if(count($pubkeySorted) > 0) {
- $communityUsers->where(['hex(public_key) IN' => array_keys($pubkeySorted)]);
- } else {
- $communityUsers = null;
- }
- } else {
- $globalSearch = '%' . $searchString . '%';
- $communityUsers->where(['OR' => [
- 'first_name LIKE' => $globalSearch,
- 'last_name LIKE' => $globalSearch,
- 'email LIKE' => $globalSearch
- ]]);
- }
-
-
- //var_dump($communityUsers->toArray());
- if($communityUsers) {
- foreach($communityUsers as $u) {
- $pubkey_hex = bin2hex(stream_get_contents($u->public_key));
- $u->public_hex = $pubkey_hex;
- if(!isset($pubkeySorted[$pubkey_hex])) {
- $pubkeySorted[$pubkey_hex] = ['login' => [], 'community' => []];
- }
- array_push($pubkeySorted[$pubkey_hex]['community'], $u);
- }
- }
-
- // detect states
- foreach($pubkeySorted as $pubhex => $user) {
- $finalUser = [];
- $state = 'account created';
- $color = 'secondary';
- $finalUser['balance'] = 0;
- $finalUser['pubkeyhex'] = $pubhex;
- $finalUser['created'] = null;
-
- if(count($user['community']) == 1) {
- if(isset($user['community'][0]->state_balances) &&
- isset($user['community'][0]->state_balances[0]['amount'])) {
- $finalUser['balance'] = $user['community'][0]->state_balances[0]->amount;
- }
- }
-
- if(count($user['login']) == 0) {
- $state = 'account not on login-server';
- $color = 'danger';
- if(count($user['community']) == 1) {
- $c_user = $user['community'][0];
- $finalUser['name'] = $c_user->first_name . ' ' . $c_user->last_name;
- $finalUser['first_name'] = $c_user->first_name;
- $finalUser['last_name'] = $c_user->last_name;
- $finalUser['email'] = $c_user->email;
- }
- } else if(count($user['login']) == 1) {
- if($user['login'][0]['email_checked'] == true) {
- $state = 'email activated';
- $color = 'primary';
-
- if(count($user['community']) == 1) {
- $state = 'account copied to community';
- $color = 'success';
- //var_dump($user['community'][0]->state_balances[0]['amount']);
- }
-
- } else {
- $state = 'email not activated';
- $color = 'warning';
- }
-
- $l_user = $user['login'][0];
- $finalUser['name'] = $l_user['first_name'] . ' ' . $l_user['last_name'];
- $finalUser['first_name'] = $l_user['first_name'];
- $finalUser['last_name'] = $l_user['last_name'];
- $finalUser['email'] = $l_user['email'];
- $finalUser['created'] = new FrozenTime($l_user['created']);
-
- } else {
- $state = 'account multiple times on login-server';
- $color = 'danger';
- }
- $finalUser['indicator'] = ['name' => $state, 'color' => $color];
- array_push($finalUserEntrys, $finalUser);
- }
-
- foreach($emptyPubkeys as $user) {
- $finalUser = [];
- $state = 'account not on community server';
- $color = 'secondary';
- if($user['email_checked'] == false) {
- $state = 'email not activated';
- $color = 'warning';
- } else {
- $state = 'no keys';
- $color = 'warning';
- }
- $finalUser['balance'] = 0;
- $finalUser['pubkeyhex'] = '';
- $finalUser['name'] = $user['first_name'] . ' ' . $user['last_name'];
- $finalUser['first_name'] = $user['first_name'];
- $finalUser['last_name'] = $user['last_name'];
- $finalUser['email'] = $user['email'];
- $finalUser['created'] = new FrozenTime($user['created']);
- $finalUser['indicator'] = ['name' => $state, 'color' => $color];
- array_push($finalUserEntrys, $finalUser);
- }
- //var_dump($pubkeySorted);
- } else {
- $this->Flash->error(__('Something was invalid, please try again!'));
- }
-
- $this->set('finalUserEntrys', $finalUserEntrys);
- }
- $timeUsed = microtime(true) - $startTime;
- $this->set('timeUsed', $timeUsed);
- }
-
- public function ajaxCopyCommunityToLogin()
- {
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']);
- }
- $user = $session->read('StateUser');
- if($user['role'] != 'admin') {
- return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']);
- }
- if($this->request->is('post')) {
- $jsonData = $this->request->input('json_decode', true);
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
- public function ajaxCopyLoginToCommunity()
- {
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']);
- }
- $user = $session->read('StateUser');
- if($user['role'] != 'admin') {
- return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']);
- }
-
- if($this->request->is('post')) {
- $jsonData = $this->request->input('json_decode', true);
- //$user = $jsonData['user'];
- //var_dump($jsonData);
-
- $newStateUser = $this->StateUsers->newEntity();
- $this->StateUsers->patchEntity($newStateUser, $jsonData);
- $newStateUser->public_key = hex2bin($jsonData['pubkeyhex']);
-
- if(!$this->StateUsers->save($newStateUser)) {
- return $this->returnJson(['state' => 'error', 'msg' => 'error by saving', 'details' => json_encode($newStateUser->errors())]);
- }
-
- return $this->returnJson(['state' => 'success']);
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
- public function ajaxVerificationEmailResend()
- {
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']);
- }
- $user = $session->read('StateUser');
- if($user['role'] != 'admin') {
- return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']);
- }
- if($this->request->is('post')) {
- $jsonData = $this->request->input('json_decode', true);
- $email = $jsonData['email'];
- $session_id = $session->read('session_id');
-
- return $this->returnJson($this->JsonRequestClient->sendRequest(json_encode([
- 'session_id' => $session_id,
- 'email' => $email
- ]), '/adminEmailVerificationResend'));
- /*return $this->sendRequest(json_encode([
- 'session_id' => $session_id,
- 'search' => $searchString
- ]), '/getUsers');*/
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
- public function ajaxGetUserEmailVerificationCode()
- {
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']);
- }
- $user = $session->read('StateUser');
- if($user['role'] != 'admin') {
- return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']);
- }
- if($this->request->is('post')) {
- $jsonData = $this->request->input('json_decode', true);
- $email = $jsonData['email'];
- $session_id = $session->read('session_id');
-
- return $this->returnJson($this->JsonRequestClient->sendRequest(json_encode([
- 'session_id' => $session_id,
- 'email' => $email,
- 'ask' => ['EmailVerificationCode.Register', 'loginServer.path']
- ]), '/getUserInfos'));
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
-
- public function ajaxDelete()
- {
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']);
- }
- $user = $session->read('StateUser');
- if($user['role'] != 'admin') {
- return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']);
- }
-
- if($this->request->is('post')) {
- $jsonData = $this->request->input('json_decode', true);
- //$user = $jsonData['user'];
- //var_dump($jsonData);
- $pubkey = hex2bin($jsonData['pubkeyhex']);
- $stateUsers = $this->StateUsers->find('all')->where(['public_key' => $pubkey]);
- if($stateUsers->count() != 1) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid result count']);
- }
-
- if ($this->StateUsers->delete($stateUsers->first())) {
- return $this->returnJson(['state' => 'success']);
- } else {
- return $this->returnJson(['state' => 'error', 'msg' => 'error by deleting', 'details' => json_encode($stateUser->errors())]);
- }
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
- public function ajaxCountTransactions()
- {
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- if($result !== true) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid session']);
- }
- $user = $session->read('StateUser');
- if($user['role'] != 'admin') {
- return $this->returnJson(['state' => 'error', 'msg' => 'not an admin']);
- }
-
- if($this->request->is('post')) {
- $jsonData = $this->request->input('json_decode', true);
- //$user = $jsonData['user'];
- //var_dump($jsonData);
- $pubkey = hex2bin($jsonData['pubkeyhex']);
- $stateUsers = $this->StateUsers
- ->find('all')
- ->where(['public_key' => $pubkey])
- ->select(['id']);
- if($stateUsers->count() != 1) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid result count']);
- }
- $stateUser = $stateUsers->first();
- //var_dump($stateUser);
- //var_dump($stateUser->toArray());
- $creationsTable = TableRegistry::getTableLocator()->get('TransactionCreations');
- $creationTransactions = $creationsTable
- ->find('all')
- ->select(['id'])
- ->where(['state_user_id' => $stateUser->id]);
-
- $transferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins');
- $transferTransactions = $transferTable
- ->find('all')
- ->where(['OR' => ['state_user_id' => $stateUser->id, 'receiver_user_id' => $stateUser->id]])
- ->select(['state_user_id', 'receiver_user_id']);
- $counts = ['creation' => $creationTransactions->count(), 'receive' => 0, 'sended' => 0];
- foreach($transferTransactions as $transfer) {
- //var_dump($transfer);
- if($transfer->state_user_id == $stateUser->id) {
- $counts['sended']++;
- }
- if($transfer->receiver_user_id == $stateUser->id) {
- $counts['receive']++;
- }
- }
- return $this->returnJson(['state' => 'success', 'counts' => $counts]);
-
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
-
- }
-
- public function ajaxGetCSFRToken($session_id)
- {
- if(!isset($session_id) || $session_id == 0) {
- $this->returnJson(['state' => 'error', 'msg' => 'no session id']);
- }
-
- $client_ip = $this->request->clientIp();
-
- $loginServer = Configure::read('LoginServer');
- $url = $loginServer['host'] . ':' . $loginServer['port'];
-
- $http = new Client();
- $response = $http->get($url . '/login', ['session_id' => $session_id]);
- $json = $response->getJson();
-
- if (isset($json) && count($json) > 0) {
- if ($json['state'] === 'success') {
- if($json['clientIP'] == $client_ip) {
- return $this->returnJson(['state' => 'success', 'csfr' => $this->request->getParam('_csrfToken')]);
- } else {
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'client ip mismatch',
- 'details' => ['login_server' => $json['clientIP'], 'caller' => $client_ip]]);
- }
- } else {
- return $this->returnJson($json);
- }
- } else {
- return $this->returnJson(['state' => 'error', 'invalid response form logins server']);
- }
-
- }
- /*
-
- getField(vnode, 'receive'),
-
- getField(vnode, 'sended'),
-
- getField(vnode, 'creation'),
- */
-
- /**
- * View method
- *
- * @param string|null $id State User id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $stateUser = $this->StateUsers->get($id, [
- 'contain' => [
- 'StateBalances',
- 'TransactionCreations' => ['Transactions'],
- 'TransactionSendCoins' => ['Transactions', 'ReceiverUsers'],
- 'TransactionReceivedCoins' => ['Transactions', 'StateUsers']]
- ]);
-
- $this->set('stateUser', $stateUser);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $stateUser = $this->StateUsers->newEntity();
- if ($this->request->is('post')) {
- $stateUser = $this->StateUsers->patchEntity($stateUser, $this->request->getData());
- if ($this->StateUsers->save($stateUser)) {
- $this->Flash->success(__('The state user has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state user could not be saved. Please, try again.'));
- }
- $indices = $this->StateUsers->Indices->find('list', ['limit' => 200]);
- $stateGroups = $this->StateUsers->StateGroups->find('list', ['limit' => 200]);
- $this->set(compact('stateUser', 'indices', 'stateGroups'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id State User id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $stateUser = $this->StateUsers->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $stateUser = $this->StateUsers->patchEntity($stateUser, $this->request->getData());
- if ($this->StateUsers->save($stateUser)) {
- $this->Flash->success(__('The state user has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The state user could not be saved. Please, try again.'));
- }
- $indices = $this->StateUsers->Indices->find('list', ['limit' => 200]);
- $stateGroups = $this->StateUsers->StateGroups->find('list', ['limit' => 200]);
- $this->set(compact('stateUser', 'indices', 'stateGroups'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id State User id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $stateUser = $this->StateUsers->get($id);
- if ($this->StateUsers->delete($stateUser)) {
- $this->Flash->success(__('The state user has been deleted.'));
- } else {
- $this->Flash->error(__('The state user could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/TransactionCreationsController.php b/community_server/src/Controller/TransactionCreationsController.php
deleted file mode 100644
index d02320d25..000000000
--- a/community_server/src/Controller/TransactionCreationsController.php
+++ /dev/null
@@ -1,681 +0,0 @@
-loadComponent('GradidoNumber');
- $this->loadComponent('JsonRequestClient');
- //$this->Auth->allow(['add', 'edit']);
- //$this->Auth->allow('create');
- $this->Auth->allow('ajaxCreate');
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Gradido schöpfen'), 'TransactionCreations', 'create-multi', true))
- );
- }
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $this->paginate = [
- 'contain' => ['Transactions', 'StateUsers']
- ];
- $transactionCreations = $this->paginate($this->TransactionCreations);
- $identHashes = [];
- /*foreach ($transactionCreations as $creation) {
- $identHash = TransactionCreation::DRMakeStringHash($creation->state_user->email);
- $identHashes[$creation->state_user->id] = $identHash;
- }*/
-
- //$this->set(compact('transactionCreations', 'identHashes'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Transaction Creation id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $transactionCreation = $this->TransactionCreations->get($id, [
- 'contain' => ['Transactions', 'StateUsers']
- ]);
-
- $this->set('transactionCreation', $transactionCreation);
- }
-
- public function create()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
- if (!$user) {
- $result = $this->requestLogin();
- if ($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- }
- $creationForm = new CreationForm();
- $transactionCreation = $this->TransactionCreations->newEntity();
- $transactionCreation->state_user_id = $user['id'];
-
- // adding possible addresses + input field for copy
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
- $stateUsers = $stateUserTable->find('all')->contain(false);
- $receiverProposal = [];
- foreach ($stateUsers as $stateUser) {
- $name = $stateUser->email;
- $keyHex = bin2hex(stream_get_contents($stateUser->public_key));
- if ($name === null) {
- $name = $stateUser->first_name . ' ' . $stateUser->last_name;
- }
- array_push($receiverProposal, ['name' => $name, 'key' => $keyHex, 'email' => $stateUser->email]);
- //$stateUser->public_key
- }
- $timeUsed = microtime(true) - $startTime;
- $this->set(compact('transactionCreation', 'timeUsed', 'receiverProposal', 'creationForm'));
-
- if ($this->request->is('post')) {
- $requestData = $this->request->getData();
- $mode = 'next';
- if (isset($requestData['add'])) {
- $mode = 'add';
- }
- if ($creationForm->validate($requestData)) {
- $pubKeyHex = '';
- $identHash = '';
- $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']);
- $receiverIndex = intval($requestData['receiver'])-1;
-
- if (count($receiverProposal) > $receiverIndex) {
- $pubKeyHex = $receiverProposal[$receiverIndex]['key'];
- //$identHash = TransactionCreation::DRMakeStringHash($receiverProposal[$receiverIndex]['email']);
- }
- $builderResult = TransactionCreation::build(
- $amountCent,
- $requestData['memo'],
- $pubKeyHex
- );
- if ($builderResult['state'] == 'success') {
- $user_balance = 0;
- if (isset($user['balance'])) {
- $user_balance = $user['balance'];
- }
- // $session_id, $base64Message, $user_balance = 0
- $requestResult = $this->JsonRequestClient->sendTransaction(
- $session->read('session_id'),
- base64_encode($builderResult['transactionBody']->serializeToString()),
- $user_balance
- );
- if ($requestResult['state'] != 'success') {
- $this->addAdminError('TransactionCreations', 'create', $requestResult, $user['id']);
- if ($requestResult['type'] == 'request error') {
- $this->Flash->error(__('Error by requesting LoginServer, please try again'));
- } else {
- $this->Flash->error(__('Error, please wait for the admin to fix it'));
- }
- } else {
- $json = $requestResult['data'];
- if ($json['state'] != 'success') {
- if ($json['msg'] == 'session not found') {
- $session->destroy();
- return $this->redirect($this->loginServerUrl . 'account', 303);
- } else {
- $this->addAdminError('TransactionCreations', 'create', $json, $user['id']);
- $this->Flash->error(__('Login Server Error, please wait for the admin to fix it'));
- }
- } else {
- $pendingTransactionCount = $session->read('Transactions.pending');
- if ($pendingTransactionCount == null) {
- $pendingTransactionCount = 1;
- } else {
- $pendingTransactionCount++;
- }
- $session->write('Transactions.pending', $pendingTransactionCount);
- if ($mode === 'next') {
- return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303);
- } else {
- $this->Flash->success(__('Transaction submitted for review.'));
- }
- }
- }
- } else {
- $this->Flash->error(__('Building transaction failed'));
- }
- // */
- } else {
- $this->Flash->error(__('Something was invalid, please try again!'));
- }
- }
- }
-
- public function createMulti($page = 0)
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $result = $this->requestLogin();
- $limit = 200;
- if ($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
-
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
-
- $connection = ConnectionManager::get('default');
- $transactionActiveMonth = $connection->execute(
- 'SELECT id, received FROM transactions '
- . 'where received >= date_sub(date_add(curdate(), interval 1 - day(curdate()) day), interval 2 month) '
- . 'AND '
- . 'received < date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval 2 month) '
- . 'AND '
- . 'transaction_type_id = 1'
- )->fetchAll('assoc');
- $transactionActiveMonthSortedById = [];
- foreach ($transactionActiveMonth as $t) {
- $transactionActiveMonthSortedById[$t['id']] = $t['received'];
- }
- $firstDayLastMonth = new FrozenDate();
- $firstDayLastMonth = $firstDayLastMonth->day(1)->subMonth(1);
- $transactionsLastMonthTargeDate = $this->TransactionCreations
- ->find('all')
- //->select(['state_user_id', 'target_date', 'amount'])
- ->where(['EXTRACT(YEAR_MONTH FROM target_date) LIKE' => $firstDayLastMonth->format('Ym')])
- ->group(['state_user_id'])
- ->contain([]);
- $transactionsLastMonthTargeDate->select([
- 'state_user_id',
- 'sum_amount' => $transactionsLastMonthTargeDate->func()->sum('amount')
- ]);
-
- $transactionsLastMonthTargetDateSortedByStateUserId = [];
- foreach ($transactionsLastMonthTargeDate as $transactionCreation) {
- $transactionsLastMonthTargetDateSortedByStateUserId[$transactionCreation->state_user_id] = $transactionCreation->sum_amount;
- }
-
- $requestData = $this->request->getData();
- if ($this->request->is('post') &&
- isset($requestData['searchButton']) &&
- isset($requestData['searchText']) &&
- !empty($requestData['searchText'])
- ) {
- $mode = 'search';
- $page = 0;
- $this->log("search for text: ".$requestData['searchText'], 'debug');
- $stateUsers = $stateUserTable
- ->find('all')
- ->select(['id', 'first_name', 'last_name', 'email'])
- ->order(['first_name', 'last_name'])
- ->where(
- ['AND' => [
- 'disabled' => 0,
- 'OR' => [
- 'LOWER(first_name) LIKE' => '%'.strtolower($requestData['searchText']).'%',
- 'LOWER(last_name) LIKE' => '%'.strtolower($requestData['searchText']).'%',
- 'LOWER(email) LIKE' => '%'.strtolower($requestData['searchText']).'%'
- ]
- ]
- ]
- )
- ->contain(['TransactionCreations' => [
- 'fields' => [
- 'TransactionCreations.amount',
- 'TransactionCreations.transaction_id',
- 'TransactionCreations.state_user_id'
- ]
- ]]);
- $this->log("search query: ".$stateUsers, 'debug');
- } else {
- $stateUsers = $stateUserTable
- ->find('all')
- ->select(['id', 'first_name', 'last_name', 'email'])
- //->order(['id'])
- ->where(['disabled' => 0])
- ->order(['first_name', 'last_name'])
- ->contain(['TransactionCreations' => [
- 'fields' => [
- 'TransactionCreations.amount',
- 'TransactionCreations.transaction_id',
- 'TransactionCreations.state_user_id'
- ]
- ]]);
- }
-
- //var_dump($stateUsers->toArray());
- $possibleReceivers = [];
- $countUsers = 0;
- foreach ($stateUsers as $i => $stateUser) {
- $countUsers++;
- if ($i < $page * $limit || $i >= ($page + 1) * $limit) {
- continue;
- }
- $sumAmount = 0;
- $sumAmount2 = 0;
- if (isset($transactionsLastMonthTargetDateSortedByStateUserId[$stateUser->id])) {
- $sumAmount2 = $transactionsLastMonthTargetDateSortedByStateUserId[$stateUser->id];
- }
- foreach ($stateUser->transaction_creations as $transactionCreation) {
- //var_dump($transactionCreation);
- if (isset($transactionActiveMonthSortedById[$transactionCreation->transaction_id])) {
- $sumAmount += $transactionCreation->amount;
- }
- }
-
- //if($sumAmount < 20000000) {
- array_push($possibleReceivers, [
- 'name' => $stateUser->first_name . ' ' . $stateUser->last_name,
- 'id' => $stateUser->id,
- 'email' => $stateUser->email,
- 'amount' => $sumAmount,
- 'amount2' => $sumAmount2
- ]);
- /*} else {
- $this->Flash->error(__('Creation above 2.000 GDD for 2 last two month'));
- }*/
- }
- // usort($possibleReceivers, function ($a, $b) {
- // return (strtolower($a['name']) <=> strtolower($b['name']));
- // });
- // -> replaced by SQL "order by" above
- $creationForm = new CreationForm();
-
- $timeUsed = microtime(true) - $startTime;
- $this->set(compact('timeUsed', 'stateUsers', 'creationForm', 'possibleReceivers'));
-
- $this->set('firstDayLastMonth', $firstDayLastMonth);
- $this->set('activeUser', $user);
- $this->set('creationForm', $creationForm);
- $this->set('transactionExecutingCount', $session->read('Transactions.executing'));
- $this->set('timeUsed', microtime(true) - $startTime);
- $this->set('countUsers', $countUsers);
- $this->set('limit', $limit);
- $this->set('page', $page);
-
- if ($this->request->is('post') && (!isset($mode) || !($mode === 'search'))) {
- $this->log("real POST", 'debug');
- $mode = 'next';
- if (isset($requestData['add'])) {
- $mode = 'add';
- }
- //echo "mode: $mode ";
- $memo = $requestData['memo'];
- $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']);
- //$targetDate = $requestData['target_date'];
- if (!isset($requestData['user']) || count($requestData['user']) == 0) {
- $this->Flash->error(__('No user selected'));
- } else {
- $users = $requestData['user'];
- $pendingTransactionCount = $session->read('Transactions.pending');
- if ($pendingTransactionCount == null) {
- $pendingTransactionCount = 0;
- }
- if (isset($requestData['user_pending'])) {
- $pendings = $requestData['user_pending'];
- } else {
- $pendings = [];
- }
- $receiverUsers = $stateUserTable->find('all')
- ->where(['id IN' => array_keys($users)])
- ->select(['public_key', 'email', 'id'])
- ->contain(false);
-
- foreach ($receiverUsers as $receiverUser) {
- $localAmountCent = $amountCent;
- //$localTargetDate = $targetDate;
- $id = $receiverUser->id;
- if ($requestData['user_amount'][$id] != '') {
- $localAmountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['user_amount'][$id]);
- }
- if (isset($requestData['user_target_date']) && isset($requestData['user_target_date'][$id])) {
- $localTargetDate = $requestData['user_target_date'][$id];
- }
- if (isset($pendings[$id])) {
- $pendings[$id] += $localAmountCent;
- } else {
- $pendings[$id] = $localAmountCent;
- }
- $pubKeyHex = bin2hex(stream_get_contents($receiverUser->public_key));
- $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([
- 'session_id' => $session->read('session_id'),
- 'email' => $receiverUser->email,
- 'ask' => ['user.identHash']
- ]), '/getUserInfos');
-
- $identHash = 0;
- if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) {
- $identHash = $requestAnswear['data']['userData']['identHash'];
- } else {
- $this->Flash->error(__('Error by requesting LoginServer, please try again'));
- }
-
- //$identHash = TransactionCreation::DRMakeStringHash($receiverUser->email);
- $localTargetDateFrozen = FrozenDate::now();
- $localTargetDateFrozen = $localTargetDateFrozen
- ->year($localTargetDate['year'])
- ->month($localTargetDate['month'])
- ->day($localTargetDate['day']);
-
- $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([
- 'session_id' => $session->read('session_id'),
- 'transaction_type' => 'creation',
- 'memo' => $memo,
- 'amount' => $localAmountCent,
- 'target_pubkey' => $pubKeyHex,
- 'target_date' => $localTargetDateFrozen,
- 'blockchain_type' => $this->blockchainType
- ]), '/createTransaction');
-
- if('success' != $requestAnswear['state']) {
- $this->addAdminError('TransactionCreations', 'createMulti', $requestAnswear, $user['id']);
- if ($requestResult['type'] == 'request error') {
- $this->Flash->error(__('Error by requesting LoginServer, please try again'));
- } else {
- $this->Flash->error(__('Error, please wait for the admin to fix it'));
- }
- }
- if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) {
- $pendingTransactionCount++;
- //echo "pending transaction count: $pendingTransactionCount ";
- } else {
- /*
- * if request contain unknown parameter format, shouldn't happen't at all
- * {"state": "error", "msg": "parameter format unknown"}
- * if json parsing failed
- * {"state": "error", "msg": "json exception", "details":"exception text"}
- * if session_id is zero or not set
- * {"state": "error", "msg": "session_id invalid"}
- * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes)
- * {"state": "error", "msg": "session not found"}
- * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen
- * {"state": "code error", "msg":"user is zero"}
- * if transaction type not known
- * {"state": "error", "msg":"transaction_type unknown"}
- * if receiver wasn't known to Login-Server
- * {"state": "not found", "msg":"receiver not found"}
- * if receiver account disabled, and therefor cannto receive any coins
- * {"state": "disabled", "msg":"receiver is disabled"}
- * if amount is invalid in creation
- * {"state": "invalid parameter", "msg":"invalid amount", "details":"GDD amount in GDD cent ]0,10000000]"}
- * if transaction was okay and will be further proccessed
- * {"state":"success"}
- */
- $answear_data = $requestAnswear['data'];
- if($answear_data['state'] === 'error') {
- if($answear_data['msg'] === 'session_id invalid' || $answear_data['msg'] === 'session not found') {
- $this->Flash->error(__('Fehler mit der Session, bitte logge dich erneut ein!'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- }
- if($answear_data['msg'] === 'user not in group') {
- $this->Flash->error(__('Fehler, Benutzer gehört zu einer anderen Gruppe!'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- }
- } else if($answear_data['state'] === 'not found' && $answear_data['msg'] === 'receiver not found') {
- $this->Flash->error(__('Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- } else if($answear_data['state'] === 'disabled') {
- $this->Flash->error(__('Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden.'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- } else if($answear_data['msg'] === 'invalid amount') {
- $this->Flash->error(__('Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein.'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- } else {
- $this->Flash->error(__('Unbehandelter Fehler: ') . json_encode($answear_data));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- }
- }
-
- }
- /*echo "pendings: ";
- var_dump($pendings);
- echo " ";*/
- foreach ($possibleReceivers as $i => $possibleReceiver) {
- $id = $possibleReceiver['id'];
- if (isset($pendings[$id])) {
- $possibleReceivers[$i]['pending'] = $pendings[$id];
- }
- }
- $this->set('possibleReceivers', $possibleReceivers);
- if ($pendingTransactionCount > 0) {
- $user_balance = 0;
- if (isset($user['balance'])) {
- $user_balance = $user['balance'];
- }
- $session->write('Transactions.pending', $pendingTransactionCount);
-
- if ($mode === 'next') {
- return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303);
- } else {
- $this->Flash->success(__('Transaction submitted for review.'));
- }
- }
- }
- }
- }
-
- public function ajaxCreate()
- {
- if ($this->request->is('post')) {
- $startTime = microtime(true);
- $jsonData = $this->request->input('json_decode', true);
- $session_id = $jsonData['session_id'];
- if(!isset($jsonData['session_id']) || intval($jsonData['session_id']) == 0) {
- return $this->returnJson(['state' => 'parameter missing', 'msg' => 'invalid session id']);
- }
-
- $login_result = $this->requestLogin($session_id, false);
- if($login_result !== true) {
- return $this->returnJson($login_result);
- }
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
-
- $memo = '';
- if(isset($jsonData['memo'])) {
- $memo = $jsonData['memo'];
- }
- $auto_sign = true;
- if(isset($jsonData['auto_sign'])) {
- $auto_sign = $jsonData['auto_sign'];
- }
- if(!isset($jsonData['amount']) || intval($jsonData['amount']) <= 0) {
- return $this->returnJson(['state' => 'parameter missing', 'msg' => 'amount not set or <= 0']);
- }
- if(!isset($jsonData['email'])) {
- return $this->returnJson(['state' => 'parameter missing', 'msg' => 'no receiver email set']);
- }
- $amount = intval($jsonData['amount']);
- if($amount > 10000000) {
- return $this->returnJson(['state' => 'error', 'msg' => 'amount is to big']);
- }
- if($amount <= 0) {
- return $this->returnJson(['state' => 'error', 'msg' => 'amount must be > 0']);
- }
- if(!isset($jsonData['target_date'])) {
- return $this->returnJson(['state' => 'parameter missing', 'msg' => 'target_date not found']);
- }
- //$targetDate = $requestData['target_date'];
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
- $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([
- 'session_id' => $session_id,
- 'email' => $jsonData['email'],
- 'ask' => ['user.pubkeyhex', 'user.disabled', 'user.identHash']
- ]), '/getUserInfos');
- $receiverPubKeyHex = '';
- if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) {
- // will be allways 64 byte long, even if it is empty
- $receiverPubKeyHex = $requestAnswear['data']['userData']['pubkeyhex'];
- } else {
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'receiver email not found on login-server',
- 'details' => $requestAnswear,
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
- if($requestAnswear['data']['userData']['disabled']) {
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'receiver is currently disabled, he cannot receive creations',
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
-
- $builderResult = TransactionCreation::build(
- $amount,
- $memo,
- $receiverPubKeyHex,
- new FrozenDate($jsonData['target_date'])
- );
- $transaction_base64 = '';
- if ($builderResult['state'] == 'success') {
- // todo: maybe use sodium base 64 encoder to make sure it can be readed from login-server
- $transaction_base64 = base64_encode($builderResult['transactionBody']->serializeToString());
- }
-
- $requestResult = $this->JsonRequestClient->sendTransaction(
- $session_id,
- $transaction_base64,
- $user['balance'],
- $auto_sign,
- $this->blockchainType
- );
- if ($requestResult['state'] != 'success') {
- $msg = 'error returned from login server';
- if ($requestResult['type'] === 'request error') {
- $msg = 'login server couldn\'t reached';
- }
- //$this->Flash->error(__('Error, please wait for the admin to fix it'));
- return $this->returnJson([
- 'state' => 'request error',
- 'msg' => $msg,
- 'details' => $requestResult,
- 'timeUsed' => microtime(true) - $startTime
- ]);
- } else {
- $json = $requestResult['data'];
- if ($json['state'] != 'success') {
- if ($json['msg'] == 'session not found') {
- $session->destroy();
- return $this->returnJson(['state' => 'error', 'msg' => 'session not found', 'timeUsed' => microtime(true) - $startTime]);
- } else {
- return $this->returnJson(['state' => 'error', 'msg' => 'login server error', 'details' => $json, 'timeUsed' => microtime(true) - $startTime]);
- }
- } else {
- return $this->returnJson(['state' => 'success', 'timeUsed' => microtime(true) - $startTime]);
- }
- }
- }
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
-
- $transactionCreation = $this->TransactionCreations->newEntity();
- if ($this->request->is('post')) {
- $transactionCreation = $this->TransactionCreations->patchEntity($transactionCreation, $this->request->getData());
- if ($this->TransactionCreations->save($transactionCreation)) {
- $this->Flash->success(__('The transaction creation has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction creation could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionCreations->Transactions->find('list', ['limit' => 200]);
- $stateUsers = $this->TransactionCreations->StateUsers->find('list', ['limit' => 200]);
- $this->set(compact('transactionCreation', 'transactions', 'stateUsers'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Transaction Creation id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $transactionCreation = $this->TransactionCreations->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $transactionCreation = $this->TransactionCreations->patchEntity($transactionCreation, $this->request->getData());
- if ($this->TransactionCreations->save($transactionCreation)) {
- $this->Flash->success(__('The transaction creation has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction creation could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionCreations->Transactions->find('list', ['limit' => 200]);
- $stateUsers = $this->TransactionCreations->StateUsers->find('list', ['limit' => 200]);
- $this->set(compact('transactionCreation', 'transactions', 'stateUsers'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Transaction Creation id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $transactionCreation = $this->TransactionCreations->get($id);
- if ($this->TransactionCreations->delete($transactionCreation)) {
- $this->Flash->success(__('The transaction creation has been deleted.'));
- } else {
- $this->Flash->error(__('The transaction creation could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/TransactionGroupAddaddressController.php b/community_server/src/Controller/TransactionGroupAddaddressController.php
deleted file mode 100644
index fc23c111b..000000000
--- a/community_server/src/Controller/TransactionGroupAddaddressController.php
+++ /dev/null
@@ -1,113 +0,0 @@
-paginate = [
- 'contain' => ['Transactions', 'AddressTypes']
- ];
- $transactionGroupAddaddress = $this->paginate($this->TransactionGroupAddaddress);
-
- $this->set(compact('transactionGroupAddaddress'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Transaction Group Addaddres id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id, [
- 'contain' => ['Transactions', 'AddressTypes']
- ]);
-
- $this->set('transactionGroupAddaddres', $transactionGroupAddaddres);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $transactionGroupAddaddres = $this->TransactionGroupAddaddress->newEntity();
- if ($this->request->is('post')) {
- $transactionGroupAddaddres = $this->TransactionGroupAddaddress->patchEntity($transactionGroupAddaddres, $this->request->getData());
- if ($this->TransactionGroupAddaddress->save($transactionGroupAddaddres)) {
- $this->Flash->success(__('The transaction group addaddres has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction group addaddres could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionGroupAddaddress->Transactions->find('list', ['limit' => 200]);
- $addressTypes = $this->TransactionGroupAddaddress->AddressTypes->find('list', ['limit' => 200]);
- $this->set(compact('transactionGroupAddaddres', 'transactions', 'addressTypes'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Transaction Group Addaddres id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $transactionGroupAddaddres = $this->TransactionGroupAddaddress->patchEntity($transactionGroupAddaddres, $this->request->getData());
- if ($this->TransactionGroupAddaddress->save($transactionGroupAddaddres)) {
- $this->Flash->success(__('The transaction group addaddres has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction group addaddres could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionGroupAddaddress->Transactions->find('list', ['limit' => 200]);
- $addressTypes = $this->TransactionGroupAddaddress->AddressTypes->find('list', ['limit' => 200]);
- $this->set(compact('transactionGroupAddaddres', 'transactions', 'addressTypes'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Transaction Group Addaddres id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $transactionGroupAddaddres = $this->TransactionGroupAddaddress->get($id);
- if ($this->TransactionGroupAddaddress->delete($transactionGroupAddaddres)) {
- $this->Flash->success(__('The transaction group addaddres has been deleted.'));
- } else {
- $this->Flash->error(__('The transaction group addaddres could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/TransactionGroupAllowtradesController.php b/community_server/src/Controller/TransactionGroupAllowtradesController.php
deleted file mode 100644
index 0b83332c6..000000000
--- a/community_server/src/Controller/TransactionGroupAllowtradesController.php
+++ /dev/null
@@ -1,113 +0,0 @@
-paginate = [
- 'contain' => ['Transactions', 'Groups']
- ];
- $transactionGroupAllowtrades = $this->paginate($this->TransactionGroupAllowtrades);
-
- $this->set(compact('transactionGroupAllowtrades'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Transaction Group Allowtrade id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id, [
- 'contain' => ['Transactions', 'Groups']
- ]);
-
- $this->set('transactionGroupAllowtrade', $transactionGroupAllowtrade);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->newEntity();
- if ($this->request->is('post')) {
- $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->patchEntity($transactionGroupAllowtrade, $this->request->getData());
- if ($this->TransactionGroupAllowtrades->save($transactionGroupAllowtrade)) {
- $this->Flash->success(__('The transaction group allowtrade has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction group allowtrade could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionGroupAllowtrades->Transactions->find('list', ['limit' => 200]);
- $groups = $this->TransactionGroupAllowtrades->Groups->find('list', ['limit' => 200]);
- $this->set(compact('transactionGroupAllowtrade', 'transactions', 'groups'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Transaction Group Allowtrade id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->patchEntity($transactionGroupAllowtrade, $this->request->getData());
- if ($this->TransactionGroupAllowtrades->save($transactionGroupAllowtrade)) {
- $this->Flash->success(__('The transaction group allowtrade has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction group allowtrade could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionGroupAllowtrades->Transactions->find('list', ['limit' => 200]);
- $groups = $this->TransactionGroupAllowtrades->Groups->find('list', ['limit' => 200]);
- $this->set(compact('transactionGroupAllowtrade', 'transactions', 'groups'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Transaction Group Allowtrade id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $transactionGroupAllowtrade = $this->TransactionGroupAllowtrades->get($id);
- if ($this->TransactionGroupAllowtrades->delete($transactionGroupAllowtrade)) {
- $this->Flash->success(__('The transaction group allowtrade has been deleted.'));
- } else {
- $this->Flash->error(__('The transaction group allowtrade could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/TransactionGroupCreatesController.php b/community_server/src/Controller/TransactionGroupCreatesController.php
deleted file mode 100644
index 57e5c7d8f..000000000
--- a/community_server/src/Controller/TransactionGroupCreatesController.php
+++ /dev/null
@@ -1,113 +0,0 @@
-paginate = [
- 'contain' => ['Transactions', 'StateGroups']
- ];
- $transactionGroupCreates = $this->paginate($this->TransactionGroupCreates);
-
- $this->set(compact('transactionGroupCreates'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Transaction Group Create id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $transactionGroupCreate = $this->TransactionGroupCreates->get($id, [
- 'contain' => ['Transactions', 'StateGroups']
- ]);
-
- $this->set('transactionGroupCreate', $transactionGroupCreate);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $transactionGroupCreate = $this->TransactionGroupCreates->newEntity();
- if ($this->request->is('post')) {
- $transactionGroupCreate = $this->TransactionGroupCreates->patchEntity($transactionGroupCreate, $this->request->getData());
- if ($this->TransactionGroupCreates->save($transactionGroupCreate)) {
- $this->Flash->success(__('The transaction group create has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction group create could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionGroupCreates->Transactions->find('list', ['limit' => 200]);
- $stateGroups = $this->TransactionGroupCreates->StateGroups->find('list', ['limit' => 200]);
- $this->set(compact('transactionGroupCreate', 'transactions', 'stateGroups'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Transaction Group Create id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $transactionGroupCreate = $this->TransactionGroupCreates->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $transactionGroupCreate = $this->TransactionGroupCreates->patchEntity($transactionGroupCreate, $this->request->getData());
- if ($this->TransactionGroupCreates->save($transactionGroupCreate)) {
- $this->Flash->success(__('The transaction group create has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction group create could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionGroupCreates->Transactions->find('list', ['limit' => 200]);
- $stateGroups = $this->TransactionGroupCreates->StateGroups->find('list', ['limit' => 200]);
- $this->set(compact('transactionGroupCreate', 'transactions', 'stateGroups'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Transaction Group Create id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $transactionGroupCreate = $this->TransactionGroupCreates->get($id);
- if ($this->TransactionGroupCreates->delete($transactionGroupCreate)) {
- $this->Flash->success(__('The transaction group create has been deleted.'));
- } else {
- $this->Flash->error(__('The transaction group create could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/TransactionSendCoinsController.php b/community_server/src/Controller/TransactionSendCoinsController.php
deleted file mode 100644
index bffc88290..000000000
--- a/community_server/src/Controller/TransactionSendCoinsController.php
+++ /dev/null
@@ -1,469 +0,0 @@
-loadComponent('GradidoNumber');
- $this->loadComponent('JsonRequestClient');
- //$this->Auth->allow(['add', 'edit']);
- $this->Auth->allow('create');
- $this->Auth->allow('createRaw');
- $this->Auth->allow('ajaxCreate');
- $this->set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->
- add(new NaviHierarchyEntry(__('Überweisung'), 'TransactionSendCoins', 'create', true))
- );
- }
-
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $this->paginate = [
- 'contain' => ['Transactions', 'StateUsers', 'ReceiverUsers']
- ];
- $transactionSendCoins = $this->paginate($this->TransactionSendCoins);
- $simple = $this->TransactionSendCoins->find('all');
-
- $this->set(compact('transactionSendCoins', 'simple'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Transaction Send Coin id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $transactionSendCoin = $this->TransactionSendCoins->get($id, [
- 'contain' => ['Transactions', 'StateUsers', 'ReceiverUsers']
- ]);
-
- $this->set('transactionSendCoin', $transactionSendCoin);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $transactionSendCoin = $this->TransactionSendCoins->newEntity();
- if ($this->request->is('post')) {
- $transactionSendCoin = $this->TransactionSendCoins->patchEntity($transactionSendCoin, $this->request->getData());
- if ($this->TransactionSendCoins->save($transactionSendCoin)) {
- $this->Flash->success(__('The transaction send coin has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction send coin could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionSendCoins->Transactions->find('list', ['limit' => 200]);
- $stateUsers = $this->TransactionSendCoins->StateUsers->find('list', ['limit' => 200]);
- $receiverUsers = $this->TransactionSendCoins->ReceiverUsers->find('list', ['limit' => 200]);
- $this->set(compact('transactionSendCoin', 'transactions', 'stateUsers', 'receiverUsers'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Transaction Send Coin id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $transactionSendCoin = $this->TransactionSendCoins->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $transactionSendCoin = $this->TransactionSendCoins->patchEntity($transactionSendCoin, $this->request->getData());
- if ($this->TransactionSendCoins->save($transactionSendCoin)) {
- $this->Flash->success(__('The transaction send coin has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction send coin could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionSendCoins->Transactions->find('list', ['limit' => 200]);
- $stateUsers = $this->TransactionSendCoins->StateUsers->find('list', ['limit' => 200]);
- $receiverUsers = $this->TransactionSendCoins->ReceiverUsers->find('list', ['limit' => 200]);
- $this->set(compact('transactionSendCoin', 'transactions', 'stateUsers', 'receiverUsers'));
- }
-
- public function create()
- {
- /*$locale = I18n::getLocale();
- $defaultLocale = I18n::getDefaultLocale();
- echo "locale: $locale, default locale: $defaultLocale ";
- * */
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
-// var_dump($user);
- if(!$user) {
- //return $this->redirect(Router::url('/', true) . 'account/', 303);
- $result = $this->requestLogin();
- if($result !== true) {
- return $result;
- }
- $user = $session->read('StateUser');
- }
-
- $known_groups = $this->JsonRequestClient->sendRequest(json_encode([
- 'ask' => ['groups']
- ]), '/networkInfos');
-
-
- $transferForm = new TransferForm();
- $this->set('transferForm', $transferForm);
- $this->set('timeUsed', microtime(true) - $startTime);
- $this->set('groups', $known_groups['data']['data']['groups']);
- $this->set('user', $user);
-
- if ($this->request->is('post')) {
- //$this->Flash->error(__('Wird zurzeit noch entwickelt!'));
-
- $requestData = $this->request->getData();
- $mode = 'next';
- if(isset($requestData['add'])) {$mode = 'add'; }
- if($transferForm->validate($requestData)) {
-
- $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']);
-
- if(!isset($user['balance']) || $amountCent > $user['balance']) {
- $this->Flash->error(__('Du hast nicht genug Gradidos!'));
- return;
- }
-
- $receiverEmail = $requestData['email'];
- if($receiverEmail === $user['email']) {
- $this->Flash->error(__('Du kannst dir selbst keine Gradidos senden!'));
- return;
- }
- $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([
- 'session_id' => $session->read('session_id'),
- 'transaction_type' => 'transfer',
- 'memo' => $requestData['memo'],
- 'amount' => $amountCent,
- 'target_group' => $known_groups['data']['data']['groups'][$requestData['group']],
- 'target_email' => $receiverEmail,
- 'blockchain_type' => $this->blockchainType
- ]), '/createTransaction');
-
- if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) {
- $pendingTransactionCount = $session->read('Transactions.pending');
- if($pendingTransactionCount == null) {
- $pendingTransactionCount = 1;
- } else {
- $pendingTransactionCount++;
- }
- $session->write('Transactions.pending', $pendingTransactionCount);
- //echo "pending: " . $pendingTransactionCount;
- if($mode === 'next') {
- return $this->redirect($this->loginServerUrl . 'account/checkTransactions', 303);
- } else {
- $this->Flash->success(__('Transaction submitted for review.'));
- }
- } else {
-
- /*
- * if request contain unknown parameter format, shouldn't happen't at all
- * {"state": "error", "msg": "parameter format unknown"}
- * if json parsing failed
- * {"state": "error", "msg": "json exception", "details":"exception text"}
- * if session_id is zero or not set
- * {"state": "error", "msg": "session_id invalid"}
- * if session id wasn't found on login server, if server was restartet or user logged out (also per timeout, default: 15 minutes)
- * {"state": "error", "msg": "session not found"}
- * if session hasn't active user, shouldn't happen't at all, login-server should be checked if happen
- * {"state": "code error", "msg":"user is zero"}
- * if transaction type not known
- * {"state": "error", "msg":"transaction_type unknown"}
- * if receiver wasn't known to Login-Server
- * {"state": "not found", "msg":"receiver not found"}
- * if receiver account disabled, and therefor cannto receive any coins
- * {"state": "disabled", "msg":"receiver is disabled"}
- * if transaction was okay and will be further proccessed
- * {"state":"success"}
- */
- $answear_data = $requestAnswear['data'];
- if($answear_data['state'] === 'error') {
- if($answear_data['msg'] === 'session_id invalid' || $answear_data['msg'] === 'session not found') {
- $this->Flash->error(__('Fehler mit der Session, bitte logge dich erneut ein!'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- }
- if($answear_data['msg'] === 'user not in group') {
- $this->Flash->error(__('Empfänger befindet sich nicht in Zielgruppe!'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- }
- if($answear_data['msg'] === 'memo is not set or not in expected range [5;150]') {
- $this->Flash->error(__('Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- }
- } else if($answear_data['state'] === 'not found' && $answear_data['msg'] === 'receiver not found') {
- $this->Flash->error(__('Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- } else if($answear_data['state'] === 'disabled') {
- $this->Flash->error(__('Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden.'));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- } else {
- $this->Flash->error(__('Unbehandelter Fehler: ') . json_encode($answear_data));
- $this->set('timeUsed', microtime(true) - $startTime);
- return;
- }
-
- }
- }
- }
-
- $this->set('timeUsed', microtime(true) - $startTime);
- }
-
- public function ajaxCreate()
- {
- if ($this->request->is('post')) {
- $startTime = microtime(true);
- $jsonData = $this->request->input('json_decode', true);
- $session_id = $jsonData['session_id'];
- if(!$session_id) {
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid session id']);
- }
-
- $login_result = $this->requestLogin($session_id, false);
- if($login_result !== true) {
- return $this->returnJson($login_result);
- }
- $session = $this->getRequest()->getSession();
- $user = $session->read('StateUser');
-
- $receiverPubKeyHex = '';
- $senderPubKeyHex = $user['public_hex'];
-
- if(!isset($jsonData['amount']) || !isset($jsonData['email'])) {
- return $this->returnJson(['state' => 'parameter missing', 'msg' => 'amount and/or email not set']);
- }
- $amount = intval($jsonData['amount']);
- if($amount < 0) {
- return $this->returnJson(['state' => 'error', 'msg' => 'amout must be > 0 and int']);
- }
-
- if(!isset($user['balance']) || $jsonData['amount'] > $user['balance']) {
- return $this->returnJson(['state' => 'error', 'msg' => 'not enough GDD']);
- }
- $memo = '';
- if(isset($jsonData['memo'])) {
- $memo = $jsonData['memo'];
- }
-
- $receiverEmail = $jsonData['email'];
- if($receiverEmail === $user['email']) {
- return $this->returnJson(['state' => 'error', 'msg' => 'sender and receiver email are the same']);
- }
-
- $requestAnswear = $this->JsonRequestClient->sendRequest(json_encode([
- 'session_id' => $session_id,
- 'email' => $receiverEmail,
- 'ask' => ['user.pubkeyhex', 'user.disabled']
- ]), '/getUserInfos');
- if('success' == $requestAnswear['state'] && 'success' == $requestAnswear['data']['state']) {
- // will be allways 64 byte long, even if it is empty
- $receiverPubKeyHex = $requestAnswear['data']['userData']['pubkeyhex'];
- } else {
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'receiver email not found on login-server',
- 'details' => $requestAnswear,
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
- if($requestAnswear['data']['userData']['disabled']) {
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'receiver is currently disabled, he cannot receive payments',
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
-
-
- //var_dump($sessionStateUser);
-
- $builderResult = TransactionTransfer::build(
- $amount,
- $memo,
- $receiverPubKeyHex,
- $senderPubKeyHex
- );
- $auto_sign = true;
- if(isset($jsonData['auto_sign'])) {
- $auto_sign = $jsonData['auto_sign'];
- }
- if($builderResult['state'] === 'success') {
-
- $http = new Client();
- try {
- $loginServer = Configure::read('LoginServer');
- $url = $loginServer['host'] . ':' . $loginServer['port'];
-
- $response = $http->post($url . '/checkTransaction', json_encode([
- 'session_id' => $session_id,
- 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()),
- 'auto_sign' => $auto_sign,
- 'balance' => $user['balance']
- ]), ['type' => 'json']);
- $json = $response->getJson();
- if($json['state'] != 'success') {
- if($json['msg'] == 'session not found') {
- $session->destroy();
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'session not found',
- 'details' => $session_id,
- 'timeUsed' => microtime(true) - $startTime
- ]);
- //$this->Flash->error(__('session not found, please login again'));
- } else {
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'login server return error',
- 'details' => $json,
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
- } else {
- return $this->returnJson(['state' => 'success', 'timeUsed' => microtime(true) - $startTime]);
- }
-
- } catch(\Exception $e) {
- $msg = $e->getMessage();
- //$this->Flash->error(__('error http request: ') . $msg);
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'error http request',
- 'details' => $msg,
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
-
- } else {
- return $this->returnJson([
- 'state' => 'error',
- 'msg' => 'no valid receiver public key given',
- 'details' => $receiverPubKeyHex,
- 'timeUsed' => microtime(true) - $startTime
- ]);
- }
- }
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request']);
- }
-
- public function createRaw()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
-
- $transferRawForm = new TransferRawForm();
- $this->set('transferRawForm', $transferRawForm);
-
- if ($this->request->is('post')) {
- $requestData = $this->request->getData();
- if($transferRawForm->validate($requestData)) {
- $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']);
- $sender = ['priv' => $requestData['sender_privkey_hex'], 'pub' => $requestData['sender_pubkey_hex']];
- $reciver = ['pub' => $requestData['receiver_pubkey_hex']];
-
- $builderResult = TransactionTransfer::build(
- $amountCent,
- $requestData['memo'],
- $reciver['pub'],
- $sender['pub']
- );
- if($builderResult['state'] === 'success') {
- $protoTransaction = Transaction::build($builderResult['transactionBody'], $sender);
- $transaction = new Transaction($protoTransaction);
- if(!$transaction->validate()) {
- $this->Flash->error(__('Error validating transaction'));
- } else {
- if(!$transaction->save()) {
- $this->Flash->error(__('Error saving transaction'));
- } else {
- $this->Flash->success(__('Gradidos erfolgreich überwiesen!'));
- }
- }
- } else {
- $this->Flash->error(__('Error building transaction'));
- }
-
- }
- //var_dump($requestData);
- //
- //var_dump($data);
-
- }
-
- $this->set('timeUsed', microtime(true) - $startTime);
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Transaction Send Coin id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $transactionSendCoin = $this->TransactionSendCoins->get($id);
- if ($this->TransactionSendCoins->delete($transactionSendCoin)) {
- $this->Flash->success(__('The transaction send coin has been deleted.'));
- } else {
- $this->Flash->error(__('The transaction send coin could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/TransactionSignaturesController.php b/community_server/src/Controller/TransactionSignaturesController.php
deleted file mode 100644
index 91aea9558..000000000
--- a/community_server/src/Controller/TransactionSignaturesController.php
+++ /dev/null
@@ -1,111 +0,0 @@
-paginate = [
- 'contain' => ['Transactions']
- ];
- $transactionSignatures = $this->paginate($this->TransactionSignatures);
-
- $this->set(compact('transactionSignatures'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Transaction Signature id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $transactionSignature = $this->TransactionSignatures->get($id, [
- 'contain' => ['Transactions']
- ]);
-
- $this->set('transactionSignature', $transactionSignature);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $transactionSignature = $this->TransactionSignatures->newEntity();
- if ($this->request->is('post')) {
- $transactionSignature = $this->TransactionSignatures->patchEntity($transactionSignature, $this->request->getData());
- if ($this->TransactionSignatures->save($transactionSignature)) {
- $this->Flash->success(__('The transaction signature has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction signature could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionSignatures->Transactions->find('list', ['limit' => 200]);
- $this->set(compact('transactionSignature', 'transactions'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Transaction Signature id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $transactionSignature = $this->TransactionSignatures->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $transactionSignature = $this->TransactionSignatures->patchEntity($transactionSignature, $this->request->getData());
- if ($this->TransactionSignatures->save($transactionSignature)) {
- $this->Flash->success(__('The transaction signature has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction signature could not be saved. Please, try again.'));
- }
- $transactions = $this->TransactionSignatures->Transactions->find('list', ['limit' => 200]);
- $this->set(compact('transactionSignature', 'transactions'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Transaction Signature id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $transactionSignature = $this->TransactionSignatures->get($id);
- if ($this->TransactionSignatures->delete($transactionSignature)) {
- $this->Flash->success(__('The transaction signature has been deleted.'));
- } else {
- $this->Flash->error(__('The transaction signature could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/TransactionTypesController.php b/community_server/src/Controller/TransactionTypesController.php
deleted file mode 100644
index 8256b22eb..000000000
--- a/community_server/src/Controller/TransactionTypesController.php
+++ /dev/null
@@ -1,106 +0,0 @@
-paginate($this->TransactionTypes);
-
- $this->set(compact('transactionTypes'));
- }
-
- /**
- * View method
- *
- * @param string|null $id Transaction Type id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $transactionType = $this->TransactionTypes->get($id, [
- 'contain' => ['Transactions']
- ]);
-
- $this->set('transactionType', $transactionType);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $transactionType = $this->TransactionTypes->newEntity();
- if ($this->request->is('post')) {
- $transactionType = $this->TransactionTypes->patchEntity($transactionType, $this->request->getData());
- if ($this->TransactionTypes->save($transactionType)) {
- $this->Flash->success(__('The transaction type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction type could not be saved. Please, try again.'));
- }
- $this->set(compact('transactionType'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Transaction Type id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $transactionType = $this->TransactionTypes->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $transactionType = $this->TransactionTypes->patchEntity($transactionType, $this->request->getData());
- if ($this->TransactionTypes->save($transactionType)) {
- $this->Flash->success(__('The transaction type has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction type could not be saved. Please, try again.'));
- }
- $this->set(compact('transactionType'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Transaction Type id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $transactionType = $this->TransactionTypes->get($id);
- if ($this->TransactionTypes->delete($transactionType)) {
- $this->Flash->success(__('The transaction type has been deleted.'));
- } else {
- $this->Flash->error(__('The transaction type could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/TransactionsController.php b/community_server/src/Controller/TransactionsController.php
deleted file mode 100644
index 67526dfcc..000000000
--- a/community_server/src/Controller/TransactionsController.php
+++ /dev/null
@@ -1,450 +0,0 @@
-loadComponent('GradidoNumber');
- $this->loadComponent('JsonRpcRequestClient');
- $this->Auth->allow(['decode', 'manualTransaction']);
-
- }
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $this->paginate = [
- 'contain' => ['TransactionTypes']
- ];
- $transactions = $this->paginate($this->Transactions);
-
- $this->set(compact('transactions'));
- }
-
- public function synchronizeWithStateUserTransactions()
- {
- $startTime = microtime(true);
- $missing_transaction_ids = [];
- $transaction_ids = $this->Transactions
- ->find('all')
- ->select(['id', 'transaction_type_id'])
- ->order(['id'])
- ->all()
- ;
- $state_user_transaction_ids = $this->Transactions->StateUserTransactions
- ->find('all')
- ->select(['transaction_id'])
- ->group(['transaction_id'])
- ->order(['transaction_id'])
- ->toArray()
- ;
- $i2 = 0;
- $count1 = count($transaction_ids);
- $count2 = count($state_user_transaction_ids);
- foreach($transaction_ids as $i1 => $tr_id) {
- //echo "$i1: ";
- if($i2 >= $count2) {
- $missing_transaction_ids[] = $tr_id;
- //echo "adding to missing: $tr_id, continue ";
- continue;
- }
- $stu_id = $state_user_transaction_ids[$i2];
- if($tr_id->id == $stu_id->transaction_id) {
- $i2++;
- //echo "after i2++: $i2 ";
- } else if($tr_id->id < $stu_id->transaction_id) {
- $missing_transaction_ids[] = $tr_id;
- //echo "adding to missing: $tr_id ";
- }
- }
-
- if($this->request->is('POST')) {
- $tablesForType = [
- 1 => $this->Transactions->TransactionCreations,
- 2 => $this->Transactions->TransactionSendCoins,
- 3 => $this->Transactions->TransactionGroupCreates,
- 4 => $this->Transactions->TransactionGroupAddaddress,
- 5 => $this->Transactions->TransactionGroupAddaddress
- ];
- $idsForType = [];
- foreach($missing_transaction_ids as $i => $transaction) {
- if(!isset($idsForType[$transaction->transaction_type_id])) {
- $idsForType[$transaction->transaction_type_id] = [];
- }
- $idsForType[$transaction->transaction_type_id][] = $transaction->id;
- if($i > 200) break;
- }
- $entities = [];
- $state_user_ids = [];
- foreach($idsForType as $type_id => $transaction_ids) {
- $specific_transactions = $tablesForType[$type_id]->find('all')->where(['transaction_id IN' => $transaction_ids])->toArray();
- $keys = $tablesForType[$type_id]->getSchema()->columns();
- //var_dump($keys);
- foreach($specific_transactions as $specific) {
-
- foreach($keys as $key) {
- if(preg_match('/_user_id/', $key)) {
- $entity = $this->Transactions->StateUserTransactions->newEntity();
- $entity->transaction_id = $specific['transaction_id'];
- $entity->transaction_type_id = $type_id;
- $entity->state_user_id = $specific[$key];
- if(!in_array($entity->state_user_id, $state_user_ids)) {
- array_push($state_user_ids, $entity->state_user_id);
- }
- $entities[] = $entity;
- }
- }
- }
- }
- //var_dump($entities);
- $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers');
- $existingStateUsers = $stateUsersTable->find('all')->select(['id'])->where(['id IN' => $state_user_ids])->order(['id'])->all();
- $existing_state_user_ids = [];
- $finalEntities = [];
- foreach($existingStateUsers as $stateUser) {
- $existing_state_user_ids[] = $stateUser->id;
- }
- foreach($entities as $entity) {
- if(in_array($entity->state_user_id, $existing_state_user_ids)) {
- array_push($finalEntities, $entity);
- }
- }
-
-
- $results = $this->Transactions->StateUserTransactions->saveMany($finalEntities);
- foreach($entities as $i => $entity) {
- $errors = $entity->getErrors();
- /* if(count($errors)) {
- echo "$i: ";
- echo json_encode($errors);
- echo " ";
- echo "state_user_id: " . $entity->state_user_id;
- echo " ";
- }*/
- }
- $this->set('results', $results);
- $this->set('entities', $entities);
- }
-
- $this->set('missing_transactions', $missing_transaction_ids);
- $this->set('count1', $count1);
- $this->set('count2', $count2);
- $timeUsed = microtime(true) - $startTime;
- $this->set('timeUsed', $timeUsed);
- }
-
- /**
- * View method
- *
- * @param string|null $id Transaction id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $transaction = $this->Transactions->get($id, [
- 'contain' => ['TransactionTypes', 'TransactionCreations', 'TransactionGroupAddaddress', 'TransactionGroupAllowtrades', 'TransactionGroupCreates', 'TransactionSendCoins', 'TransactionSignatures']
- ]);
-
- $this->set('transaction', $transaction);
- }
-
- public function manualTransaction()
- {
- if ($this->request->is('post')) {
- $data = $this->request->getData();
- $type = $data['type'];
-
- $transaction = new \Proto\Gradido\GradidoTransaction();
- $transactionBody = new \Proto\Gradido\TransactionBody();
- $transactionBody->setMemo($data['memo']);
- $created = new \Proto\Gradido\TimestampSeconds();
- $now = new Time();
- $created->setSeconds($now->getTimestamp());
- $transactionBody->setCreated($created);
- if($type == "creation") {
- $creation = new \Proto\Gradido\GradidoCreation();
- $target_date = new \Proto\Gradido\TimestampSeconds();
- $target_time = new Time($data['target_date']);
- $target_date->setSeconds($target_time->getTimestamp());
- $creation->setTargetDate($target_date);
- $receiver = new \Proto\Gradido\TransferAmount();
- $receiver->setAmount(intval($data['amount']));
- $receiver->setPubkey(hex2bin($data['target_public_key']));
- $creation->setReceiver($receiver);
- $transactionBody->setCreation($creation);
- } else if($type == "transfer") {
- $transfer = new \Proto\Gradido\GradidoTransfer();
- $local_transfer = new \Proto\Gradido\LocalTransfer();
- $sender = new \Proto\Gradido\TransferAmount();
- $sender->setAmount(intval($data['amount']));
- $sender->setPubkey(hex2bin($data['sender_public_key']));
- $local_transfer->setSender($sender);
- $local_transfer->setReceiver(hex2bin($data['receiver_public_key']));
- $transfer->setLocal($local_transfer);
- $transactionBody->setTransfer($transfer);
- }
- $body_bytes = $transactionBody->serializeToString();
- $transaction->setBodyBytes($body_bytes);
-
- $protoSigMap = new \Proto\Gradido\SignatureMap();
- $sigPairs = $protoSigMap->getSigPair();
- //echo "sigPairs: "; var_dump($sigPairs); echo " ";
- //return null;
-
- // sign with keys
- //foreach($keys as $key) {
- $sigPair = new \Proto\Gradido\SignaturePair();
- $sigPair->setPubKey(hex2bin($data['signer_public_key']));
-
- $signature = sodium_crypto_sign_detached($body_bytes, hex2bin($data['signer_private_key']));
- echo "signature: " . bin2hex($signature). " ";
- $sigPair->setEd25519($signature);
-
- $sigPairs[] = $sigPair;
- // SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING
- // SODIUM_BASE64_VARIANT_ORIGINAL
- $transaction->setSigMap($protoSigMap);
- //var_dump($protoSigMap);
- $transaction_bin = $transaction->serializeToString();
-// $url_safe = sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL);
- $base64 = [
- //'original' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL),
- //'original_nopadding' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_ORIGINAL_NO_PADDING),
- //'urlsafe' => sodium_bin2base64($transaction_bin, sodium_base64_VARIANT_URLSAFE),
- 'urlsafe_nopadding' => sodium_bin2base64($transaction_bin, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING),
- 'php' => base64_encode($transaction_bin)
-
- ];
-
- $this->set('base64', $base64);
- }
- }
-
- public function decode()
- {
- $this->viewBuilder()->setLayout('frontend');
- if ($this->request->is('post')) {
- $base64 = $this->request->getData('base64');
- if(!$base64 || $base64 == '') {
- $this->Flash->error(__('No valid data given, please try again.'));
- } else {
- try {
- $transactionBin = sodium_base642bin($base64, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
- } catch(Exception $ex) {
- var_dump($ex);
- }
- $transaction = new TransactionBody($transactionBin);
- if($transaction->hasErrors()) {
- $this->set('errors', $transaction->getErrors());
- } else {
- //$transaction->validate();
- if($transaction->hasErrors()) {
- $this->set('errors', $transaction->getErrors());
- }
- //var_dump($transaction);
- echo " bin: ";
- var_dump($transactionBin);
- echo " ";
- $this->set('transaction', $transaction);
- }
-
- }
- }
-
- }
-
- public function sendToNode() {
- $this->viewBuilder()->setLayout('frontend');
- $startTime = microtime(true);
-
- //$loginServer = Configure::read('LoginServer');
-
- $jsonRpcResult = $this->JsonRpcRequestClient->request('getlasttransaction', []);
- $result = $jsonRpcResult['result'];
- //var_dump($result);
- if($result['state'] != 'success') {
- $this->Flash->error(__('error retriving last saved transaction from gradido node.'));
- $timeUsed = microtime(true) - $startTime;
- $this->set('timeUsed', $timeUsed);
- return;
- }
-
- $firstId = 1;
- if($result['transaction'] != '') {
- $lastKnowTransaction = new Transaction($result['transaction']);
- $firstId = $lastKnowTransaction->getId()+1;
- }
-
- $transactionIDEntities = $this->Transactions
- ->find('all')
- ->select(['id'])
- ->where(['id >=' => $firstId])
- ;
- $transactionIDs = [];
- foreach($transactionIDEntities as $entity) {
- array_push($transactionIDs, $entity->id);
- }
-
- $csfr_token = $this->request->getParam('_csrfToken');
- $this->set('csfr_token', $csfr_token);
- $this->set('transactionIds', $transactionIDs);
-
- $timeUsed = microtime(true) - $startTime;
- $this->set('timeUsed', $timeUsed);
-
- if ($this->request->is('post')) {
- $host = $this->request->getData('host');
- $port = $this->request->getData('port');
- //$gradidod = new JsonRpcClient($host . ':' . $port);
-
-
- //var_dump($transactionIDs);
-
- //$result = $this->JsonRpcRequestClient->request('puttransaction', ['group' => 'Hallo', 'transaction' => 'Hallo2' ]);
-
- //$result = $gradidod->putTransaction(['group' => 'Hallo', 'transaction' => 'Hallo2' ]);
- //var_dump($result);
-
- $timeUsed = microtime(true) - $startTime;
- $this->set('timeUsed', $timeUsed);
- }
- }
-
- public function ajaxPutTransactionToGradidoNode()
- {
- $startTime = microtime(true);
- if($this->request->is('post')) {
- //$jsonData = $this->request->input('json_decode', true);
- $data = $this->request->getData();
- //$user = $jsonData['user'];
- //var_dump($data);
- $transactionId = $data['transaction_id'];
- if($transactionId == null || $transactionId < 1) {
- $timeUsed = microtime(true) - $startTime;
- return $this->returnJson(['state' => 'error', 'msg' => 'invalid transaction id', 'timeUsed' => $timeUsed]);
- }
- try {
- $transaction = Transaction::fromTable($transactionId);
- } catch(Exception $e) {
- echo "exception: ";
- var_dump($e);
- }
- if(is_array($transaction)) {
- $timeUsed = microtime(true) - $startTime;
- $transaction['timeUsed'] = $timeUsed;
- return $this->returnJson($transaction);
- } else {
- $transactionBase64 = base64_encode($transaction->serializeToString());
- //echo "base64: $transactionBase64 ";
-
- $result = $this->JsonRpcRequestClient->request('puttransaction', [
- 'group' => 'd502c4254defe1842d71c484dc35f56983ce938e3c22058795c7520b62ab9123',
- 'transaction' => $transactionBase64
- ]);
-
- $timeUsed = microtime(true) - $startTime;
- $result['timeUsed'] = $timeUsed;
- return $this->returnJson($result);
- }
- //return $this->returnJson(['state' => 'success', 'timeUsed' => $timeUsed]);
- }
- $timeUsed = microtime(true) - $startTime;
- return $this->returnJson(['state' => 'error', 'msg' => 'no post request', 'timeUsed' => $timeUsed]);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $transaction = $this->Transactions->newEntity();
- if ($this->request->is('post')) {
- $transaction = $this->Transactions->patchEntity($transaction, $this->request->getData());
- if ($this->Transactions->save($transaction)) {
- $result = $this->Transactions->updateTxHash($transaction, 'start decay');
- if($result === true) {
- $this->Flash->success(__('The transaction has been saved.'));
- return $this->redirect(['action' => 'index']);
- } else {
- $this->Flash->error(__('Error by saving: ' . json_encode($result)));
- }
- }
- $this->Flash->error(__('The transaction could not be saved. Please, try again.'));
- }
- $stateGroups = $this->Transactions->StateGroups->find('list', ['limit' => 200]);
- $transactionTypes = $this->Transactions->TransactionTypes->find('list', ['limit' => 200]);
- $blockchainTypes = $this->Transactions->BlockchainTypes->find('list');
- $this->set(compact('transaction', 'stateGroups', 'transactionTypes', 'blockchainTypes'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id Transaction id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $transaction = $this->Transactions->get($id, [
- 'contain' => []
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $transaction = $this->Transactions->patchEntity($transaction, $this->request->getData());
- if ($this->Transactions->save($transaction)) {
- $this->Flash->success(__('The transaction has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The transaction could not be saved. Please, try again.'));
- }
- $stateGroups = $this->Transactions->StateGroups->find('list', ['limit' => 200]);
- $transactionTypes = $this->Transactions->TransactionTypes->find('list', ['limit' => 200]);
- $this->set(compact('transaction', 'stateGroups', 'transactionTypes'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id Transaction id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $transaction = $this->Transactions->get($id);
- if ($this->Transactions->delete($transaction)) {
- $this->Flash->success(__('The transaction has been deleted.'));
- } else {
- $this->Flash->error(__('The transaction could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Controller/UsersController.php b/community_server/src/Controller/UsersController.php
deleted file mode 100644
index f6b0472d3..000000000
--- a/community_server/src/Controller/UsersController.php
+++ /dev/null
@@ -1,167 +0,0 @@
-set(
- 'naviHierarchy',
- (new NaviHierarchy())->
- add(new NaviHierarchyEntry(__('Startseite'), 'Dashboard', 'index', false))->add(new NaviHierarchyEntry(__('Benutzerstatistiken'), 'Users', 'statistics', true))
- );
- }
-
- /**
- * Index method
- *
- * @return \Cake\Http\Response|null
- */
- public function index()
- {
- $users = $this->paginate($this->Users);
-
- $this->set(compact('users'));
- }
-
- public function statistics()
- {
- $startTime = microtime(true);
- $this->viewBuilder()->setLayout('frontend');
- $users = $this->Users->find('all')->select(['id']);
-
- //$newUsersThisMonth
- $now = new Time();
- $sortDate = $this->getStartEndForMonth($now->month, $now->year);
- $newUsersThisMonth = $this->Users->find('all')
- ->select(['id'])
- ->where(['created >=' => $sortDate[0], 'created <' => $sortDate[1]]);
- $lastMonth = new Time();
- $lastMonth = $lastMonth->subMonth(1);
- $prevSortDate = $this->getStartEndForMonth($lastMonth->month, $lastMonth->year);
- $newUsersLastMonth = $this->Users->find('all')
- ->select(['id'])
- ->where(['created >=' => $prevSortDate[0], 'created <' => $prevSortDate[1]]);
-
- // new user sorted after date
- $connection = ConnectionManager::get('loginServer');
- $newAccountsPerDay = $connection->execute('SELECT count(id) as count, created FROM users GROUP BY CAST(created as DATE) ORDER BY created DESC ')->fetchAll('assoc');
-
- $newAccountsTree = [];
- foreach($newAccountsPerDay as $entry) {
- $created = new Time($entry['created']);
- if(!isset($newAccountsTree[$created->year])) {
- $newAccountsTree[$created->year] = [];
- }
- if(!isset($newAccountsTree[$created->year][$created->month])) {
- $newAccountsTree[$created->year][$created->month] = ['count' => 0, 'days' => []];
- }
- array_push($newAccountsTree[$created->year][$created->month]['days'], $entry);
- $newAccountsTree[$created->year][$created->month]['count'] += intval($entry['count']);
- }
-
- // last 5 new users
- $lastUsers = $this->Users->find('all')->order(['created DESC'])->limit(5);
-
- $timeUsed = microtime(true) - $startTime;
-
- $this->set(compact(
- 'users', 'newUsersThisMonth', 'newUsersLastMonth',
- 'timeUsed', 'newAccountsTree', 'lastUsers'));
- }
-
- /**
- * View method
- *
- * @param string|null $id User id.
- * @return \Cake\Http\Response|null
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function view($id = null)
- {
- $user = $this->Users->get($id, [
- 'contain' => ['EmailOptIn', 'UserBackups', 'UserRoles'],
- ]);
-
- $this->set('user', $user);
- }
-
- /**
- * Add method
- *
- * @return \Cake\Http\Response|null Redirects on successful add, renders view otherwise.
- */
- public function add()
- {
- $user = $this->Users->newEntity();
- if ($this->request->is('post')) {
- $user = $this->Users->patchEntity($user, $this->request->getData());
- if ($this->Users->save($user)) {
- $this->Flash->success(__('The user has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The user could not be saved. Please, try again.'));
- }
- $this->set(compact('user'));
- }
-
- /**
- * Edit method
- *
- * @param string|null $id User id.
- * @return \Cake\Http\Response|null Redirects on successful edit, renders view otherwise.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function edit($id = null)
- {
- $user = $this->Users->get($id, [
- 'contain' => [],
- ]);
- if ($this->request->is(['patch', 'post', 'put'])) {
- $user = $this->Users->patchEntity($user, $this->request->getData());
- if ($this->Users->save($user)) {
- $this->Flash->success(__('The user has been saved.'));
-
- return $this->redirect(['action' => 'index']);
- }
- $this->Flash->error(__('The user could not be saved. Please, try again.'));
- }
- $this->set(compact('user'));
- }
-
- /**
- * Delete method
- *
- * @param string|null $id User id.
- * @return \Cake\Http\Response|null Redirects to index.
- * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
- */
- public function delete($id = null)
- {
- $this->request->allowMethod(['post', 'delete']);
- $user = $this->Users->get($id);
- if ($this->Users->delete($user)) {
- $this->Flash->success(__('The user has been deleted.'));
- } else {
- $this->Flash->error(__('The user could not be deleted. Please, try again.'));
- }
-
- return $this->redirect(['action' => 'index']);
- }
-}
diff --git a/community_server/src/Form/AssignRoleForm.php b/community_server/src/Form/AssignRoleForm.php
deleted file mode 100644
index 158fa2296..000000000
--- a/community_server/src/Form/AssignRoleForm.php
+++ /dev/null
@@ -1,30 +0,0 @@
-addField('role_id', ['type' => 'string']);
- }
-
- function validationDefault(Validator $validator)
- {
- $validator->setProvider('custom', 'App\Model\Validation\GenericValidation');
-
- return $validator;
- }
-
-
- protected function _execute(array $data)
- {
- // Send an email.
- return true;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Form/CreationForm.php b/community_server/src/Form/CreationForm.php
deleted file mode 100644
index 70b4fce40..000000000
--- a/community_server/src/Form/CreationForm.php
+++ /dev/null
@@ -1,73 +0,0 @@
-addField('receiver_pubkey_hex', ['type' => 'string'])
- ->addField('receiver', ['type' => 'select'])
- ->addField('amount', ['type' => 'decimal', 'precision' => 2])
- ->addField('target_date', ['type' => 'date'])
- ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]);
- }
-
- function validationDefault(Validator $validator)
- {
- $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation');
- /*
- $validator->add('receiver_pubkey_hex', 'length', [
- 'rule' => ['length', 64],
- 'message' => 'a valid pubkey in hex format is required (64 character)'
- ])->add('receiver_pubkey_hex_select', 'length', [
- 'rule' => ['length', 64],
- 'message' => 'a valid pubkey in hex format is required (64 character)',
- ]);
-*/
- // TODO: add validation for used character to prevent hacking attempts
- $validator->add('memo', 'length', [
- 'rule' => ['maxLength', 150],
- 'message' => 'max 150 character'
- ])
- //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed'))
- ->add('memo', 'custom', [
- 'rule' => 'alphaNumeric',
- 'provider' => 'custom',
- //'message' => __('Only Alpha Numeric Character allowed')
- 'message' => __('No HTML Tags like > or < please.')
- ])
- ->allowEmptyString('memo', null, 'create')
- /*->add('receiver_pubkey_hex', 'custom', [
- 'rule' => 'hexKey64',
- 'provider' => 'custom',
- 'message' => 'a valid pubkey in hex format is required (64 character)'
- ])
- ->allowEmptyString('receiver_pubkey_hex', null, 'create')*/
- ->add('amount', 'custom', [
- 'rule' => 'amount',
- 'provider' => 'custom',
- 'message' => __('Please give a valid number with maximal 2 decimal places')
- ]);
- return $validator;
- }
- /*
- * $validator->add('title', 'custom', [
- 'rule' => 'customRule',
- 'provider' => 'custom',
- 'message' => 'The title is not unique enough'
-]);
- */
-
- protected function _execute(array $data)
- {
- // Send an email.
- return true;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Form/DecodeTransaction.php b/community_server/src/Form/DecodeTransaction.php
deleted file mode 100644
index 3ac00faa6..000000000
--- a/community_server/src/Form/DecodeTransaction.php
+++ /dev/null
@@ -1,8 +0,0 @@
-addField('first_name', ['type' => 'string'])
- ->addField('last_name', ['type' => 'string'])
- ->addField('profile_img', ['type' => 'string'])
- ->addField('profile_desc', ['type' =>'text', 'default' => '', 'rows' => 10, 'maxlength' => 2000]);
- }
-
- function validationDefault(Validator $validator)
- {
- $validator->setProvider('generic', 'App\Model\Validation\GenericValidation');
- $validator->add('first_name', 'length', [
- 'rule' => ['maxLength', 255],
- 'message' => __('The first name should contain max 255 characters')
- ])
- ->add('last_name', 'length', [
- 'rule' => ['maxLength', 255],
- 'message' => __('The last name should contain max 255 characters')
- ])
- ->add('profile_desc', 'length', [
- 'rule' => ['maxLength', 2000],
- 'message' => __('The description should contain max 2000 characters')
- ])
- ->add('profile_desc', 'generic', [
- 'rule' => 'alphaNumeric',
- 'provider' => 'generic',
- 'message' => __('No HTML Tags like > or < please.')
- ])
- ->allowEmptyString('profile_img', null, 'create')
- ->allowEmptyString('profile_desc', null, 'create')
- ;
- return $validator;
- }
-
- protected function _execute(array $data)
- {
- // Send an email. (??? xxx)
- return true;
- }
-}
diff --git a/community_server/src/Form/TransferForm.php b/community_server/src/Form/TransferForm.php
deleted file mode 100644
index cb135ab9e..000000000
--- a/community_server/src/Form/TransferForm.php
+++ /dev/null
@@ -1,82 +0,0 @@
-addField('email', ['type' => 'string'])
- ->addField('group', ['type' => 'string'])
- ->addField('amount', ['type' => 'decimal', 'precision' => 2])
- ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]);
- }
-
- function validationDefault(Validator $validator)
- {
- $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation');
- /*
- $validator->add('receiver_pubkey_hex', 'length', [
- 'rule' => ['length', 64],
- 'message' => 'a valid pubkey in hex format is required (64 character)'
- ])->add('receiver_pubkey_hex_select', 'length', [
- 'rule' => ['length', 64],
- 'message' => 'a valid pubkey in hex format is required (64 character)',
- ]);
-*/
- // TODO: add validation for used character to prevent hacking attempts
- $validator->add('email', 'format', [
- 'rule' => 'email',
- 'message' => __('A valid email address is required')
- ])
- ->add('group', 'custom', [
- 'rule' => 'alphaNumeric',
- 'provider' => 'custom',
- //'message' => __('Only Alpha Numeric Character allowed')
- 'message' => __('No HTML Tags like > or < please.')
- ])
- ->add('memo', 'length', [
- 'rule' => ['maxLength', 150],
- 'message' => __('The memo should contain max 150 character')
- ])
- //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed'))
- ->add('memo', 'custom', [
- 'rule' => 'alphaNumeric',
- 'provider' => 'custom',
- //'message' => __('Only Alpha Numeric Character allowed')
- 'message' => __('No HTML Tags like > or < please.')
- ])
- ->allowEmptyString('memo', null, 'create')
- /*->add('receiver_pubkey_hex', 'custom', [
- 'rule' => 'hexKey64',
- 'provider' => 'custom',
- 'message' => 'a valid pubkey in hex format is required (64 character)'
- ])
- ->allowEmptyString('receiver_pubkey_hex', null, 'create')*/
- ->add('amount', 'custom', [
- 'rule' => 'amount',
- 'provider' => 'custom',
- 'message' => __('Please give a valid positive number with maximal 2 decimal places')
- ]);
- return $validator;
- }
- /*
- * $validator->add('title', 'custom', [
- 'rule' => 'customRule',
- 'provider' => 'custom',
- 'message' => 'The title is not unique enough'
-]);
- */
-
- protected function _execute(array $data)
- {
- // Send an email.
- return true;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Form/TransferRawForm.php b/community_server/src/Form/TransferRawForm.php
deleted file mode 100644
index 50c548ec5..000000000
--- a/community_server/src/Form/TransferRawForm.php
+++ /dev/null
@@ -1,73 +0,0 @@
-addField('sender_privkey_hex', ['type' => 'string'])
- ->addField('sender_pubkey_hex', ['type' => 'string'])
- ->addField('receiver_pubkey_hex', ['type' => 'string'])
- ->addField('amount', ['type' => 'decimal', 'precision' => 2])
- ->addField('memo', ['type' =>'text', 'default' => '', 'rows' => 3, 'maxlength' => 150]);
- }
-
- function validationDefault(Validator $validator)
- {
- $validator->setProvider('custom', 'App\Model\Validation\TransactionValidation');
-
- $validator
- ->add('memo', 'length', [
- 'rule' => ['maxLength', 150],
- 'message' => __('The memo should contain max 150 character')
- ])
- ->add('memo', 'custom', [
- 'rule' => 'alphaNumeric',
- 'provider' => 'custom',
- //'message' => __('Only Alpha Numeric Character allowed')
- 'message' => __('No HTML Tags like > or < please.')
- ])
- ->allowEmptyString('memo', null, 'create')
- ->add('receiver_pubkey_hex', 'custom', [
- 'rule' => 'hexKey64',
- 'provider' => 'custom',
- 'message' => 'a valid pubkey in hex format is required (64 character)'
- ])
- ->add('sender_privkey_hex', 'custom', [
- 'rule' => 'hexKey128',
- 'provider' => 'custom',
- 'message' => 'a valid privkey in hex format is required (128 character)'
- ])
- ->add('sender_pubkey_hex', 'custom', [
- 'rule' => 'hexKey64',
- 'provider' => 'custom',
- 'message' => 'a valid pubkey in hex format is required (64 character)'
- ])
- ->add('amount', 'custom', [
- 'rule' => 'amount',
- 'provider' => 'custom',
- 'message' => __('Please give a valid positive number with maximal 2 decimal places')
- ]);
- return $validator;
- }
- /*
- * $validator->add('title', 'custom', [
- 'rule' => 'customRule',
- 'provider' => 'custom',
- 'message' => 'The title is not unique enough'
-]);
- */
-
- protected function _execute(array $data)
- {
- // Send an email.
- return true;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Form/UserSearchForm.php b/community_server/src/Form/UserSearchForm.php
deleted file mode 100644
index c68269920..000000000
--- a/community_server/src/Form/UserSearchForm.php
+++ /dev/null
@@ -1,58 +0,0 @@
-addField('search', ['type' => 'string'])
- ->addField('account_state', ['type' => 'select']);
- }
-
- function validationDefault(Validator $validator)
- {
- $validator->setProvider('custom', 'App\Model\Validation\GenericValidation');
- /*
- $validator->add('receiver_pubkey_hex', 'length', [
- 'rule' => ['length', 64],
- 'message' => 'a valid pubkey in hex format is required (64 character)'
- ])->add('receiver_pubkey_hex_select', 'length', [
- 'rule' => ['length', 64],
- 'message' => 'a valid pubkey in hex format is required (64 character)',
- ]);
-*/
- // TODO: add validation for used character to prevent hacking attempts
- $validator->add('search', 'length', [
- 'rule' => ['maxLength', 50],
- 'message' => __('The search text should contain max 50 character')
- ])
- //->alphaNumeric('memo', __('Only Alpha Numeric Character allowed'))
- ->add('search', 'custom', [
- 'rule' => 'alphaNumeric',
- 'provider' => 'custom',
- //'message' => __('Only Alpha Numeric Character allowed')
- 'message' => __('No HTML Tags like < or > please.')
- ]);
- return $validator;
- }
- /*
- * $validator->add('title', 'custom', [
- 'rule' => 'customRule',
- 'provider' => 'custom',
- 'message' => 'The title is not unique enough'
-]);
- */
-
- protected function _execute(array $data)
- {
- // Send an email.
- return true;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Locale/cake.pot b/community_server/src/Locale/cake.pot
deleted file mode 100644
index 7d317194e..000000000
--- a/community_server/src/Locale/cake.pot
+++ /dev/null
@@ -1,29 +0,0 @@
-# LANGUAGE translation of CakePHP Application
-# Copyright YEAR NAME
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"POT-Creation-Date: 2019-11-12 14:40+0000\n"
-"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
-"Last-Translator: NAME \n"
-"Language-Team: LANGUAGE \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: Template/Error/error400.ctp:36
-#: Template/Error/error500.ctp:41
-msgid "Error"
-msgstr ""
-
-#: Template/Error/error400.ctp:37
-msgid "The requested address {0} was not found on this server."
-msgstr ""
-
-#: Template/Error/error500.ctp:39
-msgid "An Internal Error Has Occurred"
-msgstr ""
-
diff --git a/community_server/src/Locale/de_DE/default.mo b/community_server/src/Locale/de_DE/default.mo
deleted file mode 100644
index c739334c8..000000000
Binary files a/community_server/src/Locale/de_DE/default.mo and /dev/null differ
diff --git a/community_server/src/Locale/de_DE/default.po b/community_server/src/Locale/de_DE/default.po
deleted file mode 100644
index 90fa91803..000000000
--- a/community_server/src/Locale/de_DE/default.po
+++ /dev/null
@@ -1,3097 +0,0 @@
-# LANGUAGE translation of CakePHP Application
-# Copyright YEAR NAME
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"POT-Creation-Date: 2021-08-11 11:38+0000\n"
-"PO-Revision-Date: 2021-08-11 13:39+0200\n"
-"Last-Translator: \n"
-"Language-Team: LANGUAGE \n"
-"Language: de_DE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.3\n"
-
-#: Controller/AddressTypesController.php:54
-#: Controller/AddressTypesController.php:78
-msgid "The address type has been saved."
-msgstr ""
-
-#: Controller/AddressTypesController.php:58
-#: Controller/AddressTypesController.php:82
-msgid "The address type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/AddressTypesController.php:99
-msgid "The address type has been deleted."
-msgstr ""
-
-#: Controller/AddressTypesController.php:101
-msgid "The address type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/AdminErrorsController.php:57
-#: Controller/AdminErrorsController.php:82
-msgid "The admin error has been saved."
-msgstr ""
-
-#: Controller/AdminErrorsController.php:61
-#: Controller/AdminErrorsController.php:86
-msgid "The admin error could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/AdminErrorsController.php:104
-msgid "The admin error has been deleted."
-msgstr ""
-
-#: Controller/AdminErrorsController.php:106
-msgid "The admin error could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/AppController.php:262
-msgid "error updating state user "
-msgstr ""
-
-#: Controller/AppController.php:276
-msgid "error saving state user "
-msgstr ""
-
-#: Controller/AppController.php:286
-msgid "no pubkey"
-msgstr ""
-
-#: Controller/AppController.php:295
-msgid "invalid session"
-msgstr ""
-
-#: Controller/AppController.php:297
-msgid "Konto ist nicht aktiviert!"
-msgstr ""
-
-#: Controller/AppController.php:311 Controller/StateUsersController.php:103
-msgid "error http request: "
-msgstr ""
-
-#: Controller/AppController.php:358
-msgid "(Leere Message)"
-msgstr ""
-
-#: Controller/AppController.php:363
-msgid "(Leere Details)"
-msgstr ""
-
-#: Controller/AppController.php:367
-msgid "Serious error, couldn't save to db, please write the admin: "
-msgstr ""
-
-#: Controller/BlockchainTypesController.php:54
-#: Controller/BlockchainTypesController.php:78
-msgid "The blockchain type has been saved."
-msgstr ""
-
-#: Controller/BlockchainTypesController.php:58
-#: Controller/BlockchainTypesController.php:82
-msgid "The blockchain type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/BlockchainTypesController.php:99
-msgid "The blockchain type has been deleted."
-msgstr ""
-
-#: Controller/BlockchainTypesController.php:101
-msgid "The blockchain type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/CommunityProfilesController.php:54
-#: Controller/CommunityProfilesController.php:78
-msgid "The community profile has been saved."
-msgstr ""
-
-#: Controller/CommunityProfilesController.php:58
-#: Controller/CommunityProfilesController.php:82
-msgid "The community profile could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/CommunityProfilesController.php:99
-msgid "The community profile has been deleted."
-msgstr ""
-
-#: Controller/CommunityProfilesController.php:101
-msgid "The community profile could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/DashboardController.php:29 Controller/ProfileController.php:28
-#: Controller/StateBalancesController.php:52
-#: Controller/StateBalancesController.php:202
-#: Controller/StateErrorsController.php:26
-#: Controller/StateUserRolesController.php:42
-#: Controller/StateUsersController.php:54
-#: Controller/TransactionCreationsController.php:42
-#: Controller/TransactionSendCoinsController.php:44
-#: Controller/UsersController.php:26 Template/Element/navi.ctp:33
-msgid "Startseite"
-msgstr ""
-
-#: Controller/ElopageBuysController.php:112
-#: Controller/ElopageBuysController.php:137
-msgid "The elopage buy has been saved."
-msgstr ""
-
-#: Controller/ElopageBuysController.php:116
-#: Controller/ElopageBuysController.php:141
-msgid "The elopage buy could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/ElopageBuysController.php:158
-msgid "The elopage buy has been deleted."
-msgstr ""
-
-#: Controller/ElopageBuysController.php:160
-msgid "The elopage buy could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/JsonRequestHandlerController.php:366
-msgid "Gradido Transaktion fehlgeschlagen!"
-msgstr ""
-
-#: Controller/OperatorTypesController.php:54
-#: Controller/OperatorTypesController.php:78
-msgid "The operator type has been saved."
-msgstr ""
-
-#: Controller/OperatorTypesController.php:58
-#: Controller/OperatorTypesController.php:82
-msgid "The operator type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/OperatorTypesController.php:99
-msgid "The operator type has been deleted."
-msgstr ""
-
-#: Controller/OperatorTypesController.php:101
-msgid "The operator type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/OperatorsController.php:182
-#: Controller/OperatorsController.php:207
-msgid "The operator has been saved."
-msgstr ""
-
-#: Controller/OperatorsController.php:186
-#: Controller/OperatorsController.php:211
-msgid "The operator could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/OperatorsController.php:229
-msgid "The operator has been deleted."
-msgstr ""
-
-#: Controller/OperatorsController.php:231
-msgid "The operator could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/ProfileController.php:29 Template/Element/user_menu.ctp:15
-#: Template/Profile/index.ctp:19
-msgid "Mein Profil"
-msgstr ""
-
-#: Controller/ProfileController.php:108
-msgid "Dein Profil wurde aktualisiert!"
-msgstr ""
-
-#: Controller/ProfileController.php:111
-msgid ""
-"Non-recoverable database problem - state_user doesn't exist or not unique!"
-msgstr ""
-
-#: Controller/ProfileController.php:198
-#: Controller/StateUserRolesController.php:117
-#: Controller/StateUsersController.php:291
-#: Controller/TransactionCreationsController.php:183
-msgid "Something was invalid, please try again!"
-msgstr ""
-
-#: Controller/RolesController.php:56 Controller/RolesController.php:80
-msgid "The role has been saved."
-msgstr ""
-
-#: Controller/RolesController.php:60 Controller/RolesController.php:84
-msgid "The role could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/RolesController.php:101
-msgid "The role has been deleted."
-msgstr ""
-
-#: Controller/RolesController.php:103
-msgid "The role could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/ServerUsersController.php:42
-msgid "Invalid username or password, try again"
-msgstr ""
-
-#: Controller/ServerUsersController.php:79
-#: Controller/ServerUsersController.php:103
-msgid "The server user has been saved."
-msgstr ""
-
-#: Controller/ServerUsersController.php:83
-#: Controller/ServerUsersController.php:107
-msgid "The server user could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/ServerUsersController.php:124
-msgid "The server user has been deleted."
-msgstr ""
-
-#: Controller/ServerUsersController.php:126
-msgid "The server user could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateBalancesController.php:53 Template/Dashboard/index.ctp:30
-#: Template/Element/navi.ctp:22 Template/StateBalances/overview.ctp:8
-msgid "Kontoübersicht"
-msgstr ""
-
-#: Controller/StateBalancesController.php:203
-#: Template/StateBalances/overview_gdt.ctp:20
-msgid "GDT Kontoübersicht"
-msgstr ""
-
-#: Controller/StateBalancesController.php:252
-msgid "Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!"
-msgstr ""
-
-#: Controller/StateBalancesController.php:351
-#: Controller/StateBalancesController.php:376
-msgid "The state balance has been saved."
-msgstr ""
-
-#: Controller/StateBalancesController.php:355
-#: Controller/StateBalancesController.php:380
-msgid "The state balance could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateBalancesController.php:398
-msgid "The state balance has been deleted."
-msgstr ""
-
-#: Controller/StateBalancesController.php:400
-msgid "The state balance could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateCreatedController.php:57
-#: Controller/StateCreatedController.php:83
-msgid "The state created has been saved."
-msgstr ""
-
-#: Controller/StateCreatedController.php:61
-#: Controller/StateCreatedController.php:87
-msgid "The state created could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateCreatedController.php:106
-msgid "The state created has been deleted."
-msgstr ""
-
-#: Controller/StateCreatedController.php:108
-msgid "The state created could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateErrorsController.php:27 Template/Dashboard/index.ctp:79
-#: Template/Dashboard/server_index.ctp:31 Template/Element/navi_header.ctp:33
-#: Template/Element/navi_notify.ctp:32
-msgid "Fehler"
-msgstr ""
-
-#: Controller/StateErrorsController.php:75
-msgid "Error belongs to another User, cannot delete"
-msgstr ""
-
-#: Controller/StateErrorsController.php:78
-#: Controller/StateErrorsController.php:166
-msgid "The state error has been deleted."
-msgstr ""
-
-#: Controller/StateErrorsController.php:80
-#: Controller/StateErrorsController.php:168
-msgid "The state error could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateErrorsController.php:117
-#: Controller/StateErrorsController.php:143
-msgid "The state error has been saved."
-msgstr ""
-
-#: Controller/StateErrorsController.php:121
-#: Controller/StateErrorsController.php:147
-msgid "The state error could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupAddressesController.php:57
-#: Controller/StateGroupAddressesController.php:83
-msgid "The state group address has been saved."
-msgstr ""
-
-#: Controller/StateGroupAddressesController.php:61
-#: Controller/StateGroupAddressesController.php:87
-msgid "The state group address could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupAddressesController.php:106
-msgid "The state group address has been deleted."
-msgstr ""
-
-#: Controller/StateGroupAddressesController.php:108
-msgid "The state group address could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupRelationshipsController.php:57
-#: Controller/StateGroupRelationshipsController.php:84
-msgid "The state group relationship has been saved."
-msgstr ""
-
-#: Controller/StateGroupRelationshipsController.php:61
-#: Controller/StateGroupRelationshipsController.php:88
-msgid "The state group relationship could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupRelationshipsController.php:108
-msgid "The state group relationship has been deleted."
-msgstr ""
-
-#: Controller/StateGroupRelationshipsController.php:110
-msgid "The state group relationship could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupsController.php:57
-#: Controller/StateGroupsController.php:82
-msgid "The state group has been saved."
-msgstr ""
-
-#: Controller/StateGroupsController.php:61
-#: Controller/StateGroupsController.php:86
-msgid "The state group could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupsController.php:104
-msgid "The state group has been deleted."
-msgstr ""
-
-#: Controller/StateGroupsController.php:106
-msgid "The state group could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateRelationshipTypesController.php:54
-#: Controller/StateRelationshipTypesController.php:78
-msgid "The state relationship type has been saved."
-msgstr ""
-
-#: Controller/StateRelationshipTypesController.php:58
-#: Controller/StateRelationshipTypesController.php:82
-msgid "The state relationship type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateRelationshipTypesController.php:99
-msgid "The state relationship type has been deleted."
-msgstr ""
-
-#: Controller/StateRelationshipTypesController.php:101
-msgid "The state relationship type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateUserRolesController.php:42
-#: Controller/StateUsersController.php:54 Template/StateUserRoles/search.ctp:9
-#: Template/StateUsers/search.ctp:9
-msgid "Benutzer suchen"
-msgstr ""
-
-#: Controller/StateUserRolesController.php:149
-msgid "Role has been assigned to User."
-msgstr ""
-
-#: Controller/StateUserTransactionsController.php:233
-#: Controller/StateUserTransactionsController.php:260
-msgid "The state user transaction has been saved."
-msgstr ""
-
-#: Controller/StateUserTransactionsController.php:237
-#: Controller/StateUserTransactionsController.php:264
-msgid "The state user transaction could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateUserTransactionsController.php:284
-msgid "The state user transaction has been deleted."
-msgstr ""
-
-#: Controller/StateUserTransactionsController.php:286
-msgid "The state user transaction could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateUsersController.php:21
-msgid "account created"
-msgstr "Konto angelegt"
-
-#: Controller/StateUsersController.php:22
-msgid "account not on login-server"
-msgstr "Konto nicht auf Login-Server"
-
-#: Controller/StateUsersController.php:23
-msgid "email activated"
-msgstr "Konto aktiviert"
-
-#: Controller/StateUsersController.php:24
-msgid "account copied to community"
-msgstr "Konto kopiert nach Community-Server"
-
-#: Controller/StateUsersController.php:25
-msgid "email not activated"
-msgstr "Konto nicht aktiviert"
-
-#: Controller/StateUsersController.php:26
-msgid "account multiple times on login-server"
-msgstr "Konto mehrfach vorhanden"
-
-#: Controller/StateUsersController.php:27
-msgid "account not on community server"
-msgstr "Konto nicht auf Community-Server"
-
-#: Controller/StateUsersController.php:28
-msgid "no keys"
-msgstr "Keine Schlüssel generiert"
-
-#: Controller/StateUsersController.php:560
-#: Controller/StateUsersController.php:586
-msgid "The state user has been saved."
-msgstr ""
-
-#: Controller/StateUsersController.php:564
-#: Controller/StateUsersController.php:590
-msgid "The state user could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateUsersController.php:609
-msgid "The state user has been deleted."
-msgstr ""
-
-#: Controller/StateUsersController.php:611
-msgid "The state user could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:42
-msgid "Gradido schöpfen"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:149
-#: Controller/TransactionCreationsController.php:385
-#: Controller/TransactionCreationsController.php:408
-msgid "Error by requesting LoginServer, please try again"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:151
-#: Controller/TransactionCreationsController.php:410
-msgid "Error, please wait for the admin to fix it"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:161
-msgid "Login Server Error, please wait for the admin to fix it"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:174
-#: Controller/TransactionCreationsController.php:491
-#: Controller/TransactionSendCoinsController.php:204
-msgid "Transaction submitted for review."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:179
-msgid "Building transaction failed"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:342
-msgid "No user selected"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:442
-#: Controller/TransactionSendCoinsController.php:231
-msgid "Fehler mit der Session, bitte logge dich erneut ein!"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:447
-msgid "Fehler, Benutzer gehört zu einer anderen Gruppe!"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:452
-#: Controller/TransactionSendCoinsController.php:246
-msgid ""
-"Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto "
-"schon angelegt?"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:456
-#: Controller/TransactionSendCoinsController.php:250
-msgid ""
-"Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos "
-"gesendet werden."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:460
-msgid "Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:464
-#: Controller/TransactionSendCoinsController.php:254
-msgid "Unbehandelter Fehler: "
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:625
-#: Controller/TransactionCreationsController.php:651
-msgid "The transaction creation has been saved."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:629
-#: Controller/TransactionCreationsController.php:655
-msgid "The transaction creation could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:674
-msgid "The transaction creation has been deleted."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:676
-msgid "The transaction creation could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupAddaddressController.php:57
-#: Controller/TransactionGroupAddaddressController.php:83
-msgid "The transaction group addaddres has been saved."
-msgstr ""
-
-#: Controller/TransactionGroupAddaddressController.php:61
-#: Controller/TransactionGroupAddaddressController.php:87
-msgid "The transaction group addaddres could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupAddaddressController.php:106
-msgid "The transaction group addaddres has been deleted."
-msgstr ""
-
-#: Controller/TransactionGroupAddaddressController.php:108
-msgid ""
-"The transaction group addaddres could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupAllowtradesController.php:57
-#: Controller/TransactionGroupAllowtradesController.php:83
-msgid "The transaction group allowtrade has been saved."
-msgstr ""
-
-#: Controller/TransactionGroupAllowtradesController.php:61
-#: Controller/TransactionGroupAllowtradesController.php:87
-msgid "The transaction group allowtrade could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupAllowtradesController.php:106
-msgid "The transaction group allowtrade has been deleted."
-msgstr ""
-
-#: Controller/TransactionGroupAllowtradesController.php:108
-msgid ""
-"The transaction group allowtrade could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupCreatesController.php:57
-#: Controller/TransactionGroupCreatesController.php:83
-msgid "The transaction group create has been saved."
-msgstr ""
-
-#: Controller/TransactionGroupCreatesController.php:61
-#: Controller/TransactionGroupCreatesController.php:87
-msgid "The transaction group create could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupCreatesController.php:106
-msgid "The transaction group create has been deleted."
-msgstr ""
-
-#: Controller/TransactionGroupCreatesController.php:108
-msgid "The transaction group create could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:45
-#: Template/Dashboard/index.ctp:38 Template/Element/navi.ctp:34
-#: Template/StateUsers/view.ctp:83 Template/StateUsers/view.ctp:117
-#: Template/TransactionSendCoins/create.ctp:9
-#: Template/TransactionSendCoins/create_raw.ctp:9
-msgid "Überweisung"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:92
-#: Controller/TransactionSendCoinsController.php:119
-msgid "The transaction send coin has been saved."
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:96
-#: Controller/TransactionSendCoinsController.php:123
-msgid "The transaction send coin could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:173
-msgid "Du hast nicht genug Gradidos!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:179
-msgid "Du kannst dir selbst keine Gradidos senden!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:236
-msgid "Empfänger befindet sich nicht in Zielgruppe!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:241
-msgid "Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:428
-msgid "Error validating transaction"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:431
-msgid "Error saving transaction"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:433
-msgid "Gradidos erfolgreich überwiesen!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:437
-msgid "Error building transaction"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:462
-msgid "The transaction send coin has been deleted."
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:464
-msgid "The transaction send coin could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionSignaturesController.php:57
-#: Controller/TransactionSignaturesController.php:82
-msgid "The transaction signature has been saved."
-msgstr ""
-
-#: Controller/TransactionSignaturesController.php:61
-#: Controller/TransactionSignaturesController.php:86
-msgid "The transaction signature could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionSignaturesController.php:104
-msgid "The transaction signature has been deleted."
-msgstr ""
-
-#: Controller/TransactionSignaturesController.php:106
-msgid "The transaction signature could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionTypesController.php:54
-#: Controller/TransactionTypesController.php:78
-msgid "The transaction type has been saved."
-msgstr ""
-
-#: Controller/TransactionTypesController.php:58
-#: Controller/TransactionTypesController.php:82
-msgid "The transaction type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionTypesController.php:99
-msgid "The transaction type has been deleted."
-msgstr ""
-
-#: Controller/TransactionTypesController.php:101
-msgid "The transaction type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionsController.php:252
-msgid "No valid data given, please try again."
-msgstr ""
-
-#: Controller/TransactionsController.php:289
-msgid "error retriving last saved transaction from gradido node."
-msgstr ""
-
-#: Controller/TransactionsController.php:391
-#: Controller/TransactionsController.php:420
-msgid "The transaction has been saved."
-msgstr ""
-
-#: Controller/TransactionsController.php:394
-msgid "Error by saving: "
-msgstr ""
-
-#: Controller/TransactionsController.php:397
-#: Controller/TransactionsController.php:424
-msgid "The transaction could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionsController.php:443
-msgid "The transaction has been deleted."
-msgstr ""
-
-#: Controller/TransactionsController.php:445
-msgid "The transaction could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/UsersController.php:26
-msgid "Benutzerstatistiken"
-msgstr ""
-
-#: Controller/UsersController.php:115 Controller/UsersController.php:139
-msgid "The user has been saved."
-msgstr ""
-
-#: Controller/UsersController.php:119 Controller/UsersController.php:143
-msgid "The user could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/UsersController.php:160
-msgid "The user has been deleted."
-msgstr ""
-
-#: Controller/UsersController.php:162
-msgid "The user could not be deleted. Please, try again."
-msgstr ""
-
-#: Form/CreationForm.php:44 Form/ProfileForm.php:39 Form/TransferForm.php:42
-#: Form/TransferForm.php:53 Form/TransferRawForm.php:35
-msgid "No HTML Tags like > or < please."
-msgstr ""
-
-#: Form/CreationForm.php:56
-msgid "Please give a valid number with maximal 2 decimal places"
-msgstr ""
-
-#: Form/ProfileForm.php:26
-msgid "The first name should contain max 255 characters"
-msgstr ""
-
-#: Form/ProfileForm.php:30
-msgid "The last name should contain max 255 characters"
-msgstr ""
-
-#: Form/ProfileForm.php:34
-msgid "The description should contain max 2000 characters"
-msgstr ""
-
-#: Form/TransferForm.php:36
-msgid "A valid email address is required"
-msgstr ""
-
-#: Form/TransferForm.php:46 Form/TransferRawForm.php:29
-msgid "The memo should contain max 150 character"
-msgstr ""
-
-#: Form/TransferForm.php:65 Form/TransferRawForm.php:56
-msgid "Please give a valid positive number with maximal 2 decimal places"
-msgstr ""
-
-#: Form/UserSearchForm.php:34
-msgid "The search text should contain max 50 character"
-msgstr ""
-
-#: Form/UserSearchForm.php:41
-msgid "No HTML Tags like < or > please."
-msgstr ""
-
-#: Model/Table/ServerUsersTable.php:58
-msgid "Please give a username"
-msgstr ""
-
-#: Model/Table/ServerUsersTable.php:64
-msgid "Please give a password"
-msgstr ""
-
-#: Model/Table/ServerUsersTable.php:69
-msgid "Please give a email"
-msgstr ""
-
-#: Model/Transactions/TransactionCreation.php:209
-msgid "Gradido Schöpfung erhalten"
-msgstr ""
-
-#: Model/Transactions/TransactionTransfer.php:210
-msgid "Gradidos erhalten"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:9 Template/AddressTypes/edit.ctp:9
-#: Template/AddressTypes/index.ctp:9 Template/AddressTypes/index.ctp:25
-#: Template/AddressTypes/view.ctp:9 Template/AddressTypes/view.ctp:45
-#: Template/AddressTypes/view.ctp:73 Template/AdminErrors/add.ctp:9
-#: Template/AdminErrors/edit.ctp:9 Template/AdminErrors/index.ctp:9
-#: Template/AdminErrors/index.ctp:26 Template/AdminErrors/view.ctp:9
-#: Template/BlockchainTypes/add.ctp:9 Template/BlockchainTypes/edit.ctp:9
-#: Template/BlockchainTypes/index.ctp:9 Template/BlockchainTypes/index.ctp:22
-#: Template/BlockchainTypes/view.ctp:9 Template/CommunityProfiles/add.ctp:9
-#: Template/CommunityProfiles/edit.ctp:9 Template/CommunityProfiles/index.ctp:9
-#: Template/CommunityProfiles/index.ctp:21
-#: Template/CommunityProfiles/view.ctp:9 Template/ElopageBuys/add.ctp:9
-#: Template/ElopageBuys/edit.ctp:9 Template/ElopageBuys/index.ctp:9
-#: Template/ElopageBuys/index.ctp:30 Template/ElopageBuys/view.ctp:9
-#: Template/OperatorTypes/edit.ctp:9 Template/OperatorTypes/index.ctp:9
-#: Template/OperatorTypes/index.ctp:23 Template/OperatorTypes/view.ctp:9
-#: Template/OperatorTypes/view.ctp:43 Template/Operators/add.ctp:9
-#: Template/Operators/edit.ctp:9 Template/Operators/index.ctp:9
-#: Template/Operators/index.ctp:24 Template/Operators/view.ctp:9
-#: Template/Roles/add.ctp:9 Template/Roles/edit.ctp:9
-#: Template/Roles/index.ctp:9 Template/Roles/index.ctp:20
-#: Template/Roles/view.ctp:9 Template/ServerUsers/add.ctp:9
-#: Template/ServerUsers/edit.ctp:9 Template/ServerUsers/index.ctp:9
-#: Template/ServerUsers/index.ctp:26 Template/ServerUsers/view.ctp:9
-#: Template/StateBalances/add.ctp:9 Template/StateBalances/edit.ctp:9
-#: Template/StateBalances/index.ctp:9 Template/StateBalances/index.ctp:25
-#: Template/StateBalances/view.ctp:9 Template/StateCreated/add.ctp:9
-#: Template/StateCreated/edit.ctp:9 Template/StateCreated/index.ctp:9
-#: Template/StateCreated/index.ctp:29 Template/StateCreated/view.ctp:9
-#: Template/StateErrors/add.ctp:9 Template/StateErrors/edit.ctp:9
-#: Template/StateErrors/index.ctp:9 Template/StateErrors/index.ctp:26
-#: Template/StateErrors/view.ctp:9 Template/StateGroupAddresses/add.ctp:9
-#: Template/StateGroupAddresses/edit.ctp:9
-#: Template/StateGroupAddresses/index.ctp:9
-#: Template/StateGroupAddresses/index.ctp:26
-#: Template/StateGroupAddresses/view.ctp:9
-#: Template/StateGroupRelationships/add.ctp:9
-#: Template/StateGroupRelationships/edit.ctp:9
-#: Template/StateGroupRelationships/index.ctp:9
-#: Template/StateGroupRelationships/index.ctp:22
-#: Template/StateGroupRelationships/view.ctp:9 Template/StateGroups/add.ctp:9
-#: Template/StateGroups/edit.ctp:9 Template/StateGroups/index.ctp:9
-#: Template/StateGroups/index.ctp:29 Template/StateGroups/view.ctp:9
-#: Template/StateGroups/view.ctp:49 Template/StateGroups/view.ctp:76
-#: Template/StateGroups/view.ctp:104 Template/StateGroups/view.ctp:133
-#: Template/StateRelationshipTypes/add.ctp:9
-#: Template/StateRelationshipTypes/edit.ctp:9
-#: Template/StateRelationshipTypes/index.ctp:9
-#: Template/StateRelationshipTypes/index.ctp:21
-#: Template/StateRelationshipTypes/view.ctp:9
-#: Template/StateUserRoles/index.ctp:9 Template/StateUserRoles/index.ctp:36
-#: Template/StateUserRoles/search.ctp:33
-#: Template/StateUserTransactions/add.ctp:9
-#: Template/StateUserTransactions/edit.ctp:9
-#: Template/StateUserTransactions/index.ctp:9
-#: Template/StateUserTransactions/index.ctp:28
-#: Template/StateUserTransactions/view.ctp:9 Template/StateUsers/add.ctp:9
-#: Template/StateUsers/edit.ctp:9 Template/StateUsers/index.ctp:9
-#: Template/StateUsers/index.ctp:36 Template/StateUsers/view.ctp:9
-#: Template/StateUsers/view.ctp:34 Template/StateUsers/view.ctp:58
-#: Template/StateUsers/view.ctp:89 Template/StateUsers/view.ctp:122
-#: Template/TransactionCreations/add.ctp:9
-#: Template/TransactionCreations/edit.ctp:9
-#: Template/TransactionCreations/index.ctp:9
-#: Template/TransactionCreations/index.ctp:28
-#: Template/TransactionCreations/view.ctp:9
-#: Template/TransactionGroupAddaddress/add.ctp:9
-#: Template/TransactionGroupAddaddress/edit.ctp:9
-#: Template/TransactionGroupAddaddress/index.ctp:9
-#: Template/TransactionGroupAddaddress/index.ctp:26
-#: Template/TransactionGroupAddaddress/view.ctp:9
-#: Template/TransactionGroupAllowtrades/add.ctp:9
-#: Template/TransactionGroupAllowtrades/edit.ctp:9
-#: Template/TransactionGroupAllowtrades/index.ctp:9
-#: Template/TransactionGroupAllowtrades/index.ctp:24
-#: Template/TransactionGroupAllowtrades/view.ctp:9
-#: Template/TransactionGroupCreates/add.ctp:9
-#: Template/TransactionGroupCreates/edit.ctp:9
-#: Template/TransactionGroupCreates/index.ctp:9
-#: Template/TransactionGroupCreates/index.ctp:26
-#: Template/TransactionGroupCreates/view.ctp:9
-#: Template/TransactionSendCoins/add.ctp:9
-#: Template/TransactionSendCoins/edit.ctp:9
-#: Template/TransactionSendCoins/index.ctp:9
-#: Template/TransactionSendCoins/index.ctp:28
-#: Template/TransactionSendCoins/view.ctp:9
-#: Template/TransactionSignatures/add.ctp:9
-#: Template/TransactionSignatures/edit.ctp:9
-#: Template/TransactionSignatures/index.ctp:9
-#: Template/TransactionSignatures/index.ctp:22
-#: Template/TransactionSignatures/view.ctp:9
-#: Template/TransactionTypes/add.ctp:9 Template/TransactionTypes/edit.ctp:9
-#: Template/TransactionTypes/index.ctp:9 Template/TransactionTypes/index.ctp:23
-#: Template/TransactionTypes/view.ctp:9 Template/TransactionTypes/view.ctp:44
-#: Template/Transactions/add.ctp:9 Template/Transactions/edit.ctp:9
-#: Template/Transactions/index.ctp:9 Template/Transactions/view.ctp:9
-#: Template/Transactions/view.ctp:66 Template/Transactions/view.ctp:97
-#: Template/Transactions/view.ctp:125 Template/Transactions/view.ctp:152
-#: Template/Transactions/view.ctp:180 Template/Transactions/view.ctp:211
-#: Template/Transactions/view.ctp:241 Template/Users/add.ctp:9
-#: Template/Users/edit.ctp:9 Template/Users/index.ctp:9
-#: Template/Users/index.ctp:26 Template/Users/view.ctp:9
-msgid "Actions"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:10 Template/AddressTypes/edit.ctp:16
-#: Template/AddressTypes/view.ctp:12 Template/StateGroupAddresses/add.ctp:13
-#: Template/StateGroupAddresses/edit.ctp:19
-#: Template/StateGroupAddresses/index.ctp:13
-#: Template/StateGroupAddresses/view.ctp:16
-#: Template/TransactionGroupAddaddress/add.ctp:13
-#: Template/TransactionGroupAddaddress/edit.ctp:19
-#: Template/TransactionGroupAddaddress/index.ctp:13
-#: Template/TransactionGroupAddaddress/view.ctp:16
-msgid "List Address Types"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:11 Template/AddressTypes/edit.ctp:17
-#: Template/AddressTypes/index.ctp:11 Template/AddressTypes/view.ctp:14
-#: Template/StateGroupAddresses/add.ctp:10
-#: Template/StateGroupAddresses/edit.ctp:16
-#: Template/StateGroupAddresses/view.ctp:12 Template/StateGroups/add.ctp:11
-#: Template/StateGroups/edit.ctp:17 Template/StateGroups/index.ctp:11
-#: Template/StateGroups/view.ctp:14
-msgid "List State Group Addresses"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:12 Template/AddressTypes/edit.ctp:18
-#: Template/AddressTypes/index.ctp:12 Template/AddressTypes/view.ctp:15
-#: Template/StateGroupAddresses/index.ctp:10
-#: Template/StateGroupAddresses/view.ctp:13 Template/StateGroups/add.ctp:12
-#: Template/StateGroups/edit.ctp:18 Template/StateGroups/index.ctp:12
-#: Template/StateGroups/view.ctp:15
-msgid "New State Group Address"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:13 Template/AddressTypes/edit.ctp:19
-#: Template/AddressTypes/index.ctp:13 Template/AddressTypes/view.ctp:16
-#: Template/TransactionGroupAddaddress/add.ctp:10
-#: Template/TransactionGroupAddaddress/edit.ctp:16
-#: Template/TransactionGroupAddaddress/view.ctp:12
-#: Template/Transactions/add.ctp:19 Template/Transactions/edit.ctp:25
-#: Template/Transactions/index.ctp:19 Template/Transactions/view.ctp:22
-msgid "List Transaction Group Addaddress"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:14 Template/AddressTypes/edit.ctp:20
-#: Template/AddressTypes/index.ctp:14 Template/AddressTypes/view.ctp:17
-#: Template/TransactionGroupAddaddress/index.ctp:10
-#: Template/TransactionGroupAddaddress/view.ctp:13
-#: Template/Transactions/add.ctp:20 Template/Transactions/edit.ctp:26
-#: Template/Transactions/index.ctp:20 Template/Transactions/view.ctp:23
-msgid "New Transaction Group Addaddres"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:20
-msgid "Add Address Type"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:26 Template/AddressTypes/edit.ctp:32
-#: Template/AdminErrors/add.ctp:28 Template/AdminErrors/edit.ctp:34
-#: Template/BlockchainTypes/add.ctp:23 Template/BlockchainTypes/edit.ctp:29
-#: Template/CommunityProfiles/add.ctp:22 Template/CommunityProfiles/edit.ctp:28
-#: Template/ElopageBuys/add.ctp:31 Template/ElopageBuys/edit.ctp:37
-#: Template/OperatorTypes/add.ctp:24 Template/OperatorTypes/edit.ctp:30
-#: Template/Operators/add.ctp:24 Template/Operators/edit.ctp:30
-#: Template/Roles/add.ctp:21 Template/Roles/edit.ctp:27
-#: Template/ServerUsers/add.ctp:24 Template/ServerUsers/edit.ctp:32
-#: Template/StateBalances/add.ctp:25 Template/StateBalances/edit.ctp:31
-#: Template/StateCreated/add.ctp:29 Template/StateCreated/edit.ctp:35
-#: Template/StateErrors/add.ctp:27 Template/StateErrors/edit.ctp:33
-#: Template/StateGroupAddresses/add.ctp:26
-#: Template/StateGroupAddresses/edit.ctp:32
-#: Template/StateGroupRelationships/add.ctp:23
-#: Template/StateGroupRelationships/edit.ctp:29 Template/StateGroups/add.ctp:30
-#: Template/StateGroups/edit.ctp:36 Template/StateRelationshipTypes/add.ctp:22
-#: Template/StateRelationshipTypes/edit.ctp:28
-#: Template/StateUserTransactions/add.ctp:29
-#: Template/StateUserTransactions/edit.ctp:35 Template/StateUsers/add.ctp:32
-#: Template/StateUsers/edit.ctp:37 Template/TransactionCreations/add.ctp:27
-#: Template/TransactionCreations/edit.ctp:33
-#: Template/TransactionGroupAddaddress/add.ctp:26
-#: Template/TransactionGroupAddaddress/edit.ctp:32
-#: Template/TransactionGroupAllowtrades/add.ctp:25
-#: Template/TransactionGroupAllowtrades/edit.ctp:31
-#: Template/TransactionGroupCreates/add.ctp:27
-#: Template/TransactionGroupCreates/edit.ctp:33
-#: Template/TransactionSendCoins/add.ctp:28
-#: Template/TransactionSendCoins/edit.ctp:34
-#: Template/TransactionSignatures/add.ctp:23
-#: Template/TransactionSignatures/edit.ctp:29
-#: Template/TransactionTypes/add.ctp:24 Template/TransactionTypes/edit.ctp:30
-#: Template/Transactions/add.ctp:42 Template/Transactions/edit.ctp:47
-#: Template/Users/add.ctp:26 Template/Users/edit.ctp:32
-msgid "Submit"
-msgstr ""
-
-#: Template/AddressTypes/edit.ctp:11 Template/AddressTypes/index.ctp:37
-#: Template/AddressTypes/view.ctp:56 Template/AddressTypes/view.ctp:85
-#: Template/AdminErrors/edit.ctp:11 Template/AdminErrors/index.ctp:43
-#: Template/BlockchainTypes/edit.ctp:11 Template/BlockchainTypes/index.ctp:35
-#: Template/CommunityProfiles/edit.ctp:11
-#: Template/CommunityProfiles/index.ctp:33 Template/ElopageBuys/edit.ctp:11
-#: Template/OperatorTypes/index.ctp:35 Template/OperatorTypes/view.ctp:54
-#: Template/Operators/edit.ctp:11 Template/Operators/index.ctp:40
-#: Template/Roles/edit.ctp:11 Template/Roles/index.ctp:31
-#: Template/ServerUsers/edit.ctp:11 Template/ServerUsers/index.ctp:43
-#: Template/StateBalances/edit.ctp:11 Template/StateBalances/index.ctp:38
-#: Template/StateCreated/edit.ctp:11 Template/StateCreated/index.ctp:45
-#: Template/StateErrors/edit.ctp:11 Template/StateErrors/index.ctp:39
-#: Template/StateErrors/show_for_user.ctp:44
-#: Template/StateGroupAddresses/edit.ctp:11
-#: Template/StateGroupAddresses/index.ctp:39
-#: Template/StateGroupRelationships/edit.ctp:11
-#: Template/StateGroupRelationships/index.ctp:35
-#: Template/StateGroups/edit.ctp:11 Template/StateGroups/index.ctp:41
-#: Template/StateGroups/view.ctp:60 Template/StateGroups/view.ctp:87
-#: Template/StateGroups/view.ctp:116 Template/StateGroups/view.ctp:145
-#: Template/StateRelationshipTypes/edit.ctp:11
-#: Template/StateRelationshipTypes/index.ctp:33
-#: Template/StateUserRoles/index.ctp:53
-#: Template/StateUserTransactions/edit.ctp:11
-#: Template/StateUserTransactions/index.ctp:41 Template/StateUsers/edit.ctp:11
-#: Template/StateUsers/index.ctp:53 Template/TransactionCreations/edit.ctp:11
-#: Template/TransactionGroupAddaddress/edit.ctp:11
-#: Template/TransactionGroupAddaddress/index.ctp:39
-#: Template/TransactionGroupAllowtrades/edit.ctp:11
-#: Template/TransactionGroupAllowtrades/index.ctp:37
-#: Template/TransactionGroupCreates/edit.ctp:11
-#: Template/TransactionGroupCreates/index.ctp:39
-#: Template/TransactionSendCoins/edit.ctp:11
-#: Template/TransactionSignatures/edit.ctp:11
-#: Template/TransactionSignatures/index.ctp:33
-#: Template/TransactionTypes/edit.ctp:11 Template/TransactionTypes/index.ctp:35
-#: Template/TransactionTypes/view.ctp:56 Template/Transactions/edit.ctp:11
-#: Template/Transactions/view.ctp:80 Template/Transactions/view.ctp:109
-#: Template/Transactions/view.ctp:136 Template/Transactions/view.ctp:163
-#: Template/Transactions/view.ctp:192 Template/Transactions/view.ctp:225
-#: Template/Transactions/view.ctp:252 Template/Users/edit.ctp:11
-#: Template/Users/index.ctp:43
-msgid "Delete"
-msgstr ""
-
-#: Template/AddressTypes/edit.ctp:13 Template/AddressTypes/index.ctp:37
-#: Template/AddressTypes/view.ctp:11 Template/AddressTypes/view.ctp:56
-#: Template/AddressTypes/view.ctp:85 Template/AdminErrors/edit.ctp:13
-#: Template/AdminErrors/index.ctp:43 Template/AdminErrors/view.ctp:11
-#: Template/BlockchainTypes/edit.ctp:13 Template/BlockchainTypes/index.ctp:35
-#: Template/BlockchainTypes/view.ctp:11 Template/CommunityProfiles/edit.ctp:13
-#: Template/CommunityProfiles/index.ctp:33
-#: Template/CommunityProfiles/view.ctp:11 Template/ElopageBuys/edit.ctp:13
-#: Template/ElopageBuys/index.ctp:51 Template/ElopageBuys/view.ctp:11
-#: Template/OperatorTypes/index.ctp:35 Template/OperatorTypes/view.ctp:11
-#: Template/OperatorTypes/view.ctp:54 Template/Operators/edit.ctp:13
-#: Template/Operators/index.ctp:40 Template/Operators/view.ctp:11
-#: Template/Roles/edit.ctp:13 Template/Roles/index.ctp:31
-#: Template/Roles/view.ctp:11 Template/ServerUsers/edit.ctp:13
-#: Template/ServerUsers/index.ctp:43 Template/ServerUsers/view.ctp:11
-#: Template/StateBalances/edit.ctp:13 Template/StateBalances/index.ctp:38
-#: Template/StateBalances/view.ctp:11 Template/StateCreated/edit.ctp:13
-#: Template/StateCreated/index.ctp:45 Template/StateCreated/view.ctp:11
-#: Template/StateErrors/edit.ctp:13 Template/StateErrors/index.ctp:39
-#: Template/StateErrors/view.ctp:11 Template/StateGroupAddresses/edit.ctp:13
-#: Template/StateGroupAddresses/index.ctp:39
-#: Template/StateGroupAddresses/view.ctp:11
-#: Template/StateGroupRelationships/edit.ctp:13
-#: Template/StateGroupRelationships/index.ctp:35
-#: Template/StateGroupRelationships/view.ctp:11
-#: Template/StateGroups/edit.ctp:13 Template/StateGroups/index.ctp:41
-#: Template/StateGroups/view.ctp:11 Template/StateGroups/view.ctp:60
-#: Template/StateGroups/view.ctp:87 Template/StateGroups/view.ctp:116
-#: Template/StateGroups/view.ctp:145
-#: Template/StateRelationshipTypes/edit.ctp:13
-#: Template/StateRelationshipTypes/index.ctp:33
-#: Template/StateRelationshipTypes/view.ctp:11
-#: Template/StateUserRoles/index.ctp:53
-#: Template/StateUserTransactions/edit.ctp:13
-#: Template/StateUserTransactions/index.ctp:41
-#: Template/StateUserTransactions/view.ctp:11 Template/StateUsers/edit.ctp:13
-#: Template/StateUsers/index.ctp:53 Template/StateUsers/view.ctp:11
-#: Template/TransactionCreations/edit.ctp:13
-#: Template/TransactionCreations/view.ctp:11
-#: Template/TransactionGroupAddaddress/edit.ctp:13
-#: Template/TransactionGroupAddaddress/index.ctp:39
-#: Template/TransactionGroupAddaddress/view.ctp:11
-#: Template/TransactionGroupAllowtrades/edit.ctp:13
-#: Template/TransactionGroupAllowtrades/index.ctp:37
-#: Template/TransactionGroupAllowtrades/view.ctp:11
-#: Template/TransactionGroupCreates/edit.ctp:13
-#: Template/TransactionGroupCreates/index.ctp:39
-#: Template/TransactionGroupCreates/view.ctp:11
-#: Template/TransactionSendCoins/edit.ctp:13
-#: Template/TransactionSendCoins/view.ctp:11
-#: Template/TransactionSignatures/edit.ctp:13
-#: Template/TransactionSignatures/index.ctp:33
-#: Template/TransactionSignatures/view.ctp:11
-#: Template/TransactionTypes/edit.ctp:13 Template/TransactionTypes/index.ctp:35
-#: Template/TransactionTypes/view.ctp:11 Template/TransactionTypes/view.ctp:56
-#: Template/Transactions/edit.ctp:13 Template/Transactions/view.ctp:11
-#: Template/Transactions/view.ctp:80 Template/Transactions/view.ctp:109
-#: Template/Transactions/view.ctp:136 Template/Transactions/view.ctp:163
-#: Template/Transactions/view.ctp:192 Template/Transactions/view.ctp:225
-#: Template/Transactions/view.ctp:252 Template/Users/edit.ctp:13
-#: Template/Users/index.ctp:43 Template/Users/view.ctp:11
-msgid "Are you sure you want to delete # {0}?"
-msgstr ""
-
-#: Template/AddressTypes/edit.ctp:26 Template/AddressTypes/view.ctp:10
-msgid "Edit Address Type"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:10 Template/AddressTypes/view.ctp:13
-#: Template/StateGroupAddresses/add.ctp:14
-#: Template/StateGroupAddresses/edit.ctp:20
-#: Template/StateGroupAddresses/index.ctp:14
-#: Template/StateGroupAddresses/view.ctp:17
-#: Template/TransactionGroupAddaddress/add.ctp:14
-#: Template/TransactionGroupAddaddress/edit.ctp:20
-#: Template/TransactionGroupAddaddress/index.ctp:14
-#: Template/TransactionGroupAddaddress/view.ctp:17
-msgid "New Address Type"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:18
-msgid "Address Types"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:35 Template/AddressTypes/view.ctp:54
-#: Template/AddressTypes/view.ctp:83 Template/AdminErrors/index.ctp:39
-#: Template/BlockchainTypes/index.ctp:33
-#: Template/CommunityProfiles/index.ctp:31 Template/ElopageBuys/index.ctp:49
-#: Template/OperatorTypes/view.ctp:52 Template/Operators/index.ctp:38
-#: Template/Roles/index.ctp:29 Template/ServerUsers/index.ctp:41
-#: Template/StateBalances/index.ctp:36 Template/StateCreated/index.ctp:43
-#: Template/StateErrors/index.ctp:37 Template/StateGroupAddresses/index.ctp:37
-#: Template/StateGroupRelationships/index.ctp:33
-#: Template/StateGroups/index.ctp:39 Template/StateGroups/view.ctp:58
-#: Template/StateGroups/view.ctp:85 Template/StateGroups/view.ctp:114
-#: Template/StateGroups/view.ctp:143
-#: Template/StateRelationshipTypes/index.ctp:31
-#: Template/StateUserRoles/index.ctp:51
-#: Template/StateUserTransactions/index.ctp:39 Template/StateUsers/index.ctp:51
-#: Template/StateUsers/view.ctp:41 Template/StateUsers/view.ctp:71
-#: Template/StateUsers/view.ctp:104 Template/StateUsers/view.ctp:136
-#: Template/TransactionCreations/index.ctp:42
-#: Template/TransactionGroupAddaddress/index.ctp:37
-#: Template/TransactionGroupAllowtrades/index.ctp:35
-#: Template/TransactionGroupCreates/index.ctp:37
-#: Template/TransactionSendCoins/index.ctp:41
-#: Template/TransactionSignatures/index.ctp:31
-#: Template/TransactionTypes/index.ctp:33 Template/TransactionTypes/view.ctp:54
-#: Template/Transactions/view.ctp:78 Template/Transactions/view.ctp:107
-#: Template/Transactions/view.ctp:134 Template/Transactions/view.ctp:161
-#: Template/Transactions/view.ctp:190 Template/Transactions/view.ctp:223
-#: Template/Transactions/view.ctp:250 Template/Users/index.ctp:41
-msgid "View"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:36 Template/AddressTypes/view.ctp:55
-#: Template/AddressTypes/view.ctp:84 Template/AdminErrors/index.ctp:41
-#: Template/BlockchainTypes/index.ctp:34
-#: Template/CommunityProfiles/index.ctp:32 Template/ElopageBuys/index.ctp:50
-#: Template/OperatorTypes/view.ctp:53 Template/Operators/index.ctp:39
-#: Template/Roles/index.ctp:30 Template/ServerUsers/index.ctp:42
-#: Template/StateBalances/index.ctp:37 Template/StateCreated/index.ctp:44
-#: Template/StateErrors/index.ctp:38 Template/StateGroupAddresses/index.ctp:38
-#: Template/StateGroupRelationships/index.ctp:34
-#: Template/StateGroups/index.ctp:40 Template/StateGroups/view.ctp:59
-#: Template/StateGroups/view.ctp:86 Template/StateGroups/view.ctp:115
-#: Template/StateGroups/view.ctp:144
-#: Template/StateRelationshipTypes/index.ctp:32
-#: Template/StateUserRoles/index.ctp:52
-#: Template/StateUserTransactions/index.ctp:40 Template/StateUsers/index.ctp:52
-#: Template/TransactionGroupAddaddress/index.ctp:38
-#: Template/TransactionGroupAllowtrades/index.ctp:36
-#: Template/TransactionGroupCreates/index.ctp:38
-#: Template/TransactionSignatures/index.ctp:32
-#: Template/TransactionTypes/index.ctp:34 Template/TransactionTypes/view.ctp:55
-#: Template/Transactions/view.ctp:79 Template/Transactions/view.ctp:108
-#: Template/Transactions/view.ctp:135 Template/Transactions/view.ctp:162
-#: Template/Transactions/view.ctp:191 Template/Transactions/view.ctp:224
-#: Template/Transactions/view.ctp:251 Template/Users/index.ctp:42
-msgid "Edit"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:45 Template/AdminErrors/index.ctp:50
-#: Template/BlockchainTypes/index.ctp:43
-#: Template/CommunityProfiles/index.ctp:41 Template/ElopageBuys/index.ctp:59
-#: Template/Operators/index.ctp:48 Template/Roles/index.ctp:39
-#: Template/ServerUsers/index.ctp:51 Template/StateBalances/index.ctp:46
-#: Template/StateCreated/index.ctp:53 Template/StateErrors/index.ctp:47
-#: Template/StateGroupAddresses/index.ctp:47
-#: Template/StateGroupRelationships/index.ctp:43
-#: Template/StateGroups/index.ctp:49
-#: Template/StateRelationshipTypes/index.ctp:41
-#: Template/StateUserRoles/index.ctp:61
-#: Template/StateUserTransactions/index.ctp:49 Template/StateUsers/index.ctp:61
-#: Template/TransactionCreations/index.ctp:50
-#: Template/TransactionGroupAddaddress/index.ctp:47
-#: Template/TransactionGroupAllowtrades/index.ctp:45
-#: Template/TransactionGroupCreates/index.ctp:47
-#: Template/TransactionSendCoins/index.ctp:49
-#: Template/TransactionSignatures/index.ctp:41
-#: Template/TransactionTypes/index.ctp:43 Template/Transactions/index.ctp:50
-#: Template/Users/index.ctp:51
-msgid "first"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:46 Template/AdminErrors/index.ctp:51
-#: Template/BlockchainTypes/index.ctp:44
-#: Template/CommunityProfiles/index.ctp:42 Template/ElopageBuys/index.ctp:60
-#: Template/Operators/index.ctp:49 Template/Roles/index.ctp:40
-#: Template/ServerUsers/index.ctp:52 Template/StateBalances/index.ctp:47
-#: Template/StateCreated/index.ctp:54 Template/StateErrors/index.ctp:48
-#: Template/StateGroupAddresses/index.ctp:48
-#: Template/StateGroupRelationships/index.ctp:44
-#: Template/StateGroups/index.ctp:50
-#: Template/StateRelationshipTypes/index.ctp:42
-#: Template/StateUserRoles/index.ctp:62
-#: Template/StateUserTransactions/index.ctp:50 Template/StateUsers/index.ctp:62
-#: Template/TransactionCreations/index.ctp:51
-#: Template/TransactionGroupAddaddress/index.ctp:48
-#: Template/TransactionGroupAllowtrades/index.ctp:46
-#: Template/TransactionGroupCreates/index.ctp:48
-#: Template/TransactionSendCoins/index.ctp:50
-#: Template/TransactionSignatures/index.ctp:42
-#: Template/TransactionTypes/index.ctp:44 Template/Transactions/index.ctp:51
-#: Template/Users/index.ctp:52
-msgid "previous"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:48 Template/AdminErrors/index.ctp:53
-#: Template/BlockchainTypes/index.ctp:46
-#: Template/CommunityProfiles/index.ctp:44 Template/ElopageBuys/index.ctp:62
-#: Template/Operators/index.ctp:51 Template/Roles/index.ctp:42
-#: Template/ServerUsers/index.ctp:54 Template/StateBalances/index.ctp:49
-#: Template/StateCreated/index.ctp:56 Template/StateErrors/index.ctp:50
-#: Template/StateGroupAddresses/index.ctp:50
-#: Template/StateGroupRelationships/index.ctp:46
-#: Template/StateGroups/index.ctp:52
-#: Template/StateRelationshipTypes/index.ctp:44
-#: Template/StateUserRoles/index.ctp:64
-#: Template/StateUserTransactions/index.ctp:52 Template/StateUsers/index.ctp:64
-#: Template/TransactionCreations/index.ctp:53
-#: Template/TransactionGroupAddaddress/index.ctp:50
-#: Template/TransactionGroupAllowtrades/index.ctp:48
-#: Template/TransactionGroupCreates/index.ctp:50
-#: Template/TransactionSendCoins/index.ctp:52
-#: Template/TransactionSignatures/index.ctp:44
-#: Template/TransactionTypes/index.ctp:46 Template/Transactions/index.ctp:53
-#: Template/Users/index.ctp:54
-msgid "next"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:49 Template/AdminErrors/index.ctp:54
-#: Template/BlockchainTypes/index.ctp:47
-#: Template/CommunityProfiles/index.ctp:45 Template/ElopageBuys/index.ctp:63
-#: Template/Operators/index.ctp:52 Template/Roles/index.ctp:43
-#: Template/ServerUsers/index.ctp:55 Template/StateBalances/index.ctp:50
-#: Template/StateCreated/index.ctp:57 Template/StateErrors/index.ctp:51
-#: Template/StateGroupAddresses/index.ctp:51
-#: Template/StateGroupRelationships/index.ctp:47
-#: Template/StateGroups/index.ctp:53
-#: Template/StateRelationshipTypes/index.ctp:45
-#: Template/StateUserRoles/index.ctp:65
-#: Template/StateUserTransactions/index.ctp:53 Template/StateUsers/index.ctp:65
-#: Template/TransactionCreations/index.ctp:54
-#: Template/TransactionGroupAddaddress/index.ctp:51
-#: Template/TransactionGroupAllowtrades/index.ctp:49
-#: Template/TransactionGroupCreates/index.ctp:51
-#: Template/TransactionSendCoins/index.ctp:53
-#: Template/TransactionSignatures/index.ctp:45
-#: Template/TransactionTypes/index.ctp:47 Template/Transactions/index.ctp:54
-#: Template/Users/index.ctp:55
-msgid "last"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:51 Template/AdminErrors/index.ctp:56
-#: Template/BlockchainTypes/index.ctp:49
-#: Template/CommunityProfiles/index.ctp:47 Template/ElopageBuys/index.ctp:65
-#: Template/Operators/index.ctp:54 Template/Roles/index.ctp:45
-#: Template/ServerUsers/index.ctp:57 Template/StateBalances/index.ctp:52
-#: Template/StateCreated/index.ctp:59 Template/StateErrors/index.ctp:53
-#: Template/StateGroupAddresses/index.ctp:53
-#: Template/StateGroupRelationships/index.ctp:49
-#: Template/StateGroups/index.ctp:55
-#: Template/StateRelationshipTypes/index.ctp:47
-#: Template/StateUserRoles/index.ctp:67
-#: Template/StateUserTransactions/index.ctp:55 Template/StateUsers/index.ctp:67
-#: Template/TransactionCreations/index.ctp:56
-#: Template/TransactionGroupAddaddress/index.ctp:53
-#: Template/TransactionGroupAllowtrades/index.ctp:51
-#: Template/TransactionGroupCreates/index.ctp:53
-#: Template/TransactionSendCoins/index.ctp:55
-#: Template/TransactionSignatures/index.ctp:47
-#: Template/TransactionTypes/index.ctp:49 Template/Transactions/index.ctp:56
-#: Template/Users/index.ctp:57
-msgid ""
-"Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} "
-"total"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:11
-msgid "Delete Address Type"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:24 Template/BlockchainTypes/view.ctp:20
-#: Template/OperatorTypes/view.ctp:22 Template/StateGroups/view.ctp:28
-#: Template/StateGroups/view.ctp:103
-#: Template/StateRelationshipTypes/view.ctp:20
-#: Template/TransactionGroupCreates/view.ctp:32
-#: Template/TransactionTypes/view.ctp:22 Template/Transactions/view.ctp:179
-#: Template/Users/statistics.ctp:64
-msgid "Name"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:28 Template/BlockchainTypes/view.ctp:24
-#: Template/OperatorTypes/view.ctp:26
-#: Template/StateRelationshipTypes/view.ctp:24
-#: Template/TransactionTypes/view.ctp:26
-msgid "Text"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:32 Template/AddressTypes/view.ctp:41
-#: Template/AddressTypes/view.ctp:68 Template/AdminErrors/view.ctp:46
-#: Template/BlockchainTypes/view.ctp:32 Template/CommunityProfiles/view.ctp:24
-#: Template/OperatorTypes/view.ctp:30 Template/OperatorTypes/view.ctp:39
-#: Template/Operators/view.ctp:32 Template/Roles/view.ctp:24
-#: Template/ServerUsers/view.ctp:36 Template/StateBalances/view.ctp:27
-#: Template/StateCreated/view.ctp:32 Template/StateErrors/view.ctp:32
-#: Template/StateGroupAddresses/view.ctp:28
-#: Template/StateGroupRelationships/view.ctp:20
-#: Template/StateGroups/view.ctp:32 Template/StateGroups/view.ctp:45
-#: Template/StateGroups/view.ctp:72 Template/StateGroups/view.ctp:99
-#: Template/StateGroups/view.ctp:128
-#: Template/StateRelationshipTypes/view.ctp:28
-#: Template/StateUserTransactions/view.ctp:38
-#: Template/TransactionCreations/view.ctp:32
-#: Template/TransactionGroupAddaddress/view.ctp:32
-#: Template/TransactionGroupAllowtrades/view.ctp:26
-#: Template/TransactionGroupCreates/view.ctp:36
-#: Template/TransactionSendCoins/view.ctp:32
-#: Template/TransactionSignatures/view.ctp:26
-#: Template/TransactionTypes/view.ctp:30 Template/TransactionTypes/view.ctp:39
-#: Template/Transactions/view.ctp:46 Template/Transactions/view.ctp:59
-#: Template/Transactions/view.ctp:92 Template/Transactions/view.ctp:121
-#: Template/Transactions/view.ctp:148 Template/Transactions/view.ctp:175
-#: Template/Transactions/view.ctp:204 Template/Transactions/view.ctp:237
-#: Template/Users/view.ctp:36
-msgid "Id"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:37 Template/StateGroups/view.ctp:41
-msgid "Related State Group Addresses"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:42 Template/StateGroupAddresses/view.ctp:32
-#: Template/TransactionGroupAllowtrades/view.ctp:30
-#: Template/Transactions/view.ctp:150
-msgid "Group Id"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:43 Template/AddressTypes/view.ctp:72
-#: Template/StateGroups/view.ctp:47 Template/StateGroups/view.ctp:75
-#: Template/Transactions/view.ctp:124
-msgid "Public Key"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:44 Template/AddressTypes/view.ctp:70
-#: Template/StateGroups/view.ctp:48 Template/Transactions/view.ctp:123
-msgid "Address Type Id"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:64 Template/Transactions/view.ctp:117
-msgid "Related Transaction Group Addaddress"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:69 Template/StateGroups/view.ctp:100
-#: Template/Transactions/view.ctp:60 Template/Transactions/view.ctp:93
-#: Template/Transactions/view.ctp:122 Template/Transactions/view.ctp:149
-#: Template/Transactions/view.ctp:176 Template/Transactions/view.ctp:205
-#: Template/Transactions/view.ctp:238
-msgid "Transaction Id"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:71
-msgid "Remove From Group"
-msgstr ""
-
-#: Template/AdminErrors/add.ctp:10 Template/AdminErrors/edit.ctp:16
-#: Template/AdminErrors/view.ctp:12
-msgid "List Admin Errors"
-msgstr ""
-
-#: Template/AdminErrors/add.ctp:11 Template/AdminErrors/edit.ctp:17
-#: Template/AdminErrors/index.ctp:11 Template/AdminErrors/view.ctp:14
-#: Template/StateBalances/add.ctp:11 Template/StateBalances/edit.ctp:17
-#: Template/StateBalances/index.ctp:11 Template/StateBalances/view.ctp:14
-#: Template/StateCreated/add.ctp:13 Template/StateCreated/edit.ctp:19
-#: Template/StateCreated/index.ctp:13 Template/StateCreated/view.ctp:16
-#: Template/StateErrors/add.ctp:11 Template/StateErrors/edit.ctp:17
-#: Template/StateErrors/index.ctp:11 Template/StateErrors/view.ctp:14
-#: Template/StateGroups/add.ctp:13 Template/StateGroups/edit.ctp:19
-#: Template/StateGroups/index.ctp:13 Template/StateGroups/view.ctp:16
-#: Template/StateUserTransactions/add.ctp:11
-#: Template/StateUserTransactions/edit.ctp:17
-#: Template/StateUserTransactions/index.ctp:11
-#: Template/StateUserTransactions/view.ctp:14 Template/StateUsers/add.ctp:10
-#: Template/StateUsers/edit.ctp:16 Template/StateUsers/view.ctp:12
-#: Template/TransactionCreations/add.ctp:13
-#: Template/TransactionCreations/edit.ctp:19
-#: Template/TransactionCreations/index.ctp:13
-#: Template/TransactionCreations/view.ctp:16
-#: Template/TransactionSendCoins/add.ctp:13
-#: Template/TransactionSendCoins/edit.ctp:19
-#: Template/TransactionSendCoins/index.ctp:13
-#: Template/TransactionSendCoins/view.ctp:16
-msgid "List State Users"
-msgstr ""
-
-#: Template/AdminErrors/add.ctp:12 Template/AdminErrors/edit.ctp:18
-#: Template/AdminErrors/index.ctp:12 Template/AdminErrors/view.ctp:15
-#: Template/StateBalances/add.ctp:12 Template/StateBalances/edit.ctp:18
-#: Template/StateBalances/index.ctp:12 Template/StateBalances/view.ctp:15
-#: Template/StateCreated/add.ctp:14 Template/StateCreated/edit.ctp:20
-#: Template/StateCreated/index.ctp:14 Template/StateCreated/view.ctp:17
-#: Template/StateErrors/add.ctp:12 Template/StateErrors/edit.ctp:18
-#: Template/StateErrors/index.ctp:12 Template/StateErrors/view.ctp:15
-#: Template/StateGroups/add.ctp:14 Template/StateGroups/edit.ctp:20
-#: Template/StateGroups/index.ctp:14 Template/StateGroups/view.ctp:17
-#: Template/StateUserRoles/index.ctp:10
-#: Template/StateUserTransactions/add.ctp:12
-#: Template/StateUserTransactions/edit.ctp:18
-#: Template/StateUserTransactions/index.ctp:12
-#: Template/StateUserTransactions/view.ctp:15 Template/StateUsers/index.ctp:10
-#: Template/StateUsers/view.ctp:13 Template/TransactionCreations/add.ctp:14
-#: Template/TransactionCreations/edit.ctp:20
-#: Template/TransactionCreations/index.ctp:14
-#: Template/TransactionCreations/view.ctp:17
-#: Template/TransactionSendCoins/add.ctp:14
-#: Template/TransactionSendCoins/edit.ctp:20
-#: Template/TransactionSendCoins/index.ctp:14
-#: Template/TransactionSendCoins/view.ctp:17
-msgid "New State User"
-msgstr ""
-
-#: Template/AdminErrors/add.ctp:18
-msgid "Add Admin Error"
-msgstr ""
-
-#: Template/AdminErrors/edit.ctp:24 Template/AdminErrors/view.ctp:10
-msgid "Edit Admin Error"
-msgstr ""
-
-#: Template/AdminErrors/index.ctp:10 Template/AdminErrors/view.ctp:13
-msgid "New Admin Error"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:11
-msgid "Delete Admin Error"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:22 Template/StateBalances/view.ctp:23
-#: Template/StateCreated/view.ctp:28 Template/StateErrors/view.ctp:24
-#: Template/StateUserTransactions/view.ctp:26
-#: Template/TransactionCreations/view.ctp:28
-#: Template/TransactionSendCoins/view.ctp:28
-msgid "State User"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:26
-msgid "Controller"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:30
-msgid "Action"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:34
-msgid "State"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:38
-msgid "Msg"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:42
-msgid "Details"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:50 Template/ServerUsers/view.ctp:44
-#: Template/StateCreated/view.ctp:48 Template/StateErrors/view.ctp:36
-#: Template/Transactions/view.ctp:64 Template/Users/view.ctp:44
-msgid "Created"
-msgstr ""
-
-#: Template/BlockchainTypes/add.ctp:10 Template/BlockchainTypes/edit.ctp:16
-#: Template/BlockchainTypes/view.ctp:12
-msgid "List Blockchain Types"
-msgstr ""
-
-#: Template/BlockchainTypes/add.ctp:16
-msgid "Add Blockchain Type"
-msgstr ""
-
-#: Template/BlockchainTypes/edit.ctp:22 Template/BlockchainTypes/view.ctp:10
-msgid "Edit Blockchain Type"
-msgstr ""
-
-#: Template/BlockchainTypes/index.ctp:10 Template/BlockchainTypes/view.ctp:13
-msgid "New Blockchain Type"
-msgstr ""
-
-#: Template/BlockchainTypes/index.ctp:14
-msgid "Blockchain Types"
-msgstr ""
-
-#: Template/BlockchainTypes/view.ctp:11
-msgid "Delete Blockchain Type"
-msgstr ""
-
-#: Template/BlockchainTypes/view.ctp:28
-msgid "Symbol"
-msgstr ""
-
-#: Template/CommunityProfiles/add.ctp:10 Template/CommunityProfiles/edit.ctp:16
-#: Template/CommunityProfiles/view.ctp:12
-msgid "List Community Profiles"
-msgstr ""
-
-#: Template/CommunityProfiles/add.ctp:16
-msgid "Add Community Profile"
-msgstr ""
-
-#: Template/CommunityProfiles/edit.ctp:22
-#: Template/CommunityProfiles/view.ctp:10
-msgid "Edit Community Profile"
-msgstr ""
-
-#: Template/CommunityProfiles/index.ctp:10
-#: Template/CommunityProfiles/view.ctp:13
-msgid "New Community Profile"
-msgstr ""
-
-#: Template/CommunityProfiles/index.ctp:14
-msgid "Community Profiles"
-msgstr ""
-
-#: Template/CommunityProfiles/view.ctp:11
-msgid "Delete Community Profile"
-msgstr ""
-
-#: Template/CommunityProfiles/view.ctp:20
-msgid "Profile Desc"
-msgstr ""
-
-#: Template/CommunityProfiles/view.ctp:28 Template/Transactions/view.ctp:63
-#: Template/Transactions/view.ctp:94 Template/Transactions/view.ctp:206
-msgid "State User Id"
-msgstr ""
-
-#: Template/Dashboard/error_http_request.ctp:9
-msgid "Error, Please try again"
-msgstr ""
-
-#: Template/Dashboard/error_http_request.ctp:13 Template/Layout/error.ctp:43
-msgid "Back"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:14 Template/Dashboard/index.ctp:18
-#: Template/Dashboard/server_index.ctp:9
-msgid "Willkommen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:47
-msgid "löschen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:51
-msgid "Adminbereich"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:57 Template/Dashboard/server_index.ctp:21
-msgid "viele schöpfen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:70
-msgid "Anmeldungen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:94
-msgid "suchen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:102
-msgid "hinzufügen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:108
-msgid "hat sein Passwort und Passphrase vergessen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:119
-msgid "Gruppen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:125
-msgid "Server"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:131
-msgid "Topics"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:139
-msgid "Hedera Accounts"
-msgstr ""
-
-#: Template/Element/navi.ctp:35
-msgid "Mitgliederbereich"
-msgstr ""
-
-#: Template/Element/navi_header.ctp:38 Template/Element/navi_notify.ctp:35
-msgid "Transaktionen sind noch zu unterzeichnen"
-msgstr ""
-
-#: Template/Element/user_menu.ctp:22
-msgid "Abmelden"
-msgstr ""
-
-#: Template/Element/Flash/success.ctp:9
-msgid "Info:"
-msgstr ""
-
-#: Template/ElopageBuys/add.ctp:10 Template/ElopageBuys/edit.ctp:16
-#: Template/ElopageBuys/view.ctp:12
-msgid "List Elopage Buys"
-msgstr ""
-
-#: Template/ElopageBuys/add.ctp:16
-msgid "Add Elopage Buy"
-msgstr ""
-
-#: Template/ElopageBuys/edit.ctp:22 Template/ElopageBuys/view.ctp:10
-msgid "Edit Elopage Buy"
-msgstr ""
-
-#: Template/ElopageBuys/index.ctp:10 Template/ElopageBuys/view.ctp:13
-msgid "New Elopage Buy"
-msgstr ""
-
-#: Template/ElopageBuys/index.ctp:14
-msgid "Elopage Buys"
-msgstr ""
-
-#: Template/ElopageBuys/statistics.ctp:28 Template/Users/statistics.ctp:49
-msgid "Anmeldungen diesen Monat"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:11
-msgid "Delete Elopage Buy"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:20
-msgid "Payer Email"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:24
-msgid "Publisher Email"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:28
-msgid "Event"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:36
-msgid "Elopage User Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:40
-msgid "Affiliate Program Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:44
-msgid "Publisher Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:48
-msgid "Order Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:52
-msgid "Product Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:56
-msgid "Product Price"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:60
-msgid "Success Date"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:64
-msgid "Payed"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:65 Template/ServerUsers/view.ctp:53
-#: Template/TransactionGroupAllowtrades/view.ctp:35 Template/Users/view.ctp:49
-msgid "Yes"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:65 Template/ServerUsers/view.ctp:53
-#: Template/TransactionGroupAllowtrades/view.ctp:35 Template/Users/view.ctp:49
-msgid "No"
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:8
-msgid "Gradido Schöpfung"
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:9
-#: Template/Email/text/notification_transaction_failed.ctp:14
-#: Template/Email/text/notification_transfer.ctp:12
-msgid "Hallo"
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:11
-msgid "für dich wurden soeben {0} geschöpft."
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:16
-#: Template/Email/text/notification_transaction_failed.ctp:46
-#: Template/Email/text/notification_transfer.ctp:19
-msgid "Bitte antworte nicht auf diese E-Mail!"
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:18
-#: Template/Email/text/notification_transaction_failed.ctp:49
-#: Template/Email/text/notification_transfer.ctp:25
-msgid "Mit freundlichen Grüßen"
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:8
-msgid "Gradido Transaktion fehlgeschlagen"
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:16
-msgid "Deine letzte Transaktion ist leider fehlgeschlagen."
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:20
-msgid "Du wolltest {0} für {1} schöpfen."
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:24
-msgid "Das Zieldatum war: "
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:26
-msgid "Du wolltest {0} an {1} senden."
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:32
-msgid "Das ist schief gelaufen: "
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:35
-msgid "Fehler beim speichern in der Datenbank. Bitte versuche es später erneut"
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:36
-msgid "Fehler beim parsen der Transaktion. Bitte versuche es später erneut"
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:8
-msgid "Gradido Überweisung"
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:14
-msgid "Du hast soeben {0} von {1} erhalten."
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:15
-msgid "{0} schreibt:"
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:20
-msgid "Wenn Du "
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:20
-msgid " per E-Mail antworten willst, schreibe stattdessen an die Adresse: "
-msgstr ""
-
-#: Template/Layout/default.ctp:38
-msgid "Logout"
-msgstr ""
-
-#: Template/Layout/error.ctp:35
-msgid "Error"
-msgstr ""
-
-#: Template/Layout/frontend.ctp:95
-msgid "Datenschutzerklärung"
-msgstr ""
-
-#: Template/Layout/frontend.ctp:96
-msgid "Impressum"
-msgstr ""
-
-#: Template/Layout/frontend.ctp:108
-msgid "Community Server in Entwicklung"
-msgstr ""
-
-#: Template/OperatorTypes/add.ctp:10 Template/OperatorTypes/edit.ctp:16
-#: Template/OperatorTypes/view.ctp:12
-msgid "List Operator Types"
-msgstr ""
-
-#: Template/OperatorTypes/add.ctp:11 Template/OperatorTypes/edit.ctp:17
-#: Template/OperatorTypes/index.ctp:11 Template/OperatorTypes/view.ctp:14
-#: Template/Operators/add.ctp:10 Template/Operators/edit.ctp:16
-#: Template/Operators/view.ctp:12
-msgid "List Operators"
-msgstr ""
-
-#: Template/OperatorTypes/add.ctp:12 Template/OperatorTypes/edit.ctp:18
-#: Template/OperatorTypes/index.ctp:12 Template/OperatorTypes/view.ctp:15
-#: Template/Operators/index.ctp:10 Template/Operators/view.ctp:13
-msgid "New Operator"
-msgstr ""
-
-#: Template/OperatorTypes/add.ctp:18
-msgid "Add Operator Type"
-msgstr ""
-
-#: Template/OperatorTypes/edit.ctp:24 Template/OperatorTypes/view.ctp:10
-msgid "Edit Operator Type"
-msgstr ""
-
-#: Template/OperatorTypes/index.ctp:10 Template/OperatorTypes/view.ctp:13
-msgid "New Operator Type"
-msgstr ""
-
-#: Template/OperatorTypes/index.ctp:16
-msgid "Operator Types"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:11
-msgid "Delete Operator Type"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:35
-msgid "Related Operators"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:40 Template/Operators/view.ctp:20
-#: Template/ServerUsers/view.ctp:20
-msgid "Username"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:41 Template/Operators/view.ctp:36
-msgid "Operator Type Id"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:42 Template/Operators/view.ctp:28
-msgid "Data Base64"
-msgstr ""
-
-#: Template/Operators/add.ctp:16
-msgid "Add Operator"
-msgstr ""
-
-#: Template/Operators/edit.ctp:22 Template/Operators/view.ctp:10
-msgid "Edit Operator"
-msgstr ""
-
-#: Template/Operators/index.ctp:14
-msgid "Operators"
-msgstr ""
-
-#: Template/Operators/view.ctp:11
-msgid "Delete Operator"
-msgstr ""
-
-#: Template/Operators/view.ctp:24
-msgid "User Pubkey"
-msgstr ""
-
-#: Template/Profile/edit.ctp:9
-msgid "Profil ändern"
-msgstr ""
-
-#: Template/Profile/edit.ctp:18
-msgid "Vorname"
-msgstr ""
-
-#: Template/Profile/edit.ctp:19
-msgid "Nachname"
-msgstr ""
-
-#: Template/Profile/edit.ctp:20
-msgid "Profilbild"
-msgstr ""
-
-#: Template/Profile/edit.ctp:25
-msgid "Beschreibung"
-msgstr ""
-
-#: Template/Profile/edit.ctp:26
-msgid "Daten speichern"
-msgstr ""
-
-#: Template/Roles/add.ctp:10 Template/Roles/edit.ctp:16
-#: Template/Roles/view.ctp:12
-msgid "List Roles"
-msgstr ""
-
-#: Template/Roles/add.ctp:16
-msgid "Add Role"
-msgstr ""
-
-#: Template/Roles/edit.ctp:22 Template/Roles/view.ctp:10
-msgid "Edit Role"
-msgstr ""
-
-#: Template/Roles/index.ctp:10 Template/Roles/view.ctp:13
-msgid "New Role"
-msgstr ""
-
-#: Template/Roles/index.ctp:14
-msgid "Roles"
-msgstr ""
-
-#: Template/Roles/view.ctp:11
-msgid "Delete Role"
-msgstr ""
-
-#: Template/Roles/view.ctp:20
-msgid "Title"
-msgstr ""
-
-#: Template/ServerUsers/add.ctp:10 Template/ServerUsers/edit.ctp:16
-#: Template/ServerUsers/view.ctp:12
-msgid "List Server Users"
-msgstr ""
-
-#: Template/ServerUsers/add.ctp:16
-msgid "Add Server User"
-msgstr ""
-
-#: Template/ServerUsers/edit.ctp:22 Template/ServerUsers/view.ctp:10
-msgid "Edit Server User"
-msgstr ""
-
-#: Template/ServerUsers/index.ctp:10 Template/ServerUsers/view.ctp:13
-msgid "New Server User"
-msgstr ""
-
-#: Template/ServerUsers/index.ctp:14
-msgid "Server Users"
-msgstr ""
-
-#: Template/ServerUsers/login.ctp:16
-msgid "Please enter your username and password"
-msgstr ""
-
-#: Template/ServerUsers/login.ctp:20
-msgid "Login"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:11
-msgid "Delete Server User"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:24 Template/Users/view.ctp:40
-msgid "Password"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:28 Template/Users/view.ctp:20
-msgid "Email"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:32 Template/StateUserRoles/assign_role.ctp:45
-#: Template/StateUserRoles/search.ctp:32
-msgid "Role"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:40
-msgid "Last Login"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:48 Template/StateBalances/view.ctp:35
-msgid "Modified"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:52
-msgid "Activated"
-msgstr ""
-
-#: Template/StateBalances/add.ctp:10 Template/StateBalances/edit.ctp:16
-#: Template/StateBalances/view.ctp:12 Template/StateUserRoles/index.ctp:13
-#: Template/StateUsers/add.ctp:13 Template/StateUsers/edit.ctp:19
-#: Template/StateUsers/index.ctp:13 Template/StateUsers/view.ctp:16
-msgid "List State Balances"
-msgstr ""
-
-#: Template/StateBalances/add.ctp:19
-msgid "Add State Balance"
-msgstr ""
-
-#: Template/StateBalances/edit.ctp:25 Template/StateBalances/view.ctp:10
-msgid "Edit State Balance"
-msgstr ""
-
-#: Template/StateBalances/index.ctp:10 Template/StateBalances/view.ctp:13
-#: Template/StateUserRoles/index.ctp:14 Template/StateUsers/add.ctp:14
-#: Template/StateUsers/edit.ctp:20 Template/StateUsers/index.ctp:14
-#: Template/StateUsers/view.ctp:17
-msgid "New State Balance"
-msgstr ""
-
-#: Template/StateBalances/index.ctp:16
-msgid "State Balances"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:10
-msgid "Aktueller Kontostand: "
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:34
-msgid "Absender"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:35 Template/StateUsers/view.ctp:57
-#: Template/StateUsers/view.ctp:87 Template/StateUsers/view.ctp:121
-#: Template/TransactionSendCoins/create.ctp:21
-#: Template/TransactionSendCoins/create_raw.ctp:32
-msgid "Verwendungszweck"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:36
-#: Template/StateBalances/overview_gdt.ctp:42
-#: Template/StateBalances/overview_gdt.ctp:75
-msgid "Datum"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:37 Template/StateUsers/view.ctp:56
-#: Template/StateUsers/view.ctp:86 Template/StateUsers/view.ctp:120
-msgid "Betrag"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:38
-msgid "Transaktions Nr."
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:38
-msgid "Nr"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:75
-msgid "Geschöpft"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:78
-msgid "Gesendet"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:81
-msgid "Empfangen"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:84
-msgid "Vergänglichkeit"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:124
-#: Template/TransactionCreations/create_multi.ctp:184
-msgid "Laufende Transaktion"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:126
-#: Template/TransactionCreations/create_multi.ctp:186
-msgid "Laufende Transaktionen"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:21
-msgid "Zur Verfügung: "
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:31
-msgid "Nur die letzten 100 Einträge werden angezeigt!"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:38
-msgid "Eigene Einzahlungen"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:41 Template/Users/statistics.ctp:65
-msgid "E-Mail"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:43
-msgid "Kommentar"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:44
-#: Template/StateBalances/overview_gdt.ctp:76
-msgid "Euro"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:45
-#: Template/StateBalances/overview_gdt.ctp:77
-msgid "Factor"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:46
-#: Template/StateBalances/overview_gdt.ctp:78
-msgid "GDT"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:71
-msgid "Einzahlungen anderer (Publisherprogramm)"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:74
-msgid "Einzahlender"
-msgstr ""
-
-#: Template/StateBalances/view.ctp:11
-msgid "Delete State Balance"
-msgstr ""
-
-#: Template/StateBalances/view.ctp:31 Template/StateUsers/view.ctp:33
-#: Template/TransactionCreations/view.ctp:36
-#: Template/TransactionSendCoins/view.ctp:36 Template/Transactions/view.ctp:95
-#: Template/Transactions/view.ctp:209
-msgid "Amount"
-msgstr ""
-
-#: Template/StateCreated/add.ctp:10 Template/StateCreated/edit.ctp:16
-#: Template/StateCreated/view.ctp:12 Template/StateUserRoles/index.ctp:15
-#: Template/StateUsers/add.ctp:15 Template/StateUsers/edit.ctp:21
-#: Template/StateUsers/index.ctp:15 Template/Transactions/add.ctp:15
-#: Template/Transactions/edit.ctp:21 Template/Transactions/index.ctp:15
-#: Template/Transactions/view.ctp:18
-msgid "List State Created"
-msgstr ""
-
-#: Template/StateCreated/add.ctp:11 Template/StateCreated/edit.ctp:17
-#: Template/StateCreated/index.ctp:11 Template/StateCreated/view.ctp:14
-#: Template/StateGroups/add.ctp:17 Template/StateGroups/edit.ctp:23
-#: Template/StateGroups/index.ctp:17 Template/StateGroups/view.ctp:20
-#: Template/StateUserTransactions/add.ctp:13
-#: Template/StateUserTransactions/edit.ctp:19
-#: Template/StateUserTransactions/index.ctp:13
-#: Template/StateUserTransactions/view.ctp:16
-#: Template/TransactionCreations/add.ctp:11
-#: Template/TransactionCreations/edit.ctp:17
-#: Template/TransactionCreations/index.ctp:11
-#: Template/TransactionCreations/view.ctp:14
-#: Template/TransactionGroupAddaddress/add.ctp:11
-#: Template/TransactionGroupAddaddress/edit.ctp:17
-#: Template/TransactionGroupAddaddress/index.ctp:11
-#: Template/TransactionGroupAddaddress/view.ctp:14
-#: Template/TransactionGroupAllowtrades/add.ctp:11
-#: Template/TransactionGroupAllowtrades/edit.ctp:17
-#: Template/TransactionGroupAllowtrades/index.ctp:11
-#: Template/TransactionGroupAllowtrades/view.ctp:14
-#: Template/TransactionGroupCreates/add.ctp:11
-#: Template/TransactionGroupCreates/edit.ctp:17
-#: Template/TransactionGroupCreates/index.ctp:11
-#: Template/TransactionGroupCreates/view.ctp:14
-#: Template/TransactionSendCoins/add.ctp:11
-#: Template/TransactionSendCoins/edit.ctp:17
-#: Template/TransactionSendCoins/index.ctp:11
-#: Template/TransactionSendCoins/view.ctp:14
-#: Template/TransactionSignatures/add.ctp:11
-#: Template/TransactionSignatures/edit.ctp:17
-#: Template/TransactionSignatures/index.ctp:11
-#: Template/TransactionSignatures/view.ctp:14
-#: Template/TransactionTypes/add.ctp:11 Template/TransactionTypes/edit.ctp:17
-#: Template/TransactionTypes/index.ctp:11 Template/TransactionTypes/view.ctp:14
-#: Template/Transactions/add.ctp:10 Template/Transactions/edit.ctp:16
-#: Template/Transactions/view.ctp:12
-msgid "List Transactions"
-msgstr ""
-
-#: Template/StateCreated/add.ctp:12 Template/StateCreated/edit.ctp:18
-#: Template/StateCreated/index.ctp:12 Template/StateCreated/view.ctp:15
-#: Template/StateGroups/add.ctp:18 Template/StateGroups/edit.ctp:24
-#: Template/StateGroups/index.ctp:18 Template/StateGroups/view.ctp:21
-#: Template/StateUserTransactions/add.ctp:14
-#: Template/StateUserTransactions/edit.ctp:20
-#: Template/StateUserTransactions/index.ctp:14
-#: Template/StateUserTransactions/view.ctp:17
-#: Template/TransactionCreations/add.ctp:12
-#: Template/TransactionCreations/edit.ctp:18
-#: Template/TransactionCreations/index.ctp:12
-#: Template/TransactionCreations/view.ctp:15
-#: Template/TransactionGroupAddaddress/add.ctp:12
-#: Template/TransactionGroupAddaddress/edit.ctp:18
-#: Template/TransactionGroupAddaddress/index.ctp:12
-#: Template/TransactionGroupAddaddress/view.ctp:15
-#: Template/TransactionGroupAllowtrades/add.ctp:12
-#: Template/TransactionGroupAllowtrades/edit.ctp:18
-#: Template/TransactionGroupAllowtrades/index.ctp:12
-#: Template/TransactionGroupAllowtrades/view.ctp:15
-#: Template/TransactionGroupCreates/add.ctp:12
-#: Template/TransactionGroupCreates/edit.ctp:18
-#: Template/TransactionGroupCreates/index.ctp:12
-#: Template/TransactionGroupCreates/view.ctp:15
-#: Template/TransactionSendCoins/add.ctp:12
-#: Template/TransactionSendCoins/edit.ctp:18
-#: Template/TransactionSendCoins/index.ctp:12
-#: Template/TransactionSendCoins/view.ctp:15
-#: Template/TransactionSignatures/add.ctp:12
-#: Template/TransactionSignatures/edit.ctp:18
-#: Template/TransactionSignatures/index.ctp:12
-#: Template/TransactionSignatures/view.ctp:15
-#: Template/TransactionTypes/add.ctp:12 Template/TransactionTypes/edit.ctp:18
-#: Template/TransactionTypes/index.ctp:12 Template/TransactionTypes/view.ctp:15
-#: Template/Transactions/index.ctp:10 Template/Transactions/view.ctp:13
-msgid "New Transaction"
-msgstr ""
-
-#: Template/StateCreated/add.ctp:20
-msgid "Add State Created"
-msgstr ""
-
-#: Template/StateCreated/edit.ctp:26 Template/StateCreated/view.ctp:10
-msgid "Edit State Created"
-msgstr ""
-
-#: Template/StateCreated/index.ctp:10 Template/StateCreated/view.ctp:13
-#: Template/StateUserRoles/index.ctp:16 Template/StateUsers/add.ctp:16
-#: Template/StateUsers/edit.ctp:22 Template/StateUsers/index.ctp:16
-#: Template/Transactions/add.ctp:16 Template/Transactions/edit.ctp:22
-#: Template/Transactions/index.ctp:16 Template/Transactions/view.ctp:19
-msgid "New State Created"
-msgstr ""
-
-#: Template/StateCreated/index.ctp:18
-msgid "State Created"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:11
-msgid "Delete State Created"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:24 Template/StateUserTransactions/view.ctp:30
-#: Template/StateUsers/view.ctp:53 Template/TransactionCreations/view.ctp:24
-#: Template/TransactionGroupAddaddress/view.ctp:24
-#: Template/TransactionGroupAllowtrades/view.ctp:22
-#: Template/TransactionGroupCreates/view.ctp:24
-#: Template/TransactionSendCoins/view.ctp:24
-#: Template/TransactionSignatures/view.ctp:22
-msgid "Transaction"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:36 Template/Transactions/view.ctp:61
-msgid "Month"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:40 Template/Transactions/view.ctp:62
-msgid "Year"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:44 Template/Transactions/view.ctp:65
-msgid "Short Ident Hash"
-msgstr ""
-
-#: Template/StateErrors/add.ctp:10 Template/StateErrors/edit.ctp:16
-#: Template/StateErrors/view.ctp:12
-msgid "List State Errors"
-msgstr ""
-
-#: Template/StateErrors/add.ctp:13 Template/StateErrors/edit.ctp:19
-#: Template/StateErrors/index.ctp:13 Template/StateErrors/view.ctp:16
-#: Template/StateUserTransactions/add.ctp:15
-#: Template/StateUserTransactions/edit.ctp:21
-#: Template/StateUserTransactions/index.ctp:15
-#: Template/StateUserTransactions/view.ctp:18
-#: Template/TransactionTypes/add.ctp:10 Template/TransactionTypes/edit.ctp:16
-#: Template/TransactionTypes/view.ctp:12 Template/Transactions/add.ctp:13
-#: Template/Transactions/edit.ctp:19 Template/Transactions/index.ctp:13
-#: Template/Transactions/view.ctp:16
-msgid "List Transaction Types"
-msgstr ""
-
-#: Template/StateErrors/add.ctp:14 Template/StateErrors/edit.ctp:20
-#: Template/StateErrors/index.ctp:14 Template/StateErrors/view.ctp:17
-#: Template/StateUserTransactions/add.ctp:16
-#: Template/StateUserTransactions/edit.ctp:22
-#: Template/StateUserTransactions/index.ctp:16
-#: Template/StateUserTransactions/view.ctp:19
-#: Template/TransactionTypes/index.ctp:10 Template/TransactionTypes/view.ctp:13
-#: Template/Transactions/add.ctp:14 Template/Transactions/edit.ctp:20
-#: Template/Transactions/index.ctp:14 Template/Transactions/view.ctp:17
-msgid "New Transaction Type"
-msgstr ""
-
-#: Template/StateErrors/add.ctp:20
-msgid "Add State Error"
-msgstr ""
-
-#: Template/StateErrors/edit.ctp:26 Template/StateErrors/view.ctp:10
-msgid "Edit State Error"
-msgstr ""
-
-#: Template/StateErrors/index.ctp:10 Template/StateErrors/view.ctp:13
-msgid "New State Error"
-msgstr ""
-
-#: Template/StateErrors/index.ctp:18
-msgid "State Errors"
-msgstr ""
-
-#: Template/StateErrors/show_for_user.ctp:9
-msgid "Fehlermeldungen"
-msgstr ""
-
-#: Template/StateErrors/view.ctp:11
-msgid "Delete State Error"
-msgstr ""
-
-#: Template/StateErrors/view.ctp:28 Template/StateUserTransactions/view.ctp:34
-#: Template/Transactions/view.ctp:42
-msgid "Transaction Type"
-msgstr ""
-
-#: Template/StateErrors/view.ctp:41
-msgid "Message Json"
-msgstr ""
-
-#: Template/StateGroupAddresses/add.ctp:11
-#: Template/StateGroupAddresses/edit.ctp:17
-#: Template/StateGroupAddresses/index.ctp:11
-#: Template/StateGroupAddresses/view.ctp:14 Template/StateGroups/add.ctp:10
-#: Template/StateGroups/edit.ctp:16 Template/StateGroups/view.ctp:12
-#: Template/StateUserRoles/index.ctp:11 Template/StateUsers/add.ctp:11
-#: Template/StateUsers/edit.ctp:17 Template/StateUsers/index.ctp:11
-#: Template/StateUsers/view.ctp:14 Template/TransactionGroupCreates/add.ctp:13
-#: Template/TransactionGroupCreates/edit.ctp:19
-#: Template/TransactionGroupCreates/index.ctp:13
-#: Template/TransactionGroupCreates/view.ctp:16
-#: Template/Transactions/add.ctp:11 Template/Transactions/edit.ctp:17
-#: Template/Transactions/index.ctp:11 Template/Transactions/view.ctp:14
-msgid "List State Groups"
-msgstr ""
-
-#: Template/StateGroupAddresses/add.ctp:12
-#: Template/StateGroupAddresses/edit.ctp:18
-#: Template/StateGroupAddresses/index.ctp:12
-#: Template/StateGroupAddresses/view.ctp:15 Template/StateGroups/index.ctp:10
-#: Template/StateGroups/view.ctp:13 Template/StateUserRoles/index.ctp:12
-#: Template/StateUsers/add.ctp:12 Template/StateUsers/edit.ctp:18
-#: Template/StateUsers/index.ctp:12 Template/StateUsers/view.ctp:15
-#: Template/TransactionGroupCreates/add.ctp:14
-#: Template/TransactionGroupCreates/edit.ctp:20
-#: Template/TransactionGroupCreates/index.ctp:14
-#: Template/TransactionGroupCreates/view.ctp:17
-#: Template/Transactions/add.ctp:12 Template/Transactions/edit.ctp:18
-#: Template/Transactions/index.ctp:12 Template/Transactions/view.ctp:15
-msgid "New State Group"
-msgstr ""
-
-#: Template/StateGroupAddresses/add.ctp:20
-msgid "Add State Group Address"
-msgstr ""
-
-#: Template/StateGroupAddresses/edit.ctp:26
-#: Template/StateGroupAddresses/view.ctp:10
-msgid "Edit State Group Address"
-msgstr ""
-
-#: Template/StateGroupAddresses/index.ctp:18
-msgid "State Group Addresses"
-msgstr ""
-
-#: Template/StateGroupAddresses/index.ctp:25
-#: Template/TransactionGroupAddaddress/index.ctp:25
-msgid "user public key"
-msgstr ""
-
-#: Template/StateGroupAddresses/view.ctp:11
-msgid "Delete State Group Address"
-msgstr ""
-
-#: Template/StateGroupAddresses/view.ctp:24
-#: Template/TransactionGroupAddaddress/view.ctp:28
-msgid "Address Type"
-msgstr ""
-
-#: Template/StateGroupRelationships/add.ctp:10
-#: Template/StateGroupRelationships/edit.ctp:16
-#: Template/StateGroupRelationships/view.ctp:12
-msgid "List State Group Relationships"
-msgstr ""
-
-#: Template/StateGroupRelationships/add.ctp:16
-msgid "Add State Group Relationship"
-msgstr ""
-
-#: Template/StateGroupRelationships/edit.ctp:22
-#: Template/StateGroupRelationships/view.ctp:10
-msgid "Edit State Group Relationship"
-msgstr ""
-
-#: Template/StateGroupRelationships/index.ctp:10
-#: Template/StateGroupRelationships/view.ctp:13
-msgid "New State Group Relationship"
-msgstr ""
-
-#: Template/StateGroupRelationships/index.ctp:14
-msgid "State Group Relationships"
-msgstr ""
-
-#: Template/StateGroupRelationships/view.ctp:11
-msgid "Delete State Group Relationship"
-msgstr ""
-
-#: Template/StateGroupRelationships/view.ctp:24
-msgid "State Group1 Id"
-msgstr ""
-
-#: Template/StateGroupRelationships/view.ctp:28
-msgid "State Group2 Id"
-msgstr ""
-
-#: Template/StateGroupRelationships/view.ctp:32
-msgid "State Relationship Id"
-msgstr ""
-
-#: Template/StateGroups/add.ctp:15 Template/StateGroups/edit.ctp:21
-#: Template/StateGroups/index.ctp:15 Template/StateGroups/view.ctp:18
-#: Template/TransactionGroupCreates/add.ctp:10
-#: Template/TransactionGroupCreates/edit.ctp:16
-#: Template/TransactionGroupCreates/view.ctp:12
-#: Template/Transactions/add.ctp:23 Template/Transactions/edit.ctp:29
-#: Template/Transactions/index.ctp:23 Template/Transactions/view.ctp:26
-msgid "List Transaction Group Creates"
-msgstr ""
-
-#: Template/StateGroups/add.ctp:16 Template/StateGroups/edit.ctp:22
-#: Template/StateGroups/index.ctp:16 Template/StateGroups/view.ctp:19
-#: Template/TransactionGroupCreates/index.ctp:10
-#: Template/TransactionGroupCreates/view.ctp:13
-#: Template/Transactions/add.ctp:24 Template/Transactions/edit.ctp:30
-#: Template/Transactions/index.ctp:24 Template/Transactions/view.ctp:27
-msgid "New Transaction Group Create"
-msgstr ""
-
-#: Template/StateGroups/add.ctp:24
-msgid "Add State Group"
-msgstr ""
-
-#: Template/StateGroups/edit.ctp:30 Template/StateGroups/view.ctp:10
-msgid "Edit State Group"
-msgstr ""
-
-#: Template/StateGroups/index.ctp:22
-msgid "State Groups"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:11
-msgid "Delete State Group"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:36
-msgid "User Count"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:46 Template/StateGroups/view.ctp:74
-#: Template/StateGroups/view.ctp:102 Template/StateGroups/view.ctp:129
-#: Template/TransactionTypes/view.ctp:40 Template/Transactions/view.ctp:178
-msgid "State Group Id"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:68
-msgid "Related State Users"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:73
-msgid "Index Id"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:95 Template/Transactions/view.ctp:171
-msgid "Related Transaction Group Creates"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:101 Template/Transactions/view.ctp:177
-msgid "Group Public Key"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:124 Template/TransactionTypes/view.ctp:35
-msgid "Related Transactions"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:130 Template/TransactionTypes/view.ctp:41
-msgid "Transaction Type Id"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:131 Template/TransactionTypes/view.ctp:42
-msgid "Tx Hash"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:132 Template/TransactionTypes/view.ctp:43
-#: Template/Transactions/view.ctp:50
-msgid "Received"
-msgstr ""
-
-#: Template/StateRelationshipTypes/add.ctp:10
-#: Template/StateRelationshipTypes/edit.ctp:16
-#: Template/StateRelationshipTypes/view.ctp:12
-msgid "List State Relationship Types"
-msgstr ""
-
-#: Template/StateRelationshipTypes/add.ctp:16
-msgid "Add State Relationship Type"
-msgstr ""
-
-#: Template/StateRelationshipTypes/edit.ctp:22
-#: Template/StateRelationshipTypes/view.ctp:10
-msgid "Edit State Relationship Type"
-msgstr ""
-
-#: Template/StateRelationshipTypes/index.ctp:10
-#: Template/StateRelationshipTypes/view.ctp:13
-msgid "New State Relationship Type"
-msgstr ""
-
-#: Template/StateRelationshipTypes/index.ctp:14
-msgid "State Relationship Types"
-msgstr ""
-
-#: Template/StateRelationshipTypes/view.ctp:11
-msgid "Delete State Relationship Type"
-msgstr ""
-
-#: Template/StateUserRoles/assign_role.ctp:9
-#: Template/StateUserRoles/assign_role.ctp:46
-#: Template/StateUserRoles/search.ctp:47
-msgid "Assign Role"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:17 Template/StateUsers/add.ctp:17
-#: Template/StateUsers/edit.ctp:23 Template/StateUsers/index.ctp:17
-#: Template/StateUsers/view.ctp:18 Template/TransactionCreations/add.ctp:10
-#: Template/TransactionCreations/edit.ctp:16
-#: Template/TransactionCreations/view.ctp:12 Template/Transactions/add.ctp:17
-#: Template/Transactions/edit.ctp:23 Template/Transactions/index.ctp:17
-#: Template/Transactions/view.ctp:20
-msgid "List Transaction Creations"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:18 Template/StateUsers/add.ctp:18
-#: Template/StateUsers/edit.ctp:24 Template/StateUsers/index.ctp:18
-#: Template/StateUsers/view.ctp:19 Template/TransactionCreations/index.ctp:10
-#: Template/TransactionCreations/view.ctp:13 Template/Transactions/add.ctp:18
-#: Template/Transactions/edit.ctp:24 Template/Transactions/index.ctp:18
-#: Template/Transactions/view.ctp:21
-msgid "New Transaction Creation"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:19 Template/StateUsers/add.ctp:19
-#: Template/StateUsers/edit.ctp:25 Template/StateUsers/index.ctp:19
-#: Template/StateUsers/view.ctp:20 Template/TransactionSendCoins/add.ctp:10
-#: Template/TransactionSendCoins/edit.ctp:16
-#: Template/TransactionSendCoins/view.ctp:12 Template/Transactions/add.ctp:25
-#: Template/Transactions/edit.ctp:31 Template/Transactions/index.ctp:25
-#: Template/Transactions/view.ctp:28
-msgid "List Transaction Send Coins"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:20 Template/StateUsers/add.ctp:20
-#: Template/StateUsers/edit.ctp:26 Template/StateUsers/index.ctp:20
-#: Template/StateUsers/view.ctp:21 Template/TransactionSendCoins/index.ctp:10
-#: Template/TransactionSendCoins/view.ctp:13 Template/Transactions/add.ctp:26
-#: Template/Transactions/edit.ctp:32 Template/Transactions/index.ctp:26
-#: Template/Transactions/view.ctp:29
-msgid "New Transaction Send Coin"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:24 Template/StateUserRoles/search.ctp:25
-#: Template/StateUsers/index.ctp:24
-msgid "State Users"
-msgstr ""
-
-#: Template/StateUserRoles/search.ctp:19 Template/StateUsers/search.ctp:57
-msgid "Suchbegriff"
-msgstr ""
-
-#: Template/StateUserRoles/search.ctp:19 Template/StateUsers/search.ctp:57
-msgid "Vorname/Nachname/E-Mail"
-msgstr ""
-
-#: Template/StateUserRoles/search.ctp:20 Template/StateUsers/search.ctp:59
-#: Template/TransactionCreations/create_multi.ctp:35
-msgid "Suchen"
-msgstr ""
-
-#: Template/StateUserTransactions/add.ctp:10
-#: Template/StateUserTransactions/edit.ctp:16
-#: Template/StateUserTransactions/view.ctp:12
-msgid "List State User Transactions"
-msgstr ""
-
-#: Template/StateUserTransactions/add.ctp:22
-msgid "Add State User Transaction"
-msgstr ""
-
-#: Template/StateUserTransactions/edit.ctp:28
-#: Template/StateUserTransactions/view.ctp:10
-msgid "Edit State User Transaction"
-msgstr ""
-
-#: Template/StateUserTransactions/index.ctp:10
-#: Template/StateUserTransactions/view.ctp:13
-msgid "New State User Transaction"
-msgstr ""
-
-#: Template/StateUserTransactions/index.ctp:20
-msgid "State User Transactions"
-msgstr ""
-
-#: Template/StateUserTransactions/view.ctp:11
-msgid "Delete State User Transaction"
-msgstr ""
-
-#: Template/StateUsers/add.ctp:26
-msgid "Add State User"
-msgstr ""
-
-#: Template/StateUsers/edit.ctp:32 Template/StateUsers/view.ctp:10
-msgid "Edit State User"
-msgstr ""
-
-#: Template/StateUsers/search.ctp:16
-msgid "Alle"
-msgstr ""
-
-#: Template/StateUsers/search.ctp:21
-msgid "Konto nicht aktiviert"
-msgstr ""
-
-#: Template/StateUsers/search.ctp:58
-msgid "Konto Status"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:11
-msgid "Delete State User"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:28
-msgid "State Balance"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:32
-msgid "Letztes Update"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:49
-msgid "Schöpfungen"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:54 Template/StateUsers/view.ctp:84
-#: Template/StateUsers/view.ctp:118
-msgid "Erhalten"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:55
-msgid "Verrechnungs-Datum"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:79
-msgid "Versendete Überweisungen"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:85
-msgid "Empfänger "
-msgstr ""
-
-#: Template/StateUsers/view.ctp:88
-msgid "Betrag nach Senden"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:113
-msgid "Empfangende Überweisungen"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:119
-msgid "Sender"
-msgstr ""
-
-#: Template/TransactionCreations/add.ctp:20
-msgid "Add Transaction Creation"
-msgstr ""
-
-#: Template/TransactionCreations/create.ctp:17
-#: Template/TransactionCreations/create_multi.ctp:17
-msgid "Schöpfungstransaktion"
-msgstr ""
-
-#: Template/TransactionCreations/create.ctp:28
-#: Template/TransactionCreations/create_multi.ctp:125
-msgid "Transaktion(en) abschließen"
-msgstr ""
-
-#: Template/TransactionCreations/create.ctp:29
-#: Template/TransactionCreations/create_multi.ctp:126
-#: Template/TransactionSendCoins/create.ctp:24
-msgid "Weitere Transaktion erstellen"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:34
-msgid "Suche"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:38
-msgid "Memo"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:39
-#: Template/TransactionSendCoins/create.ctp:22
-#: Template/TransactionSendCoins/create_raw.ctp:33
-msgid "Betrag in GDD"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:46
-msgid "Zieldatum"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:81
-msgid "Für benutzerdefinierten Betrag"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:189
-msgid "Alle Transaktionen abgeschlossen!"
-msgstr ""
-
-#: Template/TransactionCreations/edit.ctp:26
-#: Template/TransactionCreations/view.ctp:10
-msgid "Edit Transaction Creation"
-msgstr ""
-
-#: Template/TransactionCreations/index.ctp:18
-msgid "Transaction Creations"
-msgstr ""
-
-#: Template/TransactionCreations/view.ctp:11
-msgid "Delete Transaction Creation"
-msgstr ""
-
-#: Template/TransactionGroupAddaddress/add.ctp:20
-msgid "Add Transaction Group Addaddres"
-msgstr ""
-
-#: Template/TransactionGroupAddaddress/edit.ctp:26
-#: Template/TransactionGroupAddaddress/view.ctp:10
-msgid "Edit Transaction Group Addaddres"
-msgstr ""
-
-#: Template/TransactionGroupAddaddress/index.ctp:18
-msgid "Transaction Group Addaddress"
-msgstr ""
-
-#: Template/TransactionGroupAddaddress/view.ctp:11
-msgid "Delete Transaction Group Addaddres"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/add.ctp:10
-#: Template/TransactionGroupAllowtrades/edit.ctp:16
-#: Template/TransactionGroupAllowtrades/view.ctp:12
-#: Template/Transactions/add.ctp:21 Template/Transactions/edit.ctp:27
-#: Template/Transactions/index.ctp:21 Template/Transactions/view.ctp:24
-msgid "List Transaction Group Allowtrades"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/add.ctp:18
-msgid "Add Transaction Group Allowtrade"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/edit.ctp:24
-#: Template/TransactionGroupAllowtrades/view.ctp:10
-msgid "Edit Transaction Group Allowtrade"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/index.ctp:10
-#: Template/TransactionGroupAllowtrades/view.ctp:13
-#: Template/Transactions/add.ctp:22 Template/Transactions/edit.ctp:28
-#: Template/Transactions/index.ctp:22 Template/Transactions/view.ctp:25
-msgid "New Transaction Group Allowtrade"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/index.ctp:16
-msgid "Transaction Group Allowtrades"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/view.ctp:11
-msgid "Delete Transaction Group Allowtrade"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/view.ctp:34
-#: Template/Transactions/view.ctp:151
-msgid "Allow"
-msgstr ""
-
-#: Template/TransactionGroupCreates/add.ctp:20
-msgid "Add Transaction Group Create"
-msgstr ""
-
-#: Template/TransactionGroupCreates/edit.ctp:26
-#: Template/TransactionGroupCreates/view.ctp:10
-msgid "Edit Transaction Group Create"
-msgstr ""
-
-#: Template/TransactionGroupCreates/index.ctp:18
-msgid "Transaction Group Creates"
-msgstr ""
-
-#: Template/TransactionGroupCreates/view.ctp:11
-msgid "Delete Transaction Group Create"
-msgstr ""
-
-#: Template/TransactionGroupCreates/view.ctp:28
-#: Template/Transactions/view.ctp:38
-msgid "State Group"
-msgstr ""
-
-#: Template/TransactionSendCoins/add.ctp:20
-msgid "Add Transaction Send Coin"
-msgstr ""
-
-#: Template/TransactionSendCoins/create.ctp:19
-msgid "Empfänger"
-msgstr ""
-
-#: Template/TransactionSendCoins/create.ctp:20
-msgid "Community Alias"
-msgstr ""
-
-#: Template/TransactionSendCoins/create.ctp:23
-#: Template/TransactionSendCoins/create_raw.ctp:34
-msgid "Transaktion abschließen"
-msgstr ""
-
-#: Template/TransactionSendCoins/create_raw.ctp:29
-msgid "Sender Private Key"
-msgstr ""
-
-#: Template/TransactionSendCoins/create_raw.ctp:30
-msgid "Sender Public Key"
-msgstr ""
-
-#: Template/TransactionSendCoins/create_raw.ctp:31
-msgid "Empfänger Public Key"
-msgstr ""
-
-#: Template/TransactionSendCoins/edit.ctp:26
-#: Template/TransactionSendCoins/view.ctp:10
-msgid "Edit Transaction Send Coin"
-msgstr ""
-
-#: Template/TransactionSendCoins/index.ctp:18
-msgid "Transaction Send Coins"
-msgstr ""
-
-#: Template/TransactionSendCoins/view.ctp:11
-msgid "Delete Transaction Send Coin"
-msgstr ""
-
-#: Template/TransactionSendCoins/view.ctp:40 Template/Transactions/view.ctp:210
-msgid "Sender Final Balance"
-msgstr ""
-
-#: Template/TransactionSignatures/add.ctp:10
-#: Template/TransactionSignatures/edit.ctp:16
-#: Template/TransactionSignatures/view.ctp:12 Template/Transactions/add.ctp:27
-#: Template/Transactions/edit.ctp:33 Template/Transactions/index.ctp:27
-#: Template/Transactions/view.ctp:30
-msgid "List Transaction Signatures"
-msgstr ""
-
-#: Template/TransactionSignatures/add.ctp:18
-msgid "Add Transaction Signature"
-msgstr ""
-
-#: Template/TransactionSignatures/edit.ctp:24
-#: Template/TransactionSignatures/view.ctp:10
-msgid "Edit Transaction Signature"
-msgstr ""
-
-#: Template/TransactionSignatures/index.ctp:10
-#: Template/TransactionSignatures/view.ctp:13 Template/Transactions/add.ctp:28
-#: Template/Transactions/edit.ctp:34 Template/Transactions/index.ctp:28
-#: Template/Transactions/view.ctp:31
-msgid "New Transaction Signature"
-msgstr ""
-
-#: Template/TransactionSignatures/index.ctp:16
-msgid "Transaction Signatures"
-msgstr ""
-
-#: Template/TransactionSignatures/view.ctp:11
-msgid "Delete Transaction Signature"
-msgstr ""
-
-#: Template/TransactionTypes/add.ctp:18
-msgid "Add Transaction Type"
-msgstr ""
-
-#: Template/TransactionTypes/edit.ctp:24 Template/TransactionTypes/view.ctp:10
-msgid "Edit Transaction Type"
-msgstr ""
-
-#: Template/TransactionTypes/index.ctp:16
-msgid "Transaction Types"
-msgstr ""
-
-#: Template/TransactionTypes/view.ctp:11
-msgid "Delete Transaction Type"
-msgstr ""
-
-#: Template/Transactions/add.ctp:34
-msgid "Add Transaction"
-msgstr ""
-
-#: Template/Transactions/edit.ctp:40 Template/Transactions/view.ctp:10
-msgid "Edit Transaction"
-msgstr ""
-
-#: Template/Transactions/manual_transaction.ctp:26
-msgid "Creation Transaction"
-msgstr ""
-
-#: Template/Transactions/manual_transaction.ctp:41
-msgid "Transfer Transaction"
-msgstr ""
-
-#: Template/Transactions/send_to_node.ctp:8
-msgid "Transaktionen an Gradido-Node senden"
-msgstr ""
-
-#: Template/Transactions/synchronize_with_state_user_transactions.ctp:44
-msgid "Synchronize"
-msgstr ""
-
-#: Template/Transactions/view.ctp:11
-msgid "Delete Transaction"
-msgstr ""
-
-#: Template/Transactions/view.ctp:55
-msgid "Related State Created"
-msgstr ""
-
-#: Template/Transactions/view.ctp:88
-msgid "Related Transaction Creations"
-msgstr ""
-
-#: Template/Transactions/view.ctp:96
-msgid "Ident Hash"
-msgstr ""
-
-#: Template/Transactions/view.ctp:144
-msgid "Related Transaction Group Allowtrades"
-msgstr ""
-
-#: Template/Transactions/view.ctp:200
-msgid "Related Transaction Send Coins"
-msgstr ""
-
-#: Template/Transactions/view.ctp:207
-msgid "Receiver Public Key"
-msgstr ""
-
-#: Template/Transactions/view.ctp:208
-msgid "Receiver User Id"
-msgstr ""
-
-#: Template/Transactions/view.ctp:233
-msgid "Related Transaction Signatures"
-msgstr ""
-
-#: Template/Transactions/view.ctp:239
-msgid "Signature"
-msgstr ""
-
-#: Template/Transactions/view.ctp:240
-msgid "Pubkey"
-msgstr ""
-
-#: Template/Users/add.ctp:10 Template/Users/edit.ctp:16
-#: Template/Users/view.ctp:12
-msgid "List Users"
-msgstr ""
-
-#: Template/Users/add.ctp:16
-msgid "Add User"
-msgstr ""
-
-#: Template/Users/edit.ctp:22 Template/Users/view.ctp:10
-msgid "Edit User"
-msgstr ""
-
-#: Template/Users/index.ctp:10 Template/Users/view.ctp:13
-msgid "New User"
-msgstr ""
-
-#: Template/Users/index.ctp:14
-msgid "Users"
-msgstr ""
-
-#: Template/Users/statistics.ctp:9
-msgid "Benutzer Statistiken"
-msgstr ""
-
-#: Template/Users/statistics.ctp:39
-msgid "Alle Anmeldungen"
-msgstr ""
-
-#: Template/Users/statistics.ctp:56
-msgid "Anmeldungen im Vergleich zum letzten Monat, 0% = gleiche Anzahl"
-msgstr ""
-
-#: Template/Users/statistics.ctp:61
-msgid "Letzte Anmeldungen"
-msgstr ""
-
-#: Template/Users/statistics.ctp:66
-msgid "Erstellt"
-msgstr ""
-
-#: Template/Users/statistics.ctp:79
-msgid "Anmeldungen detailliert"
-msgstr ""
-
-#: Template/Users/statistics.ctp:82
-msgid "Jahr"
-msgstr ""
-
-#: Template/Users/statistics.ctp:83
-msgid "Monat"
-msgstr ""
-
-#: Template/Users/statistics.ctp:84
-msgid "Anzahl Anmeldungen"
-msgstr ""
-
-#: Template/Users/view.ctp:11
-msgid "Delete User"
-msgstr ""
-
-#: Template/Users/view.ctp:24
-msgid "First Name"
-msgstr ""
-
-#: Template/Users/view.ctp:28
-msgid "Last Name"
-msgstr ""
-
-#: Template/Users/view.ctp:32
-msgid "Language"
-msgstr ""
-
-#: Template/Users/view.ctp:48
-msgid "Email Checked"
-msgstr ""
diff --git a/community_server/src/Locale/default.pot b/community_server/src/Locale/default.pot
deleted file mode 100644
index 0c9ada315..000000000
--- a/community_server/src/Locale/default.pot
+++ /dev/null
@@ -1,3566 +0,0 @@
-# LANGUAGE translation of CakePHP Application
-# Copyright YEAR NAME
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"POT-Creation-Date: 2021-08-11 11:38+0000\n"
-"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
-"Last-Translator: NAME \n"
-"Language-Team: LANGUAGE \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-
-#: Controller/AddressTypesController.php:54
-#: Controller/AddressTypesController.php:78
-msgid "The address type has been saved."
-msgstr ""
-
-#: Controller/AddressTypesController.php:58
-#: Controller/AddressTypesController.php:82
-msgid "The address type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/AddressTypesController.php:99
-msgid "The address type has been deleted."
-msgstr ""
-
-#: Controller/AddressTypesController.php:101
-msgid "The address type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/AdminErrorsController.php:57
-#: Controller/AdminErrorsController.php:82
-msgid "The admin error has been saved."
-msgstr ""
-
-#: Controller/AdminErrorsController.php:61
-#: Controller/AdminErrorsController.php:86
-msgid "The admin error could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/AdminErrorsController.php:104
-msgid "The admin error has been deleted."
-msgstr ""
-
-#: Controller/AdminErrorsController.php:106
-msgid "The admin error could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/AppController.php:262
-msgid "error updating state user "
-msgstr ""
-
-#: Controller/AppController.php:276
-msgid "error saving state user "
-msgstr ""
-
-#: Controller/AppController.php:286
-msgid "no pubkey"
-msgstr ""
-
-#: Controller/AppController.php:295
-msgid "invalid session"
-msgstr ""
-
-#: Controller/AppController.php:297
-msgid "Konto ist nicht aktiviert!"
-msgstr ""
-
-#: Controller/AppController.php:311
-#: Controller/StateUsersController.php:103
-msgid "error http request: "
-msgstr ""
-
-#: Controller/AppController.php:358
-msgid "(Leere Message)"
-msgstr ""
-
-#: Controller/AppController.php:363
-msgid "(Leere Details)"
-msgstr ""
-
-#: Controller/AppController.php:367
-msgid "Serious error, couldn't save to db, please write the admin: "
-msgstr ""
-
-#: Controller/BlockchainTypesController.php:54
-#: Controller/BlockchainTypesController.php:78
-msgid "The blockchain type has been saved."
-msgstr ""
-
-#: Controller/BlockchainTypesController.php:58
-#: Controller/BlockchainTypesController.php:82
-msgid "The blockchain type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/BlockchainTypesController.php:99
-msgid "The blockchain type has been deleted."
-msgstr ""
-
-#: Controller/BlockchainTypesController.php:101
-msgid "The blockchain type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/CommunityProfilesController.php:54
-#: Controller/CommunityProfilesController.php:78
-msgid "The community profile has been saved."
-msgstr ""
-
-#: Controller/CommunityProfilesController.php:58
-#: Controller/CommunityProfilesController.php:82
-msgid "The community profile could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/CommunityProfilesController.php:99
-msgid "The community profile has been deleted."
-msgstr ""
-
-#: Controller/CommunityProfilesController.php:101
-msgid "The community profile could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/DashboardController.php:29
-#: Controller/ProfileController.php:28
-#: Controller/StateBalancesController.php:52
-#: Controller/StateBalancesController.php:202
-#: Controller/StateErrorsController.php:26
-#: Controller/StateUserRolesController.php:42
-#: Controller/StateUsersController.php:54
-#: Controller/TransactionCreationsController.php:42
-#: Controller/TransactionSendCoinsController.php:44
-#: Controller/UsersController.php:26
-#: Template/Element/navi.ctp:33
-msgid "Startseite"
-msgstr ""
-
-#: Controller/ElopageBuysController.php:112
-#: Controller/ElopageBuysController.php:137
-msgid "The elopage buy has been saved."
-msgstr ""
-
-#: Controller/ElopageBuysController.php:116
-#: Controller/ElopageBuysController.php:141
-msgid "The elopage buy could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/ElopageBuysController.php:158
-msgid "The elopage buy has been deleted."
-msgstr ""
-
-#: Controller/ElopageBuysController.php:160
-msgid "The elopage buy could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/JsonRequestHandlerController.php:366
-msgid "Gradido Transaktion fehlgeschlagen!"
-msgstr ""
-
-#: Controller/OperatorTypesController.php:54
-#: Controller/OperatorTypesController.php:78
-msgid "The operator type has been saved."
-msgstr ""
-
-#: Controller/OperatorTypesController.php:58
-#: Controller/OperatorTypesController.php:82
-msgid "The operator type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/OperatorTypesController.php:99
-msgid "The operator type has been deleted."
-msgstr ""
-
-#: Controller/OperatorTypesController.php:101
-msgid "The operator type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/OperatorsController.php:182
-#: Controller/OperatorsController.php:207
-msgid "The operator has been saved."
-msgstr ""
-
-#: Controller/OperatorsController.php:186
-#: Controller/OperatorsController.php:211
-msgid "The operator could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/OperatorsController.php:229
-msgid "The operator has been deleted."
-msgstr ""
-
-#: Controller/OperatorsController.php:231
-msgid "The operator could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/ProfileController.php:29
-#: Template/Element/user_menu.ctp:15
-#: Template/Profile/index.ctp:19
-msgid "Mein Profil"
-msgstr ""
-
-#: Controller/ProfileController.php:108
-msgid "Dein Profil wurde aktualisiert!"
-msgstr ""
-
-#: Controller/ProfileController.php:111
-msgid "Non-recoverable database problem - state_user doesn't exist or not unique!"
-msgstr ""
-
-#: Controller/ProfileController.php:198
-#: Controller/StateUserRolesController.php:117
-#: Controller/StateUsersController.php:291
-#: Controller/TransactionCreationsController.php:183
-msgid "Something was invalid, please try again!"
-msgstr ""
-
-#: Controller/RolesController.php:56
-#: Controller/RolesController.php:80
-msgid "The role has been saved."
-msgstr ""
-
-#: Controller/RolesController.php:60
-#: Controller/RolesController.php:84
-msgid "The role could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/RolesController.php:101
-msgid "The role has been deleted."
-msgstr ""
-
-#: Controller/RolesController.php:103
-msgid "The role could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/ServerUsersController.php:42
-msgid "Invalid username or password, try again"
-msgstr ""
-
-#: Controller/ServerUsersController.php:79
-#: Controller/ServerUsersController.php:103
-msgid "The server user has been saved."
-msgstr ""
-
-#: Controller/ServerUsersController.php:83
-#: Controller/ServerUsersController.php:107
-msgid "The server user could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/ServerUsersController.php:124
-msgid "The server user has been deleted."
-msgstr ""
-
-#: Controller/ServerUsersController.php:126
-msgid "The server user could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateBalancesController.php:53
-#: Template/Dashboard/index.ctp:30
-#: Template/Element/navi.ctp:22
-#: Template/StateBalances/overview.ctp:8
-msgid "Kontoübersicht"
-msgstr ""
-
-#: Controller/StateBalancesController.php:203
-#: Template/StateBalances/overview_gdt.ctp:20
-msgid "GDT Kontoübersicht"
-msgstr ""
-
-#: Controller/StateBalancesController.php:252
-msgid "Fehler beim GDT Server, bitte abwarten oder den Admin benachrichtigen!"
-msgstr ""
-
-#: Controller/StateBalancesController.php:351
-#: Controller/StateBalancesController.php:376
-msgid "The state balance has been saved."
-msgstr ""
-
-#: Controller/StateBalancesController.php:355
-#: Controller/StateBalancesController.php:380
-msgid "The state balance could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateBalancesController.php:398
-msgid "The state balance has been deleted."
-msgstr ""
-
-#: Controller/StateBalancesController.php:400
-msgid "The state balance could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateCreatedController.php:57
-#: Controller/StateCreatedController.php:83
-msgid "The state created has been saved."
-msgstr ""
-
-#: Controller/StateCreatedController.php:61
-#: Controller/StateCreatedController.php:87
-msgid "The state created could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateCreatedController.php:106
-msgid "The state created has been deleted."
-msgstr ""
-
-#: Controller/StateCreatedController.php:108
-msgid "The state created could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateErrorsController.php:27
-#: Template/Dashboard/index.ctp:79
-#: Template/Dashboard/server_index.ctp:31
-#: Template/Element/navi_header.ctp:33
-#: Template/Element/navi_notify.ctp:32
-msgid "Fehler"
-msgstr ""
-
-#: Controller/StateErrorsController.php:75
-msgid "Error belongs to another User, cannot delete"
-msgstr ""
-
-#: Controller/StateErrorsController.php:78
-#: Controller/StateErrorsController.php:166
-msgid "The state error has been deleted."
-msgstr ""
-
-#: Controller/StateErrorsController.php:80
-#: Controller/StateErrorsController.php:168
-msgid "The state error could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateErrorsController.php:117
-#: Controller/StateErrorsController.php:143
-msgid "The state error has been saved."
-msgstr ""
-
-#: Controller/StateErrorsController.php:121
-#: Controller/StateErrorsController.php:147
-msgid "The state error could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupAddressesController.php:57
-#: Controller/StateGroupAddressesController.php:83
-msgid "The state group address has been saved."
-msgstr ""
-
-#: Controller/StateGroupAddressesController.php:61
-#: Controller/StateGroupAddressesController.php:87
-msgid "The state group address could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupAddressesController.php:106
-msgid "The state group address has been deleted."
-msgstr ""
-
-#: Controller/StateGroupAddressesController.php:108
-msgid "The state group address could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupRelationshipsController.php:57
-#: Controller/StateGroupRelationshipsController.php:84
-msgid "The state group relationship has been saved."
-msgstr ""
-
-#: Controller/StateGroupRelationshipsController.php:61
-#: Controller/StateGroupRelationshipsController.php:88
-msgid "The state group relationship could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupRelationshipsController.php:108
-msgid "The state group relationship has been deleted."
-msgstr ""
-
-#: Controller/StateGroupRelationshipsController.php:110
-msgid "The state group relationship could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupsController.php:57
-#: Controller/StateGroupsController.php:82
-msgid "The state group has been saved."
-msgstr ""
-
-#: Controller/StateGroupsController.php:61
-#: Controller/StateGroupsController.php:86
-msgid "The state group could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateGroupsController.php:104
-msgid "The state group has been deleted."
-msgstr ""
-
-#: Controller/StateGroupsController.php:106
-msgid "The state group could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateRelationshipTypesController.php:54
-#: Controller/StateRelationshipTypesController.php:78
-msgid "The state relationship type has been saved."
-msgstr ""
-
-#: Controller/StateRelationshipTypesController.php:58
-#: Controller/StateRelationshipTypesController.php:82
-msgid "The state relationship type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateRelationshipTypesController.php:99
-msgid "The state relationship type has been deleted."
-msgstr ""
-
-#: Controller/StateRelationshipTypesController.php:101
-msgid "The state relationship type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateUserRolesController.php:42
-#: Controller/StateUsersController.php:54
-#: Template/StateUserRoles/search.ctp:9
-#: Template/StateUsers/search.ctp:9
-msgid "Benutzer suchen"
-msgstr ""
-
-#: Controller/StateUserRolesController.php:149
-msgid "Role has been assigned to User."
-msgstr ""
-
-#: Controller/StateUserTransactionsController.php:233
-#: Controller/StateUserTransactionsController.php:260
-msgid "The state user transaction has been saved."
-msgstr ""
-
-#: Controller/StateUserTransactionsController.php:237
-#: Controller/StateUserTransactionsController.php:264
-msgid "The state user transaction could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateUserTransactionsController.php:284
-msgid "The state user transaction has been deleted."
-msgstr ""
-
-#: Controller/StateUserTransactionsController.php:286
-msgid "The state user transaction could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/StateUsersController.php:21
-msgid "account created"
-msgstr ""
-
-#: Controller/StateUsersController.php:22
-msgid "account not on login-server"
-msgstr ""
-
-#: Controller/StateUsersController.php:23
-msgid "email activated"
-msgstr ""
-
-#: Controller/StateUsersController.php:24
-msgid "account copied to community"
-msgstr ""
-
-#: Controller/StateUsersController.php:25
-msgid "email not activated"
-msgstr ""
-
-#: Controller/StateUsersController.php:26
-msgid "account multiple times on login-server"
-msgstr ""
-
-#: Controller/StateUsersController.php:27
-msgid "account not on community server"
-msgstr ""
-
-#: Controller/StateUsersController.php:28
-msgid "no keys"
-msgstr ""
-
-#: Controller/StateUsersController.php:560
-#: Controller/StateUsersController.php:586
-msgid "The state user has been saved."
-msgstr ""
-
-#: Controller/StateUsersController.php:564
-#: Controller/StateUsersController.php:590
-msgid "The state user could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/StateUsersController.php:609
-msgid "The state user has been deleted."
-msgstr ""
-
-#: Controller/StateUsersController.php:611
-msgid "The state user could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:42
-msgid "Gradido schöpfen"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:149
-#: Controller/TransactionCreationsController.php:385
-#: Controller/TransactionCreationsController.php:408
-msgid "Error by requesting LoginServer, please try again"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:151
-#: Controller/TransactionCreationsController.php:410
-msgid "Error, please wait for the admin to fix it"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:161
-msgid "Login Server Error, please wait for the admin to fix it"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:174
-#: Controller/TransactionCreationsController.php:491
-#: Controller/TransactionSendCoinsController.php:204
-msgid "Transaction submitted for review."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:179
-msgid "Building transaction failed"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:342
-msgid "No user selected"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:442
-#: Controller/TransactionSendCoinsController.php:231
-msgid "Fehler mit der Session, bitte logge dich erneut ein!"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:447
-msgid "Fehler, Benutzer gehört zu einer anderen Gruppe!"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:452
-#: Controller/TransactionSendCoinsController.php:246
-msgid "Der Empfänger wurde nicht auf dem Login-Server gefunden, hat er sein Konto schon angelegt?"
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:456
-#: Controller/TransactionSendCoinsController.php:250
-msgid "Der Empfänger ist deaktiviert, daher können ihm zurzeit keine Gradidos gesendet werden."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:460
-msgid "Der Betrag ist ungültig, er muss größer als 0 und <= 1000 sein."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:464
-#: Controller/TransactionSendCoinsController.php:254
-msgid "Unbehandelter Fehler: "
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:625
-#: Controller/TransactionCreationsController.php:651
-msgid "The transaction creation has been saved."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:629
-#: Controller/TransactionCreationsController.php:655
-msgid "The transaction creation could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:674
-msgid "The transaction creation has been deleted."
-msgstr ""
-
-#: Controller/TransactionCreationsController.php:676
-msgid "The transaction creation could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupAddaddressController.php:57
-#: Controller/TransactionGroupAddaddressController.php:83
-msgid "The transaction group addaddres has been saved."
-msgstr ""
-
-#: Controller/TransactionGroupAddaddressController.php:61
-#: Controller/TransactionGroupAddaddressController.php:87
-msgid "The transaction group addaddres could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupAddaddressController.php:106
-msgid "The transaction group addaddres has been deleted."
-msgstr ""
-
-#: Controller/TransactionGroupAddaddressController.php:108
-msgid "The transaction group addaddres could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupAllowtradesController.php:57
-#: Controller/TransactionGroupAllowtradesController.php:83
-msgid "The transaction group allowtrade has been saved."
-msgstr ""
-
-#: Controller/TransactionGroupAllowtradesController.php:61
-#: Controller/TransactionGroupAllowtradesController.php:87
-msgid "The transaction group allowtrade could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupAllowtradesController.php:106
-msgid "The transaction group allowtrade has been deleted."
-msgstr ""
-
-#: Controller/TransactionGroupAllowtradesController.php:108
-msgid "The transaction group allowtrade could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupCreatesController.php:57
-#: Controller/TransactionGroupCreatesController.php:83
-msgid "The transaction group create has been saved."
-msgstr ""
-
-#: Controller/TransactionGroupCreatesController.php:61
-#: Controller/TransactionGroupCreatesController.php:87
-msgid "The transaction group create could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionGroupCreatesController.php:106
-msgid "The transaction group create has been deleted."
-msgstr ""
-
-#: Controller/TransactionGroupCreatesController.php:108
-msgid "The transaction group create could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:45
-#: Template/Dashboard/index.ctp:38
-#: Template/Element/navi.ctp:34
-#: Template/StateUsers/view.ctp:83
-#: Template/StateUsers/view.ctp:117
-#: Template/TransactionSendCoins/create.ctp:9
-#: Template/TransactionSendCoins/create_raw.ctp:9
-msgid "Überweisung"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:92
-#: Controller/TransactionSendCoinsController.php:119
-msgid "The transaction send coin has been saved."
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:96
-#: Controller/TransactionSendCoinsController.php:123
-msgid "The transaction send coin could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:173
-msgid "Du hast nicht genug Gradidos!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:179
-msgid "Du kannst dir selbst keine Gradidos senden!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:236
-msgid "Empfänger befindet sich nicht in Zielgruppe!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:241
-msgid "Ein Verwendungszweck zwischen 5 und 150 Zeichen wird benötig!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:428
-msgid "Error validating transaction"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:431
-msgid "Error saving transaction"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:433
-msgid "Gradidos erfolgreich überwiesen!"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:437
-msgid "Error building transaction"
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:462
-msgid "The transaction send coin has been deleted."
-msgstr ""
-
-#: Controller/TransactionSendCoinsController.php:464
-msgid "The transaction send coin could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionSignaturesController.php:57
-#: Controller/TransactionSignaturesController.php:82
-msgid "The transaction signature has been saved."
-msgstr ""
-
-#: Controller/TransactionSignaturesController.php:61
-#: Controller/TransactionSignaturesController.php:86
-msgid "The transaction signature could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionSignaturesController.php:104
-msgid "The transaction signature has been deleted."
-msgstr ""
-
-#: Controller/TransactionSignaturesController.php:106
-msgid "The transaction signature could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionTypesController.php:54
-#: Controller/TransactionTypesController.php:78
-msgid "The transaction type has been saved."
-msgstr ""
-
-#: Controller/TransactionTypesController.php:58
-#: Controller/TransactionTypesController.php:82
-msgid "The transaction type could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionTypesController.php:99
-msgid "The transaction type has been deleted."
-msgstr ""
-
-#: Controller/TransactionTypesController.php:101
-msgid "The transaction type could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/TransactionsController.php:252
-msgid "No valid data given, please try again."
-msgstr ""
-
-#: Controller/TransactionsController.php:289
-msgid "error retriving last saved transaction from gradido node."
-msgstr ""
-
-#: Controller/TransactionsController.php:391
-#: Controller/TransactionsController.php:420
-msgid "The transaction has been saved."
-msgstr ""
-
-#: Controller/TransactionsController.php:394
-msgid "Error by saving: "
-msgstr ""
-
-#: Controller/TransactionsController.php:397
-#: Controller/TransactionsController.php:424
-msgid "The transaction could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/TransactionsController.php:443
-msgid "The transaction has been deleted."
-msgstr ""
-
-#: Controller/TransactionsController.php:445
-msgid "The transaction could not be deleted. Please, try again."
-msgstr ""
-
-#: Controller/UsersController.php:26
-msgid "Benutzerstatistiken"
-msgstr ""
-
-#: Controller/UsersController.php:115
-#: Controller/UsersController.php:139
-msgid "The user has been saved."
-msgstr ""
-
-#: Controller/UsersController.php:119
-#: Controller/UsersController.php:143
-msgid "The user could not be saved. Please, try again."
-msgstr ""
-
-#: Controller/UsersController.php:160
-msgid "The user has been deleted."
-msgstr ""
-
-#: Controller/UsersController.php:162
-msgid "The user could not be deleted. Please, try again."
-msgstr ""
-
-#: Form/CreationForm.php:44
-#: Form/ProfileForm.php:39
-#: Form/TransferForm.php:42
-#: Form/TransferForm.php:53
-#: Form/TransferRawForm.php:35
-msgid "No HTML Tags like > or < please."
-msgstr ""
-
-#: Form/CreationForm.php:56
-msgid "Please give a valid number with maximal 2 decimal places"
-msgstr ""
-
-#: Form/ProfileForm.php:26
-msgid "The first name should contain max 255 characters"
-msgstr ""
-
-#: Form/ProfileForm.php:30
-msgid "The last name should contain max 255 characters"
-msgstr ""
-
-#: Form/ProfileForm.php:34
-msgid "The description should contain max 2000 characters"
-msgstr ""
-
-#: Form/TransferForm.php:36
-msgid "A valid email address is required"
-msgstr ""
-
-#: Form/TransferForm.php:46
-#: Form/TransferRawForm.php:29
-msgid "The memo should contain max 150 character"
-msgstr ""
-
-#: Form/TransferForm.php:65
-#: Form/TransferRawForm.php:56
-msgid "Please give a valid positive number with maximal 2 decimal places"
-msgstr ""
-
-#: Form/UserSearchForm.php:34
-msgid "The search text should contain max 50 character"
-msgstr ""
-
-#: Form/UserSearchForm.php:41
-msgid "No HTML Tags like < or > please."
-msgstr ""
-
-#: Model/Table/ServerUsersTable.php:58
-msgid "Please give a username"
-msgstr ""
-
-#: Model/Table/ServerUsersTable.php:64
-msgid "Please give a password"
-msgstr ""
-
-#: Model/Table/ServerUsersTable.php:69
-msgid "Please give a email"
-msgstr ""
-
-#: Model/Transactions/TransactionCreation.php:209
-msgid "Gradido Schöpfung erhalten"
-msgstr ""
-
-#: Model/Transactions/TransactionTransfer.php:210
-msgid "Gradidos erhalten"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:9
-#: Template/AddressTypes/edit.ctp:9
-#: Template/AddressTypes/index.ctp:9
-#: Template/AddressTypes/index.ctp:25
-#: Template/AddressTypes/view.ctp:9
-#: Template/AddressTypes/view.ctp:45
-#: Template/AddressTypes/view.ctp:73
-#: Template/AdminErrors/add.ctp:9
-#: Template/AdminErrors/edit.ctp:9
-#: Template/AdminErrors/index.ctp:9
-#: Template/AdminErrors/index.ctp:26
-#: Template/AdminErrors/view.ctp:9
-#: Template/BlockchainTypes/add.ctp:9
-#: Template/BlockchainTypes/edit.ctp:9
-#: Template/BlockchainTypes/index.ctp:9
-#: Template/BlockchainTypes/index.ctp:22
-#: Template/BlockchainTypes/view.ctp:9
-#: Template/CommunityProfiles/add.ctp:9
-#: Template/CommunityProfiles/edit.ctp:9
-#: Template/CommunityProfiles/index.ctp:9
-#: Template/CommunityProfiles/index.ctp:21
-#: Template/CommunityProfiles/view.ctp:9
-#: Template/ElopageBuys/add.ctp:9
-#: Template/ElopageBuys/edit.ctp:9
-#: Template/ElopageBuys/index.ctp:9
-#: Template/ElopageBuys/index.ctp:30
-#: Template/ElopageBuys/view.ctp:9
-#: Template/OperatorTypes/add.ctp:9
-#: Template/OperatorTypes/edit.ctp:9
-#: Template/OperatorTypes/index.ctp:9
-#: Template/OperatorTypes/index.ctp:23
-#: Template/OperatorTypes/view.ctp:9
-#: Template/OperatorTypes/view.ctp:43
-#: Template/Operators/add.ctp:9
-#: Template/Operators/edit.ctp:9
-#: Template/Operators/index.ctp:9
-#: Template/Operators/index.ctp:24
-#: Template/Operators/view.ctp:9
-#: Template/Roles/add.ctp:9
-#: Template/Roles/edit.ctp:9
-#: Template/Roles/index.ctp:9
-#: Template/Roles/index.ctp:20
-#: Template/Roles/view.ctp:9
-#: Template/ServerUsers/add.ctp:9
-#: Template/ServerUsers/edit.ctp:9
-#: Template/ServerUsers/index.ctp:9
-#: Template/ServerUsers/index.ctp:26
-#: Template/ServerUsers/view.ctp:9
-#: Template/StateBalances/add.ctp:9
-#: Template/StateBalances/edit.ctp:9
-#: Template/StateBalances/index.ctp:9
-#: Template/StateBalances/index.ctp:25
-#: Template/StateBalances/view.ctp:9
-#: Template/StateCreated/add.ctp:9
-#: Template/StateCreated/edit.ctp:9
-#: Template/StateCreated/index.ctp:9
-#: Template/StateCreated/index.ctp:29
-#: Template/StateCreated/view.ctp:9
-#: Template/StateErrors/add.ctp:9
-#: Template/StateErrors/edit.ctp:9
-#: Template/StateErrors/index.ctp:9
-#: Template/StateErrors/index.ctp:26
-#: Template/StateErrors/view.ctp:9
-#: Template/StateGroupAddresses/add.ctp:9
-#: Template/StateGroupAddresses/edit.ctp:9
-#: Template/StateGroupAddresses/index.ctp:9
-#: Template/StateGroupAddresses/index.ctp:26
-#: Template/StateGroupAddresses/view.ctp:9
-#: Template/StateGroupRelationships/add.ctp:9
-#: Template/StateGroupRelationships/edit.ctp:9
-#: Template/StateGroupRelationships/index.ctp:9
-#: Template/StateGroupRelationships/index.ctp:22
-#: Template/StateGroupRelationships/view.ctp:9
-#: Template/StateGroups/add.ctp:9
-#: Template/StateGroups/edit.ctp:9
-#: Template/StateGroups/index.ctp:9
-#: Template/StateGroups/index.ctp:29
-#: Template/StateGroups/view.ctp:9
-#: Template/StateGroups/view.ctp:49
-#: Template/StateGroups/view.ctp:76
-#: Template/StateGroups/view.ctp:104
-#: Template/StateGroups/view.ctp:133
-#: Template/StateRelationshipTypes/add.ctp:9
-#: Template/StateRelationshipTypes/edit.ctp:9
-#: Template/StateRelationshipTypes/index.ctp:9
-#: Template/StateRelationshipTypes/index.ctp:21
-#: Template/StateRelationshipTypes/view.ctp:9
-#: Template/StateUserRoles/index.ctp:9
-#: Template/StateUserRoles/index.ctp:36
-#: Template/StateUserRoles/search.ctp:33
-#: Template/StateUserTransactions/add.ctp:9
-#: Template/StateUserTransactions/edit.ctp:9
-#: Template/StateUserTransactions/index.ctp:9
-#: Template/StateUserTransactions/index.ctp:28
-#: Template/StateUserTransactions/view.ctp:9
-#: Template/StateUsers/add.ctp:9
-#: Template/StateUsers/edit.ctp:9
-#: Template/StateUsers/index.ctp:9
-#: Template/StateUsers/index.ctp:36
-#: Template/StateUsers/view.ctp:9
-#: Template/StateUsers/view.ctp:34
-#: Template/StateUsers/view.ctp:58
-#: Template/StateUsers/view.ctp:89
-#: Template/StateUsers/view.ctp:122
-#: Template/TransactionCreations/add.ctp:9
-#: Template/TransactionCreations/edit.ctp:9
-#: Template/TransactionCreations/index.ctp:9
-#: Template/TransactionCreations/index.ctp:28
-#: Template/TransactionCreations/view.ctp:9
-#: Template/TransactionGroupAddaddress/add.ctp:9
-#: Template/TransactionGroupAddaddress/edit.ctp:9
-#: Template/TransactionGroupAddaddress/index.ctp:9
-#: Template/TransactionGroupAddaddress/index.ctp:26
-#: Template/TransactionGroupAddaddress/view.ctp:9
-#: Template/TransactionGroupAllowtrades/add.ctp:9
-#: Template/TransactionGroupAllowtrades/edit.ctp:9
-#: Template/TransactionGroupAllowtrades/index.ctp:9
-#: Template/TransactionGroupAllowtrades/index.ctp:24
-#: Template/TransactionGroupAllowtrades/view.ctp:9
-#: Template/TransactionGroupCreates/add.ctp:9
-#: Template/TransactionGroupCreates/edit.ctp:9
-#: Template/TransactionGroupCreates/index.ctp:9
-#: Template/TransactionGroupCreates/index.ctp:26
-#: Template/TransactionGroupCreates/view.ctp:9
-#: Template/TransactionSendCoins/add.ctp:9
-#: Template/TransactionSendCoins/edit.ctp:9
-#: Template/TransactionSendCoins/index.ctp:9
-#: Template/TransactionSendCoins/index.ctp:28
-#: Template/TransactionSendCoins/view.ctp:9
-#: Template/TransactionSignatures/add.ctp:9
-#: Template/TransactionSignatures/edit.ctp:9
-#: Template/TransactionSignatures/index.ctp:9
-#: Template/TransactionSignatures/index.ctp:22
-#: Template/TransactionSignatures/view.ctp:9
-#: Template/TransactionTypes/add.ctp:9
-#: Template/TransactionTypes/edit.ctp:9
-#: Template/TransactionTypes/index.ctp:9
-#: Template/TransactionTypes/index.ctp:23
-#: Template/TransactionTypes/view.ctp:9
-#: Template/TransactionTypes/view.ctp:44
-#: Template/Transactions/add.ctp:9
-#: Template/Transactions/edit.ctp:9
-#: Template/Transactions/index.ctp:9
-#: Template/Transactions/view.ctp:9
-#: Template/Transactions/view.ctp:66
-#: Template/Transactions/view.ctp:97
-#: Template/Transactions/view.ctp:125
-#: Template/Transactions/view.ctp:152
-#: Template/Transactions/view.ctp:180
-#: Template/Transactions/view.ctp:211
-#: Template/Transactions/view.ctp:241
-#: Template/Users/add.ctp:9
-#: Template/Users/edit.ctp:9
-#: Template/Users/index.ctp:9
-#: Template/Users/index.ctp:26
-#: Template/Users/view.ctp:9
-msgid "Actions"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:10
-#: Template/AddressTypes/edit.ctp:16
-#: Template/AddressTypes/view.ctp:12
-#: Template/StateGroupAddresses/add.ctp:13
-#: Template/StateGroupAddresses/edit.ctp:19
-#: Template/StateGroupAddresses/index.ctp:13
-#: Template/StateGroupAddresses/view.ctp:16
-#: Template/TransactionGroupAddaddress/add.ctp:13
-#: Template/TransactionGroupAddaddress/edit.ctp:19
-#: Template/TransactionGroupAddaddress/index.ctp:13
-#: Template/TransactionGroupAddaddress/view.ctp:16
-msgid "List Address Types"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:11
-#: Template/AddressTypes/edit.ctp:17
-#: Template/AddressTypes/index.ctp:11
-#: Template/AddressTypes/view.ctp:14
-#: Template/StateGroupAddresses/add.ctp:10
-#: Template/StateGroupAddresses/edit.ctp:16
-#: Template/StateGroupAddresses/view.ctp:12
-#: Template/StateGroups/add.ctp:11
-#: Template/StateGroups/edit.ctp:17
-#: Template/StateGroups/index.ctp:11
-#: Template/StateGroups/view.ctp:14
-msgid "List State Group Addresses"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:12
-#: Template/AddressTypes/edit.ctp:18
-#: Template/AddressTypes/index.ctp:12
-#: Template/AddressTypes/view.ctp:15
-#: Template/StateGroupAddresses/index.ctp:10
-#: Template/StateGroupAddresses/view.ctp:13
-#: Template/StateGroups/add.ctp:12
-#: Template/StateGroups/edit.ctp:18
-#: Template/StateGroups/index.ctp:12
-#: Template/StateGroups/view.ctp:15
-msgid "New State Group Address"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:13
-#: Template/AddressTypes/edit.ctp:19
-#: Template/AddressTypes/index.ctp:13
-#: Template/AddressTypes/view.ctp:16
-#: Template/TransactionGroupAddaddress/add.ctp:10
-#: Template/TransactionGroupAddaddress/edit.ctp:16
-#: Template/TransactionGroupAddaddress/view.ctp:12
-#: Template/Transactions/add.ctp:19
-#: Template/Transactions/edit.ctp:25
-#: Template/Transactions/index.ctp:19
-#: Template/Transactions/view.ctp:22
-msgid "List Transaction Group Addaddress"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:14
-#: Template/AddressTypes/edit.ctp:20
-#: Template/AddressTypes/index.ctp:14
-#: Template/AddressTypes/view.ctp:17
-#: Template/TransactionGroupAddaddress/index.ctp:10
-#: Template/TransactionGroupAddaddress/view.ctp:13
-#: Template/Transactions/add.ctp:20
-#: Template/Transactions/edit.ctp:26
-#: Template/Transactions/index.ctp:20
-#: Template/Transactions/view.ctp:23
-msgid "New Transaction Group Addaddres"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:20
-msgid "Add Address Type"
-msgstr ""
-
-#: Template/AddressTypes/add.ctp:26
-#: Template/AddressTypes/edit.ctp:32
-#: Template/AdminErrors/add.ctp:28
-#: Template/AdminErrors/edit.ctp:34
-#: Template/BlockchainTypes/add.ctp:23
-#: Template/BlockchainTypes/edit.ctp:29
-#: Template/CommunityProfiles/add.ctp:22
-#: Template/CommunityProfiles/edit.ctp:28
-#: Template/ElopageBuys/add.ctp:31
-#: Template/ElopageBuys/edit.ctp:37
-#: Template/OperatorTypes/add.ctp:24
-#: Template/OperatorTypes/edit.ctp:30
-#: Template/Operators/add.ctp:24
-#: Template/Operators/edit.ctp:30
-#: Template/Roles/add.ctp:21
-#: Template/Roles/edit.ctp:27
-#: Template/ServerUsers/add.ctp:24
-#: Template/ServerUsers/edit.ctp:32
-#: Template/StateBalances/add.ctp:25
-#: Template/StateBalances/edit.ctp:31
-#: Template/StateCreated/add.ctp:29
-#: Template/StateCreated/edit.ctp:35
-#: Template/StateErrors/add.ctp:27
-#: Template/StateErrors/edit.ctp:33
-#: Template/StateGroupAddresses/add.ctp:26
-#: Template/StateGroupAddresses/edit.ctp:32
-#: Template/StateGroupRelationships/add.ctp:23
-#: Template/StateGroupRelationships/edit.ctp:29
-#: Template/StateGroups/add.ctp:30
-#: Template/StateGroups/edit.ctp:36
-#: Template/StateRelationshipTypes/add.ctp:22
-#: Template/StateRelationshipTypes/edit.ctp:28
-#: Template/StateUserTransactions/add.ctp:29
-#: Template/StateUserTransactions/edit.ctp:35
-#: Template/StateUsers/add.ctp:32
-#: Template/StateUsers/edit.ctp:37
-#: Template/TransactionCreations/add.ctp:27
-#: Template/TransactionCreations/edit.ctp:33
-#: Template/TransactionGroupAddaddress/add.ctp:26
-#: Template/TransactionGroupAddaddress/edit.ctp:32
-#: Template/TransactionGroupAllowtrades/add.ctp:25
-#: Template/TransactionGroupAllowtrades/edit.ctp:31
-#: Template/TransactionGroupCreates/add.ctp:27
-#: Template/TransactionGroupCreates/edit.ctp:33
-#: Template/TransactionSendCoins/add.ctp:28
-#: Template/TransactionSendCoins/edit.ctp:34
-#: Template/TransactionSignatures/add.ctp:23
-#: Template/TransactionSignatures/edit.ctp:29
-#: Template/TransactionTypes/add.ctp:24
-#: Template/TransactionTypes/edit.ctp:30
-#: Template/Transactions/add.ctp:42
-#: Template/Transactions/edit.ctp:47
-#: Template/Users/add.ctp:26
-#: Template/Users/edit.ctp:32
-msgid "Submit"
-msgstr ""
-
-#: Template/AddressTypes/edit.ctp:11
-#: Template/AddressTypes/index.ctp:37
-#: Template/AddressTypes/view.ctp:56
-#: Template/AddressTypes/view.ctp:85
-#: Template/AdminErrors/edit.ctp:11
-#: Template/AdminErrors/index.ctp:43
-#: Template/BlockchainTypes/edit.ctp:11
-#: Template/BlockchainTypes/index.ctp:35
-#: Template/CommunityProfiles/edit.ctp:11
-#: Template/CommunityProfiles/index.ctp:33
-#: Template/ElopageBuys/edit.ctp:11
-#: Template/ElopageBuys/index.ctp:51
-#: Template/OperatorTypes/edit.ctp:11
-#: Template/OperatorTypes/index.ctp:35
-#: Template/OperatorTypes/view.ctp:54
-#: Template/Operators/edit.ctp:11
-#: Template/Operators/index.ctp:40
-#: Template/Roles/edit.ctp:11
-#: Template/Roles/index.ctp:31
-#: Template/ServerUsers/edit.ctp:11
-#: Template/ServerUsers/index.ctp:43
-#: Template/StateBalances/edit.ctp:11
-#: Template/StateBalances/index.ctp:38
-#: Template/StateCreated/edit.ctp:11
-#: Template/StateCreated/index.ctp:45
-#: Template/StateErrors/edit.ctp:11
-#: Template/StateErrors/index.ctp:39
-#: Template/StateErrors/show_for_user.ctp:44
-#: Template/StateGroupAddresses/edit.ctp:11
-#: Template/StateGroupAddresses/index.ctp:39
-#: Template/StateGroupRelationships/edit.ctp:11
-#: Template/StateGroupRelationships/index.ctp:35
-#: Template/StateGroups/edit.ctp:11
-#: Template/StateGroups/index.ctp:41
-#: Template/StateGroups/view.ctp:60
-#: Template/StateGroups/view.ctp:87
-#: Template/StateGroups/view.ctp:116
-#: Template/StateGroups/view.ctp:145
-#: Template/StateRelationshipTypes/edit.ctp:11
-#: Template/StateRelationshipTypes/index.ctp:33
-#: Template/StateUserRoles/index.ctp:53
-#: Template/StateUserTransactions/edit.ctp:11
-#: Template/StateUserTransactions/index.ctp:41
-#: Template/StateUsers/edit.ctp:11
-#: Template/StateUsers/index.ctp:53
-#: Template/TransactionCreations/edit.ctp:11
-#: Template/TransactionGroupAddaddress/edit.ctp:11
-#: Template/TransactionGroupAddaddress/index.ctp:39
-#: Template/TransactionGroupAllowtrades/edit.ctp:11
-#: Template/TransactionGroupAllowtrades/index.ctp:37
-#: Template/TransactionGroupCreates/edit.ctp:11
-#: Template/TransactionGroupCreates/index.ctp:39
-#: Template/TransactionSendCoins/edit.ctp:11
-#: Template/TransactionSignatures/edit.ctp:11
-#: Template/TransactionSignatures/index.ctp:33
-#: Template/TransactionTypes/edit.ctp:11
-#: Template/TransactionTypes/index.ctp:35
-#: Template/TransactionTypes/view.ctp:56
-#: Template/Transactions/edit.ctp:11
-#: Template/Transactions/view.ctp:80
-#: Template/Transactions/view.ctp:109
-#: Template/Transactions/view.ctp:136
-#: Template/Transactions/view.ctp:163
-#: Template/Transactions/view.ctp:192
-#: Template/Transactions/view.ctp:225
-#: Template/Transactions/view.ctp:252
-#: Template/Users/edit.ctp:11
-#: Template/Users/index.ctp:43
-msgid "Delete"
-msgstr ""
-
-#: Template/AddressTypes/edit.ctp:13
-#: Template/AddressTypes/index.ctp:37
-#: Template/AddressTypes/view.ctp:11
-#: Template/AddressTypes/view.ctp:56
-#: Template/AddressTypes/view.ctp:85
-#: Template/AdminErrors/edit.ctp:13
-#: Template/AdminErrors/index.ctp:43
-#: Template/AdminErrors/view.ctp:11
-#: Template/BlockchainTypes/edit.ctp:13
-#: Template/BlockchainTypes/index.ctp:35
-#: Template/BlockchainTypes/view.ctp:11
-#: Template/CommunityProfiles/edit.ctp:13
-#: Template/CommunityProfiles/index.ctp:33
-#: Template/CommunityProfiles/view.ctp:11
-#: Template/ElopageBuys/edit.ctp:13
-#: Template/ElopageBuys/index.ctp:51
-#: Template/ElopageBuys/view.ctp:11
-#: Template/OperatorTypes/edit.ctp:13
-#: Template/OperatorTypes/index.ctp:35
-#: Template/OperatorTypes/view.ctp:11
-#: Template/OperatorTypes/view.ctp:54
-#: Template/Operators/edit.ctp:13
-#: Template/Operators/index.ctp:40
-#: Template/Operators/view.ctp:11
-#: Template/Roles/edit.ctp:13
-#: Template/Roles/index.ctp:31
-#: Template/Roles/view.ctp:11
-#: Template/ServerUsers/edit.ctp:13
-#: Template/ServerUsers/index.ctp:43
-#: Template/ServerUsers/view.ctp:11
-#: Template/StateBalances/edit.ctp:13
-#: Template/StateBalances/index.ctp:38
-#: Template/StateBalances/view.ctp:11
-#: Template/StateCreated/edit.ctp:13
-#: Template/StateCreated/index.ctp:45
-#: Template/StateCreated/view.ctp:11
-#: Template/StateErrors/edit.ctp:13
-#: Template/StateErrors/index.ctp:39
-#: Template/StateErrors/view.ctp:11
-#: Template/StateGroupAddresses/edit.ctp:13
-#: Template/StateGroupAddresses/index.ctp:39
-#: Template/StateGroupAddresses/view.ctp:11
-#: Template/StateGroupRelationships/edit.ctp:13
-#: Template/StateGroupRelationships/index.ctp:35
-#: Template/StateGroupRelationships/view.ctp:11
-#: Template/StateGroups/edit.ctp:13
-#: Template/StateGroups/index.ctp:41
-#: Template/StateGroups/view.ctp:11
-#: Template/StateGroups/view.ctp:60
-#: Template/StateGroups/view.ctp:87
-#: Template/StateGroups/view.ctp:116
-#: Template/StateGroups/view.ctp:145
-#: Template/StateRelationshipTypes/edit.ctp:13
-#: Template/StateRelationshipTypes/index.ctp:33
-#: Template/StateRelationshipTypes/view.ctp:11
-#: Template/StateUserRoles/index.ctp:53
-#: Template/StateUserTransactions/edit.ctp:13
-#: Template/StateUserTransactions/index.ctp:41
-#: Template/StateUserTransactions/view.ctp:11
-#: Template/StateUsers/edit.ctp:13
-#: Template/StateUsers/index.ctp:53
-#: Template/StateUsers/view.ctp:11
-#: Template/TransactionCreations/edit.ctp:13
-#: Template/TransactionCreations/view.ctp:11
-#: Template/TransactionGroupAddaddress/edit.ctp:13
-#: Template/TransactionGroupAddaddress/index.ctp:39
-#: Template/TransactionGroupAddaddress/view.ctp:11
-#: Template/TransactionGroupAllowtrades/edit.ctp:13
-#: Template/TransactionGroupAllowtrades/index.ctp:37
-#: Template/TransactionGroupAllowtrades/view.ctp:11
-#: Template/TransactionGroupCreates/edit.ctp:13
-#: Template/TransactionGroupCreates/index.ctp:39
-#: Template/TransactionGroupCreates/view.ctp:11
-#: Template/TransactionSendCoins/edit.ctp:13
-#: Template/TransactionSendCoins/view.ctp:11
-#: Template/TransactionSignatures/edit.ctp:13
-#: Template/TransactionSignatures/index.ctp:33
-#: Template/TransactionSignatures/view.ctp:11
-#: Template/TransactionTypes/edit.ctp:13
-#: Template/TransactionTypes/index.ctp:35
-#: Template/TransactionTypes/view.ctp:11
-#: Template/TransactionTypes/view.ctp:56
-#: Template/Transactions/edit.ctp:13
-#: Template/Transactions/view.ctp:11
-#: Template/Transactions/view.ctp:80
-#: Template/Transactions/view.ctp:109
-#: Template/Transactions/view.ctp:136
-#: Template/Transactions/view.ctp:163
-#: Template/Transactions/view.ctp:192
-#: Template/Transactions/view.ctp:225
-#: Template/Transactions/view.ctp:252
-#: Template/Users/edit.ctp:13
-#: Template/Users/index.ctp:43
-#: Template/Users/view.ctp:11
-msgid "Are you sure you want to delete # {0}?"
-msgstr ""
-
-#: Template/AddressTypes/edit.ctp:26
-#: Template/AddressTypes/view.ctp:10
-msgid "Edit Address Type"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:10
-#: Template/AddressTypes/view.ctp:13
-#: Template/StateGroupAddresses/add.ctp:14
-#: Template/StateGroupAddresses/edit.ctp:20
-#: Template/StateGroupAddresses/index.ctp:14
-#: Template/StateGroupAddresses/view.ctp:17
-#: Template/TransactionGroupAddaddress/add.ctp:14
-#: Template/TransactionGroupAddaddress/edit.ctp:20
-#: Template/TransactionGroupAddaddress/index.ctp:14
-#: Template/TransactionGroupAddaddress/view.ctp:17
-msgid "New Address Type"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:18
-msgid "Address Types"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:35
-#: Template/AddressTypes/view.ctp:54
-#: Template/AddressTypes/view.ctp:83
-#: Template/AdminErrors/index.ctp:39
-#: Template/BlockchainTypes/index.ctp:33
-#: Template/CommunityProfiles/index.ctp:31
-#: Template/ElopageBuys/index.ctp:49
-#: Template/OperatorTypes/index.ctp:33
-#: Template/OperatorTypes/view.ctp:52
-#: Template/Operators/index.ctp:38
-#: Template/Roles/index.ctp:29
-#: Template/ServerUsers/index.ctp:41
-#: Template/StateBalances/index.ctp:36
-#: Template/StateCreated/index.ctp:43
-#: Template/StateErrors/index.ctp:37
-#: Template/StateGroupAddresses/index.ctp:37
-#: Template/StateGroupRelationships/index.ctp:33
-#: Template/StateGroups/index.ctp:39
-#: Template/StateGroups/view.ctp:58
-#: Template/StateGroups/view.ctp:85
-#: Template/StateGroups/view.ctp:114
-#: Template/StateGroups/view.ctp:143
-#: Template/StateRelationshipTypes/index.ctp:31
-#: Template/StateUserRoles/index.ctp:51
-#: Template/StateUserTransactions/index.ctp:39
-#: Template/StateUsers/index.ctp:51
-#: Template/StateUsers/view.ctp:41
-#: Template/StateUsers/view.ctp:71
-#: Template/StateUsers/view.ctp:104
-#: Template/StateUsers/view.ctp:136
-#: Template/TransactionCreations/index.ctp:42
-#: Template/TransactionGroupAddaddress/index.ctp:37
-#: Template/TransactionGroupAllowtrades/index.ctp:35
-#: Template/TransactionGroupCreates/index.ctp:37
-#: Template/TransactionSendCoins/index.ctp:41
-#: Template/TransactionSignatures/index.ctp:31
-#: Template/TransactionTypes/index.ctp:33
-#: Template/TransactionTypes/view.ctp:54
-#: Template/Transactions/view.ctp:78
-#: Template/Transactions/view.ctp:107
-#: Template/Transactions/view.ctp:134
-#: Template/Transactions/view.ctp:161
-#: Template/Transactions/view.ctp:190
-#: Template/Transactions/view.ctp:223
-#: Template/Transactions/view.ctp:250
-#: Template/Users/index.ctp:41
-msgid "View"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:36
-#: Template/AddressTypes/view.ctp:55
-#: Template/AddressTypes/view.ctp:84
-#: Template/AdminErrors/index.ctp:41
-#: Template/BlockchainTypes/index.ctp:34
-#: Template/CommunityProfiles/index.ctp:32
-#: Template/ElopageBuys/index.ctp:50
-#: Template/OperatorTypes/index.ctp:34
-#: Template/OperatorTypes/view.ctp:53
-#: Template/Operators/index.ctp:39
-#: Template/Roles/index.ctp:30
-#: Template/ServerUsers/index.ctp:42
-#: Template/StateBalances/index.ctp:37
-#: Template/StateCreated/index.ctp:44
-#: Template/StateErrors/index.ctp:38
-#: Template/StateGroupAddresses/index.ctp:38
-#: Template/StateGroupRelationships/index.ctp:34
-#: Template/StateGroups/index.ctp:40
-#: Template/StateGroups/view.ctp:59
-#: Template/StateGroups/view.ctp:86
-#: Template/StateGroups/view.ctp:115
-#: Template/StateGroups/view.ctp:144
-#: Template/StateRelationshipTypes/index.ctp:32
-#: Template/StateUserRoles/index.ctp:52
-#: Template/StateUserTransactions/index.ctp:40
-#: Template/StateUsers/index.ctp:52
-#: Template/TransactionGroupAddaddress/index.ctp:38
-#: Template/TransactionGroupAllowtrades/index.ctp:36
-#: Template/TransactionGroupCreates/index.ctp:38
-#: Template/TransactionSignatures/index.ctp:32
-#: Template/TransactionTypes/index.ctp:34
-#: Template/TransactionTypes/view.ctp:55
-#: Template/Transactions/view.ctp:79
-#: Template/Transactions/view.ctp:108
-#: Template/Transactions/view.ctp:135
-#: Template/Transactions/view.ctp:162
-#: Template/Transactions/view.ctp:191
-#: Template/Transactions/view.ctp:224
-#: Template/Transactions/view.ctp:251
-#: Template/Users/index.ctp:42
-msgid "Edit"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:45
-#: Template/AdminErrors/index.ctp:50
-#: Template/BlockchainTypes/index.ctp:43
-#: Template/CommunityProfiles/index.ctp:41
-#: Template/ElopageBuys/index.ctp:59
-#: Template/OperatorTypes/index.ctp:43
-#: Template/Operators/index.ctp:48
-#: Template/Roles/index.ctp:39
-#: Template/ServerUsers/index.ctp:51
-#: Template/StateBalances/index.ctp:46
-#: Template/StateCreated/index.ctp:53
-#: Template/StateErrors/index.ctp:47
-#: Template/StateGroupAddresses/index.ctp:47
-#: Template/StateGroupRelationships/index.ctp:43
-#: Template/StateGroups/index.ctp:49
-#: Template/StateRelationshipTypes/index.ctp:41
-#: Template/StateUserRoles/index.ctp:61
-#: Template/StateUserTransactions/index.ctp:49
-#: Template/StateUsers/index.ctp:61
-#: Template/TransactionCreations/index.ctp:50
-#: Template/TransactionGroupAddaddress/index.ctp:47
-#: Template/TransactionGroupAllowtrades/index.ctp:45
-#: Template/TransactionGroupCreates/index.ctp:47
-#: Template/TransactionSendCoins/index.ctp:49
-#: Template/TransactionSignatures/index.ctp:41
-#: Template/TransactionTypes/index.ctp:43
-#: Template/Transactions/index.ctp:50
-#: Template/Users/index.ctp:51
-msgid "first"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:46
-#: Template/AdminErrors/index.ctp:51
-#: Template/BlockchainTypes/index.ctp:44
-#: Template/CommunityProfiles/index.ctp:42
-#: Template/ElopageBuys/index.ctp:60
-#: Template/OperatorTypes/index.ctp:44
-#: Template/Operators/index.ctp:49
-#: Template/Roles/index.ctp:40
-#: Template/ServerUsers/index.ctp:52
-#: Template/StateBalances/index.ctp:47
-#: Template/StateCreated/index.ctp:54
-#: Template/StateErrors/index.ctp:48
-#: Template/StateGroupAddresses/index.ctp:48
-#: Template/StateGroupRelationships/index.ctp:44
-#: Template/StateGroups/index.ctp:50
-#: Template/StateRelationshipTypes/index.ctp:42
-#: Template/StateUserRoles/index.ctp:62
-#: Template/StateUserTransactions/index.ctp:50
-#: Template/StateUsers/index.ctp:62
-#: Template/TransactionCreations/index.ctp:51
-#: Template/TransactionGroupAddaddress/index.ctp:48
-#: Template/TransactionGroupAllowtrades/index.ctp:46
-#: Template/TransactionGroupCreates/index.ctp:48
-#: Template/TransactionSendCoins/index.ctp:50
-#: Template/TransactionSignatures/index.ctp:42
-#: Template/TransactionTypes/index.ctp:44
-#: Template/Transactions/index.ctp:51
-#: Template/Users/index.ctp:52
-msgid "previous"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:48
-#: Template/AdminErrors/index.ctp:53
-#: Template/BlockchainTypes/index.ctp:46
-#: Template/CommunityProfiles/index.ctp:44
-#: Template/ElopageBuys/index.ctp:62
-#: Template/OperatorTypes/index.ctp:46
-#: Template/Operators/index.ctp:51
-#: Template/Roles/index.ctp:42
-#: Template/ServerUsers/index.ctp:54
-#: Template/StateBalances/index.ctp:49
-#: Template/StateCreated/index.ctp:56
-#: Template/StateErrors/index.ctp:50
-#: Template/StateGroupAddresses/index.ctp:50
-#: Template/StateGroupRelationships/index.ctp:46
-#: Template/StateGroups/index.ctp:52
-#: Template/StateRelationshipTypes/index.ctp:44
-#: Template/StateUserRoles/index.ctp:64
-#: Template/StateUserTransactions/index.ctp:52
-#: Template/StateUsers/index.ctp:64
-#: Template/TransactionCreations/index.ctp:53
-#: Template/TransactionGroupAddaddress/index.ctp:50
-#: Template/TransactionGroupAllowtrades/index.ctp:48
-#: Template/TransactionGroupCreates/index.ctp:50
-#: Template/TransactionSendCoins/index.ctp:52
-#: Template/TransactionSignatures/index.ctp:44
-#: Template/TransactionTypes/index.ctp:46
-#: Template/Transactions/index.ctp:53
-#: Template/Users/index.ctp:54
-msgid "next"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:49
-#: Template/AdminErrors/index.ctp:54
-#: Template/BlockchainTypes/index.ctp:47
-#: Template/CommunityProfiles/index.ctp:45
-#: Template/ElopageBuys/index.ctp:63
-#: Template/OperatorTypes/index.ctp:47
-#: Template/Operators/index.ctp:52
-#: Template/Roles/index.ctp:43
-#: Template/ServerUsers/index.ctp:55
-#: Template/StateBalances/index.ctp:50
-#: Template/StateCreated/index.ctp:57
-#: Template/StateErrors/index.ctp:51
-#: Template/StateGroupAddresses/index.ctp:51
-#: Template/StateGroupRelationships/index.ctp:47
-#: Template/StateGroups/index.ctp:53
-#: Template/StateRelationshipTypes/index.ctp:45
-#: Template/StateUserRoles/index.ctp:65
-#: Template/StateUserTransactions/index.ctp:53
-#: Template/StateUsers/index.ctp:65
-#: Template/TransactionCreations/index.ctp:54
-#: Template/TransactionGroupAddaddress/index.ctp:51
-#: Template/TransactionGroupAllowtrades/index.ctp:49
-#: Template/TransactionGroupCreates/index.ctp:51
-#: Template/TransactionSendCoins/index.ctp:53
-#: Template/TransactionSignatures/index.ctp:45
-#: Template/TransactionTypes/index.ctp:47
-#: Template/Transactions/index.ctp:54
-#: Template/Users/index.ctp:55
-msgid "last"
-msgstr ""
-
-#: Template/AddressTypes/index.ctp:51
-#: Template/AdminErrors/index.ctp:56
-#: Template/BlockchainTypes/index.ctp:49
-#: Template/CommunityProfiles/index.ctp:47
-#: Template/ElopageBuys/index.ctp:65
-#: Template/OperatorTypes/index.ctp:49
-#: Template/Operators/index.ctp:54
-#: Template/Roles/index.ctp:45
-#: Template/ServerUsers/index.ctp:57
-#: Template/StateBalances/index.ctp:52
-#: Template/StateCreated/index.ctp:59
-#: Template/StateErrors/index.ctp:53
-#: Template/StateGroupAddresses/index.ctp:53
-#: Template/StateGroupRelationships/index.ctp:49
-#: Template/StateGroups/index.ctp:55
-#: Template/StateRelationshipTypes/index.ctp:47
-#: Template/StateUserRoles/index.ctp:67
-#: Template/StateUserTransactions/index.ctp:55
-#: Template/StateUsers/index.ctp:67
-#: Template/TransactionCreations/index.ctp:56
-#: Template/TransactionGroupAddaddress/index.ctp:53
-#: Template/TransactionGroupAllowtrades/index.ctp:51
-#: Template/TransactionGroupCreates/index.ctp:53
-#: Template/TransactionSendCoins/index.ctp:55
-#: Template/TransactionSignatures/index.ctp:47
-#: Template/TransactionTypes/index.ctp:49
-#: Template/Transactions/index.ctp:56
-#: Template/Users/index.ctp:57
-msgid "Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:11
-msgid "Delete Address Type"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:24
-#: Template/BlockchainTypes/view.ctp:20
-#: Template/OperatorTypes/view.ctp:22
-#: Template/StateGroups/view.ctp:28
-#: Template/StateGroups/view.ctp:103
-#: Template/StateRelationshipTypes/view.ctp:20
-#: Template/TransactionGroupCreates/view.ctp:32
-#: Template/TransactionTypes/view.ctp:22
-#: Template/Transactions/view.ctp:179
-#: Template/Users/statistics.ctp:64
-msgid "Name"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:28
-#: Template/BlockchainTypes/view.ctp:24
-#: Template/OperatorTypes/view.ctp:26
-#: Template/StateRelationshipTypes/view.ctp:24
-#: Template/TransactionTypes/view.ctp:26
-msgid "Text"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:32
-#: Template/AddressTypes/view.ctp:41
-#: Template/AddressTypes/view.ctp:68
-#: Template/AdminErrors/view.ctp:46
-#: Template/BlockchainTypes/view.ctp:32
-#: Template/CommunityProfiles/view.ctp:24
-#: Template/ElopageBuys/view.ctp:32
-#: Template/OperatorTypes/view.ctp:30
-#: Template/OperatorTypes/view.ctp:39
-#: Template/Operators/view.ctp:32
-#: Template/Roles/view.ctp:24
-#: Template/ServerUsers/view.ctp:36
-#: Template/StateBalances/view.ctp:27
-#: Template/StateCreated/view.ctp:32
-#: Template/StateErrors/view.ctp:32
-#: Template/StateGroupAddresses/view.ctp:28
-#: Template/StateGroupRelationships/view.ctp:20
-#: Template/StateGroups/view.ctp:32
-#: Template/StateGroups/view.ctp:45
-#: Template/StateGroups/view.ctp:72
-#: Template/StateGroups/view.ctp:99
-#: Template/StateGroups/view.ctp:128
-#: Template/StateRelationshipTypes/view.ctp:28
-#: Template/StateUserTransactions/view.ctp:38
-#: Template/TransactionCreations/view.ctp:32
-#: Template/TransactionGroupAddaddress/view.ctp:32
-#: Template/TransactionGroupAllowtrades/view.ctp:26
-#: Template/TransactionGroupCreates/view.ctp:36
-#: Template/TransactionSendCoins/view.ctp:32
-#: Template/TransactionSignatures/view.ctp:26
-#: Template/TransactionTypes/view.ctp:30
-#: Template/TransactionTypes/view.ctp:39
-#: Template/Transactions/view.ctp:46
-#: Template/Transactions/view.ctp:59
-#: Template/Transactions/view.ctp:92
-#: Template/Transactions/view.ctp:121
-#: Template/Transactions/view.ctp:148
-#: Template/Transactions/view.ctp:175
-#: Template/Transactions/view.ctp:204
-#: Template/Transactions/view.ctp:237
-#: Template/Users/view.ctp:36
-msgid "Id"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:37
-#: Template/StateGroups/view.ctp:41
-msgid "Related State Group Addresses"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:42
-#: Template/StateGroupAddresses/view.ctp:32
-#: Template/TransactionGroupAllowtrades/view.ctp:30
-#: Template/Transactions/view.ctp:150
-msgid "Group Id"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:43
-#: Template/AddressTypes/view.ctp:72
-#: Template/StateGroups/view.ctp:47
-#: Template/StateGroups/view.ctp:75
-#: Template/Transactions/view.ctp:124
-msgid "Public Key"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:44
-#: Template/AddressTypes/view.ctp:70
-#: Template/StateGroups/view.ctp:48
-#: Template/Transactions/view.ctp:123
-msgid "Address Type Id"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:64
-#: Template/Transactions/view.ctp:117
-msgid "Related Transaction Group Addaddress"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:69
-#: Template/StateGroups/view.ctp:100
-#: Template/Transactions/view.ctp:60
-#: Template/Transactions/view.ctp:93
-#: Template/Transactions/view.ctp:122
-#: Template/Transactions/view.ctp:149
-#: Template/Transactions/view.ctp:176
-#: Template/Transactions/view.ctp:205
-#: Template/Transactions/view.ctp:238
-msgid "Transaction Id"
-msgstr ""
-
-#: Template/AddressTypes/view.ctp:71
-msgid "Remove From Group"
-msgstr ""
-
-#: Template/AdminErrors/add.ctp:10
-#: Template/AdminErrors/edit.ctp:16
-#: Template/AdminErrors/view.ctp:12
-msgid "List Admin Errors"
-msgstr ""
-
-#: Template/AdminErrors/add.ctp:11
-#: Template/AdminErrors/edit.ctp:17
-#: Template/AdminErrors/index.ctp:11
-#: Template/AdminErrors/view.ctp:14
-#: Template/StateBalances/add.ctp:11
-#: Template/StateBalances/edit.ctp:17
-#: Template/StateBalances/index.ctp:11
-#: Template/StateBalances/view.ctp:14
-#: Template/StateCreated/add.ctp:13
-#: Template/StateCreated/edit.ctp:19
-#: Template/StateCreated/index.ctp:13
-#: Template/StateCreated/view.ctp:16
-#: Template/StateErrors/add.ctp:11
-#: Template/StateErrors/edit.ctp:17
-#: Template/StateErrors/index.ctp:11
-#: Template/StateErrors/view.ctp:14
-#: Template/StateGroups/add.ctp:13
-#: Template/StateGroups/edit.ctp:19
-#: Template/StateGroups/index.ctp:13
-#: Template/StateGroups/view.ctp:16
-#: Template/StateUserTransactions/add.ctp:11
-#: Template/StateUserTransactions/edit.ctp:17
-#: Template/StateUserTransactions/index.ctp:11
-#: Template/StateUserTransactions/view.ctp:14
-#: Template/StateUsers/add.ctp:10
-#: Template/StateUsers/edit.ctp:16
-#: Template/StateUsers/view.ctp:12
-#: Template/TransactionCreations/add.ctp:13
-#: Template/TransactionCreations/edit.ctp:19
-#: Template/TransactionCreations/index.ctp:13
-#: Template/TransactionCreations/view.ctp:16
-#: Template/TransactionSendCoins/add.ctp:13
-#: Template/TransactionSendCoins/edit.ctp:19
-#: Template/TransactionSendCoins/index.ctp:13
-#: Template/TransactionSendCoins/view.ctp:16
-msgid "List State Users"
-msgstr ""
-
-#: Template/AdminErrors/add.ctp:12
-#: Template/AdminErrors/edit.ctp:18
-#: Template/AdminErrors/index.ctp:12
-#: Template/AdminErrors/view.ctp:15
-#: Template/StateBalances/add.ctp:12
-#: Template/StateBalances/edit.ctp:18
-#: Template/StateBalances/index.ctp:12
-#: Template/StateBalances/view.ctp:15
-#: Template/StateCreated/add.ctp:14
-#: Template/StateCreated/edit.ctp:20
-#: Template/StateCreated/index.ctp:14
-#: Template/StateCreated/view.ctp:17
-#: Template/StateErrors/add.ctp:12
-#: Template/StateErrors/edit.ctp:18
-#: Template/StateErrors/index.ctp:12
-#: Template/StateErrors/view.ctp:15
-#: Template/StateGroups/add.ctp:14
-#: Template/StateGroups/edit.ctp:20
-#: Template/StateGroups/index.ctp:14
-#: Template/StateGroups/view.ctp:17
-#: Template/StateUserRoles/index.ctp:10
-#: Template/StateUserTransactions/add.ctp:12
-#: Template/StateUserTransactions/edit.ctp:18
-#: Template/StateUserTransactions/index.ctp:12
-#: Template/StateUserTransactions/view.ctp:15
-#: Template/StateUsers/index.ctp:10
-#: Template/StateUsers/view.ctp:13
-#: Template/TransactionCreations/add.ctp:14
-#: Template/TransactionCreations/edit.ctp:20
-#: Template/TransactionCreations/index.ctp:14
-#: Template/TransactionCreations/view.ctp:17
-#: Template/TransactionSendCoins/add.ctp:14
-#: Template/TransactionSendCoins/edit.ctp:20
-#: Template/TransactionSendCoins/index.ctp:14
-#: Template/TransactionSendCoins/view.ctp:17
-msgid "New State User"
-msgstr ""
-
-#: Template/AdminErrors/add.ctp:18
-msgid "Add Admin Error"
-msgstr ""
-
-#: Template/AdminErrors/edit.ctp:24
-#: Template/AdminErrors/view.ctp:10
-msgid "Edit Admin Error"
-msgstr ""
-
-#: Template/AdminErrors/index.ctp:10
-#: Template/AdminErrors/view.ctp:13
-msgid "New Admin Error"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:11
-msgid "Delete Admin Error"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:22
-#: Template/StateBalances/view.ctp:23
-#: Template/StateCreated/view.ctp:28
-#: Template/StateErrors/view.ctp:24
-#: Template/StateUserTransactions/view.ctp:26
-#: Template/TransactionCreations/view.ctp:28
-#: Template/TransactionSendCoins/view.ctp:28
-msgid "State User"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:26
-msgid "Controller"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:30
-msgid "Action"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:34
-msgid "State"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:38
-msgid "Msg"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:42
-msgid "Details"
-msgstr ""
-
-#: Template/AdminErrors/view.ctp:50
-#: Template/ServerUsers/view.ctp:44
-#: Template/StateCreated/view.ctp:48
-#: Template/StateErrors/view.ctp:36
-#: Template/Transactions/view.ctp:64
-#: Template/Users/view.ctp:44
-msgid "Created"
-msgstr ""
-
-#: Template/BlockchainTypes/add.ctp:10
-#: Template/BlockchainTypes/edit.ctp:16
-#: Template/BlockchainTypes/view.ctp:12
-msgid "List Blockchain Types"
-msgstr ""
-
-#: Template/BlockchainTypes/add.ctp:16
-msgid "Add Blockchain Type"
-msgstr ""
-
-#: Template/BlockchainTypes/edit.ctp:22
-#: Template/BlockchainTypes/view.ctp:10
-msgid "Edit Blockchain Type"
-msgstr ""
-
-#: Template/BlockchainTypes/index.ctp:10
-#: Template/BlockchainTypes/view.ctp:13
-msgid "New Blockchain Type"
-msgstr ""
-
-#: Template/BlockchainTypes/index.ctp:14
-msgid "Blockchain Types"
-msgstr ""
-
-#: Template/BlockchainTypes/view.ctp:11
-msgid "Delete Blockchain Type"
-msgstr ""
-
-#: Template/BlockchainTypes/view.ctp:28
-msgid "Symbol"
-msgstr ""
-
-#: Template/CommunityProfiles/add.ctp:10
-#: Template/CommunityProfiles/edit.ctp:16
-#: Template/CommunityProfiles/view.ctp:12
-msgid "List Community Profiles"
-msgstr ""
-
-#: Template/CommunityProfiles/add.ctp:16
-msgid "Add Community Profile"
-msgstr ""
-
-#: Template/CommunityProfiles/edit.ctp:22
-#: Template/CommunityProfiles/view.ctp:10
-msgid "Edit Community Profile"
-msgstr ""
-
-#: Template/CommunityProfiles/index.ctp:10
-#: Template/CommunityProfiles/view.ctp:13
-msgid "New Community Profile"
-msgstr ""
-
-#: Template/CommunityProfiles/index.ctp:14
-msgid "Community Profiles"
-msgstr ""
-
-#: Template/CommunityProfiles/view.ctp:11
-msgid "Delete Community Profile"
-msgstr ""
-
-#: Template/CommunityProfiles/view.ctp:20
-msgid "Profile Desc"
-msgstr ""
-
-#: Template/CommunityProfiles/view.ctp:28
-#: Template/Transactions/view.ctp:63
-#: Template/Transactions/view.ctp:94
-#: Template/Transactions/view.ctp:206
-msgid "State User Id"
-msgstr ""
-
-#: Template/Dashboard/error_http_request.ctp:9
-msgid "Error, Please try again"
-msgstr ""
-
-#: Template/Dashboard/error_http_request.ctp:13
-#: Template/Layout/error.ctp:43
-msgid "Back"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:14
-#: Template/Dashboard/index.ctp:18
-#: Template/Dashboard/server_index.ctp:9
-msgid "Willkommen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:47
-msgid "löschen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:51
-msgid "Adminbereich"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:57
-#: Template/Dashboard/server_index.ctp:21
-msgid "viele schöpfen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:70
-msgid "Anmeldungen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:94
-msgid "suchen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:102
-msgid "hinzufügen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:108
-msgid "hat sein Passwort und Passphrase vergessen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:119
-msgid "Gruppen"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:125
-msgid "Server"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:131
-msgid "Topics"
-msgstr ""
-
-#: Template/Dashboard/index.ctp:139
-msgid "Hedera Accounts"
-msgstr ""
-
-#: Template/Element/navi.ctp:35
-msgid "Mitgliederbereich"
-msgstr ""
-
-#: Template/Element/navi_header.ctp:38
-#: Template/Element/navi_notify.ctp:35
-msgid "Transaktionen sind noch zu unterzeichnen"
-msgstr ""
-
-#: Template/Element/user_menu.ctp:22
-msgid "Abmelden"
-msgstr ""
-
-#: Template/Element/Flash/success.ctp:9
-msgid "Info:"
-msgstr ""
-
-#: Template/ElopageBuys/add.ctp:10
-#: Template/ElopageBuys/edit.ctp:16
-#: Template/ElopageBuys/view.ctp:12
-msgid "List Elopage Buys"
-msgstr ""
-
-#: Template/ElopageBuys/add.ctp:16
-msgid "Add Elopage Buy"
-msgstr ""
-
-#: Template/ElopageBuys/edit.ctp:22
-#: Template/ElopageBuys/view.ctp:10
-msgid "Edit Elopage Buy"
-msgstr ""
-
-#: Template/ElopageBuys/index.ctp:10
-#: Template/ElopageBuys/view.ctp:13
-msgid "New Elopage Buy"
-msgstr ""
-
-#: Template/ElopageBuys/index.ctp:14
-msgid "Elopage Buys"
-msgstr ""
-
-#: Template/ElopageBuys/statistics.ctp:28
-#: Template/Users/statistics.ctp:49
-msgid "Anmeldungen diesen Monat"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:11
-msgid "Delete Elopage Buy"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:20
-msgid "Payer Email"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:24
-msgid "Publisher Email"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:28
-msgid "Event"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:36
-msgid "Elopage User Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:40
-msgid "Affiliate Program Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:44
-msgid "Publisher Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:48
-msgid "Order Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:52
-msgid "Product Id"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:56
-msgid "Product Price"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:60
-msgid "Success Date"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:64
-msgid "Payed"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:65
-#: Template/ServerUsers/view.ctp:53
-#: Template/TransactionGroupAllowtrades/view.ctp:35
-#: Template/Users/view.ctp:49
-msgid "Yes"
-msgstr ""
-
-#: Template/ElopageBuys/view.ctp:65
-#: Template/ServerUsers/view.ctp:53
-#: Template/TransactionGroupAllowtrades/view.ctp:35
-#: Template/Users/view.ctp:49
-msgid "No"
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:8
-msgid "Gradido Schöpfung"
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:9
-#: Template/Email/text/notification_transaction_failed.ctp:14
-#: Template/Email/text/notification_transfer.ctp:12
-msgid "Hallo"
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:11
-msgid "für dich wurden soeben {0} geschöpft."
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:16
-#: Template/Email/text/notification_transaction_failed.ctp:46
-#: Template/Email/text/notification_transfer.ctp:19
-msgid "Bitte antworte nicht auf diese E-Mail!"
-msgstr ""
-
-#: Template/Email/text/notification_creation.ctp:18
-#: Template/Email/text/notification_transaction_failed.ctp:49
-#: Template/Email/text/notification_transfer.ctp:25
-msgid "Mit freundlichen Grüßen"
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:8
-msgid "Gradido Transaktion fehlgeschlagen"
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:16
-msgid "Deine letzte Transaktion ist leider fehlgeschlagen."
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:20
-msgid "Du wolltest {0} für {1} schöpfen."
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:24
-msgid "Das Zieldatum war: "
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:26
-msgid "Du wolltest {0} an {1} senden."
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:32
-msgid "Das ist schief gelaufen: "
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:35
-msgid "Fehler beim speichern in der Datenbank. Bitte versuche es später erneut"
-msgstr ""
-
-#: Template/Email/text/notification_transaction_failed.ctp:36
-msgid "Fehler beim parsen der Transaktion. Bitte versuche es später erneut"
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:8
-msgid "Gradido Überweisung"
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:14
-msgid "Du hast soeben {0} von {1} erhalten."
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:15
-msgid "{0} schreibt:"
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:20
-msgid "Wenn Du "
-msgstr ""
-
-#: Template/Email/text/notification_transfer.ctp:20
-msgid " per E-Mail antworten willst, schreibe stattdessen an die Adresse: "
-msgstr ""
-
-#: Template/Layout/default.ctp:38
-msgid "Logout"
-msgstr ""
-
-#: Template/Layout/error.ctp:35
-msgid "Error"
-msgstr ""
-
-#: Template/Layout/frontend.ctp:95
-msgid "Datenschutzerklärung"
-msgstr ""
-
-#: Template/Layout/frontend.ctp:96
-msgid "Impressum"
-msgstr ""
-
-#: Template/Layout/frontend.ctp:108
-msgid "Community Server in Entwicklung"
-msgstr ""
-
-#: Template/OperatorTypes/add.ctp:10
-#: Template/OperatorTypes/edit.ctp:16
-#: Template/OperatorTypes/view.ctp:12
-msgid "List Operator Types"
-msgstr ""
-
-#: Template/OperatorTypes/add.ctp:11
-#: Template/OperatorTypes/edit.ctp:17
-#: Template/OperatorTypes/index.ctp:11
-#: Template/OperatorTypes/view.ctp:14
-#: Template/Operators/add.ctp:10
-#: Template/Operators/edit.ctp:16
-#: Template/Operators/view.ctp:12
-msgid "List Operators"
-msgstr ""
-
-#: Template/OperatorTypes/add.ctp:12
-#: Template/OperatorTypes/edit.ctp:18
-#: Template/OperatorTypes/index.ctp:12
-#: Template/OperatorTypes/view.ctp:15
-#: Template/Operators/index.ctp:10
-#: Template/Operators/view.ctp:13
-msgid "New Operator"
-msgstr ""
-
-#: Template/OperatorTypes/add.ctp:18
-msgid "Add Operator Type"
-msgstr ""
-
-#: Template/OperatorTypes/edit.ctp:24
-#: Template/OperatorTypes/view.ctp:10
-msgid "Edit Operator Type"
-msgstr ""
-
-#: Template/OperatorTypes/index.ctp:10
-#: Template/OperatorTypes/view.ctp:13
-msgid "New Operator Type"
-msgstr ""
-
-#: Template/OperatorTypes/index.ctp:16
-msgid "Operator Types"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:11
-msgid "Delete Operator Type"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:35
-msgid "Related Operators"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:40
-#: Template/Operators/view.ctp:20
-#: Template/ServerUsers/view.ctp:20
-msgid "Username"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:41
-#: Template/Operators/view.ctp:36
-msgid "Operator Type Id"
-msgstr ""
-
-#: Template/OperatorTypes/view.ctp:42
-#: Template/Operators/view.ctp:28
-msgid "Data Base64"
-msgstr ""
-
-#: Template/Operators/add.ctp:16
-msgid "Add Operator"
-msgstr ""
-
-#: Template/Operators/edit.ctp:22
-#: Template/Operators/view.ctp:10
-msgid "Edit Operator"
-msgstr ""
-
-#: Template/Operators/index.ctp:14
-msgid "Operators"
-msgstr ""
-
-#: Template/Operators/view.ctp:11
-msgid "Delete Operator"
-msgstr ""
-
-#: Template/Operators/view.ctp:24
-msgid "User Pubkey"
-msgstr ""
-
-#: Template/Profile/edit.ctp:9
-msgid "Profil ändern"
-msgstr ""
-
-#: Template/Profile/edit.ctp:18
-msgid "Vorname"
-msgstr ""
-
-#: Template/Profile/edit.ctp:19
-msgid "Nachname"
-msgstr ""
-
-#: Template/Profile/edit.ctp:20
-msgid "Profilbild"
-msgstr ""
-
-#: Template/Profile/edit.ctp:25
-msgid "Beschreibung"
-msgstr ""
-
-#: Template/Profile/edit.ctp:26
-msgid "Daten speichern"
-msgstr ""
-
-#: Template/Roles/add.ctp:10
-#: Template/Roles/edit.ctp:16
-#: Template/Roles/view.ctp:12
-msgid "List Roles"
-msgstr ""
-
-#: Template/Roles/add.ctp:16
-msgid "Add Role"
-msgstr ""
-
-#: Template/Roles/edit.ctp:22
-#: Template/Roles/view.ctp:10
-msgid "Edit Role"
-msgstr ""
-
-#: Template/Roles/index.ctp:10
-#: Template/Roles/view.ctp:13
-msgid "New Role"
-msgstr ""
-
-#: Template/Roles/index.ctp:14
-msgid "Roles"
-msgstr ""
-
-#: Template/Roles/view.ctp:11
-msgid "Delete Role"
-msgstr ""
-
-#: Template/Roles/view.ctp:20
-msgid "Title"
-msgstr ""
-
-#: Template/ServerUsers/add.ctp:10
-#: Template/ServerUsers/edit.ctp:16
-#: Template/ServerUsers/view.ctp:12
-msgid "List Server Users"
-msgstr ""
-
-#: Template/ServerUsers/add.ctp:16
-msgid "Add Server User"
-msgstr ""
-
-#: Template/ServerUsers/edit.ctp:22
-#: Template/ServerUsers/view.ctp:10
-msgid "Edit Server User"
-msgstr ""
-
-#: Template/ServerUsers/index.ctp:10
-#: Template/ServerUsers/view.ctp:13
-msgid "New Server User"
-msgstr ""
-
-#: Template/ServerUsers/index.ctp:14
-msgid "Server Users"
-msgstr ""
-
-#: Template/ServerUsers/login.ctp:16
-msgid "Please enter your username and password"
-msgstr ""
-
-#: Template/ServerUsers/login.ctp:20
-msgid "Login"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:11
-msgid "Delete Server User"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:24
-#: Template/Users/view.ctp:40
-msgid "Password"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:28
-#: Template/Users/view.ctp:20
-msgid "Email"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:32
-#: Template/StateUserRoles/assign_role.ctp:45
-#: Template/StateUserRoles/search.ctp:32
-msgid "Role"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:40
-msgid "Last Login"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:48
-#: Template/StateBalances/view.ctp:35
-msgid "Modified"
-msgstr ""
-
-#: Template/ServerUsers/view.ctp:52
-msgid "Activated"
-msgstr ""
-
-#: Template/StateBalances/add.ctp:10
-#: Template/StateBalances/edit.ctp:16
-#: Template/StateBalances/view.ctp:12
-#: Template/StateUserRoles/index.ctp:13
-#: Template/StateUsers/add.ctp:13
-#: Template/StateUsers/edit.ctp:19
-#: Template/StateUsers/index.ctp:13
-#: Template/StateUsers/view.ctp:16
-msgid "List State Balances"
-msgstr ""
-
-#: Template/StateBalances/add.ctp:19
-msgid "Add State Balance"
-msgstr ""
-
-#: Template/StateBalances/edit.ctp:25
-#: Template/StateBalances/view.ctp:10
-msgid "Edit State Balance"
-msgstr ""
-
-#: Template/StateBalances/index.ctp:10
-#: Template/StateBalances/view.ctp:13
-#: Template/StateUserRoles/index.ctp:14
-#: Template/StateUsers/add.ctp:14
-#: Template/StateUsers/edit.ctp:20
-#: Template/StateUsers/index.ctp:14
-#: Template/StateUsers/view.ctp:17
-msgid "New State Balance"
-msgstr ""
-
-#: Template/StateBalances/index.ctp:16
-msgid "State Balances"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:10
-msgid "Aktueller Kontostand: "
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:34
-msgid "Absender"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:35
-#: Template/StateUsers/view.ctp:57
-#: Template/StateUsers/view.ctp:87
-#: Template/StateUsers/view.ctp:121
-#: Template/TransactionSendCoins/create.ctp:21
-#: Template/TransactionSendCoins/create_raw.ctp:32
-msgid "Verwendungszweck"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:36
-#: Template/StateBalances/overview_gdt.ctp:42
-#: Template/StateBalances/overview_gdt.ctp:75
-msgid "Datum"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:37
-#: Template/StateUsers/view.ctp:56
-#: Template/StateUsers/view.ctp:86
-#: Template/StateUsers/view.ctp:120
-msgid "Betrag"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:38
-msgid "Transaktions Nr."
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:38
-msgid "Nr"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:75
-msgid "Geschöpft"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:78
-msgid "Gesendet"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:81
-msgid "Empfangen"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:84
-msgid "Vergänglichkeit"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:124
-#: Template/TransactionCreations/create_multi.ctp:184
-msgid "Laufende Transaktion"
-msgstr ""
-
-#: Template/StateBalances/overview.ctp:126
-#: Template/TransactionCreations/create_multi.ctp:186
-msgid "Laufende Transaktionen"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:21
-msgid "Zur Verfügung: "
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:31
-msgid "Nur die letzten 100 Einträge werden angezeigt!"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:38
-msgid "Eigene Einzahlungen"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:41
-#: Template/Users/statistics.ctp:65
-msgid "E-Mail"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:43
-msgid "Kommentar"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:44
-#: Template/StateBalances/overview_gdt.ctp:76
-msgid "Euro"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:45
-#: Template/StateBalances/overview_gdt.ctp:77
-msgid "Factor"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:46
-#: Template/StateBalances/overview_gdt.ctp:78
-msgid "GDT"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:71
-msgid "Einzahlungen anderer (Publisherprogramm)"
-msgstr ""
-
-#: Template/StateBalances/overview_gdt.ctp:74
-msgid "Einzahlender"
-msgstr ""
-
-#: Template/StateBalances/view.ctp:11
-msgid "Delete State Balance"
-msgstr ""
-
-#: Template/StateBalances/view.ctp:31
-#: Template/StateUsers/view.ctp:33
-#: Template/TransactionCreations/view.ctp:36
-#: Template/TransactionSendCoins/view.ctp:36
-#: Template/Transactions/view.ctp:95
-#: Template/Transactions/view.ctp:209
-msgid "Amount"
-msgstr ""
-
-#: Template/StateCreated/add.ctp:10
-#: Template/StateCreated/edit.ctp:16
-#: Template/StateCreated/view.ctp:12
-#: Template/StateUserRoles/index.ctp:15
-#: Template/StateUsers/add.ctp:15
-#: Template/StateUsers/edit.ctp:21
-#: Template/StateUsers/index.ctp:15
-#: Template/Transactions/add.ctp:15
-#: Template/Transactions/edit.ctp:21
-#: Template/Transactions/index.ctp:15
-#: Template/Transactions/view.ctp:18
-msgid "List State Created"
-msgstr ""
-
-#: Template/StateCreated/add.ctp:11
-#: Template/StateCreated/edit.ctp:17
-#: Template/StateCreated/index.ctp:11
-#: Template/StateCreated/view.ctp:14
-#: Template/StateGroups/add.ctp:17
-#: Template/StateGroups/edit.ctp:23
-#: Template/StateGroups/index.ctp:17
-#: Template/StateGroups/view.ctp:20
-#: Template/StateUserTransactions/add.ctp:13
-#: Template/StateUserTransactions/edit.ctp:19
-#: Template/StateUserTransactions/index.ctp:13
-#: Template/StateUserTransactions/view.ctp:16
-#: Template/TransactionCreations/add.ctp:11
-#: Template/TransactionCreations/edit.ctp:17
-#: Template/TransactionCreations/index.ctp:11
-#: Template/TransactionCreations/view.ctp:14
-#: Template/TransactionGroupAddaddress/add.ctp:11
-#: Template/TransactionGroupAddaddress/edit.ctp:17
-#: Template/TransactionGroupAddaddress/index.ctp:11
-#: Template/TransactionGroupAddaddress/view.ctp:14
-#: Template/TransactionGroupAllowtrades/add.ctp:11
-#: Template/TransactionGroupAllowtrades/edit.ctp:17
-#: Template/TransactionGroupAllowtrades/index.ctp:11
-#: Template/TransactionGroupAllowtrades/view.ctp:14
-#: Template/TransactionGroupCreates/add.ctp:11
-#: Template/TransactionGroupCreates/edit.ctp:17
-#: Template/TransactionGroupCreates/index.ctp:11
-#: Template/TransactionGroupCreates/view.ctp:14
-#: Template/TransactionSendCoins/add.ctp:11
-#: Template/TransactionSendCoins/edit.ctp:17
-#: Template/TransactionSendCoins/index.ctp:11
-#: Template/TransactionSendCoins/view.ctp:14
-#: Template/TransactionSignatures/add.ctp:11
-#: Template/TransactionSignatures/edit.ctp:17
-#: Template/TransactionSignatures/index.ctp:11
-#: Template/TransactionSignatures/view.ctp:14
-#: Template/TransactionTypes/add.ctp:11
-#: Template/TransactionTypes/edit.ctp:17
-#: Template/TransactionTypes/index.ctp:11
-#: Template/TransactionTypes/view.ctp:14
-#: Template/Transactions/add.ctp:10
-#: Template/Transactions/edit.ctp:16
-#: Template/Transactions/view.ctp:12
-msgid "List Transactions"
-msgstr ""
-
-#: Template/StateCreated/add.ctp:12
-#: Template/StateCreated/edit.ctp:18
-#: Template/StateCreated/index.ctp:12
-#: Template/StateCreated/view.ctp:15
-#: Template/StateGroups/add.ctp:18
-#: Template/StateGroups/edit.ctp:24
-#: Template/StateGroups/index.ctp:18
-#: Template/StateGroups/view.ctp:21
-#: Template/StateUserTransactions/add.ctp:14
-#: Template/StateUserTransactions/edit.ctp:20
-#: Template/StateUserTransactions/index.ctp:14
-#: Template/StateUserTransactions/view.ctp:17
-#: Template/TransactionCreations/add.ctp:12
-#: Template/TransactionCreations/edit.ctp:18
-#: Template/TransactionCreations/index.ctp:12
-#: Template/TransactionCreations/view.ctp:15
-#: Template/TransactionGroupAddaddress/add.ctp:12
-#: Template/TransactionGroupAddaddress/edit.ctp:18
-#: Template/TransactionGroupAddaddress/index.ctp:12
-#: Template/TransactionGroupAddaddress/view.ctp:15
-#: Template/TransactionGroupAllowtrades/add.ctp:12
-#: Template/TransactionGroupAllowtrades/edit.ctp:18
-#: Template/TransactionGroupAllowtrades/index.ctp:12
-#: Template/TransactionGroupAllowtrades/view.ctp:15
-#: Template/TransactionGroupCreates/add.ctp:12
-#: Template/TransactionGroupCreates/edit.ctp:18
-#: Template/TransactionGroupCreates/index.ctp:12
-#: Template/TransactionGroupCreates/view.ctp:15
-#: Template/TransactionSendCoins/add.ctp:12
-#: Template/TransactionSendCoins/edit.ctp:18
-#: Template/TransactionSendCoins/index.ctp:12
-#: Template/TransactionSendCoins/view.ctp:15
-#: Template/TransactionSignatures/add.ctp:12
-#: Template/TransactionSignatures/edit.ctp:18
-#: Template/TransactionSignatures/index.ctp:12
-#: Template/TransactionSignatures/view.ctp:15
-#: Template/TransactionTypes/add.ctp:12
-#: Template/TransactionTypes/edit.ctp:18
-#: Template/TransactionTypes/index.ctp:12
-#: Template/TransactionTypes/view.ctp:15
-#: Template/Transactions/index.ctp:10
-#: Template/Transactions/view.ctp:13
-msgid "New Transaction"
-msgstr ""
-
-#: Template/StateCreated/add.ctp:20
-msgid "Add State Created"
-msgstr ""
-
-#: Template/StateCreated/edit.ctp:26
-#: Template/StateCreated/view.ctp:10
-msgid "Edit State Created"
-msgstr ""
-
-#: Template/StateCreated/index.ctp:10
-#: Template/StateCreated/view.ctp:13
-#: Template/StateUserRoles/index.ctp:16
-#: Template/StateUsers/add.ctp:16
-#: Template/StateUsers/edit.ctp:22
-#: Template/StateUsers/index.ctp:16
-#: Template/Transactions/add.ctp:16
-#: Template/Transactions/edit.ctp:22
-#: Template/Transactions/index.ctp:16
-#: Template/Transactions/view.ctp:19
-msgid "New State Created"
-msgstr ""
-
-#: Template/StateCreated/index.ctp:18
-msgid "State Created"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:11
-msgid "Delete State Created"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:24
-#: Template/StateUserTransactions/view.ctp:30
-#: Template/StateUsers/view.ctp:53
-#: Template/TransactionCreations/view.ctp:24
-#: Template/TransactionGroupAddaddress/view.ctp:24
-#: Template/TransactionGroupAllowtrades/view.ctp:22
-#: Template/TransactionGroupCreates/view.ctp:24
-#: Template/TransactionSendCoins/view.ctp:24
-#: Template/TransactionSignatures/view.ctp:22
-msgid "Transaction"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:36
-#: Template/Transactions/view.ctp:61
-msgid "Month"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:40
-#: Template/Transactions/view.ctp:62
-msgid "Year"
-msgstr ""
-
-#: Template/StateCreated/view.ctp:44
-#: Template/Transactions/view.ctp:65
-msgid "Short Ident Hash"
-msgstr ""
-
-#: Template/StateErrors/add.ctp:10
-#: Template/StateErrors/edit.ctp:16
-#: Template/StateErrors/view.ctp:12
-msgid "List State Errors"
-msgstr ""
-
-#: Template/StateErrors/add.ctp:13
-#: Template/StateErrors/edit.ctp:19
-#: Template/StateErrors/index.ctp:13
-#: Template/StateErrors/view.ctp:16
-#: Template/StateUserTransactions/add.ctp:15
-#: Template/StateUserTransactions/edit.ctp:21
-#: Template/StateUserTransactions/index.ctp:15
-#: Template/StateUserTransactions/view.ctp:18
-#: Template/TransactionTypes/add.ctp:10
-#: Template/TransactionTypes/edit.ctp:16
-#: Template/TransactionTypes/view.ctp:12
-#: Template/Transactions/add.ctp:13
-#: Template/Transactions/edit.ctp:19
-#: Template/Transactions/index.ctp:13
-#: Template/Transactions/view.ctp:16
-msgid "List Transaction Types"
-msgstr ""
-
-#: Template/StateErrors/add.ctp:14
-#: Template/StateErrors/edit.ctp:20
-#: Template/StateErrors/index.ctp:14
-#: Template/StateErrors/view.ctp:17
-#: Template/StateUserTransactions/add.ctp:16
-#: Template/StateUserTransactions/edit.ctp:22
-#: Template/StateUserTransactions/index.ctp:16
-#: Template/StateUserTransactions/view.ctp:19
-#: Template/TransactionTypes/index.ctp:10
-#: Template/TransactionTypes/view.ctp:13
-#: Template/Transactions/add.ctp:14
-#: Template/Transactions/edit.ctp:20
-#: Template/Transactions/index.ctp:14
-#: Template/Transactions/view.ctp:17
-msgid "New Transaction Type"
-msgstr ""
-
-#: Template/StateErrors/add.ctp:20
-msgid "Add State Error"
-msgstr ""
-
-#: Template/StateErrors/edit.ctp:26
-#: Template/StateErrors/view.ctp:10
-msgid "Edit State Error"
-msgstr ""
-
-#: Template/StateErrors/index.ctp:10
-#: Template/StateErrors/view.ctp:13
-msgid "New State Error"
-msgstr ""
-
-#: Template/StateErrors/index.ctp:18
-msgid "State Errors"
-msgstr ""
-
-#: Template/StateErrors/show_for_user.ctp:9
-msgid "Fehlermeldungen"
-msgstr ""
-
-#: Template/StateErrors/view.ctp:11
-msgid "Delete State Error"
-msgstr ""
-
-#: Template/StateErrors/view.ctp:28
-#: Template/StateUserTransactions/view.ctp:34
-#: Template/Transactions/view.ctp:42
-msgid "Transaction Type"
-msgstr ""
-
-#: Template/StateErrors/view.ctp:41
-msgid "Message Json"
-msgstr ""
-
-#: Template/StateGroupAddresses/add.ctp:11
-#: Template/StateGroupAddresses/edit.ctp:17
-#: Template/StateGroupAddresses/index.ctp:11
-#: Template/StateGroupAddresses/view.ctp:14
-#: Template/StateGroups/add.ctp:10
-#: Template/StateGroups/edit.ctp:16
-#: Template/StateGroups/view.ctp:12
-#: Template/StateUserRoles/index.ctp:11
-#: Template/StateUsers/add.ctp:11
-#: Template/StateUsers/edit.ctp:17
-#: Template/StateUsers/index.ctp:11
-#: Template/StateUsers/view.ctp:14
-#: Template/TransactionGroupCreates/add.ctp:13
-#: Template/TransactionGroupCreates/edit.ctp:19
-#: Template/TransactionGroupCreates/index.ctp:13
-#: Template/TransactionGroupCreates/view.ctp:16
-#: Template/Transactions/add.ctp:11
-#: Template/Transactions/edit.ctp:17
-#: Template/Transactions/index.ctp:11
-#: Template/Transactions/view.ctp:14
-msgid "List State Groups"
-msgstr ""
-
-#: Template/StateGroupAddresses/add.ctp:12
-#: Template/StateGroupAddresses/edit.ctp:18
-#: Template/StateGroupAddresses/index.ctp:12
-#: Template/StateGroupAddresses/view.ctp:15
-#: Template/StateGroups/index.ctp:10
-#: Template/StateGroups/view.ctp:13
-#: Template/StateUserRoles/index.ctp:12
-#: Template/StateUsers/add.ctp:12
-#: Template/StateUsers/edit.ctp:18
-#: Template/StateUsers/index.ctp:12
-#: Template/StateUsers/view.ctp:15
-#: Template/TransactionGroupCreates/add.ctp:14
-#: Template/TransactionGroupCreates/edit.ctp:20
-#: Template/TransactionGroupCreates/index.ctp:14
-#: Template/TransactionGroupCreates/view.ctp:17
-#: Template/Transactions/add.ctp:12
-#: Template/Transactions/edit.ctp:18
-#: Template/Transactions/index.ctp:12
-#: Template/Transactions/view.ctp:15
-msgid "New State Group"
-msgstr ""
-
-#: Template/StateGroupAddresses/add.ctp:20
-msgid "Add State Group Address"
-msgstr ""
-
-#: Template/StateGroupAddresses/edit.ctp:26
-#: Template/StateGroupAddresses/view.ctp:10
-msgid "Edit State Group Address"
-msgstr ""
-
-#: Template/StateGroupAddresses/index.ctp:18
-msgid "State Group Addresses"
-msgstr ""
-
-#: Template/StateGroupAddresses/index.ctp:25
-#: Template/TransactionGroupAddaddress/index.ctp:25
-msgid "user public key"
-msgstr ""
-
-#: Template/StateGroupAddresses/view.ctp:11
-msgid "Delete State Group Address"
-msgstr ""
-
-#: Template/StateGroupAddresses/view.ctp:24
-#: Template/TransactionGroupAddaddress/view.ctp:28
-msgid "Address Type"
-msgstr ""
-
-#: Template/StateGroupRelationships/add.ctp:10
-#: Template/StateGroupRelationships/edit.ctp:16
-#: Template/StateGroupRelationships/view.ctp:12
-msgid "List State Group Relationships"
-msgstr ""
-
-#: Template/StateGroupRelationships/add.ctp:16
-msgid "Add State Group Relationship"
-msgstr ""
-
-#: Template/StateGroupRelationships/edit.ctp:22
-#: Template/StateGroupRelationships/view.ctp:10
-msgid "Edit State Group Relationship"
-msgstr ""
-
-#: Template/StateGroupRelationships/index.ctp:10
-#: Template/StateGroupRelationships/view.ctp:13
-msgid "New State Group Relationship"
-msgstr ""
-
-#: Template/StateGroupRelationships/index.ctp:14
-msgid "State Group Relationships"
-msgstr ""
-
-#: Template/StateGroupRelationships/view.ctp:11
-msgid "Delete State Group Relationship"
-msgstr ""
-
-#: Template/StateGroupRelationships/view.ctp:24
-msgid "State Group1 Id"
-msgstr ""
-
-#: Template/StateGroupRelationships/view.ctp:28
-msgid "State Group2 Id"
-msgstr ""
-
-#: Template/StateGroupRelationships/view.ctp:32
-msgid "State Relationship Id"
-msgstr ""
-
-#: Template/StateGroups/add.ctp:15
-#: Template/StateGroups/edit.ctp:21
-#: Template/StateGroups/index.ctp:15
-#: Template/StateGroups/view.ctp:18
-#: Template/TransactionGroupCreates/add.ctp:10
-#: Template/TransactionGroupCreates/edit.ctp:16
-#: Template/TransactionGroupCreates/view.ctp:12
-#: Template/Transactions/add.ctp:23
-#: Template/Transactions/edit.ctp:29
-#: Template/Transactions/index.ctp:23
-#: Template/Transactions/view.ctp:26
-msgid "List Transaction Group Creates"
-msgstr ""
-
-#: Template/StateGroups/add.ctp:16
-#: Template/StateGroups/edit.ctp:22
-#: Template/StateGroups/index.ctp:16
-#: Template/StateGroups/view.ctp:19
-#: Template/TransactionGroupCreates/index.ctp:10
-#: Template/TransactionGroupCreates/view.ctp:13
-#: Template/Transactions/add.ctp:24
-#: Template/Transactions/edit.ctp:30
-#: Template/Transactions/index.ctp:24
-#: Template/Transactions/view.ctp:27
-msgid "New Transaction Group Create"
-msgstr ""
-
-#: Template/StateGroups/add.ctp:24
-msgid "Add State Group"
-msgstr ""
-
-#: Template/StateGroups/edit.ctp:30
-#: Template/StateGroups/view.ctp:10
-msgid "Edit State Group"
-msgstr ""
-
-#: Template/StateGroups/index.ctp:22
-msgid "State Groups"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:11
-msgid "Delete State Group"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:36
-msgid "User Count"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:46
-#: Template/StateGroups/view.ctp:74
-#: Template/StateGroups/view.ctp:102
-#: Template/StateGroups/view.ctp:129
-#: Template/TransactionTypes/view.ctp:40
-#: Template/Transactions/view.ctp:178
-msgid "State Group Id"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:68
-msgid "Related State Users"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:73
-msgid "Index Id"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:95
-#: Template/Transactions/view.ctp:171
-msgid "Related Transaction Group Creates"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:101
-#: Template/Transactions/view.ctp:177
-msgid "Group Public Key"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:124
-#: Template/TransactionTypes/view.ctp:35
-msgid "Related Transactions"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:130
-#: Template/TransactionTypes/view.ctp:41
-msgid "Transaction Type Id"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:131
-#: Template/TransactionTypes/view.ctp:42
-msgid "Tx Hash"
-msgstr ""
-
-#: Template/StateGroups/view.ctp:132
-#: Template/TransactionTypes/view.ctp:43
-#: Template/Transactions/view.ctp:50
-msgid "Received"
-msgstr ""
-
-#: Template/StateRelationshipTypes/add.ctp:10
-#: Template/StateRelationshipTypes/edit.ctp:16
-#: Template/StateRelationshipTypes/view.ctp:12
-msgid "List State Relationship Types"
-msgstr ""
-
-#: Template/StateRelationshipTypes/add.ctp:16
-msgid "Add State Relationship Type"
-msgstr ""
-
-#: Template/StateRelationshipTypes/edit.ctp:22
-#: Template/StateRelationshipTypes/view.ctp:10
-msgid "Edit State Relationship Type"
-msgstr ""
-
-#: Template/StateRelationshipTypes/index.ctp:10
-#: Template/StateRelationshipTypes/view.ctp:13
-msgid "New State Relationship Type"
-msgstr ""
-
-#: Template/StateRelationshipTypes/index.ctp:14
-msgid "State Relationship Types"
-msgstr ""
-
-#: Template/StateRelationshipTypes/view.ctp:11
-msgid "Delete State Relationship Type"
-msgstr ""
-
-#: Template/StateUserRoles/assign_role.ctp:9
-#: Template/StateUserRoles/assign_role.ctp:46
-#: Template/StateUserRoles/search.ctp:47
-msgid "Assign Role"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:17
-#: Template/StateUsers/add.ctp:17
-#: Template/StateUsers/edit.ctp:23
-#: Template/StateUsers/index.ctp:17
-#: Template/StateUsers/view.ctp:18
-#: Template/TransactionCreations/add.ctp:10
-#: Template/TransactionCreations/edit.ctp:16
-#: Template/TransactionCreations/view.ctp:12
-#: Template/Transactions/add.ctp:17
-#: Template/Transactions/edit.ctp:23
-#: Template/Transactions/index.ctp:17
-#: Template/Transactions/view.ctp:20
-msgid "List Transaction Creations"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:18
-#: Template/StateUsers/add.ctp:18
-#: Template/StateUsers/edit.ctp:24
-#: Template/StateUsers/index.ctp:18
-#: Template/StateUsers/view.ctp:19
-#: Template/TransactionCreations/index.ctp:10
-#: Template/TransactionCreations/view.ctp:13
-#: Template/Transactions/add.ctp:18
-#: Template/Transactions/edit.ctp:24
-#: Template/Transactions/index.ctp:18
-#: Template/Transactions/view.ctp:21
-msgid "New Transaction Creation"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:19
-#: Template/StateUsers/add.ctp:19
-#: Template/StateUsers/edit.ctp:25
-#: Template/StateUsers/index.ctp:19
-#: Template/StateUsers/view.ctp:20
-#: Template/TransactionSendCoins/add.ctp:10
-#: Template/TransactionSendCoins/edit.ctp:16
-#: Template/TransactionSendCoins/view.ctp:12
-#: Template/Transactions/add.ctp:25
-#: Template/Transactions/edit.ctp:31
-#: Template/Transactions/index.ctp:25
-#: Template/Transactions/view.ctp:28
-msgid "List Transaction Send Coins"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:20
-#: Template/StateUsers/add.ctp:20
-#: Template/StateUsers/edit.ctp:26
-#: Template/StateUsers/index.ctp:20
-#: Template/StateUsers/view.ctp:21
-#: Template/TransactionSendCoins/index.ctp:10
-#: Template/TransactionSendCoins/view.ctp:13
-#: Template/Transactions/add.ctp:26
-#: Template/Transactions/edit.ctp:32
-#: Template/Transactions/index.ctp:26
-#: Template/Transactions/view.ctp:29
-msgid "New Transaction Send Coin"
-msgstr ""
-
-#: Template/StateUserRoles/index.ctp:24
-#: Template/StateUserRoles/search.ctp:25
-#: Template/StateUsers/index.ctp:24
-msgid "State Users"
-msgstr ""
-
-#: Template/StateUserRoles/search.ctp:19
-#: Template/StateUsers/search.ctp:57
-msgid "Suchbegriff"
-msgstr ""
-
-#: Template/StateUserRoles/search.ctp:19
-#: Template/StateUsers/search.ctp:57
-msgid "Vorname/Nachname/E-Mail"
-msgstr ""
-
-#: Template/StateUserRoles/search.ctp:20
-#: Template/StateUsers/search.ctp:59
-#: Template/TransactionCreations/create_multi.ctp:35
-msgid "Suchen"
-msgstr ""
-
-#: Template/StateUserTransactions/add.ctp:10
-#: Template/StateUserTransactions/edit.ctp:16
-#: Template/StateUserTransactions/view.ctp:12
-msgid "List State User Transactions"
-msgstr ""
-
-#: Template/StateUserTransactions/add.ctp:22
-msgid "Add State User Transaction"
-msgstr ""
-
-#: Template/StateUserTransactions/edit.ctp:28
-#: Template/StateUserTransactions/view.ctp:10
-msgid "Edit State User Transaction"
-msgstr ""
-
-#: Template/StateUserTransactions/index.ctp:10
-#: Template/StateUserTransactions/view.ctp:13
-msgid "New State User Transaction"
-msgstr ""
-
-#: Template/StateUserTransactions/index.ctp:20
-msgid "State User Transactions"
-msgstr ""
-
-#: Template/StateUserTransactions/view.ctp:11
-msgid "Delete State User Transaction"
-msgstr ""
-
-#: Template/StateUsers/add.ctp:26
-msgid "Add State User"
-msgstr ""
-
-#: Template/StateUsers/edit.ctp:32
-#: Template/StateUsers/view.ctp:10
-msgid "Edit State User"
-msgstr ""
-
-#: Template/StateUsers/search.ctp:16
-msgid "Alle"
-msgstr ""
-
-#: Template/StateUsers/search.ctp:21
-msgid "Konto nicht aktiviert"
-msgstr ""
-
-#: Template/StateUsers/search.ctp:58
-msgid "Konto Status"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:11
-msgid "Delete State User"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:28
-msgid "State Balance"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:32
-msgid "Letztes Update"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:49
-msgid "Schöpfungen"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:54
-#: Template/StateUsers/view.ctp:84
-#: Template/StateUsers/view.ctp:118
-msgid "Erhalten"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:55
-msgid "Verrechnungs-Datum"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:79
-msgid "Versendete Überweisungen"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:85
-msgid "Empfänger "
-msgstr ""
-
-#: Template/StateUsers/view.ctp:88
-msgid "Betrag nach Senden"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:113
-msgid "Empfangende Überweisungen"
-msgstr ""
-
-#: Template/StateUsers/view.ctp:119
-msgid "Sender"
-msgstr ""
-
-#: Template/TransactionCreations/add.ctp:20
-msgid "Add Transaction Creation"
-msgstr ""
-
-#: Template/TransactionCreations/create.ctp:17
-#: Template/TransactionCreations/create_multi.ctp:17
-msgid "Schöpfungstransaktion"
-msgstr ""
-
-#: Template/TransactionCreations/create.ctp:28
-#: Template/TransactionCreations/create_multi.ctp:125
-msgid "Transaktion(en) abschließen"
-msgstr ""
-
-#: Template/TransactionCreations/create.ctp:29
-#: Template/TransactionCreations/create_multi.ctp:126
-#: Template/TransactionSendCoins/create.ctp:24
-msgid "Weitere Transaktion erstellen"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:34
-msgid "Suche"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:38
-msgid "Memo"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:39
-#: Template/TransactionSendCoins/create.ctp:22
-#: Template/TransactionSendCoins/create_raw.ctp:33
-msgid "Betrag in GDD"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:46
-msgid "Zieldatum"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:81
-msgid "Für benutzerdefinierten Betrag"
-msgstr ""
-
-#: Template/TransactionCreations/create_multi.ctp:189
-msgid "Alle Transaktionen abgeschlossen!"
-msgstr ""
-
-#: Template/TransactionCreations/edit.ctp:26
-#: Template/TransactionCreations/view.ctp:10
-msgid "Edit Transaction Creation"
-msgstr ""
-
-#: Template/TransactionCreations/index.ctp:18
-msgid "Transaction Creations"
-msgstr ""
-
-#: Template/TransactionCreations/view.ctp:11
-msgid "Delete Transaction Creation"
-msgstr ""
-
-#: Template/TransactionGroupAddaddress/add.ctp:20
-msgid "Add Transaction Group Addaddres"
-msgstr ""
-
-#: Template/TransactionGroupAddaddress/edit.ctp:26
-#: Template/TransactionGroupAddaddress/view.ctp:10
-msgid "Edit Transaction Group Addaddres"
-msgstr ""
-
-#: Template/TransactionGroupAddaddress/index.ctp:18
-msgid "Transaction Group Addaddress"
-msgstr ""
-
-#: Template/TransactionGroupAddaddress/view.ctp:11
-msgid "Delete Transaction Group Addaddres"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/add.ctp:10
-#: Template/TransactionGroupAllowtrades/edit.ctp:16
-#: Template/TransactionGroupAllowtrades/view.ctp:12
-#: Template/Transactions/add.ctp:21
-#: Template/Transactions/edit.ctp:27
-#: Template/Transactions/index.ctp:21
-#: Template/Transactions/view.ctp:24
-msgid "List Transaction Group Allowtrades"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/add.ctp:18
-msgid "Add Transaction Group Allowtrade"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/edit.ctp:24
-#: Template/TransactionGroupAllowtrades/view.ctp:10
-msgid "Edit Transaction Group Allowtrade"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/index.ctp:10
-#: Template/TransactionGroupAllowtrades/view.ctp:13
-#: Template/Transactions/add.ctp:22
-#: Template/Transactions/edit.ctp:28
-#: Template/Transactions/index.ctp:22
-#: Template/Transactions/view.ctp:25
-msgid "New Transaction Group Allowtrade"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/index.ctp:16
-msgid "Transaction Group Allowtrades"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/view.ctp:11
-msgid "Delete Transaction Group Allowtrade"
-msgstr ""
-
-#: Template/TransactionGroupAllowtrades/view.ctp:34
-#: Template/Transactions/view.ctp:151
-msgid "Allow"
-msgstr ""
-
-#: Template/TransactionGroupCreates/add.ctp:20
-msgid "Add Transaction Group Create"
-msgstr ""
-
-#: Template/TransactionGroupCreates/edit.ctp:26
-#: Template/TransactionGroupCreates/view.ctp:10
-msgid "Edit Transaction Group Create"
-msgstr ""
-
-#: Template/TransactionGroupCreates/index.ctp:18
-msgid "Transaction Group Creates"
-msgstr ""
-
-#: Template/TransactionGroupCreates/view.ctp:11
-msgid "Delete Transaction Group Create"
-msgstr ""
-
-#: Template/TransactionGroupCreates/view.ctp:28
-#: Template/Transactions/view.ctp:38
-msgid "State Group"
-msgstr ""
-
-#: Template/TransactionSendCoins/add.ctp:20
-msgid "Add Transaction Send Coin"
-msgstr ""
-
-#: Template/TransactionSendCoins/create.ctp:19
-msgid "Empfänger"
-msgstr ""
-
-#: Template/TransactionSendCoins/create.ctp:20
-msgid "Community Alias"
-msgstr ""
-
-#: Template/TransactionSendCoins/create.ctp:23
-#: Template/TransactionSendCoins/create_raw.ctp:34
-msgid "Transaktion abschließen"
-msgstr ""
-
-#: Template/TransactionSendCoins/create_raw.ctp:29
-msgid "Sender Private Key"
-msgstr ""
-
-#: Template/TransactionSendCoins/create_raw.ctp:30
-msgid "Sender Public Key"
-msgstr ""
-
-#: Template/TransactionSendCoins/create_raw.ctp:31
-msgid "Empfänger Public Key"
-msgstr ""
-
-#: Template/TransactionSendCoins/edit.ctp:26
-#: Template/TransactionSendCoins/view.ctp:10
-msgid "Edit Transaction Send Coin"
-msgstr ""
-
-#: Template/TransactionSendCoins/index.ctp:18
-msgid "Transaction Send Coins"
-msgstr ""
-
-#: Template/TransactionSendCoins/view.ctp:11
-msgid "Delete Transaction Send Coin"
-msgstr ""
-
-#: Template/TransactionSendCoins/view.ctp:40
-#: Template/Transactions/view.ctp:210
-msgid "Sender Final Balance"
-msgstr ""
-
-#: Template/TransactionSignatures/add.ctp:10
-#: Template/TransactionSignatures/edit.ctp:16
-#: Template/TransactionSignatures/view.ctp:12
-#: Template/Transactions/add.ctp:27
-#: Template/Transactions/edit.ctp:33
-#: Template/Transactions/index.ctp:27
-#: Template/Transactions/view.ctp:30
-msgid "List Transaction Signatures"
-msgstr ""
-
-#: Template/TransactionSignatures/add.ctp:18
-msgid "Add Transaction Signature"
-msgstr ""
-
-#: Template/TransactionSignatures/edit.ctp:24
-#: Template/TransactionSignatures/view.ctp:10
-msgid "Edit Transaction Signature"
-msgstr ""
-
-#: Template/TransactionSignatures/index.ctp:10
-#: Template/TransactionSignatures/view.ctp:13
-#: Template/Transactions/add.ctp:28
-#: Template/Transactions/edit.ctp:34
-#: Template/Transactions/index.ctp:28
-#: Template/Transactions/view.ctp:31
-msgid "New Transaction Signature"
-msgstr ""
-
-#: Template/TransactionSignatures/index.ctp:16
-msgid "Transaction Signatures"
-msgstr ""
-
-#: Template/TransactionSignatures/view.ctp:11
-msgid "Delete Transaction Signature"
-msgstr ""
-
-#: Template/TransactionTypes/add.ctp:18
-msgid "Add Transaction Type"
-msgstr ""
-
-#: Template/TransactionTypes/edit.ctp:24
-#: Template/TransactionTypes/view.ctp:10
-msgid "Edit Transaction Type"
-msgstr ""
-
-#: Template/TransactionTypes/index.ctp:16
-msgid "Transaction Types"
-msgstr ""
-
-#: Template/TransactionTypes/view.ctp:11
-msgid "Delete Transaction Type"
-msgstr ""
-
-#: Template/Transactions/add.ctp:34
-msgid "Add Transaction"
-msgstr ""
-
-#: Template/Transactions/edit.ctp:40
-#: Template/Transactions/view.ctp:10
-msgid "Edit Transaction"
-msgstr ""
-
-#: Template/Transactions/manual_transaction.ctp:26
-msgid "Creation Transaction"
-msgstr ""
-
-#: Template/Transactions/manual_transaction.ctp:41
-msgid "Transfer Transaction"
-msgstr ""
-
-#: Template/Transactions/send_to_node.ctp:8
-msgid "Transaktionen an Gradido-Node senden"
-msgstr ""
-
-#: Template/Transactions/synchronize_with_state_user_transactions.ctp:44
-msgid "Synchronize"
-msgstr ""
-
-#: Template/Transactions/view.ctp:11
-msgid "Delete Transaction"
-msgstr ""
-
-#: Template/Transactions/view.ctp:55
-msgid "Related State Created"
-msgstr ""
-
-#: Template/Transactions/view.ctp:88
-msgid "Related Transaction Creations"
-msgstr ""
-
-#: Template/Transactions/view.ctp:96
-msgid "Ident Hash"
-msgstr ""
-
-#: Template/Transactions/view.ctp:144
-msgid "Related Transaction Group Allowtrades"
-msgstr ""
-
-#: Template/Transactions/view.ctp:200
-msgid "Related Transaction Send Coins"
-msgstr ""
-
-#: Template/Transactions/view.ctp:207
-msgid "Receiver Public Key"
-msgstr ""
-
-#: Template/Transactions/view.ctp:208
-msgid "Receiver User Id"
-msgstr ""
-
-#: Template/Transactions/view.ctp:233
-msgid "Related Transaction Signatures"
-msgstr ""
-
-#: Template/Transactions/view.ctp:239
-msgid "Signature"
-msgstr ""
-
-#: Template/Transactions/view.ctp:240
-msgid "Pubkey"
-msgstr ""
-
-#: Template/Users/add.ctp:10
-#: Template/Users/edit.ctp:16
-#: Template/Users/view.ctp:12
-msgid "List Users"
-msgstr ""
-
-#: Template/Users/add.ctp:16
-msgid "Add User"
-msgstr ""
-
-#: Template/Users/edit.ctp:22
-#: Template/Users/view.ctp:10
-msgid "Edit User"
-msgstr ""
-
-#: Template/Users/index.ctp:10
-#: Template/Users/view.ctp:13
-msgid "New User"
-msgstr ""
-
-#: Template/Users/index.ctp:14
-msgid "Users"
-msgstr ""
-
-#: Template/Users/statistics.ctp:9
-msgid "Benutzer Statistiken"
-msgstr ""
-
-#: Template/Users/statistics.ctp:39
-msgid "Alle Anmeldungen"
-msgstr ""
-
-#: Template/Users/statistics.ctp:56
-msgid "Anmeldungen im Vergleich zum letzten Monat, 0% = gleiche Anzahl"
-msgstr ""
-
-#: Template/Users/statistics.ctp:61
-msgid "Letzte Anmeldungen"
-msgstr ""
-
-#: Template/Users/statistics.ctp:66
-msgid "Erstellt"
-msgstr ""
-
-#: Template/Users/statistics.ctp:79
-msgid "Anmeldungen detailliert"
-msgstr ""
-
-#: Template/Users/statistics.ctp:82
-msgid "Jahr"
-msgstr ""
-
-#: Template/Users/statistics.ctp:83
-msgid "Monat"
-msgstr ""
-
-#: Template/Users/statistics.ctp:84
-msgid "Anzahl Anmeldungen"
-msgstr ""
-
-#: Template/Users/view.ctp:11
-msgid "Delete User"
-msgstr ""
-
-#: Template/Users/view.ctp:24
-msgid "First Name"
-msgstr ""
-
-#: Template/Users/view.ctp:28
-msgid "Last Name"
-msgstr ""
-
-#: Template/Users/view.ctp:32
-msgid "Language"
-msgstr ""
-
-#: Template/Users/view.ctp:48
-msgid "Email Checked"
-msgstr ""
-
diff --git a/community_server/src/Model/Behavior/empty b/community_server/src/Model/Behavior/empty
deleted file mode 100644
index e69de29bb..000000000
diff --git a/community_server/src/Model/Entity/AddressType.php b/community_server/src/Model/Entity/AddressType.php
deleted file mode 100644
index 87d64d61a..000000000
--- a/community_server/src/Model/Entity/AddressType.php
+++ /dev/null
@@ -1,33 +0,0 @@
- true,
- 'text' => true,
- 'state_group_addresses' => true,
- 'transaction_group_addaddress' => true,
- ];
-}
diff --git a/community_server/src/Model/Entity/AdminError.php b/community_server/src/Model/Entity/AdminError.php
deleted file mode 100644
index 23c60fd4a..000000000
--- a/community_server/src/Model/Entity/AdminError.php
+++ /dev/null
@@ -1,41 +0,0 @@
- true,
- 'controller' => true,
- 'action' => true,
- 'state' => true,
- 'msg' => true,
- 'details' => true,
- 'created' => true,
- 'state_user' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/BlockchainType.php b/community_server/src/Model/Entity/BlockchainType.php
deleted file mode 100644
index c2e21402c..000000000
--- a/community_server/src/Model/Entity/BlockchainType.php
+++ /dev/null
@@ -1,30 +0,0 @@
- true,
- 'text' => true,
- 'symbol' => true,
- ];
-}
diff --git a/community_server/src/Model/Entity/CommunityProfile.php b/community_server/src/Model/Entity/CommunityProfile.php
deleted file mode 100644
index 367fe713c..000000000
--- a/community_server/src/Model/Entity/CommunityProfile.php
+++ /dev/null
@@ -1,30 +0,0 @@
- true,
- 'profile_img' => true,
- 'profile_desc' => true,
- ];
-}
diff --git a/community_server/src/Model/Entity/ElopageBuy.php b/community_server/src/Model/Entity/ElopageBuy.php
deleted file mode 100644
index eca2f760b..000000000
--- a/community_server/src/Model/Entity/ElopageBuy.php
+++ /dev/null
@@ -1,57 +0,0 @@
- true,
- 'affiliate_program_id' => true,
- 'publisher_id' => true,
- 'order_id' => true,
- 'product_id' => true,
- 'product_price' => true,
- 'payer_email' => true,
- 'publisher_email' => true,
- 'payed' => true,
- 'success_date' => true,
- 'event' => true,
- 'elopage_user' => true,
- 'affiliate_program' => true,
- 'publisher' => true,
- 'order' => true,
- 'product' => true,
- ];
-}
diff --git a/community_server/src/Model/Entity/Operator.php b/community_server/src/Model/Entity/Operator.php
deleted file mode 100644
index 9d5ddd3ca..000000000
--- a/community_server/src/Model/Entity/Operator.php
+++ /dev/null
@@ -1,32 +0,0 @@
- true,
- 'user_pubkey' => true,
- 'operator_type_id' => true,
- 'data_base64' => true,
- 'modified' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/OperatorType.php b/community_server/src/Model/Entity/OperatorType.php
deleted file mode 100644
index 0ca968f47..000000000
--- a/community_server/src/Model/Entity/OperatorType.php
+++ /dev/null
@@ -1,31 +0,0 @@
- true,
- 'text' => true,
- 'operators' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/Role.php b/community_server/src/Model/Entity/Role.php
deleted file mode 100644
index ae0ddd0ba..000000000
--- a/community_server/src/Model/Entity/Role.php
+++ /dev/null
@@ -1,26 +0,0 @@
- true,
- ];
-}
diff --git a/community_server/src/Model/Entity/ServerUser.php b/community_server/src/Model/Entity/ServerUser.php
deleted file mode 100644
index f1d47fd34..000000000
--- a/community_server/src/Model/Entity/ServerUser.php
+++ /dev/null
@@ -1,57 +0,0 @@
- true,
- 'password' => true,
- 'email' => true,
- 'role' => true,
- 'activated' => true,
- 'last_login' => true,
- 'created' => true,
- 'modified' => true
- ];
-
- /**
- * Fields that are excluded from JSON versions of the entity.
- *
- * @var array
- */
- protected $_hidden = [
- 'password'
- ];
-
- protected function _setPassword($password)
- {
- if (strlen($password) > 0) {
- return (new DefaultPasswordHasher)->hash($password);
- }
- }
-}
diff --git a/community_server/src/Model/Entity/StateBalance.php b/community_server/src/Model/Entity/StateBalance.php
deleted file mode 100644
index 334db222f..000000000
--- a/community_server/src/Model/Entity/StateBalance.php
+++ /dev/null
@@ -1,89 +0,0 @@
- true,
- 'modified' => true,
- 'record_date' => true,
- 'amount' => true,
- 'record_date' => true,
- 'state_user' => true
- ];
-
- protected $_virtual = ['decay','amount_float'];
-
- private function convertToTimestamp($dateOrTime)
- {
- if(method_exists($dateOrTime, 'getTimestamp')) {
- return $dateOrTime->getTimestamp();
- } else if(method_exists($dateOrTime, 'i18nFormat')) {
- return $dateOrTime->i18nFormat(Time::UNIX_TIMESTAMP_FORMAT);
- } else {
- return 0;
- }
- }
-
- protected function _getDecay()
- {
- // decay factor in seconds per year
- // q = e^((lg Kn - lg K0) / n)
- // 0.999999978
- //
- // SELECT TIMESTAMPDIFF(SECOND, modified, CURDATE()) AS age_in_seconds from state_balances
- // decay_for_duration = decay_factor^seconds
- // decay = gradido_cent * decay_for_duration
- $startDate = $this->convertToTimestamp($this->record_date);
- if($startDate == 0) {
- return $this->amount;
- }
-
- $decay_duration = intval(Time::now()->getTimestamp() - $startDate);
- if($decay_duration === 0) {
- return $this->amount;
- }
- //return $this->amount;
- return intval($this->amount * pow(0.99999997802044727, $decay_duration));
-
- }
-
- public function partDecay($target_date)
- {
- $decay_duration = intval($this->convertToTimestamp($target_date) - $this->convertToTimestamp($this->record_date));
- if($decay_duration <= 0) {
- return $this->amount;
- }
- //return 0;
- return intval($this->amount * pow(0.99999997802044727, $decay_duration));
- }
-
- public function decayDuration($target_date)
- {
- return intval($this->convertToTimestamp($target_date) - $this->convertToTimestamp($this->record_date));
- }
-}
-
diff --git a/community_server/src/Model/Entity/StateCreated.php b/community_server/src/Model/Entity/StateCreated.php
deleted file mode 100644
index 99c783e6c..000000000
--- a/community_server/src/Model/Entity/StateCreated.php
+++ /dev/null
@@ -1,41 +0,0 @@
- true,
- 'month' => true,
- 'year' => true,
- 'state_user_id' => true,
- 'created' => true,
- 'short_ident_hash' => true,
- 'transaction' => true,
- 'state_user' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/StateError.php b/community_server/src/Model/Entity/StateError.php
deleted file mode 100644
index 448e9ccb3..000000000
--- a/community_server/src/Model/Entity/StateError.php
+++ /dev/null
@@ -1,37 +0,0 @@
- true,
- 'transaction_type_id' => true,
- 'created' => true,
- 'message_json' => true,
- 'state_user' => true,
- 'transaction_type' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/StateGroup.php b/community_server/src/Model/Entity/StateGroup.php
deleted file mode 100644
index c2bdc75fc..000000000
--- a/community_server/src/Model/Entity/StateGroup.php
+++ /dev/null
@@ -1,43 +0,0 @@
- true,
- 'name' => true,
- 'root_public_key' => true,
- 'user_count' => true,
- 'index' => true,
- 'state_group_addresses' => true,
- 'state_users' => true,
- 'transaction_group_creates' => true,
- 'transactions' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/StateGroupAddress.php b/community_server/src/Model/Entity/StateGroupAddress.php
deleted file mode 100644
index e2d669d09..000000000
--- a/community_server/src/Model/Entity/StateGroupAddress.php
+++ /dev/null
@@ -1,35 +0,0 @@
- true,
- 'public_key' => true,
- 'address_type_id' => true,
- 'state_group' => true,
- 'address_type' => true,
- ];
-}
diff --git a/community_server/src/Model/Entity/StateGroupRelationship.php b/community_server/src/Model/Entity/StateGroupRelationship.php
deleted file mode 100644
index 974b1375d..000000000
--- a/community_server/src/Model/Entity/StateGroupRelationship.php
+++ /dev/null
@@ -1,37 +0,0 @@
- true,
- 'state_group2_id' => true,
- 'state_relationship_id' => true,
- 'state_group1' => true,
- 'state_group2' => true,
- 'state_relationship' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/StateRelationshipType.php b/community_server/src/Model/Entity/StateRelationshipType.php
deleted file mode 100644
index f3c70d31e..000000000
--- a/community_server/src/Model/Entity/StateRelationshipType.php
+++ /dev/null
@@ -1,28 +0,0 @@
- true,
- 'text' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/StateUser.php b/community_server/src/Model/Entity/StateUser.php
deleted file mode 100644
index 5fac7cda7..000000000
--- a/community_server/src/Model/Entity/StateUser.php
+++ /dev/null
@@ -1,58 +0,0 @@
- true,
- 'state_group_id' => true,
- 'public_key' => true,
- 'email' => true,
- 'first_name' => true,
- 'last_name' => true,
- 'disabled' => true,
- 'username' => true,
- 'index' => true,
- 'state_group' => true,
- 'state_balances' => true,
- 'state_created' => true,
- 'transaction_creations' => true,
- 'transaction_send_coins' => true
- ];
-
- public function getEmailWithName()
- {
- return $this->first_name . ' ' . $this->last_name . ' <' . $this->email . '>';
- }
-
- public function getNames()
- {
- return $this->first_name . ' ' . $this->last_name;
- }
-}
diff --git a/community_server/src/Model/Entity/StateUserRole.php b/community_server/src/Model/Entity/StateUserRole.php
deleted file mode 100644
index d510bb025..000000000
--- a/community_server/src/Model/Entity/StateUserRole.php
+++ /dev/null
@@ -1,30 +0,0 @@
- true,
- 'role_id' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/StateUserTransaction.php b/community_server/src/Model/Entity/StateUserTransaction.php
deleted file mode 100644
index 9fed345a5..000000000
--- a/community_server/src/Model/Entity/StateUserTransaction.php
+++ /dev/null
@@ -1,37 +0,0 @@
- true,
- 'transaction_id' => true,
- 'transaction_type_id' => true,
- 'state_user' => true,
- 'transaction' => true,
- 'transaction_type' => true,
- ];
-}
diff --git a/community_server/src/Model/Entity/Transaction.php b/community_server/src/Model/Entity/Transaction.php
deleted file mode 100644
index 209b8997e..000000000
--- a/community_server/src/Model/Entity/Transaction.php
+++ /dev/null
@@ -1,53 +0,0 @@
- true,
- 'transaction_type_id' => true,
- 'tx_hash' => true,
- 'memo' => true,
- 'received' => true,
- 'blockchain_type_id' => true,
- 'state_group' => true,
- 'transaction_type' => true,
- 'state_created' => true,
- 'transaction_creations' => true,
- 'transaction_group_addaddress' => true,
- 'transaction_group_allowtrades' => true,
- 'transaction_group_creates' => true,
- 'transaction_send_coins' => true,
- 'transaction_signatures' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/TransactionCreation.php b/community_server/src/Model/Entity/TransactionCreation.php
deleted file mode 100644
index 36aa7ac2d..000000000
--- a/community_server/src/Model/Entity/TransactionCreation.php
+++ /dev/null
@@ -1,39 +0,0 @@
- true,
- 'state_user_id' => true,
- 'amount' => true,
- 'ident_hash' => true,
- 'transaction' => true,
- 'state_user' => true,
- 'target_date' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/TransactionGroupAddaddres.php b/community_server/src/Model/Entity/TransactionGroupAddaddres.php
deleted file mode 100644
index 30819209f..000000000
--- a/community_server/src/Model/Entity/TransactionGroupAddaddres.php
+++ /dev/null
@@ -1,37 +0,0 @@
- true,
- 'address_type_id' => true,
- 'remove_from_group' => true,
- 'public_key' => true,
- 'transaction' => true,
- 'address_type' => true,
- 'state_user_id' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/TransactionGroupAllowtrade.php b/community_server/src/Model/Entity/TransactionGroupAllowtrade.php
deleted file mode 100644
index d097c643f..000000000
--- a/community_server/src/Model/Entity/TransactionGroupAllowtrade.php
+++ /dev/null
@@ -1,35 +0,0 @@
- true,
- 'group_id' => true,
- 'allow' => true,
- 'transaction' => true,
- 'group' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/TransactionGroupCreate.php b/community_server/src/Model/Entity/TransactionGroupCreate.php
deleted file mode 100644
index 26fab510b..000000000
--- a/community_server/src/Model/Entity/TransactionGroupCreate.php
+++ /dev/null
@@ -1,37 +0,0 @@
- true,
- 'group_public_key' => true,
- 'state_group_id' => true,
- 'name' => true,
- 'transaction' => true,
- 'state_group' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/TransactionSendCoin.php b/community_server/src/Model/Entity/TransactionSendCoin.php
deleted file mode 100644
index 4d774501e..000000000
--- a/community_server/src/Model/Entity/TransactionSendCoin.php
+++ /dev/null
@@ -1,43 +0,0 @@
- true,
- 'state_user_id' => true,
- 'receiver_public_key' => true,
- 'receiver_user_id' => true,
- 'amount' => true,
- 'sender_final_balance' => true,
- 'transaction' => true,
- 'state_user' => true,
- 'receiver_user' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/TransactionSignature.php b/community_server/src/Model/Entity/TransactionSignature.php
deleted file mode 100644
index 16bce8b00..000000000
--- a/community_server/src/Model/Entity/TransactionSignature.php
+++ /dev/null
@@ -1,33 +0,0 @@
- true,
- 'signature' => true,
- 'pubkey' => true,
- 'transaction' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/TransactionType.php b/community_server/src/Model/Entity/TransactionType.php
deleted file mode 100644
index b8f13e474..000000000
--- a/community_server/src/Model/Entity/TransactionType.php
+++ /dev/null
@@ -1,31 +0,0 @@
- true,
- 'text' => true,
- 'transactions' => true
- ];
-}
diff --git a/community_server/src/Model/Entity/User.php b/community_server/src/Model/Entity/User.php
deleted file mode 100644
index 352371471..000000000
--- a/community_server/src/Model/Entity/User.php
+++ /dev/null
@@ -1,58 +0,0 @@
- true,
- 'first_name' => true,
- 'last_name' => true,
- 'password' => true,
- 'pubkey' => true,
- 'privkey' => true,
- 'created' => true,
- 'email_checked' => true,
- 'language' => true,
- 'email_opt_in' => true,
- 'user_backups' => true,
- 'user_roles' => true,
- ];
-
- /**
- * Fields that are excluded from JSON versions of the entity.
- *
- * @var array
- */
- protected $_hidden = [
- 'password',
- ];
-}
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php
deleted file mode 100644
index 60fa5f22b..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/BasicTypes.php
+++ /dev/null
@@ -1,39 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0aca030a186772616469646f2f426173696354797065732e70726f746f12" .
- "0d70726f746f2e6772616469646f22380a034b657912110a076564323535" .
- "313918022001280c480012170a0d656432353531395f7265663130180320" .
- "01280c480042050a036b657922580a0d5369676e61747572655061697212" .
- "0e0a067075624b657918012001280c12110a076564323535313918022001" .
- "280c480012170a0d656432353531395f726566313018032001280c480042" .
- "0b0a097369676e6174757265223d0a0c5369676e61747572654d6170122d" .
- "0a077369675061697218012003280b321c2e70726f746f2e677261646964" .
- "6f2e5369676e617475726550616972222b0a0954696d657374616d70120f" .
- "0a077365636f6e6473180120012803120d0a056e616e6f73180220012805" .
- "22230a1054696d657374616d705365636f6e6473120f0a077365636f6e64" .
- "7318012001280322300a0e5472616e73666572416d6f756e74120e0a0670" .
- "75626b657918012001280c120e0a06616d6f756e7418022001281222400a" .
- "08486564657261494412100a0873686172644e756d18012001280312100a" .
- "087265616c6d4e756d18022001280312100a08746f7069634e756d180320" .
- "012803620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php
deleted file mode 100644
index ebe7409db..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoCreation.php
+++ /dev/null
@@ -1,30 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0ab0010a1d6772616469646f2f4772616469646f4372656174696f6e2e70" .
- "726f746f120d70726f746f2e6772616469646f22780a0f4772616469646f" .
- "4372656174696f6e122f0a08726563656976657218012001280b321d2e70" .
- "726f746f2e6772616469646f2e5472616e73666572416d6f756e7412340a" .
- "0b7461726765745f6461746518032001280b321f2e70726f746f2e677261" .
- "6469646f2e54696d657374616d705365636f6e6473620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php
deleted file mode 100644
index 78460bd9f..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransaction.php
+++ /dev/null
@@ -1,29 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0a91010a206772616469646f2f4772616469646f5472616e73616374696f" .
- "6e2e70726f746f120d70726f746f2e6772616469646f22560a1247726164" .
- "69646f5472616e73616374696f6e122c0a077369675f6d61701801200128" .
- "0b321b2e70726f746f2e6772616469646f2e5369676e61747572654d6170" .
- "12120a0a626f64795f627974657318022001280c620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php
deleted file mode 100644
index 6d7e6e375..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GradidoTransfer.php
+++ /dev/null
@@ -1,41 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0ae6030a1d6772616469646f2f4772616469646f5472616e736665722e70" .
- "726f746f120d70726f746f2e6772616469646f22500a0d4c6f63616c5472" .
- "616e73666572122d0a0673656e64657218012001280b321d2e70726f746f" .
- "2e6772616469646f2e5472616e73666572416d6f756e7412100a08726563" .
- "656976657218022001280c22a3010a1243726f737347726f75705472616e" .
- "73666572122d0a0673656e64657218012001280b321d2e70726f746f2e67" .
- "72616469646f2e5472616e73666572416d6f756e7412100a087265636569" .
- "76657218022001280c12130a0b6f746865725f67726f7570180320012809" .
- "12370a157061697265645f7472616e73616374696f6e5f69641804200128" .
- "0b32182e70726f746f2e6772616469646f2e54696d657374616d7022b501" .
- "0a0f4772616469646f5472616e73666572122d0a056c6f63616c18012001" .
- "280b321c2e70726f746f2e6772616469646f2e4c6f63616c5472616e7366" .
- "6572480012340a07696e626f756e6418022001280b32212e70726f746f2e" .
- "6772616469646f2e43726f737347726f75705472616e7366657248001235" .
- "0a086f7574626f756e6418032001280b32212e70726f746f2e6772616469" .
- "646f2e43726f737347726f75705472616e73666572480042060a04646174" .
- "61620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php
deleted file mode 100644
index 929e33b9d..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupFriendsUpdate.php
+++ /dev/null
@@ -1,30 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0ac6010a206772616469646f2f47726f7570467269656e64735570646174" .
- "652e70726f746f120d70726f746f2e6772616469646f228a010a1247726f" .
- "7570467269656e6473557064617465120d0a0567726f7570180120012809" .
- "12380a06616374696f6e18022001280e32282e70726f746f2e6772616469" .
- "646f2e47726f7570467269656e64735570646174652e416374696f6e222b" .
- "0a06416374696f6e120e0a0a4144445f465249454e44100012110a0d5245" .
- "4d4f56455f465249454e441001620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php
deleted file mode 100644
index c2a308292..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/GroupMemberUpdate.php
+++ /dev/null
@@ -1,36 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0ad2020a1f6772616469646f2f47726f75704d656d626572557064617465" .
- "2e70726f746f120d70726f746f2e6772616469646f2297020a1147726f75" .
- "704d656d62657255706461746512130a0b757365725f7075626b65791801" .
- "2001280c124d0a126d656d6265725f7570646174655f7479706518022001" .
- "280e32312e70726f746f2e6772616469646f2e47726f75704d656d626572" .
- "5570646174652e4d656d6265725570646174655479706512370a15706169" .
- "7265645f7472616e73616374696f6e5f696418032001280b32182e70726f" .
- "746f2e6772616469646f2e54696d657374616d7012140a0c746172676574" .
- "5f67726f7570180420012809224f0a104d656d6265725570646174655479" .
- "7065120c0a084144445f55534552100012150a114d4f56455f555345525f" .
- "494e424f554e44100112160a124d4f56455f555345525f4f5554424f554e" .
- "441002620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php
deleted file mode 100644
index aec11c28b..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeBody.php
+++ /dev/null
@@ -1,32 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0ab9010a1c6772616469646f2f4d616e6167654e6f6465426f64792e7072" .
- "6f746f120d70726f746f2e6772616469646f1a186772616469646f2f4261" .
- "73696354797065732e70726f746f22680a0e4d616e6167654e6f6465426f" .
- "647912160a0e76657273696f6e5f6e756d62657218012001280412360a09" .
- "67726f75705f61646418032001280b32212e70726f746f2e677261646964" .
- "6f2e4d616e6167654e6f646547726f7570416464480042060a0464617461" .
- "620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php
deleted file mode 100644
index ffb25984d..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeGroupAdd.php
+++ /dev/null
@@ -1,30 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0aaa010a206772616469646f2f4d616e6167654e6f646547726f75704164" .
- "642e70726f746f120d70726f746f2e6772616469646f226f0a124d616e61" .
- "67654e6f646547726f757041646412120a0a67726f75705f6e616d651801" .
- "2001280912130a0b67726f75705f616c69617318022001280912300a0f68" .
- "65646572615f746f7069635f696418032001280b32172e70726f746f2e67" .
- "72616469646f2e4865646572614944620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php
deleted file mode 100644
index ef7dca297..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/ManageNodeRequest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0ade020a1f6772616469646f2f4d616e6167654e6f646552657175657374" .
- "2e70726f746f120d70726f746f2e6772616469646f22550a114d616e6167" .
- "654e6f646552657175657374122c0a077369675f6d617018012001280b32" .
- "1b2e70726f746f2e6772616469646f2e5369676e61747572654d61701212" .
- "0a0a626f64795f627974657318022001280c22cc010a124d616e6167654e" .
- "6f6465526573706f6e7365120f0a0773756363657373180120012808123a" .
- "0a056572726f7218022001280e322b2e70726f746f2e6772616469646f2e" .
- "4d616e6167654e6f6465526573706f6e73652e4572726f72436f64652269" .
- "0a094572726f72436f646512100a0c494e56414c49445f424f4459100012" .
- "150a11494e56414c49445f5349474e4154555245100112140a105349474e" .
- "45525f4e4f545f4b4e4f574e1002121d0a1947524f55505f414c4941535f" .
- "414c52454144595f45584953541003620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php b/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php
deleted file mode 100644
index f55b61f4d..000000000
--- a/community_server/src/Model/Messages/GPBMetadata/Gradido/TransactionBody.php
+++ /dev/null
@@ -1,46 +0,0 @@
-internalAddGeneratedFile(hex2bin(
- "0a92040a1d6772616469646f2f5472616e73616374696f6e426f64792e70" .
- "726f746f120d70726f746f2e6772616469646f1a1d6772616469646f2f47" .
- "72616469646f4372656174696f6e2e70726f746f1a206772616469646f2f" .
- "47726f7570467269656e64735570646174652e70726f746f1a1f67726164" .
- "69646f2f47726f75704d656d6265725570646174652e70726f746f1a1867" .
- "72616469646f2f426173696354797065732e70726f746f22dd020a0f5472" .
- "616e73616374696f6e426f6479120c0a046d656d6f18012001280912300a" .
- "076372656174656418022001280b321f2e70726f746f2e6772616469646f" .
- "2e54696d657374616d705365636f6e647312160a0e76657273696f6e5f6e" .
- "756d62657218032001280412320a087472616e7366657218062001280b32" .
- "1e2e70726f746f2e6772616469646f2e4772616469646f5472616e736665" .
- "72480012320a086372656174696f6e18072001280b321e2e70726f746f2e" .
- "6772616469646f2e4772616469646f4372656174696f6e480012410a1467" .
- "726f75705f667269656e64735f75706461746518082001280b32212e7072" .
- "6f746f2e6772616469646f2e47726f7570467269656e6473557064617465" .
- "4800123f0a1367726f75705f6d656d6265725f7570646174651809200128" .
- "0b32202e70726f746f2e6772616469646f2e47726f75704d656d62657255" .
- "7064617465480042060a0464617461620670726f746f33"
- ), true);
-
- static::$is_initialized = true;
- }
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php
deleted file mode 100644
index 781ac8f25..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/CrossGroupTransfer.php
+++ /dev/null
@@ -1,146 +0,0 @@
-proto.gradido.CrossGroupTransfer
- */
-class CrossGroupTransfer extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field .proto.gradido.TransferAmount sender = 1;
- */
- private $sender = null;
- /**
- * Generated from protobuf field bytes receiver = 2;
- */
- private $receiver = '';
- /**
- * Generated from protobuf field string other_group = 3;
- */
- private $other_group = '';
- /**
- * this matches related OutboundTransfer.paired_transaction_id
- *
- * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4;
- */
- private $paired_transaction_id = null;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type \Proto\Gradido\TransferAmount $sender
- * @type string $receiver
- * @type string $other_group
- * @type \Proto\Gradido\Timestamp $paired_transaction_id
- * this matches related OutboundTransfer.paired_transaction_id
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\GradidoTransfer::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.TransferAmount sender = 1;
- * @return \Proto\Gradido\TransferAmount
- */
- public function getSender()
- {
- return $this->sender;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.TransferAmount sender = 1;
- * @param \Proto\Gradido\TransferAmount $var
- * @return $this
- */
- public function setSender($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class);
- $this->sender = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field bytes receiver = 2;
- * @return string
- */
- public function getReceiver()
- {
- return $this->receiver;
- }
-
- /**
- * Generated from protobuf field bytes receiver = 2;
- * @param string $var
- * @return $this
- */
- public function setReceiver($var)
- {
- GPBUtil::checkString($var, False);
- $this->receiver = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field string other_group = 3;
- * @return string
- */
- public function getOtherGroup()
- {
- return $this->other_group;
- }
-
- /**
- * Generated from protobuf field string other_group = 3;
- * @param string $var
- * @return $this
- */
- public function setOtherGroup($var)
- {
- GPBUtil::checkString($var, True);
- $this->other_group = $var;
-
- return $this;
- }
-
- /**
- * this matches related OutboundTransfer.paired_transaction_id
- *
- * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4;
- * @return \Proto\Gradido\Timestamp
- */
- public function getPairedTransactionId()
- {
- return $this->paired_transaction_id;
- }
-
- /**
- * this matches related OutboundTransfer.paired_transaction_id
- *
- * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 4;
- * @param \Proto\Gradido\Timestamp $var
- * @return $this
- */
- public function setPairedTransactionId($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\Timestamp::class);
- $this->paired_transaction_id = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php
deleted file mode 100644
index 9b4c3208d..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/GradidoCreation.php
+++ /dev/null
@@ -1,102 +0,0 @@
-proto.gradido.GradidoCreation
- */
-class GradidoCreation extends \Google\Protobuf\Internal\Message
-{
- /**
- * 40 Byte
- *
- * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1;
- */
- private $receiver = null;
- /**
- * 8 Byte
- *
- * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3;
- */
- private $target_date = null;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type \Proto\Gradido\TransferAmount $receiver
- * 40 Byte
- * @type \Proto\Gradido\TimestampSeconds $target_date
- * 8 Byte
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\GradidoCreation::initOnce();
- parent::__construct($data);
- }
-
- /**
- * 40 Byte
- *
- * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1;
- * @return \Proto\Gradido\TransferAmount
- */
- public function getReceiver()
- {
- return $this->receiver;
- }
-
- /**
- * 40 Byte
- *
- * Generated from protobuf field .proto.gradido.TransferAmount receiver = 1;
- * @param \Proto\Gradido\TransferAmount $var
- * @return $this
- */
- public function setReceiver($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class);
- $this->receiver = $var;
-
- return $this;
- }
-
- /**
- * 8 Byte
- *
- * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3;
- * @return \Proto\Gradido\TimestampSeconds
- */
- public function getTargetDate()
- {
- return $this->target_date;
- }
-
- /**
- * 8 Byte
- *
- * Generated from protobuf field .proto.gradido.TimestampSeconds target_date = 3;
- * @param \Proto\Gradido\TimestampSeconds $var
- * @return $this
- */
- public function setTargetDate($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\TimestampSeconds::class);
- $this->target_date = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php
deleted file mode 100644
index b4b34c77e..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransaction.php
+++ /dev/null
@@ -1,116 +0,0 @@
-proto.gradido.GradidoTransaction
- */
-class GradidoTransaction extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1;
- */
- private $sig_map = null;
- /**
- * TODO: consider if having concrete type wouldn't be better;
- * having bytes would better show what is signed, still for
- * blockchain it doesn't matter, as it has to be serialized again
- * when validating
- * UNICORN ANSWER:
- * Maybe but hedera has at first concrete type and has depracted that now, so is must
- * be reason for that
- *
- * Generated from protobuf field bytes body_bytes = 2;
- */
- private $body_bytes = '';
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type \Proto\Gradido\SignatureMap $sig_map
- * @type string $body_bytes
- * TODO: consider if having concrete type wouldn't be better;
- * having bytes would better show what is signed, still for
- * blockchain it doesn't matter, as it has to be serialized again
- * when validating
- * UNICORN ANSWER:
- * Maybe but hedera has at first concrete type and has depracted that now, so is must
- * be reason for that
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\GradidoTransaction::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1;
- * @return \Proto\Gradido\SignatureMap
- */
- public function getSigMap()
- {
- return $this->sig_map;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1;
- * @param \Proto\Gradido\SignatureMap $var
- * @return $this
- */
- public function setSigMap($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\SignatureMap::class);
- $this->sig_map = $var;
-
- return $this;
- }
-
- /**
- * TODO: consider if having concrete type wouldn't be better;
- * having bytes would better show what is signed, still for
- * blockchain it doesn't matter, as it has to be serialized again
- * when validating
- * UNICORN ANSWER:
- * Maybe but hedera has at first concrete type and has depracted that now, so is must
- * be reason for that
- *
- * Generated from protobuf field bytes body_bytes = 2;
- * @return string
- */
- public function getBodyBytes()
- {
- return $this->body_bytes;
- }
-
- /**
- * TODO: consider if having concrete type wouldn't be better;
- * having bytes would better show what is signed, still for
- * blockchain it doesn't matter, as it has to be serialized again
- * when validating
- * UNICORN ANSWER:
- * Maybe but hedera has at first concrete type and has depracted that now, so is must
- * be reason for that
- *
- * Generated from protobuf field bytes body_bytes = 2;
- * @param string $var
- * @return $this
- */
- public function setBodyBytes($var)
- {
- GPBUtil::checkString($var, False);
- $this->body_bytes = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php
deleted file mode 100644
index a76954c2e..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/GradidoTransfer.php
+++ /dev/null
@@ -1,109 +0,0 @@
-proto.gradido.GradidoTransfer
- */
-class GradidoTransfer extends \Google\Protobuf\Internal\Message
-{
- protected $data;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type \Proto\Gradido\LocalTransfer $local
- * @type \Proto\Gradido\CrossGroupTransfer $inbound
- * @type \Proto\Gradido\CrossGroupTransfer $outbound
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\GradidoTransfer::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.LocalTransfer local = 1;
- * @return \Proto\Gradido\LocalTransfer
- */
- public function getLocal()
- {
- return $this->readOneof(1);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.LocalTransfer local = 1;
- * @param \Proto\Gradido\LocalTransfer $var
- * @return $this
- */
- public function setLocal($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\LocalTransfer::class);
- $this->writeOneof(1, $var);
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.CrossGroupTransfer inbound = 2;
- * @return \Proto\Gradido\CrossGroupTransfer
- */
- public function getInbound()
- {
- return $this->readOneof(2);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.CrossGroupTransfer inbound = 2;
- * @param \Proto\Gradido\CrossGroupTransfer $var
- * @return $this
- */
- public function setInbound($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\CrossGroupTransfer::class);
- $this->writeOneof(2, $var);
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.CrossGroupTransfer outbound = 3;
- * @return \Proto\Gradido\CrossGroupTransfer
- */
- public function getOutbound()
- {
- return $this->readOneof(3);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.CrossGroupTransfer outbound = 3;
- * @param \Proto\Gradido\CrossGroupTransfer $var
- * @return $this
- */
- public function setOutbound($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\CrossGroupTransfer::class);
- $this->writeOneof(3, $var);
-
- return $this;
- }
-
- /**
- * @return string
- */
- public function getData()
- {
- return $this->whichOneof("data");
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php
deleted file mode 100644
index 22e86d3e1..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate.php
+++ /dev/null
@@ -1,92 +0,0 @@
-proto.gradido.GroupFriendsUpdate
- */
-class GroupFriendsUpdate extends \Google\Protobuf\Internal\Message
-{
- /**
- * char[16], alias
- *
- * Generated from protobuf field string group = 1;
- */
- private $group = '';
- /**
- * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2;
- */
- private $action = 0;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type string $group
- * char[16], alias
- * @type int $action
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\GroupFriendsUpdate::initOnce();
- parent::__construct($data);
- }
-
- /**
- * char[16], alias
- *
- * Generated from protobuf field string group = 1;
- * @return string
- */
- public function getGroup()
- {
- return $this->group;
- }
-
- /**
- * char[16], alias
- *
- * Generated from protobuf field string group = 1;
- * @param string $var
- * @return $this
- */
- public function setGroup($var)
- {
- GPBUtil::checkString($var, True);
- $this->group = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2;
- * @return int
- */
- public function getAction()
- {
- return $this->action;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GroupFriendsUpdate.Action action = 2;
- * @param int $var
- * @return $this
- */
- public function setAction($var)
- {
- GPBUtil::checkEnum($var, \Proto\Gradido\GroupFriendsUpdate_Action::class);
- $this->action = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php
deleted file mode 100644
index 2a3396c55..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate/Action.php
+++ /dev/null
@@ -1,51 +0,0 @@
-proto.gradido.GroupFriendsUpdate.Action
- */
-class Action
-{
- /**
- * Generated from protobuf enum ADD_FRIEND = 0;
- */
- const ADD_FRIEND = 0;
- /**
- * Generated from protobuf enum REMOVE_FRIEND = 1;
- */
- const REMOVE_FRIEND = 1;
-
- private static $valueToName = [
- self::ADD_FRIEND => 'ADD_FRIEND',
- self::REMOVE_FRIEND => 'REMOVE_FRIEND',
- ];
-
- public static function name($value)
- {
- if (!isset(self::$valueToName[$value])) {
- throw new UnexpectedValueException(sprintf(
- 'Enum %s has no name defined for value %s', __CLASS__, $value));
- }
- return self::$valueToName[$value];
- }
-
-
- public static function value($name)
- {
- $const = __CLASS__ . '::' . strtoupper($name);
- if (!defined($const)) {
- throw new UnexpectedValueException(sprintf(
- 'Enum %s has no value defined for name %s', __CLASS__, $name));
- }
- return constant($const);
- }
-}
-
-// Adding a class alias for backwards compatibility with the previous class name.
-class_alias(Action::class, \Proto\Gradido\GroupFriendsUpdate_Action::class);
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php b/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php
deleted file mode 100644
index 24f8cef70..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/GroupFriendsUpdate_Action.php
+++ /dev/null
@@ -1,16 +0,0 @@
-proto.gradido.GroupMemberUpdate
- */
-class GroupMemberUpdate extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field bytes user_pubkey = 1;
- */
- private $user_pubkey = '';
- /**
- * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2;
- */
- private $member_update_type = 0;
- /**
- * this only makes sense for user move, TODO: probably restructure
- *
- * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3;
- */
- private $paired_transaction_id = null;
- /**
- * Generated from protobuf field string target_group = 4;
- */
- private $target_group = '';
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type string $user_pubkey
- * @type int $member_update_type
- * @type \Proto\Gradido\Timestamp $paired_transaction_id
- * this only makes sense for user move, TODO: probably restructure
- * @type string $target_group
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\GroupMemberUpdate::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field bytes user_pubkey = 1;
- * @return string
- */
- public function getUserPubkey()
- {
- return $this->user_pubkey;
- }
-
- /**
- * Generated from protobuf field bytes user_pubkey = 1;
- * @param string $var
- * @return $this
- */
- public function setUserPubkey($var)
- {
- GPBUtil::checkString($var, False);
- $this->user_pubkey = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2;
- * @return int
- */
- public function getMemberUpdateType()
- {
- return $this->member_update_type;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GroupMemberUpdate.MemberUpdateType member_update_type = 2;
- * @param int $var
- * @return $this
- */
- public function setMemberUpdateType($var)
- {
- GPBUtil::checkEnum($var, \Proto\Gradido\GroupMemberUpdate_MemberUpdateType::class);
- $this->member_update_type = $var;
-
- return $this;
- }
-
- /**
- * this only makes sense for user move, TODO: probably restructure
- *
- * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3;
- * @return \Proto\Gradido\Timestamp
- */
- public function getPairedTransactionId()
- {
- return $this->paired_transaction_id;
- }
-
- /**
- * this only makes sense for user move, TODO: probably restructure
- *
- * Generated from protobuf field .proto.gradido.Timestamp paired_transaction_id = 3;
- * @param \Proto\Gradido\Timestamp $var
- * @return $this
- */
- public function setPairedTransactionId($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\Timestamp::class);
- $this->paired_transaction_id = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field string target_group = 4;
- * @return string
- */
- public function getTargetGroup()
- {
- return $this->target_group;
- }
-
- /**
- * Generated from protobuf field string target_group = 4;
- * @param string $var
- * @return $this
- */
- public function setTargetGroup($var)
- {
- GPBUtil::checkString($var, True);
- $this->target_group = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php b/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php
deleted file mode 100644
index 57580cd75..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate/MemberUpdateType.php
+++ /dev/null
@@ -1,56 +0,0 @@
-proto.gradido.GroupMemberUpdate.MemberUpdateType
- */
-class MemberUpdateType
-{
- /**
- * Generated from protobuf enum ADD_USER = 0;
- */
- const ADD_USER = 0;
- /**
- * Generated from protobuf enum MOVE_USER_INBOUND = 1;
- */
- const MOVE_USER_INBOUND = 1;
- /**
- * Generated from protobuf enum MOVE_USER_OUTBOUND = 2;
- */
- const MOVE_USER_OUTBOUND = 2;
-
- private static $valueToName = [
- self::ADD_USER => 'ADD_USER',
- self::MOVE_USER_INBOUND => 'MOVE_USER_INBOUND',
- self::MOVE_USER_OUTBOUND => 'MOVE_USER_OUTBOUND',
- ];
-
- public static function name($value)
- {
- if (!isset(self::$valueToName[$value])) {
- throw new UnexpectedValueException(sprintf(
- 'Enum %s has no name defined for value %s', __CLASS__, $value));
- }
- return self::$valueToName[$value];
- }
-
-
- public static function value($name)
- {
- $const = __CLASS__ . '::' . strtoupper($name);
- if (!defined($const)) {
- throw new UnexpectedValueException(sprintf(
- 'Enum %s has no value defined for name %s', __CLASS__, $name));
- }
- return constant($const);
- }
-}
-
-// Adding a class alias for backwards compatibility with the previous class name.
-class_alias(MemberUpdateType::class, \Proto\Gradido\GroupMemberUpdate_MemberUpdateType::class);
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php b/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php
deleted file mode 100644
index b7080cf75..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/GroupMemberUpdate_MemberUpdateType.php
+++ /dev/null
@@ -1,16 +0,0 @@
-proto.gradido.HederaID
- */
-class HederaID extends \Google\Protobuf\Internal\Message
-{
- /**
- * The shard number (nonnegative)
- *
- * Generated from protobuf field int64 shardNum = 1;
- */
- private $shardNum = 0;
- /**
- * The realm number (nonnegative)
- *
- * Generated from protobuf field int64 realmNum = 2;
- */
- private $realmNum = 0;
- /**
- * Unique topic identifier within a realm (nonnegative).
- *
- * Generated from protobuf field int64 topicNum = 3;
- */
- private $topicNum = 0;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type int|string $shardNum
- * The shard number (nonnegative)
- * @type int|string $realmNum
- * The realm number (nonnegative)
- * @type int|string $topicNum
- * Unique topic identifier within a realm (nonnegative).
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\BasicTypes::initOnce();
- parent::__construct($data);
- }
-
- /**
- * The shard number (nonnegative)
- *
- * Generated from protobuf field int64 shardNum = 1;
- * @return int|string
- */
- public function getShardNum()
- {
- return $this->shardNum;
- }
-
- /**
- * The shard number (nonnegative)
- *
- * Generated from protobuf field int64 shardNum = 1;
- * @param int|string $var
- * @return $this
- */
- public function setShardNum($var)
- {
- GPBUtil::checkInt64($var);
- $this->shardNum = $var;
-
- return $this;
- }
-
- /**
- * The realm number (nonnegative)
- *
- * Generated from protobuf field int64 realmNum = 2;
- * @return int|string
- */
- public function getRealmNum()
- {
- return $this->realmNum;
- }
-
- /**
- * The realm number (nonnegative)
- *
- * Generated from protobuf field int64 realmNum = 2;
- * @param int|string $var
- * @return $this
- */
- public function setRealmNum($var)
- {
- GPBUtil::checkInt64($var);
- $this->realmNum = $var;
-
- return $this;
- }
-
- /**
- * Unique topic identifier within a realm (nonnegative).
- *
- * Generated from protobuf field int64 topicNum = 3;
- * @return int|string
- */
- public function getTopicNum()
- {
- return $this->topicNum;
- }
-
- /**
- * Unique topic identifier within a realm (nonnegative).
- *
- * Generated from protobuf field int64 topicNum = 3;
- * @param int|string $var
- * @return $this
- */
- public function setTopicNum($var)
- {
- GPBUtil::checkInt64($var);
- $this->topicNum = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/Key.php b/community_server/src/Model/Messages/Proto/Gradido/Key.php
deleted file mode 100644
index 4c32e0083..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/Key.php
+++ /dev/null
@@ -1,96 +0,0 @@
-proto.gradido.Key
- */
-class Key extends \Google\Protobuf\Internal\Message
-{
- protected $key;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type string $ed25519
- * ed25519 signature (libsodium default)
- * @type string $ed25519_ref10
- * ed25519 ref10 signature
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\BasicTypes::initOnce();
- parent::__construct($data);
- }
-
- /**
- * ed25519 signature (libsodium default)
- *
- * Generated from protobuf field bytes ed25519 = 2;
- * @return string
- */
- public function getEd25519()
- {
- return $this->readOneof(2);
- }
-
- /**
- * ed25519 signature (libsodium default)
- *
- * Generated from protobuf field bytes ed25519 = 2;
- * @param string $var
- * @return $this
- */
- public function setEd25519($var)
- {
- GPBUtil::checkString($var, False);
- $this->writeOneof(2, $var);
-
- return $this;
- }
-
- /**
- * ed25519 ref10 signature
- *
- * Generated from protobuf field bytes ed25519_ref10 = 3;
- * @return string
- */
- public function getEd25519Ref10()
- {
- return $this->readOneof(3);
- }
-
- /**
- * ed25519 ref10 signature
- *
- * Generated from protobuf field bytes ed25519_ref10 = 3;
- * @param string $var
- * @return $this
- */
- public function setEd25519Ref10($var)
- {
- GPBUtil::checkString($var, False);
- $this->writeOneof(3, $var);
-
- return $this;
- }
-
- /**
- * @return string
- */
- public function getKey()
- {
- return $this->whichOneof("key");
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php b/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php
deleted file mode 100644
index 58f5e23ae..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/LocalTransfer.php
+++ /dev/null
@@ -1,85 +0,0 @@
-proto.gradido.LocalTransfer
- */
-class LocalTransfer extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field .proto.gradido.TransferAmount sender = 1;
- */
- private $sender = null;
- /**
- * Generated from protobuf field bytes receiver = 2;
- */
- private $receiver = '';
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type \Proto\Gradido\TransferAmount $sender
- * @type string $receiver
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\GradidoTransfer::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.TransferAmount sender = 1;
- * @return \Proto\Gradido\TransferAmount
- */
- public function getSender()
- {
- return $this->sender;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.TransferAmount sender = 1;
- * @param \Proto\Gradido\TransferAmount $var
- * @return $this
- */
- public function setSender($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\TransferAmount::class);
- $this->sender = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field bytes receiver = 2;
- * @return string
- */
- public function getReceiver()
- {
- return $this->receiver;
- }
-
- /**
- * Generated from protobuf field bytes receiver = 2;
- * @param string $var
- * @return $this
- */
- public function setReceiver($var)
- {
- GPBUtil::checkString($var, False);
- $this->receiver = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php
deleted file mode 100644
index eed599868..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeBody.php
+++ /dev/null
@@ -1,90 +0,0 @@
-proto.gradido.ManageNodeBody
- */
-class ManageNodeBody extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field uint64 version_number = 1;
- */
- private $version_number = 0;
- protected $data;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type int|string $version_number
- * @type \Proto\Gradido\ManageNodeGroupAdd $group_add
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\ManageNodeBody::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field uint64 version_number = 1;
- * @return int|string
- */
- public function getVersionNumber()
- {
- return $this->version_number;
- }
-
- /**
- * Generated from protobuf field uint64 version_number = 1;
- * @param int|string $var
- * @return $this
- */
- public function setVersionNumber($var)
- {
- GPBUtil::checkUint64($var);
- $this->version_number = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.ManageNodeGroupAdd group_add = 3;
- * @return \Proto\Gradido\ManageNodeGroupAdd
- */
- public function getGroupAdd()
- {
- return $this->readOneof(3);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.ManageNodeGroupAdd group_add = 3;
- * @param \Proto\Gradido\ManageNodeGroupAdd $var
- * @return $this
- */
- public function setGroupAdd($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\ManageNodeGroupAdd::class);
- $this->writeOneof(3, $var);
-
- return $this;
- }
-
- /**
- * @return string
- */
- public function getData()
- {
- return $this->whichOneof("data");
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php
deleted file mode 100644
index 777075066..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeGroupAdd.php
+++ /dev/null
@@ -1,119 +0,0 @@
-proto.gradido.ManageNodeGroupAdd
- */
-class ManageNodeGroupAdd extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field string group_name = 1;
- */
- private $group_name = '';
- /**
- * Generated from protobuf field string group_alias = 2;
- */
- private $group_alias = '';
- /**
- *string parent_group_alias = 4;
- *
- * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3;
- */
- private $hedera_topic_id = null;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type string $group_name
- * @type string $group_alias
- * @type \Proto\Gradido\HederaID $hedera_topic_id
- * string parent_group_alias = 4;
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\ManageNodeGroupAdd::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field string group_name = 1;
- * @return string
- */
- public function getGroupName()
- {
- return $this->group_name;
- }
-
- /**
- * Generated from protobuf field string group_name = 1;
- * @param string $var
- * @return $this
- */
- public function setGroupName($var)
- {
- GPBUtil::checkString($var, True);
- $this->group_name = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field string group_alias = 2;
- * @return string
- */
- public function getGroupAlias()
- {
- return $this->group_alias;
- }
-
- /**
- * Generated from protobuf field string group_alias = 2;
- * @param string $var
- * @return $this
- */
- public function setGroupAlias($var)
- {
- GPBUtil::checkString($var, True);
- $this->group_alias = $var;
-
- return $this;
- }
-
- /**
- *string parent_group_alias = 4;
- *
- * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3;
- * @return \Proto\Gradido\HederaID
- */
- public function getHederaTopicId()
- {
- return $this->hedera_topic_id;
- }
-
- /**
- *string parent_group_alias = 4;
- *
- * Generated from protobuf field .proto.gradido.HederaID hedera_topic_id = 3;
- * @param \Proto\Gradido\HederaID $var
- * @return $this
- */
- public function setHederaTopicId($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\HederaID::class);
- $this->hedera_topic_id = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php
deleted file mode 100644
index 6699b98c5..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeRequest.php
+++ /dev/null
@@ -1,92 +0,0 @@
-proto.gradido.ManageNodeRequest
- */
-class ManageNodeRequest extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1;
- */
- private $sig_map = null;
- /**
- * ManageNodeBody
- *
- * Generated from protobuf field bytes body_bytes = 2;
- */
- private $body_bytes = '';
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type \Proto\Gradido\SignatureMap $sig_map
- * @type string $body_bytes
- * ManageNodeBody
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\ManageNodeRequest::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1;
- * @return \Proto\Gradido\SignatureMap
- */
- public function getSigMap()
- {
- return $this->sig_map;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.SignatureMap sig_map = 1;
- * @param \Proto\Gradido\SignatureMap $var
- * @return $this
- */
- public function setSigMap($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\SignatureMap::class);
- $this->sig_map = $var;
-
- return $this;
- }
-
- /**
- * ManageNodeBody
- *
- * Generated from protobuf field bytes body_bytes = 2;
- * @return string
- */
- public function getBodyBytes()
- {
- return $this->body_bytes;
- }
-
- /**
- * ManageNodeBody
- *
- * Generated from protobuf field bytes body_bytes = 2;
- * @param string $var
- * @return $this
- */
- public function setBodyBytes($var)
- {
- GPBUtil::checkString($var, False);
- $this->body_bytes = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php
deleted file mode 100644
index c7a4f80a5..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse.php
+++ /dev/null
@@ -1,85 +0,0 @@
-proto.gradido.ManageNodeResponse
- */
-class ManageNodeResponse extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field bool success = 1;
- */
- private $success = false;
- /**
- * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2;
- */
- private $error = 0;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type bool $success
- * @type int $error
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\ManageNodeRequest::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field bool success = 1;
- * @return bool
- */
- public function getSuccess()
- {
- return $this->success;
- }
-
- /**
- * Generated from protobuf field bool success = 1;
- * @param bool $var
- * @return $this
- */
- public function setSuccess($var)
- {
- GPBUtil::checkBool($var);
- $this->success = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2;
- * @return int
- */
- public function getError()
- {
- return $this->error;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.ManageNodeResponse.ErrorCode error = 2;
- * @param int $var
- * @return $this
- */
- public function setError($var)
- {
- GPBUtil::checkEnum($var, \Proto\Gradido\ManageNodeResponse_ErrorCode::class);
- $this->error = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php
deleted file mode 100644
index ab352829e..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse/ErrorCode.php
+++ /dev/null
@@ -1,61 +0,0 @@
-proto.gradido.ManageNodeResponse.ErrorCode
- */
-class ErrorCode
-{
- /**
- * Generated from protobuf enum INVALID_BODY = 0;
- */
- const INVALID_BODY = 0;
- /**
- * Generated from protobuf enum INVALID_SIGNATURE = 1;
- */
- const INVALID_SIGNATURE = 1;
- /**
- * Generated from protobuf enum SIGNER_NOT_KNOWN = 2;
- */
- const SIGNER_NOT_KNOWN = 2;
- /**
- * Generated from protobuf enum GROUP_ALIAS_ALREADY_EXIST = 3;
- */
- const GROUP_ALIAS_ALREADY_EXIST = 3;
-
- private static $valueToName = [
- self::INVALID_BODY => 'INVALID_BODY',
- self::INVALID_SIGNATURE => 'INVALID_SIGNATURE',
- self::SIGNER_NOT_KNOWN => 'SIGNER_NOT_KNOWN',
- self::GROUP_ALIAS_ALREADY_EXIST => 'GROUP_ALIAS_ALREADY_EXIST',
- ];
-
- public static function name($value)
- {
- if (!isset(self::$valueToName[$value])) {
- throw new UnexpectedValueException(sprintf(
- 'Enum %s has no name defined for value %s', __CLASS__, $value));
- }
- return self::$valueToName[$value];
- }
-
-
- public static function value($name)
- {
- $const = __CLASS__ . '::' . strtoupper($name);
- if (!defined($const)) {
- throw new UnexpectedValueException(sprintf(
- 'Enum %s has no value defined for name %s', __CLASS__, $name));
- }
- return constant($const);
- }
-}
-
-// Adding a class alias for backwards compatibility with the previous class name.
-class_alias(ErrorCode::class, \Proto\Gradido\ManageNodeResponse_ErrorCode::class);
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php b/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php
deleted file mode 100644
index 8a7db7515..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/ManageNodeResponse_ErrorCode.php
+++ /dev/null
@@ -1,16 +0,0 @@
-proto.gradido.SignatureMap
- */
-class SignatureMap extends \Google\Protobuf\Internal\Message
-{
- /**
- * Each signature pair corresponds to a unique Key required to sign the transaction.
- *
- * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1;
- */
- private $sigPair;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type \Proto\Gradido\SignaturePair[]|\Google\Protobuf\Internal\RepeatedField $sigPair
- * Each signature pair corresponds to a unique Key required to sign the transaction.
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\BasicTypes::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Each signature pair corresponds to a unique Key required to sign the transaction.
- *
- * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1;
- * @return \Google\Protobuf\Internal\RepeatedField
- */
- public function getSigPair()
- {
- return $this->sigPair;
- }
-
- /**
- * Each signature pair corresponds to a unique Key required to sign the transaction.
- *
- * Generated from protobuf field repeated .proto.gradido.SignaturePair sigPair = 1;
- * @param \Proto\Gradido\SignaturePair[]|\Google\Protobuf\Internal\RepeatedField $var
- * @return $this
- */
- public function setSigPair($var)
- {
- $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Proto\Gradido\SignaturePair::class);
- $this->sigPair = $arr;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php b/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php
deleted file mode 100644
index 2ef0e81c5..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/SignaturePair.php
+++ /dev/null
@@ -1,123 +0,0 @@
-proto.gradido.SignaturePair
- */
-class SignaturePair extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field bytes pubKey = 1;
- */
- private $pubKey = '';
- protected $signature;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type string $pubKey
- * @type string $ed25519
- * ed25519 signature (libsodium default)
- * @type string $ed25519_ref10
- * ed25519 ref10 signature
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\BasicTypes::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field bytes pubKey = 1;
- * @return string
- */
- public function getPubKey()
- {
- return $this->pubKey;
- }
-
- /**
- * Generated from protobuf field bytes pubKey = 1;
- * @param string $var
- * @return $this
- */
- public function setPubKey($var)
- {
- GPBUtil::checkString($var, False);
- $this->pubKey = $var;
-
- return $this;
- }
-
- /**
- * ed25519 signature (libsodium default)
- *
- * Generated from protobuf field bytes ed25519 = 2;
- * @return string
- */
- public function getEd25519()
- {
- return $this->readOneof(2);
- }
-
- /**
- * ed25519 signature (libsodium default)
- *
- * Generated from protobuf field bytes ed25519 = 2;
- * @param string $var
- * @return $this
- */
- public function setEd25519($var)
- {
- GPBUtil::checkString($var, False);
- $this->writeOneof(2, $var);
-
- return $this;
- }
-
- /**
- * ed25519 ref10 signature
- *
- * Generated from protobuf field bytes ed25519_ref10 = 3;
- * @return string
- */
- public function getEd25519Ref10()
- {
- return $this->readOneof(3);
- }
-
- /**
- * ed25519 ref10 signature
- *
- * Generated from protobuf field bytes ed25519_ref10 = 3;
- * @param string $var
- * @return $this
- */
- public function setEd25519Ref10($var)
- {
- GPBUtil::checkString($var, False);
- $this->writeOneof(3, $var);
-
- return $this;
- }
-
- /**
- * @return string
- */
- public function getSignature()
- {
- return $this->whichOneof("signature");
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php b/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php
deleted file mode 100644
index ae3ecea0e..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/Timestamp.php
+++ /dev/null
@@ -1,101 +0,0 @@
-proto.gradido.Timestamp
- */
-class Timestamp extends \Google\Protobuf\Internal\Message
-{
- /**
- * Number of complete seconds since the start of the epoch
- *
- * Generated from protobuf field int64 seconds = 1;
- */
- private $seconds = 0;
- /**
- * Number of nanoseconds since the start of the last second
- *
- * Generated from protobuf field int32 nanos = 2;
- */
- private $nanos = 0;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type int|string $seconds
- * Number of complete seconds since the start of the epoch
- * @type int $nanos
- * Number of nanoseconds since the start of the last second
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\BasicTypes::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Number of complete seconds since the start of the epoch
- *
- * Generated from protobuf field int64 seconds = 1;
- * @return int|string
- */
- public function getSeconds()
- {
- return $this->seconds;
- }
-
- /**
- * Number of complete seconds since the start of the epoch
- *
- * Generated from protobuf field int64 seconds = 1;
- * @param int|string $var
- * @return $this
- */
- public function setSeconds($var)
- {
- GPBUtil::checkInt64($var);
- $this->seconds = $var;
-
- return $this;
- }
-
- /**
- * Number of nanoseconds since the start of the last second
- *
- * Generated from protobuf field int32 nanos = 2;
- * @return int
- */
- public function getNanos()
- {
- return $this->nanos;
- }
-
- /**
- * Number of nanoseconds since the start of the last second
- *
- * Generated from protobuf field int32 nanos = 2;
- * @param int $var
- * @return $this
- */
- public function setNanos($var)
- {
- GPBUtil::checkInt32($var);
- $this->nanos = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php b/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php
deleted file mode 100644
index d31aa40d2..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/TimestampSeconds.php
+++ /dev/null
@@ -1,67 +0,0 @@
-proto.gradido.TimestampSeconds
- */
-class TimestampSeconds extends \Google\Protobuf\Internal\Message
-{
- /**
- * Number of complete seconds since the start of the epoch
- *
- * Generated from protobuf field int64 seconds = 1;
- */
- private $seconds = 0;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type int|string $seconds
- * Number of complete seconds since the start of the epoch
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\BasicTypes::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Number of complete seconds since the start of the epoch
- *
- * Generated from protobuf field int64 seconds = 1;
- * @return int|string
- */
- public function getSeconds()
- {
- return $this->seconds;
- }
-
- /**
- * Number of complete seconds since the start of the epoch
- *
- * Generated from protobuf field int64 seconds = 1;
- * @param int|string $var
- * @return $this
- */
- public function setSeconds($var)
- {
- GPBUtil::checkInt64($var);
- $this->seconds = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php b/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php
deleted file mode 100644
index b1ad01ea4..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/TransactionBody.php
+++ /dev/null
@@ -1,220 +0,0 @@
-proto.gradido.TransactionBody
- */
-class TransactionBody extends \Google\Protobuf\Internal\Message
-{
- /**
- * max 150 chars
- *
- * Generated from protobuf field string memo = 1;
- */
- private $memo = '';
- /**
- * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2;
- */
- private $created = null;
- /**
- * Generated from protobuf field uint64 version_number = 3;
- */
- private $version_number = 0;
- protected $data;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type string $memo
- * max 150 chars
- * @type \Proto\Gradido\TimestampSeconds $created
- * @type int|string $version_number
- * @type \Proto\Gradido\GradidoTransfer $transfer
- * @type \Proto\Gradido\GradidoCreation $creation
- * @type \Proto\Gradido\GroupFriendsUpdate $group_friends_update
- * @type \Proto\Gradido\GroupMemberUpdate $group_member_update
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\TransactionBody::initOnce();
- parent::__construct($data);
- }
-
- /**
- * max 150 chars
- *
- * Generated from protobuf field string memo = 1;
- * @return string
- */
- public function getMemo()
- {
- return $this->memo;
- }
-
- /**
- * max 150 chars
- *
- * Generated from protobuf field string memo = 1;
- * @param string $var
- * @return $this
- */
- public function setMemo($var)
- {
- GPBUtil::checkString($var, True);
- $this->memo = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2;
- * @return \Proto\Gradido\TimestampSeconds
- */
- public function getCreated()
- {
- return $this->created;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.TimestampSeconds created = 2;
- * @param \Proto\Gradido\TimestampSeconds $var
- * @return $this
- */
- public function setCreated($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\TimestampSeconds::class);
- $this->created = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field uint64 version_number = 3;
- * @return int|string
- */
- public function getVersionNumber()
- {
- return $this->version_number;
- }
-
- /**
- * Generated from protobuf field uint64 version_number = 3;
- * @param int|string $var
- * @return $this
- */
- public function setVersionNumber($var)
- {
- GPBUtil::checkUint64($var);
- $this->version_number = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GradidoTransfer transfer = 6;
- * @return \Proto\Gradido\GradidoTransfer
- */
- public function getTransfer()
- {
- return $this->readOneof(6);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GradidoTransfer transfer = 6;
- * @param \Proto\Gradido\GradidoTransfer $var
- * @return $this
- */
- public function setTransfer($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\GradidoTransfer::class);
- $this->writeOneof(6, $var);
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GradidoCreation creation = 7;
- * @return \Proto\Gradido\GradidoCreation
- */
- public function getCreation()
- {
- return $this->readOneof(7);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GradidoCreation creation = 7;
- * @param \Proto\Gradido\GradidoCreation $var
- * @return $this
- */
- public function setCreation($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\GradidoCreation::class);
- $this->writeOneof(7, $var);
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GroupFriendsUpdate group_friends_update = 8;
- * @return \Proto\Gradido\GroupFriendsUpdate
- */
- public function getGroupFriendsUpdate()
- {
- return $this->readOneof(8);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GroupFriendsUpdate group_friends_update = 8;
- * @param \Proto\Gradido\GroupFriendsUpdate $var
- * @return $this
- */
- public function setGroupFriendsUpdate($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\GroupFriendsUpdate::class);
- $this->writeOneof(8, $var);
-
- return $this;
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GroupMemberUpdate group_member_update = 9;
- * @return \Proto\Gradido\GroupMemberUpdate
- */
- public function getGroupMemberUpdate()
- {
- return $this->readOneof(9);
- }
-
- /**
- * Generated from protobuf field .proto.gradido.GroupMemberUpdate group_member_update = 9;
- * @param \Proto\Gradido\GroupMemberUpdate $var
- * @return $this
- */
- public function setGroupMemberUpdate($var)
- {
- GPBUtil::checkMessage($var, \Proto\Gradido\GroupMemberUpdate::class);
- $this->writeOneof(9, $var);
-
- return $this;
- }
-
- /**
- * @return string
- */
- public function getData()
- {
- return $this->whichOneof("data");
- }
-
-}
-
diff --git a/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php b/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php
deleted file mode 100644
index 7673582fa..000000000
--- a/community_server/src/Model/Messages/Proto/Gradido/TransferAmount.php
+++ /dev/null
@@ -1,85 +0,0 @@
-proto.gradido.TransferAmount
- */
-class TransferAmount extends \Google\Protobuf\Internal\Message
-{
- /**
- * Generated from protobuf field bytes pubkey = 1;
- */
- private $pubkey = '';
- /**
- * Generated from protobuf field sint64 amount = 2;
- */
- private $amount = 0;
-
- /**
- * Constructor.
- *
- * @param array $data {
- * Optional. Data for populating the Message object.
- *
- * @type string $pubkey
- * @type int|string $amount
- * }
- */
- public function __construct($data = NULL) {
- \GPBMetadata\Gradido\BasicTypes::initOnce();
- parent::__construct($data);
- }
-
- /**
- * Generated from protobuf field bytes pubkey = 1;
- * @return string
- */
- public function getPubkey()
- {
- return $this->pubkey;
- }
-
- /**
- * Generated from protobuf field bytes pubkey = 1;
- * @param string $var
- * @return $this
- */
- public function setPubkey($var)
- {
- GPBUtil::checkString($var, False);
- $this->pubkey = $var;
-
- return $this;
- }
-
- /**
- * Generated from protobuf field sint64 amount = 2;
- * @return int|string
- */
- public function getAmount()
- {
- return $this->amount;
- }
-
- /**
- * Generated from protobuf field sint64 amount = 2;
- * @param int|string $var
- * @return $this
- */
- public function setAmount($var)
- {
- GPBUtil::checkInt64($var);
- $this->amount = $var;
-
- return $this;
- }
-
-}
-
diff --git a/community_server/src/Model/Navigation/NaviBreakLine.php b/community_server/src/Model/Navigation/NaviBreakLine.php
deleted file mode 100644
index 79917db8c..000000000
--- a/community_server/src/Model/Navigation/NaviBreakLine.php
+++ /dev/null
@@ -1,16 +0,0 @@
- ";
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Model/Navigation/NaviEntry.php b/community_server/src/Model/Navigation/NaviEntry.php
deleted file mode 100644
index 2b02db9a8..000000000
--- a/community_server/src/Model/Navigation/NaviEntry.php
+++ /dev/null
@@ -1,89 +0,0 @@
-controller = $controller;
- $this->action = $action;
- $this->param = $param;
- $this->iconClass = $iconClass;
- if($active != null) {
- $this->active = $active;
- } else {
- $this->active = ($GLOBALS["side"] == $controller &&
- $GLOBALS["subside"] == $action &&
- $GLOBALS["passed"] == $param);
- }
- $this->title = $title;
- return $this;
- }
-
- public function setIconColor($iconColorClass) {
- $this->iconColor = $iconColorClass;
- return $this;
- }
- public function setBGColor($bgColorClass) {
- $this->bgColorClass = $bgColorClass;
- return $this;
- }
- private function isActive() {
- return $this->active;
- }
-
-
-
- private function link() {
- $self = $GLOBALS["self"];
- if($this->hasChilds()) {
- return $self->Html->link(
- $this->title.' ',
- ['controller' => $this->controller, "action" => $this->action, $this->param],
- ['escape' => false]
- );
- } else {
- return $self->Html->Link(
- ''. $this->iconClass .' '
- .'' . $this->title . ' ',
- ['controller' => $this->controller, 'action' => $this->action, $this->param],
- ['class' => $this->bgColorClass, 'escape' => false]);
- }
- }
-
- public function __toString() {
- $str = "";
- $str .= "hasChilds()) { $class .= "dropdown";}
- if($this->isActive()) { $class .= " selected"; }
- if(strlen($class) > 0 ) $str .= " class='$class'";
- $str .= ">";
-
- $str .= $this->link();
- if($this->hasChilds()) {
- $str .= "";
- foreach($this->childs as $child) {
- $str .= $child;
- }
- $str .= " ";
- }
- $str .= " ";
- return $str;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php b/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php
deleted file mode 100644
index 7d467ed69..000000000
--- a/community_server/src/Model/Navigation/NaviEntryAbsoluteLink.php
+++ /dev/null
@@ -1,92 +0,0 @@
-link = $link;
- $this->iconClass = $iconClass;
- if ($active != null) {
- $this->active = $active;
- }
- $this->title = $title;
- return $this;
- }
-
- public function setIconColor($iconColorClass)
- {
- $this->iconColor = $iconColorClass;
- return $this;
- }
-
- public function setBGColor($bgColorClass)
- {
- $this->bgColorClass = $bgColorClass;
- return $this;
- }
-
- private function isActive()
- {
- return $this->active;
- }
-
- protected function link()
- {
- $self = $GLOBALS["self"];
- if ($this->hasChilds()) {
- return $self->Html->link(
- $this->title.' ',
- ['controller' => $this->controller, "action" => $this->action, $this->param],
- ['escape' => false]
- );
- } else {
- return ''
- .''. $this->iconClass .' '
- . '' . $this->title . ' '
- . ' ';
- }
- }
-
- public function __toString()
- {
- $str = "";
- $str .= "hasChilds()) {
- $class .= "dropdown";
- }
- if ($this->isActive()) {
- $class .= " selected";
- }
- if (strlen($class) > 0) {
- $str .= " class='$class'";
- }
- $str .= ">";
-
- $str .= $this->link();
- if ($this->hasChilds()) {
- $str .= "";
- foreach ($this->childs as $child) {
- $str .= $child;
- }
- $str .= " ";
- }
- $str .= " ";
- return $str;
- }
-}
diff --git a/community_server/src/Model/Navigation/NaviEntryBase.php b/community_server/src/Model/Navigation/NaviEntryBase.php
deleted file mode 100644
index ebb4e122f..000000000
--- a/community_server/src/Model/Navigation/NaviEntryBase.php
+++ /dev/null
@@ -1,31 +0,0 @@
-title = $title;
- return $this;
- }
-
- public function add($child) {
- $child->isChild = true;
- array_push($this->childs, $child);
- return $this;
- }
-
- protected function hasChilds() {
- return count($this->childs) > 0;
- }
-
-}
diff --git a/community_server/src/Model/Navigation/NaviEntryExternLink.php b/community_server/src/Model/Navigation/NaviEntryExternLink.php
deleted file mode 100644
index 8ace7fb4c..000000000
--- a/community_server/src/Model/Navigation/NaviEntryExternLink.php
+++ /dev/null
@@ -1,26 +0,0 @@
-link.'" class="' .$this->bgColorClass .'" target="_blank">'
- .''. $this->iconClass .' '
- . '' . $this->title . ' '
- . '';
- }
-}
diff --git a/community_server/src/Model/Navigation/NaviEntrySub.php b/community_server/src/Model/Navigation/NaviEntrySub.php
deleted file mode 100644
index ae79aa433..000000000
--- a/community_server/src/Model/Navigation/NaviEntrySub.php
+++ /dev/null
@@ -1,105 +0,0 @@
-controller = $controller;
- $this->action = $action;
- $this->param = $param;
- $this->iconClass = $iconClass;
- if ($active != null) {
- $this->active = $active;
- } else {
- $this->active = ($GLOBALS["side"] == $controller &&
- $GLOBALS["subside"] == $action &&
- $GLOBALS["passed"] == $param);
- }
- $this->title = $title;
- $this->subtitle = $subtitle;
- return $this;
- }
-
- public function setIconColor($iconColorClass)
- {
- $this->iconColor = $iconColorClass;
- return $this;
- }
- public function setBGColor($bgColorClass)
- {
- $this->bgColorClass = $bgColorClass;
- return $this;
- }
- private function isActive()
- {
- return $this->active;
- }
-
- private function link()
- {
- $self = $GLOBALS["self"];
- if ($this->hasChilds()) {
- return $self->Html->link(
- $this->title.' ',
- ['controller' => $this->controller, "action" => $this->action, $this->param],
- ['escape' => false]
- );
- } else {
- return $self->Html->Link(
- ''
- .'' . $this->title . ' '
- .''. $this->iconClass .' ',
- ['controller' => $this->controller, 'action' => $this->action, $this->param],
- ['class' => $this->bgColorClass, 'escape' => false]
- );
- }
- }
-
- public function __toString()
- {
- $str = "";
- $str .= "hasChilds()) {
- $class .= "dropdown";
- }
- if ($this->isActive()) {
- $class .= " selected";
- }
- if (strlen($class) > 0) {
- $str .= " class='$class'";
- }
- $str .= ">";
-
- $str .= ''. $this->subtitle .' ';
- $str .= $this->link();
-
- if ($this->hasChilds()) {
- $str .= "";
- foreach ($this->childs as $child) {
- $str .= $child;
- }
- $str .= " ";
- }
- $str .= " ";
- return $str;
- }
-}
diff --git a/community_server/src/Model/Navigation/NaviHierarchy.php b/community_server/src/Model/Navigation/NaviHierarchy.php
deleted file mode 100644
index 5017f8678..000000000
--- a/community_server/src/Model/Navigation/NaviHierarchy.php
+++ /dev/null
@@ -1,49 +0,0 @@
-
-*/
-class NaviHierarchy implements \Countable
-{
- private $hierarchy = [];
-
- public function add($entry)
- {
- array_push($this->hierarchy, $entry);
- return $this;
- }
- public function getHierarchy()
- {
- return $this->hierarchy;
- }
- public function count()
- {
- return count($this->hierarchy);
- }
- public function __toString()
- {
- $html = "";
- $count = count($this->hierarchy);
- foreach ($this->hierarchy as $i => $e) {
- $html .= $e;
- if ($i < $count - 1) {
- $html .= "- ";
- }
- }
- $html .= " ";
- return $html;
- }
-}
diff --git a/community_server/src/Model/Navigation/NaviHierarchyEntry.php b/community_server/src/Model/Navigation/NaviHierarchyEntry.php
deleted file mode 100644
index 5256518df..000000000
--- a/community_server/src/Model/Navigation/NaviHierarchyEntry.php
+++ /dev/null
@@ -1,53 +0,0 @@
-
-*/
-class NaviHierarchyEntry
-{
- private $name;
- private $controller;
- private $action;
- public function __construct($name, $controller, $action, $isLast)
- {
- $this->name = $name;
- $this->controller = $controller;
- $this->action = $action;
- $this->isLast = $isLast;
- return $this;
- }
- private function link()
- {
- $self = $GLOBALS["self"];
- return $self->Html->Link(
- '' . $this->name . ' ',
- ['controller' => $this->controller, 'action' => $this->action],
- ['class' => "", 'escape' => false]
- );
- }
-
- public function __toString()
- {
- $str = "isLast){
- $str .= " class='selected'";
- }
- $str .= ">";
- $str .= $this->link();
- $str .= " ";
- return $str;
- }
-}
diff --git a/community_server/src/Model/Navigation/TitleOnly.php b/community_server/src/Model/Navigation/TitleOnly.php
deleted file mode 100644
index 39d7ac616..000000000
--- a/community_server/src/Model/Navigation/TitleOnly.php
+++ /dev/null
@@ -1,37 +0,0 @@
-title = $title;
- }
-
- public function __toString() {
- $str = "";
- $str .= "hasChilds()) { $class .= " dropdown";}
- if(strlen($class) > 0 ) $str .= " class='$class'";
- $str .= ">";
- $hNumber = 1;
- if($this->isChild) $hNumber = 3;
- $str .= "" . $this->title . " ";
- if($this->hasChilds()) {
- $str .= "";
- foreach($this->childs as $child) {
- $str .= $child;
- }
- $str .= " ";
- }
- $str .= " ";
- return $str;
- }
-}
diff --git a/community_server/src/Model/Table/AddressTypesTable.php b/community_server/src/Model/Table/AddressTypesTable.php
deleted file mode 100644
index ba94c99c7..000000000
--- a/community_server/src/Model/Table/AddressTypesTable.php
+++ /dev/null
@@ -1,74 +0,0 @@
-setTable('address_types');
- $this->setDisplayField('name');
- $this->setPrimaryKey('id');
-
- $this->hasMany('StateGroupAddresses', [
- 'foreignKey' => 'address_type_id',
- ]);
- $this->hasMany('TransactionGroupAddaddress', [
- 'foreignKey' => 'address_type_id',
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->nonNegativeInteger('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('name')
- ->maxLength('name', 45)
- ->requirePresence('name', 'create')
- ->notEmptyString('name');
-
- $validator
- ->scalar('text')
- ->maxLength('text', 255)
- ->requirePresence('text', 'create')
- ->notEmptyString('text');
-
- return $validator;
- }
-}
diff --git a/community_server/src/Model/Table/AdminErrorsTable.php b/community_server/src/Model/Table/AdminErrorsTable.php
deleted file mode 100644
index e6263d8ff..000000000
--- a/community_server/src/Model/Table/AdminErrorsTable.php
+++ /dev/null
@@ -1,107 +0,0 @@
-setTable('admin_errors');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->addBehavior('Timestamp');
-
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('controller')
- ->maxLength('controller', 255)
- ->requirePresence('controller', 'create')
- ->notEmptyString('controller');
-
- $validator
- ->scalar('action')
- ->maxLength('action', 255)
- ->requirePresence('action', 'create')
- ->notEmptyString('action');
-
- $validator
- ->scalar('state')
- ->maxLength('state', 255)
- ->requirePresence('state', 'create')
- ->notEmptyString('state');
-
- $validator
- ->scalar('msg')
- ->maxLength('msg', 255)
- ->requirePresence('msg', 'create')
- ->notEmptyString('msg');
-
- $validator
- ->scalar('details')
- ->maxLength('details', 255)
- ->requirePresence('details', 'create')
- ->notEmptyString('details');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/AppTable.php b/community_server/src/Model/Table/AppTable.php
deleted file mode 100644
index a0758c97a..000000000
--- a/community_server/src/Model/Table/AppTable.php
+++ /dev/null
@@ -1,41 +0,0 @@
-getSchema()->truncateSql($this->getConnection());
- foreach ($truncateCommands as $truncateCommand) {
- $this->getConnection()->query($truncateCommand);
- }
- $this->getConnection()->query('ALTER TABLE ' . $this->getSchema()->name() . ' AUTO_INCREMENT=1');
- return ['success' => true];
- }
- public function saveManyWithErrors($entities)
- {
- $save_results = $this->saveMany($entities);
- // save all at once failed, no try one by one to get error message
- if($save_results === false) {
- foreach($entities as $entity) {
- if(!$this->save($entity)) {
- return ['success' => false, 'errors' => $entity->getErrors()];
- }
- }
- } else {
- return ['success' => true];
- }
- }
-}
diff --git a/community_server/src/Model/Table/BlockchainTypesTable.php b/community_server/src/Model/Table/BlockchainTypesTable.php
deleted file mode 100644
index 3aa67a83d..000000000
--- a/community_server/src/Model/Table/BlockchainTypesTable.php
+++ /dev/null
@@ -1,94 +0,0 @@
-setTable('blockchain_types');
- $this->setDisplayField('name');
- $this->setPrimaryKey('id');
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->nonNegativeInteger('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('name')
- ->maxLength('name', 45)
- ->requirePresence('name', 'create')
- ->notEmptyString('name');
-
- $validator
- ->scalar('text')
- ->maxLength('text', 255)
- ->allowEmptyString('text');
-
- $validator
- ->scalar('symbol')
- ->maxLength('symbol', 10)
- ->allowEmptyString('symbol');
-
- return $validator;
- }
-
- public function fillWithDefault()
- {
- $entry_contents = [
- [
- 'id' => 1,
- 'name' => 'mysql',
- 'text' => 'use mysql db as blockchain, work only with single community-server',
- 'symbol' => NULL
- ],
- [
- 'id' => 2,
- 'name' => 'hedera',
- 'text' => 'use hedera for transactions',
- 'symbol' => 'HBAR'
- ]
- ];
- $entities = $this->newEntities($entry_contents);
- $this->truncate();
- $save_results = $this->saveManyWithErrors($entities);
- if(!$save_results['success']) {
- $save_results['msg'] = 'error by saving default transaction types';
- }
- return $save_results;
-
- }
-}
diff --git a/community_server/src/Model/Table/CommunityProfilesTable.php b/community_server/src/Model/Table/CommunityProfilesTable.php
deleted file mode 100644
index bbe862092..000000000
--- a/community_server/src/Model/Table/CommunityProfilesTable.php
+++ /dev/null
@@ -1,81 +0,0 @@
-setTable('community_profiles');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER',
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->allowEmptyFile('profile_img');
-
- $validator
- ->scalar('profile_desc')
- ->maxLength('profile_desc', 2000)
- ->allowEmptyFile('profile_desc');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/ElopageBuysTable.php b/community_server/src/Model/Table/ElopageBuysTable.php
deleted file mode 100644
index a5279d920..000000000
--- a/community_server/src/Model/Table/ElopageBuysTable.php
+++ /dev/null
@@ -1,116 +0,0 @@
-setTable('elopage_buys');
- $this->setDisplayField('payer_email');
- $this->setPrimaryKey('id');
-
- }
-
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->integer('product_price')
- ->requirePresence('product_price', 'create')
- ->notEmptyString('product_price');
-
- $validator
- ->scalar('payer_email')
- ->maxLength('payer_email', 255)
- ->requirePresence('payer_email', 'create')
- ->notEmptyString('payer_email');
-
- $validator
- ->scalar('publisher_email')
- ->maxLength('publisher_email', 255)
- ->requirePresence('publisher_email', 'create')
- ->notEmptyString('publisher_email');
-
- $validator
- ->boolean('payed')
- ->requirePresence('payed', 'create')
- ->notEmptyString('payed');
-
- $validator
- ->dateTime('success_date')
- ->requirePresence('success_date', 'create')
- ->notEmptyDateTime('success_date');
-
- $validator
- ->scalar('event')
- ->maxLength('event', 255)
- ->requirePresence('event', 'create')
- ->notEmptyString('event');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
-
- return $rules;
- }
-
- /**
- * Returns the database connection name to use by default.
- *
- * @return string
- */
- public static function defaultConnectionName()
- {
- return 'loginServer';
- }
-}
diff --git a/community_server/src/Model/Table/OperatorTypesTable.php b/community_server/src/Model/Table/OperatorTypesTable.php
deleted file mode 100644
index 8a3ce608c..000000000
--- a/community_server/src/Model/Table/OperatorTypesTable.php
+++ /dev/null
@@ -1,70 +0,0 @@
-setTable('operator_types');
- $this->setDisplayField('name');
- $this->setPrimaryKey('id');
-
- $this->hasMany('Operators', [
- 'foreignKey' => 'operator_type_id'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('name')
- ->maxLength('name', 25)
- ->requirePresence('name', 'create')
- ->notEmptyString('name');
-
- $validator
- ->scalar('text')
- ->maxLength('text', 255)
- ->requirePresence('text', 'create')
- ->notEmptyString('text');
-
- return $validator;
- }
-}
diff --git a/community_server/src/Model/Table/OperatorsTable.php b/community_server/src/Model/Table/OperatorsTable.php
deleted file mode 100644
index 7ae272767..000000000
--- a/community_server/src/Model/Table/OperatorsTable.php
+++ /dev/null
@@ -1,93 +0,0 @@
-setTable('operators');
- $this->setDisplayField('name');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('OperatorTypes', [
- 'foreignKey' => 'operator_type_id',
- 'joinType' => 'INNER'
- ]);
-
- $this->addBehavior('Timestamp');
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('username')
- ->maxLength('username', 50)
- ->requirePresence('username', 'create')
- ->notEmptyString('username');
- //->add('usernamePasswordHash', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']);
-
- $validator
- ->requirePresence('user_pubkey', 'create')
- ->notEmptyString('user_pubkey');
-
- $validator
- ->scalar('data_base64')
- ->maxLength('data_base64', 255)
- ->requirePresence('data_base64', 'create')
- ->notEmptyString('data_base64');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- //$rules->add($rules->isUnique(['usernamePasswordHash']));
- $rules->add($rules->existsIn(['operator_type_id'], 'OperatorTypes'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/RolesTable.php b/community_server/src/Model/Table/RolesTable.php
deleted file mode 100644
index 940b7f246..000000000
--- a/community_server/src/Model/Table/RolesTable.php
+++ /dev/null
@@ -1,72 +0,0 @@
-setTable('roles');
- $this->setDisplayField('title');
- $this->setPrimaryKey('id');
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create')
- ->add('id', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']);
-
- $validator
- ->scalar('title')
- ->maxLength('title', 255)
- ->allowEmptyString('title');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->isUnique(['id']));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/ServerUsersTable.php b/community_server/src/Model/Table/ServerUsersTable.php
deleted file mode 100644
index 0ad1fbacb..000000000
--- a/community_server/src/Model/Table/ServerUsersTable.php
+++ /dev/null
@@ -1,101 +0,0 @@
-setTable('server_users');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->addBehavior('Timestamp');
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('username')
- ->maxLength('username', 50)
- ->requirePresence('username', 'create')
- ->notEmptyString('username', __('Please give a username'));
-
- $validator
- ->scalar('password')
- ->maxLength('password', 255)
- ->requirePresence('password', 'create')
- ->notEmptyString('password', __('Please give a password'));
-
- $validator
- ->email('email')
- ->requirePresence('email', 'create')
- ->notEmptyString('email', __('Please give a email'));
-
- $validator
- ->scalar('role')
- ->maxLength('role', 20)
- ->notEmptyString('role');
-
- $validator
- ->boolean('activated')
- ->notEmptyString('activated');
-
- $validator
- ->dateTime('last_login')
- ->allowEmptyDateTime('last_login');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->isUnique(['username']));
- $rules->add($rules->isUnique(['email']));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/StateBalancesTable.php b/community_server/src/Model/Table/StateBalancesTable.php
deleted file mode 100644
index ff7a0aca2..000000000
--- a/community_server/src/Model/Table/StateBalancesTable.php
+++ /dev/null
@@ -1,325 +0,0 @@
-setTable('state_balances');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->addBehavior('Timestamp');
-
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- public static function getDecayStartDateCached()
- {
- if(self::$startDecayDate == null) {
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
- self::$startDecayDate = $transactionsTable->getDecayStartDate();
- }
- return self::$startDecayDate;
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('amount', 'create')
- ->notEmptyString('amount');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
-
- return $rules;
- }
-
- public function calculateDecay($startBalance, FrozenTime $startDate, FrozenTime $endDate, $withInterval = false)
- {
- $decayStartDate = self::getDecayStartDateCached();
- // if no start decay block exist, we just return input
- // if start date for decay is after enddate, we also just return input
- if($decayStartDate === null || $decayStartDate >= $endDate) {
- if($withInterval) {
- return [
- 'balance' => $startBalance,
- 'interval' => new \DateInterval('PT0S'),
- 'start_date' => $startDate->getTimestamp(),
- 'end_date' => $startDate->getTimestamp()
- ];
- } else {
- return $startBalance;
- }
- }
- $state_balance = $this->newEntity();
- $state_balance->amount = $startBalance;
- $interval = null;
- // if decay start date is before start date we calculate decay for full duration
- if($decayStartDate < $startDate) {
- $state_balance->record_date = $startDate;
- $interval = $endDate->diff($startDate);
- }
- // if decay start in between start date and end date we caculcate decay from decay start time to end date
- else {
- $state_balance->record_date = $decayStartDate;
- $interval = $endDate->diff($decayStartDate);
- }
- $decay = $state_balance->partDecay($endDate);
- if($withInterval) {
- return [
- 'balance' => $decay,
- 'interval' => $interval,
- 'start_date' => $state_balance->record_date->getTimestamp(),
- 'end_date' => $endDate->getTimestamp()
- ];
- } else {
- return $decay;
- }
-
-
- }
-
- public function updateAllBalances()
- {
- $stateUserTable = TableRegistry::getTableLocator()->get('StateUsers');
- $state_users = $stateUserTable->find()->select(['id'])->contain([]);
- foreach($state_users as $state_user) {
- $result = $this->updateBalances($state_user->id);
- if($result['success'] === false) {
- $result['state_user_id'] = $state_user->id;
- return $result;
- }
- }
- return ['success' => true];
- }
-
- public function updateBalances($stateUserId)
- {
- $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions');
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
- $now = new FrozenTime;
- // info: cakephp use lazy loading, query will be executed later only if needed
- $state_balances = $this->find('all')->where(['state_user_id' => $stateUserId]);
- $state_user_transactions = $stateUserTransactionsTable
- ->find()
- ->where(['state_user_id' => $stateUserId])
- ->order(['balance_date ASC'])
- //->contain(false);
- ;
-
- if(!$state_user_transactions || !$state_user_transactions->count()) {
- return ['success' => true];
- }
-
- // first: decide what todo
- $create_state_balance = false;
- $recalculate_state_user_transactions_balance = false;
- $clear_state_balance = false;
- $update_state_balance = false;
- if($state_balances->count() == 0) {
- $create_state_balance = true;
- $recalculate_state_user_transactions_balance = true;
- }
- if($state_balances->count() > 1) {
- $clear_state_balance = true;
- $create_state_balance = true;
- $recalculate_state_user_transactions_balance = true;
- }
- if($state_balances->count() == 1) {
- if($state_user_transactions->count() == 0){
- $clear_state_balance = true;
- } else {
-
- $first_state_balance = $state_balances->first();
- $first_state_balance_decayed = self::calculateDecay(
- $first_state_balance->amount,
- $first_state_balance->record_date,
- $now);
-
- $last_state_user_transaction = $state_user_transactions->last();
- $last_state_user_transaction_decayed = self::calculateDecay(
- $last_state_user_transaction->balance,
- $last_state_user_transaction->balance_date,
- $now);
- // if entrys are nearly the same, we don't need doing anything
- if(floor($last_state_user_transaction_decayed/100) !== floor($first_state_balance_decayed/100)) {
- $recalculate_state_user_transactions_balance = true;
- $update_state_balance = true;
- }
- }
- }
-
- if(!$recalculate_state_user_transactions_balance) {
- $last_state_user_transaction = $state_user_transactions->last();
- if($last_state_user_transaction && $last_state_user_transaction->balance <= 0) {
- $recalculate_state_user_transactions_balance = true;
- if(!$create_state_balance) {
- $update_state_balance = true;
- }
- } else if(!$last_state_user_transaction) {
-
- $creationsTable = TableRegistry::getTableLocator()->get('TransactionCreations');
- $creationTransactions = $creationsTable
- ->find('all')
- ->where(['state_user_id' => $stateUserId])
- ->contain(false);
-
- $transferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins');
- $transferTransactions = $transferTable
- ->find('all')
- ->where(['OR' => ['state_user_id' => $stateUserId, 'receiver_user_id' => $stateUserId]])
- ->contain(false);
- if($creationTransactions->count() > 0 || $transferTransactions->count() > 0) {
- return ['success' => false, 'error' => 'state_user_transactions is empty but it exist transactions for user'];
- }
- }
- }
- // second: do what is needed
- if($clear_state_balance) {
- $this->deleteAll(['state_user_id' => $stateUserId]);
- }
-
- $transaction_ids = [];
- if($recalculate_state_user_transactions_balance) {
-
- $state_user_transactions_array = $state_user_transactions->toArray();
- foreach($state_user_transactions_array as $i => $state_user_transaction) {
- $transaction_ids[$state_user_transaction->transaction_id] = $i;
- }
-
- $transactions = $transactionsTable
- ->find('all')
- ->where(['Transactions.id IN' => array_keys($transaction_ids)])
- ->contain(['TransactionCreations', 'TransactionSendCoins']);
-
- $transactions_indiced = [];
- foreach($transactions as $transaction) {
- $transactions_indiced[$transaction->id] = $transaction;
- }
- $balance_cursor = $this->newEntity();
- $i = 0;
- foreach($state_user_transactions_array as $state_user_transaction) {
- $transaction = $transactions_indiced[$state_user_transaction->transaction_id];
- if($transaction->transaction_type_id > 2) {
- continue;
- }
- $amount = 0;
-
- if($transaction->transaction_type_id == 1) { // creation
- $amount = intval($transaction->transaction_creation->amount);
- } else if($transaction->transaction_type_id == 2) { // transfer
- $temp = $transaction->transaction_send_coin;
- $amount = intval($temp->amount);
- // reverse if sender
- if($stateUserId == $temp->state_user_id) {
- $amount *= -1.0;
- }
- }
- $amount_date = $transaction->received;
- if($i == 0) {
- $balance_cursor->amount = $amount;
- } else {
-
- //$balance_cursor->amount = $balance_cursor->partDecay($amount_date) + $amount;
- $balance_cursor->amount =
- $this->calculateDecay($balance_cursor->amount, $balance_cursor->record_date, $amount_date)
- + $amount;
- }
- //echo "new balance: " . $balance_cursor->amount . " ";
-
- $balance_cursor->record_date = $amount_date;
- $state_user_transaction_index = $transaction_ids[$transaction->id];
- $state_user_transactions_array[$state_user_transaction_index]->balance = $balance_cursor->amount;
- $state_user_transactions_array[$state_user_transaction_index]->balance_date = $balance_cursor->record_date;
- $i++;
-
- }
-
- $results = $stateUserTransactionsTable->saveMany($state_user_transactions_array);
- $errors = [];
- foreach($results as $i => $result) {
- if(!$result) {
- $errors[$i] = $state_user_transactions_array[$i]->getErrors();
- }
- }
- if(count($errors)) {
- return ['success' => false, 'error' => 'error saving one ore more state user transactions', 'details' => $errors];
- }
- }
- $state_balance = null;
- if($update_state_balance) {
- $state_balance = $state_balances->first();
- }
- else if($create_state_balance) {
- $state_balance = $this->newEntity();
- $state_balance->state_user_id = $stateUserId;
- }
- if($state_balance) {
- $state_balance->amount = $state_user_transactions->last()->balance;
- $state_balance->record_date = $state_user_transactions->last()->balance_date;
- if(!$this->save($state_balance)) {
- return ['success' => false, 'error' => 'error saving state balance', 'details' => $state_balance->getErrors()];
- }
- }
- return ['success' => true];
-
- }
-
-}
diff --git a/community_server/src/Model/Table/StateCreatedTable.php b/community_server/src/Model/Table/StateCreatedTable.php
deleted file mode 100644
index c97851f28..000000000
--- a/community_server/src/Model/Table/StateCreatedTable.php
+++ /dev/null
@@ -1,96 +0,0 @@
-setTable('state_created');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->addBehavior('Timestamp');
-
- $this->belongsTo('Transactions', [
- 'foreignKey' => 'transaction_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('month', 'create')
- ->notEmptyString('month');
-
- $validator
- ->requirePresence('year', 'create')
- ->notEmptyString('year');
-
- $validator
- ->integer('short_ident_hash')
- ->requirePresence('short_ident_hash', 'create')
- ->notEmptyString('short_ident_hash');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['transaction_id'], 'Transactions'));
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/StateErrorsTable.php b/community_server/src/Model/Table/StateErrorsTable.php
deleted file mode 100644
index 62893b7bf..000000000
--- a/community_server/src/Model/Table/StateErrorsTable.php
+++ /dev/null
@@ -1,88 +0,0 @@
-setTable('state_errors');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->addBehavior('Timestamp');
-
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('TransactionTypes', [
- 'foreignKey' => 'transaction_type_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('message_json')
- ->requirePresence('message_json', 'create')
- ->notEmptyString('message_json');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
- $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/StateGroupAddressesTable.php b/community_server/src/Model/Table/StateGroupAddressesTable.php
deleted file mode 100644
index a63e2ae1c..000000000
--- a/community_server/src/Model/Table/StateGroupAddressesTable.php
+++ /dev/null
@@ -1,85 +0,0 @@
-setTable('state_group_addresses');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- /*$this->belongsTo('Groups', [
- 'foreignKey' => 'group_id',
- 'joinType' => 'INNER',
- ]);*/
- $this->belongsTo('AddressTypes', [
- 'foreignKey' => 'address_type_id',
- 'joinType' => 'INNER',
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->nonNegativeInteger('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('public_key', 'create')
- ->notEmptyString('public_key')
- ->add('public_key', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']);
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->isUnique(['public_key']));
- //$rules->add($rules->existsIn(['group_id'], 'Groups'));
- $rules->add($rules->existsIn(['address_type_id'], 'AddressTypes'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/StateGroupRelationshipsTable.php b/community_server/src/Model/Table/StateGroupRelationshipsTable.php
deleted file mode 100644
index 449561583..000000000
--- a/community_server/src/Model/Table/StateGroupRelationshipsTable.php
+++ /dev/null
@@ -1,85 +0,0 @@
-setTable('state_group_relationships');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('StateGroup1s', [
- 'foreignKey' => 'state_group1_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('StateGroup2s', [
- 'foreignKey' => 'state_group2_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('StateRelationships', [
- 'foreignKey' => 'state_relationship_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['state_group1_id'], 'StateGroup1s'));
- $rules->add($rules->existsIn(['state_group2_id'], 'StateGroup2s'));
- $rules->add($rules->existsIn(['state_relationship_id'], 'StateRelationships'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/StateGroupsTable.php b/community_server/src/Model/Table/StateGroupsTable.php
deleted file mode 100644
index 49911d495..000000000
--- a/community_server/src/Model/Table/StateGroupsTable.php
+++ /dev/null
@@ -1,102 +0,0 @@
-setTable('state_groups');
- $this->setDisplayField('name');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('Indices', [
- 'foreignKey' => 'index_id',
- 'joinType' => 'INNER'
- ]);
- $this->hasMany('StateGroupAddresses', [
- 'foreignKey' => 'state_group_id'
- ]);
- $this->hasMany('StateUsers', [
- 'foreignKey' => 'state_group_id'
- ]);
- $this->hasMany('TransactionGroupCreates', [
- 'foreignKey' => 'state_group_id'
- ]);
- $this->hasMany('Transactions', [
- 'foreignKey' => 'state_group_id'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('name')
- ->maxLength('name', 50)
- ->requirePresence('name', 'create')
- ->notEmptyString('name');
-
- $validator
- ->requirePresence('root_public_key', 'create')
- ->notEmptyString('root_public_key');
-
- $validator
- ->notEmptyString('user_count');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['index_id'], 'Indices'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/StateRelationshipTypesTable.php b/community_server/src/Model/Table/StateRelationshipTypesTable.php
deleted file mode 100644
index a18e7ce51..000000000
--- a/community_server/src/Model/Table/StateRelationshipTypesTable.php
+++ /dev/null
@@ -1,63 +0,0 @@
-setTable('state_relationship_types');
- $this->setDisplayField('name');
- $this->setPrimaryKey('id');
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('name')
- ->maxLength('name', 25)
- ->requirePresence('name', 'create')
- ->notEmptyString('name');
-
- $validator
- ->scalar('text')
- ->maxLength('text', 255)
- ->allowEmptyString('text');
-
- return $validator;
- }
-}
diff --git a/community_server/src/Model/Table/StateUserRolesTable.php b/community_server/src/Model/Table/StateUserRolesTable.php
deleted file mode 100644
index 895e788b2..000000000
--- a/community_server/src/Model/Table/StateUserRolesTable.php
+++ /dev/null
@@ -1,86 +0,0 @@
-setTable('state_user_roles');
- $this->setPrimaryKey('id');
-
-
- $this->belongsTo('StateUser', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER'
- ]);
-
- $this->belongsTo('Role', [
- 'foreignKey' => 'role_id',
- 'joinType' => 'INNER'
- ]);
-
-
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
-
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- // $rules->add($rules->existsIn(['index_id'], 'Indices'));
- //$rules->add($rules->existsIn(['state_group_id'], 'StateGroups'));
-
- return $rules;
- }
-
-
-}
diff --git a/community_server/src/Model/Table/StateUserTransactionsTable.php b/community_server/src/Model/Table/StateUserTransactionsTable.php
deleted file mode 100644
index 2c984d964..000000000
--- a/community_server/src/Model/Table/StateUserTransactionsTable.php
+++ /dev/null
@@ -1,85 +0,0 @@
-setTable('state_user_transactions');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER',
- ]);
- $this->belongsTo('Transactions', [
- 'foreignKey' => 'transaction_id',
- 'joinType' => 'INNER',
- ]);
- $this->belongsTo('TransactionTypes', [
- 'foreignKey' => 'transaction_type_id',
- 'joinType' => 'INNER',
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->nonNegativeInteger('id')
- ->allowEmptyString('id', null, 'create');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
- $rules->add($rules->existsIn(['transaction_id'], 'Transactions'));
- $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/StateUsersTable.php b/community_server/src/Model/Table/StateUsersTable.php
deleted file mode 100644
index 5b01609f3..000000000
--- a/community_server/src/Model/Table/StateUsersTable.php
+++ /dev/null
@@ -1,136 +0,0 @@
-setTable('state_users');
- $this->setDisplayField('email');
- $this->setPrimaryKey('id');
-
- /*$this->belongsTo('Indices', [
- 'foreignKey' => 'index_id',
- 'joinType' => 'INNER'
- ]);*/
- $this->belongsTo('StateGroups', [
- 'foreignKey' => 'state_group_id',
- 'joinType' => 'INNER'
- ]);
- $this->hasMany('StateBalances', [
- 'foreignKey' => 'state_user_id'
- ]);
- $this->hasMany('StateCreated', [
- 'foreignKey' => 'state_user_id'
- ]);
- $this->hasMany('TransactionCreations', [
- 'foreignKey' => 'state_user_id'
- ]);
- $this->hasMany('TransactionSendCoins', [
- 'foreignKey' => 'state_user_id'
- ]);
- $this->hasMany('TransactionReceivedCoins', [
- 'className' => 'TransactionSendCoins',
- 'foreignKey' => 'receiver_user_id'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('public_key', 'create')
- ->notEmptyString('public_key');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- // $rules->add($rules->existsIn(['index_id'], 'Indices'));
- //$rules->add($rules->existsIn(['state_group_id'], 'StateGroups'));
-
- return $rules;
- }
-
- public function getReceiverProposal() {
- $stateUsers = $this->find('all');
- $receiverProposal = [];
- foreach($stateUsers as $stateUser) {
- $name = $stateUser->email;
- $keyHex = bin2hex(stream_get_contents($stateUser->public_key));
- if($name === NULL) {
- $name = $stateUser->first_name . ' ' . $stateUser->last_name;
- }
- array_push($receiverProposal, ['name' => $name, 'key' => $keyHex]);
- //$stateUser->public_key
- }
- return $receiverProposal;
- }
-
- public function getUsersIndiced($user_ids)
- {
- $involvedUser_temp = array_flip($user_ids);
- // exchange back
- $involvedUserIds = array_flip($involvedUser_temp);
- $involvedUser = $this->find('all', [
- 'contain' => [],
- 'where' => ['id IN' => $involvedUserIds],
- 'fields' => ['id', 'first_name', 'last_name', 'email'],
- ]);
- //var_dump($involvedUser->toArray());
- $involvedUserIndices = [];
- foreach ($involvedUser as $involvedUser) {
- $involvedUserIndices[$involvedUser->id] = $involvedUser;
- }
- return $involvedUserIndices;
- }
-}
diff --git a/community_server/src/Model/Table/TransactionCreationsTable.php b/community_server/src/Model/Table/TransactionCreationsTable.php
deleted file mode 100644
index bc9592ccf..000000000
--- a/community_server/src/Model/Table/TransactionCreationsTable.php
+++ /dev/null
@@ -1,89 +0,0 @@
-setTable('transaction_creations');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('Transactions', [
- 'foreignKey' => 'transaction_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('amount', 'create')
- ->notEmptyString('amount');
-
- $validator
- //->requirePresence('ident_hash', 'create')
- //->notEmptyString('ident_hash');
- ->allowEmptyString('ident_hash', null, 'create');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['transaction_id'], 'Transactions'));
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
- $rules->add($rules->existsIn(['receiver_user_id'], 'StateUsers'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/TransactionGroupAddaddressTable.php b/community_server/src/Model/Table/TransactionGroupAddaddressTable.php
deleted file mode 100644
index cb9912083..000000000
--- a/community_server/src/Model/Table/TransactionGroupAddaddressTable.php
+++ /dev/null
@@ -1,88 +0,0 @@
-setTable('transaction_group_addaddress');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('Transactions', [
- 'foreignKey' => 'transaction_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('AddressTypes', [
- 'foreignKey' => 'address_type_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('public_key', 'create')
- ->notEmptyString('public_key');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['transaction_id'], 'Transactions'));
- $rules->add($rules->existsIn(['address_type_id'], 'AddressTypes'));
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php b/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php
deleted file mode 100644
index 463d1af8e..000000000
--- a/community_server/src/Model/Table/TransactionGroupAllowtradesTable.php
+++ /dev/null
@@ -1,83 +0,0 @@
-setTable('transaction_group_allowtrades');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('Transactions', [
- 'foreignKey' => 'transaction_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('Groups', [
- 'foreignKey' => 'group_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->boolean('allow')
- ->notEmptyString('allow');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['transaction_id'], 'Transactions'));
- $rules->add($rules->existsIn(['group_id'], 'Groups'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/TransactionGroupCreatesTable.php b/community_server/src/Model/Table/TransactionGroupCreatesTable.php
deleted file mode 100644
index 263182b8e..000000000
--- a/community_server/src/Model/Table/TransactionGroupCreatesTable.php
+++ /dev/null
@@ -1,89 +0,0 @@
-setTable('transaction_group_creates');
- $this->setDisplayField('name');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('Transactions', [
- 'foreignKey' => 'transaction_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('StateGroups', [
- 'foreignKey' => 'state_group_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('group_public_key', 'create')
- ->notEmptyString('group_public_key');
-
- $validator
- ->scalar('name')
- ->maxLength('name', 64)
- ->requirePresence('name', 'create')
- ->notEmptyString('name');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['transaction_id'], 'Transactions'));
- $rules->add($rules->existsIn(['state_group_id'], 'StateGroups'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/TransactionSendCoinsTable.php b/community_server/src/Model/Table/TransactionSendCoinsTable.php
deleted file mode 100644
index c1530e908..000000000
--- a/community_server/src/Model/Table/TransactionSendCoinsTable.php
+++ /dev/null
@@ -1,102 +0,0 @@
-setTable('transaction_send_coins');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('Transactions', [
- 'foreignKey' => 'transaction_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('StateUsers', [
- 'foreignKey' => 'state_user_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('ReceiverUsers', [
- 'className' => 'StateUsers',
- 'foreignKey' => 'receiver_user_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('sender_public_key', 'create')
- ->notEmptyString('sender_public_key');
-
- $validator
- ->requirePresence('receiver_public_key', 'create')
- ->notEmptyString('receiver_public_key');
-
- $validator
- ->requirePresence('amount', 'create')
- ->notEmptyString('amount');
-
- $validator
- ->requirePresence('sender_final_balance', 'create')
- ->notEmptyString('sender_final_balance');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['transaction_id'], 'Transactions'));
- $rules->add($rules->existsIn(['state_user_id'], 'StateUsers'));
- $rules->add($rules->existsIn(['receiver_user_id'], 'ReceiverUsers'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/TransactionSignaturesTable.php b/community_server/src/Model/Table/TransactionSignaturesTable.php
deleted file mode 100644
index 60c1ae99f..000000000
--- a/community_server/src/Model/Table/TransactionSignaturesTable.php
+++ /dev/null
@@ -1,81 +0,0 @@
-setTable('transaction_signatures');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('Transactions', [
- 'foreignKey' => 'transaction_id',
- 'joinType' => 'INNER'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->requirePresence('signature', 'create')
- ->notEmptyString('signature');
-
- $validator
- ->requirePresence('pubkey', 'create')
- ->notEmptyString('pubkey');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['transaction_id'], 'Transactions'));
-
- return $rules;
- }
-}
diff --git a/community_server/src/Model/Table/TransactionTypesTable.php b/community_server/src/Model/Table/TransactionTypesTable.php
deleted file mode 100644
index 2ffd1e64c..000000000
--- a/community_server/src/Model/Table/TransactionTypesTable.php
+++ /dev/null
@@ -1,120 +0,0 @@
-setTable('transaction_types');
- $this->setDisplayField('name');
- $this->setPrimaryKey('id');
-
- $this->hasMany('Transactions', [
- 'foreignKey' => 'transaction_type_id'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->scalar('name')
- ->maxLength('name', 45)
- ->requirePresence('name', 'create')
- ->notEmptyString('name');
-
- $validator
- ->scalar('text')
- ->maxLength('text', 255)
- ->allowEmptyString('text');
-
- return $validator;
- }
-
- public function fillWithDefault()
- {
-
- $entry_contents = [
- [
- 'id' => 1,
- 'name' => 'creation',
- 'text' => 'create new gradidos for member and also for group (in development)',
- ], [
- 'id' => 2,
- 'name' => 'transfer',
- 'text' => 'send gradidos from one member to another, also cross group transfer',
- ], [
- 'id' => 3,
- 'name' => 'group create',
- 'text' => 'create a new group, trigger creation of new hedera topic and new blockchain on node server'
- ], [
- 'id' => 4,
- 'name' => 'group add member',
- 'text' => 'add user to a group or move if he was already in a group'
- ], [
- 'id' => 5,
- 'name' => 'group remove member',
- 'text' => 'remove user from group, maybe he was moved elsewhere'
- ],[
- 'id' => 6,
- 'name' => 'hedera topic create',
- 'text' => 'create new topic on hedera'
- ],[
- 'id' => 7,
- 'name' => 'hedera topic send message',
- 'text' => 'send consensus message over hedera topic'
- ],[
- 'id' => 8,
- 'name' => 'hedera account create',
- 'text' => 'create new account on hedera for holding some founds with unencrypted keys'
- ],[
- 'id' => 9,
- 'name' => 'decay start',
- 'text' => 'signalize the starting point for decay calculation, allowed only once per chain'
- ]
- ];
- $entities = $this->newEntities($entry_contents);
- $this->truncate();
- $save_results = $this->saveManyWithErrors($entities);
- if(!$save_results['success']) {
- $save_results['msg'] = 'error by saving default transaction types';
- }
- return $save_results;
- }
-}
diff --git a/community_server/src/Model/Table/TransactionsTable.php b/community_server/src/Model/Table/TransactionsTable.php
deleted file mode 100644
index 1f8606a82..000000000
--- a/community_server/src/Model/Table/TransactionsTable.php
+++ /dev/null
@@ -1,469 +0,0 @@
-setTable('transactions');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->belongsTo('StateGroups', [
- 'foreignKey' => 'state_group_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('TransactionTypes', [
- 'foreignKey' => 'transaction_type_id',
- 'joinType' => 'INNER'
- ]);
- $this->belongsTo('BlockchainTypes', [
- 'foreignKey' => 'blockchain_type_id',
- 'joinType' => 'INNER'
- ]);
- $this->hasMany('StateCreated', [
- 'foreignKey' => 'transaction_id'
- ]);
- $this->hasOne('TransactionCreations', [
- 'foreignKey' => 'transaction_id'
- ]);
- $this->hasOne('TransactionGroupAddaddress', [
- 'foreignKey' => 'transaction_id'
- ]);
- $this->hasOne('TransactionGroupAllowtrades', [
- 'foreignKey' => 'transaction_id'
- ]);
- $this->hasOne('TransactionGroupCreates', [
- 'foreignKey' => 'transaction_id'
- ]);
- $this->hasOne('TransactionSendCoins', [
- 'foreignKey' => 'transaction_id'
- ]);
- $this->hasMany('TransactionSignatures', [
- 'foreignKey' => 'transaction_id'
- ]);
- $this->hasMany('StateUserTransactions', [
- 'foreignKey' => 'transaction_id'
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->allowEmptyString('id', null, 'create');
-
- $validator
- //->requirePresence('tx_hash', 'create')
- ->allowEmptyString('tx_hash', null, 'create');
-
- $validator
- ->allowEmptyString('memo', null, 'create');
-
- $validator
- ->dateTime('received')
- ->notEmptyDateTime('received');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->existsIn(['state_group_id'], 'StateGroups'));
- $rules->add($rules->existsIn(['transaction_type_id'], 'TransactionTypes'));
- $rules->add($rules->existsIn(['blockchain_type_id'], 'BlockchainTypes'));
-
- return $rules;
- }
-
- public function sortTransactions($a, $b)
- {
- if ($a['date'] == $b['date']) {
- return 0;
- }
- return ($a['date'] > $b['date']) ? -1 : 1;
- }
-
-
- public function listTransactionsHumanReadable($stateUserTransactions, array $user, $decay = true, $skip_first_transaction = false)
- {
-
- $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers');
- $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances');
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
-
- $transaction_ids = [];
- $involved_user_ids = [];
- $stateUserTransactionsCount = 0;
- foreach($stateUserTransactions as $su_transaction) {
- $transaction_ids[] = $su_transaction->transaction_id;
- $involved_user_ids[] = $su_transaction->state_user_id;
- $stateUserTransactionsCount++;
- }
-
- $involved_users = $stateUsersTable->getUsersIndiced($involved_user_ids);
-
- $transactions = $this
- ->find()
- ->where(['Transactions.id IN' => $transaction_ids])
- ->contain(['TransactionSendCoins', 'TransactionCreations'])
- ;
- $transaction_indiced = [];
- foreach($transactions as $tr) {
- $transaction_indiced[$tr->id] = $tr;
- }
-
- $state_balance = $stateBalancesTable->newEntity();
- $final_transactions = [];
- $decay_start_transaction = $transactionsTable->find()->where(['transaction_type_id' => 9]);
- $decay_start_transaction_id = 0;
- if($decay_start_transaction->count()) {
- $decay_start_transaction_id = $decay_start_transaction->first()->id;
- }
- $decay_start_date = $stateBalancesTable->getDecayStartDateCached();
- $decay_start_time = 0;
- if($decay_start_date) {
- $decay_start_time = $decay_start_date->getTimestamp();
- }
-
- foreach($stateUserTransactions as $i => $su_transaction)
- {
- // sender or receiver when user has sended money
- // group name if creation
- // type: gesendet / empfangen / geschöpft
- // transaktion nr / id
- // date
- // balance
- $transaction = $transaction_indiced[$su_transaction->transaction_id];
-
- $final_transaction = [
- 'transaction_id' => $transaction->id,
- 'date' => $transaction->received,
- 'memo' => $transaction->memo
- ];
-
- $prev = null;
- if($i > 0 ) {
- $prev = $stateUserTransactions[$i-1];
- }
- if($prev)
- {
- if($prev->balance > 0)
- {
- $current = $su_transaction;
- $calculated_decay = $stateBalancesTable->calculateDecay($prev->balance, $prev->balance_date, $current->balance_date, true);
- $balance = floatval($prev->balance - $calculated_decay['balance']);
-
- if($balance)
- {
- $final_transaction['decay'] = [
- 'balance' => $balance,
- 'decay_duration' => $calculated_decay['interval']->format('%a days, %H hours, %I minutes, %S seconds'),
- 'decay_start' => $calculated_decay['start_date'],
- 'decay_end' => $calculated_decay['end_date']
- ];
- if($decay_start_time && $prev->transaction_id < $decay_start_transaction_id &&
- $current->transaction_id > $decay_start_transaction_id) {
- $final_transaction['decay']['decay_start_block'] = $decay_start_time;
- }
- // hint: use transaction id
- /*if($calculated_decay['start_date'] < $decay_start_time && $calculated_decay['end_date'] > $decay_start_time) {
- $final_transaction['decay']['decay_start_block'] = $decay_start_time;
- } else {
- echo "start block: " . $decay_start_time . " ";
- echo "start date: " . $calculated_decay['start_date'] . " ";
- echo "end date: " . $calculated_decay['end_date']. " ";
- }*/
- }
- }
- }
-
- // sender or receiver when user has sended money
- // group name if creation
- // type: gesendet / empfangen / geschöpft
- // transaktion nr / id
- // date
- // balance
- $transaction = $transaction_indiced[$su_transaction->transaction_id];
-
- if($su_transaction->transaction_type_id == 1) { // creation
- $creation = $transaction->transaction_creation;
-
- $final_transaction['name'] = 'Gradido Akademie';
- $final_transaction['type'] = 'creation';
- $final_transaction['target_date'] = $creation->target_date;
- //$final_transaction['creation_amount'] = $creation->amount;
- $final_transaction['balance'] = $creation->amount;
-
- } else if($su_transaction->transaction_type_id == 2) { // transfer or send coins
- $sendCoins = $transaction->transaction_send_coin;
- $otherUser = null;
- $final_transaction['balance'] = $sendCoins->amount;
- $other_user_public = '';
- if ($sendCoins->state_user_id == $user['id']) {
- $final_transaction['type'] = 'send';
-
- if(isset($involved_users[$sendCoins->receiver_user_id])) {
- $otherUser = $involved_users[$sendCoins->receiver_user_id];
- }
- $final_transaction['pubkey'] = bin2hex(stream_get_contents($sendCoins->receiver_public_key));
- } else if ($sendCoins->receiver_user_id == $user['id']) {
- $final_transaction['type'] = 'receive';
- if(isset($involved_users[$sendCoins->state_user_id])) {
- $otherUser = $involved_users[$sendCoins->state_user_id];
- }
- if($sendCoins->sender_public_key) {
- $final_transaction['pubkey'] = bin2hex(stream_get_contents($sendCoins->sender_public_key));
- }
- }
- if(null == $otherUser) {
- $otherUser = $stateUsersTable->newEntity();
- }
- $final_transaction['name'] = $otherUser->first_name . ' ' . $otherUser->last_name;
- $final_transaction['email'] = $otherUser->email;
- }
- if($i > 0 || !$skip_first_transaction) {
- $final_transactions[] = $final_transaction;
- }
-
- if($i == $stateUserTransactionsCount-1 && $decay) {
- $now = new FrozenTime();
- $calculated_decay = $stateBalancesTable->calculateDecay(
- $su_transaction->balance,
- $su_transaction->balance_date, $now, true);
- $decay_start_date = $stateBalancesTable->getDecayStartDateCached();
- $duration = $su_transaction->balance_date->timeAgoInWords();
- if($decay_start_date > $su_transaction->balance_date) {
- $duration = $decay_start_date->timeAgoInWords();
- }
- $balance = floatval($su_transaction->balance - $calculated_decay['balance']);
- if($balance) {
- $final_transactions[] = [
- 'type' => 'decay',
- 'balance' => $balance,
- 'decay_duration' => $duration,
- 'decay_start' => $calculated_decay['start_date'],
- 'decay_end' => $calculated_decay['end_date'],
- 'memo' => ''
- ];
- }
- }
- }
-
- return $final_transactions;
-
- }
-
- public function updateTxHash($transaction, $signatureMapString)
- {
- $transaction_id = $transaction->id;
- $previousTxHash = null;
- if($transaction_id > 1) {
- try {
- $previousTransaction = $this
- ->find('all', ['contain' => false])
- ->select(['tx_hash'])
- ->where(['id' => $transaction_id - 1])
- ->first();
- /*$previousTransaction = $transactionsTable->get($this->mTransactionID - 1, [
- 'contain' => false,
- 'fields' => ['tx_hash']
- ]);*/
- } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) {
- return ['state' => 'error', 'msg' => 'previous transaction not found', 'details' => $ex->getMessage()];
- }
- if(!$previousTransaction) {
- // shouldn't occur
- return ['state' => 'error', 'msg' => 'previous transaction not found'];
- }
- $previousTxHash = $previousTransaction->tx_hash;
- }
- try {
- //$transactionEntity->received = $transactionsTable->get($transactionEntity->id, ['contain' => false, 'fields' => ['received']])->received;
- $transaction->received = $this
- ->find('all', ['contain' => false])
- ->where(['id' => $transaction->id])
- ->select(['received'])->first()->received;
- } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) {
- return ['state' => 'error', 'msg' => 'current transaction not found in db', 'details' => $ex->getMessage()];
- }
-
- // calculate tx hash
- // previous tx hash + id + received + sigMap as string
- // Sodium use for the generichash function BLAKE2b today (11.11.2019), mabye change in the future
- $state = \Sodium\crypto_generichash_init();
- //echo "prev hash: $previousTxHash\n";
- if($previousTxHash != null) {
- \Sodium\crypto_generichash_update($state, stream_get_contents($previousTxHash));
- }
- //echo "id: " . $transactionEntity->id . "\n";
- \Sodium\crypto_generichash_update($state, strval($transaction->id));
- //echo "received: " . $transactionEntity->received;
- \Sodium\crypto_generichash_update($state, $transaction->received->i18nFormat('yyyy-MM-dd HH:mm:ss'));
- \Sodium\crypto_generichash_update($state, $signatureMapString);
- $transaction->tx_hash = \Sodium\crypto_generichash_final($state);
- if ($this->save($transaction)) {
- return true;
- }
- return ['state' => 'error', 'msg' => 'error by saving transaction', 'details' => $transaction->getErrors()];
- }
-
- /*!
- * @return: false if no decay start block found
- * @return: DateTime Object with start date if one start block found
- * @return: ['state':'error'] if more than one found
- */
- public function getDecayStartDate()
- {
- $transaction = $this->find()->where(['transaction_type_id' => 9])->select(['received'])->order(['received' => 'ASC']);
- if($transaction->count() == 0) {
- return null;
- }
- return $transaction->first()->received;
- }
-
- public function fillStateUserTransactions()
- {
- $missing_transaction_ids = [];
- $transaction_ids = $this
- ->find('all')
- ->select(['id', 'transaction_type_id'])
- ->order(['id'])
- ->where(['transaction_type_id <' => 6])
- ->all()
- ;
- $state_user_transaction_ids = $this->StateUserTransactions
- ->find('all')
- ->select(['transaction_id'])
- ->group(['transaction_id'])
- ->order(['transaction_id'])
- ->toArray()
- ;
- $i2 = 0;
- $count = count($state_user_transaction_ids);
- foreach($transaction_ids as $tr_id) {
- //echo "$i1: ";
- if($i2 >= $count) {
- $missing_transaction_ids[] = $tr_id;
- //echo "adding to missing: $tr_id, continue ";
- continue;
- }
- $stu_id = $state_user_transaction_ids[$i2];
- if($tr_id->id == $stu_id->transaction_id) {
- $i2++;
- //echo "after i2++: $i2 ";
- } else if($tr_id->id < $stu_id->transaction_id) {
- $missing_transaction_ids[] = $tr_id;
- //echo "adding to missing: $tr_id ";
- }
- }
-
-
- $tablesForType = [
- 1 => $this->TransactionCreations,
- 2 => $this->TransactionSendCoins,
- 3 => $this->TransactionGroupCreates,
- 4 => $this->TransactionGroupAddaddress,
- 5 => $this->TransactionGroupAddaddress
- ];
- $idsForType = [];
- foreach($missing_transaction_ids as $i => $transaction) {
- if(!isset($idsForType[$transaction->transaction_type_id])) {
- $idsForType[$transaction->transaction_type_id] = [];
- }
- $idsForType[$transaction->transaction_type_id][] = $transaction->id;
- }
- $entities = [];
- $state_user_ids = [];
- foreach($idsForType as $type_id => $transaction_ids) {
- $specific_transactions = $tablesForType[$type_id]->find('all')->where(['transaction_id IN' => $transaction_ids])->toArray();
- $keys = $tablesForType[$type_id]->getSchema()->columns();
- //var_dump($keys);
- foreach($specific_transactions as $specific) {
-
- foreach($keys as $key) {
- if(preg_match('/_user_id/', $key)) {
- $entity = $this->StateUserTransactions->newEntity();
- $entity->transaction_id = $specific['transaction_id'];
- $entity->transaction_type_id = $type_id;
- $entity->state_user_id = $specific[$key];
- if(!in_array($entity->state_user_id, $state_user_ids)) {
- array_push($state_user_ids, $entity->state_user_id);
- }
- $entities[] = $entity;
- }
- }
- }
- }
- if(count($state_user_ids) < 1) {
- return ['success' => true];
- }
- //var_dump($entities);
- $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers');
- $existingStateUsers = $stateUsersTable->find('all')->select(['id'])->where(['id IN' => $state_user_ids])->order(['id'])->all();
- $existing_state_user_ids = [];
- $finalEntities = [];
- foreach($existingStateUsers as $stateUser) {
- $existing_state_user_ids[] = $stateUser->id;
- }
- foreach($entities as $entity) {
- if(in_array($entity->state_user_id, $existing_state_user_ids)) {
- array_push($finalEntities, $entity);
- }
- }
-
- $save_results = $this->StateUserTransactions->saveManyWithErrors($finalEntities);
- if(!$save_results['success']) {
- $save_results['msg'] = 'error by saving at least one state user transaction';
- }
- return $save_results;
- }
-}
diff --git a/community_server/src/Model/Table/UsersTable.php b/community_server/src/Model/Table/UsersTable.php
deleted file mode 100644
index 0e99ba521..000000000
--- a/community_server/src/Model/Table/UsersTable.php
+++ /dev/null
@@ -1,130 +0,0 @@
-setTable('users');
- $this->setDisplayField('id');
- $this->setPrimaryKey('id');
-
- $this->addBehavior('Timestamp');
-
- $this->hasMany('EmailOptIn', [
- 'foreignKey' => 'user_id',
- ]);
- $this->hasMany('UserBackups', [
- 'foreignKey' => 'user_id',
- ]);
- $this->hasMany('UserRoles', [
- 'foreignKey' => 'user_id',
- ]);
- }
-
- /**
- * Default validation rules.
- *
- * @param \Cake\Validation\Validator $validator Validator instance.
- * @return \Cake\Validation\Validator
- */
- public function validationDefault(Validator $validator)
- {
- $validator
- ->integer('id')
- ->allowEmptyString('id', null, 'create');
-
- $validator
- ->email('email')
- ->requirePresence('email', 'create')
- ->notEmptyString('email')
- ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']);
-
- $validator
- ->scalar('first_name')
- ->maxLength('first_name', 150)
- ->requirePresence('first_name', 'create')
- ->notEmptyString('first_name');
-
- $validator
- ->scalar('last_name')
- ->maxLength('last_name', 255)
- ->allowEmptyString('last_name');
-
- $validator
- ->requirePresence('password', 'create')
- ->notEmptyString('password');
-
- $validator
- ->allowEmptyString('pubkey');
-
- $validator
- ->allowEmptyString('privkey');
-
- $validator
- ->boolean('email_checked')
- ->notEmptyString('email_checked');
-
- $validator
- ->scalar('language')
- ->maxLength('language', 4)
- ->notEmptyString('language');
-
- return $validator;
- }
-
- /**
- * Returns a rules checker object that will be used for validating
- * application integrity.
- *
- * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
- * @return \Cake\ORM\RulesChecker
- */
- public function buildRules(RulesChecker $rules)
- {
- $rules->add($rules->isUnique(['email']));
-
- return $rules;
- }
-
- /**
- * Returns the database connection name to use by default.
- *
- * @return string
- */
- public static function defaultConnectionName()
- {
- return 'loginServer';
- }
-}
diff --git a/community_server/src/Model/Transactions/Record.php b/community_server/src/Model/Transactions/Record.php
deleted file mode 100644
index 5572730ef..000000000
--- a/community_server/src/Model/Transactions/Record.php
+++ /dev/null
@@ -1,575 +0,0 @@
-signature = $signature;
- $this->publicKey = $pubkey;
- }
-
- public function finalize($transactionId)
- {
- $signaturesTable = TableRegistry::getTableLocator()->get('TransactionSignatures');
- $entity = $signaturesTable->newEntity();
- $entity->transaction_id = $transactionId;
- if(strlen($this->signature) != 128) {
- return ['state' => 'error', 'msg' => 'invalid signature size', 'details' => strlen($this->signature)];
- }
- if(strlen($this->publicKey) != 64) {
- return ['state' => 'error', 'msg' => 'invalid pubkey size', 'details' => strlen($this->publicKey)];
- }
- if(!preg_match('/^[0-9a-fA-F]*$/', $this->signature)) {
- return ['state' => 'error', 'msg' => 'signature isn\'t in hex format'];
- }
- if(!preg_match('/^[0-9a-fA-F]*$/', $this->publicKey)) {
- return ['state' => 'error', 'msg' => 'publicKey isn\'t in hex format'];
- }
- $entity->signature = hex2bin($this->signature);
- $entity->pubkey = hex2bin($this->publicKey);
-
- if(!$signaturesTable->save($entity)) {
- return ['state' => 'error', 'msg' => 'error saving signature', 'details' => $entity->getErrors()];
- }
- return true;
- }
-}
-
-
-
-class GradidoModifieUserBalance
-{
- private $state_users = [];
- private $user_balances = [];
-
- public function getUserId($userPublicKey)
- {
- $stateUsersTable = TableRegistry::getTableLocator()->get('StateUsers');
-
- $stateUser = $stateUsersTable->find('all')->where(['public_key' => hex2bin($userPublicKey)]);
- if($stateUser->isEmpty()) {
- return ['state' => 'error', 'msg' => '[GradidoModifieUserBalance::getUserId] couldn\'t find user via public key'];
- }
- $id = $stateUser->first()->id;
- if($id && is_int($id) && (int)$id > 0 && !in_array((int)$id, $this->state_users)) {
- array_push($this->state_users, (int)$id);
- }
- return $id;
- }
-
- public function updateBalance($newBalance, $recordDate, $userId)
- {
- $stateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances');
- $state_balance_query = $stateBalancesTable->find()->where(['state_user_id' => $userId])->order(['record_date ASC']);
- $state_balance = null;
- if($state_balance_query->count() > 0) {
- $state_balance = $state_balance_query->last();
- } else {
- $state_balance = $stateBalancesTable->newEntity();
- $state_balance->state_user_id = $userId;
- }
- $state_balance->amount = $newBalance;
- $state_balance->record_date = $recordDate;
- $this->user_balances[$userId] = $state_balance;
- $stateBalancesTable->save($state_balance);
- return true;
- //$this->user_balances[$userId] = ['balance' => $newBalance, '']
- //
- //return $stateBalancesTable->updateBalanceWithTransaction($newBalance, $recordDate, $userId);
-
- /*$first_of_month = new Time("$year-$month-01 00:00");
- $stateBalanceQuery = $stateBalancesTable
- ->find('all')
- ->where(['state_user_id' => $userId])
- ->order(['record_date' => 'DESC'])
- ->limit(1);
- $entity = null;
-
- if(!$stateBalanceQuery->isEmpty()) {
- $entity = $stateBalanceQuery->first();
- if($entity->record_date != NULL &&
- ($entity->record_date > $recordDate || $entity->record_date->day == 1)) {
- return false;
- }
- } else {
- $entity = $stateBalancesTable->newEntity();
- $entity->state_user_id = $userId;
- }
- $entity->record_date = $recordDate;
- $entity->amount = $newBalance;
- /*if(!$stateBalancesTable->save($entity)) {
- return ['state' => 'error', 'msg' => 'error saving state balance', 'details' => $entity->getErrors()];
- }*/
- //return true;
- }
-
- public function getAllStateUsers()
- {
- return $this->state_users;
- }
- public function getAllStateUserBalances()
- {
- return $this->user_balances;
- }
-}
-
-class ManageNodeGroupAdd extends GradidoModifieUserBalance
-{
- /*
- "add_user": {
- "user\": " << user << ",
- },
- OR
-
- "move_user_inbound|move_user_outbound": {
- "user": " << user << ",
- "other_group": " << other_group << ",
- "paired_transaction_id": {
- "seconds": << ts.seconds <<,
- "nanos": << ts.nanos
- }
- },
-
- */
-
- private $user_pubkey;
- private $other_group = '';
- private $remove_from_group = false;
-
- public function __construct($data)
- {
- $this->user_pubkey = $data['user'];
- if(isset($data['other_group'])) {
- $this->other_group = $data['other_group'];
- }
- }
-
- public function finalize($transactionId, $received)
- {
- $transactionGroupAddadressTable = TableRegistry::getTableLocator()->get('TransactionGroupAddaddress');
- $stateGroupAddresses = TableRegistry::getTableLocator()->get('StateGroupAddresses');
- $transactionGroupEntity = $transactionGroupAddadressTable->newEntity();
- if(!is_int($transactionId)) {
- return ['state' => 'error', 'msg' => '[ManageNodeGroupAdd::finalize] transaction id is not int', 'details' => $transactionId];
- }
- $transactionGroupEntity->transaction_id = $transactionId;
- $transactionGroupEntity->address_type_id = 1;
- if(strlen($this->user_pubkey) != 64) {
- return ['state' => 'error', 'msg' => 'invalid size user pubkey', 'details' => strlen($this->user_pubkey)];
- }
- if(!preg_match('/^[0-9a-fA-F]*$/', $this->user_pubkey)) {
- return ['state' => 'error', 'msg' => 'user_pubkey isn\'t in hex format'];
- }
-
- $userPubkeyBin = hex2bin($this->user_pubkey);
-
- $transactionGroupEntity->public_key = $userPubkeyBin;
- $user_id = $this->getUserId($this->user_pubkey);
- if(!is_int($user_id)) {
- return ['state' => 'error', 'msg' => '[ManageNodeGroupAdd::finalize] user id is not int', 'details' => $user_id];
- }
- $transactionGroupEntity->state_user_id = $user_id;
- $transactionGroupEntity->remove_from_group = $this->remove_from_group;
- if(!$transactionGroupAddadressTable->save($transactionGroupEntity)) {
- return ['state' => 'error', 'msg' => 'error saving TransactionGroupAddaddress Entity', 'details' => $transactionGroupEntity->getErrors()];
- }
-
-
- if($this->remove_from_group) {
- $stateGroup_query = $stateGroupAddresses->find('all')->where(['public_key' => hex2bin($this->user_pubkey)]);
- if(!$stateGroup_query->isEmpty()) {
- $stateGroupAddresses->delete($stateGroup_query->first());
- }
- } else {
- $stateGroupAddressesEntity = $stateGroupAddresses->newEntity();
- $stateGroupAddressesEntity->group_id = 1;
- $stateGroupAddressesEntity->public_key = $userPubkeyBin;
- $stateGroupAddressesEntity->address_type_id = 1;
- if(!$stateGroupAddresses->save($stateGroupAddressesEntity)) {
- return ['state' => 'error', 'msg' => 'error saving state group addresses entity', 'details' => $stateGroupAddressesEntity->getErrors()];
- }
- }
-
- return true;
- }
-
- public function setRemoveFromGroup($removeFromGroup) {
- $this->remove_from_group = $removeFromGroup;
- }
-}
-
-
-class GradidoCreation extends GradidoModifieUserBalance
-{
- /*
- * "gradido_creation": {
- "user": " << user << ",
- "new_balance": << v.new_balance << ,
- "prev_transfer_rec_num": << v.prev_transfer_rec_num <<,
- "amount": << v.amount <<
- }
- */
- private $userPubkey;
- private $amount;
- private $targetDate; // seems currently not in node server implementet, use hedera date until it is implemented
- private $new_balance;
-
-
- public function __construct($data)
- {
- $this->userPubkey = $data['user'];
- $this->amount = $data['amount']['amount'];
- $this->new_balance = $data['new_balance']['amount'];
- //$this->targetDate = $received;
- }
-
- public function finalize($transactionId, $received)
- {
- // TODO: don't use, after node server transmit correct date
- $this->targetDate = $received;
-
- $transactionCreationTable = TableRegistry::getTableLocator()->get('TransactionCreations');
-
-
- $state_user_id = $this->getUserId($this->userPubkey);
- if(!is_int($state_user_id)) {
- return $state_user_id;
- }
-
- $entity = $transactionCreationTable->newEntity();
- $entity->transaction_id = $transactionId;
- $entity->amount = $this->amount;
- $entity->target_date = $this->targetDate;
- $entity->state_user_id = $state_user_id;
-
- if(!$transactionCreationTable->save($entity)) {
- return ['state' => 'error', 'msg' => 'error saving create transaction', 'details' => $entity->getErrors()];
- }
-
- $balance_result = $this->updateBalance($this->new_balance, $received, $state_user_id);
- if(is_array($balance_result)) {
- return $balance_result;
- }
-
- return true;
- }
-
-
-
-}
-
-class GradidoTransfer extends GradidoModifieUserBalance
-{
- /*
- "local_transfer|inbound_transfer|outbound_transfer": {
- "sender": {
- "user": " << sender << ",
- "new_balance": << tt.sender.new_balance << ,
- "prev_transfer_rec_num": << tt.sender.prev_transfer_rec_num <<
- },
- "receiver": {
- "user": " << receiver << ",
- "new_balance": << tt.receiver.new_balance << ,
- "prev_transfer_rec_num": << tt.receiver.prev_transfer_rec_num <<
- },
- "amount": << tt.amount <<
- },
- * */
- private $amount;
- private $sender_new_balance = null;
- private $sender_pubkey;
-
- private $receiver_pubkey;
- private $receiver_new_balance = null;
-
-
- public function __construct($data)
- {
- $this->amount = $data['amount']['amount'];
-
- $sender = $data['sender'];
- $this->sender_pubkey = $sender['user'];
- if(isset($sender['new_balance'])) {
- $this->sender_new_balance = $sender['new_balance']['amount'];
- }
-
- $receiver = $data['receiver'];
- $this->receiver_pubkey = $receiver['user'];
- if(isset($receiver['new_balance'])) {
- $this->receiver_new_balance = $receiver['new_balance']['amount'];
- }
-
- }
-
- public function finalize($transactionId, $received)
- {
- $transactionTransferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins');
- if(strlen($this->sender_pubkey) != 64) {
- return ['state' => 'error', 'msg' => 'invalid size sender pubkey', 'details' => strlen($this->user_pubkey)];
- }
- if(!preg_match('/^[0-9a-fA-F]*$/', $this->sender_pubkey)) {
- return ['state' => 'error', 'msg' => 'sender_pubkey isn\'t in hex format'];
- }
- if(strlen($this->receiver_pubkey) != 64) {
- return ['state' => 'error', 'msg' => 'invalid size receiver pubkey', 'details' => strlen($this->user_pubkey)];
- }
- if(!preg_match('/^[0-9a-fA-F]*$/', $this->receiver_pubkey)) {
- return ['state' => 'error', 'msg' => 'receiver_pubkey isn\'t in hex format'];
- }
-
- $sender_id = $this->getUserId($this->sender_pubkey);
- $receiver_id = $this->getUserId($this->receiver_pubkey);
- if(is_array($sender_id) && is_array($receiver_id)) {
- return ['state' => 'error', 'msg' => 'neither sender or receiver known'];
- }
- $transferEntity = $transactionTransferTable->newEntity();
- $transferEntity->transaction_id = $transactionId;
- $transferEntity->sender_public_key = hex2bin($this->sender_pubkey);
- $transferEntity->receiver_public_key = hex2bin($this->receiver_pubkey);
- $transferEntity->amount = $this->amount;
- if($this->sender_new_balance != null) {
- $transferEntity->sender_final_balance = $this->sender_new_balance;
-
- if(is_int($sender_id) && $sender_id > 0) {
- $transferEntity->state_user_id = $sender_id;
- $balance_result = $this->updateBalance($this->sender_new_balance, $received, $sender_id);
- if(is_array($balance_result)) {
- return $balance_result;
- }
- }
- }
- if($this->receiver_new_balance != null && is_int($receiver_id) && $receiver_id > 0) {
- $transferEntity->receiver_user_id = $receiver_id;
- $balance_result = $this->updateBalance($this->receiver_new_balance, $received, $receiver_id);
- if(is_array($balance_result)) {
- return $balance_result;
- }
- }
-
- if(!$transactionTransferTable->save($transferEntity)) {
- return ['state' => 'error', 'msg' => 'error saving transaction send coins entity', 'details' => $transferEntity->getErrors()];
- }
-
- return true;
- }
-
-}
-
-
-
-
-class Record
-{
- private $sequenceNumber = 0;
- private $runningHash = null;
- private $transactionType = '';
- private $memo = '';
- private $signatures = [];
- private $received;
- private $transactionObj = null;
- private $result;
- private $partCount = 0;
-
- public function __construct()
- {
-
- }
-
-
- public function parseRecord($json) {
- if(!isset($json['record_type'])) {
- return false;
- }
- //var_dump($json);
- switch($json['record_type']) {
- case 'GRADIDO_TRANSACTION':
- return $this->parseTransaction($json['transaction']);
- case 'MEMO':
- $this->memo .= $json['memo'];
- return true;
- case 'SIGNATURES':
- return $this->parseSignatures($json['signature']);
- case 'STRUCTURALLY_BAD_MESSAGE':
- case 'RAW_MESSAGE':
- case 'BLANK':
- return false;
- }
- }
-
- /*!
- * \brief save data parts in db
- */
- public function finalize()
- {
- $transactionTypesTable = TableRegistry::getTableLocator()->get('TransactionTypes');
- $transactionsTable = TableRegistry::getTableLocator()->get('Transactions');
- $stateUserTransactionsTable = TableRegistry::getTableLocator()->get('StateUserTransactions');
-
- $transactionTypeName = $this->nodeTransactionTypeToDBTransactionType($this->transactionType);
- $transactionTypeResults = $transactionTypesTable->find('all')->where(['name' => $transactionTypeName]);
- if($transactionTypeResults->isEmpty()) {
- return [
- 'state' => 'error', 'msg' => 'transaction type not found',
- 'details' => ['nodeType' => $this->transactionType, 'dbType' => $transactionTypeName]
- ];
- }
- if(!$this->transactionObj) {
- return ['state' => 'error', 'msg' => 'transaction obj is null'];
- }
- if($this->sequenceNumber <= 0) {
- return ['state' => 'error', 'msg' => 'sequence number invalid', 'details' => $this->sequenceNumber];
- }
- $transactionExistResult = $transactionsTable->find('all')->where(['id' => intval($this->sequenceNumber)]);
- if(!$transactionExistResult->isEmpty()) {
- return ['state' => 'warning', 'msg' => 'transaction already exist in db', 'details' => $this->sequenceNumber];
- }
- $newTransaction = $transactionsTable->newEntity();
- $newTransaction->id = $this->sequenceNumber;
- $newTransaction->transaction_type_id = $transactionTypeResults->first()->id;
- $newTransaction->memo = $this->memo;
- if($this->runningHash != '' && strlen($this->runningHash) % 2 == 0) {
- $newTransaction->tx_hash = hex2bin($this->runningHash);
- }
- $newTransaction->received = $this->received;
-
- //! TODO change into transaction, if at least one fail, rollback
- /*
- // In a controller.
- $articles->getConnection()->transactional(function () use ($articles, $entities) {
- foreach ($entities as $entity) {
- $articles->save($entity, ['atomic' => false]);
- }
- });
- */
- if(!$transactionsTable->save($newTransaction)) {
- return ['state' => 'error', 'msg' => 'error saving transaction', 'details' => $newTransaction->getErrors()];
- }
-
- foreach($this->signatures as $sign) {
- $sign_result = $sign->finalize($this->sequenceNumber);
- if($sign_result !== true) {
- return ['state' => 'error', 'msg', 'error finalizing signature', 'details' => $sign_result];
- }
- }
- $transaction_obj_result = $this->transactionObj->finalize($newTransaction->id, $this->received);
- if($transaction_obj_result !== true) {
- return ['state' => 'error', 'msg' => 'error finalizing transaction object', 'details' => $transaction_obj_result];
- }
- $state_users = $this->transactionObj->getAllStateUsers();
- $sut_entities = [];
- $state_user_balances = $this->transactionObj->getAllStateUserBalances();
- foreach($state_users as $state_user_id) {
- $entity = $stateUserTransactionsTable->newEntity();
- $entity->state_user_id = $state_user_id;
- $entity->transaction_id = $newTransaction->id;
- $entity->transaction_type_id = $newTransaction->transaction_type_id;
- $entity->balance = $state_user_balances[$state_user_id]->amount;
- $entity->balance_date = $state_user_balances[$state_user_id]->record_date;
- $sut_entities[] = $entity;
- }
- $sut_results = $stateUserTransactionsTable->saveMany($sut_entities);
- foreach($sut_results as $i => $result) {
- if(false == $result) {
- return ['state' => 'error', 'msg' => 'error saving state_user_transaction', 'details' => $sut_entities[$i]->getErrors()];
- }
- }
-
- return true;
-
- }
-
- private function nodeTransactionTypeToDBTransactionType($nodeTransactionType)
- {
- switch($nodeTransactionType) {
- case 'GRADIDO_CREATION':
- return 'creation';
-
- case 'MOVE_USER_INBOUND':
- case 'ADD_USER':
- return 'group add member';
-
- case 'MOVE_USER_OUTBOUND':
- return 'group remove member';
-
- case 'LOCAL_TRANSFER':
- case 'INBOUND_TRANSFER':
- case 'OUTBOUND_TRANSFER':
- return 'transfer';
- }
- return 'unknown';
- }
-
- private function parseSignatures($signaturesArray)
- {
- foreach($signaturesArray as $sign) {
- $this->signatures[] = new Signature($sign['signature'], $sign['pubkey']);
- }
- return true;
- }
-
- private function parseTransaction($data)
- {
- $this->transactionType = $data['transaction_type'];
- $sign = $data['signature'];
- $this->signatures[] = new Signature($sign['signature'], $sign['pubkey']);
-
- $hedera = $data['hedera_transaction'];
- $this->sequenceNumber = $hedera['sequenceNumber'];
- $this->runningHash = $hedera['runningHash'];
- $this->received = Time::createFromTimestamp($hedera['consensusTimestamp']['seconds']);
-
- $field_index = '';
- $class_name = '';
-
- $removeFromGroup = false;
- switch($this->transactionType)
- {
- case 'GRADIDO_CREATION': $field_index = 'gradido_creation'; $class_name = 'GradidoCreation'; break;
- case 'ADD_USER': $field_index = 'add_user'; $class_name = 'ManageNodeGroupAdd'; break;
- case 'MOVE_USER_INBOUND': $field_index = 'move_user_inbound'; $class_name = 'ManageNodeGroupAdd'; break;
- case 'MOVE_USER_OUTBOUND': $field_index = 'move_user_outbound'; $class_name = 'ManageNodeGroupAdd'; $removeFromGroup = true; break;
- case 'LOCAL_TRANSFER': $field_index = 'local_transfer'; $class_name = 'GradidoTransfer'; break;
- case 'INBOUND_TRANSFER': $field_index = 'inbound_transfer'; $class_name = 'GradidoTransfer'; break;
- case 'OUTBOUND_TRANSFER': $field_index = 'outbound_transfer'; $class_name = 'GradidoTransfer'; break;
- }
- if($class_name == '' || $field_index == '') {
- return ['state' => 'error', 'msg' => 'node transaction type unknown', 'details' => $this->transactionType];
- }
- $class_name = 'Model\\Transactions\\' . $class_name;
- $this->transactionObj = new $class_name($data[$field_index]);
- if($class_name == 'ManageNodeGroupAdd') {
- $this->transactionObj->setRemoveFromGroup($removeFromGroup);
- }
-
- $this->result = $data['result'];
- $this->partCount = intval($data['parts']);
- $this->memo = $data['memo'];
- return true;
- }
-
- public function getSequenceNumber() {
- return $this->sequenceNumber;
- }
- public function getPartCount() {
- return $this->partCount;
- }
-
-}
\ No newline at end of file
diff --git a/community_server/src/Model/Transactions/SignatureMap.php b/community_server/src/Model/Transactions/SignatureMap.php
deleted file mode 100644
index cbe48e636..000000000
--- a/community_server/src/Model/Transactions/SignatureMap.php
+++ /dev/null
@@ -1,68 +0,0 @@
-mProtoSigMap = $protoSigMap;
- }
-
- public function getProto() {
- return $this->mProtoSigMap;
- }
-
- static public function fromEntity($transactionSignatures)
- {
-
- $protoSigMap = new \Proto\Gradido\SignatureMap();
- $sigPairs = $protoSigMap->getSigPair();
- //echo "sigPairs: "; var_dump($sigPairs); echo " ";
- //return null;
- foreach($transactionSignatures as $signature) {
- $sigPair = new \Proto\Gradido\SignaturePair();
- $sigPair->setPubKey(stream_get_contents($signature->pubkey));
- $sigPair->setEd25519(stream_get_contents($signature->signature));
-
- $sigPairs[] = $sigPair;
- //array_push($sigPairs, $sigPair);
- }
- return new SignatureMap($protoSigMap);
- }
-
- static public function build($bodyBytes, array $keys)
- {
- $protoSigMap = new \Proto\Gradido\SignatureMap();
- $sigPairs = $protoSigMap->getSigPair();
- //echo "sigPairs: "; var_dump($sigPairs); echo " ";
- //return null;
-
- // sign with keys
- foreach($keys as $key) {
- $sigPair = new \Proto\Gradido\SignaturePair();
- $sigPair->setPubKey(hex2bin($key['pub']));
- $sigPair->setEd25519(sodium_crypto_sign_detached($bodyBytes, hex2bin($key['priv'])));
-
- $sigPairs[] = $sigPair;
- }
- //array_push($sigPairs, $sigPair);
-
- return new SignatureMap($protoSigMap);
- }
-
-
-}
\ No newline at end of file
diff --git a/community_server/src/Model/Transactions/Transaction.php b/community_server/src/Model/Transactions/Transaction.php
deleted file mode 100644
index 810f20c9d..000000000
--- a/community_server/src/Model/Transactions/Transaction.php
+++ /dev/null
@@ -1,289 +0,0 @@
-mProtoTransaction = $base64Data;
- $this->mTransactionBody = new TransactionBody($this->mProtoTransaction->getBodyBytes());
- return;
- }
-
- try {
- $transactionBin = sodium_base642bin($base64Data, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
- } catch(\SodiumException $e) {
- //$this->addError('Transaction', $e->getMessage());// . ' ' . $base64Data);
- //return;
- $transactionBin = base64_decode($base64Data, true);
- if($transactionBin == false) {
- $this->addError('Transaction', $e->getMessage());// . ' ' . $base64Data);
- $this->addError('base64', $base64Data);
- return;
- }
- }
- //*/}
-
- if($transactionBin == false) {
- //$this->addError('base64 decode failed');
- $this->addError('Transaction', 'base64 decode error: ' . $base64Data);
- } else {
- //var_dump($transactionBin);
- $this->mProtoTransaction = new \Proto\Gradido\GradidoTransaction();
- try {
- $this->mProtoTransaction->mergeFromString($transactionBin);
- //var_dump($this->mProtoTransaction);
- // cannot catch Exception with cakePHP, I don't know why
- } catch(\Google\Protobuf\Internal\GPBDecodeException $e) {
- //var_dump($e);
- $this->addError('Transaction', $e->getMessage());
- return;
- }//*/
-
- //echo 'serialize to json: ';
- //echo $this->mProtoTransaction->serializeToJsonString();
- //echo "body bytes: ";
- //var_dump($this->mProtoTransaction->getBodyBytes());
- //echo " end body bytes ";
- $this->mTransactionBody = new TransactionBody($this->mProtoTransaction->getBodyBytes());
- }
- }
-
- static public function build(\Proto\Gradido\TransactionBody $transactionBody, $senderKeyPair)
- {
- $protoTransaction = new \Proto\Gradido\GradidoTransaction();
-
- $recevied = new \Proto\Gradido\TimestampSeconds();
- $recevied->setSeconds(time());
- $protoTransaction->setReceived($recevied);
-
- $bodyBytes = $transactionBody->serializeToString();
-
- $sigMap = SignatureMap::build($bodyBytes, [$senderKeyPair]);
- $protoTransaction->setSigMap($sigMap->getProto());
-
- $protoTransaction->setBodyBytes($bodyBytes);
-
- return $protoTransaction;
-
- }
-
- public function getTransactionBody() {
- return $this->mTransactionBody;
- }
-
- public function getFirstPublic()
- {
- if(!$this->mProtoTransaction || !$this->mProtoTransaction->getSigMap()) {
- return '';
- }
- $sigPairs = $this->mProtoTransaction->getSigMap()->getSigPair();
- return $sigPairs[0]->getPubKey();
- }
-
- public function getFirstSigningUser()
- {
- return $this->getStateUserFromPublickey($this->getFirstPublic());
- }
-
- public function getId() {
- return $this->mProtoTransaction->getId();
- }
-
- public function validate() {
- $sigMap = $this->mProtoTransaction->getSigMap();
- if(!$sigMap) {
- $this->addError('Transaction', 'signature map is zero');
- //var_dump($this->mProtoTransaction);
- return false;
- }
- //var_dump($sigMap);
- //die();
- $sigPairs = $sigMap->getSigPair();
- $bodyBytes = $this->mProtoTransaction->getBodyBytes();
-
-
- if(!$sigPairs || count($sigPairs) < 1) {
- $this->addError('Transaction::validate', 'no signature found');
- return false;
- }
-
- // check signature(s)
- foreach($sigPairs as $sigPair) {
- //echo 'sig Pair: '; var_dump($sigPair); echo " ";
- $pubkey = $sigPair->getPubKey();
- $signature = $sigPair->getEd25519();
- //echo "verify bodybytes: " . bin2hex($bodyBytes) . ' ';
- if (!\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) {
- $this->addError('Transaction::validate', 'signature for key ' . bin2hex($pubkey) . ' isn\'t valid ' );
- return false;
- }
- }
-
- if(!$this->mTransactionBody->validate($sigPairs)) {
- $this->addErrors($this->mTransactionBody->getErrors());
- return false;
- }
-
- return true;
- }
-
- public function save()
- {
- $connection = ConnectionManager::get('default');
- $connection->begin();
- //id transaction_id signature pubkey
-
- if (!$this->mTransactionBody->save($this->getFirstPublic(), $this->mProtoTransaction->getSigMap())) {
- $this->addErrors($this->mTransactionBody->getErrors());
- $connection->rollback();
- // correct auto-increment value to prevent gaps
- $transactionsTable = $this->getTable('transactions');
- $transactions = $transactionsTable->find()->select(['id'])->contain(false);
- $count = $transactions->count();
- $connection = ConnectionManager::get('default');
- $connection->execute("ALTER TABLE `transactions` auto_increment = $count;");
-
- return false;
- }
-
- // save transaction signatures
- $transactionsSignaturesTable = TableRegistry::getTableLocator()->get('transaction_signatures');
- $transactionId = $this->mTransactionBody->getTransactionID();
- //signature pubkey
-
- $sigPairs = $this->mProtoTransaction->getSigMap()->getSigPair();
- //echo "sigPairs: "; var_dump($sigPairs);
- $signatureEntitys = [];
- foreach($sigPairs as $sigPair) {
- $signatureEntity = $transactionsSignaturesTable->newEntity();
- $signatureEntity->transaction_id = $transactionId;
- $signatureEntity->signature = $sigPair->getEd25519();
- $signatureEntity->pubkey = $sigPair->getPubKey();
- array_push($signatureEntitys, $signatureEntity);
- }
- //debug($signatureEntitys);
- if(!$transactionsSignaturesTable->saveMany($signatureEntitys)) {
- foreach($signatureEntitys as $entity) {
- $errors = $entity->getErrors();
- if(!$errors && count($errors) > 0) {
- $pubkeyHex = bin2hex($entity->pubkey);
- $this->addError('Transaction::save', 'error saving signature for pubkey: ' . $pubkeyHex . ', with errors: ' . json_encode($errors) );
- }
- }
- $connection->rollback();
- return false;
- }
-
- $connection->commit();
-
- $specificTransaction = $this->mTransactionBody->getSpecificTransaction();
-
- $specificTransaction->sendNotificationEmail($this->mTransactionBody->getMemo());
- $this->addWarnings($specificTransaction->getWarnings());
- return true;
- }
-
- static public function fromTable($id)
- {
- $transactionsTable = TableRegistry::getTableLocator()->get('transactions');
- $transactionEntry = $transactionsTable
- ->find('all')
- ->where(['id' => $id])
- ->contain([
- 'TransactionCreations',
- 'TransactionSendCoins',
- 'TransactionSignatures'])
- ->first();
- //var_dump($transactionEntry->toArray());
- $protoTransaction = new \Proto\Gradido\Transaction();
-
-
-
- $protoTransaction->setId($transactionEntry->id);
-
-
- $recevied = new \Proto\Gradido\TimestampSeconds();
- $recevied->setSeconds($transactionEntry->received->getTimestamp());
- $protoTransaction->setReceived($recevied);
-
-
- $sigMap = SignatureMap::fromEntity($transactionEntry->transaction_signatures);
- $protoTransaction->setSigMap($sigMap->getProto());
-
- //echo "sig map: check ";
- $protoTransaction->setTxHash(stream_get_contents($transactionEntry->tx_hash));
-
- $body = TransactionBody::fromEntity($transactionEntry->memo, $transactionEntry);
- if(is_array($body)) {
- return ['state' => 'error', 'msg' => 'error creating body transaction', 'details' => $body];
- }
-
- // validate signatures
- $sigPairs = $sigMap->getProto()->getSigPair();
-
- if(!$sigPairs || count($sigPairs) < 1) {
- return ['state' => 'error', 'msg' => 'error no signatures found'];
- }
-
- //echo "verify bodybytes: " . bin2hex($bodyBytes) . ' ';
- $created = new \Proto\Gradido\TimestampSeconds();
- $created->setSeconds($recevied->getSeconds());
- $body->setCreated($created);
- $bodyBytes = $body->serializeToString();
- $createTrys = 0;
- $createRight = false;
- // check signature(s) and
- // try to get created field of TransactionBody right, because it wasn't saved
- foreach($sigPairs as $sigPair) {
- //echo 'sig Pair: '; var_dump($sigPair); echo " ";
- $pubkey = $sigPair->getPubKey();
- $signature = $sigPair->getEd25519();
- if(!$createRight) {
- while($createTrys < 500) {
- if(\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) {
- $createRight = true;
- break;
- } else {
- $createTrys++;
- $created->setSeconds($created->getSeconds() - 1);
- //$body->setCreated($created);
- $bodyBytes = $body->serializeToString();
- }
- }
- }
-
- if (!\Sodium\crypto_sign_verify_detached($signature, $bodyBytes, $pubkey)) {
- return ['state' => 'error', 'msg' => 'signature for key ' . bin2hex($pubkey) . ' isn\'t valid '];
- }
- }
-
- $protoTransaction->setBodyBytes($bodyBytes);
-
-
-
- return $protoTransaction;
- }
-
-}
\ No newline at end of file
diff --git a/community_server/src/Model/Transactions/TransactionBase.php b/community_server/src/Model/Transactions/TransactionBase.php
deleted file mode 100644
index 6b3817201..000000000
--- a/community_server/src/Model/Transactions/TransactionBase.php
+++ /dev/null
@@ -1,166 +0,0 @@
-errors;
- }
-
- public function getWarnings() {
- return $this->warnings;
- }
- public function addError($functionName, $errorName) {
- array_push($this->errors, [$functionName => $errorName]);
- }
- public function addWarning($functionName, $warningName) {
- array_push($this->warnings, [$functionName => $warningName]);
- }
-
- public function addErrors($errors) {
- $this->errors = array_merge($this->errors, $errors);
- }
-
- public function addWarnings($warnings) {
- $this->warnings = array_merge($this->warnings, $warnings);
- }
-
- public function hasErrors() {
- return count($this->errors) > 0;
- }
-
- public function hasWarnings() {
- return count($this->warnings) > 0;
- }
- public static function getTable($tableName) {
- if(!isset(self::$tables[$tableName])) {
- self::$tables[$tableName] = TableRegistry::getTableLocator()->get($tableName);
- }
- return self::$tables[$tableName];
- }
-
-
- protected function getStateUserId($publicKey) {
-
- $stateUsersTable = self::getTable('state_users');
- $stateUser = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $publicKey])->first();
- if($stateUser) {
- return $stateUser->id;
- }
- // create new entry
- $stateUserEntity = $stateUsersTable->newEntity();
- $stateUserEntity->public_key = $publicKey;
- if($stateUsersTable->save($stateUserEntity)) {
- return $stateUserEntity->id;
- } else {
- $this->addError('TransactionBase::getStateUserId', 'error saving new state user with error: ' . json_encode($stateUserEntity->getErrors()));
- }
-
- return NULL;
- }
-
- protected function getStateUser($id) {
- $stateUsersTable = self::getTable('state_users');
- $stateUser = $stateUsersTable->get($id);
- if($stateUser) {
- return $stateUser;
- }
-
- return NULL;
- }
-
- protected function getStateUserFromPublickey($publicKey) {
- $stateUsersTable = self::getTable('state_users');
- $stateUser = $stateUsersTable->find('all')->where(['public_key' => $publicKey])->first();
- if($stateUser) {
- return $stateUser;
- }
-
- return NULL;
- }
-
-
- protected function updateStateBalance($stateUserId, $addAmountCent, $recordDate) {
- $stateBalancesTable = self::getTable('stateBalances');
- $stateBalanceQuery = $stateBalancesTable
- ->find('all')
- ->select(['amount', 'id', 'record_date'])
- ->contain(false)
- ->where(['state_user_id' => $stateUserId]);//->first();
- //debug($stateBalanceQuery);
-
- if($stateBalanceQuery->count() > 0) {
-
- $stateBalanceEntry = $stateBalanceQuery->first();
- $stateBalanceEntry->amount =
- $stateBalancesTable->calculateDecay($stateBalanceEntry->amount, $stateBalanceEntry->record_date, $recordDate)
- + $addAmountCent;
- } else {
- $stateBalanceEntry = $stateBalancesTable->newEntity();
- $stateBalanceEntry->state_user_id = $stateUserId;
- $stateBalanceEntry->amount = $addAmountCent;
- }
- $stateBalanceEntry->record_date = $recordDate;
- $finalBalance = $stateBalanceEntry->amount;
- //echo "\ntry to save: "; var_dump($stateBalanceEntry); echo "\n";
- if(!$stateBalancesTable->save($stateBalanceEntry)) {
- $errors = $stateBalanceEntry->getErrors();
- $this->addError('TransactionBase::updateStateBalance', 'error saving state balance with: ' . json_encode($errors));
- return false;
- }
- return $finalBalance;
- }
-
- protected function addStateUserTransaction($stateUserId, $transactionId, $transactionTypeId, $balance, $balance_date) {
- $stateUserTransactionTable = self::getTable('state_user_transactions');
-
- $stateUserTransactions = $stateUserTransactionTable
- ->find('all')
- ->where(['state_user_id' => $stateUserId])
- ->order(['transaction_id DESC']);
- $new_balance = $balance;
- if($stateUserTransactions->count() > 0) {
- $stateBalanceTable = self::getTable('state_balances');
- $state_user_transaction = $stateUserTransactions->first();
- if(!$state_user_transaction) {
- $this->addError('TransactionBase::addStateUserTransaction', 'state_user_transaction is zero, no first entry exist?');
- return false;
- }
- $new_balance += $stateBalanceTable->calculateDecay(
- $state_user_transaction->balance,
- $state_user_transaction->balance_date,
- $balance_date
- );
- }
- $entity = $stateUserTransactionTable->newEntity();
- $entity->state_user_id = $stateUserId;
- $entity->transaction_id = $transactionId;
- $entity->transaction_type_id = $transactionTypeId;
- $entity->balance = $new_balance;
- $entity->balance_date = $balance_date;
-
- if(!$stateUserTransactionTable->save($entity)) {
- $errors = $entity->getErrors();
- $this->addError('TransactionBase::addStateUserTransaction', 'error saving state user balance with: ' . json_encode($errors));
- return false;
- }
- // set balance from all state_user_transactions which came after (sorted by balance_date) to 0
- // because creation transaction can be added before other transaction which already happend
- $state_user_transactions = $stateUserTransactionTable
- ->find()
- ->select(['id', 'balance'])
- ->where(['state_user_id' => $stateUserId, 'balance_date >' => $balance_date])
- ;
- foreach($state_user_transactions as $t) {
- $t->balance = 0;
- }
- $stateUserTransactionTable->saveMany($state_user_transactions);
- return true;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Model/Transactions/TransactionBody.php b/community_server/src/Model/Transactions/TransactionBody.php
deleted file mode 100644
index 87a029b80..000000000
--- a/community_server/src/Model/Transactions/TransactionBody.php
+++ /dev/null
@@ -1,194 +0,0 @@
-mProtoTransactionBody = new \Proto\Gradido\TransactionBody();
- try {
- $this->mProtoTransactionBody->mergeFromString($bodyBytes);
- // cannot catch Exception with cakePHP, I don't know why
- } catch(\Google\Protobuf\Internal\GPBDecodeException $e) {
- //var_dump($e);
- $this->addError('TransactionBody', $e->getMessage());
- return;
- }
-
- switch($this->mProtoTransactionBody->getData()) {
- case 'creation' : $this->mSpecificTransaction = new TransactionCreation($this->mProtoTransactionBody->getCreation()); break;
- case 'transfer' : $this->mSpecificTransaction = new TransactionTransfer($this->mProtoTransactionBody->getTransfer()); break;
- }
- }
-
- public function validate($sigPairs) {
-
- // transaction type id
- $transactionTypesTable = TableRegistry::getTableLocator()->get('transaction_types');
-
- $typeName = $this->getTransactionTypeName();
- $transactionType = $transactionTypesTable->find('all')->where(['name' => $typeName])->select(['id'])->first();
- if($transactionType == NULL) {
- $this->addError('TransactionBody::validate', 'zero type id for type: ' . $typeName);
- return false;
- }
- $this->transactionTypeId = $transactionType->id;
-
- // check if creation time is in the past
- if($this->mProtoTransactionBody->getCreated()->getSeconds() > time()) {
- $this->addError('TransactionBody::validate', 'Transaction were created in the past!');
- return false;
- }
- if(!$this->mSpecificTransaction->validate($sigPairs)) {
- $this->addErrors($this->mSpecificTransaction->getErrors());
- return false;
- }
-
-
-
- return true;
- }
-
- public function getSpecificTransaction() {
- return $this->mSpecificTransaction;
- }
-
- public function getMemo() {
- return $this->mProtoTransactionBody->getMemo();
- }
-
- public function getTransactionTypeName()
- {
- return $this->mProtoTransactionBody->getData();
- }
-
- public function save($firstPublic, $sigMap) {
- $transactionsTable = TableRegistry::getTableLocator()->get('transactions');
- $transactionEntity = $transactionsTable->newEntity();
-
-
- $transactionEntity->transaction_type_id = $this->transactionTypeId;
- $transactionEntity->memo = $this->getMemo();
-
- if ($transactionsTable->save($transactionEntity)) {
- // reload entity to get received date filled from mysql
- $transactionEntity = $transactionsTable->get($transactionEntity->id);
- // success
- $this->mTransactionID = $transactionEntity->id;
- if(!$this->mSpecificTransaction->save($transactionEntity->id, $firstPublic, $transactionEntity->received)) {
- $this->addErrors($this->mSpecificTransaction->getErrors());
- return false;
- }
- } else {
- $this->addError('TransactionBody::save', 'error saving transaction with: ' . json_encode($transactionEntity->getError()));
- return false;
- }
- $previousTxHash = null;
- if($this->mTransactionID > 1) {
- try {
- $previousTransaction = $transactionsTable
- ->find('all', ['contain' => false])
- ->select(['tx_hash'])
- ->where(['id' => $this->mTransactionID - 1])
- ->first();
- /*$previousTransaction = $transactionsTable->get($this->mTransactionID - 1, [
- 'contain' => false,
- 'fields' => ['tx_hash']
- ]);*/
- } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) {
- $this->addError('TransactionBody::save', 'previous transaction (with id ' . ($this->mTransactionID-1) . ' not found');
- return false;
- }
- if(!$previousTransaction) {
- // shouldn't occur
- $this->addError('TransactionBody::save', 'previous transaction (with id ' . ($this->mTransactionID-1) . ' not found');
- return false;
- }
- $previousTxHash = $previousTransaction->tx_hash;
- }
- try {
- //$transactionEntity->received = $transactionsTable->get($transactionEntity->id, ['contain' => false, 'fields' => ['received']])->received;
- $transactionEntity->received = $transactionsTable
- ->find('all', ['contain' => false])
- ->where(['id' => $transactionEntity->id])
- ->select(['received'])->first()->received;
- } catch(Cake\Datasource\Exception\RecordNotFoundException $ex) {
- $this->addError('TransactionBody::save', 'current transaction (with id ' . ($transactionEntity->id) . ' not found');
- $this->addError('exception: ', $ex->getMessage());
- return false;
- }
-
- // calculate tx hash
- // previous tx hash + id + received + sigMap as string
- // Sodium use for the generichash function BLAKE2b today (11.11.2019), mabye change in the future
- $state = \Sodium\crypto_generichash_init();
- //echo "prev hash: $previousTxHash\n";
- if($previousTxHash != null) {
- \Sodium\crypto_generichash_update($state, stream_get_contents($previousTxHash));
- }
- //echo "id: " . $transactionEntity->id . "\n";
- \Sodium\crypto_generichash_update($state, strval($transactionEntity->id));
- //echo "received: " . $transactionEntity->received;
- \Sodium\crypto_generichash_update($state, $transactionEntity->received->i18nFormat('yyyy-MM-dd HH:mm:ss'));
- \Sodium\crypto_generichash_update($state, $sigMap->serializeToString());
- $transactionEntity->tx_hash = \Sodium\crypto_generichash_final($state);
- if ($transactionsTable->save($transactionEntity)) {
- return true;
- }
- $this->addError('TransactionBody::save', 'error saving transaction with: ' . json_encode($transactionEntity->getError()));
- return false;
- }
-
- public function getTransactionID() {
- return $this->mTransactionID;
- }
-
- public function getTransactionTypeId() {
- return $this->transactionTypeId;
- }
-
- static public function fromEntity($memo, $transaction)
- {
- $protoBody = new \Proto\Gradido\TransactionBody();
- $protoBody->setMemo($memo);
-
- //$created->setSeconds($var);
- //$protoBody->setCreated($created);
- if(count($transaction->transaction_creations) == 1) {
- //echo "is creation ";
- $protoBody->setCreation(TransactionCreation::fromEntity($transaction->transaction_creations[0])->getProto());
- }
- else if(count($transaction->transaction_send_coins) == 1) {
- //echo "is transfer";
- $protoBody->setTransfer(TransactionTransfer::fromEntity($transaction->transaction_send_coins)->getProto());
- } else {
- return ['invalid transaction type or count'];
- }
-
- return $protoBody;
- }
-
- static public function build($memo, $specificTransaction)
- {
- $protoBody = new \Proto\Gradido\TransactionBody();
- $protoBody->setMemo($memo);
-
- if(is_a($specificTransaction, 'TransactionCreation')) {
- $protoBody->setCreation($specificTransaction->getProto());
- } else if(is_a($specificTransaction, 'TransactionTransfer')) {
- $protoBody->setTransfer($specificTransaction->getProto());
- } else {
- return ['invalid tarnsaction type'];
- }
- return $protoBody;
-
- }
-
-}
diff --git a/community_server/src/Model/Transactions/TransactionCreation.php b/community_server/src/Model/Transactions/TransactionCreation.php
deleted file mode 100644
index 87f2d2104..000000000
--- a/community_server/src/Model/Transactions/TransactionCreation.php
+++ /dev/null
@@ -1,249 +0,0 @@
-protoTransactionCreation = $protoTransactionCreation;
- $this->transactionCreationsTable = TableRegistry::getTableLocator()->get('transaction_creations');
- $this->receiver_pubkey_hex = bin2hex($this->getReceiverPublic());
- }
-
- public function getProto() {
- return $this->protoTransactionCreation;
- }
-
- static public function build($amount, $memo, $receiver_public_hex, $targetDate = null)
- {
- $receiver = new \Proto\Gradido\TransferAmount();
- $receiver->setAmount($amount);
- //$this->receiver_pubkey_hex = $receiver_public_hex;
- if(strlen($receiver_public_hex) != 64) {
- return ['state' => 'error', 'msg' => 'invalid pubkey'];
- }
- $pubKeyBin = hex2bin($receiver_public_hex);
- $receiver->setPubkey($pubKeyBin);
- //var_dump($requestData);
-
- $creationDate = new \Proto\Gradido\TimestampSeconds();
- $creationDate->setSeconds(time());
-
- $transactionBody = new \Proto\Gradido\TransactionBody();
- $transactionBody->setMemo($memo);
- $transactionBody->setCreated($creationDate);
-
-
- $transaction = new \Proto\Gradido\GradidoTransaction();
- $transaction->setReceiver($receiver);
- //echo "target date: ";
- //var_dump($targetDate);
- //die('die');
- if($targetDate) {
- $targetDateTimestamp = new \Proto\Gradido\TimestampSeconds();
- $targetDateTimestamp->setSeconds($targetDate->getTimestamp());
- //var_dump($targetDateTimestamp); die('target');
- $transaction->setTargetDate($targetDateTimestamp);
- }
-
- $transactionBody->setCreation($transaction);
- return ['state' => 'success', 'transactionBody' => $transactionBody];
- }
-
-
- public function getAmount() {
- return $this->protoTransactionCreation->getReceiver()->getAmount();
- }
-
- public function getReceiverPublic() {
- return $this->protoTransactionCreation->getReceiver()->getPubkey();
- }
-
- public function getReceiverUser() {
- return $this->getStateUserFromPublickey($this->getReceiverPublic());
- }
- public function getTargetDate() {
- return new FrozenDate($this->protoTransactionCreation->getTargetDate()->getSeconds());
- }
-
- public function validate($sigPairs) {
- // check if receiver public is not in signature list
- $receiverPublic = $this->getReceiverPublic();
- foreach($sigPairs as $sigPair) {
- $pubkey = $sigPair->getPubKey();
- if($pubkey == $receiverPublic) {
- $this->addError('TransactionCreation::validate', 'receiver aren\'t allowed to sign creation Transaction');
- return false;
- }
- }
-
-
- /////////////// new validation, not more than 1K GDD per month via target_date ///////////////////////////
- $existingCreations2 = $this->transactionCreationsTable
- ->find('all')
- ->select(['amount', 'state_user_id', 'target_date'])
- ->contain(['StateUsers' => ['fields' => ['StateUsers.public_key']]]);
- $q = $existingCreations2;
- $targetDate = $this->protoTransactionCreation->getTargetDate();
-
- $targetDateFrozen = new FrozenDate($targetDate->getSeconds());
- $targetDateMonthYearConcat = $targetDateFrozen->format('Ym');
-
- $existingCreations2->where([
- 'target_date IS NOT' => NULL,
- 'EXTRACT(YEAR_MONTH FROM target_date) LIKE ' => $targetDateMonthYearConcat,
- ]);
-
- $newSum2 = $this->getAmount();
- $receiverEmail = '';
- foreach($existingCreations2 as $creation) {
- $keyHex = bin2hex(stream_get_contents($creation->state_user->public_key));
- //echo "\ncompare \n$keyHex\nwith: \n". $this->receiver_pubkey_hex."\n";
- if($keyHex == $this->receiver_pubkey_hex) {
- $newSum2 += $creation->amount;
- $receiverEmail = $creation->state_user->email;
- }
- //$newSum2 += $creation->amount;
- }
-
- /*if(!$existingCreations2->count()) {
- if($newSum > 30000000) {
- $this->addError('TransactionCreation::validate', 'Creation more than 1.000 GDD per Month (3 Month) not allowed');
- return false;
- }
- } else {*/
- if($newSum2 <= 0) {
- $this->addError(
- 'TransactionCreation::validate',
- 'Creation less than 0 GDD per Month for '. $receiverEmail .' in target_date not allowed'
- );
- }
- if($newSum2 > 10000000) {
- $this->addError(
- 'TransactionCreation::validate',
- 'Creation more than 1.000 GDD per Month for '. $receiverEmail .' in target_date not allowed'
- );
- return false;
- //}
- }
-
- return true;
- }
-
- public function save($transaction_id, $firstPublic, $received)
- {
- $stateBalancesTable = self::getTable('stateBalances');
-
- $transactionCreationEntity = $this->transactionCreationsTable->newEntity();
- $transactionCreationEntity->transaction_id = $transaction_id;
-
- // state user id
- //$state_user_id = $this->getStateUserId($firstPublic);
- $receiverUserId = $this->getStateUserId($this->getReceiverPublic());
- if(!$receiverUserId) {
- $this->addError('TransactionCreation::save', 'couldn\'t get state user id');
- return false;
- }
-
- $transactionCreationEntity->state_user_id = $receiverUserId;
- $transactionCreationEntity->amount = $this->getAmount();
- $transactionCreationEntity->target_date = $this->protoTransactionCreation->getTargetDate()->getSeconds();
- $target_date = new FrozenTime($transactionCreationEntity->target_date);
-
- //$decayed_balance = $stateBalancesTable->calculateDecay($this->getAmount(), $target_date, $received);
- $balance = $this->getAmount();
-
- if(!$this->transactionCreationsTable->save($transactionCreationEntity)) {
- $this->addError('TransactionCreation::save', 'error saving transactionCreation with errors: ' . json_encode($transactionCreationEntity->getErrors()));
- return false;
- }
-
- // update state balance
- $final_balance = $this->updateStateBalance($receiverUserId, $balance, $received);
- if(false === $final_balance) {
- return false;
- }
-
- // decay is a virtual field which is calculated from amount and now() - record_date
- if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 1, $balance, $received)) {
- return false;
- }
-
- return true;
- }
-
- public function sendNotificationEmail($memo)
- {
- $disable_email = Configure::read('disableEmail', false);
- if($disable_email) return true;
- // send notification email
- $receiverUserId = $this->getStateUserId($this->getReceiverPublic());
- $receiverUser = $this->getStateUser($receiverUserId);
- $noReplyEmail = Configure::read('noReplyEmail');
-
- try {
- $email = new Email();
- $emailViewBuilder = $email->viewBuilder();
- $emailViewBuilder->setTemplate('notificationCreation')
- ->setVars(['user' => $receiverUser, 'gdd_cent' => $this->getAmount(), 'memo' => $memo]);
- $receiverNames = $receiverUser->getNames();
- if($receiverNames == '' || $receiverUser->email == '') {
- $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $receiverUser->id);
- return false;
- }
- $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)'])
- ->setTo([$receiverUser->email => $receiverUser->getNames()])
- ->setSubject(__('Gradido Schöpfung erhalten'))
- ->send();
- } catch(Exception $e) {
-// $this->addError('TransactionCreation::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage());
- $this->addWarning('TransactionCreation::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage());
- return false;
- }
- return true;
- }
-
- static public function fromEntity($transactionCreationEntity)
- {
- $protoCreation = new \Proto\Gradido\GradidoCreation();
-
- //var_dump($transactionCreationEntity);
- $stateUsersTable = TableRegistry::getTableLocator()->get('state_users');
- //return new TransactionCreation($protoCreation);
- $userId = $transactionCreationEntity->state_user_id;
-
-
- $stateUser = $stateUsersTable->get($userId);
-
-
- $receiverAmount = new \Proto\Gradido\TransferAmount();
- $receiverAmount->setPubkey(stream_get_contents($stateUser->public_key));
- $receiverAmount->setAmount($transactionCreationEntity->amount);
-
- $protoCreation->setReceiver($receiverAmount);
-
- // TODO: add target_date
- // function currently not used, maybe can even be deleted
-
- //echo "receiver amount: check ";
- //$identHashBytes = stream_get_contents($transactionCreationEntity->ident_hash);
-
- // intval
- //$protoCreation->setIdentHash(intval($identHashBytes));
- //$protoCreation->setIdentHash(self::DRMakeStringHash($stateUser->email));
- return new TransactionCreation($protoCreation);
- }
-}
diff --git a/community_server/src/Model/Transactions/TransactionTransfer.php b/community_server/src/Model/Transactions/TransactionTransfer.php
deleted file mode 100644
index dc1606f55..000000000
--- a/community_server/src/Model/Transactions/TransactionTransfer.php
+++ /dev/null
@@ -1,249 +0,0 @@
-protoTransactionTransfer = $protoTransactionTransfer;
- }
-
- public function getProto() {
- return $this->protoTransactionTransfer;
- }
-
- static public function build($amount, $memo, $receiver_public_hex, $sender_public_hex)
- {
- // repeated SenderAmount senderAmounts = 1;
- // repeated ReceiverAmount receiverAmounts = 2;
-
- $sender = new \Proto\Gradido\TransferAmount();
- $sender->setAmount($amount);
-
- if(strlen($receiver_public_hex) != 64) {
- return ['state' => 'error', 'msg' => 'invalid receiver pubkey'];
- }
- if(strlen($sender_public_hex) != 64) {
- return ['state' => 'error', 'msg' => 'invalid sender pubkey'];
- }
- $receiverPubKeyBin = hex2bin($receiver_public_hex);
-
- $senderPubKeyBin = hex2bin($sender_public_hex);
- $sender->setPubkey($senderPubKeyBin);
- //var_dump($requestData);
-
- $creationDate = new \Proto\Gradido\TimestampSeconds();
- $creationDate->setSeconds(time());
-
- $transactionBody = new \Proto\Gradido\TransactionBody();
- $transactionBody->setMemo($memo);
- $transactionBody->setCreated($creationDate);
-
- $transfer = new \Proto\Gradido\GradidoTransfer();
- $local_transfer = new \Proto\Gradido\LocalTransfer();
- $local_transfer->setReceiver($receiverPubKeyBin);
- $local_transfer->setSender($sender);
- $transfer->setLocal($local_transfer);
- $transactionBody->setTransfer($transfer);
- return ['state' => 'success', 'transactionBody' => $transactionBody];
- }
-
- public function validate($sigPairs) {
- //$this->addError('TransactionTransfer::validate', 'not implemented yet');
- //return false;
- //$time = microtime(true);
- static $functionName = 'TransactionTransfer::validate';
-
- $sigPubHexs = [];
- foreach($sigPairs as $sigPair)
- {
- $pubkey = $sigPair->getPubKey();
- $pubkey_hex = bin2hex($pubkey);
- //$hash = TransactionCreation::DRMakeStringHash($pubkey);
- $hash = $pubkey_hex;
- if(!isset($sigPubHexs[$hash])) {
- $sigPubHexs[$hash] = [$pubkey_hex];
- } else {
- array_push($sigPubHexs[$hash], $pubkey_hex);
- }
- //array_push($sigPubHexs, $pubkey);
- }
-
- $stateUsersTable = TableRegistry::getTableLocator()->get('state_users');
- $local_transfer = $this->protoTransactionTransfer->getLocal();
- $sender = $local_transfer->getSender();
- $senderPublic = $sender->getPubkey();
- $senderPublicHex = bin2hex($senderPublic);
- if(strlen($senderPublicHex) != 64) {
- $this->addError($functionName, 'invalid sender public key');
- return false;
- }
- // check if signature exist for sender
- //$hash = TransactionCreation::DRMakeStringHash($senderPublicHex);
- $hash = $senderPublicHex;
- if(!isset($sigPubHexs[$hash]) || in_array($senderPublicHex, $sigPubHexs[$hash]) === FALSE) {
- $this->addError($functionName, 'missing signature for sender');
- return false;
- }
- // check if sender has enough Gradido
- $amount = $sender->getAmount();
- $user = $stateUsersTable
- ->find('all')
- ->select(['id'])
- ->where(['public_key' => $senderPublic])
- ->contain(['StateBalances' => ['fields' => ['amount', 'state_user_id']]])->first();
- if(!$user) {
- $this->addError($functionName, 'couldn\'t find sender in db' );
- return false;
- }
- //var_dump($user);
- if(intval($user->state_balances[0]->amount) < intval($amount)) {
- $this->addError($functionName, 'sender hasn\t enough GDD');
- return false;
- }
-
- $receiver_public_key = $local_transfer->getReceiver();
- if(strlen($receiver_public_key) != 32) {
- $this->addError($functionName, 'invalid receiver public key');
- return false;
- }
- // check if receiver exist
- $receiver_user = $stateUsersTable->find('all')->select(['id'])->where(['public_key' => $receiver_public_key])->first();
- if(!$receiver_user) {
- $this->addError($functionName, 'couldn\'t find receiver in db' );
- return false;
- }
- if($amount < 0) {
- $this->addError($functionName, 'negative amount not supported');
- return false;
- }
- return true;
- }
-
- public function save($transaction_id, $firstPublic, $received) {
-
- static $functionName = 'TransactionCreation::save';
- $local_transfer = $this->protoTransactionTransfer->getLocal();
-
- $senderAmount = $local_transfer->getSender();
- $receiver = $local_transfer->getReceiver();
-
- $transactionTransferTable = TableRegistry::getTableLocator()->get('TransactionSendCoins');
-
- $senderUserId = $this->getStateUserId($senderAmount->getPubkey());
- $receiverUserId = $this->getStateUserId($receiver);
-
- if($senderUserId === NULL || $receiverUserId === NULL) {
- return false;
- }
-
- $finalSenderBalance = $this->updateStateBalance($senderUserId, -$senderAmount->getAmount(), $received);
- if(false === $finalSenderBalance) {
- return false;
- }
- if(false === $this->updateStateBalance($receiverUserId, $senderAmount->getAmount(), $received)) {
- return false;
- }
-
- $transactionTransferEntity = $transactionTransferTable->newEntity();
- $transactionTransferEntity->transaction_id = $transaction_id;
- $transactionTransferEntity->state_user_id = $senderUserId;
- $transactionTransferEntity->sender_public_key = $senderAmount->getPubkey();
- $transactionTransferEntity->receiver_public_key = $receiver;
- $transactionTransferEntity->receiver_user_id = $receiverUserId;
- $transactionTransferEntity->amount = $senderAmount->getAmount();
- $transactionTransferEntity->sender_final_balance = $finalSenderBalance;
-
- if(!$transactionTransferTable->save($transactionTransferEntity)) {
- $this->addError($functionName, 'error saving transactionSendCoins with errors: ' . json_encode($transactionTransferEntity->getErrors()));
- return false;
- }
-
- if(!$this->addStateUserTransaction($senderUserId, $transaction_id, 2, $senderAmount->getAmount(), $received)) {
- return false;
- }
- if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 2, -$senderAmount->getAmount(), $received)) {
- return false;
- }
-
- //$this->addError('TransactionTransfer::save', 'not implemented yet');
- //return false;
- return true;
- }
-
- public function sendNotificationEmail($memo)
- {
- // send notification email
- $disable_email = Configure::read('disableEmail', false);
- if($disable_email) return true;
-
- $local_transfer = $this->protoTransactionTransfer->getLocal();
- $sender = $local_transfer->getSender();
- $senderAmount = $sender->getAmount();
- $senderUser = $this->getStateUserFromPublickey($sender->getPubkey());
- $receiverUser = $this->getStateUserFromPublickey($local_transfer->getReceiver());
-
- $serverAdminEmail = Configure::read('ServerAdminEmail');
-
- try {
- $email = new Email();
- $emailViewBuilder = $email->viewBuilder();
- $emailViewBuilder->setTemplate('notificationTransfer')
- ->setVars(['receiverUser' => $receiverUser,
- 'senderUser' => $senderUser,
- 'gdd_cent' => $senderAmount,
- 'memo' => $memo]);
- $receiverNames = $receiverUser->getNames();
- if($receiverNames == '' || $receiverUser->email == '') {
- $this->addError('TransactionCreation::sendNotificationEmail', 'to email is empty for user: ' . $receiverUser->id);
- return false;
- }
- $noReplyEmail = Configure::read('noReplyEmail');
- $email->setFrom([$noReplyEmail => 'Gradido (nicht antworten)'])
- ->setTo([$receiverUser->email => $receiverUser->getNames()])
- ->setSubject(__('Gradidos erhalten'))
- ->send();
- } catch(Exception $e) {
- //$this->addError('TransactionTransfer::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage());
- $this->addWarning('TransactionTransfer::sendNotificationEmail', 'error sending notification email: ' . $e->getMessage());
- return false;
- }
- return true;
- }
-
- public function getSenderUser()
- {
- $local_transfer = $this->protoTransactionTransfer->getLocal();
- return $this->getStateUserFromPublickey($local_transfer->getSender()->getPubkey());
- }
-
- public function getReceiverUser()
- {
- $local_transfer = $this->protoTransactionTransfer->getLocal();
- return $this->getStateUserFromPublickey($local_transfer->getReceiver());
- }
-
- public function getAmount()
- {
- $local_transfer = $this->protoTransactionTransfer->getLocal();
- $sender = $local_transfer->getSender();
- return $sender->getAmount();
- }
-
- static public function fromEntity($transactionTransferEntity)
- {
- $protoTransfer = new \Proto\Gradido\GradidoTransfer();
-
- $stateUsersTable = TableRegistry::getTableLocator()->get('state_users');
-
-
- return new TransactionTransfer($protoTransfer);
- }
-}
-
diff --git a/community_server/src/Model/Validation/GenericValidation.php b/community_server/src/Model/Validation/GenericValidation.php
deleted file mode 100644
index 839441454..000000000
--- a/community_server/src/Model/Validation/GenericValidation.php
+++ /dev/null
@@ -1,35 +0,0 @@
-]|>|<|javascript:){1,}/', $value)) {
- return false;
- }
- return true;
- }
-
- public static function email($value, array $context) {
- if(preg_match('/^[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/', $value)) {
- return true;
- }
- return false;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Model/Validation/TransactionValidation.php b/community_server/src/Model/Validation/TransactionValidation.php
deleted file mode 100644
index 9705ef40b..000000000
--- a/community_server/src/Model/Validation/TransactionValidation.php
+++ /dev/null
@@ -1,49 +0,0 @@
- 'en_GB']);
- $numberparts = preg_split('/\./', $checkFloatVal);
- //var_dump($numberparts);
- if(isset($numberparts[1]) && strlen($numberparts[1]) > 2) return false;
-
- $floatVal = floatval(Number::format($value, ['places' => 4, 'locale' => 'en_GB']));
- //echo "floatVal: $floatVal ";
- return $floatVal >= 0.0;
- }
-
- public static function hexKey64($value, array $context) {
- if(strlen($value) != 64) return false;
- if(preg_match('/^[[:xdigit:]]*$/', $value)) {
- return true;
- }
- return false;
- }
-
- public static function hexKey128($value, array $context) {
- if(strlen($value) != 128) return false;
- if(preg_match('/^[[:xdigit:]]*$/', $value)) {
- return true;
- }
- return false;
- }
-
- public static function alphaNumeric($value, array $context) {
- //if(preg_match('/^[a-zA-Z0-9äöüÄÖÜß _;:()-]\n\r*$/', $value)) {
- if(preg_match('/([<>]|>|<|javascript:){1,}/', $value)) {
- return false;
- }
- return true;
- }
-}
\ No newline at end of file
diff --git a/community_server/src/Shell/ConsoleShell.php b/community_server/src/Shell/ConsoleShell.php
deleted file mode 100644
index f7bfe8ed4..000000000
--- a/community_server/src/Shell/ConsoleShell.php
+++ /dev/null
@@ -1,81 +0,0 @@
-err('Unable to load Psy\Shell. ');
- $this->err('');
- $this->err('Make sure you have installed psysh as a dependency,');
- $this->err('and that Psy\Shell is registered in your autoloader.');
- $this->err('');
- $this->err('If you are using composer run');
- $this->err('');
- $this->err('$ php composer.phar require --dev psy/psysh ');
- $this->err('');
-
- return self::CODE_ERROR;
- }
-
- $this->out("You can exit with `CTRL-C` or `exit` ");
- $this->out('');
-
- Log::drop('debug');
- Log::drop('error');
- $this->_io->setLoggers(false);
- restore_error_handler();
- restore_exception_handler();
-
- $psy = new PsyShell();
- $psy->run();
- }
-
- /**
- * Display help for this console.
- *
- * @return \Cake\Console\ConsoleOptionParser
- */
- public function getOptionParser()
- {
- $parser = new ConsoleOptionParser('console');
- $parser->setDescription(
- 'This shell provides a REPL that you can use to interact with ' .
- 'your application in a command line designed to run PHP code. ' .
- 'You can use it to run adhoc queries with your models, or ' .
- 'explore the features of CakePHP and your application.' .
- "\n\n" .
- 'You will need to have psysh installed for this Shell to work.'
- );
-
- return $parser;
- }
-}
diff --git a/community_server/src/Template/AddressTypes/add.ctp b/community_server/src/Template/AddressTypes/add.ctp
deleted file mode 100644
index f62c5115e..000000000
--- a/community_server/src/Template/AddressTypes/add.ctp
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('List Address Types'), ['action' => 'index']) ?>
- = $this->Html->link(__('List State Group Addresses'), ['controller' => 'StateGroupAddresses', 'action' => 'index']) ?>
- = $this->Html->link(__('New State Group Address'), ['controller' => 'StateGroupAddresses', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transaction Group Addaddress'), ['controller' => 'TransactionGroupAddaddress', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction Group Addaddres'), ['controller' => 'TransactionGroupAddaddress', 'action' => 'add']) ?>
-
-
-
- = $this->Form->create($addressType) ?>
-
- = __('Add Address Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/AddressTypes/edit.ctp b/community_server/src/Template/AddressTypes/edit.ctp
deleted file mode 100644
index 3e363e331..000000000
--- a/community_server/src/Template/AddressTypes/edit.ctp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Form->postLink(
- __('Delete'),
- ['action' => 'delete', $addressType->id],
- ['confirm' => __('Are you sure you want to delete # {0}?', $addressType->id)]
- )
- ?>
- = $this->Html->link(__('List Address Types'), ['action' => 'index']) ?>
- = $this->Html->link(__('List State Group Addresses'), ['controller' => 'StateGroupAddresses', 'action' => 'index']) ?>
- = $this->Html->link(__('New State Group Address'), ['controller' => 'StateGroupAddresses', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transaction Group Addaddress'), ['controller' => 'TransactionGroupAddaddress', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction Group Addaddres'), ['controller' => 'TransactionGroupAddaddress', 'action' => 'add']) ?>
-
-
-
- = $this->Form->create($addressType) ?>
-
- = __('Edit Address Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/AddressTypes/index.ctp b/community_server/src/Template/AddressTypes/index.ctp
deleted file mode 100644
index 905d406a1..000000000
--- a/community_server/src/Template/AddressTypes/index.ctp
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('New Address Type'), ['action' => 'add']) ?>
- = $this->Html->link(__('List State Group Addresses'), ['controller' => 'StateGroupAddresses', 'action' => 'index']) ?>
- = $this->Html->link(__('New State Group Address'), ['controller' => 'StateGroupAddresses', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transaction Group Addaddress'), ['controller' => 'TransactionGroupAddaddress', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction Group Addaddres'), ['controller' => 'TransactionGroupAddaddress', 'action' => 'add']) ?>
-
-
-
-
= __('Address Types') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('name') ?>
- = $this->Paginator->sort('text') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($addressType->id) ?>
- = h($addressType->name) ?>
- = h($addressType->text) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $addressType->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $addressType->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $addressType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $addressType->id)]) ?>
-
-
-
-
-
-
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/AddressTypes/view.ctp b/community_server/src/Template/AddressTypes/view.ctp
deleted file mode 100644
index 69817e264..000000000
--- a/community_server/src/Template/AddressTypes/view.ctp
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('Edit Address Type'), ['action' => 'edit', $addressType->id]) ?>
- = $this->Form->postLink(__('Delete Address Type'), ['action' => 'delete', $addressType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $addressType->id)]) ?>
- = $this->Html->link(__('List Address Types'), ['action' => 'index']) ?>
- = $this->Html->link(__('New Address Type'), ['action' => 'add']) ?>
- = $this->Html->link(__('List State Group Addresses'), ['controller' => 'StateGroupAddresses', 'action' => 'index']) ?>
- = $this->Html->link(__('New State Group Address'), ['controller' => 'StateGroupAddresses', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transaction Group Addaddress'), ['controller' => 'TransactionGroupAddaddress', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction Group Addaddres'), ['controller' => 'TransactionGroupAddaddress', 'action' => 'add']) ?>
-
-
-
-
= h($addressType->name) ?>
-
-
- = __('Name') ?>
- = h($addressType->name) ?>
-
-
- = __('Text') ?>
- = h($addressType->text) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($addressType->id) ?>
-
-
-
-
-
diff --git a/community_server/src/Template/AdminErrors/add.ctp b/community_server/src/Template/AdminErrors/add.ctp
deleted file mode 100644
index b69f68213..000000000
--- a/community_server/src/Template/AdminErrors/add.ctp
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- = $this->Form->create($adminError) ?>
-
- = __('Add Admin Error') ?>
- Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('controller');
- echo $this->Form->control('action');
- echo $this->Form->control('state');
- echo $this->Form->control('msg');
- echo $this->Form->control('details');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/AdminErrors/edit.ctp b/community_server/src/Template/AdminErrors/edit.ctp
deleted file mode 100644
index dea74b94b..000000000
--- a/community_server/src/Template/AdminErrors/edit.ctp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- = $this->Form->create($adminError) ?>
-
- = __('Edit Admin Error') ?>
- Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('controller');
- echo $this->Form->control('action');
- echo $this->Form->control('state');
- echo $this->Form->control('msg');
- echo $this->Form->control('details');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/AdminErrors/index.ctp b/community_server/src/Template/AdminErrors/index.ctp
deleted file mode 100644
index 96e077ce1..000000000
--- a/community_server/src/Template/AdminErrors/index.ctp
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
= $this->Number->format($adminError->id) ?>
-
= $adminError->has('state_user') ? $this->Html->link($adminError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $adminError->state_user->id]) : '' ?>
-
= h($adminError->controller) ?>
-
= h($adminError->action) ?>
-
= h($adminError->state) ?>
-
= h($adminError->msg) ?>
-
= h($adminError->details) ?>
-
= h($adminError->created) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $adminError->id]) ?>
-
- = $this->Html->link(__('Edit'), ['action' => 'edit', $adminError->id]) ?>
-
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $adminError->id], ['confirm' => __('Are you sure you want to delete # {0}?', $adminError->id)]) ?>
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/AdminErrors/view.ctp b/community_server/src/Template/AdminErrors/view.ctp
deleted file mode 100644
index 0b0bebb64..000000000
--- a/community_server/src/Template/AdminErrors/view.ctp
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
= h($adminError->id) ?>
-
-
- = __('State User') ?>
- = $adminError->has('state_user') ? $this->Html->link($adminError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $adminError->state_user->id]) : '' ?>
-
-
- = __('Controller') ?>
- = h($adminError->controller) ?>
-
-
- = __('Action') ?>
- = h($adminError->action) ?>
-
-
- = __('State') ?>
- = h($adminError->state) ?>
-
-
- = __('Msg') ?>
- = h($adminError->msg) ?>
-
-
- = __('Details') ?>
- = h($adminError->details) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($adminError->id) ?>
-
-
- = __('Created') ?>
- = h($adminError->created) ?>
-
-
-
diff --git a/community_server/src/Template/AppRequests/get_balance.ctp b/community_server/src/Template/AppRequests/get_balance.ctp
deleted file mode 100644
index 7dd4d6025..000000000
--- a/community_server/src/Template/AppRequests/get_balance.ctp
+++ /dev/null
@@ -1,15 +0,0 @@
-element('centToFloat', ['cent' => $body['balance'], 'precision' => 4]);
-}
-if(isset($body['decay'])) {
- $body['decay'] = $this->element('centToFloat', ['cent' => $body['decay'], 'precision' => 4]);
-}
-?>= json_encode($body) ?>
\ No newline at end of file
diff --git a/community_server/src/Template/AppRequests/list_transactions.ctp b/community_server/src/Template/AppRequests/list_transactions.ctp
deleted file mode 100644
index 174092273..000000000
--- a/community_server/src/Template/AppRequests/list_transactions.ctp
+++ /dev/null
@@ -1,31 +0,0 @@
-element('centToFloat', ['cent' => $body['balance'], 'precision' => 4]);
-$body['decay'] = $this->element('centToFloat', ['cent' => $body['decay'], 'precision' => 4]);
-$body['gdtSum'] = $this->element('centToFloat', ['cent' => $body['gdtSum'], 'precision' => 2]);
-
-foreach($body['transactions'] as $i => $transaction) {
- $useCeil = false;
- if(!isset($transaction['type'])) {
- $body = ['state' => 'error', 'msg' => 'transaction without type found', 'details' => $transaction];
- } else {
- if($transaction['type'] == 'decay') {
- $useCeil = true;
- }
- $body['transactions'][$i]['balance'] = $this->element('centToFloat', ['cent' => $transaction['balance'], 'precision' => 4, 'useCeil' => $useCeil]);
- if(isset($transaction['creation_amount'])) {
- $body['transactions'][$i]['creation_amount'] = $this->element('centToFloat', ['cent' => $transaction['creation_amount'], 'precision' => 4]);
- }
- if(isset($transaction['decay'])) {
- $body['transactions'][$i]['decay']['balance'] = $this->element('centToFloat', ['cent' => $transaction['decay']['balance'], 'precision' => 4]);
- }
- }
-}
-
-?>= json_encode($body) ?>
\ No newline at end of file
diff --git a/community_server/src/Template/BlockchainTypes/add.ctp b/community_server/src/Template/BlockchainTypes/add.ctp
deleted file mode 100644
index bef6b70c5..000000000
--- a/community_server/src/Template/BlockchainTypes/add.ctp
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('List Blockchain Types'), ['action' => 'index']) ?>
-
-
-
- = $this->Form->create($blockchainType) ?>
-
- = __('Add Blockchain Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- echo $this->Form->control('symbol');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/BlockchainTypes/edit.ctp b/community_server/src/Template/BlockchainTypes/edit.ctp
deleted file mode 100644
index 40cd7849b..000000000
--- a/community_server/src/Template/BlockchainTypes/edit.ctp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Form->postLink(
- __('Delete'),
- ['action' => 'delete', $blockchainType->id],
- ['confirm' => __('Are you sure you want to delete # {0}?', $blockchainType->id)]
- )
- ?>
- = $this->Html->link(__('List Blockchain Types'), ['action' => 'index']) ?>
-
-
-
- = $this->Form->create($blockchainType) ?>
-
- = __('Edit Blockchain Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- echo $this->Form->control('symbol');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/BlockchainTypes/index.ctp b/community_server/src/Template/BlockchainTypes/index.ctp
deleted file mode 100644
index 457782043..000000000
--- a/community_server/src/Template/BlockchainTypes/index.ctp
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('New Blockchain Type'), ['action' => 'add']) ?>
-
-
-
-
= __('Blockchain Types') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('name') ?>
- = $this->Paginator->sort('text') ?>
- = $this->Paginator->sort('symbol') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($blockchainType->id) ?>
- = h($blockchainType->name) ?>
- = h($blockchainType->text) ?>
- = h($blockchainType->symbol) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $blockchainType->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $blockchainType->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $blockchainType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $blockchainType->id)]) ?>
-
-
-
-
-
-
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/BlockchainTypes/view.ctp b/community_server/src/Template/BlockchainTypes/view.ctp
deleted file mode 100644
index 481cc7b90..000000000
--- a/community_server/src/Template/BlockchainTypes/view.ctp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('Edit Blockchain Type'), ['action' => 'edit', $blockchainType->id]) ?>
- = $this->Form->postLink(__('Delete Blockchain Type'), ['action' => 'delete', $blockchainType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $blockchainType->id)]) ?>
- = $this->Html->link(__('List Blockchain Types'), ['action' => 'index']) ?>
- = $this->Html->link(__('New Blockchain Type'), ['action' => 'add']) ?>
-
-
-
-
= h($blockchainType->name) ?>
-
-
- = __('Name') ?>
- = h($blockchainType->name) ?>
-
-
- = __('Text') ?>
- = h($blockchainType->text) ?>
-
-
- = __('Symbol') ?>
- = h($blockchainType->symbol) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($blockchainType->id) ?>
-
-
-
diff --git a/community_server/src/Template/Cell/empty b/community_server/src/Template/Cell/empty
deleted file mode 100644
index 8b1378917..000000000
--- a/community_server/src/Template/Cell/empty
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/community_server/src/Template/CommunityProfiles/add.ctp b/community_server/src/Template/CommunityProfiles/add.ctp
deleted file mode 100644
index ab7ce0f6b..000000000
--- a/community_server/src/Template/CommunityProfiles/add.ctp
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('List Community Profiles'), ['action' => 'index']) ?>
-
-
-
- = $this->Form->create($communityProfile) ?>
-
- = __('Add Community Profile') ?>
- Form->control('state_user_id');
- echo $this->Form->control('profile_desc');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/CommunityProfiles/edit.ctp b/community_server/src/Template/CommunityProfiles/edit.ctp
deleted file mode 100644
index 230e3b685..000000000
--- a/community_server/src/Template/CommunityProfiles/edit.ctp
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Form->postLink(
- __('Delete'),
- ['action' => 'delete', $communityProfile->id],
- ['confirm' => __('Are you sure you want to delete # {0}?', $communityProfile->id)]
- )
- ?>
- = $this->Html->link(__('List Community Profiles'), ['action' => 'index']) ?>
-
-
-
- = $this->Form->create($communityProfile) ?>
-
- = __('Edit Community Profile') ?>
- Form->control('state_user_id');
- echo $this->Form->control('profile_desc');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/CommunityProfiles/index.ctp b/community_server/src/Template/CommunityProfiles/index.ctp
deleted file mode 100644
index 12f3c03b1..000000000
--- a/community_server/src/Template/CommunityProfiles/index.ctp
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('New Community Profile'), ['action' => 'add']) ?>
-
-
-
-
= __('Community Profiles') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('state_user_id') ?>
- = $this->Paginator->sort('profile_desc') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($communityProfile->id) ?>
- = $this->Number->format($communityProfile->state_user_id) ?>
- = h($communityProfile->profile_desc) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $communityProfile->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $communityProfile->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $communityProfile->id], ['confirm' => __('Are you sure you want to delete # {0}?', $communityProfile->id)]) ?>
-
-
-
-
-
-
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/CommunityProfiles/view.ctp b/community_server/src/Template/CommunityProfiles/view.ctp
deleted file mode 100644
index 1f8aaf0f4..000000000
--- a/community_server/src/Template/CommunityProfiles/view.ctp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('Edit Community Profile'), ['action' => 'edit', $communityProfile->id]) ?>
- = $this->Form->postLink(__('Delete Community Profile'), ['action' => 'delete', $communityProfile->id], ['confirm' => __('Are you sure you want to delete # {0}?', $communityProfile->id)]) ?>
- = $this->Html->link(__('List Community Profiles'), ['action' => 'index']) ?>
- = $this->Html->link(__('New Community Profile'), ['action' => 'add']) ?>
-
-
-
-
= h($communityProfile->id) ?>
-
-
- = __('Profile Desc') ?>
- = h($communityProfile->profile_desc) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($communityProfile->id) ?>
-
-
- = __('State User Id') ?>
- = $this->Number->format($communityProfile->state_user_id) ?>
-
-
-
diff --git a/community_server/src/Template/Dashboard/error_http_request.ctp b/community_server/src/Template/Dashboard/error_http_request.ctp
deleted file mode 100644
index cdbbec19b..000000000
--- a/community_server/src/Template/Dashboard/error_http_request.ctp
+++ /dev/null
@@ -1,14 +0,0 @@
-assign('title', __('Error, Please try again'));
-?>
-
-
- = __('Back'); ?>
-
diff --git a/community_server/src/Template/Dashboard/index.ctp b/community_server/src/Template/Dashboard/index.ctp
deleted file mode 100644
index fdfe5b072..000000000
--- a/community_server/src/Template/Dashboard/index.ctp
+++ /dev/null
@@ -1,143 +0,0 @@
-assign(
- 'title',
- __('Willkommen') . ', ' . $user['first_name'] . ' ' . $user['last_name'] . '!'
-);
-$this->assign(
- 'header',
- ''.__('Willkommen') . ', ' . $user['first_name'] . ' ' . $user['last_name'] . '! '
-);
-?>
-
-= round($requestTime * 1000.0) ?> ms
-
-
-
Gradido ...
-
-
- account_balance_wallet
- = $this->Html->link(
- __('Kontoübersicht'),
- ['controller' => 'StateBalances', 'action' => 'overview'],
- ['class' => 'action-button-link']
- );?>
-
-
- account_balance
- = $this->Html->link(
- __('Überweisung'),
- ['controller' => 'TransactionSendCoins', 'action' => 'create'],
- ['class' => 'action-button-link']
- ); ?>
-
-
-
-
-
-
-
= __('Adminbereich'); ?>
-
Gradido ...
-
-
- redeem
- = $this->Html->link(
- __('viele schöpfen'),
- ['controller' => 'TransactionCreations', 'action' => 'createMulti'],
- ['class' => 'action-button-link']
- );?>
-
-
-
-
-
Statistik
-
-
- cached
- = $this->Html->link(
- __('Anmeldungen'),
- ['controller' => 'Users', 'action' => 'statistics'],
- ['class' => 'info-item-link']
- );?>
-
-
-
- error_outline
- = $this->Html->link(
- __('Fehler') . ' (' . $adminErrorCount . ')',
- ['controller' => 'AdminErrors'], ['class' => 'info-item-link']);
- ?>
-
-
-
-
-
-
-
-
Benutzer ...
-
-
- search
- = $this->Html->link(
- __('suchen'),
- ['controller' => 'StateUsers', 'action' => 'search'],
- ['class' => 'info-item-link']
- ); ?>
-
-
-
-
-
-
-
Login Server ...
-
-
-
diff --git a/community_server/src/Template/Dashboard/server_index.ctp b/community_server/src/Template/Dashboard/server_index.ctp
deleted file mode 100644
index 1b4da7647..000000000
--- a/community_server/src/Template/Dashboard/server_index.ctp
+++ /dev/null
@@ -1,36 +0,0 @@
-assign('title', __('Willkommen'));
-$this->assign(
- 'header',
- '
Server Dashboard, nur für Admins '
-);
-?>
-
-
Gradido ...
-
-
- redeem
- = $this->Html->link(
- __('viele schöpfen'),
- ['controller' => 'TransactionCreations', 'action' => 'createMulti'],
- ['class' => 'action-button-link']
- );?>
-
-
-
-
- error_outline
- = $this->Html->link(
- __('Fehler') . ' (' . $adminErrorCount . ')',
- ['controller' => 'AdminErrors'], ['class' => 'info-item-link']);
- ?>
-
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/Element/Flash/default.ctp b/community_server/src/Template/Element/Flash/default.ctp
deleted file mode 100644
index 694b244c1..000000000
--- a/community_server/src/Template/Element/Flash/default.ctp
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- = $message ?>
-
diff --git a/community_server/src/Template/Element/Flash/error.ctp b/community_server/src/Template/Element/Flash/error.ctp
deleted file mode 100644
index 65a8fbec3..000000000
--- a/community_server/src/Template/Element/Flash/error.ctp
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- report_problem
- = $message ?>
-
\ No newline at end of file
diff --git a/community_server/src/Template/Element/Flash/success.ctp b/community_server/src/Template/Element/Flash/success.ctp
deleted file mode 100644
index 31a062095..000000000
--- a/community_server/src/Template/Element/Flash/success.ctp
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- = __('Info:') ?> = $message ?>
-
\ No newline at end of file
diff --git a/community_server/src/Template/Element/centToFloat.ctp b/community_server/src/Template/Element/centToFloat.ctp
deleted file mode 100644
index 3beabf837..000000000
--- a/community_server/src/Template/Element/centToFloat.ctp
+++ /dev/null
@@ -1,22 +0,0 @@
- 0) {
- if(isset($useCeil) && $useCeil) {
- $transformAmount = ceil($cent / pow(10, $cut_places));
- } else {
- $transformAmount = floor($cent / pow(10, $cut_places));
- }
-}
-if($cut_places < 0) {
- $cut_places = 0;
-}
-echo $transformAmount / pow(10, $precision - $cut_places);
-
diff --git a/community_server/src/Template/Element/navi.ctp b/community_server/src/Template/Element/navi.ctp
deleted file mode 100644
index 33055197f..000000000
--- a/community_server/src/Template/Element/navi.ctp
+++ /dev/null
@@ -1,38 +0,0 @@
-getRequest()->getSession();
-$errorCount = intval($session->read('StateUser.errorCount'));
-$balance = $session->read('StateUser.balance');
-//echo "balance: $balance
";
-if(!isset($balance)) {
- $balance = 0;
-}
-
-$navi = [];
-/*if($errorCount > 0) {
- $errorNaviEntry = new NaviEntry(__('Fehler '). "($errorCount)", 'mdi-alert-outline', 'StateErrors', 'showForUser');
- $errorNaviEntry->setBGColor('bg-inverse-danger')
- ->setIconColor('alert-color');
- array_push($navi, $errorNaviEntry);
-}*/
-$balanceNaviEntry = new NaviEntry(
- __('Kontoübersicht') . ' (' .
- str_replace(array("\r", "\n"), '', strip_tags($this->element('printGradido', ['number' => $balance])))
- . ' )',
- 'account_balance_wallet', 'StateBalances', 'overview'
-);
-if($balance < 0 ) {
- //$balanceNaviEntry->setIconColor('alert-color');
-} else if($balance > 0) {
- //$balanceNaviEntry->setIconColor('success-color');
-}
-array_push($navi, $balanceNaviEntry);
-array_push($navi, new NaviEntry(__('Startseite'), 'home', 'Dashboard', 'index'));
-array_push($navi, new NaviEntry(__('Überweisung'), 'account_balance', 'TransactionSendCoins', 'create'));
-array_push($navi, new NaviEntryExternLink(__('Mitgliederbereich'), 'people_alt', 'https://elopage.com/s/gradido/sign_in'));
-
-?>
-
diff --git a/community_server/src/Template/Element/navi_center.ctp b/community_server/src/Template/Element/navi_center.ctp
deleted file mode 100644
index d07f44978..000000000
--- a/community_server/src/Template/Element/navi_center.ctp
+++ /dev/null
@@ -1,7 +0,0 @@
-
\ No newline at end of file
diff --git a/community_server/src/Template/Element/navi_header.ctp b/community_server/src/Template/Element/navi_header.ctp
deleted file mode 100644
index cbc2eea97..000000000
--- a/community_server/src/Template/Element/navi_header.ctp
+++ /dev/null
@@ -1,45 +0,0 @@
-getRequest()->getSession();
-$errorCount = intval($session->read('StateUser.errorCount'));
-$transactionPendings = $session->read('Transactions.pending');
-
-/*
-class NavHeaderEntry
-{
- public function __construct($icon_name, $controller, $action, $title) {
- ;
- }
-
- public function
-}
-*/
-?>
-
\ No newline at end of file
diff --git a/community_server/src/Template/Element/navi_notify.ctp b/community_server/src/Template/Element/navi_notify.ctp
deleted file mode 100644
index 12ae74465..000000000
--- a/community_server/src/Template/Element/navi_notify.ctp
+++ /dev/null
@@ -1,44 +0,0 @@
-getRequest()->getSession();
-$errorCount = intval($session->read('StateUser.errorCount'));
-$transactionPendings = $session->read('Transactions.pending');
-$transactionPendings += $session->read('Transactions.can_signed');
-
-/*
-class NavHeaderEntry
-{
- public function __construct($icon_name, $controller, $action, $title) {
- ;
- }
-
- public function
-}
-*/
-?>
- 0) : ?>
- = $this->Html->link(
- '
announcement '
- . '
ss ',
- ['controller' => 'StateErrors', 'action' => 'ShowForUser'],
- ['class' => 'nav-link', 'escape' => false, 'title' => "$errorCount " . __('Fehler')]) ?>
-
- 0) : ?>
-
" href="= Router::url('./', true) ?>account/checkTransactions">
- verified_user
-
- (= $transactionPendings ?>)
-
-
-
diff --git a/community_server/src/Template/Element/printEuro.ctp b/community_server/src/Template/Element/printEuro.ctp
deleted file mode 100644
index 976e4e007..000000000
--- a/community_server/src/Template/Element/printEuro.ctp
+++ /dev/null
@@ -1,24 +0,0 @@
- 0) $class = "grd-positive-currency";*/
-if($number < 0) {
- $class = 'grd-negative-currency';
-}
-
-?>
-= $this->Number->format(intval($number) / 100.0, ['precision' => 2]) . ' €';?>
-
-
- = $this->Number->format(intval($number) / 100.0, ['precision' => 2]) . ' €';?>
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/Element/printGDT.ctp b/community_server/src/Template/Element/printGDT.ctp
deleted file mode 100644
index 8052283d0..000000000
--- a/community_server/src/Template/Element/printGDT.ctp
+++ /dev/null
@@ -1,24 +0,0 @@
- 0) $class = "grd-positive-currency";*/
-if($number < 0) {
- $class = 'grd-negative-currency';
-}
-
-?>
-= $this->Number->format(intval($number) / 100.0, ['precision' => 2]) . ' GDT';?>
-
-
- = $this->Number->format(intval($number) / 100.0, ['precision' => 2]) . ' GDT';?>
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/Element/printGradido.ctp b/community_server/src/Template/Element/printGradido.ctp
deleted file mode 100644
index 404bdb70d..000000000
--- a/community_server/src/Template/Element/printGradido.ctp
+++ /dev/null
@@ -1,19 +0,0 @@
-
-= $this->Number->format(intval($number) / 10000.0, ['precision' => 2]) . ' GDD';?>
-
-
- = $this->Number->format(intval($number) / 10000.0, ['precision' => 2]) . ' GDD';?>
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/Element/user_menu.ctp b/community_server/src/Template/Element/user_menu.ctp
deleted file mode 100644
index 633674233..000000000
--- a/community_server/src/Template/Element/user_menu.ctp
+++ /dev/null
@@ -1,43 +0,0 @@
-getRequest()->getSession();
-$user = $session->read('StateUser');
-$transactionPendings = $session->read('Transactions.pending');
-$this->set('user', $user);
-$navi = [];
-array_push($navi, new NaviEntry(__('Mein Profil'), 'build', 'Profile', 'index'));
-if(intval($transactionPendings) > 0) {
-/* array_push($navi, new NaviEntryAbsoluteLink(
- __("Transaktionen unterzeichnen") . ' (' . intval($transactionPendings) . ')',
- 'mdi-signature-freehand', 'account/checkTransactions'
- ));*/
-} else {
- array_push($navi, new NaviEntryAbsoluteLink(__('Abmelden'), 'exit_to_app', 'account/logout'));
-}
-?>
-
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/ElopageBuys/add.ctp b/community_server/src/Template/ElopageBuys/add.ctp
deleted file mode 100644
index e9c2c6a80..000000000
--- a/community_server/src/Template/ElopageBuys/add.ctp
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
- = $this->Form->create($elopageBuy) ?>
-
- = __('Add Elopage Buy') ?>
- Form->control('elopage_user_id');
- echo $this->Form->control('affiliate_program_id');
- echo $this->Form->control('publisher_id');
- echo $this->Form->control('order_id');
- echo $this->Form->control('product_id');
- echo $this->Form->control('product_price');
- echo $this->Form->control('payer_email');
- echo $this->Form->control('publisher_email');
- echo $this->Form->control('payed');
- echo $this->Form->control('success_date');
- echo $this->Form->control('event');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/ElopageBuys/edit.ctp b/community_server/src/Template/ElopageBuys/edit.ctp
deleted file mode 100644
index e33956b83..000000000
--- a/community_server/src/Template/ElopageBuys/edit.ctp
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- = $this->Form->create($elopageBuy) ?>
-
- = __('Edit Elopage Buy') ?>
- Form->control('elopage_user_id');
- echo $this->Form->control('affiliate_program_id');
- echo $this->Form->control('publisher_id');
- echo $this->Form->control('order_id');
- echo $this->Form->control('product_id');
- echo $this->Form->control('product_price');
- echo $this->Form->control('payer_email');
- echo $this->Form->control('publisher_email');
- echo $this->Form->control('payed');
- echo $this->Form->control('success_date');
- echo $this->Form->control('event');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/ElopageBuys/index.ctp b/community_server/src/Template/ElopageBuys/index.ctp
deleted file mode 100644
index 4d5ecc1d1..000000000
--- a/community_server/src/Template/ElopageBuys/index.ctp
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
= __('Elopage Buys') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('elopage_user_id') ?>
- = $this->Paginator->sort('affiliate_program_id') ?>
- = $this->Paginator->sort('publisher_id') ?>
- = $this->Paginator->sort('order_id') ?>
- = $this->Paginator->sort('product_id') ?>
- = $this->Paginator->sort('product_price') ?>
- = $this->Paginator->sort('payer_email') ?>
- = $this->Paginator->sort('publisher_email') ?>
- = $this->Paginator->sort('payed') ?>
- = $this->Paginator->sort('success_date') ?>
- = $this->Paginator->sort('event') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($elopageBuy->id) ?>
- = $this->Number->format($elopageBuy->elopage_user_id) ?>
- = $this->Number->format($elopageBuy->affiliate_program_id) ?>
- = $this->Number->format($elopageBuy->publisher_id) ?>
- = $this->Number->format($elopageBuy->order_id) ?>
- = $this->Number->format($elopageBuy->product_id) ?>
- = $this->Number->format($elopageBuy->product_price) ?>
- = h($elopageBuy->payer_email) ?>
- = h($elopageBuy->publisher_email) ?>
- = h($elopageBuy->payed) ?>
- = h($elopageBuy->success_date) ?>
- = h($elopageBuy->event) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $elopageBuy->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $elopageBuy->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $elopageBuy->id], ['confirm' => __('Are you sure you want to delete # {0}?', $elopageBuy->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/ElopageBuys/statistics.ctp b/community_server/src/Template/ElopageBuys/statistics.ctp
deleted file mode 100644
index 3ac6cf7f6..000000000
--- a/community_server/src/Template/ElopageBuys/statistics.ctp
+++ /dev/null
@@ -1,35 +0,0 @@
-toArray());
-/*foreach($elopageBuys as $entry) {
- echo $entry->success_date . "
";
-}
- *
- */
-/*foreach($users as $user) {
- //var_dump($user);
- echo $user->created;
- echo "
";
-}*/
-?>
-
-
-
-
-
-
-
-
= $users->count()?>
-
= __('Anmeldungen diesen Monat'); ?>
-
12.01 %
-
-
-
-
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/ElopageBuys/view.ctp b/community_server/src/Template/ElopageBuys/view.ctp
deleted file mode 100644
index 2631e17fe..000000000
--- a/community_server/src/Template/ElopageBuys/view.ctp
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
= h($elopageBuy->id) ?>
-
-
- = __('Payer Email') ?>
- = h($elopageBuy->payer_email) ?>
-
-
- = __('Publisher Email') ?>
- = h($elopageBuy->publisher_email) ?>
-
-
- = __('Event') ?>
- = h($elopageBuy->event) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($elopageBuy->id) ?>
-
-
- = __('Elopage User Id') ?>
- = $this->Number->format($elopageBuy->elopage_user_id) ?>
-
-
- = __('Affiliate Program Id') ?>
- = $this->Number->format($elopageBuy->affiliate_program_id) ?>
-
-
- = __('Publisher Id') ?>
- = $this->Number->format($elopageBuy->publisher_id) ?>
-
-
- = __('Order Id') ?>
- = $this->Number->format($elopageBuy->order_id) ?>
-
-
- = __('Product Id') ?>
- = $this->Number->format($elopageBuy->product_id) ?>
-
-
- = __('Product Price') ?>
- = $this->Number->format($elopageBuy->product_price) ?>
-
-
- = __('Success Date') ?>
- = h($elopageBuy->success_date) ?>
-
-
- = __('Payed') ?>
- = $elopageBuy->payed ? __('Yes') : __('No'); ?>
-
-
-
diff --git a/community_server/src/Template/Email/html/default.ctp b/community_server/src/Template/Email/html/default.ctp
deleted file mode 100644
index ac3daa7fe..000000000
--- a/community_server/src/Template/Email/html/default.ctp
+++ /dev/null
@@ -1,20 +0,0 @@
- ' . $line . "\n";
-endforeach;
diff --git a/community_server/src/Template/Email/text/default.ctp b/community_server/src/Template/Email/text/default.ctp
deleted file mode 100644
index 862cd9f76..000000000
--- a/community_server/src/Template/Email/text/default.ctp
+++ /dev/null
@@ -1,16 +0,0 @@
-assign('title', __('Gradido Schöpfung'));
-?>= __('Hallo') ?> = $user->first_name ?> = $user->last_name ?>,
-
-= __('für dich wurden soeben {0} geschöpft.', $this->element('printGradido', ['number' => $gdd_cent, 'raw' => true])) ?>
-Gradido Akademie schreibt:
-
-= $memo ?>
-
-= __('Bitte antworte nicht auf diese E-Mail!'); ?>
-
-= __('Mit freundlichen Grüßen'); ?>
-Gradido Community Server
\ No newline at end of file
diff --git a/community_server/src/Template/Email/text/notification_transaction_failed.ctp b/community_server/src/Template/Email/text/notification_transaction_failed.ctp
deleted file mode 100644
index 975848e58..000000000
--- a/community_server/src/Template/Email/text/notification_transaction_failed.ctp
+++ /dev/null
@@ -1,50 +0,0 @@
-assign('title', __('Gradido Transaktion fehlgeschlagen'));
-
-$transaction_body = $transaction->getTransactionBody();
-$specific_transaction = $transaction_body->getSpecificTransaction();
-$transaction_type_name = $transaction_body->getTransactionTypeName();
-
-?>= __('Hallo') ?> = $user->first_name ?> = $user->last_name ?>,
-
-= __('Deine letzte Transaktion ist leider fehlgeschlagen.') ?>
-
-
-= __('Du wolltest {0} für {1} schöpfen.',
- $this->element('printGradido', ['number' => $specific_transaction->getAmount(), 'raw' => true]),
- $specific_transaction->getReceiverUser()->getEmailWithName()) ?>
-
-= __('Das Zieldatum war: ') . $specific_transaction->getTargetDate()->format('d.m.Y') ?>
-
-= __('Du wolltest {0} an {1} senden.',
- $this->element('printGradido', ['number' => $specific_transaction->getAmount(), 'raw' => true]),
- $specific_transaction->getReceiverUser()->getEmailWithName()) ?>
-
-
-
-= __('Das ist schief gelaufen: ') ?>
-
-getErrors();
- foreach($errors as $error) {
- //echo "\t".json_encode($error);
- echo "\n\t".$error[array_keys($error)[0]]."\n";
- }
-}?>
-
-
-= __('Bitte antworte nicht auf diese E-Mail!'); ?>
-
-
-= __('Mit freundlichen Grüßen'); ?>
-Gradido Community Server
\ No newline at end of file
diff --git a/community_server/src/Template/Email/text/notification_transfer.ctp b/community_server/src/Template/Email/text/notification_transfer.ctp
deleted file mode 100644
index 05df9695d..000000000
--- a/community_server/src/Template/Email/text/notification_transfer.ctp
+++ /dev/null
@@ -1,26 +0,0 @@
-assign('title', __('Gradido Überweisung'));
-$receiverNames = $receiverUser->first_name . ' ' . $receiverUser->last_name;
-$senderNames = $senderUser->first_name . ' ' . $senderUser->last_name;
-$senderNamesEmail = $senderUser->getEmailWithName();
-?>= __('Hallo') ?> = $receiverNames ?>,
-
-= __('Du hast soeben {0} von {1} erhalten.', $this->element('printGradido', ['number' => $gdd_cent, 'raw' => true]), $senderNamesEmail) ?>
-= __('{0} schreibt:', $senderNames) ?>
-
-= $memo ?>
-
-= __('Bitte antworte nicht auf diese E-Mail!'); ?>
-= __('Wenn Du ') . $senderNames . __(' per E-Mail antworten willst, schreibe stattdessen an die Adresse: '); ?>
-
-= $senderUser->email ?>
-
-
-= __('Mit freundlichen Grüßen'); ?>
-Gradido Community Server
\ No newline at end of file
diff --git a/community_server/src/Template/Error/error400.ctp b/community_server/src/Template/Error/error400.ctp
deleted file mode 100644
index 6b538b7f4..000000000
--- a/community_server/src/Template/Error/error400.ctp
+++ /dev/null
@@ -1,38 +0,0 @@
-layout = 'error';
-
-if (Configure::read('debug')) :
- $this->layout = 'dev_error';
-
- $this->assign('title', $message);
- $this->assign('templateName', 'error400.ctp');
-
- $this->start('file');
-?>
-queryString)) : ?>
-
- SQL Query:
- = h($error->queryString) ?>
-
-
-params)) : ?>
-
SQL Query Params:
- params) ?>
-
-= $this->element('auto_table_warning') ?>
-end();
-endif;
-?>
-
= h($message) ?>
-
- = __d('cake', 'Error') ?>:
- = __d('cake', 'The requested address {0} was not found on this server.', "'{$url}' ") ?>
-
diff --git a/community_server/src/Template/Error/error500.ctp b/community_server/src/Template/Error/error500.ctp
deleted file mode 100644
index 3328cc52c..000000000
--- a/community_server/src/Template/Error/error500.ctp
+++ /dev/null
@@ -1,43 +0,0 @@
-layout = 'error';
-
-if (Configure::read('debug')) :
- $this->layout = 'dev_error';
-
- $this->assign('title', $message);
- $this->assign('templateName', 'error500.ctp');
-
- $this->start('file');
-?>
-queryString)) : ?>
-
- SQL Query:
- = h($error->queryString) ?>
-
-
-params)) : ?>
-
SQL Query Params:
- params) ?>
-
-
-
Error in:
- = sprintf('%s, line %s', str_replace(ROOT, 'ROOT', $error->getFile()), $error->getLine()) ?>
-
-element('auto_table_warning');
-
- if (extension_loaded('xdebug')) :
- xdebug_print_function_stack();
- endif;
-
- $this->end();
-endif;
-?>
-
= __d('cake', 'An Internal Error Has Occurred') ?>
-
- = __d('cake', 'Error') ?>:
- = h($message) ?>
-
diff --git a/community_server/src/Template/Layout/Email/html/default.ctp b/community_server/src/Template/Layout/Email/html/default.ctp
deleted file mode 100644
index 3ff87ff83..000000000
--- a/community_server/src/Template/Layout/Email/html/default.ctp
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
= $this->fetch('title') ?>
-
-
- = $this->fetch('content') ?>
-
-
diff --git a/community_server/src/Template/Layout/Email/text/default.ctp b/community_server/src/Template/Layout/Email/text/default.ctp
deleted file mode 100644
index 29b439ccc..000000000
--- a/community_server/src/Template/Layout/Email/text/default.ctp
+++ /dev/null
@@ -1,16 +0,0 @@
-fetch('content');
diff --git a/community_server/src/Template/Layout/ajax.ctp b/community_server/src/Template/Layout/ajax.ctp
deleted file mode 100644
index 29b439ccc..000000000
--- a/community_server/src/Template/Layout/ajax.ctp
+++ /dev/null
@@ -1,16 +0,0 @@
-fetch('content');
diff --git a/community_server/src/Template/Layout/default.ctp b/community_server/src/Template/Layout/default.ctp
deleted file mode 100644
index 4633502df..000000000
--- a/community_server/src/Template/Layout/default.ctp
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
- = $this->Html->charset() ?>
-
-
- = $cakeDescription ?>:
- = $this->fetch('title') ?>
-
- = $this->Html->meta('icon') ?>
- = $this->Html->css(['main.css']) ?>
- = $this->Html->script(['basic']) ?>
- = $this->fetch('meta') ?>
- = $this->fetch('css') ?>
- = $this->fetch('script') ?>
-
-
-
-
-
- = $this->html->link(__('Logout'), ['controller' => 'ServerUsers', 'action' => 'logout'])?>
- Documentation
- API
-
-
- = $this->Flash->render() ?>
- = $this->fetch('content') ?>
-
-
-
-
- = round($timeUsed * 1000.0, 4) ?> ms
-
-
-
-
diff --git a/community_server/src/Template/Layout/error.ctp b/community_server/src/Template/Layout/error.ctp
deleted file mode 100644
index 7367c1bf7..000000000
--- a/community_server/src/Template/Layout/error.ctp
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
- = $this->Html->charset() ?>
-
- = $this->fetch('title') ?>
-
- = $this->Html->meta('icon') ?>
-
- = $this->Html->css('base.css') ?>
- = $this->Html->css('style.css') ?>
-
- = $this->fetch('meta') ?>
- = $this->fetch('css') ?>
- = $this->fetch('script') ?>
-
-
-
-
-
- = $this->Flash->render() ?>
-
- = $this->fetch('content') ?>
-
-
-
-
-
diff --git a/community_server/src/Template/Layout/frontend.ctp b/community_server/src/Template/Layout/frontend.ctp
deleted file mode 100644
index cb01fea30..000000000
--- a/community_server/src/Template/Layout/frontend.ctp
+++ /dev/null
@@ -1,113 +0,0 @@
-";
-//echo "transactions pending: " . $transactionPendings;
-?>
-
-
-
- = $this->Html->charset() ?>
-
-
- = $cakeDescription ?>:
- = $this->fetch('title') ?>
-
- = $this->Html->meta('icon') ?>
- = $this->Html->css(['main.css']) ?>
- = $this->Html->script(['basic']) ?>
- = $this->fetch('meta') ?>
- = $this->fetch('css') ?>
- = $this->fetch('script') ?>
-
-
-
-
-
-
- menu
-
-
-
-
-
-
-
-
-
- = $this->Flash->render() ?>
-
- = $this->element('navi_center'); ?>
-
-
- fetch('header')): ?>
-
- = $this->fetch('header') ?>
-
-
-
- = $this->fetch('content') ?>
-
-
-
-
-
Copyright © 2020 Gradido
-
-
-
- =round($timeUsed * 1000.0, 4)?> ms
-
-
-
-
= __("Community Server in Entwicklung") ?>
-
Alpha 0.20.06.03
-
-
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/Layout/rss/default.ctp b/community_server/src/Template/Layout/rss/default.ctp
deleted file mode 100644
index 8269be212..000000000
--- a/community_server/src/Template/Layout/rss/default.ctp
+++ /dev/null
@@ -1,11 +0,0 @@
-fetch('title');
-endif;
-
-echo $this->Rss->document(
- $this->Rss->channel([], $channel, $this->fetch('content'))
-);
diff --git a/community_server/src/Template/OperatorTypes/add.ctp b/community_server/src/Template/OperatorTypes/add.ctp
deleted file mode 100644
index c50feecf0..000000000
--- a/community_server/src/Template/OperatorTypes/add.ctp
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- = $this->Form->create($operatorType) ?>
-
- = __('Add Operator Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/OperatorTypes/edit.ctp b/community_server/src/Template/OperatorTypes/edit.ctp
deleted file mode 100644
index 0b61f0f7a..000000000
--- a/community_server/src/Template/OperatorTypes/edit.ctp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- = $this->Form->create($operatorType) ?>
-
- = __('Edit Operator Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/OperatorTypes/index.ctp b/community_server/src/Template/OperatorTypes/index.ctp
deleted file mode 100644
index 52a49b547..000000000
--- a/community_server/src/Template/OperatorTypes/index.ctp
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
= __('Operator Types') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('name') ?>
- = $this->Paginator->sort('text') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($operatorType->id) ?>
- = h($operatorType->name) ?>
- = h($operatorType->text) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $operatorType->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $operatorType->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $operatorType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $operatorType->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/OperatorTypes/view.ctp b/community_server/src/Template/OperatorTypes/view.ctp
deleted file mode 100644
index a7cb775cf..000000000
--- a/community_server/src/Template/OperatorTypes/view.ctp
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
= h($operatorType->name) ?>
-
-
- = __('Name') ?>
- = h($operatorType->name) ?>
-
-
- = __('Text') ?>
- = h($operatorType->text) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($operatorType->id) ?>
-
-
-
-
diff --git a/community_server/src/Template/Operators/add.ctp b/community_server/src/Template/Operators/add.ctp
deleted file mode 100644
index 6696cce5c..000000000
--- a/community_server/src/Template/Operators/add.ctp
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- = $this->Form->create($operator) ?>
-
- = __('Add Operator') ?>
- Form->control('username');
- echo $this->Form->control('user_pubkey');
- echo $this->Form->control('operator_type_id');
- echo $this->Form->control('data_base64');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Operators/edit.ctp b/community_server/src/Template/Operators/edit.ctp
deleted file mode 100644
index 88a348e59..000000000
--- a/community_server/src/Template/Operators/edit.ctp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- = $this->Form->create($operator) ?>
-
- = __('Edit Operator') ?>
- Form->control('username');
- echo $this->Form->control('user_pubkey');
- echo $this->Form->control('operator_type_id');
- echo $this->Form->control('data_base64');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Operators/index.ctp b/community_server/src/Template/Operators/index.ctp
deleted file mode 100644
index 3da9a6afb..000000000
--- a/community_server/src/Template/Operators/index.ctp
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
= __('Operators') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('username') ?>
- = $this->Paginator->sort('user_pubkey') ?>
- = $this->Paginator->sort('operator_type_id') ?>
- = $this->Paginator->sort('data_base64') ?>
- = $this->Paginator->sort('modified') ?>
- = __('Actions') ?>
-
-
-
- operator_type->name ?>
-
- = $this->Number->format($operator->id) ?>
- = h($operator->username) ?>
- = h(bin2hex($operator->user_pubkey)) ?>
- = $this->Html->link(__($operator->operator_type->name), ['controller' => 'OperatorTypes', 'action' => 'view', $operator->operator_type_id]) ?>
- = h($operator->data_base64) ?>
- = h($operator->modified) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $operator->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $operator->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $operator->id], ['confirm' => __('Are you sure you want to delete # {0}?', $operator->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/Operators/view.ctp b/community_server/src/Template/Operators/view.ctp
deleted file mode 100644
index a317c8e17..000000000
--- a/community_server/src/Template/Operators/view.ctp
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
= h($operator->id) ?>
-
-
- = __('Username') ?>
- = h($operator->username) ?>
-
-
- = __('User Pubkey') ?>
- = h(bin2hex($operator->user_pubkey)) ?>
-
-
- = __('Data Base64') ?>
- = h($operator->data_base64) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($operator->id) ?>
-
-
- = __('Operator Type Id') ?>
- = $this->Number->format($operator->operator_type_id) ?>
-
-
-
diff --git a/community_server/src/Template/Pages/cake_home.ctp b/community_server/src/Template/Pages/cake_home.ctp
deleted file mode 100644
index 5a3731e4c..000000000
--- a/community_server/src/Template/Pages/cake_home.ctp
+++ /dev/null
@@ -1,276 +0,0 @@
-layout = false;
-
-if (!Configure::read('debug')) :
- throw new NotFoundException(
- 'Please replace src/Template/Pages/home.ctp with your own version or re-enable debug mode.'
- );
-endif;
-
-$cakeDescription = 'CakePHP: the rapid development PHP framework';
-?>
-
-
-
- = $this->Html->charset() ?>
-
-
- = $cakeDescription ?>
-
-
- = $this->Html->meta('icon') ?>
- = $this->Html->css('base.css') ?>
- = $this->Html->css('style.css') ?>
- = $this->Html->css('home.css') ?>
-
-
-
-
-
-
-
-
-
-
Please be aware that this page will not be shown if you turn off debug mode unless you replace src/Template/Pages/home.ctp with your own version.
-
-
-
-
-
-
-
-
-
Environment
-
- =')) : ?>
- Your version of PHP is 5.6.0 or higher (detected = PHP_VERSION ?>).
-
- Your version of PHP is too low. You need PHP 5.6.0 or higher to use CakePHP (detected = PHP_VERSION ?>).
-
-
-
- Your version of PHP has the mbstring extension loaded.
-
- Your version of PHP does NOT have the mbstring extension loaded.
-
-
-
- Your version of PHP has the openssl extension loaded.
-
- Your version of PHP has the mcrypt extension loaded.
-
- Your version of PHP does NOT have the openssl or mcrypt extension loaded.
-
-
-
- Your version of PHP has the intl extension loaded.
-
- Your version of PHP does NOT have the intl extension loaded.
-
-
-
-
-
Filesystem
-
-
- Your tmp directory is writable.
-
- Your tmp directory is NOT writable.
-
-
-
- Your logs directory is writable.
-
- Your logs directory is NOT writable.
-
-
-
-
- The = $settings['className'] ?>Engine is being used for core caching. To change the config edit config/app.php
-
- Your cache is NOT working. Please check the settings in config/app.php
-
-
-
-
-
-
-
-
-
Database
- connect();
- } catch (Exception $connectionError) {
- $connected = false;
- $errorMsg = $connectionError->getMessage();
- if (method_exists($connectionError, 'getAttributes')) :
- $attributes = $connectionError->getAttributes();
- if (isset($errorMsg['message'])) :
- $errorMsg .= '
' . $attributes['message'];
- endif;
- endif;
- }
- ?>
-
-
- CakePHP is able to connect to the database.
-
- CakePHP is NOT able to connect to the database. = $errorMsg ?>
-
-
-
-
-
DebugKit
-
-
- DebugKit is loaded.
-
- DebugKit is NOT loaded. You need to either install pdo_sqlite, or define the "debug_kit" connection name.
-
-
-
-
-
-
-
-
-
Editing this Page
-
- To change the content of this page, edit: src/Template/Pages/home.ctp.
- You can also add some CSS styles for your pages at: webroot/css/.
-
-
-
-
-
-
-
-
More about Cake
-
- CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Front Controller and MVC.
- Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility.
-
-
-
-
-
-
-
-
P
-
Help and Bug Reports
-
-
-
-
r
-
Docs and Downloads
-
-
-
-
s
-
Training and Certification
-
-
-
-
-
-
diff --git a/community_server/src/Template/Pages/gradido.ctp b/community_server/src/Template/Pages/gradido.ctp
deleted file mode 100644
index f6a2213cc..000000000
--- a/community_server/src/Template/Pages/gradido.ctp
+++ /dev/null
@@ -1,14 +0,0 @@
-layout = false;?>
-
-
Web Assembly Test (CakePHP Single Node Version)
-
-
-
-
Wird geladen...
-
-
-
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/Pages/home.ctp b/community_server/src/Template/Pages/home.ctp
deleted file mode 100644
index 3926921c4..000000000
--- a/community_server/src/Template/Pages/home.ctp
+++ /dev/null
@@ -1,19 +0,0 @@
-layout = false;?>
-
-
Web Assembly Test (CakePHP Single Node Version)
-
-
-
-
-
-
Gradido
- Implementierung wählen
-
-
-
-
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/Pages/js.ctp b/community_server/src/Template/Pages/js.ctp
deleted file mode 100644
index 60868adc4..000000000
--- a/community_server/src/Template/Pages/js.ctp
+++ /dev/null
@@ -1,41 +0,0 @@
-layout = false;?>
-
-
-
-
-
-
-
-
-
BootstrapVue Argon Dashboard by Creative Tim
-
-
-
-
-
-
-
-
-
-
- wird geladen...
-
-
-
-
-
diff --git a/community_server/src/Template/Pages/visitor.ctp b/community_server/src/Template/Pages/visitor.ctp
deleted file mode 100644
index e6956c97c..000000000
--- a/community_server/src/Template/Pages/visitor.ctp
+++ /dev/null
@@ -1,16 +0,0 @@
-layout = false;?>
-
-
-
-
Visitor Page
-
-
-
-
-
Info Page for Visitor to learn about group before try to enter or connect (befriend)
-
-
diff --git a/community_server/src/Template/Profile/edit.ctp b/community_server/src/Template/Profile/edit.ctp
deleted file mode 100644
index edddf1631..000000000
--- a/community_server/src/Template/Profile/edit.ctp
+++ /dev/null
@@ -1,41 +0,0 @@
-assign('title', __('Profil ändern'));
-// In a View class
-$this->loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-?>
-
-
-= $this->Html->script(['core', 'vendor.addons']); ?>
-
diff --git a/community_server/src/Template/Profile/index.ctp b/community_server/src/Template/Profile/index.ctp
deleted file mode 100644
index b77ff9f70..000000000
--- a/community_server/src/Template/Profile/index.ctp
+++ /dev/null
@@ -1,82 +0,0 @@
-';
-$header .= '';
-if (!empty($communityProfile['profile_desc'])) {
- $header .= "
".$communityProfile['profile_desc']."
";
-}
-$header .= '
';
-if ($communityProfile && $communityProfile['profile_img']) {
- $header .= " ";
-}
-$this->assign('title', __('Mein Profil'));
-$this->assign('header', $header);
-?>
-
-= round($requestTime * 1000.0) ?> ms
-
-
-
- assignment_ind
- Meine Daten
-
-
-
-
- E-Mail Adresse:
- =$user['email']?>
-
-
- Vorname:
- =$user['first_name']?>
-
-
- Nachname:
- =$user['last_name']?>
-
-
-
-
- Meine Daten ändern
-
-
-
-
-
-
- vpn_key
- Passwort ändern
-
-
-
diff --git a/community_server/src/Template/Roles/add.ctp b/community_server/src/Template/Roles/add.ctp
deleted file mode 100644
index c671ed011..000000000
--- a/community_server/src/Template/Roles/add.ctp
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
- = $this->Form->create($role) ?>
-
- = __('Add Role') ?>
- Form->control('title');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Roles/edit.ctp b/community_server/src/Template/Roles/edit.ctp
deleted file mode 100644
index 8a7cd385f..000000000
--- a/community_server/src/Template/Roles/edit.ctp
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
- = $this->Form->create($role) ?>
-
- = __('Edit Role') ?>
- Form->control('title');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Roles/index.ctp b/community_server/src/Template/Roles/index.ctp
deleted file mode 100644
index 2637ef958..000000000
--- a/community_server/src/Template/Roles/index.ctp
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
= __('Roles') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('title') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($role->id) ?>
- = h($role->title) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $role->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $role->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $role->id], ['confirm' => __('Are you sure you want to delete # {0}?', $role->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/Roles/view.ctp b/community_server/src/Template/Roles/view.ctp
deleted file mode 100644
index 04e1dcec5..000000000
--- a/community_server/src/Template/Roles/view.ctp
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('Edit Role'), ['action' => 'edit', $role->id]) ?>
- = $this->Form->postLink(__('Delete Role'), ['action' => 'delete', $role->id], ['confirm' => __('Are you sure you want to delete # {0}?', $role->id)]) ?>
- = $this->Html->link(__('List Roles'), ['action' => 'index']) ?>
- = $this->Html->link(__('New Role'), ['action' => 'add']) ?>
-
-
-
-
= h($role->title) ?>
-
-
- = __('Title') ?>
- = h($role->title) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($role->id) ?>
-
-
-
diff --git a/community_server/src/Template/ServerUsers/add.ctp b/community_server/src/Template/ServerUsers/add.ctp
deleted file mode 100644
index 35907282b..000000000
--- a/community_server/src/Template/ServerUsers/add.ctp
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- = $this->Form->create($serverUser) ?>
-
- = __('Add Server User') ?>
- Form->control('username');
- echo $this->Form->control('password');
- echo $this->Form->control('email');
- echo $this->Form->control('role');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/ServerUsers/edit.ctp b/community_server/src/Template/ServerUsers/edit.ctp
deleted file mode 100644
index df812d032..000000000
--- a/community_server/src/Template/ServerUsers/edit.ctp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- = $this->Form->create($serverUser) ?>
-
- = __('Edit Server User') ?>
- Form->control('username');
- echo $this->Form->control('password');
- echo $this->Form->control('email');
- echo $this->Form->control('role');
- echo $this->Form->control('activated');
- echo $this->Form->control('last_login', ['empty' => true]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/ServerUsers/index.ctp b/community_server/src/Template/ServerUsers/index.ctp
deleted file mode 100644
index a6e14cedc..000000000
--- a/community_server/src/Template/ServerUsers/index.ctp
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
= __('Server Users') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('username') ?>
- = $this->Paginator->sort('email') ?>
- = $this->Paginator->sort('role') ?>
- = $this->Paginator->sort('activated') ?>
- = $this->Paginator->sort('last_login') ?>
- = $this->Paginator->sort('created') ?>
- = $this->Paginator->sort('modified') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($serverUser->id) ?>
- = h($serverUser->username) ?>
- = h($serverUser->email) ?>
- = h($serverUser->role) ?>
- = h($serverUser->activated) ?>
- = h($serverUser->last_login) ?>
- = h($serverUser->created) ?>
- = h($serverUser->modified) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $serverUser->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $serverUser->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $serverUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $serverUser->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/ServerUsers/login.ctp b/community_server/src/Template/ServerUsers/login.ctp
deleted file mode 100644
index 4996d5e7b..000000000
--- a/community_server/src/Template/ServerUsers/login.ctp
+++ /dev/null
@@ -1,22 +0,0 @@
-loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-?>
-= $this->Flash->render() ?>
-
- = $this->Form->create() ?>
-
- = __('Please enter your username and password') ?>
- = $this->Form->control('username') ?>
- = $this->Form->control('password') ?>
-
- = $this->Form->button(__('Login'), ['class' => 'form-button']); ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/ServerUsers/view.ctp b/community_server/src/Template/ServerUsers/view.ctp
deleted file mode 100644
index 0d3a9ae21..000000000
--- a/community_server/src/Template/ServerUsers/view.ctp
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
= h($serverUser->id) ?>
-
-
- = __('Username') ?>
- = h($serverUser->username) ?>
-
-
- = __('Password') ?>
- = h($serverUser->password) ?>
-
-
- = __('Email') ?>
- = h($serverUser->email) ?>
-
-
- = __('Role') ?>
- = h($serverUser->role) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($serverUser->id) ?>
-
-
- = __('Last Login') ?>
- = h($serverUser->last_login) ?>
-
-
- = __('Created') ?>
- = h($serverUser->created) ?>
-
-
- = __('Modified') ?>
- = h($serverUser->modified) ?>
-
-
- = __('Activated') ?>
- = $serverUser->activated ? __('Yes') : __('No'); ?>
-
-
-
diff --git a/community_server/src/Template/StateBalances/add.ctp b/community_server/src/Template/StateBalances/add.ctp
deleted file mode 100644
index 64ef5d576..000000000
--- a/community_server/src/Template/StateBalances/add.ctp
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- = $this->Form->create($stateBalance) ?>
- add
-
- = __('Add State Balance') ?>
- Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('amount');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateBalances/edit.ctp b/community_server/src/Template/StateBalances/edit.ctp
deleted file mode 100644
index c4a6c1e81..000000000
--- a/community_server/src/Template/StateBalances/edit.ctp
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
- = $this->Form->create($stateBalance) ?>
- edit
-
- = __('Edit State Balance') ?>
- Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('amount');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateBalances/index.ctp b/community_server/src/Template/StateBalances/index.ctp
deleted file mode 100644
index 4b0db06d6..000000000
--- a/community_server/src/Template/StateBalances/index.ctp
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
= __('State Balances') ?>
- index
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('state_user_id') ?>
- = $this->Paginator->sort('modified') ?>
- = $this->Paginator->sort('amount') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateBalance->id) ?>
- = $stateBalance->has('state_user') ? $this->Html->link($stateBalance->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateBalance->state_user->id]) : '' ?>
- = h($stateBalance->modified) ?>
- = $this->Number->format($stateBalance->amount) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateBalance->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateBalance->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateBalance->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateBalance->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateBalances/overview.ctp b/community_server/src/Template/StateBalances/overview.ctp
deleted file mode 100644
index 1f2f4c811..000000000
--- a/community_server/src/Template/StateBalances/overview.ctp
+++ /dev/null
@@ -1,166 +0,0 @@
-assign('title', __('Kontoübersicht'));
-
-$header = '' . __('Aktueller Kontostand: ') . ' ' .
- '' . $this->element('printGradido', ['number' => $balance]) . ' ';
-
-if($gdtSum > 0) {
- $header .= ''.$this->Html->link(
- $this->element('printGDT', ['number' => $gdtSum]),
- ['action' => 'overview_gdt'],
- ['escape' => false]
- ).' ';
-}
-$this->assign('header', $header);
-//var_dump($transactions);
-?>
-
- 0) : ?>
-
-
-
-
-
-
Überweisungen
-
Berechnet (debugging): = $this->element('printGradido', ['number' => $calculated_balance]) ?>
-
-
-
-
-
-
-
-
- 30) {
- $memoShort = substr($memoShort, 0, 30) . '...';
- }
- $cellColorClass = 'success-color';
- if($send) {
- $balance = -$balance;
- $cellColorClass = 'alert-color';
- } else if($transaction['type'] == 'creation') {
- $cellColorClass = 'orange-color';
- } else if($transaction['type'] == 'decay') {
- $cellColorClass = 'red-color';
- }
- ?>
-
-
- = $this->Html->image('50x50.png', ['class' => 'profile-img', 'alt' => 'profile image']) ?>
-
-
-
- = $transaction['name'] ?>
-
-
-
= $transaction['name'] ?>
-
-
= $transaction['pubkey'] ?>
-
-
-
-
- redeem
-
- = __('Geschöpft')?>
-
- arrow_back
- = __('Gesendet') ?>
-
- arrow_forward
- = __('Empfangen') ?>
-
- minus_circle_multiple
- = __('Vergänglichkeit') ?>
-
-
-
-
-
- 30): ?>
- = substr($memoShort, 0, 30) . '...' ?>
-
- = $transaction['memo'] ?>
-
-
-
-
- = $transaction['date']->nice() ?>
-
- = h($transaction['decay_duration']) ?>
-
-
-
= $this->element('printGradido', ['number' => $balance]) ?>
-
-
- = $transaction['transaction_id'] ?>
-
-
-
-
-
-
-
-
- 0) : ?>
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/StateBalances/overview_gdt.ctp b/community_server/src/Template/StateBalances/overview_gdt.ctp
deleted file mode 100644
index f293b93be..000000000
--- a/community_server/src/Template/StateBalances/overview_gdt.ctp
+++ /dev/null
@@ -1,123 +0,0 @@
-assign('title', __('GDT Kontoübersicht'));
-$header = '' . __('Zur Verfügung: ') . ' ';
-
-if($gdtSum > 0){
- $header .= ''.$this->element('printGDT', ['number' => $gdtSum*100.0]).' ';
-}
-if($moreEntrysAsShown) {
- $header .= ''. __('Nur die letzten 100 Einträge werden angezeigt!') . ' ';
-}
-$this->assign('header', $header);
-
-?>
- 0) :?>
-
-
= __('Eigene Einzahlungen') ?>
-
-
-
-
-
-
-
-
-
-
-
-
= $entry['email'] ?>
-
= new FrozenTime($entry['date']) ?>
-
= h($entry['comment']) ?>
-
-
- = $this->element('printGDT', ['number' => $entry['amount']*100.0]); ?>
-
- = $this->element('printEuro', ['number' => $entry['amount']*100.0]); ?>
- element('printEuro', ['number' => $entry['amount2']*100.0]) ?>
-
-
-
- = $this->Number->format($entry['factor']) ?>
- x
- = $this->Number->format($entry['factor2']) ?>
-
-
-
= $this->element('printGDT', ['number' => $entry['gdt']*100.0]) ?>
-
-
-
-
-
- 0) : ?>
-
-
= __('Einzahlungen anderer (Publisherprogramm)') ?>
-
-
-
-
-
-
-
-
-
-
-
= $elopageTransaction['email'] ?>
-
-
-
-
= new FrozenTime($gdtEntry['date']) ?>
-
-
- = $this->element('printGDT', ['number' => $gdtEntry['amount']*100.0]); ?>
-
- = $this->element('printEuro', ['number' => $gdtEntry['amount']*100.0]); ?>
- element('printEuro', ['number' => $gdtEntry['amount2']*100.0]) ?>
-
-
-
- = $this->Number->format($gdtEntry['factor']) ?>
- x
- = $this->Number->format($gdtEntry['factor2']) ?>
-
-
-
= $this->element('printGDT', ['number' => $gdtEntry['gdt'] * 100.0]) ?>
-
-
-
-
-
-= $this->Html->script(['basic', 'popper.min', 'tippy-bundle.umd.min']) ?>
-
\ No newline at end of file
diff --git a/community_server/src/Template/StateBalances/view.ctp b/community_server/src/Template/StateBalances/view.ctp
deleted file mode 100644
index e5f8901dd..000000000
--- a/community_server/src/Template/StateBalances/view.ctp
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
= h($stateBalance->id) ?>
- view
-
-
- = __('State User') ?>
- = $stateBalance->has('state_user') ? $this->Html->link($stateBalance->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateBalance->state_user->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($stateBalance->id) ?>
-
-
- = __('Amount') ?>
- = $this->Number->format($stateBalance->amount) ?>
-
-
- = __('Modified') ?>
- = h($stateBalance->modified) ?>
-
-
-
diff --git a/community_server/src/Template/StateCreated/add.ctp b/community_server/src/Template/StateCreated/add.ctp
deleted file mode 100644
index c66cf83f3..000000000
--- a/community_server/src/Template/StateCreated/add.ctp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- = $this->Form->create($stateCreated) ?>
-
- = __('Add State Created') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('month');
- echo $this->Form->control('year');
- echo $this->Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('short_ident_hash');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateCreated/edit.ctp b/community_server/src/Template/StateCreated/edit.ctp
deleted file mode 100644
index be1ef330b..000000000
--- a/community_server/src/Template/StateCreated/edit.ctp
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
- = $this->Form->create($stateCreated) ?>
-
- = __('Edit State Created') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('month');
- echo $this->Form->control('year');
- echo $this->Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('short_ident_hash');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateCreated/index.ctp b/community_server/src/Template/StateCreated/index.ctp
deleted file mode 100644
index 64a514b3b..000000000
--- a/community_server/src/Template/StateCreated/index.ctp
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
= __('State Created') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('transaction_id') ?>
- = $this->Paginator->sort('month') ?>
- = $this->Paginator->sort('year') ?>
- = $this->Paginator->sort('state_user_id') ?>
- = $this->Paginator->sort('created') ?>
- = $this->Paginator->sort('short_ident_hash') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateCreated->id) ?>
- = $stateCreated->has('transaction') ? $this->Html->link($stateCreated->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateCreated->transaction->id]) : '' ?>
- = $this->Number->format($stateCreated->month) ?>
- = $this->Number->format($stateCreated->year) ?>
- = $stateCreated->has('state_user') ? $this->Html->link($stateCreated->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateCreated->state_user->id]) : '' ?>
- = h($stateCreated->created) ?>
- = $this->Number->format($stateCreated->short_ident_hash) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateCreated->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateCreated->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateCreated->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateCreated->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateCreated/view.ctp b/community_server/src/Template/StateCreated/view.ctp
deleted file mode 100644
index e0e9301ec..000000000
--- a/community_server/src/Template/StateCreated/view.ctp
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
= h($stateCreated->id) ?>
-
-
- = __('Transaction') ?>
- = $stateCreated->has('transaction') ? $this->Html->link($stateCreated->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateCreated->transaction->id]) : '' ?>
-
-
- = __('State User') ?>
- = $stateCreated->has('state_user') ? $this->Html->link($stateCreated->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateCreated->state_user->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($stateCreated->id) ?>
-
-
- = __('Month') ?>
- = $this->Number->format($stateCreated->month) ?>
-
-
- = __('Year') ?>
- = $this->Number->format($stateCreated->year) ?>
-
-
- = __('Short Ident Hash') ?>
- = $this->Number->format($stateCreated->short_ident_hash) ?>
-
-
- = __('Created') ?>
- = h($stateCreated->created) ?>
-
-
-
diff --git a/community_server/src/Template/StateErrors/add.ctp b/community_server/src/Template/StateErrors/add.ctp
deleted file mode 100644
index 24d095b90..000000000
--- a/community_server/src/Template/StateErrors/add.ctp
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
- = $this->Form->create($stateError) ?>
-
- = __('Add State Error') ?>
- Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]);
- echo $this->Form->control('message_json');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateErrors/edit.ctp b/community_server/src/Template/StateErrors/edit.ctp
deleted file mode 100644
index 795b6c7dd..000000000
--- a/community_server/src/Template/StateErrors/edit.ctp
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
- = $this->Form->create($stateError) ?>
-
- = __('Edit State Error') ?>
- Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]);
- echo $this->Form->control('message_json');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateErrors/index.ctp b/community_server/src/Template/StateErrors/index.ctp
deleted file mode 100644
index 3f34f449b..000000000
--- a/community_server/src/Template/StateErrors/index.ctp
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
= __('State Errors') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('state_user_id') ?>
- = $this->Paginator->sort('transaction_type_id') ?>
- = $this->Paginator->sort('created') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateError->id) ?>
- = $stateError->has('state_user') ? $this->Html->link($stateError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateError->state_user->id]) : '' ?>
- = $stateError->has('transaction_type') ? $this->Html->link($stateError->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateError->transaction_type->id]) : '' ?>
- = h($stateError->created) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateError->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateError->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateError->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateError->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateErrors/show_for_user.ctp b/community_server/src/Template/StateErrors/show_for_user.ctp
deleted file mode 100644
index 2420571a3..000000000
--- a/community_server/src/Template/StateErrors/show_for_user.ctp
+++ /dev/null
@@ -1,51 +0,0 @@
-assign('title', __('Fehlermeldungen'));
-//var_dump($transactionTypes);
-/*foreach($transactionTypes as $i => $t) {
- echo "$i => ";
- var_dump($t);
- echo " ";
-}*/
-?>
-
-
Fehler
-
-
-
-
-
-
-
- transaction_type_id-1];
- $errorMessage = "";
- $errorArray = json_decode($error->message_json, true);
- if(isset($errorArray['details']) && is_array($errorArray['details'])) {
- foreach($errorArray['details'][0] as $function => $errorString) {
- $errorMessage = '
' . $function . ' ' . $errorString;
- }
- } else {
- $errorMessage = $error->message_json;
- }
- ?>
-
-
= $type->name ?>
-
= $error->created ?>
-
= $errorMessage ?>
-
- = $this->Html->link(
- __('Delete'),
- ['action' => 'deleteForUser', $error->id],
- ['class' => 'form-button button-cancel']
- ) ?>
-
-
-
-
diff --git a/community_server/src/Template/StateErrors/view.ctp b/community_server/src/Template/StateErrors/view.ctp
deleted file mode 100644
index c2913d306..000000000
--- a/community_server/src/Template/StateErrors/view.ctp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
= h($stateError->id) ?>
-
-
- = __('State User') ?>
- = $stateError->has('state_user') ? $this->Html->link($stateError->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $stateError->state_user->id]) : '' ?>
-
-
- = __('Transaction Type') ?>
- = $stateError->has('transaction_type') ? $this->Html->link($stateError->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateError->transaction_type->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($stateError->id) ?>
-
-
- = __('Created') ?>
- = h($stateError->created) ?>
-
-
-
-
= __('Message Json') ?>
- = $this->Text->autoParagraph(h($stateError->message_json)); ?>
-
-
diff --git a/community_server/src/Template/StateGroupAddresses/add.ctp b/community_server/src/Template/StateGroupAddresses/add.ctp
deleted file mode 100644
index 43ba76178..000000000
--- a/community_server/src/Template/StateGroupAddresses/add.ctp
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('List State Group Addresses'), ['action' => 'index']) ?>
- = $this->Html->link(__('List State Groups'), ['controller' => 'StateGroups', 'action' => 'index']) ?>
- = $this->Html->link(__('New State Group'), ['controller' => 'StateGroups', 'action' => 'add']) ?>
- = $this->Html->link(__('List Address Types'), ['controller' => 'AddressTypes', 'action' => 'index']) ?>
- = $this->Html->link(__('New Address Type'), ['controller' => 'AddressTypes', 'action' => 'add']) ?>
-
-
-
- = $this->Form->create($stateGroupAddress) ?>
-
- = __('Add State Group Address') ?>
- Form->control('group_id');
- echo $this->Form->control('address_type_id', ['options' => $addressTypes]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateGroupAddresses/edit.ctp b/community_server/src/Template/StateGroupAddresses/edit.ctp
deleted file mode 100644
index d3ad6fe70..000000000
--- a/community_server/src/Template/StateGroupAddresses/edit.ctp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Form->postLink(
- __('Delete'),
- ['action' => 'delete', $stateGroupAddress->id],
- ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupAddress->id)]
- )
- ?>
- = $this->Html->link(__('List State Group Addresses'), ['action' => 'index']) ?>
- = $this->Html->link(__('List State Groups'), ['controller' => 'StateGroups', 'action' => 'index']) ?>
- = $this->Html->link(__('New State Group'), ['controller' => 'StateGroups', 'action' => 'add']) ?>
- = $this->Html->link(__('List Address Types'), ['controller' => 'AddressTypes', 'action' => 'index']) ?>
- = $this->Html->link(__('New Address Type'), ['controller' => 'AddressTypes', 'action' => 'add']) ?>
-
-
-
- = $this->Form->create($stateGroupAddress) ?>
-
- = __('Edit State Group Address') ?>
- Form->control('group_id');
- echo $this->Form->control('address_type_id', ['options' => $addressTypes]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateGroupAddresses/index.ctp b/community_server/src/Template/StateGroupAddresses/index.ctp
deleted file mode 100644
index fb463e5dd..000000000
--- a/community_server/src/Template/StateGroupAddresses/index.ctp
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('New State Group Address'), ['action' => 'add']) ?>
- = $this->Html->link(__('List State Groups'), ['controller' => 'StateGroups', 'action' => 'index']) ?>
- = $this->Html->link(__('New State Group'), ['controller' => 'StateGroups', 'action' => 'add']) ?>
- = $this->Html->link(__('List Address Types'), ['controller' => 'AddressTypes', 'action' => 'index']) ?>
- = $this->Html->link(__('New Address Type'), ['controller' => 'AddressTypes', 'action' => 'add']) ?>
-
-
-
-
= __('State Group Addresses') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('group_id') ?>
- = $this->Paginator->sort('address_type_id') ?>
- = __('user public key') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateGroupAddress->id) ?>
- = $this->Number->format($stateGroupAddress->group_id) ?>
- = $stateGroupAddress->has('address_type') ? $this->Html->link($stateGroupAddress->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $stateGroupAddress->address_type->id]) : '' ?>
- = bin2hex(stream_get_contents($stateGroupAddress->public_key)) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateGroupAddress->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateGroupAddress->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateGroupAddress->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupAddress->id)]) ?>
-
-
-
-
-
-
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateGroupAddresses/view.ctp b/community_server/src/Template/StateGroupAddresses/view.ctp
deleted file mode 100644
index 964b12847..000000000
--- a/community_server/src/Template/StateGroupAddresses/view.ctp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('Edit State Group Address'), ['action' => 'edit', $stateGroupAddress->id]) ?>
- = $this->Form->postLink(__('Delete State Group Address'), ['action' => 'delete', $stateGroupAddress->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupAddress->id)]) ?>
- = $this->Html->link(__('List State Group Addresses'), ['action' => 'index']) ?>
- = $this->Html->link(__('New State Group Address'), ['action' => 'add']) ?>
- = $this->Html->link(__('List State Groups'), ['controller' => 'StateGroups', 'action' => 'index']) ?>
- = $this->Html->link(__('New State Group'), ['controller' => 'StateGroups', 'action' => 'add']) ?>
- = $this->Html->link(__('List Address Types'), ['controller' => 'AddressTypes', 'action' => 'index']) ?>
- = $this->Html->link(__('New Address Type'), ['controller' => 'AddressTypes', 'action' => 'add']) ?>
-
-
-
-
= h($stateGroupAddress->id) ?>
-
-
- = __('Address Type') ?>
- = $stateGroupAddress->has('address_type') ? $this->Html->link($stateGroupAddress->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $stateGroupAddress->address_type->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($stateGroupAddress->id) ?>
-
-
- = __('Group Id') ?>
- = $this->Number->format($stateGroupAddress->group_id) ?>
-
-
-
diff --git a/community_server/src/Template/StateGroupRelationships/add.ctp b/community_server/src/Template/StateGroupRelationships/add.ctp
deleted file mode 100644
index 39eb550e8..000000000
--- a/community_server/src/Template/StateGroupRelationships/add.ctp
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
- = $this->Form->create($stateGroupRelationship) ?>
-
- = __('Add State Group Relationship') ?>
- Form->control('state_group1_id');
- echo $this->Form->control('state_group2_id');
- echo $this->Form->control('state_relationship_id');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateGroupRelationships/edit.ctp b/community_server/src/Template/StateGroupRelationships/edit.ctp
deleted file mode 100644
index 55bcc6afe..000000000
--- a/community_server/src/Template/StateGroupRelationships/edit.ctp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- = $this->Form->create($stateGroupRelationship) ?>
-
- = __('Edit State Group Relationship') ?>
- Form->control('state_group1_id');
- echo $this->Form->control('state_group2_id');
- echo $this->Form->control('state_relationship_id');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateGroupRelationships/index.ctp b/community_server/src/Template/StateGroupRelationships/index.ctp
deleted file mode 100644
index 57fbc4da5..000000000
--- a/community_server/src/Template/StateGroupRelationships/index.ctp
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
= __('State Group Relationships') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('state_group1_id') ?>
- = $this->Paginator->sort('state_group2_id') ?>
- = $this->Paginator->sort('state_relationship_id') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateGroupRelationship->id) ?>
- = $this->Number->format($stateGroupRelationship->state_group1_id) ?>
- = $this->Number->format($stateGroupRelationship->state_group2_id) ?>
- = $this->Number->format($stateGroupRelationship->state_relationship_id) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateGroupRelationship->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateGroupRelationship->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateGroupRelationship->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroupRelationship->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateGroupRelationships/view.ctp b/community_server/src/Template/StateGroupRelationships/view.ctp
deleted file mode 100644
index de871dc77..000000000
--- a/community_server/src/Template/StateGroupRelationships/view.ctp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
= h($stateGroupRelationship->id) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($stateGroupRelationship->id) ?>
-
-
- = __('State Group1 Id') ?>
- = $this->Number->format($stateGroupRelationship->state_group1_id) ?>
-
-
- = __('State Group2 Id') ?>
- = $this->Number->format($stateGroupRelationship->state_group2_id) ?>
-
-
- = __('State Relationship Id') ?>
- = $this->Number->format($stateGroupRelationship->state_relationship_id) ?>
-
-
-
diff --git a/community_server/src/Template/StateGroups/add.ctp b/community_server/src/Template/StateGroups/add.ctp
deleted file mode 100644
index e71480593..000000000
--- a/community_server/src/Template/StateGroups/add.ctp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- = $this->Form->create($stateGroup) ?>
-
- = __('Add State Group') ?>
- Form->control('name');
- echo $this->Form->control('user_count');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateGroups/edit.ctp b/community_server/src/Template/StateGroups/edit.ctp
deleted file mode 100644
index 93b35256b..000000000
--- a/community_server/src/Template/StateGroups/edit.ctp
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
- = $this->Form->create($stateGroup) ?>
-
- = __('Edit State Group') ?>
- Form->control('name');
- echo $this->Form->control('user_count');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateGroups/index.ctp b/community_server/src/Template/StateGroups/index.ctp
deleted file mode 100644
index a37029ab2..000000000
--- a/community_server/src/Template/StateGroups/index.ctp
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
= __('State Groups') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('name') ?>
- = $this->Paginator->sort('user_count') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateGroup->id) ?>
- = h($stateGroup->name) ?>
- = $this->Number->format($stateGroup->user_count) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateGroup->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateGroup->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateGroup->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateGroup->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateGroups/view.ctp b/community_server/src/Template/StateGroups/view.ctp
deleted file mode 100644
index 0ecb27009..000000000
--- a/community_server/src/Template/StateGroups/view.ctp
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-
= h($stateGroup->name) ?>
-
-
- = __('Name') ?>
- = h($stateGroup->name) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($stateGroup->id) ?>
-
-
- = __('User Count') ?>
- = $this->Number->format($stateGroup->user_count) ?>
-
-
-
-
-
-
-
diff --git a/community_server/src/Template/StateRelationshipTypes/add.ctp b/community_server/src/Template/StateRelationshipTypes/add.ctp
deleted file mode 100644
index 5eb7c3b4f..000000000
--- a/community_server/src/Template/StateRelationshipTypes/add.ctp
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
- = $this->Form->create($stateRelationshipType) ?>
-
- = __('Add State Relationship Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateRelationshipTypes/edit.ctp b/community_server/src/Template/StateRelationshipTypes/edit.ctp
deleted file mode 100644
index 96ef4ba88..000000000
--- a/community_server/src/Template/StateRelationshipTypes/edit.ctp
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- = $this->Form->create($stateRelationshipType) ?>
-
- = __('Edit State Relationship Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateRelationshipTypes/index.ctp b/community_server/src/Template/StateRelationshipTypes/index.ctp
deleted file mode 100644
index 2e44a8d88..000000000
--- a/community_server/src/Template/StateRelationshipTypes/index.ctp
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
= __('State Relationship Types') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('name') ?>
- = $this->Paginator->sort('text') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateRelationshipType->id) ?>
- = h($stateRelationshipType->name) ?>
- = h($stateRelationshipType->text) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateRelationshipType->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateRelationshipType->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateRelationshipType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateRelationshipType->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateRelationshipTypes/view.ctp b/community_server/src/Template/StateRelationshipTypes/view.ctp
deleted file mode 100644
index 5d745a0df..000000000
--- a/community_server/src/Template/StateRelationshipTypes/view.ctp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
= h($stateRelationshipType->name) ?>
-
-
- = __('Name') ?>
- = h($stateRelationshipType->name) ?>
-
-
- = __('Text') ?>
- = h($stateRelationshipType->text) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($stateRelationshipType->id) ?>
-
-
-
diff --git a/community_server/src/Template/StateUserRoles/assign_role.ctp b/community_server/src/Template/StateUserRoles/assign_role.ctp
deleted file mode 100644
index 64d3a1f8b..000000000
--- a/community_server/src/Template/StateUserRoles/assign_role.ctp
+++ /dev/null
@@ -1,49 +0,0 @@
-assign('title', __('Assign Role'));
-// In a View class
-$this->loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-?>
-= $this->Html->css([
- 'loginServer/style.css',
- 'rippleUI/style.css',
- 'materialdesignicons.min.css'
-]) ?>
-
-
diff --git a/community_server/src/Template/StateUserRoles/index.ctp b/community_server/src/Template/StateUserRoles/index.ctp
deleted file mode 100644
index 4e6ea8cb1..000000000
--- a/community_server/src/Template/StateUserRoles/index.ctp
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
= __('State Users') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
-
- = $this->Paginator->sort('first_name') ?>
- = $this->Paginator->sort('last_name') ?>
- = $this->Paginator->sort('username') ?>
- = $this->Paginator->sort('email') ?>
- = $this->Paginator->sort('disabled') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateUser->id) ?>
-
- = $stateUser->first_name ?>
- = $stateUser->last_name ?>
- = $stateUser->username ?>
- = $stateUser->email ?>
- = $stateUser->disabled ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateUser->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateUser->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUser->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateUserRoles/search.ctp b/community_server/src/Template/StateUserRoles/search.ctp
deleted file mode 100644
index aff7fbbcb..000000000
--- a/community_server/src/Template/StateUserRoles/search.ctp
+++ /dev/null
@@ -1,53 +0,0 @@
-assign('title', __('Benutzer suchen'));
-// In a View class
-$this->loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-?>
-
-
-
= __('State Users') ?>
-
-
-
- = $this->Paginator->sort('first_name') ?>
- = $this->Paginator->sort('last_name') ?>
- = $this->Paginator->sort('email') ?>
- = __('Role') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $stateUser['first_name'] ?>
- = $stateUser['last_name'] ?>
- = $stateUser['email'] ?>
- = $stateUser['role_name'] ?>
-
- = $this->Html->link(__('Assign Role'), ['action' => 'assignRole', $stateUser['pubkeyhex']]) ?>
-
-
-
-
-
-
diff --git a/community_server/src/Template/StateUserTransactions/add.ctp b/community_server/src/Template/StateUserTransactions/add.ctp
deleted file mode 100644
index b131a43e5..000000000
--- a/community_server/src/Template/StateUserTransactions/add.ctp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('List State User Transactions'), ['action' => 'index']) ?>
- = $this->Html->link(__('List State Users'), ['controller' => 'StateUsers', 'action' => 'index']) ?>
- = $this->Html->link(__('New State User'), ['controller' => 'StateUsers', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transactions'), ['controller' => 'Transactions', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction'), ['controller' => 'Transactions', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transaction Types'), ['controller' => 'TransactionTypes', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction Type'), ['controller' => 'TransactionTypes', 'action' => 'add']) ?>
-
-
-
- = $this->Form->create($stateUserTransaction) ?>
-
- = __('Add State User Transaction') ?>
- Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateUserTransactions/edit.ctp b/community_server/src/Template/StateUserTransactions/edit.ctp
deleted file mode 100644
index eec26e522..000000000
--- a/community_server/src/Template/StateUserTransactions/edit.ctp
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Form->postLink(
- __('Delete'),
- ['action' => 'delete', $stateUserTransaction->id],
- ['confirm' => __('Are you sure you want to delete # {0}?', $stateUserTransaction->id)]
- )
- ?>
- = $this->Html->link(__('List State User Transactions'), ['action' => 'index']) ?>
- = $this->Html->link(__('List State Users'), ['controller' => 'StateUsers', 'action' => 'index']) ?>
- = $this->Html->link(__('New State User'), ['controller' => 'StateUsers', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transactions'), ['controller' => 'Transactions', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction'), ['controller' => 'Transactions', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transaction Types'), ['controller' => 'TransactionTypes', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction Type'), ['controller' => 'TransactionTypes', 'action' => 'add']) ?>
-
-
-
- = $this->Form->create($stateUserTransaction) ?>
-
- = __('Edit State User Transaction') ?>
- Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateUserTransactions/index.ctp b/community_server/src/Template/StateUserTransactions/index.ctp
deleted file mode 100644
index 9bdd3d6b3..000000000
--- a/community_server/src/Template/StateUserTransactions/index.ctp
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('New State User Transaction'), ['action' => 'add']) ?>
- = $this->Html->link(__('List State Users'), ['controller' => 'StateUsers', 'action' => 'index']) ?>
- = $this->Html->link(__('New State User'), ['controller' => 'StateUsers', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transactions'), ['controller' => 'Transactions', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction'), ['controller' => 'Transactions', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transaction Types'), ['controller' => 'TransactionTypes', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction Type'), ['controller' => 'TransactionTypes', 'action' => 'add']) ?>
-
-
-
-
= __('State User Transactions') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('state_user_id') ?>
- = $this->Paginator->sort('transaction_id') ?>
- = $this->Paginator->sort('transaction_type_id') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateUserTransaction->id) ?>
- = $stateUserTransaction->has('state_user') ? $this->Html->link($stateUserTransaction->state_user->email, ['controller' => 'StateUsers', 'action' => 'view', $stateUserTransaction->state_user->id]) : '' ?>
- = $stateUserTransaction->has('transaction') ? $this->Html->link($stateUserTransaction->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateUserTransaction->transaction->id]) : '' ?>
- = $stateUserTransaction->has('transaction_type') ? $this->Html->link($stateUserTransaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateUserTransaction->transaction_type->id]) : '' ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateUserTransaction->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateUserTransaction->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateUserTransaction->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUserTransaction->id)]) ?>
-
-
-
-
-
-
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateUserTransactions/view.ctp b/community_server/src/Template/StateUserTransactions/view.ctp
deleted file mode 100644
index 13c05347b..000000000
--- a/community_server/src/Template/StateUserTransactions/view.ctp
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
- = __('Actions') ?>
- = $this->Html->link(__('Edit State User Transaction'), ['action' => 'edit', $stateUserTransaction->id]) ?>
- = $this->Form->postLink(__('Delete State User Transaction'), ['action' => 'delete', $stateUserTransaction->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUserTransaction->id)]) ?>
- = $this->Html->link(__('List State User Transactions'), ['action' => 'index']) ?>
- = $this->Html->link(__('New State User Transaction'), ['action' => 'add']) ?>
- = $this->Html->link(__('List State Users'), ['controller' => 'StateUsers', 'action' => 'index']) ?>
- = $this->Html->link(__('New State User'), ['controller' => 'StateUsers', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transactions'), ['controller' => 'Transactions', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction'), ['controller' => 'Transactions', 'action' => 'add']) ?>
- = $this->Html->link(__('List Transaction Types'), ['controller' => 'TransactionTypes', 'action' => 'index']) ?>
- = $this->Html->link(__('New Transaction Type'), ['controller' => 'TransactionTypes', 'action' => 'add']) ?>
-
-
-
-
= h($stateUserTransaction->id) ?>
-
-
- = __('State User') ?>
- = $stateUserTransaction->has('state_user') ? $this->Html->link($stateUserTransaction->state_user->email, ['controller' => 'StateUsers', 'action' => 'view', $stateUserTransaction->state_user->id]) : '' ?>
-
-
- = __('Transaction') ?>
- = $stateUserTransaction->has('transaction') ? $this->Html->link($stateUserTransaction->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $stateUserTransaction->transaction->id]) : '' ?>
-
-
- = __('Transaction Type') ?>
- = $stateUserTransaction->has('transaction_type') ? $this->Html->link($stateUserTransaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $stateUserTransaction->transaction_type->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($stateUserTransaction->id) ?>
-
-
-
diff --git a/community_server/src/Template/StateUsers/add.ctp b/community_server/src/Template/StateUsers/add.ctp
deleted file mode 100644
index a810bc9d5..000000000
--- a/community_server/src/Template/StateUsers/add.ctp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- = $this->Form->create($stateUser) ?>
-
- = __('Add State User') ?>
- Form->control('index_id');
- echo $this->Form->control('state_group_id', ['options' => $stateGroups]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateUsers/edit.ctp b/community_server/src/Template/StateUsers/edit.ctp
deleted file mode 100644
index 473f1d845..000000000
--- a/community_server/src/Template/StateUsers/edit.ctp
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- = $this->Form->create($stateUser) ?>
-
- = __('Edit State User') ?>
- Form->control('disabled');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/StateUsers/index.ctp b/community_server/src/Template/StateUsers/index.ctp
deleted file mode 100644
index 4e6ea8cb1..000000000
--- a/community_server/src/Template/StateUsers/index.ctp
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
= __('State Users') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
-
- = $this->Paginator->sort('first_name') ?>
- = $this->Paginator->sort('last_name') ?>
- = $this->Paginator->sort('username') ?>
- = $this->Paginator->sort('email') ?>
- = $this->Paginator->sort('disabled') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($stateUser->id) ?>
-
- = $stateUser->first_name ?>
- = $stateUser->last_name ?>
- = $stateUser->username ?>
- = $stateUser->email ?>
- = $stateUser->disabled ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $stateUser->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $stateUser->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $stateUser->id], ['confirm' => __('Are you sure you want to delete # {0}?', $stateUser->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/StateUsers/list_ident_hashes.ctp b/community_server/src/Template/StateUsers/list_ident_hashes.ctp
deleted file mode 100644
index 777a32c99..000000000
--- a/community_server/src/Template/StateUsers/list_ident_hashes.ctp
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
- first name last name email identHash Public key hex
-
-
-
-
-
-
- = $user->first_name ?>
- = $user->last_name ?>
- = $user->email ?>
- = $user->identHash ?>
- = bin2hex(stream_get_contents($user->public_key)) ?>
-
-
-
-
-
diff --git a/community_server/src/Template/StateUsers/search.ctp b/community_server/src/Template/StateUsers/search.ctp
deleted file mode 100644
index 626cb7313..000000000
--- a/community_server/src/Template/StateUsers/search.ctp
+++ /dev/null
@@ -1,79 +0,0 @@
-assign('title', __('Benutzer suchen'));
-// In a View class
-$this->loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-
-$stateOptions = [
- 'all' => __('Alle'),
- //'account created'=>__('Konto angelegt'),
- //'account not on login-server' => __('Konto nicht auf Login-Server'),
- //'email activated' => __('Konto aktiviert'),
- //'account copied to community' => __('Konto auf Gemeinschafts-Server'),
- 'email not activated' => __('Konto nicht aktiviert'),
- //'account multiple times on login-server' => __('Konto mehrfach vorhanden'),
- //'account not on community server' => __('Konto nicht auf Gemeinschafts-Server'),
- //'no keys' => __('Keine Schlüssel generiert')
-];
-
-?>
-= $this->Html->css([
- 'loginServer/style.css',
- 'rippleUI/style.css',
- 'materialdesignicons.min.css'
-]) ?>
-
-
-
-
-
-= $this->Html->script('userSearch.min') ?>
-
-
-
diff --git a/community_server/src/Template/StateUsers/view.ctp b/community_server/src/Template/StateUsers/view.ctp
deleted file mode 100644
index c2bb33c2b..000000000
--- a/community_server/src/Template/StateUsers/view.ctp
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
= h($stateUser->first_name) ?> = h($stateUser->last_name) ?> <= h($stateUser->email) ?>>
-
Konto-Adresse: = h(bin2hex(stream_get_contents($stateUser->public_key))) ?>
-
-
-
-
-
-
diff --git a/community_server/src/Template/TransactionCreations/add.ctp b/community_server/src/Template/TransactionCreations/add.ctp
deleted file mode 100644
index dfe34be56..000000000
--- a/community_server/src/Template/TransactionCreations/add.ctp
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
- = $this->Form->create($transactionCreation) ?>
-
- = __('Add Transaction Creation') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('amount');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionCreations/create.ctp b/community_server/src/Template/TransactionCreations/create.ctp
deleted file mode 100644
index d5c9ee2c5..000000000
--- a/community_server/src/Template/TransactionCreations/create.ctp
+++ /dev/null
@@ -1,31 +0,0 @@
- $receiver) {
- //var_dump($receiver);
- array_push($address_options, [
- 'text' => $receiver['name'],
- 'value' => $i+1,
- 'title' => $receiver['key']
- ]);
-}
-$this->assign('title', __('Schöpfungstransaktion'));
-?>
-
-
- = $this->Form->create($creationForm) ?>
-
- = $this->Form->control('memo'); ?>
- = $this->Form->control('amount'); ?>
- = $this->Form->control('receiver', ['options' => $address_options]); ?>
-
-
- = $this->Form->button(__('Transaktion(en) abschließen'), ['name' => 'next', 'class' => 'grd-form-bn grd-form-bn-succeed grd_clickable grd-width-200']) ?>
- = $this->Form->button(__('Weitere Transaktion erstellen'), ['name' => 'add', 'class' => 'grd-form-bn grd_clickable grd-width-200']) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionCreations/create_multi.ctp b/community_server/src/Template/TransactionCreations/create_multi.ctp
deleted file mode 100644
index d4d130b9c..000000000
--- a/community_server/src/Template/TransactionCreations/create_multi.ctp
+++ /dev/null
@@ -1,229 +0,0 @@
- $receiver) {
- //var_dump($receiver);
- array_push($address_options, [
- 'text' => $receiver['name'],
- 'value' => $i+1,
- 'title' => $receiver['key']
- ]);
-}*/
-$this->assign('title', __('Schöpfungstransaktion'));
-$this->loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-
-use Cake\I18n\FrozenTime;
-
-?>
-
-= $this->Html->script('basic'); ?>
-
- 0) : ?>
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/TransactionCreations/edit.ctp b/community_server/src/Template/TransactionCreations/edit.ctp
deleted file mode 100644
index 85b7704be..000000000
--- a/community_server/src/Template/TransactionCreations/edit.ctp
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
- = $this->Form->create($transactionCreation) ?>
-
- = __('Edit Transaction Creation') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('amount');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionCreations/index.ctp b/community_server/src/Template/TransactionCreations/index.ctp
deleted file mode 100644
index 4eb7b2471..000000000
--- a/community_server/src/Template/TransactionCreations/index.ctp
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
= __('Transaction Creations') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('transaction_id') ?>
- = $this->Paginator->sort('state_user_id') ?>
- = $this->Paginator->sort('target_date') ?>
- = $this->Paginator->sort('received') ?>
- = $this->Paginator->sort('amount') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($transactionCreation->id) ?>
- = $transactionCreation->has('transaction') ? $this->Html->link($transactionCreation->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionCreation->transaction->id]) : '' ?>
- = $transactionCreation->has('state_user') ? $this->Html->link($transactionCreation->state_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionCreation->state_user->id]) : '' ?>
- = h($transactionCreation->target_date) ?>
- = h($transactionCreation->transaction->received) ?>
- = $this->element('printGradido', ['number' => $transactionCreation->amount]) ?>
- = stream_get_contents($transactionCreation->ident_hash) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $transactionCreation->id]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/TransactionCreations/view.ctp b/community_server/src/Template/TransactionCreations/view.ctp
deleted file mode 100644
index a51312674..000000000
--- a/community_server/src/Template/TransactionCreations/view.ctp
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
= h($transactionCreation->id) ?>
-
-
- = __('Transaction') ?>
- = $transactionCreation->has('transaction') ? $this->Html->link($transactionCreation->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionCreation->transaction->id]) : '' ?>
-
-
- = __('State User') ?>
- = $transactionCreation->has('state_user') ? $this->Html->link($transactionCreation->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $transactionCreation->state_user->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($transactionCreation->id) ?>
-
-
- = __('Amount') ?>
- = $this->Number->format($transactionCreation->amount) ?>
-
-
-
diff --git a/community_server/src/Template/TransactionGroupAddaddress/add.ctp b/community_server/src/Template/TransactionGroupAddaddress/add.ctp
deleted file mode 100644
index 21fa1bea7..000000000
--- a/community_server/src/Template/TransactionGroupAddaddress/add.ctp
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- = $this->Form->create($transactionGroupAddaddres) ?>
-
- = __('Add Transaction Group Addaddres') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('address_type_id', ['options' => $addressTypes]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionGroupAddaddress/edit.ctp b/community_server/src/Template/TransactionGroupAddaddress/edit.ctp
deleted file mode 100644
index e9d7c318a..000000000
--- a/community_server/src/Template/TransactionGroupAddaddress/edit.ctp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- = $this->Form->create($transactionGroupAddaddres) ?>
-
- = __('Edit Transaction Group Addaddres') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('address_type_id', ['options' => $addressTypes]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionGroupAddaddress/index.ctp b/community_server/src/Template/TransactionGroupAddaddress/index.ctp
deleted file mode 100644
index 404115d69..000000000
--- a/community_server/src/Template/TransactionGroupAddaddress/index.ctp
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
= __('Transaction Group Addaddress') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('transaction_id') ?>
- = $this->Paginator->sort('address_type_id') ?>
- = __('user public key') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($transactionGroupAddaddres->id) ?>
- = $transactionGroupAddaddres->has('transaction') ? $this->Html->link($transactionGroupAddaddres->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAddaddres->transaction->id]) : '' ?>
- = $transactionGroupAddaddres->has('address_type') ? $this->Html->link($transactionGroupAddaddres->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $transactionGroupAddaddres->address_type->id]) : '' ?>
- = bin2hex(stream_get_contents($transactionGroupAddaddres->public_key)) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $transactionGroupAddaddres->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $transactionGroupAddaddres->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupAddaddres->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupAddaddres->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/TransactionGroupAddaddress/view.ctp b/community_server/src/Template/TransactionGroupAddaddress/view.ctp
deleted file mode 100644
index 8401780e7..000000000
--- a/community_server/src/Template/TransactionGroupAddaddress/view.ctp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
= h($transactionGroupAddaddres->id) ?>
-
-
- = __('Transaction') ?>
- = $transactionGroupAddaddres->has('transaction') ? $this->Html->link($transactionGroupAddaddres->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAddaddres->transaction->id]) : '' ?>
-
-
- = __('Address Type') ?>
- = $transactionGroupAddaddres->has('address_type') ? $this->Html->link($transactionGroupAddaddres->address_type->name, ['controller' => 'AddressTypes', 'action' => 'view', $transactionGroupAddaddres->address_type->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($transactionGroupAddaddres->id) ?>
-
-
-
diff --git a/community_server/src/Template/TransactionGroupAllowtrades/add.ctp b/community_server/src/Template/TransactionGroupAllowtrades/add.ctp
deleted file mode 100644
index 7e29efc24..000000000
--- a/community_server/src/Template/TransactionGroupAllowtrades/add.ctp
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- = $this->Form->create($transactionGroupAllowtrade) ?>
-
- = __('Add Transaction Group Allowtrade') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('group_id');
- echo $this->Form->control('allow');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp b/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp
deleted file mode 100644
index 500241331..000000000
--- a/community_server/src/Template/TransactionGroupAllowtrades/edit.ctp
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
- = $this->Form->create($transactionGroupAllowtrade) ?>
-
- = __('Edit Transaction Group Allowtrade') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('group_id');
- echo $this->Form->control('allow');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionGroupAllowtrades/index.ctp b/community_server/src/Template/TransactionGroupAllowtrades/index.ctp
deleted file mode 100644
index 07386ccb2..000000000
--- a/community_server/src/Template/TransactionGroupAllowtrades/index.ctp
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
= __('Transaction Group Allowtrades') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('transaction_id') ?>
- = $this->Paginator->sort('group_id') ?>
- = $this->Paginator->sort('allow') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($transactionGroupAllowtrade->id) ?>
- = $transactionGroupAllowtrade->has('transaction') ? $this->Html->link($transactionGroupAllowtrade->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAllowtrade->transaction->id]) : '' ?>
- = $this->Number->format($transactionGroupAllowtrade->group_id) ?>
- = h($transactionGroupAllowtrade->allow) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $transactionGroupAllowtrade->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $transactionGroupAllowtrade->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupAllowtrade->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupAllowtrade->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/TransactionGroupAllowtrades/view.ctp b/community_server/src/Template/TransactionGroupAllowtrades/view.ctp
deleted file mode 100644
index 7a6a36f5a..000000000
--- a/community_server/src/Template/TransactionGroupAllowtrades/view.ctp
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
= h($transactionGroupAllowtrade->id) ?>
-
-
- = __('Transaction') ?>
- = $transactionGroupAllowtrade->has('transaction') ? $this->Html->link($transactionGroupAllowtrade->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupAllowtrade->transaction->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($transactionGroupAllowtrade->id) ?>
-
-
- = __('Group Id') ?>
- = $this->Number->format($transactionGroupAllowtrade->group_id) ?>
-
-
- = __('Allow') ?>
- = $transactionGroupAllowtrade->allow ? __('Yes') : __('No'); ?>
-
-
-
diff --git a/community_server/src/Template/TransactionGroupCreates/add.ctp b/community_server/src/Template/TransactionGroupCreates/add.ctp
deleted file mode 100644
index 6e6174eb4..000000000
--- a/community_server/src/Template/TransactionGroupCreates/add.ctp
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
- = $this->Form->create($transactionGroupCreate) ?>
-
- = __('Add Transaction Group Create') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('state_group_id', ['options' => $stateGroups]);
- echo $this->Form->control('name');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionGroupCreates/edit.ctp b/community_server/src/Template/TransactionGroupCreates/edit.ctp
deleted file mode 100644
index d1890afca..000000000
--- a/community_server/src/Template/TransactionGroupCreates/edit.ctp
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
- = $this->Form->create($transactionGroupCreate) ?>
-
- = __('Edit Transaction Group Create') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('state_group_id', ['options' => $stateGroups]);
- echo $this->Form->control('name');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionGroupCreates/index.ctp b/community_server/src/Template/TransactionGroupCreates/index.ctp
deleted file mode 100644
index 13aeabf83..000000000
--- a/community_server/src/Template/TransactionGroupCreates/index.ctp
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
= __('Transaction Group Creates') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('transaction_id') ?>
- = $this->Paginator->sort('state_group_id') ?>
- = $this->Paginator->sort('name') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($transactionGroupCreate->id) ?>
- = $transactionGroupCreate->has('transaction') ? $this->Html->link($transactionGroupCreate->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupCreate->transaction->id]) : '' ?>
- = $transactionGroupCreate->has('state_group') ? $this->Html->link($transactionGroupCreate->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transactionGroupCreate->state_group->id]) : '' ?>
- = h($transactionGroupCreate->name) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $transactionGroupCreate->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $transactionGroupCreate->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $transactionGroupCreate->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionGroupCreate->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/TransactionGroupCreates/view.ctp b/community_server/src/Template/TransactionGroupCreates/view.ctp
deleted file mode 100644
index c774f8bc3..000000000
--- a/community_server/src/Template/TransactionGroupCreates/view.ctp
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
= h($transactionGroupCreate->name) ?>
-
-
- = __('Transaction') ?>
- = $transactionGroupCreate->has('transaction') ? $this->Html->link($transactionGroupCreate->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionGroupCreate->transaction->id]) : '' ?>
-
-
- = __('State Group') ?>
- = $transactionGroupCreate->has('state_group') ? $this->Html->link($transactionGroupCreate->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transactionGroupCreate->state_group->id]) : '' ?>
-
-
- = __('Name') ?>
- = h($transactionGroupCreate->name) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($transactionGroupCreate->id) ?>
-
-
-
diff --git a/community_server/src/Template/TransactionSendCoins/add.ctp b/community_server/src/Template/TransactionSendCoins/add.ctp
deleted file mode 100644
index 8b5a757c4..000000000
--- a/community_server/src/Template/TransactionSendCoins/add.ctp
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- = $this->Form->create($transactionSendCoin) ?>
-
- = __('Add Transaction Send Coin') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('amount');
- echo $this->Form->control('sender_final_balance');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionSendCoins/create.ctp b/community_server/src/Template/TransactionSendCoins/create.ctp
deleted file mode 100644
index 91e7678e0..000000000
--- a/community_server/src/Template/TransactionSendCoins/create.ctp
+++ /dev/null
@@ -1,40 +0,0 @@
-assign('title', __('Überweisung'));
-// In a View class
-$this->loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-?>
-
-
-= $this->Html->script(['core', 'vendor.addons']); ?>
-
diff --git a/community_server/src/Template/TransactionSendCoins/create_raw.ctp b/community_server/src/Template/TransactionSendCoins/create_raw.ctp
deleted file mode 100644
index 0b3d74e1f..000000000
--- a/community_server/src/Template/TransactionSendCoins/create_raw.ctp
+++ /dev/null
@@ -1,55 +0,0 @@
-assign('title', __('Überweisung'));
-// In a View class
-$this->loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-?>
-
-
-
-
-
-
-
-
-
- = $this->Form->create($transferRawForm) ?>
- = $this->Form->control('sender_privkey_hex', ['label' => __('Sender Private Key')]) ?>
- = $this->Form->control('sender_pubkey_hex', ['label' => __('Sender Public Key')]) ?>
- = $this->Form->control('receiver_pubkey_hex', ['label' => __('Empfänger Public Key')]) ?>
- = $this->Form->control('memo', ['label' => __('Verwendungszweck'), 'rows' => 3]) ?>
- = $this->Form->control('amount', ['label' => __('Betrag in GDD')]) ?>
- = $this->Form->button(__('Transaktion abschließen'), ['name' => 'next', 'class' => 'btn btn-sm btn-primary']) ?>
- = $this->Form->end() ?>
-
-
-
-
-
-
-
-
-= $this->Html->script(['core', 'vendor.addons']); ?>
-
diff --git a/community_server/src/Template/TransactionSendCoins/edit.ctp b/community_server/src/Template/TransactionSendCoins/edit.ctp
deleted file mode 100644
index 61a6841fe..000000000
--- a/community_server/src/Template/TransactionSendCoins/edit.ctp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- = $this->Form->create($transactionSendCoin) ?>
-
- = __('Edit Transaction Send Coin') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- echo $this->Form->control('state_user_id', ['options' => $stateUsers]);
- echo $this->Form->control('amount');
- echo $this->Form->control('sender_final_balance');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionSendCoins/index.ctp b/community_server/src/Template/TransactionSendCoins/index.ctp
deleted file mode 100644
index c98f675a5..000000000
--- a/community_server/src/Template/TransactionSendCoins/index.ctp
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
= __('Transaction Send Coins') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('transaction_id') ?>
- = $this->Paginator->sort('state_user_id') ?>
- = $this->Paginator->sort('receiver_user_id') ?>
- = $this->Paginator->sort('amount') ?>
- = $this->Paginator->sort('sender_final_balance') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($transactionSendCoin->id) ?>
- = $transactionSendCoin->has('transaction') ? $this->Html->link($transactionSendCoin->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSendCoin->transaction->id]) : '' ?>
- = $transactionSendCoin->has('state_user') ? $this->Html->link($transactionSendCoin->state_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->state_user->id]) : '' ?>
- = $transactionSendCoin->has('receiver_user') ? $this->Html->link($transactionSendCoin->receiver_user->getEmailWithName(), ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->receiver_user->id]) : ''?>
- = $this->element('printGradido', ['number' => $transactionSendCoin->amount]) ?>
- = $this->Number->format($transactionSendCoin->sender_final_balance) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $transactionSendCoin->id]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/TransactionSendCoins/view.ctp b/community_server/src/Template/TransactionSendCoins/view.ctp
deleted file mode 100644
index 322621942..000000000
--- a/community_server/src/Template/TransactionSendCoins/view.ctp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
= h($transactionSendCoin->id) ?>
-
-
- = __('Transaction') ?>
- = $transactionSendCoin->has('transaction') ? $this->Html->link($transactionSendCoin->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSendCoin->transaction->id]) : '' ?>
-
-
- = __('State User') ?>
- = $transactionSendCoin->has('state_user') ? $this->Html->link($transactionSendCoin->state_user->id, ['controller' => 'StateUsers', 'action' => 'view', $transactionSendCoin->state_user->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($transactionSendCoin->id) ?>
-
-
- = __('Amount') ?>
- = $this->Number->format($transactionSendCoin->amount) ?>
-
-
- = __('Sender Final Balance') ?>
- = $this->Number->format($transactionSendCoin->sender_final_balance) ?>
-
-
-
diff --git a/community_server/src/Template/TransactionSignatures/add.ctp b/community_server/src/Template/TransactionSignatures/add.ctp
deleted file mode 100644
index 752389cd7..000000000
--- a/community_server/src/Template/TransactionSignatures/add.ctp
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
- = $this->Form->create($transactionSignature) ?>
-
- = __('Add Transaction Signature') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionSignatures/edit.ctp b/community_server/src/Template/TransactionSignatures/edit.ctp
deleted file mode 100644
index 68143712b..000000000
--- a/community_server/src/Template/TransactionSignatures/edit.ctp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- = $this->Form->create($transactionSignature) ?>
-
- = __('Edit Transaction Signature') ?>
- Form->control('transaction_id', ['options' => $transactions]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionSignatures/index.ctp b/community_server/src/Template/TransactionSignatures/index.ctp
deleted file mode 100644
index 9b8bc2826..000000000
--- a/community_server/src/Template/TransactionSignatures/index.ctp
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
= __('Transaction Signatures') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('transaction_id') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($transactionSignature->id) ?>
- = $transactionSignature->has('transaction') ? $this->Html->link($transactionSignature->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSignature->transaction->id]) : '' ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $transactionSignature->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $transactionSignature->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $transactionSignature->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionSignature->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/TransactionSignatures/view.ctp b/community_server/src/Template/TransactionSignatures/view.ctp
deleted file mode 100644
index 681198125..000000000
--- a/community_server/src/Template/TransactionSignatures/view.ctp
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
= h($transactionSignature->id) ?>
-
-
- = __('Transaction') ?>
- = $transactionSignature->has('transaction') ? $this->Html->link($transactionSignature->transaction->id, ['controller' => 'Transactions', 'action' => 'view', $transactionSignature->transaction->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($transactionSignature->id) ?>
-
-
-
diff --git a/community_server/src/Template/TransactionTypes/add.ctp b/community_server/src/Template/TransactionTypes/add.ctp
deleted file mode 100644
index 97de82122..000000000
--- a/community_server/src/Template/TransactionTypes/add.ctp
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- = $this->Form->create($transactionType) ?>
-
- = __('Add Transaction Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionTypes/edit.ctp b/community_server/src/Template/TransactionTypes/edit.ctp
deleted file mode 100644
index 421184b55..000000000
--- a/community_server/src/Template/TransactionTypes/edit.ctp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- = $this->Form->create($transactionType) ?>
-
- = __('Edit Transaction Type') ?>
- Form->control('name');
- echo $this->Form->control('text');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/TransactionTypes/index.ctp b/community_server/src/Template/TransactionTypes/index.ctp
deleted file mode 100644
index b2248ae4b..000000000
--- a/community_server/src/Template/TransactionTypes/index.ctp
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
= __('Transaction Types') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('name') ?>
- = $this->Paginator->sort('text') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($transactionType->id) ?>
- = h($transactionType->name) ?>
- = h($transactionType->text) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $transactionType->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $transactionType->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $transactionType->id], ['confirm' => __('Are you sure you want to delete # {0}?', $transactionType->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/TransactionTypes/view.ctp b/community_server/src/Template/TransactionTypes/view.ctp
deleted file mode 100644
index 3da64f7e3..000000000
--- a/community_server/src/Template/TransactionTypes/view.ctp
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
= h($transactionType->name) ?>
-
-
- = __('Name') ?>
- = h($transactionType->name) ?>
-
-
- = __('Text') ?>
- = h($transactionType->text) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($transactionType->id) ?>
-
-
-
-
diff --git a/community_server/src/Template/Transactions/add.ctp b/community_server/src/Template/Transactions/add.ctp
deleted file mode 100644
index 012d82027..000000000
--- a/community_server/src/Template/Transactions/add.ctp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
- = $this->Form->create($transaction) ?>
-
- = __('Add Transaction') ?>
- Form->control('state_group_id', ['options' => $stateGroups]);
- echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]);
- echo $this->Form->control('memo', ['type' => 'textarea']);
- echo $this->Form->control('blockchain_type_id', ['options' => $blockchainTypes]);
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Transactions/decode.ctp b/community_server/src/Template/Transactions/decode.ctp
deleted file mode 100644
index dddde1cb8..000000000
--- a/community_server/src/Template/Transactions/decode.ctp
+++ /dev/null
@@ -1,36 +0,0 @@
-
- 0) : ?>
-
-
-
-
- = var_dump($error); ?>
-
-
-
-
-
-
-= $this->Form->create() ?>
-= $this->Form->control('base64', ['type'=> 'textarea', 'rows' => '5', 'cols' => 40]) ?>
-= $this->Form->submit(); ?>
-= $this->Form->end() ?>
-
-
-getTransactionBody();
-?>
-
- Type = $body->getTransactionTypeName() ?>
- Memo getMemo() ?>
-
-= var_dump($transaction); ?>
-
diff --git a/community_server/src/Template/Transactions/edit.ctp b/community_server/src/Template/Transactions/edit.ctp
deleted file mode 100644
index 4085a60c4..000000000
--- a/community_server/src/Template/Transactions/edit.ctp
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
- = $this->Form->create($transaction) ?>
-
- = __('Edit Transaction') ?>
- Form->control('state_group_id', ['options' => $stateGroups]);
- echo $this->Form->control('transaction_type_id', ['options' => $transactionTypes]);
- echo $this->Form->control('received');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Transactions/index.ctp b/community_server/src/Template/Transactions/index.ctp
deleted file mode 100644
index 9f97dc0c8..000000000
--- a/community_server/src/Template/Transactions/index.ctp
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
= $this->Number->format($transaction->id) ?>
-
= h($transaction->memo) ?>
-
= $transaction->has('transaction_type') ? $this->Html->link(__($transaction->transaction_type->name), ['controller' => 'TransactionTypes', 'action' => 'view', $transaction->transaction_type->id]) : '' ?>
-
= h($transaction->received) ?>
-
-
-
-
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/Transactions/manual_transaction.ctp b/community_server/src/Template/Transactions/manual_transaction.ctp
deleted file mode 100644
index 30bda1175..000000000
--- a/community_server/src/Template/Transactions/manual_transaction.ctp
+++ /dev/null
@@ -1,63 +0,0 @@
-loadHelper('Form', [
- 'templates' => 'horizontal_form',
-]);
-$now = new \DateTime;
-?>
- 0) : ?>
-
-
-
-
- = var_dump($error); ?>
-
-
-
-
-
-
-
-
-
-
-
- $value) : ?>
- = $name ?>: = $value ?>
-
-
-
-
\ No newline at end of file
diff --git a/community_server/src/Template/Transactions/send_to_node.ctp b/community_server/src/Template/Transactions/send_to_node.ctp
deleted file mode 100644
index 0bb652feb..000000000
--- a/community_server/src/Template/Transactions/send_to_node.ctp
+++ /dev/null
@@ -1,106 +0,0 @@
-assign('title', __('Transaktionen an Gradido-Node senden'));
-?>
-
-
-
-
-Bisher keine Transaktionen eingereicht
-
-Letzte eingereichte Transaktion = gTransactionIds[0] - 1 ?>
-
-
-
- $id) : ?>
-
- = $id ?> :
-
-
- Wird verarbeitet
-
- in Warteschlange
-
-
-
-
-
-= $this->Html->script(['core']); ?>
-
diff --git a/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp b/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp
deleted file mode 100644
index 8ac1ecb2d..000000000
--- a/community_server/src/Template/Transactions/synchronize_with_state_user_transactions.ctp
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
Synchronize state_user_transactions with transactions
-
transactions count: = $count1 ?>
-
state_user_transaction count: = $count2 ?>
-
Missing count: = count($missing_transactions); ?>
-
First 10 Missing ids:
-
$id) {
- if($i > 10) break;
- if($i > 0) echo ', ';
- echo $id['id'];
-} ?>
-
-
-
Synchronize errors:
-
- $result) :
- if(false != $result) {
- $succeed++;
- continue;
- }
- ?>
- Error saving entity: = json_encode($entities[$i]) ?> with error: = json_encode($entities[$i]->getErrors()) ?>
-
-
- Succeed: = $succeed ?>
-
-
-
- = $this->Form->create() ?>
- = $this->Form->button(__('Synchronize')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Transactions/view.ctp b/community_server/src/Template/Transactions/view.ctp
deleted file mode 100644
index e15b9dbe3..000000000
--- a/community_server/src/Template/Transactions/view.ctp
+++ /dev/null
@@ -1,259 +0,0 @@
-
-
-
-
= h($transaction->id) ?>
-
-
- = __('State Group') ?>
- = $transaction->has('state_group') ? $this->Html->link($transaction->state_group->name, ['controller' => 'StateGroups', 'action' => 'view', $transaction->state_group->id]) : '' ?>
-
-
- = __('Transaction Type') ?>
- = $transaction->has('transaction_type') ? $this->Html->link($transaction->transaction_type->name, ['controller' => 'TransactionTypes', 'action' => 'view', $transaction->transaction_type->id]) : '' ?>
-
-
- = __('Id') ?>
- = $this->Number->format($transaction->id) ?>
-
-
- = __('Received') ?>
- = h($transaction->received) ?>
-
-
-
-
-
-
-
-
-
-
diff --git a/community_server/src/Template/Users/add.ctp b/community_server/src/Template/Users/add.ctp
deleted file mode 100644
index 6f67f02e6..000000000
--- a/community_server/src/Template/Users/add.ctp
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- = $this->Form->create($user) ?>
-
- = __('Add User') ?>
- Form->control('email');
- echo $this->Form->control('first_name');
- echo $this->Form->control('last_name');
- echo $this->Form->control('password');
- echo $this->Form->control('email_checked');
- echo $this->Form->control('language');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Users/edit.ctp b/community_server/src/Template/Users/edit.ctp
deleted file mode 100644
index 681eacd36..000000000
--- a/community_server/src/Template/Users/edit.ctp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- = $this->Form->create($user) ?>
-
- = __('Edit User') ?>
- Form->control('email');
- echo $this->Form->control('first_name');
- echo $this->Form->control('last_name');
- echo $this->Form->control('password');
- echo $this->Form->control('email_checked');
- echo $this->Form->control('language');
- ?>
-
- = $this->Form->button(__('Submit')) ?>
- = $this->Form->end() ?>
-
diff --git a/community_server/src/Template/Users/index.ctp b/community_server/src/Template/Users/index.ctp
deleted file mode 100644
index 14566ea26..000000000
--- a/community_server/src/Template/Users/index.ctp
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
= __('Users') ?>
-
-
-
- = $this->Paginator->sort('id') ?>
- = $this->Paginator->sort('email') ?>
- = $this->Paginator->sort('first_name') ?>
- = $this->Paginator->sort('last_name') ?>
- = $this->Paginator->sort('password') ?>
- = $this->Paginator->sort('created') ?>
- = $this->Paginator->sort('email_checked') ?>
- = $this->Paginator->sort('language') ?>
- = __('Actions') ?>
-
-
-
-
-
- = $this->Number->format($user->id) ?>
- = h($user->email) ?>
- = h($user->first_name) ?>
- = h($user->last_name) ?>
- = $this->Number->format($user->password) ?>
- = h($user->created) ?>
- = h($user->email_checked) ?>
- = h($user->language) ?>
-
- = $this->Html->link(__('View'), ['action' => 'view', $user->id]) ?>
- = $this->Html->link(__('Edit'), ['action' => 'edit', $user->id]) ?>
- = $this->Form->postLink(__('Delete'), ['action' => 'delete', $user->id], ['confirm' => __('Are you sure you want to delete # {0}?', $user->id)]) ?>
-
-
-
-
-
-
-
- = $this->Paginator->first('<< ' . __('first')) ?>
- = $this->Paginator->prev('< ' . __('previous')) ?>
- = $this->Paginator->numbers() ?>
- = $this->Paginator->next(__('next') . ' >') ?>
- = $this->Paginator->last(__('last') . ' >>') ?>
-
-
= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?>
-
-
diff --git a/community_server/src/Template/Users/statistics.ctp b/community_server/src/Template/Users/statistics.ctp
deleted file mode 100644
index 76532faa8..000000000
--- a/community_server/src/Template/Users/statistics.ctp
+++ /dev/null
@@ -1,98 +0,0 @@
-assign('title', __('Benutzer Statistiken'));
-
-//mdi mdi-account-multiple-plus
-//$newUserPercent = (1 - (b / a)) * 100
-$newUserPercent = 0;
-$percentColor = 'info';
-if($users->count() > 0 && $newUsersLastMonth->count()) {
- $newUserPercent = round((1 - ($users->count() / $newUsersLastMonth->count())) * 100.0, 2);
- if($newUserPercent > 0 ) {
- $percentColor = 'success';
- } else if($newUserPercent <= 0) {
- $percentColor = 'alert';
- }
-}
-
-$userColor = 'info';
-if($users->count() > 0) {
- if($users->count() > 0 ) {
- $userColor = 'success';
- } else if($users->count() <= 0) {
- $userColor = 'alert';
- }
-}
-?>
-
-
-
- people
-
-
= $users->count()?>
-
= __('Alle Anmeldungen'); ?>
-
-
-
-
-
-
- group_add
-
-
= $newUsersThisMonth->count() ?>
-
= __('Anmeldungen diesen Monat'); ?>
-
-
- arrow_drop_down
- 0) : ?>
- arrow_drop_up
-
- = $newUserPercent ?> %
-
-
-
-
-
= __('Letzte Anmeldungen'); ?>
-
-
-
-
-
-
-
-
-
= $user->first_name . ' ' . $user->last_name ?>
-
= $user->email ?>
-
= $user->created ?>
-
-
- toArray()); ?>
-
-
-
-
= __('Anmeldungen detailliert'); ?>
-
-
-
-
-
-
- $yearEntrys) : ?>
- $monthEntrys): ?>
-
-
= $year ?>
-
= $month ?>
-
= $monthEntrys['count'] ?>
-
-
-
-
-
-= $this->Html->script(['core', 'vendor.addons']); ?>
-= $this->Html->script('userSearch') ?>
\ No newline at end of file
diff --git a/community_server/src/Template/Users/view.ctp b/community_server/src/Template/Users/view.ctp
deleted file mode 100644
index d3a1e67cd..000000000
--- a/community_server/src/Template/Users/view.ctp
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
= h($user->id) ?>
-
-
- = __('Email') ?>
- = h($user->email) ?>
-
-
- = __('First Name') ?>
- = h($user->first_name) ?>
-
-
- = __('Last Name') ?>
- = h($user->last_name) ?>
-
-
- = __('Language') ?>
- = h($user->language) ?>
-
-
- = __('Id') ?>
- = $this->Number->format($user->id) ?>
-
-
- = __('Password') ?>
- = $this->Number->format($user->password) ?>
-
-
- = __('Created') ?>
- = h($user->created) ?>
-
-
- = __('Email Checked') ?>
- = $user->email_checked ? __('Yes') : __('No'); ?>
-
-
-
diff --git a/community_server/src/View/AjaxView.php b/community_server/src/View/AjaxView.php
deleted file mode 100644
index 3cb786926..000000000
--- a/community_server/src/View/AjaxView.php
+++ /dev/null
@@ -1,49 +0,0 @@
-response = $this->response->withType('ajax');
- }
-}
diff --git a/community_server/src/View/AppView.php b/community_server/src/View/AppView.php
deleted file mode 100644
index 242ab6bde..000000000
--- a/community_server/src/View/AppView.php
+++ /dev/null
@@ -1,40 +0,0 @@
-loadHelper('Html');`
- *
- * @return void
- */
- public function initialize()
- {
- }
-}
diff --git a/community_server/src/View/Cell/empty b/community_server/src/View/Cell/empty
deleted file mode 100644
index e69de29bb..000000000
diff --git a/community_server/src/View/Helper/empty b/community_server/src/View/Helper/empty
deleted file mode 100644
index e69de29bb..000000000
diff --git a/community_server/src/protobuf b/community_server/src/protobuf
deleted file mode 160000
index 77dee5685..000000000
--- a/community_server/src/protobuf
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 77dee5685ebba543ea1cd2321580ad56c92f5775
diff --git a/community_server/testJson.sh b/community_server/testJson.sh
deleted file mode 100755
index b66cf8d18..000000000
--- a/community_server/testJson.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-#sudo -u www-data ./vendor/bin/phpunit --filter testIndex tests/TestCase/Controller/TransactionJsonRequestHandlerControllerTest
-
-sudo -u www-data ./vendor/bin/phpunit --testdox tests/TestCase/Controller/JsonRequestHandlerControllerTest
-
diff --git a/community_server/tests/Fixture/AddressTypesFixture.php b/community_server/tests/Fixture/AddressTypesFixture.php
deleted file mode 100644
index 1e06a0ec9..000000000
--- a/community_server/tests/Fixture/AddressTypesFixture.php
+++ /dev/null
@@ -1,46 +0,0 @@
- ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'name' => ['type' => 'string', 'length' => 45, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'text' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'name' => 'Lorem ipsum dolor sit amet',
- 'text' => 'Lorem ipsum dolor sit amet',
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/AdminErrorsFixture.php b/community_server/tests/Fixture/AdminErrorsFixture.php
deleted file mode 100644
index 0fbc3a067..000000000
--- a/community_server/tests/Fixture/AdminErrorsFixture.php
+++ /dev/null
@@ -1,56 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'controller' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'action' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'state' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'msg' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'details' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_general_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'state_user_id' => 1,
- 'controller' => 'Lorem ipsum dolor sit amet',
- 'action' => 'Lorem ipsum dolor sit amet',
- 'state' => 'Lorem ipsum dolor sit amet',
- 'msg' => 'Lorem ipsum dolor sit amet',
- 'details' => 'Lorem ipsum dolor sit amet',
- 'created' => '2019-12-16 15:08:19'
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/BaseTestFixture.php b/community_server/tests/Fixture/BaseTestFixture.php
deleted file mode 100644
index 1f63aa55e..000000000
--- a/community_server/tests/Fixture/BaseTestFixture.php
+++ /dev/null
@@ -1,36 +0,0 @@
- '$1'
- protected function sqlEntrysToRecords($sql_entries, $fields) {
- $field_array_keys = array_keys($fields);
- $records = [];
- foreach($sql_entries as $sql_entry) {
- $record = [];
- foreach($sql_entry as $i => $value) {
- $field = $field_array_keys[$i];
- if($fields[$field]['type'] == 'binary') {
- if(is_string($value)) {
- $record[$field] = hex2bin($value);
- }
- } else {
- $record[$field] = $value;
- }
- }
- $records[] = $record;
- }
- return $records;
- }
-}
\ No newline at end of file
diff --git a/community_server/tests/Fixture/CommunityProfilesFixture.php b/community_server/tests/Fixture/CommunityProfilesFixture.php
deleted file mode 100644
index 0fa7ed764..000000000
--- a/community_server/tests/Fixture/CommunityProfilesFixture.php
+++ /dev/null
@@ -1,51 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'profile_img' => ['type' => 'binary', 'length' => 4294967295, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
- 'profile_desc' => ['type' => 'string', 'length' => 2000, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_indexes' => [
- 'state_user_id' => ['type' => 'index', 'columns' => ['state_user_id'], 'length' => []],
- ],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []]
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_general_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'state_user_id' => 1,
- 'profile_img' => 'Lorem ipsum dolor sit amet',
- 'profile_desc' => 'Lorem ipsum dolor sit amet',
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/ElopageBuysFixture.php b/community_server/tests/Fixture/ElopageBuysFixture.php
deleted file mode 100644
index 20be0f4e3..000000000
--- a/community_server/tests/Fixture/ElopageBuysFixture.php
+++ /dev/null
@@ -1,64 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'elopage_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'affiliate_program_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'publisher_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'order_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'product_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'product_price' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'payer_email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'publisher_email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'payed' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'success_date' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'event' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'elopage_user_id' => 1,
- 'affiliate_program_id' => 1,
- 'publisher_id' => 1,
- 'order_id' => 1,
- 'product_id' => 1,
- 'product_price' => 1,
- 'payer_email' => 'Lorem ipsum dolor sit amet',
- 'publisher_email' => 'Lorem ipsum dolor sit amet',
- 'payed' => 1,
- 'success_date' => '2020-02-13 09:49:46',
- 'event' => 'Lorem ipsum dolor sit amet',
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/OperatorTypesFixture.php b/community_server/tests/Fixture/OperatorTypesFixture.php
deleted file mode 100644
index dfc589034..000000000
--- a/community_server/tests/Fixture/OperatorTypesFixture.php
+++ /dev/null
@@ -1,46 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'name' => ['type' => 'string', 'length' => 25, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'text' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'name' => 'Lorem ipsum dolor sit a',
- 'text' => 'Lorem ipsum dolor sit amet'
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/OperatorsFixture.php b/community_server/tests/Fixture/OperatorsFixture.php
deleted file mode 100644
index 2cb852efc..000000000
--- a/community_server/tests/Fixture/OperatorsFixture.php
+++ /dev/null
@@ -1,49 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'username' => ['type' => 'string', 'length' => 128, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'operator_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'data_base64' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- 'username' => ['type' => 'unique', 'columns' => ['username'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'username' => 'Lorem ipsum dolor sit amet',
- 'operator_type_id' => 1,
- 'data_base64' => 'Lorem ipsum dolor sit amet'
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/RolesFixture.php b/community_server/tests/Fixture/RolesFixture.php
deleted file mode 100644
index db2c7640f..000000000
--- a/community_server/tests/Fixture/RolesFixture.php
+++ /dev/null
@@ -1,45 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'title' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- 'roles_id_IDX' => ['type' => 'unique', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'title' => 'Lorem ipsum dolor sit amet',
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/ServerUsersFixture.php b/community_server/tests/Fixture/ServerUsersFixture.php
deleted file mode 100644
index 3aeedab12..000000000
--- a/community_server/tests/Fixture/ServerUsersFixture.php
+++ /dev/null
@@ -1,58 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'username' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'password' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'email' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'role' => ['type' => 'string', 'length' => 20, 'null' => false, 'default' => 'admin', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'activated' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null],
- 'last_login' => ['type' => 'datetime', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
- 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'username' => 'Lorem ipsum dolor sit amet',
- 'password' => 'Lorem ipsum dolor sit amet',
- 'email' => 'Lorem ipsum dolor sit amet',
- 'role' => 'Lorem ipsum dolor ',
- 'activated' => 1,
- 'last_login' => '2019-09-13 10:30:09',
- 'created' => '2019-09-13 10:30:09',
- 'modified' => '2019-09-13 10:30:09'
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateBalancesFixture.php b/community_server/tests/Fixture/StateBalancesFixture.php
deleted file mode 100644
index 015366c80..000000000
--- a/community_server/tests/Fixture/StateBalancesFixture.php
+++ /dev/null
@@ -1,46 +0,0 @@
- ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'modified' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'record_date' => ['type' => 'datetime', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
- 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $sql = [
- [4, 4, '2021-05-27 17:47:50', '2021-05-27 17:47:50', 28808497],
- [5, 1, '2021-05-27 17:47:51', '2021-05-27 17:47:50', 9823963]
- ];
- $this->records = $this->sqlEntrysToRecords($sql, $this->fields);
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateCreatedFixture.php b/community_server/tests/Fixture/StateCreatedFixture.php
deleted file mode 100644
index 2f1abd155..000000000
--- a/community_server/tests/Fixture/StateCreatedFixture.php
+++ /dev/null
@@ -1,63 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'month' => ['type' => 'tinyinteger', 'length' => 4, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'year' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'short_ident_hash' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- '_indexes' => [
- 'short_ident_hash' => ['type' => 'index', 'columns' => ['short_ident_hash'], 'length' => []],
- ],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'transaction_id' => 1,
- 'month' => 1,
- 'year' => 1,
- 'state_user_id' => 1,
- 'created' => '2019-09-12 11:14:51',
- 'short_ident_hash' => 1
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateErrorsFixture.php b/community_server/tests/Fixture/StateErrorsFixture.php
deleted file mode 100644
index 6f0d95e26..000000000
--- a/community_server/tests/Fixture/StateErrorsFixture.php
+++ /dev/null
@@ -1,50 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'state_user_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'message_json' => ['type' => 'text', 'length' => null, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_general_ci', 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_general_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'state_user_id' => 1,
- 'transaction_type_id' => 1,
- 'created' => '2019-11-07 13:13:12',
- 'message_json' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.'
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateGroupAddressesFixture.php b/community_server/tests/Fixture/StateGroupAddressesFixture.php
deleted file mode 100644
index 2ae5581c8..000000000
--- a/community_server/tests/Fixture/StateGroupAddressesFixture.php
+++ /dev/null
@@ -1,49 +0,0 @@
- ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'address_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- 'public_key' => ['type' => 'unique', 'columns' => ['public_key'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'group_id' => 1,
- 'public_key' => 'Lorem ipsum dolor sit amet',
- 'address_type_id' => 1,
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateGroupRelationshipsFixture.php b/community_server/tests/Fixture/StateGroupRelationshipsFixture.php
deleted file mode 100644
index e50d76f5d..000000000
--- a/community_server/tests/Fixture/StateGroupRelationshipsFixture.php
+++ /dev/null
@@ -1,48 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'state_group1_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'state_group2_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'state_relationship_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'state_group1_id' => 1,
- 'state_group2_id' => 1,
- 'state_relationship_id' => 1
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateGroupsFixture.php b/community_server/tests/Fixture/StateGroupsFixture.php
deleted file mode 100644
index 57cde2350..000000000
--- a/community_server/tests/Fixture/StateGroupsFixture.php
+++ /dev/null
@@ -1,50 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'index_id' => ['type' => 'binary', 'length' => 64, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'name' => ['type' => 'string', 'length' => 50, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'root_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'user_count' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'index_id' => 'Lorem ipsum dolor sit amet',
- 'name' => 'Lorem ipsum dolor sit amet',
- 'root_public_key' => 'Lorem ipsum dolor sit amet',
- 'user_count' => 1
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateRelationshipTypesFixture.php b/community_server/tests/Fixture/StateRelationshipTypesFixture.php
deleted file mode 100644
index c461e0ce3..000000000
--- a/community_server/tests/Fixture/StateRelationshipTypesFixture.php
+++ /dev/null
@@ -1,46 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'name' => ['type' => 'string', 'length' => 25, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'text' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'name' => 'Lorem ipsum dolor sit a',
- 'text' => 'Lorem ipsum dolor sit amet'
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateUserTransactionsFixture.php b/community_server/tests/Fixture/StateUserTransactionsFixture.php
deleted file mode 100644
index 605e10e5b..000000000
--- a/community_server/tests/Fixture/StateUserTransactionsFixture.php
+++ /dev/null
@@ -1,59 +0,0 @@
- ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'balance' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'balance_date' => ['type' => 'timestamp', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $sql = [
- [1, 4, 1, 1, 0, '2021-04-09 00:00:00'],
- [2, 1, 2, 1, 0, '2021-04-12 00:00:00'],
- [5, 1, 3, 2, 0, '2021-04-12 00:00:00'],
- [6, 4, 3, 2, 0, '2021-04-12 00:00:00'],
- [7, 1, 4, 2, 0, '2021-04-14 00:00:00'],
- [8, 4, 4, 2, 0, '2021-04-14 00:00:00'],
- [23, 1, 5, 2, 0, '2021-04-14 09:01:07'],
- [24, 4, 5, 2, 0, '2021-04-14 09:01:07'],
- [25, 4, 7, 2, 0, '2021-04-14 09:02:28'],
- [26, 1, 7, 2, 0, '2021-04-14 09:02:28'],
- [27, 4, 8, 2, 0, '2021-04-14 09:28:46'],
- [28, 1, 8, 2, 0, '2021-04-14 09:28:46'],
- [29, 4, 9, 2, 0, '2021-04-14 09:31:28'],
- [30, 1, 9, 2, 0, '2021-04-14 09:31:28']
- ];
- $this->records = $this->sqlEntrysToRecords($sql, $this->fields);
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/StateUsersFixture.php b/community_server/tests/Fixture/StateUsersFixture.php
deleted file mode 100644
index a9b033bf7..000000000
--- a/community_server/tests/Fixture/StateUsersFixture.php
+++ /dev/null
@@ -1,54 +0,0 @@
- ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'index_id' => ['type' => 'smallinteger', 'length' => 6, 'unsigned' => false, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null],
- 'group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'email' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'first_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'last_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'username' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'disabled' => ['type' => 'tinyinteger', 'length' => 4, 'unsigned' => false, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- 'public_key' => ['type' => 'unique', 'columns' => ['public_key'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
-
-
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $sql_entrys = [
- [1, 0, 0, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 'test1.gmail.de', 'Max', 'Mustermann', NULL, 0],
- [3, 0, 0, '131c7f68dd94b2be4c913400ff7ff4cdc03ac2bda99c2d29edcacb3b065c67e6', 'test2.gmail.com', 'Ines', 'Mustermann', NULL, 0],
- [4, 0, 0, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 'test3.yahoo.com', 'Samuel', 'Schmied', NULL, 0]
- ];
- $this->records = $this->sqlEntrysToRecords($sql_entrys, $this->fields);
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/TransactionCreationsFixture.php b/community_server/tests/Fixture/TransactionCreationsFixture.php
deleted file mode 100644
index 4221e8729..000000000
--- a/community_server/tests/Fixture/TransactionCreationsFixture.php
+++ /dev/null
@@ -1,44 +0,0 @@
- ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'target_date' => ['type' => 'timestamp', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $sql = [
- [2, 1, 4, 10000000, '2021-01-01 00:00:00'],
- [3, 2, 1, 10000000, '2021-01-01 00:00:00']
- ];
- $this->records = $this->sqlEntrysToRecords($sql, $this->fields);
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php b/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php
deleted file mode 100644
index 7b659386c..000000000
--- a/community_server/tests/Fixture/TransactionGroupAddaddressFixture.php
+++ /dev/null
@@ -1,54 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'address_type_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'transaction_id' => 1,
- 'address_type_id' => 1,
- 'public_key' => 'Lorem ipsum dolor sit amet'
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php b/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php
deleted file mode 100644
index edb745441..000000000
--- a/community_server/tests/Fixture/TransactionGroupAllowtradesFixture.php
+++ /dev/null
@@ -1,48 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'group_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'allow' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'transaction_id' => 1,
- 'group_id' => 1,
- 'allow' => 1
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/TransactionGroupCreatesFixture.php b/community_server/tests/Fixture/TransactionGroupCreatesFixture.php
deleted file mode 100644
index 73db1c751..000000000
--- a/community_server/tests/Fixture/TransactionGroupCreatesFixture.php
+++ /dev/null
@@ -1,50 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'group_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'state_group_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'name' => ['type' => 'string', 'length' => 64, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'transaction_id' => 1,
- 'group_public_key' => 'Lorem ipsum dolor sit amet',
- 'state_group_id' => 1,
- 'name' => 'Lorem ipsum dolor sit amet'
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/TransactionSendCoinsFixture.php b/community_server/tests/Fixture/TransactionSendCoinsFixture.php
deleted file mode 100644
index c186ccf8e..000000000
--- a/community_server/tests/Fixture/TransactionSendCoinsFixture.php
+++ /dev/null
@@ -1,54 +0,0 @@
- ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'transaction_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'sender_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'state_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'receiver_public_key' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'receiver_user_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => '0', 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'amount' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'sender_final_balance' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $sql = [
- [2, 3, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 1000000, 6254699],
- [3, 4, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 100000, 7027197],
- [11, 5, '0000000000000000000000000000000000000000000000000000000000000000', 1, 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2', 4, 100000, 6922113],
- [12, 7, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 9212951],
- [13, 8, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 9112627],
- [14, 9, '0000000000000000000000000000000000000000000000000000000000000000', 4, 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f', 1, 100000, 8912594]
- ];
-
- $this->records = $this->sqlEntrysToRecords($sql, $this->fields);
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/TransactionSignaturesFixture.php b/community_server/tests/Fixture/TransactionSignaturesFixture.php
deleted file mode 100644
index 9a5bbecee..000000000
--- a/community_server/tests/Fixture/TransactionSignaturesFixture.php
+++ /dev/null
@@ -1,51 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'signature' => ['type' => 'binary', 'length' => 64, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- 'pubkey' => ['type' => 'binary', 'length' => 32, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $sql = [
- [1, 1, '1c5357f9438f700a5378abadd0dbd74d90e335c6b9691bb9e126520813f3218573b19226382efb89aa8444a9ca98c2e8933463335baac37baf2f4eecd990600a', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'],
- [2, 2, '5215376ae7fb989993e3466961636519d4ade77b3bde066149ade028ad54a1a88ca8a206fcf09f52839ae0ed37b99df08ec9af12f3f37197979a206489e3ff0f', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'],
- [3, 3, 'c70f124feaaea02194d22a5f597963ed3e430343122a0952877854766fe37a709f92b39510de2aae494ef11abe743cd59f08f971b1e0e36f4c333990453d8b0d', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'],
- [4, 4, 'a65b39e51ab6191c51d5629bbcefd30f85f801efbb14e1c635c519e97abe217a248820fa1fc6aef56227c9d888c1919bc92471d5d7ae3522c9c50fba9f0d8402', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'],
- [5, 5, 'a65b39e51ab6191c51d5629bbcefd30f85f801efbb14e1c635c519e97abe217a248820fa1fc6aef56227c9d888c1919bc92471d5d7ae3522c9c50fba9f0d8402', 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'],
- [6, 7, 'c233726674bff9bfb8ccb98bf358c6bc701825d971ece915d3c3a3de98886d1d13ee2f773cd9fc4ccbe543ac17be0d780ebead23a0dbf4ec814f7bae2efb9c0e', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'],
- [7, 8, '83ab780535883ec53ee76d0f68db0e1596418c9e100c806a4d4655d4dedf589d54a6319a2795dabab301e212b52f0dafb2725b7583447f19e47cb417d188a107', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'],
- [8, 9, '83ab780535883ec53ee76d0f68db0e1596418c9e100c806a4d4655d4dedf589d54a6319a2795dabab301e212b52f0dafb2725b7583447f19e47cb417d188a107', 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2']
- ];
- $this->records = $this->sqlEntrysToRecords($sql, $this->fields);
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/TransactionTypesFixture.php b/community_server/tests/Fixture/TransactionTypesFixture.php
deleted file mode 100644
index 48e00e0ec..000000000
--- a/community_server/tests/Fixture/TransactionTypesFixture.php
+++ /dev/null
@@ -1,51 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'name' => ['type' => 'string', 'length' => 24, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'text' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_bin'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'name' => 'creation',
- 'text' => 'Aktives oder Bedingsungsloses Grundeinkommen'
- ],
- [
- 'id' => 2,
- 'name' => 'transfer',
- 'text' => 'Einfache Überweisung'
- ]
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/TransactionsFixture.php b/community_server/tests/Fixture/TransactionsFixture.php
deleted file mode 100644
index 8c38f0657..000000000
--- a/community_server/tests/Fixture/TransactionsFixture.php
+++ /dev/null
@@ -1,55 +0,0 @@
- ['type' => 'biginteger', 'length' => 20, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'state_group_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'transaction_type_id' => ['type' => 'integer', 'length' => 10, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'tx_hash' => ['type' => 'binary', 'length' => 48, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
- 'memo' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8mb4_unicode_ci', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'received' => ['type' => 'timestamp', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null],
- 'blockchain_type_id' => ['type' => 'biginteger', 'length' => 20, 'unsigned' => true, 'null' => false, 'default' => '1', 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8mb4_unicode_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $sql = [
- [1, NULL, 1, '15f242a7bb92a7db82678e0baf5ec1734c038ac0dc7b19e6d1ebbcf92a6cf3ad00000000000000000000000000000000', 'AGE Januar 2021', '2021-04-09 00:00:00', 1],
- [2, NULL, 1, 'f932eca7686802d1697773fea713a3c6a3e3dace8b5aa552dd8503d50ce349f500000000000000000000000000000000', 'AGE Januar 2021', '2021-04-12 00:00:00', 1],
- [3, NULL, 2, '4e2235f208edaf5cbb285955732022a625cf1e100eb629c56896d2fbfb8b34e800000000000000000000000000000000', 'test', '2021-04-12 00:00:00', 1],
- [4, NULL, 2, 'fc6e69696beb7c56ad7c511fc3999f954411427bec810184b70c092911deae1900000000000000000000000000000000', 'test time', '2021-04-14 00:00:00', 1],
- [5, NULL, 2, 'a7149ebc0d6cd8c061906dafe05e13689b51642a41100d0ec7bb6cd2dcafdc1800000000000000000000000000000000', 'test time', '2021-04-14 09:01:07', 1],
- [6, NULL, 9, '', '', '2021-04-14 09:02:00', 1],
- [7, NULL, 2, '2e3c3ab3e42c06f2ecb12f61c970712467d8ad9ddfa16fa58dd76492e5924b7d00000000000000000000000000000000', 'test time 3', '2021-04-14 09:02:28', 1],
- [8, NULL, 2, 'c2c6354d77ff371daeee25fce9c947748b53d3d6b8398a92bd681923cfd2057100000000000000000000000000000000', 'test login crash', '2021-04-14 09:28:46', 1],
- [9, NULL, 2, '5a8cbf1aaac06b00b2951ff39983cb2ca9a1e6710d72c8e5067278dc679a823100000000000000000000000000000000', 'test login crash', '2021-04-14 09:31:28', 1]
- ];
- $this->records = $this->sqlEntrysToRecords($sql, $this->fields);
- parent::init();
- }
-}
diff --git a/community_server/tests/Fixture/UsersFixture.php b/community_server/tests/Fixture/UsersFixture.php
deleted file mode 100644
index fc1a9e620..000000000
--- a/community_server/tests/Fixture/UsersFixture.php
+++ /dev/null
@@ -1,61 +0,0 @@
- ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => false, 'default' => null, 'comment' => '', 'autoIncrement' => true, 'precision' => null],
- 'email' => ['type' => 'string', 'length' => 255, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'first_name' => ['type' => 'string', 'length' => 150, 'null' => false, 'default' => null, 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'last_name' => ['type' => 'string', 'length' => 255, 'null' => true, 'default' => '', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- 'password' => ['type' => 'biginteger', 'length' => 25, 'unsigned' => true, 'null' => false, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
- 'pubkey' => ['type' => 'binary', 'length' => 32, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
- 'privkey' => ['type' => 'binary', 'length' => 80, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
- 'created' => ['type' => 'datetime', 'length' => null, 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '', 'precision' => null],
- 'email_checked' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => '0', 'comment' => '', 'precision' => null],
- 'language' => ['type' => 'string', 'length' => 4, 'null' => false, 'default' => 'de', 'collate' => 'utf8_bin', 'comment' => '', 'precision' => null, 'fixed' => null],
- '_constraints' => [
- 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
- 'email' => ['type' => 'unique', 'columns' => ['email'], 'length' => []],
- ],
- '_options' => [
- 'engine' => 'InnoDB',
- 'collation' => 'utf8_general_ci'
- ],
- ];
- // @codingStandardsIgnoreEnd
- /**
- * Init method
- *
- * @return void
- */
- public function init()
- {
- $this->records = [
- [
- 'id' => 1,
- 'email' => 'Lorem ipsum dolor sit amet',
- 'first_name' => 'Lorem ipsum dolor sit amet',
- 'last_name' => 'Lorem ipsum dolor sit amet',
- 'password' => 1,
- 'pubkey' => 'Lorem ipsum dolor sit amet',
- 'privkey' => 'Lorem ipsum dolor sit amet',
- 'created' => '2020-02-13 10:54:19',
- 'email_checked' => 1,
- 'language' => 'Lo',
- ],
- ];
- parent::init();
- }
-}
diff --git a/community_server/tests/TestCase/ApplicationTest.php b/community_server/tests/TestCase/ApplicationTest.php
deleted file mode 100644
index 1d183729d..000000000
--- a/community_server/tests/TestCase/ApplicationTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-bootstrap();
- $plugins = $app->getPlugins();
-
- $this->assertCount(2, $plugins);
- $this->assertSame('Bake', $plugins->get('Bake')->getName());
- $this->assertSame('DebugKit', $plugins->get('DebugKit')->getName());
- }
-
- /**
- * testBootstrapPluginWitoutHalt
- *
- * @return void
- */
- public function testBootstrapPluginWithoutHalt()
- {
- $this->expectException(InvalidArgumentException::class);
-
- $app = $this->getMockBuilder(Application::class)
- ->setConstructorArgs([dirname(dirname(__DIR__)) . '/config'])
- ->setMethods(['addPlugin'])
- ->getMock();
-
- $app->method('addPlugin')
- ->will($this->throwException(new InvalidArgumentException('test exception.')));
-
- $app->bootstrap();
- }
-
- /**
- * testMiddleware
- *
- * @return void
- */
- public function testMiddleware()
- {
- $app = new Application(dirname(dirname(__DIR__)) . '/config');
- $middleware = new MiddlewareQueue();
-
- $middleware = $app->middleware($middleware);
-
- $this->assertInstanceOf(ErrorHandlerMiddleware::class, $middleware->get(0));
- $this->assertInstanceOf(AssetMiddleware::class, $middleware->get(1));
- $this->assertInstanceOf(RoutingMiddleware::class, $middleware->get(2));
- }
-}
diff --git a/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php b/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php
deleted file mode 100644
index 835fc8d08..000000000
--- a/community_server/tests/TestCase/Controller/AddressTypesControllerTest.php
+++ /dev/null
@@ -1,77 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php b/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php
deleted file mode 100644
index a9044b4ae..000000000
--- a/community_server/tests/TestCase/Controller/AdminErrorsControllerTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old
deleted file mode 100644
index 321ed5ac1..000000000
--- a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php.old
+++ /dev/null
@@ -1,345 +0,0 @@
-session([
- 'session_id' => $session_id,
- 'Transaction' => ['pending' => 0, 'executing' => 0],
- 'StateUser' => [
- 'id' => 1,
- 'email_checked' => 1,
- 'public_hex' => 'f7f4a49a4ac10379f8b9ddcb731c4d9ec495e6edd16075f52672cd25e3179f0f'
- ]
- ]);
-
- $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id);
- $this->assertEquals('success', $response->state);
- $this->assertEquals(9099652, $response->balance);
- $this->assertLessThan(9099652, $response->decay);
-
- }
-
- public function testGetBalance2()
- {
- $session_id = rand();
- $this->session([
- 'session_id' => $session_id,
- 'Transaction' => ['pending' => 0, 'executing' => 0],
- 'StateUser' => [
- 'id' => 3,
- 'email_checked' => 1,
- 'public_hex' => '131c7f68dd94b2be4c913400ff7ff4cdc03ac2bda99c2d29edcacb3b065c67e6'
- ]
- ]);
-
- $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id);
- $this->assertEquals('success', $response->state);
- $this->assertEquals(0, $response->balance);
- }
- public function testGetBalance3()
- {
- $session_id = rand();
- $this->session([
- 'session_id' => $session_id,
- 'Transaction' => ['pending' => 0, 'executing' => 0],
- 'StateUser' => [
- 'id' => 4,
- 'email_checked' => 1,
- 'public_hex' => 'e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2'
- ]
- ]);
-
- $response = $this->getAndParseWithoutCompare('/api/get-balance/' . $session_id);
- $this->assertEquals('success', $response->state);
- $this->assertEquals(10899568, $response->balance);
- $this->assertLessThan(10899568, $response->decay);
- }
-
- public function testGetBalanceInvalidSession()
- {
- $session_id = rand();
- $this->session([
- 'session_id' => $session_id,
- 'Transaction' => ['pending' => 0, 'executing' => 0],
- 'StateUser' => [
- 'email_checked' => 1,
- 'public_hex' => '8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d'
- ]
- ]);
-
- $this->getAndParse('/api/get-balance/' . 1211,
- ['state' => 'not found', 'msg' => 'invalid session',
- 'details' => ['msg' => 'session not found', 'state' => 'not found']
- ]
- );
- }
-
- public function testGetBalanceInvalidSessionId()
- {
- $session_id = rand();
- $this->session([
- 'session_id' => $session_id,
- 'Transaction' => ['pending' => 0, 'executing' => 0],
- 'StateUser' => [
- 'email_checked' => 1,
- 'public_hex' => '8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d'
- ]
- ]);
-
- $this->getAndParse('/api/get-balance/' ,
- ['state' => 'not found', 'msg' => 'invalid session',
- 'details' => ['msg' => 'session not found', 'state' => 'not found']
- ]
- );
- }
-
- /**
- * Test ajaxListTransactions method
- *
- * @return void
- */
- public function testListTransactions()
- {
- //ajaxListTransactions
- $session_id = rand();
- $this->session([
- 'session_id' => $session_id,
- 'Transactions' => ['pending' => 0, 'executing' => 0],
- 'StateUser' => [
- 'id' => 1,
- 'first_name' => 'Dario',
- 'last_name' => 'Frodo',
- 'email_checked' => 1,
- 'email' => 'fördertest@gradido.org',
- 'public_hex' => '94ae135b93cd9f33752b4e55c41903a3faa13a75bb90bfd411ea1d4a1a5e711f'
- ]
- ]);
- //echo "balance: $balance";
- $expectedResult = '{
- "state": "success",
- "transactions": [
- {
- "transaction_id": 2,
- "date": "2021-04-12T00:00:00+00:00",
- "memo": "AGE Januar 2021",
- "name": "Gradido Akademie",
- "type": "creation",
- "target_date": "2021-01-01T00:00:00+00:00",
- "balance": 10000000
- },
- {
- "transaction_id": 3,
- "date": "2021-04-12T00:00:00+00:00",
- "memo": "test",
- "balance": 1000000,
- "type": "send",
- "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2",
- "name": "Samuel Schmied",
- "email": "test3.yahoo.com"
- },
- {
- "transaction_id": 4,
- "date": "2021-04-14T00:00:00+00:00",
- "memo": "test time",
- "balance": 100000,
- "type": "send",
- "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2",
- "name": "Samuel Schmied",
- "email": "test3.yahoo.com"
- },
- {
- "transaction_id": 5,
- "date": "2021-04-14T09:01:07+00:00",
- "memo": "test time",
- "balance": 100000,
- "type": "send",
- "pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2",
- "name": "Samuel Schmied",
- "email": "test3.yahoo.com"
- },
- {
- "transaction_id": 7,
- "date": "2021-04-14T09:02:28+00:00",
- "memo": "test time 3",
- "decay": {
- "balance": 6,
- "decay_duration": "0 days, 00 hours, 00 minutes, 28 seconds",
- "decay_start": 1618390920,
- "decay_end": 1618390948,
- "decay_start_block": 1618390920
- },
- "balance": 100000,
- "type": "receive",
- "pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
- "name": "Samuel Schmied",
- "email": "test3.yahoo.com"
- },
- {
- "transaction_id": 8,
- "date": "2021-04-14T09:28:46+00:00",
- "memo": "test login crash",
- "decay": {
- "balance": 309,
- "decay_duration": "0 days, 00 hours, 26 minutes, 18 seconds",
- "decay_start": 1618390948,
- "decay_end": 1618392526
- },
- "balance": 100000,
- "type": "receive",
- "pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
- "name": "Samuel Schmied",
- "email": "test3.yahoo.com"
- },
- {
- "transaction_id": 9,
- "date": "2021-04-14T09:31:28+00:00",
- "memo": "test login crash",
- "decay": {
- "balance": 33,
- "decay_duration": "0 days, 00 hours, 02 minutes, 42 seconds",
- "decay_start": 1618392526,
- "decay_end": 1618392688
- },
- "balance": 100000,
- "type": "receive",
- "pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
- "name": "Samuel Schmied",
- "email": "test3.yahoo.com"
- },
- {
- "type": "decay",
- "balance": 1345726,
- "decay_duration": "on 14.04.21",
- "decay_start": 1618392688,
- "decay_end": 1625673853,
- "memo": ""
- }
- ],
- "transactionExecutingCount": 0,
- "count": 7,
- "gdtSum": 180000,
- "timeUsed": 0.44154810905456545,
- "decay_date": "2021-07-07T16:04:13+00:00",
- "balance": 9099652,
- "decay": 7753926
-}';
- $this->getAndParse('/api/list-transactions/', json_decode($expectedResult, true));
- }
-
-
- private function getAndParse($path, $expected)
- {
- $this->configRequest([
- 'headers' => ['Accept' => 'application/json']
- ]);
-
- $this->disableErrorHandlerMiddleware();
- $this->get($path);
-
- // Check that the response was in 2xx - 3xx
- $this->assertResponseSuccess();
- $json = (object)$this->viewVariable('body');
-
- if(!$json) {
- // Check that the response was a 200
- $this->assertResponseOk();
-
- $responseBodyString = (string)$this->_response->getBody();
- $json = json_decode($responseBodyString);
- $this->assertNotFalse($json);
- } else {
- $responseBodyString = json_encode($json);
- }
-
- if(is_array($expected)) {
- $dynamic_fields = ['timeUsed', 'decay_date', 'decay', 'gdtSum'];
- // copy timeUsed because this value will be variy always
- foreach($dynamic_fields as $field) {
- if(isset($expected[$field]) && isset($json->$field)) {
- $expected[$field] = $json->$field;
- }
- }
- // decay balance variy always
- if(isset($expected['transactions'])) {
- $dynamic_transaction_fields = ['decay_duration', 'balance', 'decay_end'];
- foreach($expected['transactions'] as $i => $transaction) {
- if(isset($transaction['type']) && $transaction['type'] == 'decay') {
- foreach($dynamic_transaction_fields as $field) {
- if(isset($transaction[$field])) {
- $expected['transactions'][$i][$field] = $json->transactions[$i][$field];
- }
- }
- }
- }
- }
- $expected = json_encode($expected);
- }
-
- $this->assertEquals($expected, $responseBodyString);
- }
- private function getAndParseWithoutCompare($path)
- {
- $this->configRequest([
- 'headers' => ['Accept' => 'application/json']
- ]);
-
- $this->disableErrorHandlerMiddleware();
- $this->get($path);
-
- // Check that the response was in 2xx - 3xx
- $this->assertResponseSuccess();
- $view_body = $this->viewVariable('body');
- if($view_body) {
- return (object)$view_body;
- }
- // Check that the response was a 200
- $this->assertResponseOk();
- $responseBodyString = (string)$this->_response->getBody();
- $json = json_decode($responseBodyString, true);
- $this->assertNotFalse($json);
-
- return $json;
- }
-}
diff --git a/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php b/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php
deleted file mode 100644
index 35f439dd7..000000000
--- a/community_server/tests/TestCase/Controller/CommunityProfilesControllerTest.php
+++ /dev/null
@@ -1,75 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php b/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php
deleted file mode 100644
index be6167155..000000000
--- a/community_server/tests/TestCase/Controller/Component/GradidoNumberComponentTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-GradidoNumberComponent = new GradidoNumberComponent($registry);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->GradidoNumberComponent);
-
- parent::tearDown();
- }
-
- /**
- * Test parseInputNumberToCentNumber method
- *
- * @return void
- */
- /* public function testParseInputNumberToCentNumber()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }*/
-
- public function test100()
- {
- $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(100);
- $this->assertEquals(1000000, $result);
- }
-
- public function test1000()
- {
- $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(1000);
- $this->assertEquals(10000000, $result);
- }
-
- public function test100Comma()
- {
- $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('100,12');
- $this->assertEquals(1001200, $result);
- }
-
- public function test100Point()
- {
- $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('100.12');
- $this->assertEquals(1001200, $result);
- }
-
- public function test100Decimal()
- {
- $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber(100.12);
- $this->assertEquals(1001200, $result);
- }
-
- public function test1000Point()
- {
- $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('1000.12');
- $this->assertEquals(10001200, $result);
- }
-
- public function test1000Comma()
- {
- $result = $this->GradidoNumberComponent->parseInputNumberToCentNumber('1000,12');
- $this->assertEquals(10001200, $result);
- }
-}
diff --git a/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php b/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php
deleted file mode 100644
index c1ba84ee3..000000000
--- a/community_server/tests/TestCase/Controller/Component/JsonRequestClientComponentTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-JsonRequestClientComponent = new JsonRequestClientComponent($registry);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->JsonRequestClientComponent);
-
- parent::tearDown();
- }
-
- /**
- * Test sendTransaction method
- *
- * @return void
- */
- public function testSendTransaction()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test is_base64 method
- *
- * @return void
- */
- public function testIsBase64Valid()
- {
- $result = $this->JsonRequestClientComponent->is_base64('CgpIYWxsbyBXZWx0EgYIr6fe7wVKLwonCiDWDyYU4+zldTQdQMIzGpsL20W+vV44JuNVA5hwczIELRDgg5sBELmhkoIE');
-
- $this->assertEquals($result, true);
- }
-
- public function testIsBase64Invalid()
- {
- $result = $this->JsonRequestClientComponent->is_base64('CgpIYWxsbyBXZWx0EgYIr6fe7wVKLwonCiDWDyYU4-zldTQdQMIzGpsL20W+vV44JuNVA5hwczIELRDgg5sBELmhkoIE');
-
- $this->assertEquals($result, false);
- }
-}
diff --git a/community_server/tests/TestCase/Controller/DashboardControllerTest.php b/community_server/tests/TestCase/Controller/DashboardControllerTest.php
deleted file mode 100644
index cddf0b7ef..000000000
--- a/community_server/tests/TestCase/Controller/DashboardControllerTest.php
+++ /dev/null
@@ -1,45 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test index method
- *
- * @return void
- */
- public function testIndex()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php b/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php
deleted file mode 100644
index f990b3e57..000000000
--- a/community_server/tests/TestCase/Controller/JsonRequestHandlerControllerTest.php
+++ /dev/null
@@ -1,176 +0,0 @@
- 'CmYKZAog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfISQDnatUMvitiiP0-sY93JStYPhPKKPU4Vosv_EGrh77BVs48xhPgPj2QHWC3oyuuMh6nN8YNjBQZx20rKvdQ4uwMSRwoMQUdFIE1haSAyMDIxEgYI_c3ChQY6LwolCiD39KSaSsEDefi53ctzHE2exJXm7dFgdfUmcs0l4xefDxDQDxoGCPqbtIQG',
- 'validCreation900' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQCaZHmvmvJOt336E3qst3rn1pptdAR5ZPzePaUT10x0_Yky8FnEiQtMGNy1yT94QErzwQudJZjJwDY2uyK4cTgkSOxIGCKb1vYUGOjEKJwog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfIQgNHKCBoGCIDMuf8F',
- 'validCreation1200' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQF8jptIrosEyVmCf3WEIGVOK0NR8YCcO0j-s8v2yUyR5BKus0ciT6B7IA5LDtn7eQX6zHjg1v5WlsTiZuOpuNgwSRAoHVG8gbXVjaBIGCL3Jv4UGOjEKJwog4zad42I86ERtBCTEAT56HXGiZxrj178eeY6_BmXRRfIQgOy4CxoGCOG5toQG',
- 'notBase64' => 'CgpIYWxsbyBXZW-0EgYIyfSG7gV_LwonCiCboKikqwjZfes9xuqgthFH3',
- 'validTransfer' => 'CmYKZAog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8SQA0ZVQ9T1qBabzmgDO1NAWNy2J6mlv0YjMP99CiV7bSR0zemt5XoM-kTviR1aTqKggzpSYSyTN5T6gIx2xa-hgkSYwoLTXkgQmlydGhkYXkSBgie0L-FBjJMCkoKJgog9_SkmkrBA3n4ud3LcxxNnsSV5u3RYHX1JnLNJeMXnw8QgIl6EiDjNp3jYjzoRG0EJMQBPnodcaJnGuPXvx55jr8GZdFF8g',
- 'errornusTransfer' => 'ClxGcm9oZXMgTmV1ZXMgSmFociB1bmQgREFOS0UsIGRhc3MgZHUgZGljaCBzbyBlaW5zZXR6dCBmw7xyIEdyYWRpZG8hIEhlcnpsaWNoZSBHcsO8w59lIFRlcmVzYRIGCPjjgvEFQlAKJgogUQwFYeVlGlfWDrkXNN7rHwejoCDJKt+YkYJfbJVyj3EQwIQ9EiYKIPXIRnUhVJ/zCs5+y/VaTBjTIoYizJNwS+JC//xsbQrHEMCEPQ=='
- ];
-
- /*public function setUp() {
- parent::setUp();
- }
-*/
- public function testWrongMethod()
- {
- $this->configRequest([
- 'headers' => ['Accept' => 'application/json']
- ]);
- $this->get('/JsonRequestHandler');
- $this->assertResponseOk();
-
- $expected = json_encode(['state' => 'error', 'msg' => 'unknown method for get', 'details' => null]);
- $this->assertEquals($expected, (string)$this->_response->getBody());
- }
-
- public function testInvalidJson()
- {
- $this->configRequest([
- 'headers' => ['Accept' => 'application/json']
- ]);
- $this->post('/JsonRequestHandler', '{This isn\'t valid json}');
- $this->assertResponseOk();
-
- $expected = json_encode(['state' => 'error', 'msg' => 'parameter error']);
- $this->assertEquals($expected, (string)$this->_response->getBody());
- }
-
- public function testNotSetTransaction()
- {
- $this->postAndParse(
- ['method' => 'putTransaction'],
- ['state' => 'error', 'msg' => 'parameter error']
- );
- }
- public function testNotSetMethod()
- {
- $this->postAndParse(
- ['transaction' => $this->transactions['validCreation']],
- ['state' => 'error', 'msg' => 'parameter error']
- );
- }
-
- public function testUnknownMethod()
- {
- //$this->post('/TransactionJsonRequestHandler', ['method' => 'putTransaction', 'transaction' => 'CgpIYWxsbyBXZWx0EgYIyfSG7gVKLwonCiCboKikqwjZfes9xuqgthFH3/cHHaWchkUhWiGhQjB23xCg2pMBELWJ7ZYK']);
- $this->postAndParse(
- ['method' => 'foobar', 'transaction' => $this->transactions['validCreation']],
- ['state' => 'error', 'msg' => 'unknown method for post', 'details' => 'foobar']
- );
-
- }
-
- public function testInvalidEncodedTransaction() {
- //"msg":"error parsing transaction","details":[{"Transaction":"base64 decode error"}]
- $this->postAndParse(
- ['method' => 'putTransaction', 'transaction' => $this->transactions['notBase64']],
- ['state' => 'error', 'msg' => 'error parsing transaction', 'details' => [
- ['Transaction' => 'invalid base64 string'],
- ['base64' => 'CgpIYWxsbyBXZW-0EgYIyfSG7gV_LwonCiCboKikqwjZfes9xuqgthFH3']
- ]]
- );
- }
-
- public function testInvalidTransaction() {
-
- $this->postAndParse(
- ['method' => 'putTransaction', 'transaction' => base64_encode('Hallo Miau Welt')],
- ['state' => 'error', 'msg' => 'error parsing transaction', 'details' => [
- ['Transaction' => 'Error occurred during parsing: Unexpected wire type.']
- ]]
- );
- }
-
- public function testToLargeCreationSum()
- {
-
- $this->postAndParse(
- ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation900']],
- '{"state":"error","msg":"error validate transaction","details":[{"TransactionCreation::validate":"Creation more than 1.000 GDD per Month for in target_date not allowed"}]}'
- );
- }
-
- public function testToLargeCreation()
- {
- $this->postAndParse(
- ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation1200']],
- '{"state":"error","msg":"error validate transaction","details":[{"TransactionCreation::validate":"Creation more than 1.000 GDD per Month for in target_date not allowed"}]}'
- );
- }
-
- public function testValidTransfer()
- {
- $this->postAndParse(
- ['method' => 'putTransaction', 'transaction' => $this->transactions['validTransfer']],
- ['state' => 'success']
- );
- }
-
- public function testValidCreation()
- {
- $this->postAndParse(
- ['method' => 'putTransaction', 'transaction' => $this->transactions['validCreation']],
- ['state' => 'success']
- );
- }
-
- private function postAndParse($params, $expected)
- {
- $this->enableCsrfToken();
- //$this->enableSecurityToken();
-
- //$token = 'my-csrf-token';
- //$this->cookie('csrfToken', $token);
-
- $this->configRequest([
- 'headers' => ['Accept' => 'application/json']//, 'X-CSRF-Token' => $token]
- ]);
-
- $this->disableErrorHandlerMiddleware();
- $this->post('/JsonRequestHandler', json_encode($params));
-
- // Check that the response was a 200
- $this->assertResponseOk();
-
- $responseBodyString = (string)$this->_response->getBody();
- $json = json_decode($responseBodyString);
- $this->assertNotFalse($json);
-
- if(is_array($expected)) {
- $expected = json_encode($expected);
- }
- $this->assertEquals($expected, $responseBodyString);
- }
-}
diff --git a/community_server/tests/TestCase/Controller/PagesControllerTest.php b/community_server/tests/TestCase/Controller/PagesControllerTest.php
deleted file mode 100644
index a8fd65233..000000000
--- a/community_server/tests/TestCase/Controller/PagesControllerTest.php
+++ /dev/null
@@ -1,101 +0,0 @@
-get('/');
- $locations = $this->_response->getHeader('Location');
- $this->assertRegExp('%.*/account/$%', $locations[0]);
-
- $this->get('/');
- $locations = $this->_response->getHeader('Location');
- $this->assertRegExp('%.*/account/$%', $locations[0]);
- }
-
- /**
- * testDisplay method
- *
- * @return void
- */
- public function testDisplay()
- {
- $this->get('/pages/home');
- $this->assertResponseOk();
- $this->assertResponseContains('CakePHP');
- $this->assertResponseContains('');
- }
-
- /**
- * Test that missing template renders 404 page in production
- *
- * @return void
- */
- public function testMissingTemplate()
- {
- Configure::write('debug', false);
- $this->get('/pages/not_existing');
-
- $this->assertResponseError();
- $this->assertResponseContains('Not Found');
- }
-
- /**
- * Test that missing template in debug mode renders missing_template error page
- *
- * @return void
- */
- public function testMissingTemplateInDebug()
- {
- Configure::write('debug', true);
- $this->get('/pages/not_existing');
-
- $this->assertResponseFailure();
- $this->assertResponseContains('Template file \u0022Pages\/not_existing.ctp\u0022 is missing.');
- $this->assertResponseContains('not_existing.ctp');
- }
-
- /**
- * Test directory traversal protection
- *
- * @return void
- */
- public function testDirectoryTraversalProtection()
- {
- $this->get('/pages/../Layout/ajax');
- $this->assertResponseCode(403);
- $this->assertResponseContains('Forbidden');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/ProfilesControllerTest.php b/community_server/tests/TestCase/Controller/ProfilesControllerTest.php
deleted file mode 100644
index d87558e55..000000000
--- a/community_server/tests/TestCase/Controller/ProfilesControllerTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/RolesControllerTest.php b/community_server/tests/TestCase/Controller/RolesControllerTest.php
deleted file mode 100644
index 12b2868a2..000000000
--- a/community_server/tests/TestCase/Controller/RolesControllerTest.php
+++ /dev/null
@@ -1,75 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php b/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php
deleted file mode 100644
index 9ef8d28e9..000000000
--- a/community_server/tests/TestCase/Controller/StateBalancesControllerTest.php
+++ /dev/null
@@ -1,179 +0,0 @@
-StateBalances = TableRegistry::getTableLocator()->get('StateBalances');
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test index method
- *
- * @return void
- */
- public function testIndex()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test overview method
- *
- * @return void
- */
- public function testOverview()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
-
-
- /**
- * Test overviewGdt method
- *
- * @return void
- */
- public function testOverviewGdt()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test sortTransactions method
- *
- * @return void
- */
- public function testSortTransactions()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
-
- private function getAndParse($path, $expected)
- {
- $this->configRequest([
- 'headers' => ['Accept' => 'application/json']
- ]);
-
- $this->disableErrorHandlerMiddleware();
- $this->get($path);
-
- // Check that the response was a 200
- $this->assertResponseOk();
-
- $responseBodyString = (string)$this->_response->getBody();
- $json = json_decode($responseBodyString);
- $this->assertNotFalse($json);
-
- if(is_array($expected)) {
- // copy timeUsed because this value will be variy always
- if(isset($expected['timeUsed']) && isset($json->timeUsed)) {
- $expected['timeUsed'] = $json->timeUsed;
- }
- $expected = json_encode($expected);
- }
-
- $this->assertEquals($expected, $responseBodyString);
- }
- private function getAndParseWithoutCompare($path)
- {
- $this->configRequest([
- 'headers' => ['Accept' => 'application/json']
- ]);
-
- $this->disableErrorHandlerMiddleware();
- $this->get($path);
-
- // Check that the response was a 200
- $this->assertResponseOk();
-
- $responseBodyString = (string)$this->_response->getBody();
- $json = json_decode($responseBodyString);
- $this->assertNotFalse($json);
-
- return $json;
- }
-}
diff --git a/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php b/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php
deleted file mode 100644
index 452af54fc..000000000
--- a/community_server/tests/TestCase/Controller/StateErrorsControllerTest.php
+++ /dev/null
@@ -1,77 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php b/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php
deleted file mode 100644
index 0c9e0a513..000000000
--- a/community_server/tests/TestCase/Controller/StateUserTransactionsControllerTest.php
+++ /dev/null
@@ -1,78 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php b/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php
deleted file mode 100644
index 74c0e4b1e..000000000
--- a/community_server/tests/TestCase/Controller/TransactionCreationsControllerTest.php
+++ /dev/null
@@ -1,97 +0,0 @@
-markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test index method
- *
- * @return void
- */
- public function testIndex()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test view method
- *
- * @return void
- */
- public function testView()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test create method
- *
- * @return void
- */
- public function testCreate()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test add method
- *
- * @return void
- */
- public function testAdd()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test edit method
- *
- * @return void
- */
- public function testEdit()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test delete method
- *
- * @return void
- */
- public function testDelete()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Model/Behavior/empty b/community_server/tests/TestCase/Model/Behavior/empty
deleted file mode 100644
index e69de29bb..000000000
diff --git a/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php b/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php
deleted file mode 100644
index 8f145215c..000000000
--- a/community_server/tests/TestCase/Model/Table/AddressTypesTableTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-exists('AddressTypes') ? [] : ['className' => AddressTypesTable::class];
- $this->AddressTypes = TableRegistry::getTableLocator()->get('AddressTypes', $config);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->AddressTypes);
-
- parent::tearDown();
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test validationDefault method
- *
- * @return void
- */
- public function testValidationDefault()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php b/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php
deleted file mode 100644
index 09d7a35fb..000000000
--- a/community_server/tests/TestCase/Model/Table/AdminErrorsTableTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-exists('AdminErrors') ? [] : ['className' => AdminErrorsTable::class];
- $this->AdminErrors = TableRegistry::getTableLocator()->get('AdminErrors', $config);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->AdminErrors);
-
- parent::tearDown();
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test validationDefault method
- *
- * @return void
- */
- public function testValidationDefault()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test buildRules method
- *
- * @return void
- */
- public function testBuildRules()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php b/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php
deleted file mode 100644
index 0d7e5fba2..000000000
--- a/community_server/tests/TestCase/Model/Table/CommunityProfilesTableTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-exists('CommunityProfiles') ? [] : ['className' => CommunityProfilesTable::class];
- $this->CommunityProfiles = TableRegistry::getTableLocator()->get('CommunityProfiles', $config);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->CommunityProfiles);
-
- parent::tearDown();
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test validationDefault method
- *
- * @return void
- */
- public function testValidationDefault()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Model/Table/RolesTableTest.php b/community_server/tests/TestCase/Model/Table/RolesTableTest.php
deleted file mode 100644
index b40a0ca9b..000000000
--- a/community_server/tests/TestCase/Model/Table/RolesTableTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-exists('Roles') ? [] : ['className' => RolesTable::class];
- $this->Roles = TableRegistry::getTableLocator()->get('Roles', $config);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->Roles);
-
- parent::tearDown();
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test validationDefault method
- *
- * @return void
- */
- public function testValidationDefault()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test buildRules method
- *
- * @return void
- */
- public function testBuildRules()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php b/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php
deleted file mode 100644
index 68049de34..000000000
--- a/community_server/tests/TestCase/Model/Table/StateBalancesTableTest.php
+++ /dev/null
@@ -1,124 +0,0 @@
-exists('StateBalances') ? [] : ['className' => StateBalancesTable::class];
- $this->StateBalancesTable = TableRegistry::getTableLocator()->get('StateBalances', $config);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->StateBalancesTable);
-
- parent::tearDown();
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test validationDefault method
- *
- * @return void
- */
- public function testValidationDefault()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test buildRules method
- *
- * @return void
- */
- public function testBuildRules()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test sortTransactions method
- *
- * @return void
- */
- public function testSortTransactions()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test updateLastStateBalanceOfMonth method
- *
- * @return void
- */
- public function testUpdateLastStateBalanceOfMonth()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test chooseForMonthAndUser method
- *
- * @return void
- */
- public function testChooseForMonthAndUser()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test updateBalanceWithTransaction method
- *
- * @return void
- */
- public function testUpdateBalanceWithTransaction()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
-}
diff --git a/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php b/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php
deleted file mode 100644
index 21cbe6128..000000000
--- a/community_server/tests/TestCase/Model/Table/StateErrorsTableTest.php
+++ /dev/null
@@ -1,84 +0,0 @@
-exists('StateErrors') ? [] : ['className' => StateErrorsTable::class];
- $this->StateErrors = TableRegistry::getTableLocator()->get('StateErrors', $config);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->StateErrors);
-
- parent::tearDown();
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test validationDefault method
- *
- * @return void
- */
- public function testValidationDefault()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test buildRules method
- *
- * @return void
- */
- public function testBuildRules()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php b/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php
deleted file mode 100644
index 173ad8e12..000000000
--- a/community_server/tests/TestCase/Model/Table/StateUserTransactionsTableTest.php
+++ /dev/null
@@ -1,85 +0,0 @@
-exists('StateUserTransactions') ? [] : ['className' => StateUserTransactionsTable::class];
- $this->StateUserTransactions = TableRegistry::getTableLocator()->get('StateUserTransactions', $config);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->StateUserTransactions);
-
- parent::tearDown();
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test validationDefault method
- *
- * @return void
- */
- public function testValidationDefault()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test buildRules method
- *
- * @return void
- */
- public function testBuildRules()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php b/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php
deleted file mode 100644
index 49deb1166..000000000
--- a/community_server/tests/TestCase/Model/Table/StateUsersTableTest.php
+++ /dev/null
@@ -1,97 +0,0 @@
-exists('StateUsers') ? [] : ['className' => StateUsersTable::class];
- $this->StateUsersTable = TableRegistry::getTableLocator()->get('StateUsers', $config);
- }
-
- /**
- * tearDown method
- *
- * @return void
- */
- public function tearDown()
- {
- unset($this->StateUsersTable);
-
- parent::tearDown();
- }
-
- /**
- * Test initialize method
- *
- * @return void
- */
- public function testInitialize()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test validationDefault method
- *
- * @return void
- */
- public function testValidationDefault()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test buildRules method
- *
- * @return void
- */
- public function testBuildRules()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-
- /**
- * Test getReceiverProposal method
- *
- * @return void
- */
- public function testGetReceiverProposal()
- {
- $this->markTestIncomplete('Not implemented yet.');
- }
-}
diff --git a/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php b/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php
deleted file mode 100644
index e53549a42..000000000
--- a/community_server/tests/TestCase/Model/Transactions/TransactionCreationTest.php
+++ /dev/null
@@ -1,41 +0,0 @@
-assertEquals(true, true);
- }
-
-
-
-
-}
diff --git a/community_server/tests/TestCase/View/Helper/empty b/community_server/tests/TestCase/View/Helper/empty
deleted file mode 100644
index e69de29bb..000000000
diff --git a/community_server/tests/bootstrap.php b/community_server/tests/bootstrap.php
deleted file mode 100644
index 0ca191e4a..000000000
--- a/community_server/tests/bootstrap.php
+++ /dev/null
@@ -1,12 +0,0 @@
-
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteRule ^ index.php [L]
-
diff --git a/community_server/webroot/css/fonts_local.css b/community_server/webroot/css/fonts_local.css
deleted file mode 100644
index 99dac0484..000000000
--- a/community_server/webroot/css/fonts_local.css
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 21.01.2021, 12:32:20
- Author : einhornimmond
-*/
-
-/* open-sans-300 - latin */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 300;
- src: url('../fonts/open-sans-v18-latin-300.eot'); /* IE9 Compat Modes */
- src: local(''),
- url('../fonts/open-sans-v18-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('../fonts/open-sans-v18-latin-300.woff2') format('woff2'), /* Super Modern Browsers */
- url('../fonts/open-sans-v18-latin-300.woff') format('woff'), /* Modern Browsers */
- url('../fonts/open-sans-v18-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */
- url('../fonts/open-sans-v18-latin-300.svg#OpenSans') format('svg'); /* Legacy iOS */
-}
-
-/* open-sans-regular - latin */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: url('../fonts/open-sans-v18-latin-regular.eot'); /* IE9 Compat Modes */
- src: local(''),
- url('../fonts/open-sans-v18-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('../fonts/open-sans-v18-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
- url('../fonts/open-sans-v18-latin-regular.woff') format('woff'), /* Modern Browsers */
- url('../fonts/open-sans-v18-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
- url('../fonts/open-sans-v18-latin-regular.svg#OpenSans') format('svg'); /* Legacy iOS */
-}
-
-/* open-sans-600 - latin */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: url('../fonts/open-sans-v18-latin-600.eot'); /* IE9 Compat Modes */
- src: local(''),
- url('../fonts/open-sans-v18-latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('../fonts/open-sans-v18-latin-600.woff2') format('woff2'), /* Super Modern Browsers */
- url('../fonts/open-sans-v18-latin-600.woff') format('woff'), /* Modern Browsers */
- url('../fonts/open-sans-v18-latin-600.ttf') format('truetype'), /* Safari, Android, iOS */
- url('../fonts/open-sans-v18-latin-600.svg#OpenSans') format('svg'); /* Legacy iOS */
-}
-
-/* open-sans-700 - latin */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: url('../fonts/open-sans-v18-latin-700.eot'); /* IE9 Compat Modes */
- src: local(''),
- url('../fonts/open-sans-v18-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('../fonts/open-sans-v18-latin-700.woff2') format('woff2'), /* Super Modern Browsers */
- url('../fonts/open-sans-v18-latin-700.woff') format('woff'), /* Modern Browsers */
- url('../fonts/open-sans-v18-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */
- url('../fonts/open-sans-v18-latin-700.svg#OpenSans') format('svg'); /* Legacy iOS */
-}
-
-/* open-sans-800 - latin */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 800;
- src: url('../fonts/open-sans-v18-latin-800.eot'); /* IE9 Compat Modes */
- src: local(''),
- url('../fonts/open-sans-v18-latin-800.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('../fonts/open-sans-v18-latin-800.woff2') format('woff2'), /* Super Modern Browsers */
- url('../fonts/open-sans-v18-latin-800.woff') format('woff'), /* Modern Browsers */
- url('../fonts/open-sans-v18-latin-800.ttf') format('truetype'), /* Safari, Android, iOS */
- url('../fonts/open-sans-v18-latin-800.svg#OpenSans') format('svg'); /* Legacy iOS */
-}
diff --git a/community_server/webroot/css/grd_styles.css b/community_server/webroot/css/grd_styles.css
deleted file mode 100644
index e745ea55e..000000000
--- a/community_server/webroot/css/grd_styles.css
+++ /dev/null
@@ -1,1821 +0,0 @@
-/* ============================================================
-
- Grid Layout Page
-
- Datei : layout.less
- Datum : 2020-04-30
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-/*====================================
-= BREAK POINTS =
-====================================*/
-/* https://scotch.io/courses/getting-started-with-less/responsive-and-media-queries */
-/* GRID */
-.layout {
- display: grid;
- grid-template-rows: [top] 8vh [line2] 86vh [footer1] 3vh [footer2] 5vh [end];
- grid-template-columns: [left1] auto [left2] 1fr [left3] 12fr [right3] 1fr [right2] auto [right1];
- grid-template-areas: "header header header header header" "left . center center ." "footer footer footer footer footer" "bottom bottom bottom bottom bottom";
- margin: 0;
- padding: 0;
-}
-@media (max-width:1199px) {
- .layout {
- grid-template-areas: "header header header header header" "left . center center center" "footer footer footer footer footer" "bottom bottom bottom bottom bottom";
- }
-}
-@media (max-width:767px) {
- .layout {
- position: relative;
- display: grid;
- grid-template-rows: [top] 12vh [line2] 80vh [footer1] 3vh [footer2] 8vh [end];
- grid-template-columns: [left1] 100vw [right1];
- grid-template-areas: "header" "center" "footer" "bottom";
- margin: 0;
- padding: 0;
- }
-}
-.header-notify {
- grid-area: header;
- grid-column-start: right3;
- grid-column-end: right2;
-}
-.header-user {
- grid-area: header;
- grid-column-start: right2;
- grid-column-end: right1;
-}
-.sidebar1 {
- grid-area: left;
- grid-row-start: top;
- grid-row-end: end;
-}
-@media (max-width:767px) {
- .sidebar1 {
- position: relative;
- grid-area: header;
- z-index: 2;
- top: -300px;
- right: 0px;
- }
- .header-user,
- .header-notify {
- grid-area: header;
- }
-}
-.center-form-single,
-.content {
- grid-area: center;
- grid-row-start: line2;
- grid-row-end: footer1;
-}
-.footer {
- grid-area: footer;
- grid-row-start: footer1;
- grid-row-end: footer2;
-}
-.nav-bottom {
- grid-area: bottom;
- grid-row-start: footer2;
- grid-row-end: end;
-}
-/* ============================================================
-
- Generic Color Definitions
-
- Vars and some generic CSS rules.
-
- Datei : colors.less
- Datum : 2020-05-26
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-/* MAIN */
-/* MENU */
-/* CONTENT */
-/* CONTENT-NAV */
-/* CONTENT-ITEMS */
-/* CONTENT-TABLE */
-/* FORMS */
-/* VARIOUS INDIVIDUAL */
-/* XXX TODO XXX */
-/*rgba(0, 0, 0, 0.5) ??? */
-/* NOTIFICATION */
-/* https://www.w3schools.com/colors/colors_shades.asp */
-.info-color {
- color: grey;
-}
-.success-color {
- color: #047006;
-}
-.alert-color {
- color: #ff5f66;
-}
-.orange-color {
- color: #ffa600;
-}
-.blue-color {
- color: blue;
-}
-.unobtrusive {
- color: grey;
-}
-.info-icon {
- color: grey;
- background-color: #80808026;
-}
-.success-icon {
- color: #047006;
- background-color: rgba(4, 112, 6, 0.2);
-}
-.alert-icon {
- color: #ff5f66;
- background-color: #ff5f662e;
-}
-/* =======================
- Gradido
- =======================*/
-/* Gradido */
-.grd-negative-currency {
- color: red;
-}
-/* Gradido Transform */
-.gdt-text-color {
- color: #a27824;
-}
-.grd_clickable {
- cursor: pointer;
-}
-/* ============================================================
-
- Typography Definitions
-
- Datei : typography.less
- Datum : 2020-05-26
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-.small-font {
- font-size: 0.75em;
- font-weight: 300;
-}
-/* ============================================================
-
- Basic screen styles.
-
- Datei : screen.less
- Datum : 2020-04-30
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-@font-face {
- font-family: 'Material Icons Outlined';
- font-style: normal;
- font-weight: 400;
- src: url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.eot);
- /* For IE6-8 */
- src: local('Material Icons Outlined'), local('Material-Icons-Outlined'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2) format('woff2'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.woff) format('woff'), url(../fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf) format('truetype');
-}
-.material-icons-outlined {
- font-family: 'Material Icons Outlined';
- font-weight: normal;
- font-style: normal;
- font-size: 24px;
- line-height: 1;
- letter-spacing: normal;
- text-transform: none;
- vertical-align: middle;
- display: inline-block;
- white-space: nowrap;
- word-wrap: normal;
- direction: ltr;
- -webkit-font-feature-settings: 'liga';
- -webkit-font-smoothing: antialiased;
-}
-@media screen {
- /* =======================
- Basis
- =======================*/
- html,
- body {
- font-family: 'Roboto', sans-serif;
- font-size: 100%;
- line-height: 27px;
- color: #212529;
- background-color: #f9fafb;
- margin: 0;
- overflow: auto;
- }
- div {
- border-collapse: collapse;
- box-sizing: border-box;
- }
- /* =======================
- Kopfbereich
- =======================*/
- .header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- flex: flex-grow;
- width: 100%;
- padding: 1em;
- background-color: #fff;
- }
- /* =======================
- Fußbereich
- =======================*/
- .footer {
- display: flex;
- flex-direction: column;
- justify-content: flex-start;
- align-items: center;
- font-size: 70%;
- font-style: italic;
- line-height: 0;
- }
- .bottomright {
- position: fixed;
- bottom: 0;
- right: 0;
- color: grey;
- font-size: smaller;
- line-height: 0.125em;
- padding-right: 0.25em;
- text-align: right;
- }
- .bottomleft {
- position: fixed;
- bottom: 0;
- left: 0;
- color: grey;
- font-size: smaller;
- line-height: 1.125em;
- padding-left: 0.25em;
- }
- /* =======================
- Sonstige
- =======================*/
- /* Hyperlinks */
- a {
- text-decoration: none;
- color: inherit;
- }
- main a {
- text-decoration: underline;
- font-style: italic;
- }
- a:link,
- a:visited {
- color: inherit;
- }
- a:hover,
- a:focus {
- text-decoration: underline;
- }
- a:active {
- background-color: #fff;
- color: #000;
- }
- a:focus,
- a:active {
- outline: none;
- }
- a.grd_invisible_link {
- color: #000;
- text-decoration: none;
- }
- a.grd_invisible_link:hover {
- color: grey;
- }
- [type=button]:not(:disabled),
- [type=reset]:not(:disabled),
- [type=submit]:not(:disabled),
- button:not(:disabled) {
- cursor: pointer;
- }
-}
-@media screen and (max-width:767px) {
- .bottomright {
- font-size: 0.7em;
- font-weight: 300;
- line-height: 1em;
- width: 100px;
- }
- .bottomright p {
- margin-block-start: 0;
- margin-block-end: 2px;
- margin-inline-start: 0;
- margin-inline-end: 0;
- }
-}
-/* Ende @media screen */
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/* ============================================================
-
- Screen styles for flash messages.
-
- Datei : messages.css
- Datum : 30.10.2019, 16:04:16
- Autor : einhornimmond, Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-@media screen {
- .flash-messages {
- width: 30%;
- position: absolute;
- top: 57px;
- left: 241px;
- text-align: center;
- }
- .flash-messages .alert {
- margin: 0;
- padding: 1em;
- vertical-align: middle;
- border-radius: 5px;
- }
- .flash-messages .alert-success {
- color: #1A1A1A !important;
- background-color: #06c50a;
- border: 1px solid #04700675;
- }
- .flash-messages .alert-error {
- color: #fff !important;
- background-color: red;
- border: 1px solid rgba(255, 0, 0, 0.5);
- }
- .flash-messages .message {
- padding: 5px;
- }
- .flash-messages .success {
- color: #047006;
- }
- .flash-messages .error {
- color: red;
- }
- .flash-messages.hidden {
- display: none;
- }
- /* messages, update flash */
- .grd-error {
- color: red;
- border: 1px solid rgba(255, 0, 0, 0.5);
- padding: 5px;
- }
- .grd-info {
- border: 1px dotted gray;
- padding: 5px;
- }
- .grd-success {
- padding: 5px;
- color: #047006;
- }
-}
-@media screen and (max-width:767px) {
- .flash-messages {
- width: 90%;
- top: 0;
- left: 0;
- text-align: center;
- }
-}
-/* ============================================================
-
- User Menu
-
- Datei : user.less
- Datum : 2020-07-03
- Autor : Christine Slotty
- Copyright : Gradido
-
- ============================================================*/
-@media screen {
- .header-user {
- display: flex;
- flex-direction: column;
- justify-content: flex-start;
- align-items: flex-end;
- align-content: flex-end;
- position: relative;
- width: 100%;
- min-width: 12em;
- height: 40px;
- background-color: #fff;
- border: 1px solid #f2f4f5;
- border-radius: 0 0 0 18px;
- }
- .user-menu-container {
- display: flex;
- justify-content: flex-end;
- align-items: center;
- font-size: 0.8em;
- font-weight: 300;
- padding: 0.25em 0.5em;
- z-index: 20;
- height: 40px;
- }
- .user-name,
- .user-icon {
- display: inline-block;
- vertical-align: middle;
- cursor: pointer;
- }
- .user-name {
- padding-right: 0.25em;
- }
- .nav-vertical.user-menu {
- display: none;
- background-color: #fff;
- border-left: 1px solid #f2f4f5;
- border-bottom: 1px solid #f2f4f5;
- border-radius: 0 0 16px 16px;
- z-index: 15;
- font-size: 0.9em;
- margin-top: 0 !important;
- position: fixed;
- top: 39px;
- right: 0;
- }
- .nav-vertical.user-menu.visible {
- display: inherit;
- }
- .nav-vertical.user-menu > ul {
- padding: 2em;
- padding-top: 0.5em;
- padding-bottom: 1em;
- margin-block-end: 0;
- margin-block-start: 0;
- }
- .nav-vertical.user-menu li {
- padding: 0.0125em;
- }
- .nav-top > ul {
- padding: 0;
- padding-right: 2em;
- }
- .material-icons-outlined.user-info {
- color: grey;
- }
- .material-icons-outlined.user-info.success {
- color: #047006;
- }
-}
-@media screen and (max-width:767px) {
- .header-user {
- position: relative;
- min-width: 3em;
- background-color: transparent;
- justify-content: center;
- height: 100%;
- margin-top: -13px;
- margin-left: -16px;
- color: #047006;
- }
- .user-menu-container {
- margin: 0;
- padding: 0;
- }
- .user-name {
- display: none;
- }
- .nav-vertical {
- margin-top: 55px;
- }
- .nav-vertical.user-menu {
- position: fixed;
- top: 1px;
- right: 0;
- margin-top: 0;
- }
- .nav-vertical.user-menu > ul {
- padding: 1em 1em;
- padding-top: 3em;
- }
-}
-/* ============================================================
-
- Navigation
-
- Datei : navi.less
- Datum : 2020-04-30
- Autor : einhornimmond / Christine Slotty
- Copyright : Gradido
-
- ============================================================*/
-@media screen {
- .logo {
- display: none;
- vertical-align: middle;
- height: 30px;
- padding: 0.5em;
- }
- .logo.big.visible,
- .logo.small.visible {
- display: block !important;
- }
- .logo.mobile {
- display: none;
- }
- .logo.small.visible {
- padding-left: 41px;
- }
- /*
- SIDEBARS
- */
- .sidebar1 {
- background-color: #fff;
- font-size: 0.8em;
- font-weight: 500;
- line-height: 2.5em;
- padding: 0;
- border-right: 1px solid #f2f4f5;
- }
- .sidebar2 {
- padding: 1em;
- background-color: #f9fafb;
- }
- .sidebar1-header {
- font-size: 0.75em;
- font-style: italic;
- color: grey;
- }
- /* set general icons size here! */
- .nav-icon {
- font-size: 18px !important;
- color: #4F4F4F;
- vertical-align: middle;
- padding-right: 1em;
- }
- /* important! order matters! we need to overwrite the main button's size here */
- .nav-main-button {
- font-size: 32px !important;
- color: grey;
- margin: 0.3em;
- }
- /* Hide mobile menu button! */
- .nav-main-button.mobile {
- display: none;
- }
- .nav-menu.nav-menu-maximized {
- width: 280px;
- height: 100%;
- }
- .nav-menu.nav-menu-minimized {
- width: 120px;
- height: 100%;
- }
- .nav-menu-maximized {
- -webkit-animation: slide-out 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- animation: slide-out 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- }
- .nav-menu-minimized {
- -webkit-animation: slide-in 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- animation: slide-in 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- }
- .nav-menu-minimized .link-title {
- display: none;
- }
- .nav-menu-minimized .nav-icon,
- .nav-menu-minimized .nav-main-button {
- padding-left: 72px;
- }
- /**
- * ----------------------------------------
- * animations slide-in / slide-out
- * ----------------------------------------
- */
- /* slide-in */
- @-webkit-keyframes slide-in {
- 0% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- opacity: 0;
- }
- 100% {
- -webkit-transform: translateX(-74px);
- transform: translateX(-74px);
- opacity: 1;
- }
- }
- @keyframes slide-in {
- 0% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- opacity: 0;
- }
- 100% {
- -webkit-transform: translateX(-74px);
- transform: translateX(-74px);
- opacity: 1;
- }
- }
- /* slide-out */
- @-webkit-keyframes slide-out {
- 0% {
- -webkit-transform: translateX(-74px);
- transform: translateX(-74px);
- }
- 100% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
- }
- @keyframes slide-out {
- 0% {
- -webkit-transform: translateX(-74px);
- transform: translateX(-74px);
- }
- 100% {
- -webkit-transform: translateX(0);
- transform: translateX(0);
- }
- }
- /*
- NAVI MOBILE
- */
- /* END navi mobile base */
- .selected {
- color: #047006;
- }
- .link-title {
- vertical-align: middle;
- line-height: normal;
- background-color: transparent;
- }
- .nav-horizontal {
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- justify-content: center;
- align-items: flex-end;
- list-style-type: none;
- gap: 5%;
- padding: 1em;
- }
- .footer .nav-horizontal {
- gap: 0;
- padding: 0 1em;
- padding-inline-start: 0 !important;
- }
- .nav-top-smaller {
- margin: 0;
- padding: 0;
- }
- .nav-smaller {
- justify-content: left;
- align-items: flex-start;
- gap: 0;
- padding: 0;
- }
- .nav-smaller li {
- padding: 0 !important;
- padding: 0.2em 0.5em !important;
- border: 1px solid #047006;
- margin: 0.1em 0.3em;
- border-radius: 12px;
- }
- .nav-smaller .heading {
- font-weight: bold;
- }
- .nav-vertical {
- margin-top: -2em;
- }
- .nav-horizontal li {
- padding: 0.5em;
- }
- .nav-vertical > ul {
- display: flex;
- flex-direction: column;
- list-style-type: none;
- gap: 5%;
- padding: 1em;
- }
- .nav-vertical li {
- padding: 0.5em;
- }
- .nav-top > ul {
- padding: 0;
- padding-right: 2em;
- }
- .nav-bottom {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- list-style-type: none;
- margin-bottom: 20px;
- }
- .nav-bottom p {
- font-size: 0.9em;
- color: grey;
- margin: 0;
- }
- nav.grd-left-bar {
- position: fixed;
- top: 80.5px;
- }
- nav .grd-nav-bn {
- width: 100px;
- }
- nav ul {
- margin-top: 0;
- padding-left: 0;
- }
- /* buttons */
- .grd-nav-bn:hover,
- .grd-active {
- background-color: lightgray;
- border-color: #000;
- }
- .grd-nav-bn {
- padding: 10px;
- border: 1px solid grey;
- display: table-cell;
- text-align: center;
- vertical-align: middle;
- color: grey;
- }
- .grd-nav-bn-large {
- width: 40vw;
- height: 18vh;
- font-size: 35px;
- }
- a.grd-nav-bn,
- a.grd-nav-bn:visited {
- color: #000;
- text-decoration: none;
- }
-}
-@media screen and (max-width:767px) {
- .logo.big,
- .logo.small {
- display: none;
- }
- .logo.visible {
- padding: 0 !important;
- }
- .logo,
- .logo.mobile,
- .logo.mobile.visible {
- display: block;
- position: fixed;
- top: 12px;
- left: 12px;
- }
- .logo.big,
- .logo.big.visible {
- display: none !important;
- }
- .nav-main-button {
- display: none;
- }
- .nav-main-button.mobile {
- display: block;
- position: fixed;
- top: 2px;
- right: 46px;
- z-index: 3;
- }
- .nav-menu.nav-menu-minimized,
- .nav-menu.nav-menu-maximized {
- width: 280px;
- height: 300px;
- }
- .nav-menu-minimized .nav-icon,
- .nav-menu-minimized .nav-main-button {
- padding-left: 0;
- }
- .nav-menu-maximized {
- -webkit-animation: slide-down 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- animation: slide-down 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- }
- .nav-menu-minimized {
- -webkit-animation: slide-up 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- animation: slide-up 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- }
- @-webkit-keyframes slide-down {
- 0% {
- -webkit-transform: translateY(0);
- transform: translateY(0);
- opacity: 0;
- }
- 100% {
- -webkit-transform: translateY(300px);
- transform: translateX(300px);
- opacity: 1;
- }
- }
- @keyframes slide-down {
- 0% {
- -webkit-transform: translateY(0);
- transform: translateY(0);
- opacity: 0;
- }
- 100% {
- -webkit-transform: translateY(300px);
- transform: translateY(300px);
- opacity: 1;
- }
- }
- @-webkit-keyframes slide-up {
- 0% {
- -webkit-transform: translateY(0);
- transform: translateY(0);
- }
- 100% {
- -webkit-transform: translateY(-300px);
- transform: translateY(-300px);
- }
- }
- @keyframes slide-up {
- 0% {
- -webkit-transform: translateY(0);
- transform: translateY(0);
- }
- 100% {
- -webkit-transform: translateY(-300px);
- transform: translateY(-300px);
- }
- }
-}
-@media screen and (max-width:767px) {
- .nav-vertical {
- margin-top: 55px;
- }
-}
-@media screen and (max-width:767px) {
- .nav-bottom p {
- font-size: 0.8em;
- margin-top: -10px;
- }
-}
-/* ============================================================
-
- Notification
-
- Datei : notification.css
- Datum : 2020-06-10
- Autor : Christine Slotty
- Copyright : Gradido
-
- ============================================================*/
-@media screen {
- .header-notify {
- display: flex;
- flex-wrap: wrap;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
- z-index: 10;
- }
- .notify {
- display: block;
- padding: 0.5rem 0.3rem;
- color: #525c5d;
- animation: blinkingNotifySymbol 1.2s infinite;
- }
- .notify-alert {
- color: #ff5f66;
- animation: blinkingAlertSymbol 1.2s infinite;
- }
- @keyframes blinkingNotifySymbol {
- 0% {
- color: #525c5d;
- }
- 49% {
- color: #525c5d;
- }
- 60% {
- color: #525c5d82;
- }
- 99% {
- color: #525c5d82;
- }
- 100% {
- color: #525c5d;
- }
- }
- @keyframes blinkingAlertSymbol {
- 0% {
- color: #ff5f66;
- }
- 49% {
- color: #ff5f66;
- }
- 60% {
- color: #ff5f669e;
- }
- 99% {
- color: #ff5f669e;
- }
- 100% {
- color: #ff5f66;
- }
- }
- /*
- .notification-indicator-primary {
- background: #047006;
- }
-
- .notification-indicator-warning {
- background: #f0825f
- }
- .notification-indicator-secondary {
- background: grey
- }
-
- .notification-indicator-secondary:before {
- content: "";
- background: rgba(128, 128, 128, .5)
- }
-
- .notification-indicator-success {
- background: #00e093
- }
-
- .notification-indicator-success:before {
- content: "";
- background: rgba(0, 224, 147, .5)
- }
-
- .notification-indicator-info {
- background: #6c61f6
- }
-
- .notification-indicator-info:before {
- content: "";
- background: rgba(108, 97, 246, .5)
- }
-
-
- .notification-indicator-danger {
- background: #ff5f66
- }
-
- .notification-indicator-danger:before {
- content: "";
- background: rgba(255, 95, 102, .5)
- }
-
- .notification-indicator-light {
- background: #dfdfdf
- }
-
- .notification-indicator-light:before {
- content: "";
- background: rgba(223, 223, 223, .5)
- }
-
- .notification-indicator-dark {
- background: #74767b
- }
-
- .notification-indicator-dark:before {
- content: "";
- background: rgba(116, 118, 123, .5)
- }
-
- .notification-indicator-white {
- background: #fff
- }
-
- .notification-indicator-white:before {
- content: "";
- background: rgba(255, 255, 255, .5)
- }
- */
-}
-@media screen and (max-width:767px) {
- .header-notify {
- justify-content: flex-end;
- margin-right: 93px;
- margin-top: 8px;
- }
-}
-/* ============================================================
-
- Screen styles for the regular center part.
-
- Datei : center.css
- Datum : 2020-04-30
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-@media screen {
- /* =========
- CONTENT
- =========*/
- .content-default {
- display: flex;
- justify-content: center;
- max-width: 90%;
- }
- .content {
- display: flex;
- justify-content: flex-start;
- flex-direction: column;
- overflow: auto;
- width: 100%;
- background-color: #f9fafb;
- line-height: 1.75em;
- letter-spacing: 0.03rem;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- font-size: 1rem;
- padding-right: 5em;
- }
- /* Center Navigation Top */
- .nav-content {
- position: relative;
- color: #565656;
- margin: 0 0.25em;
- }
- .nav-content-list {
- display: flex;
- list-style-type: none;
- padding: 0;
- margin-left: 0.25em;
- }
- .nav-content-separator {
- margin: 0 1em;
- }
- /* Center Content Container */
- .content-container {
- background-color: #fff;
- color: #212529;
- border-radius: 0.5em;
- box-shadow: 0 0 10px 0 rgba(183, 192, 206, 0.2);
- border: 1px solid rgba(238, 238, 238, 0.75);
- margin: 1em 0.25em;
- }
- /* Block Container Above Main */
- .block-container {
- width: 100%;
- display: flex;
- }
- /* Top Info Above Main */
- .info-container {
- display: flex;
- justify-content: space-between;
- align-items: center;
- max-width: 70%;
- padding: 1em 25px;
- }
- /* Main Container */
- .main-container {
- width: 100%;
- }
- .default-container {
- width: 90%;
- margin: auto;
- padding: 1em;
- }
- /* Content Block */
- .content-block {
- width: 170px;
- padding: 20px 25px 20px;
- border: 1px dashed grey;
- border-radius: 16px;
- margin: 1em;
- display: flex;
- flex-direction: column;
- justify-content: center;
- justify-items: center;
- align-items: center;
- }
- .block-img {
- width: 40px;
- height: 40px;
- line-height: 20px;
- font-size: 24px;
- padding: 8px;
- border-radius: 20px;
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- overflow: hidden;
- border-style: none;
- box-sizing: border-box;
- }
- /* Generic Content */
- .content-region h3 {
- color: #21252969;
- }
- .content-region {
- border-bottom: 1px dashed #F5F5F5;
- padding: 0 25px;
- padding-bottom: 2em;
- margin: 1em 0.25em;
- }
- .content-collection {
- display: flex;
- }
- .content-item {
- margin: 0.5em 0;
- margin-right: 5em;
- width: 220px;
- padding: 1em 2em;
- }
- .action-button {
- background: #f9fafb;
- border-left: 3px solid #047006;
- }
- .info-item {
- border-left: 2px solid grey;
- }
- .inline-header {
- display: inline;
- }
- .show-profile-img {
- display: block;
- height: 100px;
- vertical-align: middle;
- border-radius: 10px;
- border: 2px dotted #80808026;
- }
- /* OTHER */
- .info-item i,
- .info-item-link,
- .action-button i,
- .action-button-link {
- vertical-align: middle;
- }
-}
-@media screen and (max-width:767px) {
- .content {
- padding-right: 0;
- }
-}
-@media screen and (max-width:767px) {
- .nav-content-list {
- display: flex;
- font-size: small;
- margin-bottom: 0;
- justify-content: center;
- }
-}
-@media screen and (max-width:1199px) {
- .info-container {
- flex-direction: column;
- max-width: 90%;
- line-height: 0.25em;
- }
-}
-@media screen and (max-width:767px) {
- .main-container {
- max-width: 97%;
- }
-}
-@media screen and (max-width:767px) {
- .content-region {
- padding-left: 5px;
- }
- .content-collection {
- flex-direction: column;
- align-items: center;
- }
- .content-item {
- margin: 0.5em 0;
- margin-right: 0;
- width: 160px;
- padding: 1em 2em;
- }
-}
-/* Ende @media screen */
-/* ============================================================
-
- Screen styles for the simple center form. (login etc)
-
- Datei : center-form-single.css
- Datum : 2020-07-10
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-@media screen {
- .center-form-single {
- width: 50%;
- margin: auto;
- }
- .center-form-header {
- margin-bottom: 50px;
- }
- .center-logo {
- display: block;
- margin: 0 auto;
- width: 280px;
- }
- .center-logo img {
- width: 100%;
- vertical-align: middle;
- border-style: none;
- }
- .center-form-container {
- display: flex;
- flex-direction: column;
- padding: 2em 8em;
- background-color: #fff;
- border-radius: 6px;
- box-shadow: 0 0 10px 0 rgba(183, 192, 206, 0.2);
- margin-bottom: 1.5rem;
- border: 1px solid rgba(238, 238, 238, 0.75);
- }
- .center-form-title h1 {
- margin-block-start: 0;
- }
- .center-form-selectors {
- display: flex;
- justify-content: flex-end;
- align-items: center;
- height: 38px;
- padding: 5px 0;
- margin-bottom: 2em;
- }
- .center-form-form,
- .center-form-form form {
- display: flex;
- flex-direction: column;
- }
- .center-form-form .form-label {
- text-align: left;
- }
- .center-form-form .form-control {
- width: 100%;
- margin: auto;
- box-sizing: border-box;
- margin-bottom: 0.5em;
- }
- .center-form-submit {
- width: 100%;
- margin: 1em 0;
- }
- .reset-pwd-link,
- .signup-link {
- padding: 0 20px;
- }
- .reset-pwd-link a,
- .signup-link a {
- color: #047006;
- }
- .reset-pwd-link p,
- .signup-link p {
- display: inline-block;
- margin-block-start: 0;
- margin-block-end: 0;
- }
- .center-bottom {
- color: grey;
- text-align: center;
- padding-top: 30px;
- }
- .flag-btn {
- text-align: center;
- vertical-align: middle;
- padding: 3px 11px;
- }
- .flag {
- display: block;
- }
- .flag-germany {
- background: red;
- border-top: 9px solid #000;
- border-bottom: 9px solid #fc0;
- width: 40px;
- height: 10px;
- }
- .flag-england {
- background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==);
- background-size: cover;
- width: 40px;
- height: 28px;
- }
- .group {
- padding-left: 10px;
- padding-top: 10px;
- padding-bottom: 10px;
- }
- .group-is-invalid {
- background-color: rgba(240, 130, 95, 0.2);
- border-color: #dc3545;
- padding-right: calc(1.5em + 0.75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E");
- background-repeat: no-repeat;
- background-position: center right calc(0.375em + 0.1875rem);
- background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
- }
- .group-is-invalid .radio label .input-frame::before {
- border-color: red;
- }
-}
-@media screen and (max-width:767px) {
- .center-form-header {
- margin-bottom: 30px;
- margin-top: -50px;
- }
- .center-form-single {
- width: 97%;
- margin: auto;
- }
- .center-form-container {
- padding: 1em 0.5em;
- }
-}
-/* Ende @media screen */
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/* ============================================================
-
- Screen styles for plain facts.
-
- Datei : facts.css
- Datum : 08.07.2020
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-@media screen {
- .fact-list {
- display: flex;
- flex-direction: column;
- list-style-type: none;
- width: 100%;
- padding-inline-start: 0;
- font-weight: 300;
- }
- .fact {
- display: inline-block;
- padding-left: 1em;
- }
- .label {
- width: 150px;
- text-align: right;
- font-weight: bold;
- }
-}
-@media screen and (max-width:767px) {
- .fact-list {
- margin-block-start: 0;
- margin-block-end: 0;
- }
- li.fact {
- display: flex;
- flex-direction: column;
- }
- .fact {
- padding-left: 0.5em;
- }
- .label {
- width: 250px;
- text-align: left;
- font-size: 0.9em;
- font-weight: normal;
- }
-}
-/* ============================================================
-
- Screen styles for lists.
-
- Datei : list.css
- Datum : 2020-06-09
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-@media screen {
- /* =========
- LISTS
- =========*/
- /* List Content */
- .content-list {
- width: 100%;
- }
- .content-list-title {
- font-size: 1rem;
- margin: 0;
- padding: 20px 25px;
- color: #313131;
- }
- .content-list-table {
- display: flex;
- flex-direction: column;
- width: 100%;
- overflow: auto;
- font-size: 16px;
- color: #212529;
- }
- .row {
- display: flex;
- width: 100%;
- border-top: 1px solid #f2f4f9;
- -webkit-transition-duration: 0.5s;
- transition-duration: 0.5s;
- }
- .row:hover {
- background-color: #f6f7f9;
- }
- .cell {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- padding: 1em 1.5em;
- }
- .cell-dense {
- padding: 0.1em 0.5em;
- }
- .centered {
- justify-content: center;
- }
- .c0 {
- flex-grow: 5;
- min-width: 20%;
- }
- .c1 {
- min-width: 40px;
- flex: 0 0 40px;
- }
- .c2 {
- min-width: 80px;
- flex: 0 0 80px;
- }
- .c3 {
- min-width: 160px;
- flex: 0 0 160px;
- }
- .c4 {
- min-width: 240px;
- flex: 0 0 240px;
- }
- .c5 {
- min-width: 320px;
- flex: 0 0 320px;
- }
- .c6 {
- min-width: 400px;
- flex: 0 0 400px;
- }
- .header-cell {
- border-top: 1px solid #f2f4f9;
- background-color: #fafafa;
- color: #101010;
- }
- .content-list-table img,
- .content-list-table i {
- vertical-align: middle;
- }
- .content-list-table > span {
- font-size: 0.8em;
- padding: 0.5em 2em;
- vertical-align: middle;
- }
- /* Individual Tables XXX rm!! */
- .error-list {
- grid-template-columns: 2fr 2fr 5fr 1fr;
- }
- .transactions {
- grid-template-columns: 1fr 4fr 2fr 2fr;
- }
- .profile-img {
- width: 30px;
- height: 30px;
- border-radius: 6px;
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- overflow: hidden;
- border-style: none;
- box-sizing: border-box;
- margin-right: 40px;
- }
- .tx-email {
- cursor: pointer;
- display: block;
- color: #101010;
- font-weight: 400;
- }
- .small {
- font-size: 80%;
- font-weight: 400;
- }
- /*,
- .cell-icon .material-icons-outlined */
- .cell-icon {
- /*noch ungeklärt - icon ist nicht aligned */
- /*font-size: 1.25em;*/
- vertical-align: middle;
- }
- /* =====================================
- FORM TOP CONTENT (checkTransaction)
- =====================================*/
- .form-content {
- padding: 35px;
- padding-top: 20px;
- max-width: 80%;
- margin: auto;
- }
- .content-table {
- border: 1px solid #f2f4f9;
- border-top: none;
- margin-bottom: 1.5rem;
- }
- .content-row {
- display: flex;
- justify-content: space-between;
- font-weight: 400;
- border-top: 1px solid #f2f4f9;
- }
- .content-row-header {
- font-weight: 500;
- color: #101010;
- }
- .content-row-bg {
- background-color: #f0f2f5;
- }
- .content-cell {
- display: block;
- border-collapse: collapse;
- padding: 10px 15px;
- }
- .form-button .material-icons-outlined {
- font-size: 1.25em;
- }
-}
-@media screen and (max-width:767px) {
- .row {
- flex-direction: column;
- }
-}
-@media screen and (max-width:767px) {
- .cell {
- padding: 0.25em 1.5em;
- }
- .c1 {
- flex-basis: auto;
- }
- .c2 {
- flex-basis: auto;
- }
- .c3 {
- flex-basis: auto;
- }
- .c4 {
- flex-basis: auto;
- }
- .c5 {
- flex-basis: auto;
- }
- .c6 {
- flex-basis: auto;
- }
-}
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 23.11.2020, 14:04:28
- Author : einhornimmond
-*/
-/* Style the tab */
-.tab {
- overflow: hidden;
- border: 1px solid #ccc;
- background-color: #f1f1f1;
-}
-/* Style the buttons that are used to open the tab content */
-.tab button {
- background-color: inherit;
- float: left;
- border: none;
- outline: none;
- cursor: pointer;
- padding: 14px 16px;
- transition: 0.3s;
-}
-/* Change background color of buttons on hover */
-.tab button:hover {
- background-color: #ddd;
-}
-/* Create an active/current tablink class */
-.tab button.active {
- background-color: #ccc;
-}
-/* Style the tab content */
-.tabcontent {
- display: none;
- padding: 6px 12px;
- border: 1px solid #ccc;
- border-top: none;
-}
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/* ============================================================
-
- Screen styles for forms.
-
- Datei : form.css
- Datum : 2020-06-07
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-@media screen {
- /* =========
- FORMS
- =========*/
- /* Form Content */
- .action-form {
- width: 100%;
- }
- .form-header {
- border-left: 3px solid #047006;
- background: #f9fafb;
- padding: 15px 20px;
- margin: 0;
- margin-bottom: 15px;
- border-radius: 0 6px 0 0;
- }
- .form-label {
- grid-column: 0.5;
- font-weight: 400;
- text-align: right;
- padding-right: 0.5em;
- }
- .form-control {
- grid-column: 0.66666667;
- padding: 0.4em 0.75em;
- padding-left: 20px;
- padding-right: 20px;
- margin: 0;
- margin-right: 0.5em;
- color: rgba(16, 16, 16, 0.8);
- display: block;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #6c757d;
- background-color: #f6f7f9;
- background-clip: padding-box;
- border: 1px solid #f0f2f5;
- border-radius: 0.25rem;
- -webkit-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- }
- .form-control:focus {
- color: #495057;
- background-color: #f6f7f9;
- border-color: #d7dee5;
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- }
- textarea {
- resize: vertical;
- }
- .badge {
- display: inline-block;
- padding: 0.45rem 1rem;
- font-size: 80%;
- font-weight: 700;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: 0.25rem;
- -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- }
- .badge-warning {
- color: #fff;
- background-color: #00e093;
- }
- .badge-error {
- color: #fff;
- background-color: #ff5f66;
- }
- .form-full-width {
- grid-column-start: 1;
- grid-column-end: 3;
- display: flex;
- flex-direction: column;
- }
- .form-button {
- cursor: pointer;
- font: 600 13.3333px Arial;
- font-size: 0.875rem;
- line-height: 1.5;
- text-align: center;
- vertical-align: middle;
- color: #fff;
- background-color: #047006;
- border-color: #047006;
- border: 1px solid transparent;
- border-radius: 0.2rem;
- height: 35px;
- max-height: 35px;
- padding: 4px 15px;
- margin-right: 0.5em;
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- }
- .form-button:hover {
- background-color: #034b04;
- border-color: #023f03;
- }
- .button-cancel {
- color: #fff !important;
- background-color: #f0825f;
- border-color: #f0825f;
- }
- .button-cancel:hover {
- background-color: #ec5e30;
- border-color: #eb5425;
- }
- .link-button {
- display: inline-block;
- background: #f9fafb;
- color: #fff;
- height: 17px;
- padding: 1em 2em;
- line-height: 1em;
- border-radius: 6px;
- text-align: center;
- vertical-align: middle;
- }
- .action-link {
- color: #047006 !important;
- }
- .action-link-button {
- background-color: #047006 !important;
- color: #fff !important;
- margin-top: 1em;
- padding: 0.5em 1em;
- }
- .edit-profile-img {
- width: 100px;
- }
- .note-smaller {
- font-size: smaller;
- }
- .form-row,
- .grid-row {
- display: flex;
- justify-content: flex-start;
- align-items: center;
- align-content: center;
- width: 100%;
- -webkit-transition-duration: 0.5s;
- transition-duration: 0.5s;
- }
- .justify-end {
- justify-content: flex-end;
- }
- .form-row {
- border-top: 1px solid #f2f4f9;
- }
- .form-row:hover {
- background-color: #f6f7f9;
- }
- /* CENTER FORM SPECIFICS */
- .form-body form {
- display: grid;
- grid-template-columns: 220px 1fr;
- margin: 36px 75px;
- grid-gap: 1em;
- }
- .center-form {
- width: 450px;
- }
- .center-form .form-control {
- width: 90%;
- }
- .center-form fieldset {
- margin-bottom: 1em;
- }
-}
-@media screen and (max-width:767px) {
- .grid-row {
- flex-direction: column;
- }
-}
-@media screen and (max-width:767px) {
- .form-body form {
- grid-template-columns: 1fr;
- margin: 20px;
- grid-gap: 0.25em;
- }
- .form-label {
- text-align: left;
- }
-}
diff --git a/community_server/webroot/css/loginServer/style.css b/community_server/webroot/css/loginServer/style.css
deleted file mode 100644
index bf5f617a7..000000000
--- a/community_server/webroot/css/loginServer/style.css
+++ /dev/null
@@ -1,14488 +0,0 @@
-.bg-inverse-primary {
- background: rgba(4, 112, 6, .2)
-}
-
-.bg-inverse-secondary {
- background: rgba(128, 128, 128, .2)
-}
-
-.bg-inverse-success {
- background: rgba(0, 224, 147, .2)
-}
-
-.bg-inverse-info {
- background: rgba(108, 97, 246, .2)
-}
-
-.bg-inverse-warning {
- background: rgba(240, 130, 95, .2)
-}
-
-.bg-inverse-danger {
- background: rgba(255, 95, 102, .2)
-}
-
-.bg-inverse-light {
- background: rgba(223, 223, 223, .2)
-}
-
-.bg-inverse-dark {
- background: rgba(116, 118, 123, .2)
-}
-
-.bg-inverse-white {
- background: rgba(255, 255, 255, .2)
-}
-
-.bg-inverse-orange {
- background: rgba(255, 166, 0, .2)
-}
-
-.animated {
- -webkit-animation-duration: 1s;
- animation-duration: 1s;
- -webkit-animation-fill-mode: both;
- animation-fill-mode: both
-}
-
-.animated.infinite {
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite
-}
-
-@-webkit-keyframes fadeIn {
- from {
- opacity: 0
- }
-
- to {
- opacity: 1
- }
-
-}
-
-@keyframes fadeIn {
- from {
- opacity: 0
- }
-
- to {
- opacity: 1
- }
-
-}
-
-.fadeIn {
- -webkit-animation-name: fadeIn;
- animation-name: fadeIn
-}
-
-@-webkit-keyframes fadeInDown {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0)
- }
-
- to {
- opacity: 1;
- -webkit-transform: none;
- transform: none
- }
-
-}
-
-@keyframes fadeInDown {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0)
- }
-
- to {
- opacity: 1;
- -webkit-transform: none;
- transform: none
- }
-
-}
-
-.fadeInDown {
- -webkit-animation-name: fadeInDown;
- animation-name: fadeInDown
-}
-
-@-webkit-keyframes fadeInUp {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0)
- }
-
- to {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0)
- }
-
-}
-
-@keyframes fadeInUp {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0)
- }
-
- to {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0)
- }
-
-}
-
-.fadeInUp {
- -webkit-animation-name: fadeInUp;
- animation-name: fadeInUp
-}
-
-@-webkit-keyframes zoomIn {
- from {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3)
- }
-
- 50% {
- opacity: 1
- }
-
-}
-
-@keyframes zoomIn {
- from {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3)
- }
-
- 50% {
- opacity: 1
- }
-
-}
-
-.zoomIn {
- -webkit-animation-name: zoomIn;
- animation-name: zoomIn
-}
-
-@keyframes bounceIn {
- 20%,
- 40%,
- 60%,
- 80%,
- from,
- to {
- -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
- animation-timing-function: cubic-bezier(.215, .61, .355, 1)
- }
-
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3)
- }
-
- 20% {
- -webkit-transform: scale3d(1.4, 1.4, 1.4);
- transform: scale3d(1.4, 1.4, 1.4)
- }
-
- 40% {
- -webkit-transform: scale3d(.9, .9, .9);
- transform: scale3d(.9, .9, .9)
- }
-
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(1.03, 1.03, 1.03);
- transform: scale3d(1.03, 1.03, 1.03)
- }
-
- 80% {
- -webkit-transform: scale3d(.97, .97, .97);
- transform: scale3d(.97, .97, .97)
- }
-
- to {
- opacity: 1;
- -webkit-transform: scale3d(1, 1, 1);
- transform: scale3d(1, 1, 1)
- }
-
-}
-
-@-webkit-keyframes rotate360 {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- -webkit-transform-origin: center;
- transform-origin: center
- }
-
-}
-
-@keyframes rotate360 {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- -webkit-transform-origin: center;
- transform-origin: center
- }
-
-}
-
-@-webkit-keyframes bounceIn {
- 20%,
- 40%,
- 60%,
- 80%,
- from,
- to {
- -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
- animation-timing-function: cubic-bezier(.215, .61, .355, 1)
- }
-
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3)
- }
-
- 20% {
- -webkit-transform: scale3d(1.4, 1.4, 1.4);
- transform: scale3d(1.4, 1.4, 1.4)
- }
-
- 40% {
- -webkit-transform: scale3d(.9, .9, .9);
- transform: scale3d(.9, .9, .9)
- }
-
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(1.03, 1.03, 1.03);
- transform: scale3d(1.03, 1.03, 1.03)
- }
-
- 80% {
- -webkit-transform: scale3d(.97, .97, .97);
- transform: scale3d(.97, .97, .97)
- }
-
- to {
- opacity: 1;
- -webkit-transform: scale3d(1, 1, 1);
- transform: scale3d(1, 1, 1)
- }
-
-}
-
-@-webkit-keyframes ripple {
- 0%,
- 35% {
- -webkit-transform: scale(0);
- transform: scale(0);
- opacity: 1
- }
-
- 50% {
- -webkit-transform: scale(.6);
- transform: scale(.6);
- opacity: .8
- }
-
- 100% {
- opacity: 0;
- -webkit-transform: scale(1.2);
- transform: scale(1.2)
- }
-
-}
-
-@keyframes ripple {
- 0%,
- 35% {
- -webkit-transform: scale(0);
- transform: scale(0);
- opacity: 1
- }
-
- 50% {
- -webkit-transform: scale(.6);
- transform: scale(.6);
- opacity: .8
- }
-
- 100% {
- opacity: 0;
- -webkit-transform: scale(1.2);
- transform: scale(1.2)
- }
-
-}
-
-body,
-html {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- letter-spacing: .03rem;
- font-family: Roboto, sans-serif;
- font-weight: 400;
- font-size: 14px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- body,
- html {
- font-size: calc(14px + 1 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- body,
- html {
- font-size: calc(15px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- body,
- html {
- font-size: 14px
- }
-
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-label {
- font-family: Roboto, sans-serif;
- font-weight: 500
-}
-
-label,
-p {
- font-family: Roboto, sans-serif;
- font-weight: 400;
- letter-spacing: .03rem
-}
-
-a {
- font-family: Roboto, sans-serif;
- font-weight: 400
-}
-
-a:hover {
- text-decoration: none
-}
-
-pre {
- font-size: 15px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- pre {
- font-size: calc(15px + 1 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- pre {
- font-size: calc(16px + 0 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- pre {
- font-size: 16px
- }
-
-}
-
-.checkbox label,
-.radio label,
-label {
- font-family: Roboto, sans-serif;
- font-weight: 400
-}
-
-b {
- font-weight: 700
-}
-
-small {
- font-size: 14px;
- font-family: Roboto, sans-serif;
- font-weight: 400;
- display: inline-block;
- line-height: 1.4
-}
-
-@media (min-width:768px) and (max-width:991px) {
- small {
- font-size: calc(14px + 0 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- small {
- font-size: calc(14px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- small {
- font-size: 13px
- }
-
-}
-
-h1 {
- font-size: 20px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- h1 {
- font-size: calc(20px + 4 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- h1 {
- font-size: calc(24px + 8 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- h1 {
- font-size: 32px
- }
-
-}
-
-h2 {
- font-size: 19px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- h2 {
- font-size: calc(19px + 3 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- h2 {
- font-size: calc(22px + 7 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- h2 {
- font-size: 29px
- }
-
-}
-
-h3 {
- font-size: 18px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- h3 {
- font-size: calc(18px + 3 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- h3 {
- font-size: calc(21px + 5 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- h3 {
- font-size: 26px
- }
-
-}
-
-h4 {
- font-size: 17px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- h4 {
- font-size: calc(17px + 2 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- h4 {
- font-size: calc(19px + 4 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- h4 {
- font-size: 23px
- }
-
-}
-
-h5 {
- font-size: 17px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- h5 {
- font-size: calc(17px + 1 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- h5 {
- font-size: calc(18px + 2 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- h5 {
- font-size: 20px
- }
-
-}
-
-h6 {
- font-size: 16px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- h6 {
- font-size: calc(16px + 1 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- h6 {
- font-size: calc(17px + 1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- h6 {
- font-size: 18px
- }
-
-}
-
-.display-1 {
- font-size: 26px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .display-1 {
- font-size: calc(26px + 7 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .display-1 {
- font-size: calc(33px + 25 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .display-1 {
- font-size: 58px
- }
-
-}
-
-.display-2 {
- font-size: 24px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .display-2 {
- font-size: calc(24px + 7 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .display-2 {
- font-size: calc(31px + 21 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .display-2 {
- font-size: 52px
- }
-
-}
-
-.display-3 {
- font-size: 23px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .display-3 {
- font-size: calc(23px + 6 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .display-3 {
- font-size: calc(29px + 17 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .display-3 {
- font-size: 46px
- }
-
-}
-
-.display-4 {
- font-size: 22px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .display-4 {
- font-size: calc(22px + 5 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .display-4 {
- font-size: calc(27px + 14 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .display-4 {
- font-size: 41px
- }
-
-}
-
-.display-5 {
- font-size: 21px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .display-5 {
- font-size: calc(21px + 4 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .display-5 {
- font-size: calc(25px + 11 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .display-5 {
- font-size: 36px
- }
-
-}
-
-.form-control,
-input[type=email],
-input[type=name],
-input[type=number],
-input[type=password],
-input[type=text],
-textarea {
- font-family: Roboto, sans-serif;
- font-weight: 500;
- font-size: 14px
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .form-control,
- input[type=email],
- input[type=name],
- input[type=number],
- input[type=password],
- input[type=text],
- textarea {
- font-size: calc(14px + 0 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .form-control,
- input[type=email],
- input[type=name],
- input[type=number],
- input[type=password],
- input[type=text],
- textarea {
- font-size: calc(14px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .form-control,
- input[type=email],
- input[type=name],
- input[type=number],
- input[type=password],
- input[type=text],
- textarea {
- font-size: 13px
- }
-
-}
-
-.form-control.placeholder,
-input[type=email].placeholder,
-input[type=name].placeholder,
-input[type=number].placeholder,
-input[type=password].placeholder,
-input[type=text].placeholder,
-textarea.placeholder {
- font-family: inherit;
- font-size: inherit;
- color: #afb5ba;
- font-weight: inherit
-}
-
-.form-control:-moz-placeholder,
-input[type=email]:-moz-placeholder,
-input[type=name]:-moz-placeholder,
-input[type=number]:-moz-placeholder,
-input[type=password]:-moz-placeholder,
-input[type=text]:-moz-placeholder,
-textarea:-moz-placeholder {
- font-family: inherit;
- font-size: inherit;
- color: #afb5ba;
- font-weight: inherit
-}
-
-.form-control::-moz-placeholder,
-input[type=email]::-moz-placeholder,
-input[type=name]::-moz-placeholder,
-input[type=number]::-moz-placeholder,
-input[type=password]::-moz-placeholder,
-input[type=text]::-moz-placeholder,
-textarea::-moz-placeholder {
- font-family: inherit;
- font-size: inherit;
- color: #afb5ba;
- font-weight: inherit
-}
-
-.form-control:-ms-input-placeholder,
-input[type=email]:-ms-input-placeholder,
-input[type=name]:-ms-input-placeholder,
-input[type=number]:-ms-input-placeholder,
-input[type=password]:-ms-input-placeholder,
-input[type=text]:-ms-input-placeholder,
-textarea:-ms-input-placeholder {
- font-family: inherit;
- font-size: inherit;
- color: #afb5ba;
- font-weight: inherit
-}
-
-.form-control::-webkit-input-placeholder,
-input[type=email]::-webkit-input-placeholder,
-input[type=name]::-webkit-input-placeholder,
-input[type=number]::-webkit-input-placeholder,
-input[type=password]::-webkit-input-placeholder,
-input[type=text]::-webkit-input-placeholder,
-textarea::-webkit-input-placeholder {
- font-family: inherit;
- font-size: inherit;
- color: #afb5ba;
- font-weight: inherit
-}
-
-.grid-title {
- font-size: 14px;
- font-family: Roboto, sans-serif;
- font-weight: 500
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .grid-title {
- font-size: calc(14px + 1 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .grid-title {
- font-size: calc(15px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .grid-title {
- font-size: 14px
- }
-
-}
-
-.bootstrap-tagsinput .tag {
- font-size: 14px;
- font-family: Roboto, sans-serif;
- font-weight: 500
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .bootstrap-tagsinput .tag {
- font-size: calc(14px + 0 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .bootstrap-tagsinput .tag {
- font-size: calc(14px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .bootstrap-tagsinput .tag {
- font-size: 13px
- }
-
-}
-
-.font-weight-medium {
- font-weight: 500 !important
-}
-
-.font-weight-bold,
-.font-weight-bolder,
-.font-weight-medium {
- letter-spacing: 1px
-}
-
-/*!
- * Bootstrap v4.3.1 (https://getbootstrap.com/)
- * Copyright 2011-2019 The Bootstrap Authors
- * Copyright 2011-2019 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-:root {
- --blue: #007bff;
- --indigo: #6610f2;
- --purple: #6f42c1;
- --pink: #e83e8c;
- --red: #dc3545;
- --orange: #fd7e14;
- --yellow: #ffc107;
- --green: #28a745;
- --teal: #20c997;
- --cyan: #17a2b8;
- --white: #fff;
- --gray: #6c757d;
- --gray-dark: #343a40;
- --primary: #047006;
- --secondary: grey;
- --success: #00e093;
- --info: #6c61f6;
- --warning: #f0825f;
- --danger: #ff5f66;
- --light: #dfdfdf;
- --dark: #74767b;
- --white: #fff;
- --orange: #ffa600;
- --breakpoint-xs: 0;
- --breakpoint-sm: 576px;
- --breakpoint-md: 768px;
- --breakpoint-lg: 992px;
- --breakpoint-xl: 1200px;
- --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace
-}
-
-*,
-::after,
-::before {
- box-sizing: border-box
-}
-
-html {
- font-family: sans-serif;
- line-height: 1.15;
- -webkit-text-size-adjust: 100%;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
-}
-
-article,
-aside,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section {
- display: block
-}
-
-body {
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.7;
- color: #212529;
- text-align: left;
- background-color: #fff
-}
-
-[tabindex="-1"]:focus {
- outline: 0 !important
-}
-
-hr {
- box-sizing: content-box;
- height: 0;
- overflow: visible
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin-top: 0;
- margin-bottom: .5rem
-}
-
-p {
- margin-top: 0;
- margin-bottom: 1rem
-}
-
-abbr[data-original-title],
-abbr[title] {
- text-decoration: underline;
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
- cursor: help;
- border-bottom: 0;
- text-decoration-skip-ink: none
-}
-
-address {
- margin-bottom: 1rem;
- font-style: normal;
- line-height: inherit
-}
-
-dl,
-ol,
-ul {
- margin-top: 0;
- margin-bottom: 1rem
-}
-
-ol ol,
-ol ul,
-ul ol,
-ul ul {
- margin-bottom: 0
-}
-
-dt {
- font-weight: 700
-}
-
-dd {
- margin-bottom: .5rem;
- margin-left: 0
-}
-
-blockquote {
- margin: 0 0 1rem
-}
-
-b,
-strong {
- font-weight: bolder
-}
-
-small {
- font-size: 80%
-}
-
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline
-}
-
-sub {
- bottom: -.25em
-}
-
-sup {
- top: -.5em
-}
-
-a {
- color: #047006;
- text-decoration: none;
- background-color: transparent
-}
-
-a:hover {
- color: #012602;
- text-decoration: underline
-}
-
-a:not([href]):not([tabindex]) {
- color: inherit;
- text-decoration: none
-}
-
-a:not([href]):not([tabindex]):focus,
-a:not([href]):not([tabindex]):hover {
- color: inherit;
- text-decoration: none
-}
-
-a:not([href]):not([tabindex]):focus {
- outline: 0
-}
-
-code,
-kbd,
-pre,
-samp {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- font-size: 1em
-}
-
-pre {
- margin-top: 0;
- margin-bottom: 1rem;
- overflow: auto
-}
-
-figure {
- margin: 0 0 1rem
-}
-
-img {
- vertical-align: middle;
- border-style: none
-}
-
-svg {
- overflow: hidden;
- vertical-align: middle
-}
-
-table {
- border-collapse: collapse
-}
-
-caption {
- padding-top: 10px 15px;
- padding-bottom: 10px 15px;
- color: #6c757d;
- text-align: left;
- caption-side: bottom
-}
-
-th {
- text-align: inherit
-}
-
-label {
- display: inline-block;
- margin-bottom: .5rem
-}
-
-button {
- border-radius: 0
-}
-
-button:focus {
- outline: 1px dotted;
- outline: 5px auto -webkit-focus-ring-color
-}
-
-button,
-input,
-optgroup,
-select,
-textarea {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit
-}
-
-button,
-input {
- overflow: visible
-}
-
-button,
-select {
- text-transform: none
-}
-
-select {
- word-wrap: normal
-}
-
-[type=button],
-[type=reset],
-[type=submit],
-button {
- -webkit-appearance: button
-}
-
-[type=button]:not(:disabled),
-[type=reset]:not(:disabled),
-[type=submit]:not(:disabled),
-button:not(:disabled) {
- cursor: pointer
-}
-
-[type=button]::-moz-focus-inner,
-[type=reset]::-moz-focus-inner,
-[type=submit]::-moz-focus-inner,
-button::-moz-focus-inner {
- padding: 0;
- border-style: none
-}
-
-input[type=checkbox],
-input[type=radio] {
- box-sizing: border-box;
- padding: 0
-}
-
-input[type=date],
-input[type=datetime-local],
-input[type=month],
-input[type=time] {
- -webkit-appearance: listbox
-}
-
-textarea {
- overflow: auto;
- resize: vertical
-}
-
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0
-}
-
-legend {
- display: block;
- width: 100%;
- max-width: 100%;
- padding: 0;
- margin-bottom: .5rem;
- font-size: 1.5rem;
- line-height: inherit;
- color: inherit;
- white-space: normal
-}
-
-progress {
- vertical-align: baseline
-}
-
-[type=number]::-webkit-inner-spin-button,
-[type=number]::-webkit-outer-spin-button {
- height: auto
-}
-
-[type=search] {
- outline-offset: -2px;
- -webkit-appearance: none
-}
-
-[type=search]::-webkit-search-decoration {
- -webkit-appearance: none
-}
-
-::-webkit-file-upload-button {
- font: inherit;
- -webkit-appearance: button
-}
-
-output {
- display: inline-block
-}
-
-summary {
- display: list-item;
- cursor: pointer
-}
-
-template {
- display: none
-}
-
-[hidden] {
- display: none !important
-}
-
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin-bottom: .5rem;
- font-weight: 500;
- line-height: 1.2
-}
-
-.h1,
-h1 {
- font-size: 2.5rem
-}
-
-.h2,
-h2 {
- font-size: 2rem
-}
-
-.h3,
-h3 {
- font-size: 1.75rem
-}
-
-.h4,
-h4 {
- font-size: 1.5rem
-}
-
-.h5,
-h5 {
- font-size: 1.25rem
-}
-
-.h6,
-h6 {
- font-size: 1rem
-}
-
-.lead {
- font-size: 1.25rem;
- font-weight: 300
-}
-
-.display-1 {
- font-size: 6rem;
- font-weight: 300;
- line-height: 1.2
-}
-
-.display-2 {
- font-size: 5.5rem;
- font-weight: 300;
- line-height: 1.2
-}
-
-.display-3 {
- font-size: 4.5rem;
- font-weight: 300;
- line-height: 1.2
-}
-
-.display-4 {
- font-size: 3.5rem;
- font-weight: 300;
- line-height: 1.2
-}
-
-hr {
- margin-top: 1rem;
- margin-bottom: 1rem;
- border: 0;
- border-top: 1px solid rgba(0, 0, 0, .1)
-}
-
-.small,
-small {
- font-size: 80%;
- font-weight: 400
-}
-
-.mark,
-mark {
- padding: .2em;
- background-color: #fcf8e3
-}
-
-.list-unstyled {
- padding-left: 0;
- list-style: none
-}
-
-.list-inline {
- padding-left: 0;
- list-style: none
-}
-
-.list-inline-item {
- display: inline-block
-}
-
-.list-inline-item:not(:last-child) {
- margin-right: .5rem
-}
-
-.initialism {
- font-size: 90%;
- text-transform: uppercase
-}
-
-.blockquote {
- margin-bottom: 1rem;
- font-size: 1.25rem
-}
-
-.blockquote-footer {
- display: block;
- font-size: 80%;
- color: #6c757d
-}
-
-.blockquote-footer::before {
- content: "\2014\00A0"
-}
-
-.img-fluid {
- max-width: 100%;
- height: auto
-}
-
-.img-thumbnail {
- padding: .25rem;
- background-color: #fff;
- border: 1px solid #dee2e6;
- border-radius: .25rem;
- max-width: 100%;
- height: auto
-}
-
-.figure {
- display: inline-block
-}
-
-.figure-img {
- margin-bottom: .5rem;
- line-height: 1
-}
-
-.figure-caption {
- font-size: 90%;
- color: #6c757d
-}
-
-code {
- font-size: 90%;
- color: #bd4147;
- word-break: break-word
-}
-
-a>code {
- color: inherit
-}
-
-kbd {
- padding: .2rem .4rem;
- font-size: 87.5%;
- color: #fff;
- background-color: #212529;
- border-radius: .2rem
-}
-
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: 700
-}
-
-pre {
- display: block;
- font-size: 90%;
- color: #212529
-}
-
-pre code {
- font-size: inherit;
- color: inherit;
- word-break: normal
-}
-
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll
-}
-
-.container {
- width: 100%;
- padding-right: 10px;
- padding-left: 10px;
- margin-right: auto;
- margin-left: auto
-}
-
-@media (min-width:576px) {
- .container {
- max-width: 540px
- }
-
-}
-
-@media (min-width:768px) {
- .container {
- max-width: 720px
- }
-
-}
-
-@media (min-width:992px) {
- .container {
- max-width: 960px
- }
-
-}
-
-@media (min-width:1200px) {
- .container {
- max-width: 1140px
- }
-
-}
-
-.container-fluid {
- width: 100%;
- padding-right: 10px;
- padding-left: 10px;
- margin-right: auto;
- margin-left: auto
-}
-
-.row {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- margin-right: -10px;
- margin-left: -10px
-}
-
-.no-gutters {
- margin-right: 0;
- margin-left: 0
-}
-
-.no-gutters>.col,
-.no-gutters>[class*=col-] {
- padding-right: 0;
- padding-left: 0
-}
-
-.col,
-.col-1,
-.col-10,
-.col-11,
-.col-12,
-.col-2,
-.col-3,
-.col-4,
-.col-5,
-.col-6,
-.col-7,
-.col-8,
-.col-9,
-.col-auto,
-.col-lg,
-.col-lg-1,
-.col-lg-10,
-.col-lg-11,
-.col-lg-12,
-.col-lg-2,
-.col-lg-3,
-.col-lg-4,
-.col-lg-5,
-.col-lg-6,
-.col-lg-7,
-.col-lg-8,
-.col-lg-9,
-.col-lg-auto,
-.col-md,
-.col-md-1,
-.col-md-10,
-.col-md-11,
-.col-md-12,
-.col-md-2,
-.col-md-3,
-.col-md-4,
-.col-md-5,
-.col-md-6,
-.col-md-7,
-.col-md-8,
-.col-md-9,
-.col-md-auto,
-.col-sm,
-.col-sm-1,
-.col-sm-10,
-.col-sm-11,
-.col-sm-12,
-.col-sm-2,
-.col-sm-3,
-.col-sm-4,
-.col-sm-5,
-.col-sm-6,
-.col-sm-7,
-.col-sm-8,
-.col-sm-9,
-.col-sm-auto,
-.col-xl,
-.col-xl-1,
-.col-xl-10,
-.col-xl-11,
-.col-xl-12,
-.col-xl-2,
-.col-xl-3,
-.col-xl-4,
-.col-xl-5,
-.col-xl-6,
-.col-xl-7,
-.col-xl-8,
-.col-xl-9,
-.col-xl-auto {
- position: relative;
- width: 100%;
- padding-right: 10px;
- padding-left: 10px
-}
-
-.col {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
-}
-
-.col-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
-}
-
-.col-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
-}
-
-.col-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
-}
-
-.col-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
-}
-
-.col-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
-}
-
-.col-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
-}
-
-.col-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
-}
-
-.col-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
-}
-
-.col-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
-}
-
-.col-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
-}
-
-.col-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
-}
-
-.col-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
-}
-
-.col-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
-}
-
-.order-first {
- -webkit-box-ordinal-group: 0;
- order: -1
-}
-
-.order-last {
- -webkit-box-ordinal-group: 14;
- order: 13
-}
-
-.order-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
-}
-
-.order-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
-}
-
-.order-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
-}
-
-.order-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
-}
-
-.order-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
-}
-
-.order-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
-}
-
-.order-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
-}
-
-.order-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
-}
-
-.order-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
-}
-
-.order-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
-}
-
-.order-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
-}
-
-.order-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
-}
-
-.order-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
-}
-
-.offset-1 {
- margin-left: 8.33333%
-}
-
-.offset-2 {
- margin-left: 16.66667%
-}
-
-.offset-3 {
- margin-left: 25%
-}
-
-.offset-4 {
- margin-left: 33.33333%
-}
-
-.offset-5 {
- margin-left: 41.66667%
-}
-
-.offset-6 {
- margin-left: 50%
-}
-
-.offset-7 {
- margin-left: 58.33333%
-}
-
-.offset-8 {
- margin-left: 66.66667%
-}
-
-.offset-9 {
- margin-left: 75%
-}
-
-.offset-10 {
- margin-left: 83.33333%
-}
-
-.offset-11 {
- margin-left: 91.66667%
-}
-
-@media (min-width:576px) {
- .col-sm {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
- }
-
- .col-sm-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
- }
-
- .col-sm-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
- }
-
- .col-sm-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
- }
-
- .col-sm-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
- }
-
- .col-sm-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
- }
-
- .col-sm-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
- }
-
- .col-sm-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
- }
-
- .col-sm-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
- }
-
- .col-sm-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
- }
-
- .col-sm-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
- }
-
- .col-sm-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
- }
-
- .col-sm-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
- }
-
- .col-sm-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
- }
-
- .order-sm-first {
- -webkit-box-ordinal-group: 0;
- order: -1
- }
-
- .order-sm-last {
- -webkit-box-ordinal-group: 14;
- order: 13
- }
-
- .order-sm-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
- }
-
- .order-sm-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
- }
-
- .order-sm-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
- }
-
- .order-sm-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
- }
-
- .order-sm-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
- }
-
- .order-sm-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
- }
-
- .order-sm-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
- }
-
- .order-sm-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
- }
-
- .order-sm-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
- }
-
- .order-sm-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
- }
-
- .order-sm-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
- }
-
- .order-sm-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
- }
-
- .order-sm-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
- }
-
- .offset-sm-0 {
- margin-left: 0
- }
-
- .offset-sm-1 {
- margin-left: 8.33333%
- }
-
- .offset-sm-2 {
- margin-left: 16.66667%
- }
-
- .offset-sm-3 {
- margin-left: 25%
- }
-
- .offset-sm-4 {
- margin-left: 33.33333%
- }
-
- .offset-sm-5 {
- margin-left: 41.66667%
- }
-
- .offset-sm-6 {
- margin-left: 50%
- }
-
- .offset-sm-7 {
- margin-left: 58.33333%
- }
-
- .offset-sm-8 {
- margin-left: 66.66667%
- }
-
- .offset-sm-9 {
- margin-left: 75%
- }
-
- .offset-sm-10 {
- margin-left: 83.33333%
- }
-
- .offset-sm-11 {
- margin-left: 91.66667%
- }
-
-}
-
-@media (min-width:768px) {
- .col-md {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
- }
-
- .col-md-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
- }
-
- .col-md-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
- }
-
- .col-md-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
- }
-
- .col-md-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
- }
-
- .col-md-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
- }
-
- .col-md-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
- }
-
- .col-md-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
- }
-
- .col-md-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
- }
-
- .col-md-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
- }
-
- .col-md-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
- }
-
- .col-md-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
- }
-
- .col-md-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
- }
-
- .col-md-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
- }
-
- .order-md-first {
- -webkit-box-ordinal-group: 0;
- order: -1
- }
-
- .order-md-last {
- -webkit-box-ordinal-group: 14;
- order: 13
- }
-
- .order-md-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
- }
-
- .order-md-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
- }
-
- .order-md-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
- }
-
- .order-md-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
- }
-
- .order-md-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
- }
-
- .order-md-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
- }
-
- .order-md-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
- }
-
- .order-md-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
- }
-
- .order-md-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
- }
-
- .order-md-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
- }
-
- .order-md-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
- }
-
- .order-md-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
- }
-
- .order-md-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
- }
-
- .offset-md-0 {
- margin-left: 0
- }
-
- .offset-md-1 {
- margin-left: 8.33333%
- }
-
- .offset-md-2 {
- margin-left: 16.66667%
- }
-
- .offset-md-3 {
- margin-left: 25%
- }
-
- .offset-md-4 {
- margin-left: 33.33333%
- }
-
- .offset-md-5 {
- margin-left: 41.66667%
- }
-
- .offset-md-6 {
- margin-left: 50%
- }
-
- .offset-md-7 {
- margin-left: 58.33333%
- }
-
- .offset-md-8 {
- margin-left: 66.66667%
- }
-
- .offset-md-9 {
- margin-left: 75%
- }
-
- .offset-md-10 {
- margin-left: 83.33333%
- }
-
- .offset-md-11 {
- margin-left: 91.66667%
- }
-
-}
-
-@media (min-width:992px) {
- .col-lg {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
- }
-
- .col-lg-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
- }
-
- .col-lg-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
- }
-
- .col-lg-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
- }
-
- .col-lg-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
- }
-
- .col-lg-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
- }
-
- .col-lg-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
- }
-
- .col-lg-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
- }
-
- .col-lg-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
- }
-
- .col-lg-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
- }
-
- .col-lg-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
- }
-
- .col-lg-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
- }
-
- .col-lg-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
- }
-
- .col-lg-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
- }
-
- .order-lg-first {
- -webkit-box-ordinal-group: 0;
- order: -1
- }
-
- .order-lg-last {
- -webkit-box-ordinal-group: 14;
- order: 13
- }
-
- .order-lg-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
- }
-
- .order-lg-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
- }
-
- .order-lg-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
- }
-
- .order-lg-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
- }
-
- .order-lg-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
- }
-
- .order-lg-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
- }
-
- .order-lg-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
- }
-
- .order-lg-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
- }
-
- .order-lg-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
- }
-
- .order-lg-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
- }
-
- .order-lg-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
- }
-
- .order-lg-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
- }
-
- .order-lg-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
- }
-
- .offset-lg-0 {
- margin-left: 0
- }
-
- .offset-lg-1 {
- margin-left: 8.33333%
- }
-
- .offset-lg-2 {
- margin-left: 16.66667%
- }
-
- .offset-lg-3 {
- margin-left: 25%
- }
-
- .offset-lg-4 {
- margin-left: 33.33333%
- }
-
- .offset-lg-5 {
- margin-left: 41.66667%
- }
-
- .offset-lg-6 {
- margin-left: 50%
- }
-
- .offset-lg-7 {
- margin-left: 58.33333%
- }
-
- .offset-lg-8 {
- margin-left: 66.66667%
- }
-
- .offset-lg-9 {
- margin-left: 75%
- }
-
- .offset-lg-10 {
- margin-left: 83.33333%
- }
-
- .offset-lg-11 {
- margin-left: 91.66667%
- }
-
-}
-
-@media (min-width:1200px) {
- .col-xl {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
- }
-
- .col-xl-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
- }
-
- .col-xl-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
- }
-
- .col-xl-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
- }
-
- .col-xl-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
- }
-
- .col-xl-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
- }
-
- .col-xl-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
- }
-
- .col-xl-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
- }
-
- .col-xl-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
- }
-
- .col-xl-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
- }
-
- .col-xl-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
- }
-
- .col-xl-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
- }
-
- .col-xl-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
- }
-
- .col-xl-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
- }
-
- .order-xl-first {
- -webkit-box-ordinal-group: 0;
- order: -1
- }
-
- .order-xl-last {
- -webkit-box-ordinal-group: 14;
- order: 13
- }
-
- .order-xl-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
- }
-
- .order-xl-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
- }
-
- .order-xl-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
- }
-
- .order-xl-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
- }
-
- .order-xl-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
- }
-
- .order-xl-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
- }
-
- .order-xl-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
- }
-
- .order-xl-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
- }
-
- .order-xl-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
- }
-
- .order-xl-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
- }
-
- .order-xl-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
- }
-
- .order-xl-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
- }
-
- .order-xl-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
- }
-
- .offset-xl-0 {
- margin-left: 0
- }
-
- .offset-xl-1 {
- margin-left: 8.33333%
- }
-
- .offset-xl-2 {
- margin-left: 16.66667%
- }
-
- .offset-xl-3 {
- margin-left: 25%
- }
-
- .offset-xl-4 {
- margin-left: 33.33333%
- }
-
- .offset-xl-5 {
- margin-left: 41.66667%
- }
-
- .offset-xl-6 {
- margin-left: 50%
- }
-
- .offset-xl-7 {
- margin-left: 58.33333%
- }
-
- .offset-xl-8 {
- margin-left: 66.66667%
- }
-
- .offset-xl-9 {
- margin-left: 75%
- }
-
- .offset-xl-10 {
- margin-left: 83.33333%
- }
-
- .offset-xl-11 {
- margin-left: 91.66667%
- }
-
-}
-
-.table {
- width: 100%;
- margin-bottom: 1rem;
- color: #212529
-}
-
-.table td,
-.table th {
- padding: 10px 15px;
- vertical-align: top;
- border-top: 1px solid #f2f4f9
-}
-
-.table thead th {
- vertical-align: bottom;
- border-bottom: 2px solid #f2f4f9
-}
-
-.table tbody+tbody {
- border-top: 2px solid #f2f4f9
-}
-
-.table-sm td,
-.table-sm th {
- padding: 10px 15px
-}
-
-.table-bordered {
- border: 1px solid #f2f4f9
-}
-
-.table-bordered td,
-.table-bordered th {
- border: 1px solid #f2f4f9
-}
-
-.table-bordered thead td,
-.table-bordered thead th {
- border-bottom-width: 2px
-}
-
-.table-borderless tbody+tbody,
-.table-borderless td,
-.table-borderless th,
-.table-borderless thead th {
- border: 0
-}
-
-.table-striped tbody tr:nth-of-type(odd) {
- background-color: #f6f7f9
-}
-
-.table-hover tbody tr:hover {
- color: #212529;
- background-color: #f6f7f9
-}
-
-.table-primary,
-.table-primary>td,
-.table-primary>th {
- background-color: #b9d7b9
-}
-
-.table-primary tbody+tbody,
-.table-primary td,
-.table-primary th,
-.table-primary thead th {
- border-color: #7cb57e
-}
-
-.table-hover .table-primary:hover {
- background-color: #a9cea9
-}
-
-.table-hover .table-primary:hover>td,
-.table-hover .table-primary:hover>th {
- background-color: #a9cea9
-}
-
-.table-secondary,
-.table-secondary>td,
-.table-secondary>th {
- background-color: #dbdbdb
-}
-
-.table-secondary tbody+tbody,
-.table-secondary td,
-.table-secondary th,
-.table-secondary thead th {
- border-color: #bdbdbd
-}
-
-.table-hover .table-secondary:hover {
- background-color: #cecece
-}
-
-.table-hover .table-secondary:hover>td,
-.table-hover .table-secondary:hover>th {
- background-color: #cecece
-}
-
-.table-success,
-.table-success>td,
-.table-success>th {
- background-color: #b8f6e1
-}
-
-.table-success tbody+tbody,
-.table-success td,
-.table-success th,
-.table-success thead th {
- border-color: #7aefc7
-}
-
-.table-hover .table-success:hover {
- background-color: #a1f3d7
-}
-
-.table-hover .table-success:hover>td,
-.table-hover .table-success:hover>th {
- background-color: #a1f3d7
-}
-
-.table-info,
-.table-info>td,
-.table-info>th {
- background-color: #d6d3fc
-}
-
-.table-info tbody+tbody,
-.table-info td,
-.table-info th,
-.table-info thead th {
- border-color: #b3adfa
-}
-
-.table-hover .table-info:hover {
- background-color: #c0bbfa
-}
-
-.table-hover .table-info:hover>td,
-.table-hover .table-info:hover>th {
- background-color: #c0bbfa
-}
-
-.table-warning,
-.table-warning>td,
-.table-warning>th {
- background-color: #fbdcd2
-}
-
-.table-warning tbody+tbody,
-.table-warning td,
-.table-warning th,
-.table-warning thead th {
- border-color: #f7beac
-}
-
-.table-hover .table-warning:hover {
- background-color: #f9cabb
-}
-
-.table-hover .table-warning:hover>td,
-.table-hover .table-warning:hover>th {
- background-color: #f9cabb
-}
-
-.table-danger,
-.table-danger>td,
-.table-danger>th {
- background-color: #ffd2d4
-}
-
-.table-danger tbody+tbody,
-.table-danger td,
-.table-danger th,
-.table-danger thead th {
- border-color: #ffacaf
-}
-
-.table-hover .table-danger:hover {
- background-color: #ffb9bc
-}
-
-.table-hover .table-danger:hover>td,
-.table-hover .table-danger:hover>th {
- background-color: #ffb9bc
-}
-
-.table-light,
-.table-light>td,
-.table-light>th {
- background-color: #f6f6f6
-}
-
-.table-light tbody+tbody,
-.table-light td,
-.table-light th,
-.table-light thead th {
- border-color: #eee
-}
-
-.table-hover .table-light:hover {
- background-color: #e9e9e9
-}
-
-.table-hover .table-light:hover>td,
-.table-hover .table-light:hover>th {
- background-color: #e9e9e9
-}
-
-.table-dark,
-.table-dark>td,
-.table-dark>th {
- background-color: #d8d9da
-}
-
-.table-dark tbody+tbody,
-.table-dark td,
-.table-dark th,
-.table-dark thead th {
- border-color: #b7b8ba
-}
-
-.table-hover .table-dark:hover {
- background-color: #cbccce
-}
-
-.table-hover .table-dark:hover>td,
-.table-hover .table-dark:hover>th {
- background-color: #cbccce
-}
-
-.table-white,
-.table-white>td,
-.table-white>th {
- background-color: #fff
-}
-
-.table-white tbody+tbody,
-.table-white td,
-.table-white th,
-.table-white thead th {
- border-color: #fff
-}
-
-.table-hover .table-white:hover {
- background-color: #f2f2f2
-}
-
-.table-hover .table-white:hover>td,
-.table-hover .table-white:hover>th {
- background-color: #f2f2f2
-}
-
-.table-orange,
-.table-orange>td,
-.table-orange>th {
- background-color: #ffe6b8
-}
-
-.table-orange tbody+tbody,
-.table-orange td,
-.table-orange th,
-.table-orange thead th {
- border-color: #ffd17a
-}
-
-.table-hover .table-orange:hover {
- background-color: #ffdd9f
-}
-
-.table-hover .table-orange:hover>td,
-.table-hover .table-orange:hover>th {
- background-color: #ffdd9f
-}
-
-.table-active,
-.table-active>td,
-.table-active>th {
- background-color: rgba(0, 0, 0, .075)
-}
-
-.table-hover .table-active:hover {
- background-color: rgba(0, 0, 0, .075)
-}
-
-.table-hover .table-active:hover>td,
-.table-hover .table-active:hover>th {
- background-color: rgba(0, 0, 0, .075)
-}
-
-.table .thead-dark th {
- color: #fff;
- background-color: #343a40;
- border-color: #454d55
-}
-
-.table .thead-light th {
- color: #495057;
- background-color: #e1e4e6;
- border-color: #f2f4f9
-}
-
-.table-dark {
- color: #fff;
- background-color: #343a40
-}
-
-.table-dark td,
-.table-dark th,
-.table-dark thead th {
- border-color: #454d55
-}
-
-.table-dark.table-bordered {
- border: 0
-}
-
-.table-dark.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(255, 255, 255, .05)
-}
-
-.table-dark.table-hover tbody tr:hover {
- color: #fff;
- background-color: rgba(255, 255, 255, .075)
-}
-
-@media (max-width:575.98px) {
- .table-responsive-sm {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
- }
-
- .table-responsive-sm>.table-bordered {
- border: 0
- }
-
-}
-
-@media (max-width:767.98px) {
- .table-responsive-md {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
- }
-
- .table-responsive-md>.table-bordered {
- border: 0
- }
-
-}
-
-@media (max-width:991.98px) {
- .table-responsive-lg {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
- }
-
- .table-responsive-lg>.table-bordered {
- border: 0
- }
-
-}
-
-@media (max-width:1199.98px) {
- .table-responsive-xl {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
- }
-
- .table-responsive-xl>.table-bordered {
- border: 0
- }
-
-}
-
-.table-responsive {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
-}
-
-.table-responsive>.table-bordered {
- border: 0
-}
-
-.form-control {
- display: block;
- width: 100%;
- height: calc(1.5em + .75rem + 2px);
- padding: .375rem .75rem;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #6c757d;
- background-color: #f6f7f9;
- background-clip: padding-box;
- border: 1px solid #f0f2f5;
- border-radius: .25rem;
- -webkit-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .form-control {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.form-control::-ms-expand {
- background-color: transparent;
- border: 0
-}
-
-.form-control:focus {
- color: #495057;
- background-color: #f6f7f9;
- border-color: #d7dee5;
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.form-control::-webkit-input-placeholder {
- color: #6c757d;
- opacity: 1
-}
-
-.form-control::-moz-placeholder {
- color: #6c757d;
- opacity: 1
-}
-
-.form-control::-ms-input-placeholder {
- color: #6c757d;
- opacity: 1
-}
-
-.form-control::placeholder {
- color: #6c757d;
- opacity: 1
-}
-
-.form-control:disabled,
-.form-control[readonly] {
- background-color: #f8f9fa;
- opacity: 1
-}
-
-select.form-control:focus::-ms-value {
- color: #6c757d;
- background-color: #f6f7f9
-}
-
-.form-control-file,
-.form-control-range {
- display: block;
- width: 100%
-}
-
-.col-form-label {
- padding-top: calc(.375rem + 1px);
- padding-bottom: calc(.375rem + 1px);
- margin-bottom: 0;
- font-size: inherit;
- line-height: 1.5
-}
-
-.col-form-label-lg {
- padding-top: calc(.5rem + 1px);
- padding-bottom: calc(.5rem + 1px);
- font-size: 1.25rem;
- line-height: 1.5
-}
-
-.col-form-label-sm {
- padding-top: calc(.25rem + 1px);
- padding-bottom: calc(.25rem + 1px);
- font-size: .875rem;
- line-height: 1.5
-}
-
-.form-control-plaintext {
- display: block;
- width: 100%;
- padding-top: .375rem;
- padding-bottom: .375rem;
- margin-bottom: 0;
- line-height: 1.5;
- color: #212529;
- background-color: transparent;
- border: solid transparent;
- border-width: 1px 0
-}
-
-.form-control-plaintext.form-control-lg,
-.form-control-plaintext.form-control-sm {
- padding-right: 0;
- padding-left: 0
-}
-
-.form-control-sm {
- height: calc(1.5em + .5rem + 2px);
- padding: .25rem .5rem;
- font-size: .875rem;
- line-height: 1.5;
- border-radius: .2rem
-}
-
-.form-control-lg {
- height: calc(1.5em + 1rem + 2px);
- padding: .5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: .3rem
-}
-
-select.form-control[multiple],
-select.form-control[size] {
- height: auto
-}
-
-textarea.form-control {
- height: auto
-}
-
-.form-group {
- margin-bottom: 1rem
-}
-
-.form-text {
- display: block;
- margin-top: .25rem
-}
-
-.form-row {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- margin-right: -5px;
- margin-left: -5px
-}
-
-.form-row>.col,
-.form-row>[class*=col-] {
- padding-right: 5px;
- padding-left: 5px
-}
-
-.form-check {
- position: relative;
- display: block;
- padding-left: 1.25rem
-}
-
-.form-check-input {
- position: absolute;
- margin-top: .3rem;
- margin-left: -1.25rem
-}
-
-.form-check-input:disabled~.form-check-label {
- color: #adb5bd
-}
-
-.form-check-label {
- margin-bottom: 0
-}
-
-.form-check-inline {
- display: -webkit-inline-box;
- display: inline-flex;
- -webkit-box-align: center;
- align-items: center;
- padding-left: 0;
- margin-right: .75rem
-}
-
-.form-check-inline .form-check-input {
- position: static;
- margin-top: 0;
- margin-right: .3125rem;
- margin-left: 0
-}
-
-.valid-feedback {
- display: none;
- width: 100%;
- margin-top: .25rem;
- font-size: 80%;
- color: #28a745
-}
-
-.valid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: .25rem .5rem;
- margin-top: .1rem;
- font-size: .875rem;
- line-height: 1.5;
- color: #fff;
- background-color: rgba(40, 167, 69, .9);
- border-radius: .25rem
-}
-
-.form-control.is-valid,
-.was-validated .form-control:valid {
- border-color: #28a745;
- padding-right: calc(1.5em + .75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e");
- background-repeat: no-repeat;
- background-position: center right calc(.375em + .1875rem);
- background-size: calc(.75em + .375rem) calc(.75em + .375rem)
-}
-
-.form-control.is-valid:focus,
-.was-validated .form-control:valid:focus {
- border-color: #28a745;
- box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25)
-}
-
-.form-control.is-valid~.valid-feedback,
-.form-control.is-valid~.valid-tooltip,
-.was-validated .form-control:valid~.valid-feedback,
-.was-validated .form-control:valid~.valid-tooltip {
- display: block
-}
-
-.was-validated textarea.form-control:valid,
-textarea.form-control.is-valid {
- padding-right: calc(1.5em + .75rem);
- background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem)
-}
-
-.custom-select.is-valid,
-.was-validated .custom-select:valid {
- border-color: #28a745;
- padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem);
- background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)
-}
-
-.custom-select.is-valid:focus,
-.was-validated .custom-select:valid:focus {
- border-color: #28a745;
- box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25)
-}
-
-.custom-select.is-valid~.valid-feedback,
-.custom-select.is-valid~.valid-tooltip,
-.was-validated .custom-select:valid~.valid-feedback,
-.was-validated .custom-select:valid~.valid-tooltip {
- display: block
-}
-
-.form-control-file.is-valid~.valid-feedback,
-.form-control-file.is-valid~.valid-tooltip,
-.was-validated .form-control-file:valid~.valid-feedback,
-.was-validated .form-control-file:valid~.valid-tooltip {
- display: block
-}
-
-.form-check-input.is-valid~.form-check-label,
-.was-validated .form-check-input:valid~.form-check-label {
- color: #28a745
-}
-
-.form-check-input.is-valid~.valid-feedback,
-.form-check-input.is-valid~.valid-tooltip,
-.was-validated .form-check-input:valid~.valid-feedback,
-.was-validated .form-check-input:valid~.valid-tooltip {
- display: block
-}
-
-.custom-control-input.is-valid~.custom-control-label,
-.was-validated .custom-control-input:valid~.custom-control-label {
- color: #28a745
-}
-
-.custom-control-input.is-valid~.custom-control-label::before,
-.was-validated .custom-control-input:valid~.custom-control-label::before {
- border-color: #28a745
-}
-
-.custom-control-input.is-valid~.valid-feedback,
-.custom-control-input.is-valid~.valid-tooltip,
-.was-validated .custom-control-input:valid~.valid-feedback,
-.was-validated .custom-control-input:valid~.valid-tooltip {
- display: block
-}
-
-.custom-control-input.is-valid:checked~.custom-control-label::before,
-.was-validated .custom-control-input:valid:checked~.custom-control-label::before {
- border-color: #34ce57;
- background-color: #34ce57
-}
-
-.custom-control-input.is-valid:focus~.custom-control-label::before,
-.was-validated .custom-control-input:valid:focus~.custom-control-label::before {
- box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25)
-}
-
-.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,
-.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before {
- border-color: #28a745
-}
-
-.custom-file-input.is-valid~.custom-file-label,
-.was-validated .custom-file-input:valid~.custom-file-label {
- border-color: #28a745
-}
-
-.custom-file-input.is-valid~.valid-feedback,
-.custom-file-input.is-valid~.valid-tooltip,
-.was-validated .custom-file-input:valid~.valid-feedback,
-.was-validated .custom-file-input:valid~.valid-tooltip {
- display: block
-}
-
-.custom-file-input.is-valid:focus~.custom-file-label,
-.was-validated .custom-file-input:valid:focus~.custom-file-label {
- border-color: #28a745;
- box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25)
-}
-
-.invalid-feedback {
- display: none;
- width: 100%;
- margin-top: .25rem;
- font-size: 80%;
- color: #dc3545
-}
-
-.invalid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: .25rem .5rem;
- margin-top: .1rem;
- font-size: .875rem;
- line-height: 1.5;
- color: #fff;
- background-color: rgba(220, 53, 69, .9);
- border-radius: .25rem
-}
-
-.form-control.is-invalid,
-.was-validated .form-control:invalid {
- border-color: #dc3545;
- padding-right: calc(1.5em + .75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E");
- background-repeat: no-repeat;
- background-position: center right calc(.375em + .1875rem);
- background-size: calc(.75em + .375rem) calc(.75em + .375rem)
-}
-
-.form-control.is-invalid:focus,
-.was-validated .form-control:invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25)
-}
-
-.form-control.is-invalid~.invalid-feedback,
-.form-control.is-invalid~.invalid-tooltip,
-.was-validated .form-control:invalid~.invalid-feedback,
-.was-validated .form-control:invalid~.invalid-tooltip {
- display: block
-}
-
-.was-validated textarea.form-control:invalid,
-textarea.form-control.is-invalid {
- padding-right: calc(1.5em + .75rem);
- background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem)
-}
-
-.custom-select.is-invalid,
-.was-validated .custom-select:invalid {
- border-color: #dc3545;
- padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem);
- background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)
-}
-
-.custom-select.is-invalid:focus,
-.was-validated .custom-select:invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25)
-}
-
-.custom-select.is-invalid~.invalid-feedback,
-.custom-select.is-invalid~.invalid-tooltip,
-.was-validated .custom-select:invalid~.invalid-feedback,
-.was-validated .custom-select:invalid~.invalid-tooltip {
- display: block
-}
-
-.form-control-file.is-invalid~.invalid-feedback,
-.form-control-file.is-invalid~.invalid-tooltip,
-.was-validated .form-control-file:invalid~.invalid-feedback,
-.was-validated .form-control-file:invalid~.invalid-tooltip {
- display: block
-}
-
-.form-check-input.is-invalid~.form-check-label,
-.was-validated .form-check-input:invalid~.form-check-label {
- color: #dc3545
-}
-
-.form-check-input.is-invalid~.invalid-feedback,
-.form-check-input.is-invalid~.invalid-tooltip,
-.was-validated .form-check-input:invalid~.invalid-feedback,
-.was-validated .form-check-input:invalid~.invalid-tooltip {
- display: block
-}
-
-.custom-control-input.is-invalid~.custom-control-label,
-.was-validated .custom-control-input:invalid~.custom-control-label {
- color: #dc3545
-}
-
-.custom-control-input.is-invalid~.custom-control-label::before,
-.was-validated .custom-control-input:invalid~.custom-control-label::before {
- border-color: #dc3545
-}
-
-.custom-control-input.is-invalid~.invalid-feedback,
-.custom-control-input.is-invalid~.invalid-tooltip,
-.was-validated .custom-control-input:invalid~.invalid-feedback,
-.was-validated .custom-control-input:invalid~.invalid-tooltip {
- display: block
-}
-
-.custom-control-input.is-invalid:checked~.custom-control-label::before,
-.was-validated .custom-control-input:invalid:checked~.custom-control-label::before {
- border-color: #e4606d;
- background-color: #e4606d
-}
-
-.custom-control-input.is-invalid:focus~.custom-control-label::before,
-.was-validated .custom-control-input:invalid:focus~.custom-control-label::before {
- box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25)
-}
-
-.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,
-.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before {
- border-color: #dc3545
-}
-
-.custom-file-input.is-invalid~.custom-file-label,
-.was-validated .custom-file-input:invalid~.custom-file-label {
- border-color: #dc3545
-}
-
-.custom-file-input.is-invalid~.invalid-feedback,
-.custom-file-input.is-invalid~.invalid-tooltip,
-.was-validated .custom-file-input:invalid~.invalid-feedback,
-.was-validated .custom-file-input:invalid~.invalid-tooltip {
- display: block
-}
-
-.custom-file-input.is-invalid:focus~.custom-file-label,
-.was-validated .custom-file-input:invalid:focus~.custom-file-label {
- border-color: #dc3545;
- box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25)
-}
-
-.form-inline {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row wrap;
- -webkit-box-align: center;
- align-items: center
-}
-
-.form-inline .form-check {
- width: 100%
-}
-
-@media (min-width:576px) {
- .form-inline label {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center;
- margin-bottom: 0
- }
-
- .form-inline .form-group {
- display: -webkit-box;
- display: flex;
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row wrap;
- -webkit-box-align: center;
- align-items: center;
- margin-bottom: 0
- }
-
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle
- }
-
- .form-inline .form-control-plaintext {
- display: inline-block
- }
-
- .form-inline .custom-select,
- .form-inline .input-group {
- width: auto
- }
-
- .form-inline .form-check {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center;
- width: auto;
- padding-left: 0
- }
-
- .form-inline .form-check-input {
- position: relative;
- flex-shrink: 0;
- margin-top: 0;
- margin-right: .25rem;
- margin-left: 0
- }
-
- .form-inline .custom-control {
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center
- }
-
- .form-inline .custom-control-label {
- margin-bottom: 0
- }
-
-}
-
-.btn {
- display: inline-block;
- font-weight: 400;
- color: #212529;
- text-align: center;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: .375rem .75rem;
- font-size: 1rem;
- line-height: 1.5;
- border-radius: .25rem;
- -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .btn {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.btn:hover {
- color: #212529;
- text-decoration: none
-}
-
-.btn.focus,
-.btn:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.btn.disabled,
-.btn:disabled {
- opacity: .65
-}
-
-a.btn.disabled,
-fieldset:disabled a.btn {
- pointer-events: none
-}
-
-.btn-primary {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-primary:hover {
- color: #fff;
- background-color: #034b04;
- border-color: #023f03
-}
-
-.btn-primary.focus,
-.btn-primary:focus {
- box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5)
-}
-
-.btn-primary.disabled,
-.btn-primary:disabled {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-primary:not(:disabled):not(.disabled).active,
-.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle {
- color: #fff;
- background-color: #023f03;
- border-color: #023203
-}
-
-.btn-primary:not(:disabled):not(.disabled).active:focus,
-.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5)
-}
-
-.btn-secondary {
- color: #fff;
- background-color: grey;
- border-color: grey
-}
-
-.btn-secondary:hover {
- color: #fff;
- background-color: #6d6d6d;
- border-color: #676767
-}
-
-.btn-secondary.focus,
-.btn-secondary:focus {
- box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5)
-}
-
-.btn-secondary.disabled,
-.btn-secondary:disabled {
- color: #fff;
- background-color: grey;
- border-color: grey
-}
-
-.btn-secondary:not(:disabled):not(.disabled).active,
-.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle {
- color: #fff;
- background-color: #676767;
- border-color: #606060
-}
-
-.btn-secondary:not(:disabled):not(.disabled).active:focus,
-.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5)
-}
-
-.btn-success {
- color: #fff;
- background-color: #00e093;
- border-color: #00e093
-}
-
-.btn-success:hover {
- color: #fff;
- background-color: #00ba7a;
- border-color: #00ad72
-}
-
-.btn-success.focus,
-.btn-success:focus {
- box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5)
-}
-
-.btn-success.disabled,
-.btn-success:disabled {
- color: #fff;
- background-color: #00e093;
- border-color: #00e093
-}
-
-.btn-success:not(:disabled):not(.disabled).active,
-.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle {
- color: #fff;
- background-color: #00ad72;
- border-color: #00a069
-}
-
-.btn-success:not(:disabled):not(.disabled).active:focus,
-.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5)
-}
-
-.btn-info {
- color: #fff;
- background-color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-info:hover {
- color: #fff;
- background-color: #4a3df4;
- border-color: #3f31f3
-}
-
-.btn-info.focus,
-.btn-info:focus {
- box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5)
-}
-
-.btn-info.disabled,
-.btn-info:disabled {
- color: #fff;
- background-color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-info:not(:disabled):not(.disabled).active,
-.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle {
- color: #fff;
- background-color: #3f31f3;
- border-color: #3425f3
-}
-
-.btn-info:not(:disabled):not(.disabled).active:focus,
-.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5)
-}
-
-.btn-warning {
- color: #212529;
- background-color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-warning:hover {
- color: #fff;
- background-color: #ed673c;
- border-color: #ec5e30
-}
-
-.btn-warning.focus,
-.btn-warning:focus {
- box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5)
-}
-
-.btn-warning.disabled,
-.btn-warning:disabled {
- color: #212529;
- background-color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-warning:not(:disabled):not(.disabled).active,
-.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle {
- color: #fff;
- background-color: #ec5e30;
- border-color: #eb5425
-}
-
-.btn-warning:not(:disabled):not(.disabled).active:focus,
-.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5)
-}
-
-.btn-danger {
- color: #fff;
- background-color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-danger:hover {
- color: #fff;
- background-color: #ff3941;
- border-color: #ff2c35
-}
-
-.btn-danger.focus,
-.btn-danger:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5)
-}
-
-.btn-danger.disabled,
-.btn-danger:disabled {
- color: #fff;
- background-color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-danger:not(:disabled):not(.disabled).active,
-.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle {
- color: #fff;
- background-color: #ff2c35;
- border-color: #ff1f29
-}
-
-.btn-danger:not(:disabled):not(.disabled).active:focus,
-.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5)
-}
-
-.btn-light {
- color: #212529;
- background-color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-light:hover {
- color: #212529;
- background-color: #ccc;
- border-color: #c6c6c6
-}
-
-.btn-light.focus,
-.btn-light:focus {
- box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5)
-}
-
-.btn-light.disabled,
-.btn-light:disabled {
- color: #212529;
- background-color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-light:not(:disabled):not(.disabled).active,
-.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle {
- color: #212529;
- background-color: #c6c6c6;
- border-color: #bfbfbf
-}
-
-.btn-light:not(:disabled):not(.disabled).active:focus,
-.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5)
-}
-
-.btn-dark {
- color: #fff;
- background-color: #74767b;
- border-color: #74767b
-}
-
-.btn-dark:hover {
- color: #fff;
- background-color: #616367;
- border-color: #5b5d61
-}
-
-.btn-dark.focus,
-.btn-dark:focus {
- box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5)
-}
-
-.btn-dark.disabled,
-.btn-dark:disabled {
- color: #fff;
- background-color: #74767b;
- border-color: #74767b
-}
-
-.btn-dark:not(:disabled):not(.disabled).active,
-.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle {
- color: #fff;
- background-color: #5b5d61;
- border-color: #55575a
-}
-
-.btn-dark:not(:disabled):not(.disabled).active:focus,
-.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5)
-}
-
-.btn-white {
- color: #212529;
- background-color: #fff;
- border-color: #fff
-}
-
-.btn-white:hover {
- color: #212529;
- background-color: #ececec;
- border-color: #e6e6e6
-}
-
-.btn-white.focus,
-.btn-white:focus {
- box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5)
-}
-
-.btn-white.disabled,
-.btn-white:disabled {
- color: #212529;
- background-color: #fff;
- border-color: #fff
-}
-
-.btn-white:not(:disabled):not(.disabled).active,
-.btn-white:not(:disabled):not(.disabled):active,.show>.btn-white.dropdown-toggle {
- color: #212529;
- background-color: #e6e6e6;
- border-color: #dfdfdf
-}
-
-.btn-white:not(:disabled):not(.disabled).active:focus,
-.btn-white:not(:disabled):not(.disabled):active:focus,.show>.btn-white.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5)
-}
-
-.btn-orange {
- color: #212529;
- background-color: #ffa600;
- border-color: #ffa600
-}
-
-.btn-orange:hover {
- color: #fff;
- background-color: #d98d00;
- border-color: #cc8500
-}
-
-.btn-orange.focus,
-.btn-orange:focus {
- box-shadow: 0 0 0 .2rem rgba(222, 147, 6, .5)
-}
-
-.btn-orange.disabled,
-.btn-orange:disabled {
- color: #212529;
- background-color: #ffa600;
- border-color: #ffa600
-}
-
-.btn-orange:not(:disabled):not(.disabled).active,
-.btn-orange:not(:disabled):not(.disabled):active,.show>.btn-orange.dropdown-toggle {
- color: #fff;
- background-color: #cc8500;
- border-color: #bf7d00
-}
-
-.btn-orange:not(:disabled):not(.disabled).active:focus,
-.btn-orange:not(:disabled):not(.disabled):active:focus,.show>.btn-orange.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(222, 147, 6, .5)
-}
-
-.btn-outline-primary {
- color: #047006;
- border-color: #047006
-}
-
-.btn-outline-primary:hover {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-outline-primary.focus,
-.btn-outline-primary:focus {
- box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5)
-}
-
-.btn-outline-primary.disabled,
-.btn-outline-primary:disabled {
- color: #047006;
- background-color: transparent
-}
-
-.btn-outline-primary:not(:disabled):not(.disabled).active,
-.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
-.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5)
-}
-
-.btn-outline-secondary {
- color: grey;
- border-color: grey
-}
-
-.btn-outline-secondary:hover {
- color: #fff;
- background-color: grey;
- border-color: grey
-}
-
-.btn-outline-secondary.focus,
-.btn-outline-secondary:focus {
- box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5)
-}
-
-.btn-outline-secondary.disabled,
-.btn-outline-secondary:disabled {
- color: grey;
- background-color: transparent
-}
-
-.btn-outline-secondary:not(:disabled):not(.disabled).active,
-.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle {
- color: #fff;
- background-color: grey;
- border-color: grey
-}
-
-.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,
-.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5)
-}
-
-.btn-outline-success {
- color: #00e093;
- border-color: #00e093
-}
-
-.btn-outline-success:hover {
- color: #fff;
- background-color: #00e093;
- border-color: #00e093
-}
-
-.btn-outline-success.focus,
-.btn-outline-success:focus {
- box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5)
-}
-
-.btn-outline-success.disabled,
-.btn-outline-success:disabled {
- color: #00e093;
- background-color: transparent
-}
-
-.btn-outline-success:not(:disabled):not(.disabled).active,
-.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle {
- color: #fff;
- background-color: #00e093;
- border-color: #00e093
-}
-
-.btn-outline-success:not(:disabled):not(.disabled).active:focus,
-.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5)
-}
-
-.btn-outline-info {
- color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-outline-info:hover {
- color: #fff;
- background-color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-outline-info.focus,
-.btn-outline-info:focus {
- box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5)
-}
-
-.btn-outline-info.disabled,
-.btn-outline-info:disabled {
- color: #6c61f6;
- background-color: transparent
-}
-
-.btn-outline-info:not(:disabled):not(.disabled).active,
-.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle {
- color: #fff;
- background-color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-outline-info:not(:disabled):not(.disabled).active:focus,
-.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5)
-}
-
-.btn-outline-warning {
- color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-outline-warning:hover {
- color: #212529;
- background-color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-outline-warning.focus,
-.btn-outline-warning:focus {
- box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5)
-}
-
-.btn-outline-warning.disabled,
-.btn-outline-warning:disabled {
- color: #f0825f;
- background-color: transparent
-}
-
-.btn-outline-warning:not(:disabled):not(.disabled).active,
-.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle {
- color: #212529;
- background-color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-outline-warning:not(:disabled):not(.disabled).active:focus,
-.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5)
-}
-
-.btn-outline-danger {
- color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-outline-danger:hover {
- color: #fff;
- background-color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-outline-danger.focus,
-.btn-outline-danger:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5)
-}
-
-.btn-outline-danger.disabled,
-.btn-outline-danger:disabled {
- color: #ff5f66;
- background-color: transparent
-}
-
-.btn-outline-danger:not(:disabled):not(.disabled).active,
-.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle {
- color: #fff;
- background-color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-outline-danger:not(:disabled):not(.disabled).active:focus,
-.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5)
-}
-
-.btn-outline-light {
- color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-outline-light:hover {
- color: #212529;
- background-color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-outline-light.focus,
-.btn-outline-light:focus {
- box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5)
-}
-
-.btn-outline-light.disabled,
-.btn-outline-light:disabled {
- color: #dfdfdf;
- background-color: transparent
-}
-
-.btn-outline-light:not(:disabled):not(.disabled).active,
-.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle {
- color: #212529;
- background-color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-outline-light:not(:disabled):not(.disabled).active:focus,
-.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5)
-}
-
-.btn-outline-dark {
- color: #74767b;
- border-color: #74767b
-}
-
-.btn-outline-dark:hover {
- color: #fff;
- background-color: #74767b;
- border-color: #74767b
-}
-
-.btn-outline-dark.focus,
-.btn-outline-dark:focus {
- box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5)
-}
-
-.btn-outline-dark.disabled,
-.btn-outline-dark:disabled {
- color: #74767b;
- background-color: transparent
-}
-
-.btn-outline-dark:not(:disabled):not(.disabled).active,
-.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle {
- color: #fff;
- background-color: #74767b;
- border-color: #74767b
-}
-
-.btn-outline-dark:not(:disabled):not(.disabled).active:focus,
-.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5)
-}
-
-.btn-outline-white {
- color: #fff;
- border-color: #fff
-}
-
-.btn-outline-white:hover {
- color: #212529;
- background-color: #fff;
- border-color: #fff
-}
-
-.btn-outline-white.focus,
-.btn-outline-white:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5)
-}
-
-.btn-outline-white.disabled,
-.btn-outline-white:disabled {
- color: #fff;
- background-color: transparent
-}
-
-.btn-outline-white:not(:disabled):not(.disabled).active,
-.btn-outline-white:not(:disabled):not(.disabled):active,.show>.btn-outline-white.dropdown-toggle {
- color: #212529;
- background-color: #fff;
- border-color: #fff
-}
-
-.btn-outline-white:not(:disabled):not(.disabled).active:focus,
-.btn-outline-white:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-white.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5)
-}
-
-.btn-outline-orange {
- color: #ffa600;
- border-color: #ffa600
-}
-
-.btn-outline-orange:hover {
- color: #212529;
- background-color: #ffa600;
- border-color: #ffa600
-}
-
-.btn-outline-orange.focus,
-.btn-outline-orange:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5)
-}
-
-.btn-outline-orange.disabled,
-.btn-outline-orange:disabled {
- color: #ffa600;
- background-color: transparent
-}
-
-.btn-outline-orange:not(:disabled):not(.disabled).active,
-.btn-outline-orange:not(:disabled):not(.disabled):active,.show>.btn-outline-orange.dropdown-toggle {
- color: #212529;
- background-color: #ffa600;
- border-color: #ffa600
-}
-
-.btn-outline-orange:not(:disabled):not(.disabled).active:focus,
-.btn-outline-orange:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-orange.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5)
-}
-
-.btn-link {
- font-weight: 400;
- color: #047006;
- text-decoration: none
-}
-
-.btn-link:hover {
- color: #012602;
- text-decoration: underline
-}
-
-.btn-link.focus,
-.btn-link:focus {
- text-decoration: underline;
- box-shadow: none
-}
-
-.btn-link.disabled,
-.btn-link:disabled {
- color: #6c757d;
- pointer-events: none
-}
-
-.btn-group-lg>.btn,
-.btn-lg {
- padding: .5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: .3rem
-}
-
-.btn-group-sm>.btn,
-.btn-sm {
- padding: .25rem .5rem;
- font-size: .875rem;
- line-height: 1.5;
- border-radius: .2rem
-}
-
-.btn-block {
- display: block;
- width: 100%
-}
-
-.btn-block+.btn-block {
- margin-top: .5rem
-}
-
-input[type=button].btn-block,
-input[type=reset].btn-block,
-input[type=submit].btn-block {
- width: 100%
-}
-
-.fade {
- -webkit-transition: opacity .15s linear;
- transition: opacity .15s linear
-}
-
-@media (prefers-reduced-motion:reduce) {
- .fade {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.fade:not(.show) {
- opacity: 0
-}
-
-.collapse:not(.show) {
- display: none
-}
-
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition: height .35s ease;
- transition: height .35s ease
-}
-
-@media (prefers-reduced-motion:reduce) {
- .collapsing {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.dropdown,
-.dropleft,
-.dropright,
-.dropup {
- position: relative
-}
-
-.dropdown-toggle {
- white-space: nowrap
-}
-
-.dropdown-toggle::after {
- display: inline-block;
- margin-left: .255em;
- vertical-align: .255em;
- content: 'http://www.w3.org/2000/svg';
- border-top: .3em solid;
- border-right: .3em solid transparent;
- border-bottom: 0;
- border-left: .3em solid transparent
-}
-
-.dropdown-toggle:empty::after {
- margin-left: 0
-}
-
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 10rem;
- padding: .5rem 0;
- margin: .125rem 0 0;
- font-size: 1rem;
- color: #212529;
- text-align: left;
- list-style: none;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, .15);
- border-radius: .25rem
-}
-
-.dropdown-menu-left {
- right: auto;
- left: 0
-}
-
-.dropdown-menu-right {
- right: 0;
- left: auto
-}
-
-@media (min-width:576px) {
- .dropdown-menu-sm-left {
- right: auto;
- left: 0
- }
-
- .dropdown-menu-sm-right {
- right: 0;
- left: auto
- }
-
-}
-
-@media (min-width:768px) {
- .dropdown-menu-md-left {
- right: auto;
- left: 0
- }
-
- .dropdown-menu-md-right {
- right: 0;
- left: auto
- }
-
-}
-
-@media (min-width:992px) {
- .dropdown-menu-lg-left {
- right: auto;
- left: 0
- }
-
- .dropdown-menu-lg-right {
- right: 0;
- left: auto
- }
-
-}
-
-@media (min-width:1200px) {
- .dropdown-menu-xl-left {
- right: auto;
- left: 0
- }
-
- .dropdown-menu-xl-right {
- right: 0;
- left: auto
- }
-
-}
-
-.dropup .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-top: 0;
- margin-bottom: .125rem
-}
-
-.dropup .dropdown-toggle::after {
- display: inline-block;
- margin-left: .255em;
- vertical-align: .255em;
- content: '0 0 8 8';
- border-top: 0;
- border-right: .3em solid transparent;
- border-bottom: .3em solid;
- border-left: .3em solid transparent
-}
-
-.dropup .dropdown-toggle:empty::after {
- margin-left: 0
-}
-
-.dropright .dropdown-menu {
- top: 0;
- right: auto;
- left: 100%;
- margin-top: 0;
- margin-left: .125rem
-}
-
-.dropright .dropdown-toggle::after {
- display: inline-block;
- margin-left: .255em;
- vertical-align: .255em;
- content: '%2328a745';
- border-top: .3em solid transparent;
- border-right: 0;
- border-bottom: .3em solid transparent;
- border-left: .3em solid
-}
-
-.dropright .dropdown-toggle:empty::after {
- margin-left: 0
-}
-
-.dropright .dropdown-toggle::after {
- vertical-align: 0
-}
-
-.dropleft .dropdown-menu {
- top: 0;
- right: 100%;
- left: auto;
- margin-top: 0;
- margin-right: .125rem
-}
-
-.dropleft .dropdown-toggle::after {
- display: inline-block;
- margin-left: .255em;
- vertical-align: .255em;
- content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'
-}
-
-.dropleft .dropdown-toggle::after {
- display: none
-}
-
-.dropleft .dropdown-toggle::before {
- display: inline-block;
- margin-right: .255em;
- vertical-align: .255em;
- content: 'http://www.w3.org/2000/svg';
- border-top: .3em solid transparent;
- border-right: .3em solid;
- border-bottom: .3em solid transparent
-}
-
-.dropleft .dropdown-toggle:empty::after {
- margin-left: 0
-}
-
-.dropleft .dropdown-toggle::before {
- vertical-align: 0
-}
-
-.dropdown-menu[x-placement^=bottom],
-.dropdown-menu[x-placement^=left],
-.dropdown-menu[x-placement^=right],
-.dropdown-menu[x-placement^=top] {
- right: auto;
- bottom: auto
-}
-
-.dropdown-divider {
- height: 0;
- margin: .5rem 0;
- overflow: hidden;
- border-top: 1px solid #e9ecef
-}
-
-.dropdown-item {
- display: block;
- width: 100%;
- padding: .25rem 1.5rem;
- clear: both;
- font-weight: 400;
- color: #212529;
- text-align: inherit;
- white-space: nowrap;
- background-color: transparent;
- border: 0
-}
-
-.dropdown-item:focus,
-.dropdown-item:hover {
- color: #16181b;
- text-decoration: none;
- background-color: #f8f9fa
-}
-
-.dropdown-item.active,
-.dropdown-item:active {
- color: #fff;
- text-decoration: none;
- background-color: #007bff
-}
-
-.dropdown-item.disabled,
-.dropdown-item:disabled {
- color: #6c757d;
- pointer-events: none;
- background-color: transparent
-}
-
-.dropdown-menu.show {
- display: block
-}
-
-.dropdown-header {
- display: block;
- padding: .5rem 1.5rem;
- margin-bottom: 0;
- font-size: .875rem;
- color: #6c757d;
- white-space: nowrap
-}
-
-.dropdown-item-text {
- display: block;
- padding: .25rem 1.5rem;
- color: #212529
-}
-
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: -webkit-inline-box;
- display: inline-flex;
- vertical-align: middle
-}
-
-.btn-group-vertical>.btn,
-.btn-group>.btn {
- position: relative;
- -webkit-box-flex: 1;
- flex: 1 1 auto
-}
-
-.btn-group-vertical>.btn:hover,
-.btn-group>.btn:hover {
- z-index: 1
-}
-
-.btn-group-vertical>.btn.active,
-.btn-group-vertical>.btn:active,
-.btn-group-vertical>.btn:focus,
-.btn-group>.btn.active,
-.btn-group>.btn:active,
-.btn-group>.btn:focus {
- z-index: 1
-}
-
-.btn-toolbar {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -webkit-box-pack: start;
- justify-content: flex-start
-}
-
-.btn-toolbar .input-group {
- width: auto
-}
-
-.btn-group>.btn-group:not(:first-child),
-.btn-group>.btn:not(:first-child) {
- margin-left: -1px
-}
-
-.btn-group>.btn-group:not(:last-child)>.btn,
-.btn-group>.btn:not(:last-child):not(.dropdown-toggle) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
-}
-
-.btn-group>.btn-group:not(:first-child)>.btn,
-.btn-group>.btn:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.dropdown-toggle-split {
- padding-right: .5625rem;
- padding-left: .5625rem
-}
-
-.dropdown-toggle-split::after,
-.dropright .dropdown-toggle-split::after,
-.dropup .dropdown-toggle-split::after {
- margin-left: 0
-}
-
-.dropleft .dropdown-toggle-split::before {
- margin-right: 0
-}
-
-.btn-group-sm>.btn+.dropdown-toggle-split,
-.btn-sm+.dropdown-toggle-split {
- padding-right: .375rem;
- padding-left: .375rem
-}
-
-.btn-group-lg>.btn+.dropdown-toggle-split,
-.btn-lg+.dropdown-toggle-split {
- padding-right: .75rem;
- padding-left: .75rem
-}
-
-.btn-group-vertical {
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- -webkit-box-align: start;
- align-items: flex-start;
- -webkit-box-pack: center;
- justify-content: center
-}
-
-.btn-group-vertical>.btn,
-.btn-group-vertical>.btn-group {
- width: 100%
-}
-
-.btn-group-vertical>.btn-group:not(:first-child),
-.btn-group-vertical>.btn:not(:first-child) {
- margin-top: -1px
-}
-
-.btn-group-vertical>.btn-group:not(:last-child)>.btn,
-.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.btn-group-vertical>.btn-group:not(:first-child)>.btn,
-.btn-group-vertical>.btn:not(:first-child) {
- border-top-left-radius: 0;
- border-top-right-radius: 0
-}
-
-.btn-group-toggle>.btn,
-.btn-group-toggle>.btn-group>.btn {
- margin-bottom: 0
-}
-
-.btn-group-toggle>.btn input[type=checkbox],
-.btn-group-toggle>.btn input[type=radio],
-.btn-group-toggle>.btn-group>.btn input[type=checkbox],
-.btn-group-toggle>.btn-group>.btn input[type=radio] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none
-}
-
-.input-group {
- position: relative;
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -webkit-box-align: stretch;
- align-items: stretch;
- width: 100%
-}
-
-.input-group>.custom-file,
-.input-group>.custom-select,
-.input-group>.form-control,
-.input-group>.form-control-plaintext {
- position: relative;
- -webkit-box-flex: 1;
- flex: 1 1 auto;
- width: 1%;
- margin-bottom: 0
-}
-
-.input-group>.custom-file+.custom-file,
-.input-group>.custom-file+.custom-select,
-.input-group>.custom-file+.form-control,
-.input-group>.custom-select+.custom-file,
-.input-group>.custom-select+.custom-select,
-.input-group>.custom-select+.form-control,
-.input-group>.form-control+.custom-file,
-.input-group>.form-control+.custom-select,
-.input-group>.form-control+.form-control,
-.input-group>.form-control-plaintext+.custom-file,
-.input-group>.form-control-plaintext+.custom-select,
-.input-group>.form-control-plaintext+.form-control {
- margin-left: -1px
-}
-
-.input-group>.custom-file .custom-file-input:focus~.custom-file-label,
-.input-group>.custom-select:focus,
-.input-group>.form-control:focus {
- z-index: 3
-}
-
-.input-group>.custom-file .custom-file-input:focus {
- z-index: 4
-}
-
-.input-group>.custom-select:not(:last-child),
-.input-group>.form-control:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
-}
-
-.input-group>.custom-select:not(:first-child),
-.input-group>.form-control:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.input-group>.custom-file {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center
-}
-
-.input-group>.custom-file:not(:last-child) .custom-file-label,
-.input-group>.custom-file:not(:last-child) .custom-file-label::after {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
-}
-
-.input-group>.custom-file:not(:first-child) .custom-file-label {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.input-group-append,
-.input-group-prepend {
- display: -webkit-box;
- display: flex
-}
-
-.input-group-append .btn,
-.input-group-prepend .btn {
- position: relative;
- z-index: 2
-}
-
-.input-group-append .btn:focus,
-.input-group-prepend .btn:focus {
- z-index: 3
-}
-
-.input-group-append .btn+.btn,
-.input-group-append .btn+.input-group-text,
-.input-group-append .input-group-text+.btn,
-.input-group-append .input-group-text+.input-group-text,
-.input-group-prepend .btn+.btn,
-.input-group-prepend .btn+.input-group-text,
-.input-group-prepend .input-group-text+.btn,
-.input-group-prepend .input-group-text+.input-group-text {
- margin-left: -1px
-}
-
-.input-group-prepend {
- margin-right: -1px
-}
-
-.input-group-append {
- margin-left: -1px
-}
-
-.input-group-text {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- padding: .375rem .75rem;
- margin-bottom: 0;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #6c757d;
- text-align: center;
- white-space: nowrap;
- background-color: #e9ecef;
- border: 1px solid #f0f2f5;
- border-radius: .25rem
-}
-
-.input-group-text input[type=checkbox],
-.input-group-text input[type=radio] {
- margin-top: 0
-}
-
-.input-group-lg>.custom-select,
-.input-group-lg>.form-control:not(textarea) {
- height: calc(1.5em + 1rem + 2px)
-}
-
-.input-group-lg>.custom-select,
-.input-group-lg>.form-control,
-.input-group-lg>.input-group-append>.btn,
-.input-group-lg>.input-group-append>.input-group-text,
-.input-group-lg>.input-group-prepend>.btn,
-.input-group-lg>.input-group-prepend>.input-group-text {
- padding: .5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: .3rem
-}
-
-.input-group-sm>.custom-select,
-.input-group-sm>.form-control:not(textarea) {
- height: calc(1.5em + .5rem + 2px)
-}
-
-.input-group-sm>.custom-select,
-.input-group-sm>.form-control,
-.input-group-sm>.input-group-append>.btn,
-.input-group-sm>.input-group-append>.input-group-text,
-.input-group-sm>.input-group-prepend>.btn,
-.input-group-sm>.input-group-prepend>.input-group-text {
- padding: .25rem .5rem;
- font-size: .875rem;
- line-height: 1.5;
- border-radius: .2rem
-}
-
-.input-group-lg>.custom-select,
-.input-group-sm>.custom-select {
- padding-right: 1.75rem
-}
-
-.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),
-.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),
-.input-group>.input-group-append:not(:last-child)>.btn,
-.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
-}
-
-.input-group>.input-group-append>.btn,
-.input-group>.input-group-append>.input-group-text,
-.input-group>.input-group-prepend:first-child>.btn:not(:first-child),
-.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),
-.input-group>.input-group-prepend:not(:first-child)>.btn,
-.input-group>.input-group-prepend:not(:first-child)>.input-group-text {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.custom-control {
- position: relative;
- display: block;
- min-height: 1.7rem;
- padding-left: 1.9rem
-}
-
-.custom-control-inline {
- display: -webkit-inline-box;
- display: inline-flex;
- margin-right: 1rem
-}
-
-.custom-control-input {
- position: absolute;
- z-index: -1;
- opacity: 0
-}
-
-.custom-control-input:checked~.custom-control-label::before {
- color: #fff;
- border-color: #00e093;
- background-color: #00e093
-}
-
-.custom-control-input:focus~.custom-control-label::before {
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-control-input:focus:not(:checked)~.custom-control-label::before {
- border-color: #80bdff
-}
-
-.custom-control-input:not(:disabled):active~.custom-control-label::before {
- color: #fff;
- background-color: #b3d7ff;
- border-color: #b3d7ff
-}
-
-.custom-control-input:disabled~.custom-control-label {
- color: #6c757d
-}
-
-.custom-control-input:disabled~.custom-control-label::before {
- background-color: #e9ecef
-}
-
-.custom-control-label {
- position: relative;
- margin-bottom: 0;
- vertical-align: top
-}
-
-.custom-control-label::before {
- position: absolute;
- top: .15rem;
- left: -1.9rem;
- display: block;
- width: 1.4rem;
- height: 1.4rem;
- pointer-events: none;
- content: '0 0 4 5';
- background-color: #fff;
- border: #e1e5f1 solid 1px
-}
-
-.custom-control-label::after {
- position: absolute;
- top: .15rem;
- left: -1.9rem;
- display: block;
- width: 1.4rem;
- height: 1.4rem;
- content: '%23343a40';
- background: no-repeat 50%/50% 50%
-}
-
-.custom-checkbox .custom-control-label::before {
- border-radius: .25rem
-}
-
-.custom-checkbox .custom-control-input:checked~.custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e")
-}
-
-.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before {
- border-color: #007bff;
- background-color: #007bff
-}
-
-.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3c/svg%3e")
-}
-
-.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before {
- background-color: rgba(0, 123, 255, .5)
-}
-
-.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before {
- background-color: rgba(0, 123, 255, .5)
-}
-
-.custom-radio .custom-control-label::before {
- border-radius: 50%
-}
-
-.custom-radio .custom-control-input:checked~.custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3ccircle r=!string!fill=!string!/%3e%3c/svg%3e")
-}
-
-.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before {
- background-color: rgba(0, 123, 255, .5)
-}
-
-.custom-switch {
- padding-left: 2.8rem
-}
-
-.custom-switch .custom-control-label::before {
- left: -2.8rem;
- width: 2.3rem;
- pointer-events: all;
- border-radius: 25px
-}
-
-.custom-switch .custom-control-label::after {
- top: calc(.15rem + 2px);
- left: calc(-2.8rem + 2px);
- width: 1.1rem;
- height: 1.1rem;
- background-color: #e1e5f1;
- border-radius: 25px;
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out;
- transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-switch .custom-control-label::after {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.custom-switch .custom-control-input:checked~.custom-control-label::after {
- background-color: #fff;
- -webkit-transform: translateX(.9rem);
- transform: translateX(.9rem)
-}
-
-.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before {
- background-color: rgba(0, 123, 255, .5)
-}
-
-.custom-select {
- display: inline-block;
- width: 100%;
- height: calc(1.5em + .75rem + 2px);
- padding: .375rem 1.75rem .375rem .75rem;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #495057;
- vertical-align: middle;
- background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;
- background-color: #fff;
- border: 1px solid #ced4da;
- border-radius: .25rem;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none
-}
-
-.custom-select:focus {
- border-color: #80bdff;
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-select:focus::-ms-value {
- color: #6c757d;
- background-color: #f6f7f9
-}
-
-.custom-select[multiple],
-.custom-select[size]:not([size='M2 0L0 2h4zm0 5L0 3h4z']) {
- height: auto;
- padding-right: .75rem;
- background-image: none
-}
-
-.custom-select:disabled {
- color: #6c757d;
- background-color: #e9ecef
-}
-
-.custom-select::-ms-expand {
- display: none
-}
-
-.custom-select-sm {
- height: calc(1.5em + .5rem + 2px);
- padding-top: .25rem;
- padding-bottom: .25rem;
- padding-left: .5rem;
- font-size: .875rem
-}
-
-.custom-select-lg {
- height: calc(1.5em + 1rem + 2px);
- padding-top: .5rem;
- padding-bottom: .5rem;
- padding-left: 1rem;
- font-size: 1.25rem
-}
-
-.custom-file {
- position: relative;
- display: inline-block;
- width: 100%;
- height: calc(1.5em + .75rem + 2px);
- margin-bottom: 0
-}
-
-.custom-file-input {
- position: relative;
- z-index: 2;
- width: 100%;
- height: calc(1.5em + .75rem + 2px);
- margin: 0;
- opacity: 0
-}
-
-.custom-file-input:focus~.custom-file-label {
- border-color: #80bdff;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-file-input:disabled~.custom-file-label {
- background-color: #e9ecef
-}
-
-.custom-file-input:lang(en)~.custom-file-label::after {
- content: 'http://www.w3.org/2000/svg'
-}
-
-.custom-file-input~.custom-file-label[data-browse]::after {
- content: attr(data-browse)
-}
-
-.custom-file-label {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1;
- height: calc(1.5em + .75rem + 2px);
- padding: .375rem .75rem;
- font-weight: 400;
- line-height: 1.5;
- color: #6c757d;
- background-color: #f6f7f9;
- border: 1px solid #f0f2f5;
- border-radius: .25rem
-}
-
-.custom-file-label::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- z-index: 3;
- display: block;
- height: calc(1.5em + .75rem);
- padding: .375rem .75rem;
- line-height: 1.5;
- color: #495057;
- content: '0 0 8 8';
- background-color: #e9ecef;
- border-left: inherit;
- border-radius: 0 .25rem .25rem 0
-}
-
-.custom-range {
- width: 100%;
- height: calc(1rem + .4rem);
- padding: 0;
- background-color: transparent;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none
-}
-
-.custom-range:focus {
- outline: 0
-}
-
-.custom-range:focus::-webkit-slider-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-range:focus::-moz-range-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-range:focus::-ms-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-range::-moz-focus-outer {
- border: 0
-}
-
-.custom-range::-webkit-slider-thumb {
- width: 1rem;
- height: 1rem;
- margin-top: -.25rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- -webkit-appearance: none;
- appearance: none
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-range::-webkit-slider-thumb {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.custom-range::-webkit-slider-thumb:active {
- background-color: #b3d7ff
-}
-
-.custom-range::-webkit-slider-runnable-track {
- width: 100%;
- height: .5rem;
- color: transparent;
- cursor: pointer;
- background-color: #dee2e6;
- border-color: transparent;
- border-radius: 1rem
-}
-
-.custom-range::-moz-range-thumb {
- width: 1rem;
- height: 1rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- -moz-appearance: none;
- appearance: none
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-range::-moz-range-thumb {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.custom-range::-moz-range-thumb:active {
- background-color: #b3d7ff
-}
-
-.custom-range::-moz-range-track {
- width: 100%;
- height: .5rem;
- color: transparent;
- cursor: pointer;
- background-color: #dee2e6;
- border-color: transparent;
- border-radius: 1rem
-}
-
-.custom-range::-ms-thumb {
- width: 1rem;
- height: 1rem;
- margin-top: 0;
- margin-right: .2rem;
- margin-left: .2rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- appearance: none
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-range::-ms-thumb {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.custom-range::-ms-thumb:active {
- background-color: #b3d7ff
-}
-
-.custom-range::-ms-track {
- width: 100%;
- height: .5rem;
- color: transparent;
- cursor: pointer;
- background-color: transparent;
- border-color: transparent;
- border-width: .5rem
-}
-
-.custom-range::-ms-fill-lower {
- background-color: #dee2e6;
- border-radius: 1rem
-}
-
-.custom-range::-ms-fill-upper {
- margin-right: 15px;
- background-color: #dee2e6;
- border-radius: 1rem
-}
-
-.custom-range:disabled::-webkit-slider-thumb {
- background-color: #adb5bd
-}
-
-.custom-range:disabled::-webkit-slider-runnable-track {
- cursor: default
-}
-
-.custom-range:disabled::-moz-range-thumb {
- background-color: #adb5bd
-}
-
-.custom-range:disabled::-moz-range-track {
- cursor: default
-}
-
-.custom-range:disabled::-ms-thumb {
- background-color: #adb5bd
-}
-
-.custom-control-label::before,
-.custom-file-label,
-.custom-select {
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-control-label::before,
- .custom-file-label,
- .custom-select {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.nav {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none
-}
-
-.nav-link {
- display: block;
- padding: .5rem 1rem
-}
-
-.nav-link:focus,
-.nav-link:hover {
- text-decoration: none
-}
-
-.nav-link.disabled {
- color: #6c757d;
- pointer-events: none;
- cursor: default
-}
-
-.nav-tabs {
- border-bottom: 1px solid #dee2e6
-}
-
-.nav-tabs .nav-item {
- margin-bottom: -1px
-}
-
-.nav-tabs .nav-link {
- border: 1px solid transparent;
- border-top-left-radius: 2px;
- border-top-right-radius: 2px
-}
-
-.nav-tabs .nav-link:focus,
-.nav-tabs .nav-link:hover {
- border-color: #e9ecef #e9ecef #dee2e6
-}
-
-.nav-tabs .nav-link.disabled {
- color: #6c757d;
- background-color: transparent;
- border-color: transparent
-}
-
-.nav-tabs .nav-item.show .nav-link,
-.nav-tabs .nav-link.active {
- color: #495057;
- background-color: #fff;
- border-color: #dee2e6 #dee2e6 #fff
-}
-
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0
-}
-
-.nav-pills .nav-link {
- border-radius: 2px
-}
-
-.nav-pills .nav-link.active,
-.nav-pills .show>.nav-link {
- color: #fff;
- background-color: #007bff
-}
-
-.nav-fill .nav-item {
- -webkit-box-flex: 1;
- flex: 1 1 auto;
- text-align: center
-}
-
-.nav-justified .nav-item {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- text-align: center
-}
-
-.tab-content>.tab-pane {
- display: none
-}
-
-.tab-content>.active {
- display: block
-}
-
-.navbar {
- position: relative;
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: justify;
- justify-content: space-between;
- padding: .5rem 1rem
-}
-
-.navbar>.container,
-.navbar>.container-fluid {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: justify;
- justify-content: space-between
-}
-
-.navbar-brand {
- display: inline-block;
- padding-top: .3125rem;
- padding-bottom: .3125rem;
- margin-right: 1rem;
- font-size: 1.25rem;
- line-height: inherit;
- white-space: nowrap
-}
-
-.navbar-brand:focus,
-.navbar-brand:hover {
- text-decoration: none
-}
-
-.navbar-nav {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none
-}
-
-.navbar-nav .nav-link {
- padding-right: 0;
- padding-left: 0
-}
-
-.navbar-nav .dropdown-menu {
- position: static;
- float: none
-}
-
-.navbar-text {
- display: inline-block;
- padding-top: .5rem;
- padding-bottom: .5rem
-}
-
-.navbar-collapse {
- flex-basis: 100%;
- -webkit-box-flex: 1;
- flex-grow: 1;
- -webkit-box-align: center;
- align-items: center
-}
-
-.navbar-toggler {
- padding: .25rem .75rem;
- font-size: 1.25rem;
- line-height: 1;
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: .25rem
-}
-
-.navbar-toggler:focus,
-.navbar-toggler:hover {
- text-decoration: none
-}
-
-.navbar-toggler-icon {
- display: inline-block;
- width: 1.5em;
- height: 1.5em;
- vertical-align: middle;
- content: '%2328a745';
- background: no-repeat center center;
- background-size: 100% 100%
-}
-
-@media (max-width:575.98px) {
- .navbar-expand-sm>.container,
- .navbar-expand-sm>.container-fluid {
- padding-right: 0;
- padding-left: 0
- }
-
-}
-
-@media (min-width:576px) {
- .navbar-expand-sm {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
- }
-
- .navbar-expand-sm .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .navbar-expand-sm .navbar-nav .dropdown-menu {
- position: absolute
- }
-
- .navbar-expand-sm .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
- }
-
- .navbar-expand-sm>.container,
- .navbar-expand-sm>.container-fluid {
- flex-wrap: nowrap
- }
-
- .navbar-expand-sm .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
- }
-
- .navbar-expand-sm .navbar-toggler {
- display: none
- }
-
-}
-
-@media (max-width:767.98px) {
- .navbar-expand-md>.container,
- .navbar-expand-md>.container-fluid {
- padding-right: 0;
- padding-left: 0
- }
-
-}
-
-@media (min-width:768px) {
- .navbar-expand-md {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
- }
-
- .navbar-expand-md .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .navbar-expand-md .navbar-nav .dropdown-menu {
- position: absolute
- }
-
- .navbar-expand-md .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
- }
-
- .navbar-expand-md>.container,
- .navbar-expand-md>.container-fluid {
- flex-wrap: nowrap
- }
-
- .navbar-expand-md .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
- }
-
- .navbar-expand-md .navbar-toggler {
- display: none
- }
-
-}
-
-@media (max-width:991.98px) {
- .navbar-expand-lg>.container,
- .navbar-expand-lg>.container-fluid {
- padding-right: 0;
- padding-left: 0
- }
-
-}
-
-@media (min-width:992px) {
- .navbar-expand-lg {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
- }
-
- .navbar-expand-lg .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .navbar-expand-lg .navbar-nav .dropdown-menu {
- position: absolute
- }
-
- .navbar-expand-lg .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
- }
-
- .navbar-expand-lg>.container,
- .navbar-expand-lg>.container-fluid {
- flex-wrap: nowrap
- }
-
- .navbar-expand-lg .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
- }
-
- .navbar-expand-lg .navbar-toggler {
- display: none
- }
-
-}
-
-@media (max-width:1199.98px) {
- .navbar-expand-xl>.container,
- .navbar-expand-xl>.container-fluid {
- padding-right: 0;
- padding-left: 0
- }
-
-}
-
-@media (min-width:1200px) {
- .navbar-expand-xl {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
- }
-
- .navbar-expand-xl .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .navbar-expand-xl .navbar-nav .dropdown-menu {
- position: absolute
- }
-
- .navbar-expand-xl .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
- }
-
- .navbar-expand-xl>.container,
- .navbar-expand-xl>.container-fluid {
- flex-wrap: nowrap
- }
-
- .navbar-expand-xl .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
- }
-
- .navbar-expand-xl .navbar-toggler {
- display: none
- }
-
-}
-
-.navbar-expand {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
-}
-
-.navbar-expand>.container,
-.navbar-expand>.container-fluid {
- padding-right: 0;
- padding-left: 0
-}
-
-.navbar-expand .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
-}
-
-.navbar-expand .navbar-nav .dropdown-menu {
- position: absolute
-}
-
-.navbar-expand .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
-}
-
-.navbar-expand>.container,
-.navbar-expand>.container-fluid {
- flex-wrap: nowrap
-}
-
-.navbar-expand .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
-}
-
-.navbar-expand .navbar-toggler {
- display: none
-}
-
-.navbar-light .navbar-brand {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-light .navbar-brand:focus,
-.navbar-light .navbar-brand:hover {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-light .navbar-nav .nav-link {
- color: rgba(0, 0, 0, .5)
-}
-
-.navbar-light .navbar-nav .nav-link:focus,
-.navbar-light .navbar-nav .nav-link:hover {
- color: rgba(0, 0, 0, .7)
-}
-
-.navbar-light .navbar-nav .nav-link.disabled {
- color: rgba(0, 0, 0, .3)
-}
-
-.navbar-light .navbar-nav .active>.nav-link,
-.navbar-light .navbar-nav .nav-link.active,
-.navbar-light .navbar-nav .nav-link.show,
-.navbar-light .navbar-nav .show>.nav-link {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-light .navbar-toggler {
- color: rgba(0, 0, 0, .5);
- border-color: rgba(0, 0, 0, .1)
-}
-
-.navbar-light .navbar-toggler-icon {
- background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e")
-}
-
-.navbar-light .navbar-text {
- color: rgba(0, 0, 0, .5)
-}
-
-.navbar-light .navbar-text a {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-light .navbar-text a:focus,
-.navbar-light .navbar-text a:hover {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-dark .navbar-brand {
- color: #fff
-}
-
-.navbar-dark .navbar-brand:focus,
-.navbar-dark .navbar-brand:hover {
- color: #fff
-}
-
-.navbar-dark .navbar-nav .nav-link {
- color: rgba(255, 255, 255, .5)
-}
-
-.navbar-dark .navbar-nav .nav-link:focus,
-.navbar-dark .navbar-nav .nav-link:hover {
- color: rgba(255, 255, 255, .75)
-}
-
-.navbar-dark .navbar-nav .nav-link.disabled {
- color: rgba(255, 255, 255, .25)
-}
-
-.navbar-dark .navbar-nav .active>.nav-link,
-.navbar-dark .navbar-nav .nav-link.active,
-.navbar-dark .navbar-nav .nav-link.show,
-.navbar-dark .navbar-nav .show>.nav-link {
- color: #fff
-}
-
-.navbar-dark .navbar-toggler {
- color: rgba(255, 255, 255, .5);
- border-color: rgba(255, 255, 255, .1)
-}
-
-.navbar-dark .navbar-toggler-icon {
- background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e")
-}
-
-.navbar-dark .navbar-text {
- color: rgba(255, 255, 255, .5)
-}
-
-.navbar-dark .navbar-text a {
- color: #fff
-}
-
-.navbar-dark .navbar-text a:focus,
-.navbar-dark .navbar-text a:hover {
- color: #fff
-}
-
-.card {
- position: relative;
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- min-width: 0;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: border-box;
- border: 1px solid rgba(238, 238, 238, .75);
- border-radius: .25rem
-}
-
-.card>hr {
- margin-right: 0;
- margin-left: 0
-}
-
-.card>.list-group:first-child .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-top-right-radius: .25rem
-}
-
-.card>.list-group:last-child .list-group-item:last-child {
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: .25rem
-}
-
-.card-body {
- -webkit-box-flex: 1;
- flex: 1 1 auto;
- padding: 1.25rem
-}
-
-.card-title {
- margin-bottom: .75rem
-}
-
-.card-subtitle {
- margin-top: -.375rem;
- margin-bottom: 0
-}
-
-.card-text:last-child {
- margin-bottom: 0
-}
-
-.card-link:hover {
- text-decoration: none
-}
-
-.card-link+.card-link {
- margin-left: 1.25rem
-}
-
-.card-header {
- padding: .75rem 1.25rem;
- margin-bottom: 0;
- background-color: rgba(0, 0, 0, .03);
- border-bottom: 1px solid rgba(238, 238, 238, .75)
-}
-
-.card-header:first-child {
- border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0
-}
-
-.card-header+.list-group .list-group-item:first-child {
- border-top: 0
-}
-
-.card-footer {
- padding: .75rem 1.25rem;
- background-color: rgba(0, 0, 0, .03);
- border-top: 1px solid rgba(238, 238, 238, .75)
-}
-
-.card-footer:last-child {
- border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px)
-}
-
-.card-header-tabs {
- margin-right: -.625rem;
- margin-bottom: -.75rem;
- margin-left: -.625rem;
- border-bottom: 0
-}
-
-.card-header-pills {
- margin-right: -.625rem;
- margin-left: -.625rem
-}
-
-.card-img-overlay {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1.25rem
-}
-
-.card-img {
- width: 100%;
- border-radius: calc(.25rem - 1px)
-}
-
-.card-img-top {
- width: 100%;
- border-top-left-radius: calc(.25rem - 1px);
- border-top-right-radius: calc(.25rem - 1px)
-}
-
-.card-img-bottom {
- width: 100%;
- border-bottom-right-radius: calc(.25rem - 1px);
- border-bottom-left-radius: calc(.25rem - 1px)
-}
-
-.card-deck {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column
-}
-
-.card-deck .card {
- margin-bottom: 15px
-}
-
-@media (min-width:576px) {
- .card-deck {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row wrap;
- margin-right: -15px;
- margin-left: -15px
- }
-
- .card-deck .card {
- display: -webkit-box;
- display: flex;
- -webkit-box-flex: 1;
- flex: 1 0 0%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- margin-right: 15px;
- margin-bottom: 0;
- margin-left: 15px
- }
-
-}
-
-.card-group {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column
-}
-
-.card-group>.card {
- margin-bottom: 15px
-}
-
-@media (min-width:576px) {
- .card-group {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row wrap
- }
-
- .card-group>.card {
- -webkit-box-flex: 1;
- flex: 1 0 0%;
- margin-bottom: 0
- }
-
- .card-group>.card+.card {
- margin-left: 0;
- border-left: 0
- }
-
- .card-group>.card:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
- }
-
- .card-group>.card:not(:last-child) .card-header,
- .card-group>.card:not(:last-child) .card-img-top {
- border-top-right-radius: 0
- }
-
- .card-group>.card:not(:last-child) .card-footer,
- .card-group>.card:not(:last-child) .card-img-bottom {
- border-bottom-right-radius: 0
- }
-
- .card-group>.card:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
- }
-
- .card-group>.card:not(:first-child) .card-header,
- .card-group>.card:not(:first-child) .card-img-top {
- border-top-left-radius: 0
- }
-
- .card-group>.card:not(:first-child) .card-footer,
- .card-group>.card:not(:first-child) .card-img-bottom {
- border-bottom-left-radius: 0
- }
-
-}
-
-.card-columns .card {
- margin-bottom: .75rem
-}
-
-@media (min-width:576px) {
- .card-columns {
- -webkit-column-count: 3;
- -moz-column-count: 3;
- column-count: 3;
- -webkit-column-gap: 1.25rem;
- -moz-column-gap: 1.25rem;
- column-gap: 1.25rem;
- orphans: 1;
- widows: 1
- }
-
- .card-columns .card {
- display: inline-block;
- width: 100%
- }
-
-}
-
-.accordion>.card {
- overflow: hidden
-}
-
-.accordion>.card:not(:first-of-type) .card-header:first-child {
- border-radius: 0
-}
-
-.accordion>.card:not(:first-of-type):not(:last-of-type) {
- border-bottom: 0;
- border-radius: 0
-}
-
-.accordion>.card:first-of-type {
- border-bottom: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.accordion>.card:last-of-type {
- border-top-left-radius: 0;
- border-top-right-radius: 0
-}
-
-.accordion>.card .card-header {
- margin-bottom: -1px
-}
-
-.breadcrumb {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- padding: .75rem 1rem;
- margin-bottom: 1rem;
- list-style: none;
- background-color: #f7f9fa;
- border-radius: .25rem
-}
-
-.breadcrumb-item+.breadcrumb-item {
- padding-left: .5rem
-}
-
-.breadcrumb-item+.breadcrumb-item::before {
- display: inline-block;
- padding-right: .5rem;
- color: #a8a9ad;
- content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'
-}
-
-.breadcrumb-item+.breadcrumb-item:hover::before {
- text-decoration: underline
-}
-
-.breadcrumb-item+.breadcrumb-item:hover::before {
- text-decoration: none
-}
-
-.breadcrumb-item.active {
- color: #6c757d
-}
-
-.pagination {
- display: -webkit-box;
- display: flex;
- padding-left: 0;
- list-style: none;
- border-radius: 2px
-}
-
-.page-link {
- position: relative;
- display: block;
- padding: .5rem .75rem;
- margin-left: -1px;
- line-height: 1.25;
- color: #007bff;
- background-color: #fff;
- border: 1px solid #dee2e6
-}
-
-.page-link:hover {
- z-index: 2;
- color: #0056b3;
- text-decoration: none;
- background-color: #e9ecef;
- border-color: #dee2e6
-}
-
-.page-link:focus {
- z-index: 2;
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.page-item:first-child .page-link {
- margin-left: 0;
- border-top-left-radius: 2px;
- border-bottom-left-radius: 2px
-}
-
-.page-item:last-child .page-link {
- border-top-right-radius: 2px;
- border-bottom-right-radius: 2px
-}
-
-.page-item.active .page-link {
- z-index: 1;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff
-}
-
-.page-item.disabled .page-link {
- color: #6c757d;
- pointer-events: none;
- cursor: auto;
- background-color: #fff;
- border-color: #dee2e6
-}
-
-.pagination-lg .page-link {
- padding: .75rem 1.5rem;
- font-size: 1.25rem;
- line-height: 1.5
-}
-
-.pagination-lg .page-item:first-child .page-link {
- border-top-left-radius: 6px;
- border-bottom-left-radius: 6px
-}
-
-.pagination-lg .page-item:last-child .page-link {
- border-top-right-radius: 6px;
- border-bottom-right-radius: 6px
-}
-
-.pagination-sm .page-link {
- padding: .25rem .5rem;
- font-size: .875rem;
- line-height: 1.5
-}
-
-.pagination-sm .page-item:first-child .page-link {
- border-top-left-radius: .2rem;
- border-bottom-left-radius: .2rem
-}
-
-.pagination-sm .page-item:last-child .page-link {
- border-top-right-radius: .2rem;
- border-bottom-right-radius: .2rem
-}
-
-.badge {
- display: inline-block;
- padding: .45rem 1rem;
- font-size: 80%;
- font-weight: 700;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25rem;
- -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .badge {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-a.badge:focus,
-a.badge:hover {
- text-decoration: none
-}
-
-.badge:empty {
- display: none
-}
-
-.btn .badge {
- position: relative;
- top: -1px
-}
-
-.badge-pill {
- padding-right: .5rem;
- padding-left: .5rem;
- border-radius: 10rem
-}
-
-.badge-primary {
- color: #fff;
- background-color: #047006
-}
-
-a.badge-primary:focus,
-a.badge-primary:hover {
- color: #fff;
- background-color: #023f03
-}
-
-a.badge-primary.focus,
-a.badge-primary:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5)
-}
-
-.badge-secondary {
- color: #fff;
- background-color: grey
-}
-
-a.badge-secondary:focus,
-a.badge-secondary:hover {
- color: #fff;
- background-color: #676767
-}
-
-a.badge-secondary.focus,
-a.badge-secondary:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5)
-}
-
-.badge-success {
- color: #fff;
- background-color: #00e093
-}
-
-a.badge-success:focus,
-a.badge-success:hover {
- color: #fff;
- background-color: #00ad72
-}
-
-a.badge-success.focus,
-a.badge-success:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5)
-}
-
-.badge-info {
- color: #fff;
- background-color: #6c61f6
-}
-
-a.badge-info:focus,
-a.badge-info:hover {
- color: #fff;
- background-color: #3f31f3
-}
-
-a.badge-info.focus,
-a.badge-info:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5)
-}
-
-.badge-warning {
- color: #212529;
- background-color: #f0825f
-}
-
-a.badge-warning:focus,
-a.badge-warning:hover {
- color: #212529;
- background-color: #ec5e30
-}
-
-a.badge-warning.focus,
-a.badge-warning:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5)
-}
-
-.badge-danger {
- color: #fff;
- background-color: #ff5f66
-}
-
-a.badge-danger:focus,
-a.badge-danger:hover {
- color: #fff;
- background-color: #ff2c35
-}
-
-a.badge-danger.focus,
-a.badge-danger:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5)
-}
-
-.badge-light {
- color: #212529;
- background-color: #dfdfdf
-}
-
-a.badge-light:focus,
-a.badge-light:hover {
- color: #212529;
- background-color: #c6c6c6
-}
-
-a.badge-light.focus,
-a.badge-light:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5)
-}
-
-.badge-dark {
- color: #fff;
- background-color: #74767b
-}
-
-a.badge-dark:focus,
-a.badge-dark:hover {
- color: #fff;
- background-color: #5b5d61
-}
-
-a.badge-dark.focus,
-a.badge-dark:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5)
-}
-
-.badge-white {
- color: #212529;
- background-color: #fff
-}
-
-a.badge-white:focus,
-a.badge-white:hover {
- color: #212529;
- background-color: #e6e6e6
-}
-
-a.badge-white.focus,
-a.badge-white:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5)
-}
-
-.badge-orange {
- color: #212529;
- background-color: #ffa600
-}
-
-a.badge-orange:focus,
-a.badge-orange:hover {
- color: #212529;
- background-color: #cc8500
-}
-
-a.badge-orange.focus,
-a.badge-orange:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(255, 166, 0, .5)
-}
-
-.jumbotron {
- padding: 2rem 1rem;
- margin-bottom: 2rem;
- background-color: #e9ecef;
- border-radius: 6px
-}
-
-@media (min-width:576px) {
- .jumbotron {
- padding: 4rem 2rem
- }
-
-}
-
-.jumbotron-fluid {
- padding-right: 0;
- padding-left: 0;
- border-radius: 0
-}
-
-.alert {
- position: relative;
- padding: 1.15rem 1.15rem;
- margin-bottom: 1rem;
- border: 1px solid transparent;
- border-radius: 2px
-}
-
-.alert-heading {
- color: inherit
-}
-
-.alert-link {
- font-weight: 700
-}
-
-.alert-dismissible {
- padding-right: 3.8rem
-}
-
-.alert-dismissible .close {
- position: absolute;
- top: 0;
- right: 0;
- padding: 1.15rem 1.15rem;
- color: inherit
-}
-
-.alert-primary {
- color: #023a03;
- background-color: #cde2cd;
- border-color: #b9d7b9
-}
-
-.alert-primary hr {
- border-top-color: #a9cea9
-}
-
-.alert-primary .alert-link {
- color: #000900
-}
-
-.alert-secondary {
- color: #434343;
- background-color: #e6e6e6;
- border-color: #dbdbdb
-}
-
-.alert-secondary hr {
- border-top-color: #cecece
-}
-
-.alert-secondary .alert-link {
- color: #2a2a2a
-}
-
-.alert-success {
- color: #00744c;
- background-color: #ccf9e9;
- border-color: #b8f6e1
-}
-
-.alert-success hr {
- border-top-color: #a1f3d7
-}
-
-.alert-success .alert-link {
- color: #00412b
-}
-
-.alert-info {
- color: #383280;
- background-color: #e2dffd;
- border-color: #d6d3fc
-}
-
-.alert-info hr {
- border-top-color: #c0bbfa
-}
-
-.alert-info .alert-link {
- color: #28245b
-}
-
-.alert-warning {
- color: #7d4431;
- background-color: #fce6df;
- border-color: #fbdcd2
-}
-
-.alert-warning hr {
- border-top-color: #f9cabb
-}
-
-.alert-warning .alert-link {
- color: #583023
-}
-
-.alert-danger {
- color: #853135;
- background-color: #ffdfe0;
- border-color: #ffd2d4
-}
-
-.alert-danger hr {
- border-top-color: #ffb9bc
-}
-
-.alert-danger .alert-link {
- color: #602326
-}
-
-.alert-light {
- color: #747474;
- background-color: #f9f9f9;
- border-color: #f6f6f6
-}
-
-.alert-light hr {
- border-top-color: #e9e9e9
-}
-
-.alert-light .alert-link {
- color: #5b5b5b
-}
-
-.alert-dark {
- color: #3c3d40;
- background-color: #e3e4e5;
- border-color: #d8d9da
-}
-
-.alert-dark hr {
- border-top-color: #cbccce
-}
-
-.alert-dark .alert-link {
- color: #232426
-}
-
-.alert-white {
- color: #858585;
- background-color: #fff;
- border-color: #fff
-}
-
-.alert-white hr {
- border-top-color: #f2f2f2
-}
-
-.alert-white .alert-link {
- color: #6c6c6c
-}
-
-.alert-orange {
- color: #855600;
- background-color: #ffedcc;
- border-color: #ffe6b8
-}
-
-.alert-orange hr {
- border-top-color: #ffdd9f
-}
-
-.alert-orange .alert-link {
- color: #523500
-}
-
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0
- }
-
- to {
- background-position: 0 0
- }
-
-}
-
-@keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0
- }
-
- to {
- background-position: 0 0
- }
-
-}
-
-.progress {
- display: -webkit-box;
- display: flex;
- height: 1rem;
- overflow: hidden;
- font-size: .75rem;
- background-color: #f3f5f7;
- border-radius: 2px
-}
-
-.progress-bar {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- -webkit-box-pack: center;
- justify-content: center;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- background-color: #007bff;
- -webkit-transition: width .6s ease;
- transition: width .6s ease
-}
-
-@media (prefers-reduced-motion:reduce) {
- .progress-bar {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.progress-bar-striped {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-size: 1rem 1rem
-}
-
-.progress-bar-animated {
- -webkit-animation: progress-bar-stripes 1s linear infinite;
- animation: progress-bar-stripes 1s linear infinite
-}
-
-@media (prefers-reduced-motion:reduce) {
- .progress-bar-animated {
- -webkit-animation: none;
- animation: none
- }
-
-}
-
-.media {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: start;
- align-items: flex-start
-}
-
-.media-body {
- -webkit-box-flex: 1;
- flex: 1
-}
-
-.list-group {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0
-}
-
-.list-group-item-action {
- width: 100%;
- color: #495057;
- text-align: inherit
-}
-
-.list-group-item-action:focus,
-.list-group-item-action:hover {
- z-index: 1;
- color: #495057;
- text-decoration: none;
- background-color: #f8f9fa
-}
-
-.list-group-item-action:active {
- color: #212529;
- background-color: #e9ecef
-}
-
-.list-group-item {
- position: relative;
- display: block;
- padding: .75rem 1.25rem;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid rgba(0, 0, 0, .125)
-}
-
-.list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-top-right-radius: .25rem
-}
-
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: .25rem
-}
-
-.list-group-item.disabled,
-.list-group-item:disabled {
- color: #6c757d;
- pointer-events: none;
- background-color: #fff
-}
-
-.list-group-item.active {
- z-index: 2;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff
-}
-
-.list-group-horizontal {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
-}
-
-.list-group-horizontal .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
-}
-
-.list-group-horizontal .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
-}
-
-.list-group-horizontal .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
-}
-
-@media (min-width:576px) {
- .list-group-horizontal-sm {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .list-group-horizontal-sm .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
- }
-
- .list-group-horizontal-sm .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
- }
-
- .list-group-horizontal-sm .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
- }
-
-}
-
-@media (min-width:768px) {
- .list-group-horizontal-md {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .list-group-horizontal-md .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
- }
-
- .list-group-horizontal-md .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
- }
-
- .list-group-horizontal-md .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
- }
-
-}
-
-@media (min-width:992px) {
- .list-group-horizontal-lg {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .list-group-horizontal-lg .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
- }
-
- .list-group-horizontal-lg .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
- }
-
- .list-group-horizontal-lg .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
- }
-
-}
-
-@media (min-width:1200px) {
- .list-group-horizontal-xl {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .list-group-horizontal-xl .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
- }
-
- .list-group-horizontal-xl .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
- }
-
- .list-group-horizontal-xl .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
- }
-
-}
-
-.list-group-flush .list-group-item {
- border-right: 0;
- border-left: 0;
- border-radius: 0
-}
-
-.list-group-flush .list-group-item:last-child {
- margin-bottom: -1px
-}
-
-.list-group-flush:first-child .list-group-item:first-child {
- border-top: 0
-}
-
-.list-group-flush:last-child .list-group-item:last-child {
- margin-bottom: 0;
- border-bottom: 0
-}
-
-.list-group-item-primary {
- color: #023a03;
- background-color: #b9d7b9
-}
-
-.list-group-item-primary.list-group-item-action:focus,
-.list-group-item-primary.list-group-item-action:hover {
- color: #023a03;
- background-color: #a9cea9
-}
-
-.list-group-item-primary.list-group-item-action.active {
- color: #fff;
- background-color: #023a03;
- border-color: #023a03
-}
-
-.list-group-item-secondary {
- color: #434343;
- background-color: #dbdbdb
-}
-
-.list-group-item-secondary.list-group-item-action:focus,
-.list-group-item-secondary.list-group-item-action:hover {
- color: #434343;
- background-color: #cecece
-}
-
-.list-group-item-secondary.list-group-item-action.active {
- color: #fff;
- background-color: #434343;
- border-color: #434343
-}
-
-.list-group-item-success {
- color: #00744c;
- background-color: #b8f6e1
-}
-
-.list-group-item-success.list-group-item-action:focus,
-.list-group-item-success.list-group-item-action:hover {
- color: #00744c;
- background-color: #a1f3d7
-}
-
-.list-group-item-success.list-group-item-action.active {
- color: #fff;
- background-color: #00744c;
- border-color: #00744c
-}
-
-.list-group-item-info {
- color: #383280;
- background-color: #d6d3fc
-}
-
-.list-group-item-info.list-group-item-action:focus,
-.list-group-item-info.list-group-item-action:hover {
- color: #383280;
- background-color: #c0bbfa
-}
-
-.list-group-item-info.list-group-item-action.active {
- color: #fff;
- background-color: #383280;
- border-color: #383280
-}
-
-.list-group-item-warning {
- color: #7d4431;
- background-color: #fbdcd2
-}
-
-.list-group-item-warning.list-group-item-action:focus,
-.list-group-item-warning.list-group-item-action:hover {
- color: #7d4431;
- background-color: #f9cabb
-}
-
-.list-group-item-warning.list-group-item-action.active {
- color: #fff;
- background-color: #7d4431;
- border-color: #7d4431
-}
-
-.list-group-item-danger {
- color: #853135;
- background-color: #ffd2d4
-}
-
-.list-group-item-danger.list-group-item-action:focus,
-.list-group-item-danger.list-group-item-action:hover {
- color: #853135;
- background-color: #ffb9bc
-}
-
-.list-group-item-danger.list-group-item-action.active {
- color: #fff;
- background-color: #853135;
- border-color: #853135
-}
-
-.list-group-item-light {
- color: #747474;
- background-color: #f6f6f6
-}
-
-.list-group-item-light.list-group-item-action:focus,
-.list-group-item-light.list-group-item-action:hover {
- color: #747474;
- background-color: #e9e9e9
-}
-
-.list-group-item-light.list-group-item-action.active {
- color: #fff;
- background-color: #747474;
- border-color: #747474
-}
-
-.list-group-item-dark {
- color: #3c3d40;
- background-color: #d8d9da
-}
-
-.list-group-item-dark.list-group-item-action:focus,
-.list-group-item-dark.list-group-item-action:hover {
- color: #3c3d40;
- background-color: #cbccce
-}
-
-.list-group-item-dark.list-group-item-action.active {
- color: #fff;
- background-color: #3c3d40;
- border-color: #3c3d40
-}
-
-.list-group-item-white {
- color: #858585;
- background-color: #fff
-}
-
-.list-group-item-white.list-group-item-action:focus,
-.list-group-item-white.list-group-item-action:hover {
- color: #858585;
- background-color: #f2f2f2
-}
-
-.list-group-item-white.list-group-item-action.active {
- color: #fff;
- background-color: #858585;
- border-color: #858585
-}
-
-.list-group-item-orange {
- color: #855600;
- background-color: #ffe6b8
-}
-
-.list-group-item-orange.list-group-item-action:focus,
-.list-group-item-orange.list-group-item-action:hover {
- color: #855600;
- background-color: #ffdd9f
-}
-
-.list-group-item-orange.list-group-item-action.active {
- color: #fff;
- background-color: #855600;
- border-color: #855600
-}
-
-.close {
- float: right;
- font-size: 1.5rem;
- font-weight: 700;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- opacity: .5
-}
-
-.close:hover {
- color: #000;
- text-decoration: none
-}
-
-.close:not(:disabled):not(.disabled):focus,
-.close:not(:disabled):not(.disabled):hover {
- opacity: .75
-}
-
-button.close {
- padding: 0;
- background-color: transparent;
- border: 0;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none
-}
-
-a.close.disabled {
- pointer-events: none
-}
-
-.toast {
- max-width: 350px;
- overflow: hidden;
- font-size: .875rem;
- background-color: rgba(255, 255, 255, .85);
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, .1);
- box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .1);
- -webkit-backdrop-filter: blur(10px);
- backdrop-filter: blur(10px);
- opacity: 0;
- border-radius: .25rem
-}
-
-.toast:not(:last-child) {
- margin-bottom: .75rem
-}
-
-.toast.showing {
- opacity: 1
-}
-
-.toast.show {
- display: block;
- opacity: 1
-}
-
-.toast.hide {
- display: none
-}
-
-.toast-header {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- padding: .25rem .75rem;
- color: #6c757d;
- background-color: rgba(255, 255, 255, .85);
- background-clip: padding-box;
- border-bottom: 1px solid rgba(0, 0, 0, .05)
-}
-
-.toast-body {
- padding: .75rem
-}
-
-.modal-open {
- overflow: hidden
-}
-
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto
-}
-
-.modal {
- position: fixed;
- top: 0;
- left: 0;
- z-index: 1050;
- display: none;
- width: 100%;
- height: 100%;
- overflow: hidden;
- outline: 0
-}
-
-.modal-dialog {
- position: relative;
- width: auto;
- margin: .5rem;
- pointer-events: none
-}
-
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform .3s ease-out;
- transition: -webkit-transform .3s ease-out;
- transition: transform .3s ease-out;
- transition: transform .3s ease-out, -webkit-transform .3s ease-out;
- -webkit-transform: translate(0, -50px);
- transform: translate(0, -50px)
-}
-
-@media (prefers-reduced-motion:reduce) {
- .modal.fade .modal-dialog {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.modal.show .modal-dialog {
- -webkit-transform: none;
- transform: none
-}
-
-.modal-dialog-scrollable {
- display: -webkit-box;
- display: flex;
- max-height: calc(100% - 1rem)
-}
-
-.modal-dialog-scrollable .modal-content {
- max-height: calc(100vh - 1rem);
- overflow: hidden
-}
-
-.modal-dialog-scrollable .modal-footer,
-.modal-dialog-scrollable .modal-header {
- flex-shrink: 0
-}
-
-.modal-dialog-scrollable .modal-body {
- overflow-y: auto
-}
-
-.modal-dialog-centered {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- min-height: calc(100% - 1rem)
-}
-
-.modal-dialog-centered::before {
- display: block;
- height: calc(100vh - 1rem);
- content: 'http://www.w3.org/2000/svg'
-}
-
-.modal-dialog-centered.modal-dialog-scrollable {
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- -webkit-box-pack: center;
- justify-content: center;
- height: 100%
-}
-
-.modal-dialog-centered.modal-dialog-scrollable .modal-content {
- max-height: none
-}
-
-.modal-dialog-centered.modal-dialog-scrollable::before {
- content: none
-}
-
-.modal-content {
- position: relative;
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- width: 100%;
- pointer-events: auto;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: .3rem;
- outline: 0
-}
-
-.modal-backdrop {
- position: fixed;
- top: 0;
- left: 0;
- z-index: 1040;
- width: 100vw;
- height: 100vh;
- background-color: #000
-}
-
-.modal-backdrop.fade {
- opacity: 0
-}
-
-.modal-backdrop.show {
- opacity: .8
-}
-
-.modal-header {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: start;
- align-items: flex-start;
- -webkit-box-pack: justify;
- justify-content: space-between;
- padding: 1rem 1rem;
- border-bottom: 1px solid #dee2e6;
- border-top-left-radius: .3rem;
- border-top-right-radius: .3rem
-}
-
-.modal-header .close {
- padding: 1rem 1rem;
- margin: -1rem -1rem -1rem auto
-}
-
-.modal-title {
- margin-bottom: 0;
- line-height: 1.5
-}
-
-.modal-body {
- position: relative;
- -webkit-box-flex: 1;
- flex: 1 1 auto;
- padding: 1rem
-}
-
-.modal-footer {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: end;
- justify-content: flex-end;
- padding: 1rem;
- border-top: 1px solid #dee2e6;
- border-bottom-right-radius: .3rem;
- border-bottom-left-radius: .3rem
-}
-
-.modal-footer>:not(:first-child) {
- margin-left: .25rem
-}
-
-.modal-footer>:not(:last-child) {
- margin-right: .25rem
-}
-
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll
-}
-
-@media (min-width:576px) {
- .modal-dialog {
- max-width: 500px;
- margin: 1.75rem auto
- }
-
- .modal-dialog-scrollable {
- max-height: calc(100% - 3.5rem)
- }
-
- .modal-dialog-scrollable .modal-content {
- max-height: calc(100vh - 3.5rem)
- }
-
- .modal-dialog-centered {
- min-height: calc(100% - 3.5rem)
- }
-
- .modal-dialog-centered::before {
- height: calc(100vh - 3.5rem)
- }
-
- .modal-sm {
- max-width: 300px
- }
-
-}
-
-@media (min-width:992px) {
- .modal-lg,
- .modal-xl {
- max-width: 800px
- }
-
-}
-
-@media (min-width:1200px) {
- .modal-xl {
- max-width: 1140px
- }
-
-}
-
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-style: normal;
- font-weight: 400;
- line-height: 1.7;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: .875rem;
- word-wrap: break-word;
- opacity: 0
-}
-
-.tooltip.show {
- opacity: .9
-}
-
-.tooltip .arrow {
- position: absolute;
- display: block;
- width: .8rem;
- height: .4rem
-}
-
-.tooltip .arrow::before {
- position: absolute;
- content: '%23dc3545';
- border-color: transparent;
- border-style: solid
-}
-
-.bs-tooltip-auto[x-placement^=top],
-.bs-tooltip-top {
- padding: .4rem 0
-}
-
-.bs-tooltip-auto[x-placement^=top] .arrow,
-.bs-tooltip-top .arrow {
- bottom: 0
-}
-
-.bs-tooltip-auto[x-placement^=top] .arrow::before,
-.bs-tooltip-top .arrow::before {
- top: 0;
- border-width: .4rem .4rem 0;
- border-top-color: #000
-}
-
-.bs-tooltip-auto[x-placement^=right],
-.bs-tooltip-right {
- padding: 0 .4rem
-}
-
-.bs-tooltip-auto[x-placement^=right] .arrow,
-.bs-tooltip-right .arrow {
- left: 0;
- width: .4rem;
- height: .8rem
-}
-
-.bs-tooltip-auto[x-placement^=right] .arrow::before,
-.bs-tooltip-right .arrow::before {
- right: 0;
- border-width: .4rem .4rem .4rem 0;
- border-right-color: #000
-}
-
-.bs-tooltip-auto[x-placement^=bottom],
-.bs-tooltip-bottom {
- padding: .4rem 0
-}
-
-.bs-tooltip-auto[x-placement^=bottom] .arrow,
-.bs-tooltip-bottom .arrow {
- top: 0
-}
-
-.bs-tooltip-auto[x-placement^=bottom] .arrow::before,
-.bs-tooltip-bottom .arrow::before {
- bottom: 0;
- border-width: 0 .4rem .4rem;
- border-bottom-color: #000
-}
-
-.bs-tooltip-auto[x-placement^=left],
-.bs-tooltip-left {
- padding: 0 .4rem
-}
-
-.bs-tooltip-auto[x-placement^=left] .arrow,
-.bs-tooltip-left .arrow {
- right: 0;
- width: .4rem;
- height: .8rem
-}
-
-.bs-tooltip-auto[x-placement^=left] .arrow::before,
-.bs-tooltip-left .arrow::before {
- left: 0;
- border-width: .4rem 0 .4rem .4rem;
- border-left-color: #000
-}
-
-.tooltip-inner {
- max-width: 200px;
- padding: .25rem .5rem;
- color: #fff;
- text-align: center;
- background-color: #000;
- border-radius: .25rem
-}
-
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: block;
- max-width: 276px;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-style: normal;
- font-weight: 400;
- line-height: 1.7;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: .875rem;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: .3rem
-}
-
-.popover .arrow {
- position: absolute;
- display: block;
- width: 1rem;
- height: .5rem;
- margin: 0 6px
-}
-
-.popover .arrow::after,
-.popover .arrow::before {
- position: absolute;
- display: block;
- content: '-2 -2 7 7';
- border-color: transparent;
- border-style: solid
-}
-
-.bs-popover-auto[x-placement^=top],
-.bs-popover-top {
- margin-bottom: .5rem
-}
-
-.bs-popover-auto[x-placement^=top]>.arrow,
-.bs-popover-top>.arrow {
- bottom: calc((.5rem + 1px) * -1)
-}
-
-.bs-popover-auto[x-placement^=top]>.arrow::before,
-.bs-popover-top>.arrow::before {
- bottom: 0;
- border-width: .5rem .5rem 0;
- border-top-color: rgba(0, 0, 0, .25)
-}
-
-.bs-popover-auto[x-placement^=top]>.arrow::after,
-.bs-popover-top>.arrow::after {
- bottom: 1px;
- border-width: .5rem .5rem 0;
- border-top-color: #fff
-}
-
-.bs-popover-auto[x-placement^=right],
-.bs-popover-right {
- margin-left: .5rem
-}
-
-.bs-popover-auto[x-placement^=right]>.arrow,
-.bs-popover-right>.arrow {
- left: calc((.5rem + 1px) * -1);
- width: .5rem;
- height: 1rem;
- margin: 6px 0
-}
-
-.bs-popover-auto[x-placement^=right]>.arrow::before,
-.bs-popover-right>.arrow::before {
- left: 0;
- border-width: .5rem .5rem .5rem 0;
- border-right-color: rgba(0, 0, 0, .25)
-}
-
-.bs-popover-auto[x-placement^=right]>.arrow::after,
-.bs-popover-right>.arrow::after {
- left: 1px;
- border-width: .5rem .5rem .5rem 0;
- border-right-color: #fff
-}
-
-.bs-popover-auto[x-placement^=bottom],
-.bs-popover-bottom {
- margin-top: .5rem
-}
-
-.bs-popover-auto[x-placement^=bottom]>.arrow,
-.bs-popover-bottom>.arrow {
- top: calc((.5rem + 1px) * -1)
-}
-
-.bs-popover-auto[x-placement^=bottom]>.arrow::before,
-.bs-popover-bottom>.arrow::before {
- top: 0;
- border-width: 0 .5rem .5rem .5rem;
- border-bottom-color: rgba(0, 0, 0, .25)
-}
-
-.bs-popover-auto[x-placement^=bottom]>.arrow::after,
-.bs-popover-bottom>.arrow::after {
- top: 1px;
- border-width: 0 .5rem .5rem .5rem;
- border-bottom-color: #fff
-}
-
-.bs-popover-auto[x-placement^=bottom] .popover-header::before,
-.bs-popover-bottom .popover-header::before {
- position: absolute;
- top: 0;
- left: 50%;
- display: block;
- width: 1rem;
- margin-left: -.5rem;
- content: '%23dc3545';
- border-bottom: 1px solid #f7f7f7
-}
-
-.bs-popover-auto[x-placement^=left],
-.bs-popover-left {
- margin-right: .5rem
-}
-
-.bs-popover-auto[x-placement^=left]>.arrow,
-.bs-popover-left>.arrow {
- right: calc((.5rem + 1px) * -1);
- width: .5rem;
- height: 1rem;
- margin: 6px 0
-}
-
-.bs-popover-auto[x-placement^=left]>.arrow::before,
-.bs-popover-left>.arrow::before {
- right: 0;
- border-width: .5rem 0 .5rem .5rem;
- border-left-color: rgba(0, 0, 0, .25)
-}
-
-.bs-popover-auto[x-placement^=left]>.arrow::after,
-.bs-popover-left>.arrow::after {
- right: 1px;
- border-width: .5rem 0 .5rem .5rem;
- border-left-color: #fff
-}
-
-.popover-header {
- padding: .5rem .75rem;
- margin-bottom: 0;
- font-size: 1rem;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-top-left-radius: calc(6px - 1px);
- border-top-right-radius: calc(6px - 1px)
-}
-
-.popover-header:empty {
- display: none
-}
-
-.popover-body {
- padding: .5rem .75rem;
- color: #212529
-}
-
-.carousel {
- position: relative
-}
-
-.carousel.pointer-event {
- touch-action: pan-y
-}
-
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden
-}
-
-.carousel-inner::after {
- display: block;
- clear: both;
- content: 'M0 0l3 3m0-3L0 3'
-}
-
-.carousel-item {
- position: relative;
- display: none;
- float: left;
- width: 100%;
- margin-right: -100%;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-transition: -webkit-transform .6s ease-in-out;
- transition: -webkit-transform .6s ease-in-out;
- transition: transform .6s ease-in-out;
- transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .carousel-item {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.carousel-item-next,
-.carousel-item-prev,
-.carousel-item.active {
- display: block
-}
-
-.active.carousel-item-right,
-.carousel-item-next:not(.carousel-item-left) {
- -webkit-transform: translateX(100%);
- transform: translateX(100%)
-}
-
-.active.carousel-item-left,
-.carousel-item-prev:not(.carousel-item-right) {
- -webkit-transform: translateX(-100%);
- transform: translateX(-100%)
-}
-
-.carousel-fade .carousel-item {
- opacity: 0;
- -webkit-transition-property: opacity;
- transition-property: opacity;
- -webkit-transform: none;
- transform: none
-}
-
-.carousel-fade .carousel-item-next.carousel-item-left,
-.carousel-fade .carousel-item-prev.carousel-item-right,
-.carousel-fade .carousel-item.active {
- z-index: 1;
- opacity: 1
-}
-
-.carousel-fade .active.carousel-item-left,
-.carousel-fade .active.carousel-item-right {
- z-index: 0;
- opacity: 0;
- -webkit-transition: 0s .6s opacity;
- transition: 0s .6s opacity
-}
-
-@media (prefers-reduced-motion:reduce) {
- .carousel-fade .active.carousel-item-left,
- .carousel-fade .active.carousel-item-right {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.carousel-control-next,
-.carousel-control-prev {
- position: absolute;
- top: 0;
- bottom: 0;
- z-index: 1;
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center;
- width: 15%;
- color: #fff;
- text-align: center;
- opacity: .5;
- -webkit-transition: opacity .15s ease;
- transition: opacity .15s ease
-}
-
-@media (prefers-reduced-motion:reduce) {
- .carousel-control-next,
- .carousel-control-prev {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.carousel-control-next:focus,
-.carousel-control-next:hover,
-.carousel-control-prev:focus,
-.carousel-control-prev:hover {
- color: #fff;
- text-decoration: none;
- outline: 0;
- opacity: .9
-}
-
-.carousel-control-prev {
- left: 0
-}
-
-.carousel-control-next {
- right: 0
-}
-
-.carousel-control-next-icon,
-.carousel-control-prev-icon {
- display: inline-block;
- width: 20px;
- height: 20px;
- background: no-repeat 50%/100% 100%
-}
-
-.carousel-control-prev-icon {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e")
-}
-
-.carousel-control-next-icon {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e")
-}
-
-.carousel-indicators {
- position: absolute;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 15;
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: center;
- justify-content: center;
- padding-left: 0;
- margin-right: 15%;
- margin-left: 15%;
- list-style: none
-}
-
-.carousel-indicators li {
- box-sizing: content-box;
- -webkit-box-flex: 0;
- flex: 0 1 auto;
- width: 30px;
- height: 3px;
- margin-right: 3px;
- margin-left: 3px;
- text-indent: -999px;
- cursor: pointer;
- background-color: #fff;
- background-clip: padding-box;
- border-top: 10px solid transparent;
- border-bottom: 10px solid transparent;
- opacity: .5;
- -webkit-transition: opacity .6s ease;
- transition: opacity .6s ease
-}
-
-@media (prefers-reduced-motion:reduce) {
- .carousel-indicators li {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.carousel-indicators .active {
- opacity: 1
-}
-
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center
-}
-
-@-webkit-keyframes spinner-border {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg)
- }
-
-}
-
-@keyframes spinner-border {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg)
- }
-
-}
-
-.spinner-border {
- display: inline-block;
- width: 2rem;
- height: 2rem;
- vertical-align: text-bottom;
- border: .25em solid currentColor;
- border-right-color: transparent;
- border-radius: 50%;
- -webkit-animation: spinner-border .75s linear infinite;
- animation: spinner-border .75s linear infinite
-}
-
-.spinner-border-sm {
- width: 1rem;
- height: 1rem;
- border-width: .2em
-}
-
-@-webkit-keyframes spinner-grow {
- 0% {
- -webkit-transform: scale(0);
- transform: scale(0)
- }
-
- 50% {
- opacity: 1
- }
-
-}
-
-@keyframes spinner-grow {
- 0% {
- -webkit-transform: scale(0);
- transform: scale(0)
- }
-
- 50% {
- opacity: 1
- }
-
-}
-
-.spinner-grow {
- display: inline-block;
- width: 2rem;
- height: 2rem;
- vertical-align: text-bottom;
- background-color: currentColor;
- border-radius: 50%;
- opacity: 0;
- -webkit-animation: spinner-grow .75s linear infinite;
- animation: spinner-grow .75s linear infinite
-}
-
-.spinner-grow-sm {
- width: 1rem;
- height: 1rem
-}
-
-.align-baseline {
- vertical-align: baseline !important
-}
-
-.align-top {
- vertical-align: top !important
-}
-
-.align-middle {
- vertical-align: middle !important
-}
-
-.align-bottom {
- vertical-align: bottom !important
-}
-
-.align-text-bottom {
- vertical-align: text-bottom !important
-}
-
-.align-text-top {
- vertical-align: text-top !important
-}
-
-.bg-primary {
- background-color: #047006 !important
-}
-
-a.bg-primary:focus,
-a.bg-primary:hover,
-button.bg-primary:focus,
-button.bg-primary:hover {
- background-color: #023f03 !important
-}
-
-.bg-secondary {
- background-color: grey !important
-}
-
-a.bg-secondary:focus,
-a.bg-secondary:hover,
-button.bg-secondary:focus,
-button.bg-secondary:hover {
- background-color: #676767 !important
-}
-
-.bg-success {
- background-color: #00e093 !important
-}
-
-a.bg-success:focus,
-a.bg-success:hover,
-button.bg-success:focus,
-button.bg-success:hover {
- background-color: #00ad72 !important
-}
-
-.bg-info {
- background-color: #6c61f6 !important
-}
-
-a.bg-info:focus,
-a.bg-info:hover,
-button.bg-info:focus,
-button.bg-info:hover {
- background-color: #3f31f3 !important
-}
-
-.bg-warning {
- background-color: #f0825f !important
-}
-
-a.bg-warning:focus,
-a.bg-warning:hover,
-button.bg-warning:focus,
-button.bg-warning:hover {
- background-color: #ec5e30 !important
-}
-
-.bg-danger {
- background-color: #ff5f66 !important
-}
-
-a.bg-danger:focus,
-a.bg-danger:hover,
-button.bg-danger:focus,
-button.bg-danger:hover {
- background-color: #ff2c35 !important
-}
-
-.bg-light {
- background-color: #dfdfdf !important
-}
-
-a.bg-light:focus,
-a.bg-light:hover,
-button.bg-light:focus,
-button.bg-light:hover {
- background-color: #c6c6c6 !important
-}
-
-.bg-dark {
- background-color: #74767b !important
-}
-
-a.bg-dark:focus,
-a.bg-dark:hover,
-button.bg-dark:focus,
-button.bg-dark:hover {
- background-color: #5b5d61 !important
-}
-
-.bg-white {
- background-color: #fff !important
-}
-
-a.bg-white:focus,
-a.bg-white:hover,
-button.bg-white:focus,
-button.bg-white:hover {
- background-color: #e6e6e6 !important
-}
-
-.bg-orange {
- background-color: #ffa600 !important
-}
-
-a.bg-orange:focus,
-a.bg-orange:hover,
-button.bg-orange:focus,
-button.bg-orange:hover {
- background-color: #cc8500 !important
-}
-
-.bg-white {
- background-color: #fff !important
-}
-
-.bg-transparent {
- background-color: transparent !important
-}
-
-.border {
- border: 1px solid #f2f4f9 !important
-}
-
-.border-top {
- border-top: 1px solid #f2f4f9 !important
-}
-
-.border-right {
- border-right: 1px solid #f2f4f9 !important
-}
-
-.border-bottom {
- border-bottom: 1px solid #f2f4f9 !important
-}
-
-.border-left {
- border-left: 1px solid #f2f4f9 !important
-}
-
-.border-0 {
- border: 0 !important
-}
-
-.border-top-0 {
- border-top: 0 !important
-}
-
-.border-right-0 {
- border-right: 0 !important
-}
-
-.border-bottom-0 {
- border-bottom: 0 !important
-}
-
-.border-left-0 {
- border-left: 0 !important
-}
-
-.border-primary {
- border-color: #047006 !important
-}
-
-.border-secondary {
- border-color: grey !important
-}
-
-.border-success {
- border-color: #00e093 !important
-}
-
-.border-info {
- border-color: #6c61f6 !important
-}
-
-.border-warning {
- border-color: #f0825f !important
-}
-
-.border-danger {
- border-color: #ff5f66 !important
-}
-
-.border-light {
- border-color: #dfdfdf !important
-}
-
-.border-dark {
- border-color: #74767b !important
-}
-
-.border-white {
- border-color: #fff !important
-}
-
-.border-orange {
- border-color: #ffa600 !important
-}
-
-.border-white {
- border-color: #fff !important
-}
-
-.rounded-sm {
- border-radius: .2rem !important
-}
-
-.rounded {
- border-radius: 2px !important
-}
-
-.rounded-top {
- border-top-left-radius: 2px !important;
- border-top-right-radius: 2px !important
-}
-
-.rounded-right {
- border-top-right-radius: 2px !important;
- border-bottom-right-radius: 2px !important
-}
-
-.rounded-bottom {
- border-bottom-right-radius: 2px !important;
- border-bottom-left-radius: 2px !important
-}
-
-.rounded-left {
- border-top-left-radius: 2px !important;
- border-bottom-left-radius: 2px !important
-}
-
-.rounded-lg {
- border-radius: 6px !important
-}
-
-.rounded-circle {
- border-radius: 50% !important
-}
-
-.rounded-pill {
- border-radius: 50rem !important
-}
-
-.rounded-0 {
- border-radius: 0 !important
-}
-
-.clearfix::after {
- display: block;
- clear: both;
- content: '.5'
-}
-
-.d-none {
- display: none !important
-}
-
-.d-inline {
- display: inline !important
-}
-
-.d-inline-block {
- display: inline-block !important
-}
-
-.d-block {
- display: block !important
-}
-
-.d-table {
- display: table !important
-}
-
-.d-table-row {
- display: table-row !important
-}
-
-.d-table-cell {
- display: table-cell !important
-}
-
-.d-flex {
- display: -webkit-box !important;
- display: flex !important
-}
-
-.d-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
-}
-
-@media (min-width:576px) {
- .d-sm-none {
- display: none !important
- }
-
- .d-sm-inline {
- display: inline !important
- }
-
- .d-sm-inline-block {
- display: inline-block !important
- }
-
- .d-sm-block {
- display: block !important
- }
-
- .d-sm-table {
- display: table !important
- }
-
- .d-sm-table-row {
- display: table-row !important
- }
-
- .d-sm-table-cell {
- display: table-cell !important
- }
-
- .d-sm-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-sm-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-@media (min-width:768px) {
- .d-md-none {
- display: none !important
- }
-
- .d-md-inline {
- display: inline !important
- }
-
- .d-md-inline-block {
- display: inline-block !important
- }
-
- .d-md-block {
- display: block !important
- }
-
- .d-md-table {
- display: table !important
- }
-
- .d-md-table-row {
- display: table-row !important
- }
-
- .d-md-table-cell {
- display: table-cell !important
- }
-
- .d-md-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-md-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-@media (min-width:992px) {
- .d-lg-none {
- display: none !important
- }
-
- .d-lg-inline {
- display: inline !important
- }
-
- .d-lg-inline-block {
- display: inline-block !important
- }
-
- .d-lg-block {
- display: block !important
- }
-
- .d-lg-table {
- display: table !important
- }
-
- .d-lg-table-row {
- display: table-row !important
- }
-
- .d-lg-table-cell {
- display: table-cell !important
- }
-
- .d-lg-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-lg-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-@media (min-width:1200px) {
- .d-xl-none {
- display: none !important
- }
-
- .d-xl-inline {
- display: inline !important
- }
-
- .d-xl-inline-block {
- display: inline-block !important
- }
-
- .d-xl-block {
- display: block !important
- }
-
- .d-xl-table {
- display: table !important
- }
-
- .d-xl-table-row {
- display: table-row !important
- }
-
- .d-xl-table-cell {
- display: table-cell !important
- }
-
- .d-xl-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-xl-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-@media print {
- .d-print-none {
- display: none !important
- }
-
- .d-print-inline {
- display: inline !important
- }
-
- .d-print-inline-block {
- display: inline-block !important
- }
-
- .d-print-block {
- display: block !important
- }
-
- .d-print-table {
- display: table !important
- }
-
- .d-print-table-row {
- display: table-row !important
- }
-
- .d-print-table-cell {
- display: table-cell !important
- }
-
- .d-print-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-print-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-.embed-responsive {
- position: relative;
- display: block;
- width: 100%;
- padding: 0;
- overflow: hidden
-}
-
-.embed-responsive::before {
- display: block;
- content: '3'
-}
-
-.embed-responsive .embed-responsive-item,
-.embed-responsive embed,
-.embed-responsive iframe,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0
-}
-
-.embed-responsive-21by9::before {
- padding-top: 42.85714%
-}
-
-.embed-responsive-16by9::before {
- padding-top: 56.25%
-}
-
-.embed-responsive-4by3::before {
- padding-top: 75%
-}
-
-.embed-responsive-1by1::before {
- padding-top: 100%
-}
-
-.embed-responsive-21by9::before {
- padding-top: 42.85714%
-}
-
-.embed-responsive-16by9::before {
- padding-top: 56.25%
-}
-
-.embed-responsive-4by3::before {
- padding-top: 75%
-}
-
-.embed-responsive-1by1::before {
- padding-top: 100%
-}
-
-.flex-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
-}
-
-.flex-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
-}
-
-.flex-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
-}
-
-.flex-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
-}
-
-.flex-wrap {
- flex-wrap: wrap !important
-}
-
-.flex-nowrap {
- flex-wrap: nowrap !important
-}
-
-.flex-wrap-reverse {
- flex-wrap: wrap-reverse !important
-}
-
-.flex-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
-}
-
-.flex-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
-}
-
-.flex-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
-}
-
-.flex-shrink-0 {
- flex-shrink: 0 !important
-}
-
-.flex-shrink-1 {
- flex-shrink: 1 !important
-}
-
-.justify-content-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
-}
-
-.justify-content-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
-}
-
-.justify-content-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
-}
-
-.justify-content-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
-}
-
-.justify-content-around {
- justify-content: space-around !important
-}
-
-.align-items-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
-}
-
-.align-items-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
-}
-
-.align-items-center {
- -webkit-box-align: center !important;
- align-items: center !important
-}
-
-.align-items-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
-}
-
-.align-items-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
-}
-
-.align-content-start {
- align-content: flex-start !important
-}
-
-.align-content-end {
- align-content: flex-end !important
-}
-
-.align-content-center {
- align-content: center !important
-}
-
-.align-content-between {
- align-content: space-between !important
-}
-
-.align-content-around {
- align-content: space-around !important
-}
-
-.align-content-stretch {
- align-content: stretch !important
-}
-
-.align-self-auto {
- align-self: auto !important
-}
-
-.align-self-start {
- align-self: flex-start !important
-}
-
-.align-self-end {
- align-self: flex-end !important
-}
-
-.align-self-center {
- align-self: center !important
-}
-
-.align-self-baseline {
- align-self: baseline !important
-}
-
-.align-self-stretch {
- align-self: stretch !important
-}
-
-@media (min-width:576px) {
- .flex-sm-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
- }
-
- .flex-sm-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
- }
-
- .flex-sm-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
- }
-
- .flex-sm-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
- }
-
- .flex-sm-wrap {
- flex-wrap: wrap !important
- }
-
- .flex-sm-nowrap {
- flex-wrap: nowrap !important
- }
-
- .flex-sm-wrap-reverse {
- flex-wrap: wrap-reverse !important
- }
-
- .flex-sm-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
- }
-
- .flex-sm-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
- }
-
- .flex-sm-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
- }
-
- .flex-sm-shrink-0 {
- flex-shrink: 0 !important
- }
-
- .flex-sm-shrink-1 {
- flex-shrink: 1 !important
- }
-
- .justify-content-sm-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
- }
-
- .justify-content-sm-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
- }
-
- .justify-content-sm-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
- }
-
- .justify-content-sm-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
- }
-
- .justify-content-sm-around {
- justify-content: space-around !important
- }
-
- .align-items-sm-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
- }
-
- .align-items-sm-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
- }
-
- .align-items-sm-center {
- -webkit-box-align: center !important;
- align-items: center !important
- }
-
- .align-items-sm-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
- }
-
- .align-items-sm-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
- }
-
- .align-content-sm-start {
- align-content: flex-start !important
- }
-
- .align-content-sm-end {
- align-content: flex-end !important
- }
-
- .align-content-sm-center {
- align-content: center !important
- }
-
- .align-content-sm-between {
- align-content: space-between !important
- }
-
- .align-content-sm-around {
- align-content: space-around !important
- }
-
- .align-content-sm-stretch {
- align-content: stretch !important
- }
-
- .align-self-sm-auto {
- align-self: auto !important
- }
-
- .align-self-sm-start {
- align-self: flex-start !important
- }
-
- .align-self-sm-end {
- align-self: flex-end !important
- }
-
- .align-self-sm-center {
- align-self: center !important
- }
-
- .align-self-sm-baseline {
- align-self: baseline !important
- }
-
- .align-self-sm-stretch {
- align-self: stretch !important
- }
-
-}
-
-@media (min-width:768px) {
- .flex-md-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
- }
-
- .flex-md-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
- }
-
- .flex-md-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
- }
-
- .flex-md-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
- }
-
- .flex-md-wrap {
- flex-wrap: wrap !important
- }
-
- .flex-md-nowrap {
- flex-wrap: nowrap !important
- }
-
- .flex-md-wrap-reverse {
- flex-wrap: wrap-reverse !important
- }
-
- .flex-md-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
- }
-
- .flex-md-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
- }
-
- .flex-md-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
- }
-
- .flex-md-shrink-0 {
- flex-shrink: 0 !important
- }
-
- .flex-md-shrink-1 {
- flex-shrink: 1 !important
- }
-
- .justify-content-md-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
- }
-
- .justify-content-md-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
- }
-
- .justify-content-md-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
- }
-
- .justify-content-md-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
- }
-
- .justify-content-md-around {
- justify-content: space-around !important
- }
-
- .align-items-md-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
- }
-
- .align-items-md-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
- }
-
- .align-items-md-center {
- -webkit-box-align: center !important;
- align-items: center !important
- }
-
- .align-items-md-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
- }
-
- .align-items-md-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
- }
-
- .align-content-md-start {
- align-content: flex-start !important
- }
-
- .align-content-md-end {
- align-content: flex-end !important
- }
-
- .align-content-md-center {
- align-content: center !important
- }
-
- .align-content-md-between {
- align-content: space-between !important
- }
-
- .align-content-md-around {
- align-content: space-around !important
- }
-
- .align-content-md-stretch {
- align-content: stretch !important
- }
-
- .align-self-md-auto {
- align-self: auto !important
- }
-
- .align-self-md-start {
- align-self: flex-start !important
- }
-
- .align-self-md-end {
- align-self: flex-end !important
- }
-
- .align-self-md-center {
- align-self: center !important
- }
-
- .align-self-md-baseline {
- align-self: baseline !important
- }
-
- .align-self-md-stretch {
- align-self: stretch !important
- }
-
-}
-
-@media (min-width:992px) {
- .flex-lg-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
- }
-
- .flex-lg-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
- }
-
- .flex-lg-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
- }
-
- .flex-lg-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
- }
-
- .flex-lg-wrap {
- flex-wrap: wrap !important
- }
-
- .flex-lg-nowrap {
- flex-wrap: nowrap !important
- }
-
- .flex-lg-wrap-reverse {
- flex-wrap: wrap-reverse !important
- }
-
- .flex-lg-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
- }
-
- .flex-lg-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
- }
-
- .flex-lg-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
- }
-
- .flex-lg-shrink-0 {
- flex-shrink: 0 !important
- }
-
- .flex-lg-shrink-1 {
- flex-shrink: 1 !important
- }
-
- .justify-content-lg-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
- }
-
- .justify-content-lg-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
- }
-
- .justify-content-lg-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
- }
-
- .justify-content-lg-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
- }
-
- .justify-content-lg-around {
- justify-content: space-around !important
- }
-
- .align-items-lg-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
- }
-
- .align-items-lg-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
- }
-
- .align-items-lg-center {
- -webkit-box-align: center !important;
- align-items: center !important
- }
-
- .align-items-lg-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
- }
-
- .align-items-lg-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
- }
-
- .align-content-lg-start {
- align-content: flex-start !important
- }
-
- .align-content-lg-end {
- align-content: flex-end !important
- }
-
- .align-content-lg-center {
- align-content: center !important
- }
-
- .align-content-lg-between {
- align-content: space-between !important
- }
-
- .align-content-lg-around {
- align-content: space-around !important
- }
-
- .align-content-lg-stretch {
- align-content: stretch !important
- }
-
- .align-self-lg-auto {
- align-self: auto !important
- }
-
- .align-self-lg-start {
- align-self: flex-start !important
- }
-
- .align-self-lg-end {
- align-self: flex-end !important
- }
-
- .align-self-lg-center {
- align-self: center !important
- }
-
- .align-self-lg-baseline {
- align-self: baseline !important
- }
-
- .align-self-lg-stretch {
- align-self: stretch !important
- }
-
-}
-
-@media (min-width:1200px) {
- .flex-xl-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
- }
-
- .flex-xl-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
- }
-
- .flex-xl-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
- }
-
- .flex-xl-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
- }
-
- .flex-xl-wrap {
- flex-wrap: wrap !important
- }
-
- .flex-xl-nowrap {
- flex-wrap: nowrap !important
- }
-
- .flex-xl-wrap-reverse {
- flex-wrap: wrap-reverse !important
- }
-
- .flex-xl-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
- }
-
- .flex-xl-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
- }
-
- .flex-xl-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
- }
-
- .flex-xl-shrink-0 {
- flex-shrink: 0 !important
- }
-
- .flex-xl-shrink-1 {
- flex-shrink: 1 !important
- }
-
- .justify-content-xl-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
- }
-
- .justify-content-xl-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
- }
-
- .justify-content-xl-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
- }
-
- .justify-content-xl-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
- }
-
- .justify-content-xl-around {
- justify-content: space-around !important
- }
-
- .align-items-xl-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
- }
-
- .align-items-xl-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
- }
-
- .align-items-xl-center {
- -webkit-box-align: center !important;
- align-items: center !important
- }
-
- .align-items-xl-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
- }
-
- .align-items-xl-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
- }
-
- .align-content-xl-start {
- align-content: flex-start !important
- }
-
- .align-content-xl-end {
- align-content: flex-end !important
- }
-
- .align-content-xl-center {
- align-content: center !important
- }
-
- .align-content-xl-between {
- align-content: space-between !important
- }
-
- .align-content-xl-around {
- align-content: space-around !important
- }
-
- .align-content-xl-stretch {
- align-content: stretch !important
- }
-
- .align-self-xl-auto {
- align-self: auto !important
- }
-
- .align-self-xl-start {
- align-self: flex-start !important
- }
-
- .align-self-xl-end {
- align-self: flex-end !important
- }
-
- .align-self-xl-center {
- align-self: center !important
- }
-
- .align-self-xl-baseline {
- align-self: baseline !important
- }
-
- .align-self-xl-stretch {
- align-self: stretch !important
- }
-
-}
-
-.float-left {
- float: left !important
-}
-
-.float-right {
- float: right !important
-}
-
-.float-none {
- float: none !important
-}
-
-@media (min-width:576px) {
- .float-sm-left {
- float: left !important
- }
-
- .float-sm-right {
- float: right !important
- }
-
- .float-sm-none {
- float: none !important
- }
-
-}
-
-@media (min-width:768px) {
- .float-md-left {
- float: left !important
- }
-
- .float-md-right {
- float: right !important
- }
-
- .float-md-none {
- float: none !important
- }
-
-}
-
-@media (min-width:992px) {
- .float-lg-left {
- float: left !important
- }
-
- .float-lg-right {
- float: right !important
- }
-
- .float-lg-none {
- float: none !important
- }
-
-}
-
-@media (min-width:1200px) {
- .float-xl-left {
- float: left !important
- }
-
- .float-xl-right {
- float: right !important
- }
-
- .float-xl-none {
- float: none !important
- }
-
-}
-
-.overflow-auto {
- overflow: auto !important
-}
-
-.overflow-hidden {
- overflow: hidden !important
-}
-
-.position-static {
- position: static !important
-}
-
-.position-relative {
- position: relative !important
-}
-
-.position-absolute {
- position: absolute !important
-}
-
-.position-fixed {
- position: fixed !important
-}
-
-.position-sticky {
- position: -webkit-sticky !important;
- position: sticky !important
-}
-
-.fixed-top {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1030
-}
-
-.fixed-bottom {
- position: fixed;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1030
-}
-
-@supports ((position:-webkit-sticky) or (position:sticky)) {
- .sticky-top {
- position: -webkit-sticky;
- position: sticky;
- top: 0;
- z-index: 1020
- }
-
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0
-}
-
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- overflow: visible;
- clip: auto;
- white-space: normal
-}
-
-.shadow-sm {
- box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important
-}
-
-.shadow {
- box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important
-}
-
-.shadow-lg {
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175) !important
-}
-
-.shadow-none {
- box-shadow: none !important
-}
-
-.w-25 {
- width: 25% !important
-}
-
-.w-50 {
- width: 50% !important
-}
-
-.w-75 {
- width: 75% !important
-}
-
-.w-100 {
- width: 100% !important
-}
-
-.w-auto {
- width: auto !important
-}
-
-.h-25 {
- height: 25% !important
-}
-
-.h-50 {
- height: 50% !important
-}
-
-.h-75 {
- height: 75% !important
-}
-
-.h-100 {
- height: 100% !important
-}
-
-.h-auto {
- height: auto !important
-}
-
-.mw-100 {
- max-width: 100% !important
-}
-
-.mh-100 {
- max-height: 100% !important
-}
-
-.min-vw-100 {
- min-width: 100vw !important
-}
-
-.min-vh-100 {
- min-height: 100vh !important
-}
-
-.vw-100 {
- width: 100vw !important
-}
-
-.vh-100 {
- height: 100vh !important
-}
-
-.stretched-link::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1;
- pointer-events: auto;
- content: '.5';
- background-color: rgba(0, 0, 0, 0)
-}
-
-.m-0 {
- margin: 0 !important
-}
-
-.mt-0,
-.my-0 {
- margin-top: 0 !important
-}
-
-.mr-0,
-.mx-0 {
- margin-right: 0 !important
-}
-
-.mb-0,
-.my-0 {
- margin-bottom: 0 !important
-}
-
-.ml-0,
-.mx-0 {
- margin-left: 0 !important
-}
-
-.m-1 {
- margin: .25rem !important
-}
-
-.mt-1,
-.my-1 {
- margin-top: .25rem !important
-}
-
-.mr-1,
-.mx-1 {
- margin-right: .25rem !important
-}
-
-.mb-1,
-.my-1 {
- margin-bottom: .25rem !important
-}
-
-.ml-1,
-.mx-1 {
- margin-left: .25rem !important
-}
-
-.m-2 {
- margin: .5rem !important
-}
-
-.mt-2,
-.my-2 {
- margin-top: .5rem !important
-}
-
-.mr-2,
-.mx-2 {
- margin-right: .5rem !important
-}
-
-.mb-2,
-.my-2 {
- margin-bottom: .5rem !important
-}
-
-.ml-2,
-.mx-2 {
- margin-left: .5rem !important
-}
-
-.m-3 {
- margin: 1rem !important
-}
-
-.mt-3,
-.my-3 {
- margin-top: 1rem !important
-}
-
-.mr-3,
-.mx-3 {
- margin-right: 1rem !important
-}
-
-.mb-3,
-.my-3 {
- margin-bottom: 1rem !important
-}
-
-.ml-3,
-.mx-3 {
- margin-left: 1rem !important
-}
-
-.m-4 {
- margin: 1.5rem !important
-}
-
-.mt-4,
-.my-4 {
- margin-top: 1.5rem !important
-}
-
-.mr-4,
-.mx-4 {
- margin-right: 1.5rem !important
-}
-
-.mb-4,
-.my-4 {
- margin-bottom: 1.5rem !important
-}
-
-.ml-4,
-.mx-4 {
- margin-left: 1.5rem !important
-}
-
-.m-5 {
- margin: 3rem !important
-}
-
-.mt-5,
-.my-5 {
- margin-top: 3rem !important
-}
-
-.mr-5,
-.mx-5 {
- margin-right: 3rem !important
-}
-
-.mb-5,
-.my-5 {
- margin-bottom: 3rem !important
-}
-
-.ml-5,
-.mx-5 {
- margin-left: 3rem !important
-}
-
-.p-0 {
- padding: 0 !important
-}
-
-.pt-0,
-.py-0 {
- padding-top: 0 !important
-}
-
-.pr-0,
-.px-0 {
- padding-right: 0 !important
-}
-
-.pb-0,
-.py-0 {
- padding-bottom: 0 !important
-}
-
-.pl-0,
-.px-0 {
- padding-left: 0 !important
-}
-
-.p-1 {
- padding: .25rem !important
-}
-
-.pt-1,
-.py-1 {
- padding-top: .25rem !important
-}
-
-.pr-1,
-.px-1 {
- padding-right: .25rem !important
-}
-
-.pb-1,
-.py-1 {
- padding-bottom: .25rem !important
-}
-
-.pl-1,
-.px-1 {
- padding-left: .25rem !important
-}
-
-.p-2 {
- padding: .5rem !important
-}
-
-.pt-2,
-.py-2 {
- padding-top: .5rem !important
-}
-
-.pr-2,
-.px-2 {
- padding-right: .5rem !important
-}
-
-.pb-2,
-.py-2 {
- padding-bottom: .5rem !important
-}
-
-.pl-2,
-.px-2 {
- padding-left: .5rem !important
-}
-
-.p-3 {
- padding: 1rem !important
-}
-
-.pt-3,
-.py-3 {
- padding-top: 1rem !important
-}
-
-.pr-3,
-.px-3 {
- padding-right: 1rem !important
-}
-
-.pb-3,
-.py-3 {
- padding-bottom: 1rem !important
-}
-
-.pl-3,
-.px-3 {
- padding-left: 1rem !important
-}
-
-.p-4 {
- padding: 1.5rem !important
-}
-
-.pt-4,
-.py-4 {
- padding-top: 1.5rem !important
-}
-
-.pr-4,
-.px-4 {
- padding-right: 1.5rem !important
-}
-
-.pb-4,
-.py-4 {
- padding-bottom: 1.5rem !important
-}
-
-.pl-4,
-.px-4 {
- padding-left: 1.5rem !important
-}
-
-.p-5 {
- padding: 3rem !important
-}
-
-.pt-5,
-.py-5 {
- padding-top: 3rem !important
-}
-
-.pr-5,
-.px-5 {
- padding-right: 3rem !important
-}
-
-.pb-5,
-.py-5 {
- padding-bottom: 3rem !important
-}
-
-.pl-5,
-.px-5 {
- padding-left: 3rem !important
-}
-
-.m-n1 {
- margin: -.25rem !important
-}
-
-.mt-n1,
-.my-n1 {
- margin-top: -.25rem !important
-}
-
-.mr-n1,
-.mx-n1 {
- margin-right: -.25rem !important
-}
-
-.mb-n1,
-.my-n1 {
- margin-bottom: -.25rem !important
-}
-
-.ml-n1,
-.mx-n1 {
- margin-left: -.25rem !important
-}
-
-.m-n2 {
- margin: -.5rem !important
-}
-
-.mt-n2,
-.my-n2 {
- margin-top: -.5rem !important
-}
-
-.mr-n2,
-.mx-n2 {
- margin-right: -.5rem !important
-}
-
-.mb-n2,
-.my-n2 {
- margin-bottom: -.5rem !important
-}
-
-.ml-n2,
-.mx-n2 {
- margin-left: -.5rem !important
-}
-
-.m-n3 {
- margin: -1rem !important
-}
-
-.mt-n3,
-.my-n3 {
- margin-top: -1rem !important
-}
-
-.mr-n3,
-.mx-n3 {
- margin-right: -1rem !important
-}
-
-.mb-n3,
-.my-n3 {
- margin-bottom: -1rem !important
-}
-
-.ml-n3,
-.mx-n3 {
- margin-left: -1rem !important
-}
-
-.m-n4 {
- margin: -1.5rem !important
-}
-
-.mt-n4,
-.my-n4 {
- margin-top: -1.5rem !important
-}
-
-.mr-n4,
-.mx-n4 {
- margin-right: -1.5rem !important
-}
-
-.mb-n4,
-.my-n4 {
- margin-bottom: -1.5rem !important
-}
-
-.ml-n4,
-.mx-n4 {
- margin-left: -1.5rem !important
-}
-
-.m-n5 {
- margin: -3rem !important
-}
-
-.mt-n5,
-.my-n5 {
- margin-top: -3rem !important
-}
-
-.mr-n5,
-.mx-n5 {
- margin-right: -3rem !important
-}
-
-.mb-n5,
-.my-n5 {
- margin-bottom: -3rem !important
-}
-
-.ml-n5,
-.mx-n5 {
- margin-left: -3rem !important
-}
-
-.m-auto {
- margin: auto !important
-}
-
-.mt-auto,
-.my-auto {
- margin-top: auto !important
-}
-
-.mr-auto,
-.mx-auto {
- margin-right: auto !important
-}
-
-.mb-auto,
-.my-auto {
- margin-bottom: auto !important
-}
-
-.ml-auto,
-.mx-auto {
- margin-left: auto !important
-}
-
-@media (min-width:576px) {
- .m-sm-0 {
- margin: 0 !important
- }
-
- .mt-sm-0,
- .my-sm-0 {
- margin-top: 0 !important
- }
-
- .mr-sm-0,
- .mx-sm-0 {
- margin-right: 0 !important
- }
-
- .mb-sm-0,
- .my-sm-0 {
- margin-bottom: 0 !important
- }
-
- .ml-sm-0,
- .mx-sm-0 {
- margin-left: 0 !important
- }
-
- .m-sm-1 {
- margin: .25rem !important
- }
-
- .mt-sm-1,
- .my-sm-1 {
- margin-top: .25rem !important
- }
-
- .mr-sm-1,
- .mx-sm-1 {
- margin-right: .25rem !important
- }
-
- .mb-sm-1,
- .my-sm-1 {
- margin-bottom: .25rem !important
- }
-
- .ml-sm-1,
- .mx-sm-1 {
- margin-left: .25rem !important
- }
-
- .m-sm-2 {
- margin: .5rem !important
- }
-
- .mt-sm-2,
- .my-sm-2 {
- margin-top: .5rem !important
- }
-
- .mr-sm-2,
- .mx-sm-2 {
- margin-right: .5rem !important
- }
-
- .mb-sm-2,
- .my-sm-2 {
- margin-bottom: .5rem !important
- }
-
- .ml-sm-2,
- .mx-sm-2 {
- margin-left: .5rem !important
- }
-
- .m-sm-3 {
- margin: 1rem !important
- }
-
- .mt-sm-3,
- .my-sm-3 {
- margin-top: 1rem !important
- }
-
- .mr-sm-3,
- .mx-sm-3 {
- margin-right: 1rem !important
- }
-
- .mb-sm-3,
- .my-sm-3 {
- margin-bottom: 1rem !important
- }
-
- .ml-sm-3,
- .mx-sm-3 {
- margin-left: 1rem !important
- }
-
- .m-sm-4 {
- margin: 1.5rem !important
- }
-
- .mt-sm-4,
- .my-sm-4 {
- margin-top: 1.5rem !important
- }
-
- .mr-sm-4,
- .mx-sm-4 {
- margin-right: 1.5rem !important
- }
-
- .mb-sm-4,
- .my-sm-4 {
- margin-bottom: 1.5rem !important
- }
-
- .ml-sm-4,
- .mx-sm-4 {
- margin-left: 1.5rem !important
- }
-
- .m-sm-5 {
- margin: 3rem !important
- }
-
- .mt-sm-5,
- .my-sm-5 {
- margin-top: 3rem !important
- }
-
- .mr-sm-5,
- .mx-sm-5 {
- margin-right: 3rem !important
- }
-
- .mb-sm-5,
- .my-sm-5 {
- margin-bottom: 3rem !important
- }
-
- .ml-sm-5,
- .mx-sm-5 {
- margin-left: 3rem !important
- }
-
- .p-sm-0 {
- padding: 0 !important
- }
-
- .pt-sm-0,
- .py-sm-0 {
- padding-top: 0 !important
- }
-
- .pr-sm-0,
- .px-sm-0 {
- padding-right: 0 !important
- }
-
- .pb-sm-0,
- .py-sm-0 {
- padding-bottom: 0 !important
- }
-
- .pl-sm-0,
- .px-sm-0 {
- padding-left: 0 !important
- }
-
- .p-sm-1 {
- padding: .25rem !important
- }
-
- .pt-sm-1,
- .py-sm-1 {
- padding-top: .25rem !important
- }
-
- .pr-sm-1,
- .px-sm-1 {
- padding-right: .25rem !important
- }
-
- .pb-sm-1,
- .py-sm-1 {
- padding-bottom: .25rem !important
- }
-
- .pl-sm-1,
- .px-sm-1 {
- padding-left: .25rem !important
- }
-
- .p-sm-2 {
- padding: .5rem !important
- }
-
- .pt-sm-2,
- .py-sm-2 {
- padding-top: .5rem !important
- }
-
- .pr-sm-2,
- .px-sm-2 {
- padding-right: .5rem !important
- }
-
- .pb-sm-2,
- .py-sm-2 {
- padding-bottom: .5rem !important
- }
-
- .pl-sm-2,
- .px-sm-2 {
- padding-left: .5rem !important
- }
-
- .p-sm-3 {
- padding: 1rem !important
- }
-
- .pt-sm-3,
- .py-sm-3 {
- padding-top: 1rem !important
- }
-
- .pr-sm-3,
- .px-sm-3 {
- padding-right: 1rem !important
- }
-
- .pb-sm-3,
- .py-sm-3 {
- padding-bottom: 1rem !important
- }
-
- .pl-sm-3,
- .px-sm-3 {
- padding-left: 1rem !important
- }
-
- .p-sm-4 {
- padding: 1.5rem !important
- }
-
- .pt-sm-4,
- .py-sm-4 {
- padding-top: 1.5rem !important
- }
-
- .pr-sm-4,
- .px-sm-4 {
- padding-right: 1.5rem !important
- }
-
- .pb-sm-4,
- .py-sm-4 {
- padding-bottom: 1.5rem !important
- }
-
- .pl-sm-4,
- .px-sm-4 {
- padding-left: 1.5rem !important
- }
-
- .p-sm-5 {
- padding: 3rem !important
- }
-
- .pt-sm-5,
- .py-sm-5 {
- padding-top: 3rem !important
- }
-
- .pr-sm-5,
- .px-sm-5 {
- padding-right: 3rem !important
- }
-
- .pb-sm-5,
- .py-sm-5 {
- padding-bottom: 3rem !important
- }
-
- .pl-sm-5,
- .px-sm-5 {
- padding-left: 3rem !important
- }
-
- .m-sm-n1 {
- margin: -.25rem !important
- }
-
- .mt-sm-n1,
- .my-sm-n1 {
- margin-top: -.25rem !important
- }
-
- .mr-sm-n1,
- .mx-sm-n1 {
- margin-right: -.25rem !important
- }
-
- .mb-sm-n1,
- .my-sm-n1 {
- margin-bottom: -.25rem !important
- }
-
- .ml-sm-n1,
- .mx-sm-n1 {
- margin-left: -.25rem !important
- }
-
- .m-sm-n2 {
- margin: -.5rem !important
- }
-
- .mt-sm-n2,
- .my-sm-n2 {
- margin-top: -.5rem !important
- }
-
- .mr-sm-n2,
- .mx-sm-n2 {
- margin-right: -.5rem !important
- }
-
- .mb-sm-n2,
- .my-sm-n2 {
- margin-bottom: -.5rem !important
- }
-
- .ml-sm-n2,
- .mx-sm-n2 {
- margin-left: -.5rem !important
- }
-
- .m-sm-n3 {
- margin: -1rem !important
- }
-
- .mt-sm-n3,
- .my-sm-n3 {
- margin-top: -1rem !important
- }
-
- .mr-sm-n3,
- .mx-sm-n3 {
- margin-right: -1rem !important
- }
-
- .mb-sm-n3,
- .my-sm-n3 {
- margin-bottom: -1rem !important
- }
-
- .ml-sm-n3,
- .mx-sm-n3 {
- margin-left: -1rem !important
- }
-
- .m-sm-n4 {
- margin: -1.5rem !important
- }
-
- .mt-sm-n4,
- .my-sm-n4 {
- margin-top: -1.5rem !important
- }
-
- .mr-sm-n4,
- .mx-sm-n4 {
- margin-right: -1.5rem !important
- }
-
- .mb-sm-n4,
- .my-sm-n4 {
- margin-bottom: -1.5rem !important
- }
-
- .ml-sm-n4,
- .mx-sm-n4 {
- margin-left: -1.5rem !important
- }
-
- .m-sm-n5 {
- margin: -3rem !important
- }
-
- .mt-sm-n5,
- .my-sm-n5 {
- margin-top: -3rem !important
- }
-
- .mr-sm-n5,
- .mx-sm-n5 {
- margin-right: -3rem !important
- }
-
- .mb-sm-n5,
- .my-sm-n5 {
- margin-bottom: -3rem !important
- }
-
- .ml-sm-n5,
- .mx-sm-n5 {
- margin-left: -3rem !important
- }
-
- .m-sm-auto {
- margin: auto !important
- }
-
- .mt-sm-auto,
- .my-sm-auto {
- margin-top: auto !important
- }
-
- .mr-sm-auto,
- .mx-sm-auto {
- margin-right: auto !important
- }
-
- .mb-sm-auto,
- .my-sm-auto {
- margin-bottom: auto !important
- }
-
- .ml-sm-auto,
- .mx-sm-auto {
- margin-left: auto !important
- }
-
-}
-
-@media (min-width:768px) {
- .m-md-0 {
- margin: 0 !important
- }
-
- .mt-md-0,
- .my-md-0 {
- margin-top: 0 !important
- }
-
- .mr-md-0,
- .mx-md-0 {
- margin-right: 0 !important
- }
-
- .mb-md-0,
- .my-md-0 {
- margin-bottom: 0 !important
- }
-
- .ml-md-0,
- .mx-md-0 {
- margin-left: 0 !important
- }
-
- .m-md-1 {
- margin: .25rem !important
- }
-
- .mt-md-1,
- .my-md-1 {
- margin-top: .25rem !important
- }
-
- .mr-md-1,
- .mx-md-1 {
- margin-right: .25rem !important
- }
-
- .mb-md-1,
- .my-md-1 {
- margin-bottom: .25rem !important
- }
-
- .ml-md-1,
- .mx-md-1 {
- margin-left: .25rem !important
- }
-
- .m-md-2 {
- margin: .5rem !important
- }
-
- .mt-md-2,
- .my-md-2 {
- margin-top: .5rem !important
- }
-
- .mr-md-2,
- .mx-md-2 {
- margin-right: .5rem !important
- }
-
- .mb-md-2,
- .my-md-2 {
- margin-bottom: .5rem !important
- }
-
- .ml-md-2,
- .mx-md-2 {
- margin-left: .5rem !important
- }
-
- .m-md-3 {
- margin: 1rem !important
- }
-
- .mt-md-3,
- .my-md-3 {
- margin-top: 1rem !important
- }
-
- .mr-md-3,
- .mx-md-3 {
- margin-right: 1rem !important
- }
-
- .mb-md-3,
- .my-md-3 {
- margin-bottom: 1rem !important
- }
-
- .ml-md-3,
- .mx-md-3 {
- margin-left: 1rem !important
- }
-
- .m-md-4 {
- margin: 1.5rem !important
- }
-
- .mt-md-4,
- .my-md-4 {
- margin-top: 1.5rem !important
- }
-
- .mr-md-4,
- .mx-md-4 {
- margin-right: 1.5rem !important
- }
-
- .mb-md-4,
- .my-md-4 {
- margin-bottom: 1.5rem !important
- }
-
- .ml-md-4,
- .mx-md-4 {
- margin-left: 1.5rem !important
- }
-
- .m-md-5 {
- margin: 3rem !important
- }
-
- .mt-md-5,
- .my-md-5 {
- margin-top: 3rem !important
- }
-
- .mr-md-5,
- .mx-md-5 {
- margin-right: 3rem !important
- }
-
- .mb-md-5,
- .my-md-5 {
- margin-bottom: 3rem !important
- }
-
- .ml-md-5,
- .mx-md-5 {
- margin-left: 3rem !important
- }
-
- .p-md-0 {
- padding: 0 !important
- }
-
- .pt-md-0,
- .py-md-0 {
- padding-top: 0 !important
- }
-
- .pr-md-0,
- .px-md-0 {
- padding-right: 0 !important
- }
-
- .pb-md-0,
- .py-md-0 {
- padding-bottom: 0 !important
- }
-
- .pl-md-0,
- .px-md-0 {
- padding-left: 0 !important
- }
-
- .p-md-1 {
- padding: .25rem !important
- }
-
- .pt-md-1,
- .py-md-1 {
- padding-top: .25rem !important
- }
-
- .pr-md-1,
- .px-md-1 {
- padding-right: .25rem !important
- }
-
- .pb-md-1,
- .py-md-1 {
- padding-bottom: .25rem !important
- }
-
- .pl-md-1,
- .px-md-1 {
- padding-left: .25rem !important
- }
-
- .p-md-2 {
- padding: .5rem !important
- }
-
- .pt-md-2,
- .py-md-2 {
- padding-top: .5rem !important
- }
-
- .pr-md-2,
- .px-md-2 {
- padding-right: .5rem !important
- }
-
- .pb-md-2,
- .py-md-2 {
- padding-bottom: .5rem !important
- }
-
- .pl-md-2,
- .px-md-2 {
- padding-left: .5rem !important
- }
-
- .p-md-3 {
- padding: 1rem !important
- }
-
- .pt-md-3,
- .py-md-3 {
- padding-top: 1rem !important
- }
-
- .pr-md-3,
- .px-md-3 {
- padding-right: 1rem !important
- }
-
- .pb-md-3,
- .py-md-3 {
- padding-bottom: 1rem !important
- }
-
- .pl-md-3,
- .px-md-3 {
- padding-left: 1rem !important
- }
-
- .p-md-4 {
- padding: 1.5rem !important
- }
-
- .pt-md-4,
- .py-md-4 {
- padding-top: 1.5rem !important
- }
-
- .pr-md-4,
- .px-md-4 {
- padding-right: 1.5rem !important
- }
-
- .pb-md-4,
- .py-md-4 {
- padding-bottom: 1.5rem !important
- }
-
- .pl-md-4,
- .px-md-4 {
- padding-left: 1.5rem !important
- }
-
- .p-md-5 {
- padding: 3rem !important
- }
-
- .pt-md-5,
- .py-md-5 {
- padding-top: 3rem !important
- }
-
- .pr-md-5,
- .px-md-5 {
- padding-right: 3rem !important
- }
-
- .pb-md-5,
- .py-md-5 {
- padding-bottom: 3rem !important
- }
-
- .pl-md-5,
- .px-md-5 {
- padding-left: 3rem !important
- }
-
- .m-md-n1 {
- margin: -.25rem !important
- }
-
- .mt-md-n1,
- .my-md-n1 {
- margin-top: -.25rem !important
- }
-
- .mr-md-n1,
- .mx-md-n1 {
- margin-right: -.25rem !important
- }
-
- .mb-md-n1,
- .my-md-n1 {
- margin-bottom: -.25rem !important
- }
-
- .ml-md-n1,
- .mx-md-n1 {
- margin-left: -.25rem !important
- }
-
- .m-md-n2 {
- margin: -.5rem !important
- }
-
- .mt-md-n2,
- .my-md-n2 {
- margin-top: -.5rem !important
- }
-
- .mr-md-n2,
- .mx-md-n2 {
- margin-right: -.5rem !important
- }
-
- .mb-md-n2,
- .my-md-n2 {
- margin-bottom: -.5rem !important
- }
-
- .ml-md-n2,
- .mx-md-n2 {
- margin-left: -.5rem !important
- }
-
- .m-md-n3 {
- margin: -1rem !important
- }
-
- .mt-md-n3,
- .my-md-n3 {
- margin-top: -1rem !important
- }
-
- .mr-md-n3,
- .mx-md-n3 {
- margin-right: -1rem !important
- }
-
- .mb-md-n3,
- .my-md-n3 {
- margin-bottom: -1rem !important
- }
-
- .ml-md-n3,
- .mx-md-n3 {
- margin-left: -1rem !important
- }
-
- .m-md-n4 {
- margin: -1.5rem !important
- }
-
- .mt-md-n4,
- .my-md-n4 {
- margin-top: -1.5rem !important
- }
-
- .mr-md-n4,
- .mx-md-n4 {
- margin-right: -1.5rem !important
- }
-
- .mb-md-n4,
- .my-md-n4 {
- margin-bottom: -1.5rem !important
- }
-
- .ml-md-n4,
- .mx-md-n4 {
- margin-left: -1.5rem !important
- }
-
- .m-md-n5 {
- margin: -3rem !important
- }
-
- .mt-md-n5,
- .my-md-n5 {
- margin-top: -3rem !important
- }
-
- .mr-md-n5,
- .mx-md-n5 {
- margin-right: -3rem !important
- }
-
- .mb-md-n5,
- .my-md-n5 {
- margin-bottom: -3rem !important
- }
-
- .ml-md-n5,
- .mx-md-n5 {
- margin-left: -3rem !important
- }
-
- .m-md-auto {
- margin: auto !important
- }
-
- .mt-md-auto,
- .my-md-auto {
- margin-top: auto !important
- }
-
- .mr-md-auto,
- .mx-md-auto {
- margin-right: auto !important
- }
-
- .mb-md-auto,
- .my-md-auto {
- margin-bottom: auto !important
- }
-
- .ml-md-auto,
- .mx-md-auto {
- margin-left: auto !important
- }
-
-}
-
-@media (min-width:992px) {
- .m-lg-0 {
- margin: 0 !important
- }
-
- .mt-lg-0,
- .my-lg-0 {
- margin-top: 0 !important
- }
-
- .mr-lg-0,
- .mx-lg-0 {
- margin-right: 0 !important
- }
-
- .mb-lg-0,
- .my-lg-0 {
- margin-bottom: 0 !important
- }
-
- .ml-lg-0,
- .mx-lg-0 {
- margin-left: 0 !important
- }
-
- .m-lg-1 {
- margin: .25rem !important
- }
-
- .mt-lg-1,
- .my-lg-1 {
- margin-top: .25rem !important
- }
-
- .mr-lg-1,
- .mx-lg-1 {
- margin-right: .25rem !important
- }
-
- .mb-lg-1,
- .my-lg-1 {
- margin-bottom: .25rem !important
- }
-
- .ml-lg-1,
- .mx-lg-1 {
- margin-left: .25rem !important
- }
-
- .m-lg-2 {
- margin: .5rem !important
- }
-
- .mt-lg-2,
- .my-lg-2 {
- margin-top: .5rem !important
- }
-
- .mr-lg-2,
- .mx-lg-2 {
- margin-right: .5rem !important
- }
-
- .mb-lg-2,
- .my-lg-2 {
- margin-bottom: .5rem !important
- }
-
- .ml-lg-2,
- .mx-lg-2 {
- margin-left: .5rem !important
- }
-
- .m-lg-3 {
- margin: 1rem !important
- }
-
- .mt-lg-3,
- .my-lg-3 {
- margin-top: 1rem !important
- }
-
- .mr-lg-3,
- .mx-lg-3 {
- margin-right: 1rem !important
- }
-
- .mb-lg-3,
- .my-lg-3 {
- margin-bottom: 1rem !important
- }
-
- .ml-lg-3,
- .mx-lg-3 {
- margin-left: 1rem !important
- }
-
- .m-lg-4 {
- margin: 1.5rem !important
- }
-
- .mt-lg-4,
- .my-lg-4 {
- margin-top: 1.5rem !important
- }
-
- .mr-lg-4,
- .mx-lg-4 {
- margin-right: 1.5rem !important
- }
-
- .mb-lg-4,
- .my-lg-4 {
- margin-bottom: 1.5rem !important
- }
-
- .ml-lg-4,
- .mx-lg-4 {
- margin-left: 1.5rem !important
- }
-
- .m-lg-5 {
- margin: 3rem !important
- }
-
- .mt-lg-5,
- .my-lg-5 {
- margin-top: 3rem !important
- }
-
- .mr-lg-5,
- .mx-lg-5 {
- margin-right: 3rem !important
- }
-
- .mb-lg-5,
- .my-lg-5 {
- margin-bottom: 3rem !important
- }
-
- .ml-lg-5,
- .mx-lg-5 {
- margin-left: 3rem !important
- }
-
- .p-lg-0 {
- padding: 0 !important
- }
-
- .pt-lg-0,
- .py-lg-0 {
- padding-top: 0 !important
- }
-
- .pr-lg-0,
- .px-lg-0 {
- padding-right: 0 !important
- }
-
- .pb-lg-0,
- .py-lg-0 {
- padding-bottom: 0 !important
- }
-
- .pl-lg-0,
- .px-lg-0 {
- padding-left: 0 !important
- }
-
- .p-lg-1 {
- padding: .25rem !important
- }
-
- .pt-lg-1,
- .py-lg-1 {
- padding-top: .25rem !important
- }
-
- .pr-lg-1,
- .px-lg-1 {
- padding-right: .25rem !important
- }
-
- .pb-lg-1,
- .py-lg-1 {
- padding-bottom: .25rem !important
- }
-
- .pl-lg-1,
- .px-lg-1 {
- padding-left: .25rem !important
- }
-
- .p-lg-2 {
- padding: .5rem !important
- }
-
- .pt-lg-2,
- .py-lg-2 {
- padding-top: .5rem !important
- }
-
- .pr-lg-2,
- .px-lg-2 {
- padding-right: .5rem !important
- }
-
- .pb-lg-2,
- .py-lg-2 {
- padding-bottom: .5rem !important
- }
-
- .pl-lg-2,
- .px-lg-2 {
- padding-left: .5rem !important
- }
-
- .p-lg-3 {
- padding: 1rem !important
- }
-
- .pt-lg-3,
- .py-lg-3 {
- padding-top: 1rem !important
- }
-
- .pr-lg-3,
- .px-lg-3 {
- padding-right: 1rem !important
- }
-
- .pb-lg-3,
- .py-lg-3 {
- padding-bottom: 1rem !important
- }
-
- .pl-lg-3,
- .px-lg-3 {
- padding-left: 1rem !important
- }
-
- .p-lg-4 {
- padding: 1.5rem !important
- }
-
- .pt-lg-4,
- .py-lg-4 {
- padding-top: 1.5rem !important
- }
-
- .pr-lg-4,
- .px-lg-4 {
- padding-right: 1.5rem !important
- }
-
- .pb-lg-4,
- .py-lg-4 {
- padding-bottom: 1.5rem !important
- }
-
- .pl-lg-4,
- .px-lg-4 {
- padding-left: 1.5rem !important
- }
-
- .p-lg-5 {
- padding: 3rem !important
- }
-
- .pt-lg-5,
- .py-lg-5 {
- padding-top: 3rem !important
- }
-
- .pr-lg-5,
- .px-lg-5 {
- padding-right: 3rem !important
- }
-
- .pb-lg-5,
- .py-lg-5 {
- padding-bottom: 3rem !important
- }
-
- .pl-lg-5,
- .px-lg-5 {
- padding-left: 3rem !important
- }
-
- .m-lg-n1 {
- margin: -.25rem !important
- }
-
- .mt-lg-n1,
- .my-lg-n1 {
- margin-top: -.25rem !important
- }
-
- .mr-lg-n1,
- .mx-lg-n1 {
- margin-right: -.25rem !important
- }
-
- .mb-lg-n1,
- .my-lg-n1 {
- margin-bottom: -.25rem !important
- }
-
- .ml-lg-n1,
- .mx-lg-n1 {
- margin-left: -.25rem !important
- }
-
- .m-lg-n2 {
- margin: -.5rem !important
- }
-
- .mt-lg-n2,
- .my-lg-n2 {
- margin-top: -.5rem !important
- }
-
- .mr-lg-n2,
- .mx-lg-n2 {
- margin-right: -.5rem !important
- }
-
- .mb-lg-n2,
- .my-lg-n2 {
- margin-bottom: -.5rem !important
- }
-
- .ml-lg-n2,
- .mx-lg-n2 {
- margin-left: -.5rem !important
- }
-
- .m-lg-n3 {
- margin: -1rem !important
- }
-
- .mt-lg-n3,
- .my-lg-n3 {
- margin-top: -1rem !important
- }
-
- .mr-lg-n3,
- .mx-lg-n3 {
- margin-right: -1rem !important
- }
-
- .mb-lg-n3,
- .my-lg-n3 {
- margin-bottom: -1rem !important
- }
-
- .ml-lg-n3,
- .mx-lg-n3 {
- margin-left: -1rem !important
- }
-
- .m-lg-n4 {
- margin: -1.5rem !important
- }
-
- .mt-lg-n4,
- .my-lg-n4 {
- margin-top: -1.5rem !important
- }
-
- .mr-lg-n4,
- .mx-lg-n4 {
- margin-right: -1.5rem !important
- }
-
- .mb-lg-n4,
- .my-lg-n4 {
- margin-bottom: -1.5rem !important
- }
-
- .ml-lg-n4,
- .mx-lg-n4 {
- margin-left: -1.5rem !important
- }
-
- .m-lg-n5 {
- margin: -3rem !important
- }
-
- .mt-lg-n5,
- .my-lg-n5 {
- margin-top: -3rem !important
- }
-
- .mr-lg-n5,
- .mx-lg-n5 {
- margin-right: -3rem !important
- }
-
- .mb-lg-n5,
- .my-lg-n5 {
- margin-bottom: -3rem !important
- }
-
- .ml-lg-n5,
- .mx-lg-n5 {
- margin-left: -3rem !important
- }
-
- .m-lg-auto {
- margin: auto !important
- }
-
- .mt-lg-auto,
- .my-lg-auto {
- margin-top: auto !important
- }
-
- .mr-lg-auto,
- .mx-lg-auto {
- margin-right: auto !important
- }
-
- .mb-lg-auto,
- .my-lg-auto {
- margin-bottom: auto !important
- }
-
- .ml-lg-auto,
- .mx-lg-auto {
- margin-left: auto !important
- }
-
-}
-
-@media (min-width:1200px) {
- .m-xl-0 {
- margin: 0 !important
- }
-
- .mt-xl-0,
- .my-xl-0 {
- margin-top: 0 !important
- }
-
- .mr-xl-0,
- .mx-xl-0 {
- margin-right: 0 !important
- }
-
- .mb-xl-0,
- .my-xl-0 {
- margin-bottom: 0 !important
- }
-
- .ml-xl-0,
- .mx-xl-0 {
- margin-left: 0 !important
- }
-
- .m-xl-1 {
- margin: .25rem !important
- }
-
- .mt-xl-1,
- .my-xl-1 {
- margin-top: .25rem !important
- }
-
- .mr-xl-1,
- .mx-xl-1 {
- margin-right: .25rem !important
- }
-
- .mb-xl-1,
- .my-xl-1 {
- margin-bottom: .25rem !important
- }
-
- .ml-xl-1,
- .mx-xl-1 {
- margin-left: .25rem !important
- }
-
- .m-xl-2 {
- margin: .5rem !important
- }
-
- .mt-xl-2,
- .my-xl-2 {
- margin-top: .5rem !important
- }
-
- .mr-xl-2,
- .mx-xl-2 {
- margin-right: .5rem !important
- }
-
- .mb-xl-2,
- .my-xl-2 {
- margin-bottom: .5rem !important
- }
-
- .ml-xl-2,
- .mx-xl-2 {
- margin-left: .5rem !important
- }
-
- .m-xl-3 {
- margin: 1rem !important
- }
-
- .mt-xl-3,
- .my-xl-3 {
- margin-top: 1rem !important
- }
-
- .mr-xl-3,
- .mx-xl-3 {
- margin-right: 1rem !important
- }
-
- .mb-xl-3,
- .my-xl-3 {
- margin-bottom: 1rem !important
- }
-
- .ml-xl-3,
- .mx-xl-3 {
- margin-left: 1rem !important
- }
-
- .m-xl-4 {
- margin: 1.5rem !important
- }
-
- .mt-xl-4,
- .my-xl-4 {
- margin-top: 1.5rem !important
- }
-
- .mr-xl-4,
- .mx-xl-4 {
- margin-right: 1.5rem !important
- }
-
- .mb-xl-4,
- .my-xl-4 {
- margin-bottom: 1.5rem !important
- }
-
- .ml-xl-4,
- .mx-xl-4 {
- margin-left: 1.5rem !important
- }
-
- .m-xl-5 {
- margin: 3rem !important
- }
-
- .mt-xl-5,
- .my-xl-5 {
- margin-top: 3rem !important
- }
-
- .mr-xl-5,
- .mx-xl-5 {
- margin-right: 3rem !important
- }
-
- .mb-xl-5,
- .my-xl-5 {
- margin-bottom: 3rem !important
- }
-
- .ml-xl-5,
- .mx-xl-5 {
- margin-left: 3rem !important
- }
-
- .p-xl-0 {
- padding: 0 !important
- }
-
- .pt-xl-0,
- .py-xl-0 {
- padding-top: 0 !important
- }
-
- .pr-xl-0,
- .px-xl-0 {
- padding-right: 0 !important
- }
-
- .pb-xl-0,
- .py-xl-0 {
- padding-bottom: 0 !important
- }
-
- .pl-xl-0,
- .px-xl-0 {
- padding-left: 0 !important
- }
-
- .p-xl-1 {
- padding: .25rem !important
- }
-
- .pt-xl-1,
- .py-xl-1 {
- padding-top: .25rem !important
- }
-
- .pr-xl-1,
- .px-xl-1 {
- padding-right: .25rem !important
- }
-
- .pb-xl-1,
- .py-xl-1 {
- padding-bottom: .25rem !important
- }
-
- .pl-xl-1,
- .px-xl-1 {
- padding-left: .25rem !important
- }
-
- .p-xl-2 {
- padding: .5rem !important
- }
-
- .pt-xl-2,
- .py-xl-2 {
- padding-top: .5rem !important
- }
-
- .pr-xl-2,
- .px-xl-2 {
- padding-right: .5rem !important
- }
-
- .pb-xl-2,
- .py-xl-2 {
- padding-bottom: .5rem !important
- }
-
- .pl-xl-2,
- .px-xl-2 {
- padding-left: .5rem !important
- }
-
- .p-xl-3 {
- padding: 1rem !important
- }
-
- .pt-xl-3,
- .py-xl-3 {
- padding-top: 1rem !important
- }
-
- .pr-xl-3,
- .px-xl-3 {
- padding-right: 1rem !important
- }
-
- .pb-xl-3,
- .py-xl-3 {
- padding-bottom: 1rem !important
- }
-
- .pl-xl-3,
- .px-xl-3 {
- padding-left: 1rem !important
- }
-
- .p-xl-4 {
- padding: 1.5rem !important
- }
-
- .pt-xl-4,
- .py-xl-4 {
- padding-top: 1.5rem !important
- }
-
- .pr-xl-4,
- .px-xl-4 {
- padding-right: 1.5rem !important
- }
-
- .pb-xl-4,
- .py-xl-4 {
- padding-bottom: 1.5rem !important
- }
-
- .pl-xl-4,
- .px-xl-4 {
- padding-left: 1.5rem !important
- }
-
- .p-xl-5 {
- padding: 3rem !important
- }
-
- .pt-xl-5,
- .py-xl-5 {
- padding-top: 3rem !important
- }
-
- .pr-xl-5,
- .px-xl-5 {
- padding-right: 3rem !important
- }
-
- .pb-xl-5,
- .py-xl-5 {
- padding-bottom: 3rem !important
- }
-
- .pl-xl-5,
- .px-xl-5 {
- padding-left: 3rem !important
- }
-
- .m-xl-n1 {
- margin: -.25rem !important
- }
-
- .mt-xl-n1,
- .my-xl-n1 {
- margin-top: -.25rem !important
- }
-
- .mr-xl-n1,
- .mx-xl-n1 {
- margin-right: -.25rem !important
- }
-
- .mb-xl-n1,
- .my-xl-n1 {
- margin-bottom: -.25rem !important
- }
-
- .ml-xl-n1,
- .mx-xl-n1 {
- margin-left: -.25rem !important
- }
-
- .m-xl-n2 {
- margin: -.5rem !important
- }
-
- .mt-xl-n2,
- .my-xl-n2 {
- margin-top: -.5rem !important
- }
-
- .mr-xl-n2,
- .mx-xl-n2 {
- margin-right: -.5rem !important
- }
-
- .mb-xl-n2,
- .my-xl-n2 {
- margin-bottom: -.5rem !important
- }
-
- .ml-xl-n2,
- .mx-xl-n2 {
- margin-left: -.5rem !important
- }
-
- .m-xl-n3 {
- margin: -1rem !important
- }
-
- .mt-xl-n3,
- .my-xl-n3 {
- margin-top: -1rem !important
- }
-
- .mr-xl-n3,
- .mx-xl-n3 {
- margin-right: -1rem !important
- }
-
- .mb-xl-n3,
- .my-xl-n3 {
- margin-bottom: -1rem !important
- }
-
- .ml-xl-n3,
- .mx-xl-n3 {
- margin-left: -1rem !important
- }
-
- .m-xl-n4 {
- margin: -1.5rem !important
- }
-
- .mt-xl-n4,
- .my-xl-n4 {
- margin-top: -1.5rem !important
- }
-
- .mr-xl-n4,
- .mx-xl-n4 {
- margin-right: -1.5rem !important
- }
-
- .mb-xl-n4,
- .my-xl-n4 {
- margin-bottom: -1.5rem !important
- }
-
- .ml-xl-n4,
- .mx-xl-n4 {
- margin-left: -1.5rem !important
- }
-
- .m-xl-n5 {
- margin: -3rem !important
- }
-
- .mt-xl-n5,
- .my-xl-n5 {
- margin-top: -3rem !important
- }
-
- .mr-xl-n5,
- .mx-xl-n5 {
- margin-right: -3rem !important
- }
-
- .mb-xl-n5,
- .my-xl-n5 {
- margin-bottom: -3rem !important
- }
-
- .ml-xl-n5,
- .mx-xl-n5 {
- margin-left: -3rem !important
- }
-
- .m-xl-auto {
- margin: auto !important
- }
-
- .mt-xl-auto,
- .my-xl-auto {
- margin-top: auto !important
- }
-
- .mr-xl-auto,
- .mx-xl-auto {
- margin-right: auto !important
- }
-
- .mb-xl-auto,
- .my-xl-auto {
- margin-bottom: auto !important
- }
-
- .ml-xl-auto,
- .mx-xl-auto {
- margin-left: auto !important
- }
-
-}
-
-.text-monospace {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important
-}
-
-.text-justify {
- text-align: justify !important
-}
-
-.text-wrap {
- white-space: normal !important
-}
-
-.text-nowrap {
- white-space: nowrap !important
-}
-
-.text-truncate {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap
-}
-
-.text-left {
- text-align: left !important
-}
-
-.text-right {
- text-align: right !important
-}
-
-.text-center {
- text-align: center !important
-}
-
-@media (min-width:576px) {
- .text-sm-left {
- text-align: left !important
- }
-
- .text-sm-right {
- text-align: right !important
- }
-
- .text-sm-center {
- text-align: center !important
- }
-
-}
-
-@media (min-width:768px) {
- .text-md-left {
- text-align: left !important
- }
-
- .text-md-right {
- text-align: right !important
- }
-
- .text-md-center {
- text-align: center !important
- }
-
-}
-
-@media (min-width:992px) {
- .text-lg-left {
- text-align: left !important
- }
-
- .text-lg-right {
- text-align: right !important
- }
-
- .text-lg-center {
- text-align: center !important
- }
-
-}
-
-@media (min-width:1200px) {
- .text-xl-left {
- text-align: left !important
- }
-
- .text-xl-right {
- text-align: right !important
- }
-
- .text-xl-center {
- text-align: center !important
- }
-
-}
-
-.text-lowercase {
- text-transform: lowercase !important
-}
-
-.text-uppercase {
- text-transform: uppercase !important
-}
-
-.text-capitalize {
- text-transform: capitalize !important
-}
-
-.font-weight-light {
- font-weight: 300 !important
-}
-
-.font-weight-lighter {
- font-weight: lighter !important
-}
-
-.font-weight-normal {
- font-weight: 400 !important
-}
-
-.font-weight-bold {
- font-weight: 700 !important
-}
-
-.font-weight-bolder {
- font-weight: bolder !important
-}
-
-.font-italic {
- font-style: italic !important
-}
-
-.text-white {
- color: #fff !important
-}
-
-.text-primary {
- color: #047006 !important
-}
-
-a.text-primary:focus,
-a.text-primary:hover {
- color: #012602 !important
-}
-
-.text-secondary {
- color: grey !important
-}
-
-a.text-secondary:focus,
-a.text-secondary:hover {
- color: #5a5a5a !important
-}
-
-.text-success {
- color: #00e093 !important
-}
-
-a.text-success:focus,
-a.text-success:hover {
- color: #009461 !important
-}
-
-.text-info {
- color: #6c61f6 !important
-}
-
-a.text-info:focus,
-a.text-info:hover {
- color: #2919f2 !important
-}
-
-.text-warning {
- color: #f0825f !important
-}
-
-a.text-warning:focus,
-a.text-warning:hover {
- color: #e94b19 !important
-}
-
-.text-danger {
- color: #ff5f66 !important
-}
-
-a.text-danger:focus,
-a.text-danger:hover {
- color: #ff131d !important
-}
-
-.text-light {
- color: #dfdfdf !important
-}
-
-a.text-light:focus,
-a.text-light:hover {
- color: #b9b9b9 !important
-}
-
-.text-dark {
- color: #74767b !important
-}
-
-a.text-dark:focus,
-a.text-dark:hover {
- color: #4f5054 !important
-}
-
-.text-white {
- color: #fff !important
-}
-
-a.text-white:focus,
-a.text-white:hover {
- color: #d9d9d9 !important
-}
-
-.text-orange {
- color: #ffa600 !important
-}
-
-a.text-orange:focus,
-a.text-orange:hover {
- color: #b37400 !important
-}
-
-.text-body {
- color: #212529 !important
-}
-
-.text-muted {
- color: #adb5bd !important
-}
-
-.text-black-50 {
- color: rgba(0, 0, 0, .5) !important
-}
-
-.text-white-50 {
- color: rgba(255, 255, 255, .5) !important
-}
-
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0
-}
-
-.text-decoration-none {
- text-decoration: none !important
-}
-
-.text-break {
- word-break: break-word !important;
- overflow-wrap: break-word !important
-}
-
-.text-reset {
- color: inherit !important
-}
-
-.visible {
- visibility: visible !important
-}
-
-.invisible {
- visibility: hidden !important
-}
-
-@media print {
- *,
- ::after,
- ::before {
- text-shadow: none !important;
- box-shadow: none !important
- }
-
- a:not(.btn) {
- text-decoration: underline
- }
-
- abbr[title]::after {
- content: '3'attr(title) ")"
- }
-
- pre {
- white-space: pre-wrap !important
- }
-
- blockquote,
- pre {
- border: 1px solid #adb5bd;
- page-break-inside: avoid
- }
-
- thead {
- display: table-header-group
- }
-
- img,
- tr {
- page-break-inside: avoid
- }
-
- h2,
- h3,
- p {
- orphans: 3;
- widows: 3
- }
-
- h2,
- h3 {
- page-break-after: avoid
- }
-
- @page {
- size: a3
- }
-
- body {
- min-width: 992px !important
- }
-
- .container {
- min-width: 992px !important
- }
-
- .navbar {
- display: none
- }
-
- .badge {
- border: 1px solid #000
- }
-
- .table {
- border-collapse: collapse !important
- }
-
- .table td,
- .table th {
- background-color: #fff !important
- }
-
- .table-bordered td,
- .table-bordered th {
- border: 1px solid #dee2e6 !important
- }
-
- .table-dark {
- color: inherit
- }
-
- .table-dark tbody+tbody,
- .table-dark td,
- .table-dark th,
- .table-dark thead th {
- border-color: #f2f4f9
- }
-
- .table .thead-dark th {
- color: inherit;
- border-color: #f2f4f9
- }
-
-}
-
-.dev-info {
- position: fixed;
- color: grey;
- font-size: smaller;
- left: 8px;
- z-index: 120
-}
-
-.versionstring {
- top: 70px;
- right: 8px;
- left: auto
-}
-
-.grd-time-used {
- bottom: 0
-}
-
-footer {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
- padding: 2rem 2.5rem;
- max-width: 1140px;
- margin-left: auto;
- margin-right: auto
-}
-
-@media (max-width:991.98px) {
- footer {
- padding: 20px 0 30px 0
- }
-
-}
-
-footer ul {
- margin-left: 0;
- padding-left: 0
-}
-
-footer ul li {
- display: inline-block;
- padding: 0 10px 0 0;
- line-height: 1
-}
-
-footer ul li:not(:last-child) {
- margin-right: 10px;
- border-right: 1px solid #f2f4f9
-}
-
-footer ul li a {
- font-size: 14px;
- font-family: Roboto, sans-serif;
- font-weight: 400;
- letter-spacing: .03rem;
- color: #565656
-}
-
-@media (min-width:768px) and (max-width:991px) {
- footer ul li a {
- font-size: calc(14px + 0 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- footer ul li a {
- font-size: calc(14px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- footer ul li a {
- font-size: 13px
- }
-
-}
-
-.alert {
- border: none;
- font-size: 14px;
- font-family: Roboto, sans-serif;
- font-weight: 400
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .alert {
- font-size: calc(14px + 1 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .alert {
- font-size: calc(15px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .alert {
- font-size: 14px
- }
-
-}
-
-.alert .alert-heading {
- margin-top: 20px;
- margin-bottom: 10px
-}
-
-.alert .btn-dismmiss {
- margin-top: 20px
-}
-
-.alert.dismissible-alert {
- position: relative;
- padding-right: 40px
-}
-
-.alert.dismissible-alert .alert-close {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- padding: 10px;
- font-size: 18px;
- display: -webkit-box;
- display: flex;
- cursor: pointer;
- height: inherit;
- -webkit-box-align: center;
- align-items: center
-}
-
-.alert-notification-wrapper {
- position: fixed;
- left: 17rem;
- right: 0;
- z-index: 999
-}
-
-@media (max-width:991.98px) {
- .alert-notification-wrapper {
- left: 0
- }
-
-}
-
-.alert-notification-wrapper.top {
- top: 70px
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter {
- border: 2px solid #55acee;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter i {
- color: #55acee
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link {
- background: 0 0;
- color: #55acee
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link:hover {
- color: #2795e9
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook {
- border: 2px solid #0084ff;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook i {
- color: #0084ff
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link {
- background: 0 0;
- color: #0084ff
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link:hover {
- color: #006acc
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-google {
- border: 2px solid #dd4b39;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-google i {
- color: #dd4b39
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link {
- background: 0 0;
- color: #dd4b39
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link:hover {
- color: #c23321
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin {
- border: 2px solid #0077b5;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin i {
- color: #0077b5
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link {
- background: 0 0;
- color: #0077b5
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link:hover {
- color: #005582
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest {
- border: 2px solid #bd081c;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest i {
- color: #bd081c
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link {
- background: 0 0;
- color: #bd081c
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link:hover {
- color: #8c0615
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube {
- border: 2px solid #cd201f;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube i {
- color: #cd201f
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link {
- background: 0 0;
- color: #cd201f
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link:hover {
- color: #a11918
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-github {
- border: 2px solid #333;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-github i {
- color: #333
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link {
- background: 0 0;
- color: #333
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link:hover {
- color: #1a1a1a
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-behance {
- border: 2px solid #0454f6;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-behance i {
- color: #0454f6
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link {
- background: 0 0;
- color: #0454f6
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link:hover {
- color: #0343c4
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble {
- border: 2px solid #ea4c89;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble i {
- color: #ea4c89
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link {
- background: 0 0;
- color: #ea4c89
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link:hover {
- color: #e51e6b
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit {
- border: 2px solid #ed4333;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit i {
- color: #ed4333
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link {
- background: 0 0;
- color: #ed4333
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link:hover {
- color: #da2413
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram {
- border: 2px solid #ff759b;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram i {
- color: #ff759b
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link {
- background: 0 0;
- color: #ff759b
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link:hover {
- color: #ff4276
-}
-
-.btn-inverse-primary {
- background: rgba(4, 112, 6, .15);
- color: #047006
-}
-
-.btn-inverse-primary i {
- color: inherit
-}
-
-.btn-inverse-primary:hover {
- background: rgba(4, 112, 6, .8);
- color: #fff
-}
-
-.btn-inverse-secondary {
- background: rgba(128, 128, 128, .15);
- color: grey
-}
-
-.btn-inverse-secondary i {
- color: inherit
-}
-
-.btn-inverse-secondary:hover {
- background: rgba(128, 128, 128, .8);
- color: #fff
-}
-
-.btn-inverse-success {
- background: rgba(0, 224, 147, .15);
- color: #00e093
-}
-
-.btn-inverse-success i {
- color: inherit
-}
-
-.btn-inverse-success:hover {
- background: rgba(0, 224, 147, .8);
- color: #fff
-}
-
-.btn-inverse-info {
- background: rgba(108, 97, 246, .15);
- color: #6c61f6
-}
-
-.btn-inverse-info i {
- color: inherit
-}
-
-.btn-inverse-info:hover {
- background: rgba(108, 97, 246, .8);
- color: #fff
-}
-
-.btn-inverse-warning {
- background: rgba(240, 130, 95, .15);
- color: #f0825f
-}
-
-.btn-inverse-warning i {
- color: inherit
-}
-
-.btn-inverse-warning:hover {
- background: rgba(240, 130, 95, .8);
- color: #fff
-}
-
-.btn-inverse-danger {
- background: rgba(255, 95, 102, .15);
- color: #ff5f66
-}
-
-.btn-inverse-danger i {
- color: inherit
-}
-
-.btn-inverse-danger:hover {
- background: rgba(255, 95, 102, .8);
- color: #fff
-}
-
-.btn-inverse-light {
- background: rgba(223, 223, 223, .15);
- color: #dfdfdf
-}
-
-.btn-inverse-light i {
- color: inherit
-}
-
-.btn-inverse-light:hover {
- background: rgba(223, 223, 223, .8);
- color: #fff
-}
-
-.btn-inverse-dark {
- background: rgba(116, 118, 123, .15);
- color: #74767b
-}
-
-.btn-inverse-dark i {
- color: inherit
-}
-
-.btn-inverse-dark:hover {
- background: rgba(116, 118, 123, .8);
- color: #fff
-}
-
-.btn-inverse-white {
- background: rgba(255, 255, 255, .15);
- color: #fff
-}
-
-.btn-inverse-white i {
- color: inherit
-}
-
-.btn-inverse-white:hover {
- background: rgba(255, 255, 255, .8);
- color: #fff
-}
-
-.btn-inverse-orange {
- background: rgba(255, 166, 0, .15);
- color: #ffa600
-}
-
-.btn-inverse-orange i {
- color: inherit
-}
-
-.btn-inverse-orange:hover {
- background: rgba(255, 166, 0, .8);
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-twitter {
- background: #55acee;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-twitter:hover {
- background: #2795e9
-}
-
-.btn:not(.social-btn-outlined).btn-twitter.btn-link {
- background: 0 0;
- color: #55acee
-}
-
-.btn:not(.social-btn-outlined).btn-twitter.btn-link:hover {
- color: #2795e9
-}
-
-.btn:not(.social-btn-outlined).btn-facebook {
- background: #0084ff;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-facebook:hover {
- background: #006acc
-}
-
-.btn:not(.social-btn-outlined).btn-facebook.btn-link {
- background: 0 0;
- color: #0084ff
-}
-
-.btn:not(.social-btn-outlined).btn-facebook.btn-link:hover {
- color: #006acc
-}
-
-.btn:not(.social-btn-outlined).btn-google {
- background: #dd4b39;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-google:hover {
- background: #c23321
-}
-
-.btn:not(.social-btn-outlined).btn-google.btn-link {
- background: 0 0;
- color: #dd4b39
-}
-
-.btn:not(.social-btn-outlined).btn-google.btn-link:hover {
- color: #c23321
-}
-
-.btn:not(.social-btn-outlined).btn-linkedin {
- background: #0077b5;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-linkedin:hover {
- background: #005582
-}
-
-.btn:not(.social-btn-outlined).btn-linkedin.btn-link {
- background: 0 0;
- color: #0077b5
-}
-
-.btn:not(.social-btn-outlined).btn-linkedin.btn-link:hover {
- color: #005582
-}
-
-.btn:not(.social-btn-outlined).btn-pinterest {
- background: #bd081c;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-pinterest:hover {
- background: #8c0615
-}
-
-.btn:not(.social-btn-outlined).btn-pinterest.btn-link {
- background: 0 0;
- color: #bd081c
-}
-
-.btn:not(.social-btn-outlined).btn-pinterest.btn-link:hover {
- color: #8c0615
-}
-
-.btn:not(.social-btn-outlined).btn-youtube {
- background: #cd201f;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-youtube:hover {
- background: #a11918
-}
-
-.btn:not(.social-btn-outlined).btn-youtube.btn-link {
- background: 0 0;
- color: #cd201f
-}
-
-.btn:not(.social-btn-outlined).btn-youtube.btn-link:hover {
- color: #a11918
-}
-
-.btn:not(.social-btn-outlined).btn-github {
- background: #333;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-github:hover {
- background: #1a1a1a
-}
-
-.btn:not(.social-btn-outlined).btn-github.btn-link {
- background: 0 0;
- color: #333
-}
-
-.btn:not(.social-btn-outlined).btn-github.btn-link:hover {
- color: #1a1a1a
-}
-
-.btn:not(.social-btn-outlined).btn-behance {
- background: #0454f6;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-behance:hover {
- background: #0343c4
-}
-
-.btn:not(.social-btn-outlined).btn-behance.btn-link {
- background: 0 0;
- color: #0454f6
-}
-
-.btn:not(.social-btn-outlined).btn-behance.btn-link:hover {
- color: #0343c4
-}
-
-.btn:not(.social-btn-outlined).btn-dribbble {
- background: #ea4c89;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-dribbble:hover {
- background: #e51e6b
-}
-
-.btn:not(.social-btn-outlined).btn-dribbble.btn-link {
- background: 0 0;
- color: #ea4c89
-}
-
-.btn:not(.social-btn-outlined).btn-dribbble.btn-link:hover {
- color: #e51e6b
-}
-
-.btn:not(.social-btn-outlined).btn-reddit {
- background: #ed4333;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-reddit:hover {
- background: #da2413
-}
-
-.btn:not(.social-btn-outlined).btn-reddit.btn-link {
- background: 0 0;
- color: #ed4333
-}
-
-.btn:not(.social-btn-outlined).btn-reddit.btn-link:hover {
- color: #da2413
-}
-
-.btn:not(.social-btn-outlined).btn-instagram {
- background: #ff759b;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-instagram:hover {
- background: #ff4276
-}
-
-.btn:not(.social-btn-outlined).btn-instagram.btn-link {
- background: 0 0;
- color: #ff759b
-}
-
-.btn:not(.social-btn-outlined).btn-instagram.btn-link:hover {
- color: #ff4276
-}
-
-.btn-group label.btn.btn-primary:not(:disabled):not(.disabled).active {
- background: #000e01
-}
-
-.btn-group label.btn.btn-secondary:not(:disabled):not(.disabled).active {
- background: #4d4d4d
-}
-
-.btn-group label.btn.btn-success:not(:disabled):not(.disabled).active {
- background: #007a50
-}
-
-.btn-group label.btn.btn-info:not(:disabled):not(.disabled).active {
- background: #1d0de4
-}
-
-.btn-group label.btn.btn-warning:not(:disabled):not(.disabled).active {
- background: #d54314
-}
-
-.btn-group label.btn.btn-danger:not(:disabled):not(.disabled).active {
- background: #f8000b
-}
-
-.btn-group label.btn.btn-light:not(:disabled):not(.disabled).active {
- background: #acacac
-}
-
-.btn-group label.btn.btn-dark:not(:disabled):not(.disabled).active {
- background: #424447
-}
-
-.btn-group label.btn.btn-white:not(:disabled):not(.disabled).active {
- background: #ccc
-}
-
-.btn-group label.btn.btn-orange:not(:disabled):not(.disabled).active {
- background: #996400
-}
-
-.btn-outline-primary {
- border: 2px solid #047006
-}
-
-.btn-outline-secondary {
- border: 2px solid grey
-}
-
-.btn-outline-success {
- border: 2px solid #00e093
-}
-
-.btn-outline-info {
- border: 2px solid #6c61f6
-}
-
-.btn-outline-warning {
- border: 2px solid #f0825f
-}
-
-.btn-outline-danger {
- border: 2px solid #ff5f66
-}
-
-.btn-outline-light {
- border: 2px solid #dfdfdf
-}
-
-.btn-outline-dark {
- border: 2px solid #74767b
-}
-
-.btn-outline-white {
- border: 2px solid #fff
-}
-
-.btn-outline-orange {
- border: 2px solid #ffa600
-}
-
-.btn-group label.btn input {
- display: none
-}
-
-.btn {
- display: -webkit-inline-box;
- display: inline-flex;
- -webkit-box-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- align-items: center;
- -webkit-transition: .3s ease;
- transition: .3s ease;
- -webkit-transition-property: background, color;
- transition-property: background, color;
- font-size: .875rem;
- font-family: Roboto, sans-serif;
- font-weight: 600;
- letter-spacing: .03rem
-}
-
-.btn:not([class*=btn-inverse]):not(.component-flat) {
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2)
-}
-
-.btn i {
- font-size: 1.25rem
-}
-
-.btn-group-lg>.btn,
-.btn.btn-lg {
- height: 55px;
- max-height: 55px;
- padding: 15px 30px;
- font-size: 1.125rem
-}
-
-.btn-group-sm>.btn,
-.btn.btn-sm {
- height: 35px;
- max-height: 35px;
- padding: 4px 15px;
- font-size: .875rem
-}
-
-.btn.btn-xs {
- height: 25px;
- max-height: 25px;
- padding: 0 10px;
- line-height: 1;
- font-size: .75rem
-}
-
-.btn.btn-xs.has-icon i,
-.btn.btn-xs.has-icon span {
- font-size: .8125rem;
- margin-right: 5px
-}
-
-.btn {
- height: 40px;
- max-height: 40px;
- padding: 5px 20px
-}
-
-.btn.active {
- box-shadow: none
-}
-
-.btn.social-icon-btn {
- height: 40px;
- width: 40px
-}
-
-.btn.social-btn i {
- margin-right: 10px
-}
-
-.btn.social-btn-outlined i {
- margin-right: 10px
-}
-
-.btn.has-icon i,
-.btn.has-icon span {
- font-size: 1.25rem;
- margin-right: 10px;
- line-height: 1
-}
-
-.btn.btn-outline-secondary {
- color: #1a1a1a;
- border-color: #676767
-}
-
-.btn.btn-info,
-.btn.btn-warning {
- color: #fff
-}
-
-.btn.btn-light {
- background: #fff;
- color: #000
-}
-
-.btn.dropdown-dotted-list {
- background: #fff
-}
-
-.btn.dropdown-toggle-split {
- padding: 0 8px
-}
-
-.btn.action-btn {
- display: -webkit-inline-box;
- display: inline-flex;
- -webkit-box-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- align-items: center;
- padding: 0;
- height: 40px;
- width: 40px
-}
-
-.btn.action-btn i {
- font-size: 1.25rem;
- width: 26px;
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- align-items: center;
- line-height: 23px;
- vertical-align: middle;
- font-size: 1.25rem
-}
-
-.btn.action-btn i:before {
- width: inherit;
- height: inherit;
- line-height: inherit;
- font-size: inherit
-}
-
-.btn.action-btn.btn-xs {
- height: 30px;
- width: 30px
-}
-
-.btn-group-sm>.btn.action-btn,
-.btn.action-btn.btn-sm {
- height: 35px;
- width: 35px
-}
-
-.btn-group-lg>.btn.action-btn,
-.btn.action-btn.btn-lg {
- height: 50px;
- width: 50px
-}
-
-.btn-group-lg>.btn.action-btn i,
-.btn.action-btn.btn-lg i {
- font-size: 1.875rem;
- line-height: 24px
-}
-
-.btn.action-btn.btn-refresh.clicked i {
- color: #047006;
- -webkit-animation: rotate360 .8s linear infinite;
- animation: rotate360 .8s linear infinite
-}
-
-.btn.action-btn.btn-like.clicked i {
- color: #ff5f66;
- -webkit-animation: bounceIn .8s linear 1;
- animation: bounceIn .8s linear 1
-}
-
-.btn.action-btn.btn-like.clicked:hover i {
- color: #fff
-}
-
-.btn.btn-rounded {
- border-radius: 50px
-}
-
-.flag-germany {
- width: 40px;
- height: 28px;
- background: red;
- border-top: 9px solid #000;
- border-bottom: 9px solid #fc0;
- display: block
-}
-
-.flag-england {
- background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==);
- background-size: cover;
- width: 40px;
- height: 28px;
- display: block
-}
-
-.language-active {
- background-color: #f9fafb;
- padding: 2px
-}
-
-.language-inactive {
- padding: 2px;
- background-color: transparent
-}
-
-.is-invalid .form-control {
- background-color: rgba(240, 130, 95, .2);
- border: none
-}
-
-.is-invalid .invalid-feedback {
- display: block
-}
-
-.is-valid .form-control {
- background-color: rgba(4, 112, 6, .2);
- border: none
-}
-
-.form-control {
- padding-left: 20px;
- padding-right: 20px;
- color: rgba(16, 16, 16, .8)
-}
-
-.form-control.placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control:-moz-placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control::-moz-placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control:-ms-input-placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control::-webkit-input-placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control.is-invalid {
- background-color: rgba(240, 130, 95, .2);
- border: none
-}
-
-.form-control.is-valid {
- background-color: rgba(4, 112, 6, .2);
- border: none
-}
-
-.input-group-text {
- background-color: #f6f7f9;
- color: #101010;
- border-color: #f2f4f9;
- padding: 0 10px;
- font-size: 17px
-}
-
-.is-valid .input-group-text {
- background-color: rgba(4, 112, 6, .2);
- color: #047006
-}
-
-.is-invalid .input-group-text {
- background-color: rgba(240, 130, 95, .2);
- color: #f0825f
-}
-
-.form-group {
- margin-bottom: 20px
-}
-
-.form-group.input-rounded .form-control {
- border-radius: 25px
-}
-
-.custom-file .custom-file-label {
- padding: 8px .75rem;
- height: 41px
-}
-
-.custom-file .custom-file-label:after {
- padding: 1.45rem .8rem;
- line-height: 0
-}
-
-.custom-select,
-.custom-select[multiple] {
- background: #f6f7f9;
- border-color: #f0f2f5;
- color: rgba(16, 16, 16, .8)
-}
-
-.custom-select option,
-.custom-select[multiple] option {
- background: #f6f7f9;
- color: rgba(16, 16, 16, .8);
- display: block;
- border-bottom: 1px solid #f2f4f9;
- padding: 5px 10px
-}
-
-.custom-select option:checked,
-.custom-select[multiple] option:checked {
- background: #f6f7f9
-}
-
-.custom-select option[selected],
-.custom-select[multiple] option[selected] {
- background: #f6f7f9;
- display: block
-}
-
-.custom-select[multiple] {
- padding: 0;
- border-radius: 2px
-}
-
-.custom-control-input:focus~.custom-control-label::before {
- box-shadow: none
-}
-
-.custom-switch .custom-control-label::after {
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2);
- background: #047006
-}
-
-.checkbox,
-.radio {
- position: relative;
- display: block;
- margin-top: 2px;
- margin-bottom: 20px
-}
-
-.checkbox label,
-.radio label {
- display: block;
- padding-left: 30px;
- line-height: 1.42857143;
- font-size: .875rem
-}
-
-.checkbox label input,
-.radio label input {
- position: absolute;
- margin-left: -20px;
- margin-top: 4px\9;
- top: 0;
- left: 0;
- margin-left: 0 !important;
- z-index: 1;
- cursor: pointer;
- opacity: 0;
- filter: alpha(opacity=0);
- margin-top: 0
-}
-
-.checkbox label input:checked+.input-frame:before,
-.radio label input:checked+.input-frame:before {
- background-color: #fff
-}
-
-.checkbox label input:checked+.input-frame:after,
-.radio label input:checked+.input-frame:after {
- color: #047006;
- opacity: 1;
- line-height: 1.5;
- filter: alpha(opacity=100);
- -webkit-transform: scale(1);
- transform: scale(1)
-}
-
-.checkbox label input:disabled+.input-frame:before,
-.radio label input:disabled+.input-frame:before {
- border-color: #fff
-}
-
-.checkbox label input:disabled:checked+.input-frame:before,
-.radio label input:disabled:checked+.input-frame:before {
- background: #047006
-}
-
-.checkbox label .input-frame:before,
-.radio label .input-frame:before {
- position: absolute;
- content: '.5';
- top: 0;
- width: 19px;
- height: 19px;
- border-radius: 2px;
- left: 0;
- border: 2px solid #f2f4f9;
- -webkit-transition: all;
- transition: all;
- -webkit-transition-duration: 250ms;
- transition-duration: 250ms
-}
-
-.checkbox label .input-frame:after,
-.radio label .input-frame:after {
- line-height: 1.5;
- -webkit-transition: all;
- transition: all;
- -webkit-transition-duration: 250ms;
- transition-duration: 250ms;
- font-family: Material Design Icons;
- opacity: 0;
- filter: alpha(opacity=0);
- -webkit-transform: scale(0);
- transform: scale(0);
- content: '3';
- position: absolute;
- font-size: .9375rem;
- left: 1px;
- top: -2px;
- color: #fff
-}
-
-.checkbox label {
- font-size: 16;
- line-height: 1.5;
- padding-left: 30px
-}
-
-.checkbox label input:checked+.input-helper:before {
- background-color: #fff
-}
-
-.checkbox label input:checked+.input-helper:after {
- width: 18px;
- opacity: 1;
- line-height: 18px;
- filter: alpha(opacity=100);
- -webkit-transform: scale(1);
- transform: scale(1)
-}
-
-.checkbox label input:disabled+.input-helper:before {
- border-color: #f2f4f9
-}
-
-.checkbox label input:disabled:checked+.input-helper:after {
- color: #f2f4f9
-}
-
-.checkbox label .input-frame:before {
- position: absolute;
- content: '3';
- top: 50%;
- -webkit-transform: translateY(-50%);
- transform: translateY(-50%);
- width: 18px;
- height: 18px;
- border-radius: 2px;
- left: 0;
- border: 2px solid #f2f4f9;
- -webkit-transition: all;
- transition: all;
- transition-duration: 0s;
- -webkit-transition-duration: 250ms;
- transition-duration: 250ms
-}
-
-.rtl .checkbox label .input-frame:before {
- left: auto;
- right: 0
-}
-
-.checkbox label .input-frame:after {
- -webkit-transition: all;
- transition: all;
- transition-duration: 0s;
- -webkit-transition-duration: 250ms;
- transition-duration: 250ms;
- font-family: Material Design Icons;
- opacity: 0;
- filter: alpha(opacity=0);
- -webkit-transform: scale(0);
- transform: scale(0);
- content: '.5';
- position: absolute;
- font-size: 15px;
- font-weight: 700;
- left: 0;
- top: 0;
- -webkit-transform: translateY(-14%);
- transform: translateY(-14%);
- color: #047006
-}
-
-.rtl .checkbox label .input-frame:after {
- left: auto;
- right: 0
-}
-
-.radio label input:checked+.input-frame:before {
- background-color: #fff
-}
-
-.radio label input:checked:disabled+.input-frame:before {
- background-color: #fff;
- border-color: #fff
-}
-
-.radio label input:checked:disabled+.input-frame:after {
- background-color: #047006
-}
-
-.radio label .input-frame:before {
- border-radius: 50%
-}
-
-.radio label .input-frame:after {
- content: 'http://www.w3.org/2000/svg';
- width: 9px;
- height: 9px;
- background: #047006;
- border-radius: 50%;
- top: 5px;
- left: 5px;
- -webkit-transform: scale(0);
- transform: scale(0)
-}
-
-.form-inline .checkbox,
-.form-inline .radio {
- margin-right: 30px
-}
-
-.form-inline .checkbox:last-child,
-.form-inline .radio:last-child {
- margin-right: 0
-}
-
-.form-inline .form-check-input {
- display: none
-}
-
-.bootstrap-tagsinput {
- background: #f6f7f9;
- border-color: #f0f2f5;
- box-shadow: none;
- min-width: 100%;
- width: 100%;
- max-width: 100%
-}
-
-.bootstrap-tagsinput .tag {
- display: inline-block;
- background: #047006;
- color: #fff;
- padding: 2px 9px;
- border-radius: 2px;
- margin-bottom: 5px
-}
-
-.bootstrap-tagsinput .tag:nth-child(5n+1) {
- background: #047006
-}
-
-.bootstrap-tagsinput .tag:nth-child(5n+2) {
- background: #00e093
-}
-
-.bootstrap-tagsinput .tag:nth-child(5n+3) {
- background: #6c61f6
-}
-
-.bootstrap-tagsinput .tag:nth-child(5n+4) {
- background: #f0825f
-}
-
-.bootstrap-tagsinput .tag:nth-child(5n+5) {
- background: #ff5f66
-}
-
-.page-body {
- background: #fff
-}
-
-.page-content-wrapper {
- background: #f9fafb;
- border-left: 1px solid #f2f4f9
-}
-
-@media (min-width:992px) {
- .t-header .t-header-content-wrapper {
- border-left: 1px solid #f2f4f9
- }
-
-}
-
-@media (min-width:768px) {
- .page-body {
- position: relative;
- display: grid;
- max-width: 100%;
- grid-template-columns: 17rem calc(100vw - 17rem);
- -webkit-transition: .3s;
- transition: .3s
- }
-
- .page-body .page-content-wrapper {
- position: relative;
- width: 100%;
- min-height: 100vh;
- padding: 1.5rem 2.5rem calc(90px + 1.5rem);
- margin-top: 70px
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner {
- max-width: 1140px;
- margin-left: auto;
- margin-right: auto
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header {
- position: -webkit-sticky;
- position: sticky;
- top: 70px;
- background: #f9fafb;
- z-index: 99
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb {
- padding: 1rem 1rem 1rem 21px;
- margin-left: -20px;
- margin-right: -20px;
- background: #f9fafb
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item {
- color: #565656;
- letter-spacing: .03rem;
- font-family: Roboto, sans-serif;
- font-weight: 500
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item a {
- color: inherit
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item.active {
- color: #047006
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-title-heading {
- color: #565656;
- font-size: 1.5rem;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- margin-bottom: 0
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-description {
- opacity: .7;
- margin-top: 15px
- }
-
- body.sidebar-minimized .t-header .t-header-brand-wrapper {
- background: #f9fafb
- }
-
- body.sidebar-minimized .t-header .t-header-content-wrapper {
- border-left: #f9fafb
- }
-
- body.sidebar-minimized .page-body {
- grid-template-columns: 0 100%
- }
-
- body.sidebar-minimized .page-body .sidebar .sidebar_footer {
- left: -17rem
- }
-
- body.sidebar-minimized .page-body .sidebar .nav-category-divider {
- position: initial
- }
-
-}
-
-@media (max-width:991.98px) {
- .t-header {
- width: 100vw
- }
-
- .t-header .t-header-brand-wrapper {
- background: #f9fafb;
- width: 4rem;
- min-width: 4rem;
- max-width: 4rem
- }
-
- .t-header .t-header-brand-wrapper a .logo {
- -webkit-animation-name: menuItemFadeIn;
- animation-name: menuItemFadeIn;
- -webkit-animation-duration: .25s;
- animation-duration: .25s;
- -webkit-animation-fill-mode: both;
- animation-fill-mode: both;
- display: none
- }
-
- @-webkit-keyframes menuItemFadeIn {
- from {
- -webkit-transform: translate3d(-20px, 0, 0);
- transform: translate3d(-20px, 0, 0);
- display: none;
- opacity: 0
- }
-
- to {
- display: block;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- opacity: 1
- }
-
- }
-
- @keyframes menuItemFadeIn {
- from {
- -webkit-transform: translate3d(-20px, 0, 0);
- transform: translate3d(-20px, 0, 0);
- display: none;
- opacity: 0
- }
-
- to {
- display: block;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- opacity: 1
- }
-
- }
-
- .t-header .t-header-brand-wrapper a .logo-mini {
- display: block
- }
-
- .page-body {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row;
- overflow: hidden;
- max-width: 100%
- }
-
- .page-body .sidebar {
- position: relative;
- left: 0;
- z-index: 99;
- width: 15rem;
- min-width: 15rem;
- max-width: 15rem;
- margin-left: -15rem;
- -webkit-transition-duration: .2s;
- transition-duration: .2s;
- -webkit-transition-timing-function: ease-in-out;
- transition-timing-function: ease-in-out;
- -webkit-transition-property: margin-left, width;
- transition-property: margin-left, width
- }
-
- .page-body .sidebar .sidebar_footer {
- -webkit-transition-duration: .2s;
- transition-duration: .2s;
- -webkit-transition-timing-function: ease-in-out;
- transition-timing-function: ease-in-out;
- -webkit-transition-property: left;
- transition-property: left;
- left: -15rem
- }
-
- .page-body .page-content-wrapper {
- padding: 20px 20px;
- min-width: 100vw;
- margin-left: 0;
- -webkit-transition-duration: .2s;
- transition-duration: .2s;
- -webkit-transition-timing-function: ease-in-out;
- transition-timing-function: ease-in-out;
- -webkit-transition-property: margin-left;
- transition-property: margin-left
- }
-
- .page-body .page-content-wrapper .viewport-header .breadcrumb {
- background: 0 0;
- padding-left: 0
- }
-
- .page-body .page-content-wrapper footer {
- position: relative
- }
-
- .page-body.sidebar-collpased .sidebar {
- margin-left: 0;
- min-width: 15rem
- }
-
- .page-body.sidebar-collpased .sidebar .sidebar_footer {
- left: 0
- }
-
-}
-
-@media (max-width:767.98px) {
- .page-body .page-content-wrapper {
- padding: 80px 20px 0 20px
- }
-
-}
-
-.logo {
- display: block;
- margin: 0 auto;
- width: 280px
-}
-
-.logo img {
- width: 100%
-}
-
-.grid {
- background: #fff;
- border-radius: 6px;
- box-shadow: 0 0 10px 0 rgba(183, 192, 206, .2);
- margin-bottom: 1.5rem;
- border: 1px solid rgba(238, 238, 238, .75)
-}
-
-.grid-header {
- padding: 15px 20px;
- margin-bottom: 15px;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- font-size: 14px;
- letter-spacing: .03rem;
- background: #f9fafb;
- border-left: 3px solid #047006;
- border-radius: 0 6px 0 0
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .grid-header {
- font-size: calc(14px + 1 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .grid-header {
- font-size: calc(15px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .grid-header {
- font-size: 14px
- }
-
-}
-
-.grid-title {
- opacity: .9;
- margin-bottom: 25px
-}
-
-.close {
- color: #101010
-}
-
-.split-header {
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: justify;
- justify-content: space-between;
- -webkit-box-align: center;
- align-items: center
-}
-
-.split-header .content-wrapper {
- display: -webkit-box;
- display: flex
-}
-
-.split-header .content-wrapper a i,
-.split-header .content-wrapper span i {
- font-size: 20px;
- color: #adb5bd;
- -webkit-transition: .3s ease color;
- transition: .3s ease color
-}
-
-.split-header .content-wrapper a i:hover,
-.split-header .content-wrapper span i:hover {
- color: #047006
-}
-
-.split-header .content-wrapper.v-centered {
- -webkit-box-align: center;
- align-items: center
-}
-
-.split-header .content-wrapper.h-centered {
- -webkit-box-pack: center;
- justify-content: center
-}
-
-.grid-body {
- padding: 20px 25px 20px
-}
-
-.card-title {
- font-size: 14px;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- color: #313131;
- margin-bottom: 0
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .card-title {
- font-size: calc(14px + 1 * ((100vw - 768px)/ 223))
- }
-
-}
-
-@media (min-width:991px) and (max-width:1200px) {
- .card-title {
- font-size: calc(15px + -1 * ((100vw - 991px)/ 209))
- }
-
-}
-
-@media (min-width:1200px) {
- .card-title {
- font-size: 14px
- }
-
-}
-
-.equel-grid {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: stretch;
- align-items: stretch
-}
-
-.equel-grid .grid {
- width: 100%;
- min-width: 100%
-}
-
-.showcase_row_area {
- margin-bottom: 20px
-}
-
-.showcase_row_area .showcase_text_area {
- text-align: right
-}
-
-@media (max-width:767.98px) {
- .showcase_row_area .showcase_text_area {
- text-align: left
- }
-
-}
-
-.showcase_row_area .showcase_content_area {
- margin-bottom: -10px
-}
-
-.showcase_row_area .showcase_content_area .btn {
- margin-right: 5px;
- margin-bottom: 10px
-}
-
-.showcase_row_area:last-child {
- margin-bottom: 0
-}
-
-.content-preview {
- width: 45px;
- height: 45px
-}
-
-.content-preview.rounded {
- border-radius: 100%
-}
-
-.btn:not(.disabled),.cursor_pointer,a {
- cursor: pointer
-}
-
-.grd-positive-currency {
- color: #047006
-}
-
-.grd-negative-currency {
- color: red
-}
-
-.color-success {
- color: var(--success)
-}
-
-.color-danger {
- color: var(--danger)
-}
-
-.color-warning {
- color: var(--warning)
-}
-
-.color-primary {
- color: var(--primary)
-}
-
-.btn-gradido-orange {
- color: #fff;
- background-color: #ffa600;
- border-color: #ffa600
-}
-
-.visible-modal {
- display: block
-}
-
-.margin-top-10 {
- margin-top: 10px
-}
-
-.pull-right {
- float: right
-}
-
-.pull-right-row {
- display: block;
- margin-right: 10px
-}
-
-.display-block {
- display: block
-}
-
-p.grd_small {
- margin-top: 2px;
- margin-bottom: 2px
-}
-
-ul.grd-no-style {
- list-style-type: none
-}
-
-.center-ul-container ul {
- padding-left: 0;
- margin-bottom: 0;
- text-align: center
-}
-
-.center-ul-container ul .grd-error {
- margin-top: 5px;
- color: #8b0000
-}
-
-.grd-alert-color {
- color: #ff5f66 !important
-}
-
-.grd-success-color {
- color: #047006 !important
-}
-
-.grd-orange-color {
- color: #ffa600
-}
-
-.hidden {
- display: none
-}
-
-.alert {
- cursor: pointer
-}
-
-.table.table-auto-break td,
-.table.table-auto-break th {
- white-space: pre-line
-}
-
-.grd-passphrase-words {
- cursor: pointer
-}
-
-.authentication-theme .reset-pwd-link,
-.authentication-theme .signup-link {
- margin: 20px auto 0 auto;
- text-align: center;
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: center;
- justify-content: center
-}
-
-.authentication-theme .reset-pwd-link a,
-.authentication-theme .signup-link a {
- display: inline-block;
- margin-left: 10px
-}
-
-.authentication-theme .auth_footer {
- margin-top: 30px
-}
-
-.authentication-theme.auth-style_1 {
- min-height: 100vh;
- width: 100%;
- background: #f9fafb;
- padding: 10% 0 2px 0
-}
-
-.authentication-theme.auth-style_1 .logo-section {
- margin-bottom: 50px
-}
-
-.authentication-theme.auth-style_1 .grid-body {
- padding: 60px 15px;
- padding-bottom: 80px;
- position: relative
-}
-
-.authentication-theme.auth-style_1 .grid-body .form-wrapper {
- position: unset
-}
-
-.authentication-theme.auth-style_1 .grid-body-small {
- padding: 15px 5px;
- position: relative
-}
-
-.authentication-theme.auth-style_1 .signup-link {
- position: absolute;
- bottom: 25px;
- left: 0;
- right: 0
-}
-
-.authentication-theme.auth-style_1 .reset-pwd-link {
- position: absolute;
- bottom: 20px;
- left: 0;
- right: 0
-}
-
-.authentication-theme.auth-style_2 {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: stretch;
- align-items: stretch;
- -webkit-box-pack: center;
- justify-content: center;
- min-height: 100vh
-}
-
-.authentication-theme.auth-style_2 .inner-wrapper {
- width: 100%
-}
-
-.authentication-theme.auth-style_2 .banner-section {
- background: url(http://www.placehold.it/1200x800) no-repeat center;
- background-size: 60%;
- background-color: #fff;
- display: -webkit-box;
- display: flex;
- -webkit-box-align: end;
- align-items: flex-end
-}
-
-.authentication-theme.auth-style_2 .banner-section .auth_footer {
- padding: 20px 20px
-}
-
-@media (max-width:767.98px) {
- .authentication-theme.auth-style_2 .banner-section {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- z-index: 0
- }
-
-}
-
-.authentication-theme.auth-style_2 .form-section {
- background-color: #fff;
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- -webkit-box-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- align-items: center
-}
-
-.authentication-theme.auth-style_2 .form-section .logo-section {
- margin: 0 auto 50px auto
-}
-
-.authentication-theme.auth-style_2 .form-section form {
- width: 100%;
- max-width: 350px;
- margin: 0 auto
-}
-
-@media (max-width:767.98px) {
- .authentication-theme.auth-style_2 .form-section {
- background: rgba(255, 255, 255, .96)
- }
-
-}
-
-.authentication-theme.auth-style_3 {
- background: url(http://www.placehold.it/1200x800) no-repeat center;
- background-size: cover;
- background-color: #fff;
- min-height: 100vh;
- height: 100%;
- display: -webkit-box;
- display: flex;
- -webkit-box-align: stretch;
- align-items: stretch;
- -webkit-box-pack: center;
- justify-content: center
-}
-
-.authentication-theme.auth-style_3 .inner-wrapper {
- width: 100%
-}
-
-.authentication-theme.auth-style_3 .logo-section {
- margin: 0 auto 50px auto
-}
-
-.authentication-theme.auth-style_3 .form-section {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center
-}
-
-.authentication-theme.auth-style_3 .form-section form {
- width: 100%;
- max-width: 400px;
- margin: 0 auto
-}
-
-@media (max-width:767.98px) {
- .authentication-theme.auth-style_3 .form-section form {
- max-width: 300px
- }
-
-}
diff --git a/community_server/webroot/css/main.css b/community_server/webroot/css/main.css
deleted file mode 100644
index 3e16f1164..000000000
--- a/community_server/webroot/css/main.css
+++ /dev/null
@@ -1,25 +0,0 @@
-@charset "UTF-8";
-/* ============================================================
-
- Common CSS file, importing other files.
-
- Datei : main.css
- Datum : 2020-04-30
- Autor : Christine Slotty
- Copyright : Gradio
-
- ============================================================*/
-
-@import url(normalize.css);
-@import url(grd_styles.css);
-
-/*! debug.css v0.0.3 | MIT License | https://gist.github.com/zaydek/6b2e55258734deabbd2b4a284321d6f6 */
-[debug],
-[debug] * {
- color: hsla(210, 100%, 100%, 0.9) !important;
- background: hsla(210, 100%, 50%, 0.5) !important;
- outline: solid 0.25rem hsla(210, 100%, 100%, 0.5) !important;
-
- box-shadow: none !important;
- filter: none !important;
-}
diff --git a/community_server/webroot/css/materialdesignicons.min.css b/community_server/webroot/css/materialdesignicons.min.css
deleted file mode 100644
index bbdcbc816..000000000
--- a/community_server/webroot/css/materialdesignicons.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* MaterialDesignIcons.com */@font-face{font-family:"Material Design Icons";src:url("../fonts/materialdesignicons-webfont.eot?v=3.5.95");src:url("../fonts/materialdesignicons-webfont.eot?#iefix&v=3.5.95") format("embedded-opentype"),url("../fonts/materialdesignicons-webfont.woff2?v=3.5.95") format("woff2"),url("../fonts/materialdesignicons-webfont.woff?v=3.5.95") format("woff"),url("../fonts/materialdesignicons-webfont.ttf?v=3.5.95") format("truetype"),url("../fonts/materialdesignicons-webfont.svg?v=3.5.95#materialdesigniconsregular") format("svg");font-weight:normal;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font:normal normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-access-point:before{content:"\F002"}.mdi-access-point-network:before{content:"\F003"}.mdi-access-point-network-off:before{content:"\FBBD"}.mdi-account:before{content:"\F004"}.mdi-account-alert:before{content:"\F005"}.mdi-account-alert-outline:before{content:"\FB2C"}.mdi-account-arrow-left:before{content:"\FB2D"}.mdi-account-arrow-left-outline:before{content:"\FB2E"}.mdi-account-arrow-right:before{content:"\FB2F"}.mdi-account-arrow-right-outline:before{content:"\FB30"}.mdi-account-badge:before{content:"\FD83"}.mdi-account-badge-alert:before{content:"\FD84"}.mdi-account-badge-alert-outline:before{content:"\FD85"}.mdi-account-badge-outline:before{content:"\FD86"}.mdi-account-box:before{content:"\F006"}.mdi-account-box-multiple:before{content:"\F933"}.mdi-account-box-outline:before{content:"\F007"}.mdi-account-card-details:before{content:"\F5D2"}.mdi-account-card-details-outline:before{content:"\FD87"}.mdi-account-check:before{content:"\F008"}.mdi-account-check-outline:before{content:"\FBBE"}.mdi-account-child:before{content:"\FA88"}.mdi-account-child-circle:before{content:"\FA89"}.mdi-account-circle:before{content:"\F009"}.mdi-account-circle-outline:before{content:"\FB31"}.mdi-account-clock:before{content:"\FB32"}.mdi-account-clock-outline:before{content:"\FB33"}.mdi-account-convert:before{content:"\F00A"}.mdi-account-details:before{content:"\F631"}.mdi-account-edit:before{content:"\F6BB"}.mdi-account-group:before{content:"\F848"}.mdi-account-group-outline:before{content:"\FB34"}.mdi-account-heart:before{content:"\F898"}.mdi-account-heart-outline:before{content:"\FBBF"}.mdi-account-key:before{content:"\F00B"}.mdi-account-key-outline:before{content:"\FBC0"}.mdi-account-minus:before{content:"\F00D"}.mdi-account-minus-outline:before{content:"\FAEB"}.mdi-account-multiple:before{content:"\F00E"}.mdi-account-multiple-check:before{content:"\F8C4"}.mdi-account-multiple-minus:before{content:"\F5D3"}.mdi-account-multiple-minus-outline:before{content:"\FBC1"}.mdi-account-multiple-outline:before{content:"\F00F"}.mdi-account-multiple-plus:before{content:"\F010"}.mdi-account-multiple-plus-outline:before{content:"\F7FF"}.mdi-account-network:before{content:"\F011"}.mdi-account-network-outline:before{content:"\FBC2"}.mdi-account-off:before{content:"\F012"}.mdi-account-off-outline:before{content:"\FBC3"}.mdi-account-outline:before{content:"\F013"}.mdi-account-plus:before{content:"\F014"}.mdi-account-plus-outline:before{content:"\F800"}.mdi-account-question:before{content:"\FB35"}.mdi-account-question-outline:before{content:"\FB36"}.mdi-account-remove:before{content:"\F015"}.mdi-account-remove-outline:before{content:"\FAEC"}.mdi-account-search:before{content:"\F016"}.mdi-account-search-outline:before{content:"\F934"}.mdi-account-settings:before{content:"\F630"}.mdi-account-star:before{content:"\F017"}.mdi-account-star-outline:before{content:"\FBC4"}.mdi-account-supervisor:before{content:"\FA8A"}.mdi-account-supervisor-circle:before{content:"\FA8B"}.mdi-account-switch:before{content:"\F019"}.mdi-account-tie:before{content:"\FCBF"}.mdi-accusoft:before{content:"\F849"}.mdi-adchoices:before{content:"\FD1E"}.mdi-adjust:before{content:"\F01A"}.mdi-adobe:before{content:"\F935"}.mdi-air-conditioner:before{content:"\F01B"}.mdi-air-filter:before{content:"\FD1F"}.mdi-air-horn:before{content:"\FD88"}.mdi-air-purifier:before{content:"\FD20"}.mdi-airbag:before{content:"\FBC5"}.mdi-airballoon:before{content:"\F01C"}.mdi-airplane:before{content:"\F01D"}.mdi-airplane-landing:before{content:"\F5D4"}.mdi-airplane-off:before{content:"\F01E"}.mdi-airplane-takeoff:before{content:"\F5D5"}.mdi-airplay:before{content:"\F01F"}.mdi-airport:before{content:"\F84A"}.mdi-alarm:before{content:"\F020"}.mdi-alarm-bell:before{content:"\F78D"}.mdi-alarm-check:before{content:"\F021"}.mdi-alarm-light:before{content:"\F78E"}.mdi-alarm-light-outline:before{content:"\FBC6"}.mdi-alarm-multiple:before{content:"\F022"}.mdi-alarm-off:before{content:"\F023"}.mdi-alarm-plus:before{content:"\F024"}.mdi-alarm-snooze:before{content:"\F68D"}.mdi-album:before{content:"\F025"}.mdi-alert:before{content:"\F026"}.mdi-alert-box:before{content:"\F027"}.mdi-alert-box-outline:before{content:"\FCC0"}.mdi-alert-circle:before{content:"\F028"}.mdi-alert-circle-outline:before{content:"\F5D6"}.mdi-alert-decagram:before{content:"\F6BC"}.mdi-alert-decagram-outline:before{content:"\FCC1"}.mdi-alert-octagon:before{content:"\F029"}.mdi-alert-octagon-outline:before{content:"\FCC2"}.mdi-alert-octagram:before{content:"\F766"}.mdi-alert-octagram-outline:before{content:"\FCC3"}.mdi-alert-outline:before{content:"\F02A"}.mdi-alien:before{content:"\F899"}.mdi-all-inclusive:before{content:"\F6BD"}.mdi-alpha:before{content:"\F02B"}.mdi-alpha-a:before{content:"\41"}.mdi-alpha-a-box:before{content:"\FAED"}.mdi-alpha-a-box-outline:before{content:"\FBC7"}.mdi-alpha-a-circle:before{content:"\FBC8"}.mdi-alpha-a-circle-outline:before{content:"\FBC9"}.mdi-alpha-b:before{content:"\42"}.mdi-alpha-b-box:before{content:"\FAEE"}.mdi-alpha-b-box-outline:before{content:"\FBCA"}.mdi-alpha-b-circle:before{content:"\FBCB"}.mdi-alpha-b-circle-outline:before{content:"\FBCC"}.mdi-alpha-c:before{content:"\43"}.mdi-alpha-c-box:before{content:"\FAEF"}.mdi-alpha-c-box-outline:before{content:"\FBCD"}.mdi-alpha-c-circle:before{content:"\FBCE"}.mdi-alpha-c-circle-outline:before{content:"\FBCF"}.mdi-alpha-d:before{content:"\44"}.mdi-alpha-d-box:before{content:"\FAF0"}.mdi-alpha-d-box-outline:before{content:"\FBD0"}.mdi-alpha-d-circle:before{content:"\FBD1"}.mdi-alpha-d-circle-outline:before{content:"\FBD2"}.mdi-alpha-e:before{content:"\45"}.mdi-alpha-e-box:before{content:"\FAF1"}.mdi-alpha-e-box-outline:before{content:"\FBD3"}.mdi-alpha-e-circle:before{content:"\FBD4"}.mdi-alpha-e-circle-outline:before{content:"\FBD5"}.mdi-alpha-f:before{content:"\46"}.mdi-alpha-f-box:before{content:"\FAF2"}.mdi-alpha-f-box-outline:before{content:"\FBD6"}.mdi-alpha-f-circle:before{content:"\FBD7"}.mdi-alpha-f-circle-outline:before{content:"\FBD8"}.mdi-alpha-g:before{content:"\47"}.mdi-alpha-g-box:before{content:"\FAF3"}.mdi-alpha-g-box-outline:before{content:"\FBD9"}.mdi-alpha-g-circle:before{content:"\FBDA"}.mdi-alpha-g-circle-outline:before{content:"\FBDB"}.mdi-alpha-h:before{content:"\48"}.mdi-alpha-h-box:before{content:"\FAF4"}.mdi-alpha-h-box-outline:before{content:"\FBDC"}.mdi-alpha-h-circle:before{content:"\FBDD"}.mdi-alpha-h-circle-outline:before{content:"\FBDE"}.mdi-alpha-i:before{content:"\49"}.mdi-alpha-i-box:before{content:"\FAF5"}.mdi-alpha-i-box-outline:before{content:"\FBDF"}.mdi-alpha-i-circle:before{content:"\FBE0"}.mdi-alpha-i-circle-outline:before{content:"\FBE1"}.mdi-alpha-j:before{content:"\4A"}.mdi-alpha-j-box:before{content:"\FAF6"}.mdi-alpha-j-box-outline:before{content:"\FBE2"}.mdi-alpha-j-circle:before{content:"\FBE3"}.mdi-alpha-j-circle-outline:before{content:"\FBE4"}.mdi-alpha-k:before{content:"\4B"}.mdi-alpha-k-box:before{content:"\FAF7"}.mdi-alpha-k-box-outline:before{content:"\FBE5"}.mdi-alpha-k-circle:before{content:"\FBE6"}.mdi-alpha-k-circle-outline:before{content:"\FBE7"}.mdi-alpha-l:before{content:"\4C"}.mdi-alpha-l-box:before{content:"\FAF8"}.mdi-alpha-l-box-outline:before{content:"\FBE8"}.mdi-alpha-l-circle:before{content:"\FBE9"}.mdi-alpha-l-circle-outline:before{content:"\FBEA"}.mdi-alpha-m:before{content:"\4D"}.mdi-alpha-m-box:before{content:"\FAF9"}.mdi-alpha-m-box-outline:before{content:"\FBEB"}.mdi-alpha-m-circle:before{content:"\FBEC"}.mdi-alpha-m-circle-outline:before{content:"\FBED"}.mdi-alpha-n:before{content:"\4E"}.mdi-alpha-n-box:before{content:"\FAFA"}.mdi-alpha-n-box-outline:before{content:"\FBEE"}.mdi-alpha-n-circle:before{content:"\FBEF"}.mdi-alpha-n-circle-outline:before{content:"\FBF0"}.mdi-alpha-o:before{content:"\4F"}.mdi-alpha-o-box:before{content:"\FAFB"}.mdi-alpha-o-box-outline:before{content:"\FBF1"}.mdi-alpha-o-circle:before{content:"\FBF2"}.mdi-alpha-o-circle-outline:before{content:"\FBF3"}.mdi-alpha-p:before{content:"\50"}.mdi-alpha-p-box:before{content:"\FAFC"}.mdi-alpha-p-box-outline:before{content:"\FBF4"}.mdi-alpha-p-circle:before{content:"\FBF5"}.mdi-alpha-p-circle-outline:before{content:"\FBF6"}.mdi-alpha-q:before{content:"\51"}.mdi-alpha-q-box:before{content:"\FAFD"}.mdi-alpha-q-box-outline:before{content:"\FBF7"}.mdi-alpha-q-circle:before{content:"\FBF8"}.mdi-alpha-q-circle-outline:before{content:"\FBF9"}.mdi-alpha-r:before{content:"\52"}.mdi-alpha-r-box:before{content:"\FAFE"}.mdi-alpha-r-box-outline:before{content:"\FBFA"}.mdi-alpha-r-circle:before{content:"\FBFB"}.mdi-alpha-r-circle-outline:before{content:"\FBFC"}.mdi-alpha-s:before{content:"\53"}.mdi-alpha-s-box:before{content:"\FAFF"}.mdi-alpha-s-box-outline:before{content:"\FBFD"}.mdi-alpha-s-circle:before{content:"\FBFE"}.mdi-alpha-s-circle-outline:before{content:"\FBFF"}.mdi-alpha-t:before{content:"\54"}.mdi-alpha-t-box:before{content:"\FB00"}.mdi-alpha-t-box-outline:before{content:"\FC00"}.mdi-alpha-t-circle:before{content:"\FC01"}.mdi-alpha-t-circle-outline:before{content:"\FC02"}.mdi-alpha-u:before{content:"\55"}.mdi-alpha-u-box:before{content:"\FB01"}.mdi-alpha-u-box-outline:before{content:"\FC03"}.mdi-alpha-u-circle:before{content:"\FC04"}.mdi-alpha-u-circle-outline:before{content:"\FC05"}.mdi-alpha-v:before{content:"\56"}.mdi-alpha-v-box:before{content:"\FB02"}.mdi-alpha-v-box-outline:before{content:"\FC06"}.mdi-alpha-v-circle:before{content:"\FC07"}.mdi-alpha-v-circle-outline:before{content:"\FC08"}.mdi-alpha-w:before{content:"\57"}.mdi-alpha-w-box:before{content:"\FB03"}.mdi-alpha-w-box-outline:before{content:"\FC09"}.mdi-alpha-w-circle:before{content:"\FC0A"}.mdi-alpha-w-circle-outline:before{content:"\FC0B"}.mdi-alpha-x:before{content:"\58"}.mdi-alpha-x-box:before{content:"\FB04"}.mdi-alpha-x-box-outline:before{content:"\FC0C"}.mdi-alpha-x-circle:before{content:"\FC0D"}.mdi-alpha-x-circle-outline:before{content:"\FC0E"}.mdi-alpha-y:before{content:"\59"}.mdi-alpha-y-box:before{content:"\FB05"}.mdi-alpha-y-box-outline:before{content:"\FC0F"}.mdi-alpha-y-circle:before{content:"\FC10"}.mdi-alpha-y-circle-outline:before{content:"\FC11"}.mdi-alpha-z:before{content:"\5A"}.mdi-alpha-z-box:before{content:"\FB06"}.mdi-alpha-z-box-outline:before{content:"\FC12"}.mdi-alpha-z-circle:before{content:"\FC13"}.mdi-alpha-z-circle-outline:before{content:"\FC14"}.mdi-alphabetical:before{content:"\F02C"}.mdi-altimeter:before{content:"\F5D7"}.mdi-amazon:before{content:"\F02D"}.mdi-amazon-alexa:before{content:"\F8C5"}.mdi-amazon-drive:before{content:"\F02E"}.mdi-ambulance:before{content:"\F02F"}.mdi-ammunition:before{content:"\FCC4"}.mdi-ampersand:before{content:"\FA8C"}.mdi-amplifier:before{content:"\F030"}.mdi-anchor:before{content:"\F031"}.mdi-android:before{content:"\F032"}.mdi-android-auto:before{content:"\FA8D"}.mdi-android-debug-bridge:before{content:"\F033"}.mdi-android-head:before{content:"\F78F"}.mdi-android-messages:before{content:"\FD21"}.mdi-android-studio:before{content:"\F034"}.mdi-angle-acute:before{content:"\F936"}.mdi-angle-obtuse:before{content:"\F937"}.mdi-angle-right:before{content:"\F938"}.mdi-angular:before{content:"\F6B1"}.mdi-angularjs:before{content:"\F6BE"}.mdi-animation:before{content:"\F5D8"}.mdi-animation-outline:before{content:"\FA8E"}.mdi-animation-play:before{content:"\F939"}.mdi-animation-play-outline:before{content:"\FA8F"}.mdi-anvil:before{content:"\F89A"}.mdi-apple:before{content:"\F035"}.mdi-apple-finder:before{content:"\F036"}.mdi-apple-icloud:before{content:"\F038"}.mdi-apple-ios:before{content:"\F037"}.mdi-apple-keyboard-caps:before{content:"\F632"}.mdi-apple-keyboard-command:before{content:"\F633"}.mdi-apple-keyboard-control:before{content:"\F634"}.mdi-apple-keyboard-option:before{content:"\F635"}.mdi-apple-keyboard-shift:before{content:"\F636"}.mdi-apple-safari:before{content:"\F039"}.mdi-application:before{content:"\F614"}.mdi-application-export:before{content:"\FD89"}.mdi-application-import:before{content:"\FD8A"}.mdi-apps:before{content:"\F03B"}.mdi-apps-box:before{content:"\FD22"}.mdi-arch:before{content:"\F8C6"}.mdi-archive:before{content:"\F03C"}.mdi-arrange-bring-forward:before{content:"\F03D"}.mdi-arrange-bring-to-front:before{content:"\F03E"}.mdi-arrange-send-backward:before{content:"\F03F"}.mdi-arrange-send-to-back:before{content:"\F040"}.mdi-arrow-all:before{content:"\F041"}.mdi-arrow-bottom-left:before{content:"\F042"}.mdi-arrow-bottom-left-bold-outline:before{content:"\F9B6"}.mdi-arrow-bottom-left-thick:before{content:"\F9B7"}.mdi-arrow-bottom-right:before{content:"\F043"}.mdi-arrow-bottom-right-bold-outline:before{content:"\F9B8"}.mdi-arrow-bottom-right-thick:before{content:"\F9B9"}.mdi-arrow-collapse:before{content:"\F615"}.mdi-arrow-collapse-all:before{content:"\F044"}.mdi-arrow-collapse-down:before{content:"\F791"}.mdi-arrow-collapse-horizontal:before{content:"\F84B"}.mdi-arrow-collapse-left:before{content:"\F792"}.mdi-arrow-collapse-right:before{content:"\F793"}.mdi-arrow-collapse-up:before{content:"\F794"}.mdi-arrow-collapse-vertical:before{content:"\F84C"}.mdi-arrow-decision:before{content:"\F9BA"}.mdi-arrow-decision-auto:before{content:"\F9BB"}.mdi-arrow-decision-auto-outline:before{content:"\F9BC"}.mdi-arrow-decision-outline:before{content:"\F9BD"}.mdi-arrow-down:before{content:"\F045"}.mdi-arrow-down-bold:before{content:"\F72D"}.mdi-arrow-down-bold-box:before{content:"\F72E"}.mdi-arrow-down-bold-box-outline:before{content:"\F72F"}.mdi-arrow-down-bold-circle:before{content:"\F047"}.mdi-arrow-down-bold-circle-outline:before{content:"\F048"}.mdi-arrow-down-bold-hexagon-outline:before{content:"\F049"}.mdi-arrow-down-bold-outline:before{content:"\F9BE"}.mdi-arrow-down-box:before{content:"\F6BF"}.mdi-arrow-down-circle:before{content:"\FCB7"}.mdi-arrow-down-circle-outline:before{content:"\FCB8"}.mdi-arrow-down-drop-circle:before{content:"\F04A"}.mdi-arrow-down-drop-circle-outline:before{content:"\F04B"}.mdi-arrow-down-thick:before{content:"\F046"}.mdi-arrow-expand:before{content:"\F616"}.mdi-arrow-expand-all:before{content:"\F04C"}.mdi-arrow-expand-down:before{content:"\F795"}.mdi-arrow-expand-horizontal:before{content:"\F84D"}.mdi-arrow-expand-left:before{content:"\F796"}.mdi-arrow-expand-right:before{content:"\F797"}.mdi-arrow-expand-up:before{content:"\F798"}.mdi-arrow-expand-vertical:before{content:"\F84E"}.mdi-arrow-left:before{content:"\F04D"}.mdi-arrow-left-bold:before{content:"\F730"}.mdi-arrow-left-bold-box:before{content:"\F731"}.mdi-arrow-left-bold-box-outline:before{content:"\F732"}.mdi-arrow-left-bold-circle:before{content:"\F04F"}.mdi-arrow-left-bold-circle-outline:before{content:"\F050"}.mdi-arrow-left-bold-hexagon-outline:before{content:"\F051"}.mdi-arrow-left-bold-outline:before{content:"\F9BF"}.mdi-arrow-left-box:before{content:"\F6C0"}.mdi-arrow-left-circle:before{content:"\FCB9"}.mdi-arrow-left-circle-outline:before{content:"\FCBA"}.mdi-arrow-left-drop-circle:before{content:"\F052"}.mdi-arrow-left-drop-circle-outline:before{content:"\F053"}.mdi-arrow-left-right-bold-outline:before{content:"\F9C0"}.mdi-arrow-left-thick:before{content:"\F04E"}.mdi-arrow-right:before{content:"\F054"}.mdi-arrow-right-bold:before{content:"\F733"}.mdi-arrow-right-bold-box:before{content:"\F734"}.mdi-arrow-right-bold-box-outline:before{content:"\F735"}.mdi-arrow-right-bold-circle:before{content:"\F056"}.mdi-arrow-right-bold-circle-outline:before{content:"\F057"}.mdi-arrow-right-bold-hexagon-outline:before{content:"\F058"}.mdi-arrow-right-bold-outline:before{content:"\F9C1"}.mdi-arrow-right-box:before{content:"\F6C1"}.mdi-arrow-right-circle:before{content:"\FCBB"}.mdi-arrow-right-circle-outline:before{content:"\FCBC"}.mdi-arrow-right-drop-circle:before{content:"\F059"}.mdi-arrow-right-drop-circle-outline:before{content:"\F05A"}.mdi-arrow-right-thick:before{content:"\F055"}.mdi-arrow-split-horizontal:before{content:"\F93A"}.mdi-arrow-split-vertical:before{content:"\F93B"}.mdi-arrow-top-left:before{content:"\F05B"}.mdi-arrow-top-left-bold-outline:before{content:"\F9C2"}.mdi-arrow-top-left-thick:before{content:"\F9C3"}.mdi-arrow-top-right:before{content:"\F05C"}.mdi-arrow-top-right-bold-outline:before{content:"\F9C4"}.mdi-arrow-top-right-thick:before{content:"\F9C5"}.mdi-arrow-up:before{content:"\F05D"}.mdi-arrow-up-bold:before{content:"\F736"}.mdi-arrow-up-bold-box:before{content:"\F737"}.mdi-arrow-up-bold-box-outline:before{content:"\F738"}.mdi-arrow-up-bold-circle:before{content:"\F05F"}.mdi-arrow-up-bold-circle-outline:before{content:"\F060"}.mdi-arrow-up-bold-hexagon-outline:before{content:"\F061"}.mdi-arrow-up-bold-outline:before{content:"\F9C6"}.mdi-arrow-up-box:before{content:"\F6C2"}.mdi-arrow-up-circle:before{content:"\FCBD"}.mdi-arrow-up-circle-outline:before{content:"\FCBE"}.mdi-arrow-up-down-bold-outline:before{content:"\F9C7"}.mdi-arrow-up-drop-circle:before{content:"\F062"}.mdi-arrow-up-drop-circle-outline:before{content:"\F063"}.mdi-arrow-up-thick:before{content:"\F05E"}.mdi-artist:before{content:"\F802"}.mdi-artist-outline:before{content:"\FCC5"}.mdi-artstation:before{content:"\FB37"}.mdi-aspect-ratio:before{content:"\FA23"}.mdi-assistant:before{content:"\F064"}.mdi-asterisk:before{content:"\F6C3"}.mdi-at:before{content:"\F065"}.mdi-atlassian:before{content:"\F803"}.mdi-atm:before{content:"\FD23"}.mdi-atom:before{content:"\F767"}.mdi-attachment:before{content:"\F066"}.mdi-audio-video:before{content:"\F93C"}.mdi-audiobook:before{content:"\F067"}.mdi-augmented-reality:before{content:"\F84F"}.mdi-auto-fix:before{content:"\F068"}.mdi-auto-upload:before{content:"\F069"}.mdi-autorenew:before{content:"\F06A"}.mdi-av-timer:before{content:"\F06B"}.mdi-axe:before{content:"\F8C7"}.mdi-axis:before{content:"\FD24"}.mdi-axis-arrow:before{content:"\FD25"}.mdi-axis-arrow-lock:before{content:"\FD26"}.mdi-axis-lock:before{content:"\FD27"}.mdi-axis-x-arrow:before{content:"\FD28"}.mdi-axis-x-arrow-lock:before{content:"\FD29"}.mdi-axis-x-rotate-clockwise:before{content:"\FD2A"}.mdi-axis-x-rotate-counterclockwise:before{content:"\FD2B"}.mdi-axis-x-y-arrow-lock:before{content:"\FD2C"}.mdi-axis-y-arrow:before{content:"\FD2D"}.mdi-axis-y-arrow-lock:before{content:"\FD2E"}.mdi-axis-y-rotate-clockwise:before{content:"\FD2F"}.mdi-axis-y-rotate-counterclockwise:before{content:"\FD30"}.mdi-axis-z-arrow:before{content:"\FD31"}.mdi-axis-z-arrow-lock:before{content:"\FD32"}.mdi-axis-z-rotate-clockwise:before{content:"\FD33"}.mdi-axis-z-rotate-counterclockwise:before{content:"\FD34"}.mdi-azure:before{content:"\F804"}.mdi-babel:before{content:"\FA24"}.mdi-baby:before{content:"\F06C"}.mdi-baby-buggy:before{content:"\F68E"}.mdi-backburger:before{content:"\F06D"}.mdi-backspace:before{content:"\F06E"}.mdi-backspace-outline:before{content:"\FB38"}.mdi-backup-restore:before{content:"\F06F"}.mdi-badminton:before{content:"\F850"}.mdi-balloon:before{content:"\FA25"}.mdi-ballot:before{content:"\F9C8"}.mdi-ballot-outline:before{content:"\F9C9"}.mdi-ballot-recount:before{content:"\FC15"}.mdi-ballot-recount-outline:before{content:"\FC16"}.mdi-bandage:before{content:"\FD8B"}.mdi-bandcamp:before{content:"\F674"}.mdi-bank:before{content:"\F070"}.mdi-bank-minus:before{content:"\FD8C"}.mdi-bank-plus:before{content:"\FD8D"}.mdi-bank-remove:before{content:"\FD8E"}.mdi-bank-transfer:before{content:"\FA26"}.mdi-bank-transfer-in:before{content:"\FA27"}.mdi-bank-transfer-out:before{content:"\FA28"}.mdi-barcode:before{content:"\F071"}.mdi-barcode-scan:before{content:"\F072"}.mdi-barley:before{content:"\F073"}.mdi-barley-off:before{content:"\FB39"}.mdi-barn:before{content:"\FB3A"}.mdi-barrel:before{content:"\F074"}.mdi-baseball:before{content:"\F851"}.mdi-baseball-bat:before{content:"\F852"}.mdi-basecamp:before{content:"\F075"}.mdi-basket:before{content:"\F076"}.mdi-basket-fill:before{content:"\F077"}.mdi-basket-unfill:before{content:"\F078"}.mdi-basketball:before{content:"\F805"}.mdi-basketball-hoop:before{content:"\FC17"}.mdi-basketball-hoop-outline:before{content:"\FC18"}.mdi-bat:before{content:"\FB3B"}.mdi-battery:before{content:"\F079"}.mdi-battery-10:before{content:"\F07A"}.mdi-battery-10-bluetooth:before{content:"\F93D"}.mdi-battery-20:before{content:"\F07B"}.mdi-battery-20-bluetooth:before{content:"\F93E"}.mdi-battery-30:before{content:"\F07C"}.mdi-battery-30-bluetooth:before{content:"\F93F"}.mdi-battery-40:before{content:"\F07D"}.mdi-battery-40-bluetooth:before{content:"\F940"}.mdi-battery-50:before{content:"\F07E"}.mdi-battery-50-bluetooth:before{content:"\F941"}.mdi-battery-60:before{content:"\F07F"}.mdi-battery-60-bluetooth:before{content:"\F942"}.mdi-battery-70:before{content:"\F080"}.mdi-battery-70-bluetooth:before{content:"\F943"}.mdi-battery-80:before{content:"\F081"}.mdi-battery-80-bluetooth:before{content:"\F944"}.mdi-battery-90:before{content:"\F082"}.mdi-battery-90-bluetooth:before{content:"\F945"}.mdi-battery-alert:before{content:"\F083"}.mdi-battery-alert-bluetooth:before{content:"\F946"}.mdi-battery-bluetooth:before{content:"\F947"}.mdi-battery-bluetooth-variant:before{content:"\F948"}.mdi-battery-charging:before{content:"\F084"}.mdi-battery-charging-10:before{content:"\F89B"}.mdi-battery-charging-100:before{content:"\F085"}.mdi-battery-charging-20:before{content:"\F086"}.mdi-battery-charging-30:before{content:"\F087"}.mdi-battery-charging-40:before{content:"\F088"}.mdi-battery-charging-50:before{content:"\F89C"}.mdi-battery-charging-60:before{content:"\F089"}.mdi-battery-charging-70:before{content:"\F89D"}.mdi-battery-charging-80:before{content:"\F08A"}.mdi-battery-charging-90:before{content:"\F08B"}.mdi-battery-charging-outline:before{content:"\F89E"}.mdi-battery-charging-wireless:before{content:"\F806"}.mdi-battery-charging-wireless-10:before{content:"\F807"}.mdi-battery-charging-wireless-20:before{content:"\F808"}.mdi-battery-charging-wireless-30:before{content:"\F809"}.mdi-battery-charging-wireless-40:before{content:"\F80A"}.mdi-battery-charging-wireless-50:before{content:"\F80B"}.mdi-battery-charging-wireless-60:before{content:"\F80C"}.mdi-battery-charging-wireless-70:before{content:"\F80D"}.mdi-battery-charging-wireless-80:before{content:"\F80E"}.mdi-battery-charging-wireless-90:before{content:"\F80F"}.mdi-battery-charging-wireless-alert:before{content:"\F810"}.mdi-battery-charging-wireless-outline:before{content:"\F811"}.mdi-battery-minus:before{content:"\F08C"}.mdi-battery-negative:before{content:"\F08D"}.mdi-battery-outline:before{content:"\F08E"}.mdi-battery-plus:before{content:"\F08F"}.mdi-battery-positive:before{content:"\F090"}.mdi-battery-unknown:before{content:"\F091"}.mdi-battery-unknown-bluetooth:before{content:"\F949"}.mdi-battlenet:before{content:"\FB3C"}.mdi-beach:before{content:"\F092"}.mdi-beaker:before{content:"\FCC6"}.mdi-beaker-outline:before{content:"\F68F"}.mdi-beats:before{content:"\F097"}.mdi-bed-empty:before{content:"\F89F"}.mdi-beer:before{content:"\F098"}.mdi-behance:before{content:"\F099"}.mdi-bell:before{content:"\F09A"}.mdi-bell-alert:before{content:"\FD35"}.mdi-bell-circle:before{content:"\FD36"}.mdi-bell-circle-outline:before{content:"\FD37"}.mdi-bell-off:before{content:"\F09B"}.mdi-bell-off-outline:before{content:"\FA90"}.mdi-bell-outline:before{content:"\F09C"}.mdi-bell-plus:before{content:"\F09D"}.mdi-bell-plus-outline:before{content:"\FA91"}.mdi-bell-ring:before{content:"\F09E"}.mdi-bell-ring-outline:before{content:"\F09F"}.mdi-bell-sleep:before{content:"\F0A0"}.mdi-bell-sleep-outline:before{content:"\FA92"}.mdi-beta:before{content:"\F0A1"}.mdi-betamax:before{content:"\F9CA"}.mdi-bible:before{content:"\F0A2"}.mdi-bike:before{content:"\F0A3"}.mdi-billiards:before{content:"\FB3D"}.mdi-billiards-rack:before{content:"\FB3E"}.mdi-bing:before{content:"\F0A4"}.mdi-binoculars:before{content:"\F0A5"}.mdi-bio:before{content:"\F0A6"}.mdi-biohazard:before{content:"\F0A7"}.mdi-bitbucket:before{content:"\F0A8"}.mdi-bitcoin:before{content:"\F812"}.mdi-black-mesa:before{content:"\F0A9"}.mdi-blackberry:before{content:"\F0AA"}.mdi-blender:before{content:"\FCC7"}.mdi-blender-software:before{content:"\F0AB"}.mdi-blinds:before{content:"\F0AC"}.mdi-block-helper:before{content:"\F0AD"}.mdi-blogger:before{content:"\F0AE"}.mdi-blood-bag:before{content:"\FCC8"}.mdi-bluetooth:before{content:"\F0AF"}.mdi-bluetooth-audio:before{content:"\F0B0"}.mdi-bluetooth-connect:before{content:"\F0B1"}.mdi-bluetooth-off:before{content:"\F0B2"}.mdi-bluetooth-settings:before{content:"\F0B3"}.mdi-bluetooth-transfer:before{content:"\F0B4"}.mdi-blur:before{content:"\F0B5"}.mdi-blur-linear:before{content:"\F0B6"}.mdi-blur-off:before{content:"\F0B7"}.mdi-blur-radial:before{content:"\F0B8"}.mdi-bolnisi-cross:before{content:"\FCC9"}.mdi-bolt:before{content:"\FD8F"}.mdi-bomb:before{content:"\F690"}.mdi-bomb-off:before{content:"\F6C4"}.mdi-bone:before{content:"\F0B9"}.mdi-book:before{content:"\F0BA"}.mdi-book-lock:before{content:"\F799"}.mdi-book-lock-open:before{content:"\F79A"}.mdi-book-minus:before{content:"\F5D9"}.mdi-book-multiple:before{content:"\F0BB"}.mdi-book-multiple-minus:before{content:"\FA93"}.mdi-book-multiple-plus:before{content:"\FA94"}.mdi-book-multiple-remove:before{content:"\FA95"}.mdi-book-multiple-variant:before{content:"\F0BC"}.mdi-book-open:before{content:"\F0BD"}.mdi-book-open-outline:before{content:"\FB3F"}.mdi-book-open-page-variant:before{content:"\F5DA"}.mdi-book-open-variant:before{content:"\F0BE"}.mdi-book-outline:before{content:"\FB40"}.mdi-book-plus:before{content:"\F5DB"}.mdi-book-remove:before{content:"\FA96"}.mdi-book-variant:before{content:"\F0BF"}.mdi-bookmark:before{content:"\F0C0"}.mdi-bookmark-check:before{content:"\F0C1"}.mdi-bookmark-minus:before{content:"\F9CB"}.mdi-bookmark-minus-outline:before{content:"\F9CC"}.mdi-bookmark-music:before{content:"\F0C2"}.mdi-bookmark-off:before{content:"\F9CD"}.mdi-bookmark-off-outline:before{content:"\F9CE"}.mdi-bookmark-outline:before{content:"\F0C3"}.mdi-bookmark-plus:before{content:"\F0C5"}.mdi-bookmark-plus-outline:before{content:"\F0C4"}.mdi-bookmark-remove:before{content:"\F0C6"}.mdi-boombox:before{content:"\F5DC"}.mdi-bootstrap:before{content:"\F6C5"}.mdi-border-all:before{content:"\F0C7"}.mdi-border-all-variant:before{content:"\F8A0"}.mdi-border-bottom:before{content:"\F0C8"}.mdi-border-bottom-variant:before{content:"\F8A1"}.mdi-border-color:before{content:"\F0C9"}.mdi-border-horizontal:before{content:"\F0CA"}.mdi-border-inside:before{content:"\F0CB"}.mdi-border-left:before{content:"\F0CC"}.mdi-border-left-variant:before{content:"\F8A2"}.mdi-border-none:before{content:"\F0CD"}.mdi-border-none-variant:before{content:"\F8A3"}.mdi-border-outside:before{content:"\F0CE"}.mdi-border-right:before{content:"\F0CF"}.mdi-border-right-variant:before{content:"\F8A4"}.mdi-border-style:before{content:"\F0D0"}.mdi-border-top:before{content:"\F0D1"}.mdi-border-top-variant:before{content:"\F8A5"}.mdi-border-vertical:before{content:"\F0D2"}.mdi-bottle-wine:before{content:"\F853"}.mdi-bow-tie:before{content:"\F677"}.mdi-bowl:before{content:"\F617"}.mdi-bowling:before{content:"\F0D3"}.mdi-box:before{content:"\F0D4"}.mdi-box-cutter:before{content:"\F0D5"}.mdi-box-shadow:before{content:"\F637"}.mdi-boxing-glove:before{content:"\FB41"}.mdi-braille:before{content:"\F9CF"}.mdi-brain:before{content:"\F9D0"}.mdi-bread-slice:before{content:"\FCCA"}.mdi-bread-slice-outline:before{content:"\FCCB"}.mdi-bridge:before{content:"\F618"}.mdi-briefcase:before{content:"\F0D6"}.mdi-briefcase-account:before{content:"\FCCC"}.mdi-briefcase-account-outline:before{content:"\FCCD"}.mdi-briefcase-check:before{content:"\F0D7"}.mdi-briefcase-download:before{content:"\F0D8"}.mdi-briefcase-download-outline:before{content:"\FC19"}.mdi-briefcase-edit:before{content:"\FA97"}.mdi-briefcase-edit-outline:before{content:"\FC1A"}.mdi-briefcase-minus:before{content:"\FA29"}.mdi-briefcase-minus-outline:before{content:"\FC1B"}.mdi-briefcase-outline:before{content:"\F813"}.mdi-briefcase-plus:before{content:"\FA2A"}.mdi-briefcase-plus-outline:before{content:"\FC1C"}.mdi-briefcase-remove:before{content:"\FA2B"}.mdi-briefcase-remove-outline:before{content:"\FC1D"}.mdi-briefcase-search:before{content:"\FA2C"}.mdi-briefcase-search-outline:before{content:"\FC1E"}.mdi-briefcase-upload:before{content:"\F0D9"}.mdi-briefcase-upload-outline:before{content:"\FC1F"}.mdi-brightness-1:before{content:"\F0DA"}.mdi-brightness-2:before{content:"\F0DB"}.mdi-brightness-3:before{content:"\F0DC"}.mdi-brightness-4:before{content:"\F0DD"}.mdi-brightness-5:before{content:"\F0DE"}.mdi-brightness-6:before{content:"\F0DF"}.mdi-brightness-7:before{content:"\F0E0"}.mdi-brightness-auto:before{content:"\F0E1"}.mdi-brightness-percent:before{content:"\FCCE"}.mdi-broom:before{content:"\F0E2"}.mdi-brush:before{content:"\F0E3"}.mdi-buddhism:before{content:"\F94A"}.mdi-buffer:before{content:"\F619"}.mdi-bug:before{content:"\F0E4"}.mdi-bug-check:before{content:"\FA2D"}.mdi-bug-check-outline:before{content:"\FA2E"}.mdi-bug-outline:before{content:"\FA2F"}.mdi-bugle:before{content:"\FD90"}.mdi-bulldozer:before{content:"\FB07"}.mdi-bullet:before{content:"\FCCF"}.mdi-bulletin-board:before{content:"\F0E5"}.mdi-bullhorn:before{content:"\F0E6"}.mdi-bullhorn-outline:before{content:"\FB08"}.mdi-bullseye:before{content:"\F5DD"}.mdi-bullseye-arrow:before{content:"\F8C8"}.mdi-bus:before{content:"\F0E7"}.mdi-bus-alert:before{content:"\FA98"}.mdi-bus-articulated-end:before{content:"\F79B"}.mdi-bus-articulated-front:before{content:"\F79C"}.mdi-bus-clock:before{content:"\F8C9"}.mdi-bus-double-decker:before{content:"\F79D"}.mdi-bus-school:before{content:"\F79E"}.mdi-bus-side:before{content:"\F79F"}.mdi-cached:before{content:"\F0E8"}.mdi-cactus:before{content:"\FD91"}.mdi-cake:before{content:"\F0E9"}.mdi-cake-layered:before{content:"\F0EA"}.mdi-cake-variant:before{content:"\F0EB"}.mdi-calculator:before{content:"\F0EC"}.mdi-calculator-variant:before{content:"\FA99"}.mdi-calendar:before{content:"\F0ED"}.mdi-calendar-alert:before{content:"\FA30"}.mdi-calendar-blank:before{content:"\F0EE"}.mdi-calendar-blank-outline:before{content:"\FB42"}.mdi-calendar-check:before{content:"\F0EF"}.mdi-calendar-check-outline:before{content:"\FC20"}.mdi-calendar-clock:before{content:"\F0F0"}.mdi-calendar-edit:before{content:"\F8A6"}.mdi-calendar-export:before{content:"\FB09"}.mdi-calendar-heart:before{content:"\F9D1"}.mdi-calendar-import:before{content:"\FB0A"}.mdi-calendar-minus:before{content:"\FD38"}.mdi-calendar-multiple:before{content:"\F0F1"}.mdi-calendar-multiple-check:before{content:"\F0F2"}.mdi-calendar-multiselect:before{content:"\FA31"}.mdi-calendar-outline:before{content:"\FB43"}.mdi-calendar-plus:before{content:"\F0F3"}.mdi-calendar-question:before{content:"\F691"}.mdi-calendar-range:before{content:"\F678"}.mdi-calendar-range-outline:before{content:"\FB44"}.mdi-calendar-remove:before{content:"\F0F4"}.mdi-calendar-remove-outline:before{content:"\FC21"}.mdi-calendar-search:before{content:"\F94B"}.mdi-calendar-star:before{content:"\F9D2"}.mdi-calendar-text:before{content:"\F0F5"}.mdi-calendar-text-outline:before{content:"\FC22"}.mdi-calendar-today:before{content:"\F0F6"}.mdi-calendar-week:before{content:"\FA32"}.mdi-calendar-week-begin:before{content:"\FA33"}.mdi-call-made:before{content:"\F0F7"}.mdi-call-merge:before{content:"\F0F8"}.mdi-call-missed:before{content:"\F0F9"}.mdi-call-received:before{content:"\F0FA"}.mdi-call-split:before{content:"\F0FB"}.mdi-camcorder:before{content:"\F0FC"}.mdi-camcorder-box:before{content:"\F0FD"}.mdi-camcorder-box-off:before{content:"\F0FE"}.mdi-camcorder-off:before{content:"\F0FF"}.mdi-camera:before{content:"\F100"}.mdi-camera-account:before{content:"\F8CA"}.mdi-camera-burst:before{content:"\F692"}.mdi-camera-control:before{content:"\FB45"}.mdi-camera-enhance:before{content:"\F101"}.mdi-camera-enhance-outline:before{content:"\FB46"}.mdi-camera-front:before{content:"\F102"}.mdi-camera-front-variant:before{content:"\F103"}.mdi-camera-gopro:before{content:"\F7A0"}.mdi-camera-image:before{content:"\F8CB"}.mdi-camera-iris:before{content:"\F104"}.mdi-camera-metering-center:before{content:"\F7A1"}.mdi-camera-metering-matrix:before{content:"\F7A2"}.mdi-camera-metering-partial:before{content:"\F7A3"}.mdi-camera-metering-spot:before{content:"\F7A4"}.mdi-camera-off:before{content:"\F5DF"}.mdi-camera-outline:before{content:"\FD39"}.mdi-camera-party-mode:before{content:"\F105"}.mdi-camera-rear:before{content:"\F106"}.mdi-camera-rear-variant:before{content:"\F107"}.mdi-camera-switch:before{content:"\F108"}.mdi-camera-timer:before{content:"\F109"}.mdi-camera-wireless:before{content:"\FD92"}.mdi-camera-wireless-outline:before{content:"\FD93"}.mdi-cancel:before{content:"\F739"}.mdi-candle:before{content:"\F5E2"}.mdi-candycane:before{content:"\F10A"}.mdi-cannabis:before{content:"\F7A5"}.mdi-caps-lock:before{content:"\FA9A"}.mdi-car:before{content:"\F10B"}.mdi-car-battery:before{content:"\F10C"}.mdi-car-brake-abs:before{content:"\FC23"}.mdi-car-brake-alert:before{content:"\FC24"}.mdi-car-brake-hold:before{content:"\FD3A"}.mdi-car-brake-parking:before{content:"\FD3B"}.mdi-car-connected:before{content:"\F10D"}.mdi-car-convertible:before{content:"\F7A6"}.mdi-car-cruise-control:before{content:"\FD3C"}.mdi-car-defrost-front:before{content:"\FD3D"}.mdi-car-defrost-rear:before{content:"\FD3E"}.mdi-car-door:before{content:"\FB47"}.mdi-car-electric:before{content:"\FB48"}.mdi-car-esp:before{content:"\FC25"}.mdi-car-estate:before{content:"\F7A7"}.mdi-car-hatchback:before{content:"\F7A8"}.mdi-car-key:before{content:"\FB49"}.mdi-car-light-dimmed:before{content:"\FC26"}.mdi-car-light-fog:before{content:"\FC27"}.mdi-car-light-high:before{content:"\FC28"}.mdi-car-limousine:before{content:"\F8CC"}.mdi-car-multiple:before{content:"\FB4A"}.mdi-car-parking-lights:before{content:"\FD3F"}.mdi-car-pickup:before{content:"\F7A9"}.mdi-car-side:before{content:"\F7AA"}.mdi-car-sports:before{content:"\F7AB"}.mdi-car-tire-alert:before{content:"\FC29"}.mdi-car-traction-control:before{content:"\FD40"}.mdi-car-wash:before{content:"\F10E"}.mdi-caravan:before{content:"\F7AC"}.mdi-card:before{content:"\FB4B"}.mdi-card-bulleted:before{content:"\FB4C"}.mdi-card-bulleted-off:before{content:"\FB4D"}.mdi-card-bulleted-off-outline:before{content:"\FB4E"}.mdi-card-bulleted-outline:before{content:"\FB4F"}.mdi-card-bulleted-settings:before{content:"\FB50"}.mdi-card-bulleted-settings-outline:before{content:"\FB51"}.mdi-card-outline:before{content:"\FB52"}.mdi-card-text:before{content:"\FB53"}.mdi-card-text-outline:before{content:"\FB54"}.mdi-cards:before{content:"\F638"}.mdi-cards-club:before{content:"\F8CD"}.mdi-cards-diamond:before{content:"\F8CE"}.mdi-cards-heart:before{content:"\F8CF"}.mdi-cards-outline:before{content:"\F639"}.mdi-cards-playing-outline:before{content:"\F63A"}.mdi-cards-spade:before{content:"\F8D0"}.mdi-cards-variant:before{content:"\F6C6"}.mdi-carrot:before{content:"\F10F"}.mdi-carry-on-bag-check:before{content:"\FD41"}.mdi-cart:before{content:"\F110"}.mdi-cart-arrow-down:before{content:"\FD42"}.mdi-cart-arrow-right:before{content:"\FC2A"}.mdi-cart-arrow-up:before{content:"\FD43"}.mdi-cart-minus:before{content:"\FD44"}.mdi-cart-off:before{content:"\F66B"}.mdi-cart-outline:before{content:"\F111"}.mdi-cart-plus:before{content:"\F112"}.mdi-cart-remove:before{content:"\FD45"}.mdi-case-sensitive-alt:before{content:"\F113"}.mdi-cash:before{content:"\F114"}.mdi-cash-100:before{content:"\F115"}.mdi-cash-marker:before{content:"\FD94"}.mdi-cash-multiple:before{content:"\F116"}.mdi-cash-refund:before{content:"\FA9B"}.mdi-cash-register:before{content:"\FCD0"}.mdi-cash-usd:before{content:"\F117"}.mdi-cassette:before{content:"\F9D3"}.mdi-cast:before{content:"\F118"}.mdi-cast-connected:before{content:"\F119"}.mdi-cast-off:before{content:"\F789"}.mdi-castle:before{content:"\F11A"}.mdi-cat:before{content:"\F11B"}.mdi-cctv:before{content:"\F7AD"}.mdi-ceiling-light:before{content:"\F768"}.mdi-cellphone:before{content:"\F11C"}.mdi-cellphone-android:before{content:"\F11D"}.mdi-cellphone-arrow-down:before{content:"\F9D4"}.mdi-cellphone-basic:before{content:"\F11E"}.mdi-cellphone-dock:before{content:"\F11F"}.mdi-cellphone-erase:before{content:"\F94C"}.mdi-cellphone-iphone:before{content:"\F120"}.mdi-cellphone-key:before{content:"\F94D"}.mdi-cellphone-link:before{content:"\F121"}.mdi-cellphone-link-off:before{content:"\F122"}.mdi-cellphone-lock:before{content:"\F94E"}.mdi-cellphone-message:before{content:"\F8D2"}.mdi-cellphone-off:before{content:"\F94F"}.mdi-cellphone-screenshot:before{content:"\FA34"}.mdi-cellphone-settings:before{content:"\F123"}.mdi-cellphone-settings-variant:before{content:"\F950"}.mdi-cellphone-sound:before{content:"\F951"}.mdi-cellphone-text:before{content:"\F8D1"}.mdi-cellphone-wireless:before{content:"\F814"}.mdi-celtic-cross:before{content:"\FCD1"}.mdi-certificate:before{content:"\F124"}.mdi-chair-school:before{content:"\F125"}.mdi-charity:before{content:"\FC2B"}.mdi-chart-arc:before{content:"\F126"}.mdi-chart-areaspline:before{content:"\F127"}.mdi-chart-bar:before{content:"\F128"}.mdi-chart-bar-stacked:before{content:"\F769"}.mdi-chart-bell-curve:before{content:"\FC2C"}.mdi-chart-bubble:before{content:"\F5E3"}.mdi-chart-donut:before{content:"\F7AE"}.mdi-chart-donut-variant:before{content:"\F7AF"}.mdi-chart-gantt:before{content:"\F66C"}.mdi-chart-histogram:before{content:"\F129"}.mdi-chart-line:before{content:"\F12A"}.mdi-chart-line-stacked:before{content:"\F76A"}.mdi-chart-line-variant:before{content:"\F7B0"}.mdi-chart-multiline:before{content:"\F8D3"}.mdi-chart-pie:before{content:"\F12B"}.mdi-chart-scatterplot-hexbin:before{content:"\F66D"}.mdi-chart-timeline:before{content:"\F66E"}.mdi-chat:before{content:"\FB55"}.mdi-chat-alert:before{content:"\FB56"}.mdi-chat-processing:before{content:"\FB57"}.mdi-check:before{content:"\F12C"}.mdi-check-all:before{content:"\F12D"}.mdi-check-box-multiple-outline:before{content:"\FC2D"}.mdi-check-box-outline:before{content:"\FC2E"}.mdi-check-circle:before{content:"\F5E0"}.mdi-check-circle-outline:before{content:"\F5E1"}.mdi-check-decagram:before{content:"\F790"}.mdi-check-network:before{content:"\FC2F"}.mdi-check-network-outline:before{content:"\FC30"}.mdi-check-outline:before{content:"\F854"}.mdi-checkbook:before{content:"\FA9C"}.mdi-checkbox-blank:before{content:"\F12E"}.mdi-checkbox-blank-circle:before{content:"\F12F"}.mdi-checkbox-blank-circle-outline:before{content:"\F130"}.mdi-checkbox-blank-outline:before{content:"\F131"}.mdi-checkbox-intermediate:before{content:"\F855"}.mdi-checkbox-marked:before{content:"\F132"}.mdi-checkbox-marked-circle:before{content:"\F133"}.mdi-checkbox-marked-circle-outline:before{content:"\F134"}.mdi-checkbox-marked-outline:before{content:"\F135"}.mdi-checkbox-multiple-blank:before{content:"\F136"}.mdi-checkbox-multiple-blank-circle:before{content:"\F63B"}.mdi-checkbox-multiple-blank-circle-outline:before{content:"\F63C"}.mdi-checkbox-multiple-blank-outline:before{content:"\F137"}.mdi-checkbox-multiple-marked:before{content:"\F138"}.mdi-checkbox-multiple-marked-circle:before{content:"\F63D"}.mdi-checkbox-multiple-marked-circle-outline:before{content:"\F63E"}.mdi-checkbox-multiple-marked-outline:before{content:"\F139"}.mdi-checkerboard:before{content:"\F13A"}.mdi-chef-hat:before{content:"\FB58"}.mdi-chemical-weapon:before{content:"\F13B"}.mdi-chess-bishop:before{content:"\F85B"}.mdi-chess-king:before{content:"\F856"}.mdi-chess-knight:before{content:"\F857"}.mdi-chess-pawn:before{content:"\F858"}.mdi-chess-queen:before{content:"\F859"}.mdi-chess-rook:before{content:"\F85A"}.mdi-chevron-double-down:before{content:"\F13C"}.mdi-chevron-double-left:before{content:"\F13D"}.mdi-chevron-double-right:before{content:"\F13E"}.mdi-chevron-double-up:before{content:"\F13F"}.mdi-chevron-down:before{content:"\F140"}.mdi-chevron-down-box:before{content:"\F9D5"}.mdi-chevron-down-box-outline:before{content:"\F9D6"}.mdi-chevron-down-circle:before{content:"\FB0B"}.mdi-chevron-down-circle-outline:before{content:"\FB0C"}.mdi-chevron-left:before{content:"\F141"}.mdi-chevron-left-box:before{content:"\F9D7"}.mdi-chevron-left-box-outline:before{content:"\F9D8"}.mdi-chevron-left-circle:before{content:"\FB0D"}.mdi-chevron-left-circle-outline:before{content:"\FB0E"}.mdi-chevron-right:before{content:"\F142"}.mdi-chevron-right-box:before{content:"\F9D9"}.mdi-chevron-right-box-outline:before{content:"\F9DA"}.mdi-chevron-right-circle:before{content:"\FB0F"}.mdi-chevron-right-circle-outline:before{content:"\FB10"}.mdi-chevron-triple-down:before{content:"\FD95"}.mdi-chevron-triple-left:before{content:"\FD96"}.mdi-chevron-triple-right:before{content:"\FD97"}.mdi-chevron-triple-up:before{content:"\FD98"}.mdi-chevron-up:before{content:"\F143"}.mdi-chevron-up-box:before{content:"\F9DB"}.mdi-chevron-up-box-outline:before{content:"\F9DC"}.mdi-chevron-up-circle:before{content:"\FB11"}.mdi-chevron-up-circle-outline:before{content:"\FB12"}.mdi-chili-hot:before{content:"\F7B1"}.mdi-chili-medium:before{content:"\F7B2"}.mdi-chili-mild:before{content:"\F7B3"}.mdi-chip:before{content:"\F61A"}.mdi-christianity:before{content:"\F952"}.mdi-christianity-outline:before{content:"\FCD2"}.mdi-church:before{content:"\F144"}.mdi-circle:before{content:"\F764"}.mdi-circle-edit-outline:before{content:"\F8D4"}.mdi-circle-medium:before{content:"\F9DD"}.mdi-circle-outline:before{content:"\F765"}.mdi-circle-slice-1:before{content:"\FA9D"}.mdi-circle-slice-2:before{content:"\FA9E"}.mdi-circle-slice-3:before{content:"\FA9F"}.mdi-circle-slice-4:before{content:"\FAA0"}.mdi-circle-slice-5:before{content:"\FAA1"}.mdi-circle-slice-6:before{content:"\FAA2"}.mdi-circle-slice-7:before{content:"\FAA3"}.mdi-circle-slice-8:before{content:"\FAA4"}.mdi-circle-small:before{content:"\F9DE"}.mdi-cisco-webex:before{content:"\F145"}.mdi-city:before{content:"\F146"}.mdi-city-variant:before{content:"\FA35"}.mdi-city-variant-outline:before{content:"\FA36"}.mdi-clipboard:before{content:"\F147"}.mdi-clipboard-account:before{content:"\F148"}.mdi-clipboard-account-outline:before{content:"\FC31"}.mdi-clipboard-alert:before{content:"\F149"}.mdi-clipboard-alert-outline:before{content:"\FCD3"}.mdi-clipboard-arrow-down:before{content:"\F14A"}.mdi-clipboard-arrow-down-outline:before{content:"\FC32"}.mdi-clipboard-arrow-left:before{content:"\F14B"}.mdi-clipboard-arrow-left-outline:before{content:"\FCD4"}.mdi-clipboard-arrow-right:before{content:"\FCD5"}.mdi-clipboard-arrow-right-outline:before{content:"\FCD6"}.mdi-clipboard-arrow-up:before{content:"\FC33"}.mdi-clipboard-arrow-up-outline:before{content:"\FC34"}.mdi-clipboard-check:before{content:"\F14C"}.mdi-clipboard-check-outline:before{content:"\F8A7"}.mdi-clipboard-flow:before{content:"\F6C7"}.mdi-clipboard-outline:before{content:"\F14D"}.mdi-clipboard-play:before{content:"\FC35"}.mdi-clipboard-play-outline:before{content:"\FC36"}.mdi-clipboard-plus:before{content:"\F750"}.mdi-clipboard-pulse:before{content:"\F85C"}.mdi-clipboard-pulse-outline:before{content:"\F85D"}.mdi-clipboard-text:before{content:"\F14E"}.mdi-clipboard-text-outline:before{content:"\FA37"}.mdi-clipboard-text-play:before{content:"\FC37"}.mdi-clipboard-text-play-outline:before{content:"\FC38"}.mdi-clippy:before{content:"\F14F"}.mdi-clock:before{content:"\F953"}.mdi-clock-alert:before{content:"\F954"}.mdi-clock-alert-outline:before{content:"\F5CE"}.mdi-clock-end:before{content:"\F151"}.mdi-clock-fast:before{content:"\F152"}.mdi-clock-in:before{content:"\F153"}.mdi-clock-out:before{content:"\F154"}.mdi-clock-outline:before{content:"\F150"}.mdi-clock-start:before{content:"\F155"}.mdi-close:before{content:"\F156"}.mdi-close-box:before{content:"\F157"}.mdi-close-box-multiple:before{content:"\FC39"}.mdi-close-box-multiple-outline:before{content:"\FC3A"}.mdi-close-box-outline:before{content:"\F158"}.mdi-close-circle:before{content:"\F159"}.mdi-close-circle-outline:before{content:"\F15A"}.mdi-close-network:before{content:"\F15B"}.mdi-close-network-outline:before{content:"\FC3B"}.mdi-close-octagon:before{content:"\F15C"}.mdi-close-octagon-outline:before{content:"\F15D"}.mdi-close-outline:before{content:"\F6C8"}.mdi-closed-caption:before{content:"\F15E"}.mdi-closed-caption-outline:before{content:"\FD99"}.mdi-cloud:before{content:"\F15F"}.mdi-cloud-alert:before{content:"\F9DF"}.mdi-cloud-braces:before{content:"\F7B4"}.mdi-cloud-check:before{content:"\F160"}.mdi-cloud-circle:before{content:"\F161"}.mdi-cloud-download:before{content:"\F162"}.mdi-cloud-download-outline:before{content:"\FB59"}.mdi-cloud-off-outline:before{content:"\F164"}.mdi-cloud-outline:before{content:"\F163"}.mdi-cloud-print:before{content:"\F165"}.mdi-cloud-print-outline:before{content:"\F166"}.mdi-cloud-question:before{content:"\FA38"}.mdi-cloud-search:before{content:"\F955"}.mdi-cloud-search-outline:before{content:"\F956"}.mdi-cloud-sync:before{content:"\F63F"}.mdi-cloud-tags:before{content:"\F7B5"}.mdi-cloud-upload:before{content:"\F167"}.mdi-cloud-upload-outline:before{content:"\FB5A"}.mdi-clover:before{content:"\F815"}.mdi-code-array:before{content:"\F168"}.mdi-code-braces:before{content:"\F169"}.mdi-code-brackets:before{content:"\F16A"}.mdi-code-equal:before{content:"\F16B"}.mdi-code-greater-than:before{content:"\F16C"}.mdi-code-greater-than-or-equal:before{content:"\F16D"}.mdi-code-less-than:before{content:"\F16E"}.mdi-code-less-than-or-equal:before{content:"\F16F"}.mdi-code-not-equal:before{content:"\F170"}.mdi-code-not-equal-variant:before{content:"\F171"}.mdi-code-parentheses:before{content:"\F172"}.mdi-code-string:before{content:"\F173"}.mdi-code-tags:before{content:"\F174"}.mdi-code-tags-check:before{content:"\F693"}.mdi-codepen:before{content:"\F175"}.mdi-coffee:before{content:"\F176"}.mdi-coffee-outline:before{content:"\F6C9"}.mdi-coffee-to-go:before{content:"\F177"}.mdi-coffin:before{content:"\FB5B"}.mdi-cogs:before{content:"\F8D5"}.mdi-coin:before{content:"\F178"}.mdi-coins:before{content:"\F694"}.mdi-collage:before{content:"\F640"}.mdi-collapse-all:before{content:"\FAA5"}.mdi-collapse-all-outline:before{content:"\FAA6"}.mdi-color-helper:before{content:"\F179"}.mdi-comment:before{content:"\F17A"}.mdi-comment-account:before{content:"\F17B"}.mdi-comment-account-outline:before{content:"\F17C"}.mdi-comment-alert:before{content:"\F17D"}.mdi-comment-alert-outline:before{content:"\F17E"}.mdi-comment-arrow-left:before{content:"\F9E0"}.mdi-comment-arrow-left-outline:before{content:"\F9E1"}.mdi-comment-arrow-right:before{content:"\F9E2"}.mdi-comment-arrow-right-outline:before{content:"\F9E3"}.mdi-comment-check:before{content:"\F17F"}.mdi-comment-check-outline:before{content:"\F180"}.mdi-comment-eye:before{content:"\FA39"}.mdi-comment-eye-outline:before{content:"\FA3A"}.mdi-comment-multiple:before{content:"\F85E"}.mdi-comment-multiple-outline:before{content:"\F181"}.mdi-comment-outline:before{content:"\F182"}.mdi-comment-plus:before{content:"\F9E4"}.mdi-comment-plus-outline:before{content:"\F183"}.mdi-comment-processing:before{content:"\F184"}.mdi-comment-processing-outline:before{content:"\F185"}.mdi-comment-question:before{content:"\F816"}.mdi-comment-question-outline:before{content:"\F186"}.mdi-comment-remove:before{content:"\F5DE"}.mdi-comment-remove-outline:before{content:"\F187"}.mdi-comment-search:before{content:"\FA3B"}.mdi-comment-search-outline:before{content:"\FA3C"}.mdi-comment-text:before{content:"\F188"}.mdi-comment-text-multiple:before{content:"\F85F"}.mdi-comment-text-multiple-outline:before{content:"\F860"}.mdi-comment-text-outline:before{content:"\F189"}.mdi-compare:before{content:"\F18A"}.mdi-compass:before{content:"\F18B"}.mdi-compass-off:before{content:"\FB5C"}.mdi-compass-off-outline:before{content:"\FB5D"}.mdi-compass-outline:before{content:"\F18C"}.mdi-console:before{content:"\F18D"}.mdi-console-line:before{content:"\F7B6"}.mdi-console-network:before{content:"\F8A8"}.mdi-console-network-outline:before{content:"\FC3C"}.mdi-contact-mail:before{content:"\F18E"}.mdi-contactless-payment:before{content:"\FD46"}.mdi-contacts:before{content:"\F6CA"}.mdi-contain:before{content:"\FA3D"}.mdi-contain-end:before{content:"\FA3E"}.mdi-contain-start:before{content:"\FA3F"}.mdi-content-copy:before{content:"\F18F"}.mdi-content-cut:before{content:"\F190"}.mdi-content-duplicate:before{content:"\F191"}.mdi-content-paste:before{content:"\F192"}.mdi-content-save:before{content:"\F193"}.mdi-content-save-all:before{content:"\F194"}.mdi-content-save-edit:before{content:"\FCD7"}.mdi-content-save-edit-outline:before{content:"\FCD8"}.mdi-content-save-outline:before{content:"\F817"}.mdi-content-save-settings:before{content:"\F61B"}.mdi-content-save-settings-outline:before{content:"\FB13"}.mdi-contrast:before{content:"\F195"}.mdi-contrast-box:before{content:"\F196"}.mdi-contrast-circle:before{content:"\F197"}.mdi-controller-classic:before{content:"\FB5E"}.mdi-controller-classic-outline:before{content:"\FB5F"}.mdi-cookie:before{content:"\F198"}.mdi-copyright:before{content:"\F5E6"}.mdi-cordova:before{content:"\F957"}.mdi-corn:before{content:"\F7B7"}.mdi-counter:before{content:"\F199"}.mdi-cow:before{content:"\F19A"}.mdi-crane:before{content:"\F861"}.mdi-creation:before{content:"\F1C9"}.mdi-creative-commons:before{content:"\FD47"}.mdi-credit-card:before{content:"\F19B"}.mdi-credit-card-marker:before{content:"\FD9A"}.mdi-credit-card-multiple:before{content:"\F19C"}.mdi-credit-card-off:before{content:"\F5E4"}.mdi-credit-card-plus:before{content:"\F675"}.mdi-credit-card-refund:before{content:"\FAA7"}.mdi-credit-card-scan:before{content:"\F19D"}.mdi-credit-card-settings:before{content:"\F8D6"}.mdi-credit-card-wireless:before{content:"\FD48"}.mdi-cricket:before{content:"\FD49"}.mdi-crop:before{content:"\F19E"}.mdi-crop-free:before{content:"\F19F"}.mdi-crop-landscape:before{content:"\F1A0"}.mdi-crop-portrait:before{content:"\F1A1"}.mdi-crop-rotate:before{content:"\F695"}.mdi-crop-square:before{content:"\F1A2"}.mdi-crosshairs:before{content:"\F1A3"}.mdi-crosshairs-gps:before{content:"\F1A4"}.mdi-crown:before{content:"\F1A5"}.mdi-cryengine:before{content:"\F958"}.mdi-crystal-ball:before{content:"\FB14"}.mdi-cube:before{content:"\F1A6"}.mdi-cube-outline:before{content:"\F1A7"}.mdi-cube-scan:before{content:"\FB60"}.mdi-cube-send:before{content:"\F1A8"}.mdi-cube-unfolded:before{content:"\F1A9"}.mdi-cup:before{content:"\F1AA"}.mdi-cup-off:before{content:"\F5E5"}.mdi-cup-water:before{content:"\F1AB"}.mdi-cupcake:before{content:"\F959"}.mdi-curling:before{content:"\F862"}.mdi-currency-bdt:before{content:"\F863"}.mdi-currency-brl:before{content:"\FB61"}.mdi-currency-btc:before{content:"\F1AC"}.mdi-currency-chf:before{content:"\F7B8"}.mdi-currency-cny:before{content:"\F7B9"}.mdi-currency-eth:before{content:"\F7BA"}.mdi-currency-eur:before{content:"\F1AD"}.mdi-currency-gbp:before{content:"\F1AE"}.mdi-currency-ils:before{content:"\FC3D"}.mdi-currency-inr:before{content:"\F1AF"}.mdi-currency-jpy:before{content:"\F7BB"}.mdi-currency-krw:before{content:"\F7BC"}.mdi-currency-kzt:before{content:"\F864"}.mdi-currency-ngn:before{content:"\F1B0"}.mdi-currency-php:before{content:"\F9E5"}.mdi-currency-rub:before{content:"\F1B1"}.mdi-currency-sign:before{content:"\F7BD"}.mdi-currency-try:before{content:"\F1B2"}.mdi-currency-twd:before{content:"\F7BE"}.mdi-currency-usd:before{content:"\F1B3"}.mdi-currency-usd-off:before{content:"\F679"}.mdi-current-ac:before{content:"\F95A"}.mdi-current-dc:before{content:"\F95B"}.mdi-cursor-default:before{content:"\F1B4"}.mdi-cursor-default-click:before{content:"\FCD9"}.mdi-cursor-default-click-outline:before{content:"\FCDA"}.mdi-cursor-default-outline:before{content:"\F1B5"}.mdi-cursor-move:before{content:"\F1B6"}.mdi-cursor-pointer:before{content:"\F1B7"}.mdi-cursor-text:before{content:"\F5E7"}.mdi-database:before{content:"\F1B8"}.mdi-database-check:before{content:"\FAA8"}.mdi-database-edit:before{content:"\FB62"}.mdi-database-export:before{content:"\F95D"}.mdi-database-import:before{content:"\F95C"}.mdi-database-lock:before{content:"\FAA9"}.mdi-database-minus:before{content:"\F1B9"}.mdi-database-plus:before{content:"\F1BA"}.mdi-database-refresh:before{content:"\FCDB"}.mdi-database-remove:before{content:"\FCDC"}.mdi-database-search:before{content:"\F865"}.mdi-database-settings:before{content:"\FCDD"}.mdi-death-star:before{content:"\F8D7"}.mdi-death-star-variant:before{content:"\F8D8"}.mdi-deathly-hallows:before{content:"\FB63"}.mdi-debian:before{content:"\F8D9"}.mdi-debug-step-into:before{content:"\F1BB"}.mdi-debug-step-out:before{content:"\F1BC"}.mdi-debug-step-over:before{content:"\F1BD"}.mdi-decagram:before{content:"\F76B"}.mdi-decagram-outline:before{content:"\F76C"}.mdi-decimal-decrease:before{content:"\F1BE"}.mdi-decimal-increase:before{content:"\F1BF"}.mdi-delete:before{content:"\F1C0"}.mdi-delete-circle:before{content:"\F682"}.mdi-delete-circle-outline:before{content:"\FB64"}.mdi-delete-empty:before{content:"\F6CB"}.mdi-delete-forever:before{content:"\F5E8"}.mdi-delete-forever-outline:before{content:"\FB65"}.mdi-delete-outline:before{content:"\F9E6"}.mdi-delete-restore:before{content:"\F818"}.mdi-delete-sweep:before{content:"\F5E9"}.mdi-delete-sweep-outline:before{content:"\FC3E"}.mdi-delete-variant:before{content:"\F1C1"}.mdi-delta:before{content:"\F1C2"}.mdi-desk-lamp:before{content:"\F95E"}.mdi-deskphone:before{content:"\F1C3"}.mdi-desktop-classic:before{content:"\F7BF"}.mdi-desktop-mac:before{content:"\F1C4"}.mdi-desktop-mac-dashboard:before{content:"\F9E7"}.mdi-desktop-tower:before{content:"\F1C5"}.mdi-desktop-tower-monitor:before{content:"\FAAA"}.mdi-details:before{content:"\F1C6"}.mdi-dev-to:before{content:"\FD4A"}.mdi-developer-board:before{content:"\F696"}.mdi-deviantart:before{content:"\F1C7"}.mdi-dialpad:before{content:"\F61C"}.mdi-diameter:before{content:"\FC3F"}.mdi-diameter-outline:before{content:"\FC40"}.mdi-diameter-variant:before{content:"\FC41"}.mdi-diamond:before{content:"\FB66"}.mdi-diamond-outline:before{content:"\FB67"}.mdi-diamond-stone:before{content:"\F1C8"}.mdi-dice-1:before{content:"\F1CA"}.mdi-dice-2:before{content:"\F1CB"}.mdi-dice-3:before{content:"\F1CC"}.mdi-dice-4:before{content:"\F1CD"}.mdi-dice-5:before{content:"\F1CE"}.mdi-dice-6:before{content:"\F1CF"}.mdi-dice-d10:before{content:"\F76E"}.mdi-dice-d12:before{content:"\F866"}.mdi-dice-d20:before{content:"\F5EA"}.mdi-dice-d4:before{content:"\F5EB"}.mdi-dice-d6:before{content:"\F5EC"}.mdi-dice-d8:before{content:"\F5ED"}.mdi-dice-multiple:before{content:"\F76D"}.mdi-dictionary:before{content:"\F61D"}.mdi-dip-switch:before{content:"\F7C0"}.mdi-directions:before{content:"\F1D0"}.mdi-directions-fork:before{content:"\F641"}.mdi-disc:before{content:"\F5EE"}.mdi-disc-alert:before{content:"\F1D1"}.mdi-disc-player:before{content:"\F95F"}.mdi-discord:before{content:"\F66F"}.mdi-dishwasher:before{content:"\FAAB"}.mdi-disqus:before{content:"\F1D2"}.mdi-disqus-outline:before{content:"\F1D3"}.mdi-diving-flippers:before{content:"\FD9B"}.mdi-diving-helmet:before{content:"\FD9C"}.mdi-diving-scuba:before{content:"\FD9D"}.mdi-diving-scuba-flag:before{content:"\FD9E"}.mdi-diving-scuba-tank:before{content:"\FD9F"}.mdi-diving-scuba-tank-multiple:before{content:"\FDA0"}.mdi-diving-snorkel:before{content:"\FDA1"}.mdi-division:before{content:"\F1D4"}.mdi-division-box:before{content:"\F1D5"}.mdi-dlna:before{content:"\FA40"}.mdi-dna:before{content:"\F683"}.mdi-dns:before{content:"\F1D6"}.mdi-dns-outline:before{content:"\FB68"}.mdi-do-not-disturb:before{content:"\F697"}.mdi-do-not-disturb-off:before{content:"\F698"}.mdi-docker:before{content:"\F867"}.mdi-doctor:before{content:"\FA41"}.mdi-dog:before{content:"\FA42"}.mdi-dog-service:before{content:"\FAAC"}.mdi-dog-side:before{content:"\FA43"}.mdi-dolby:before{content:"\F6B2"}.mdi-domain:before{content:"\F1D7"}.mdi-domain-off:before{content:"\FD4B"}.mdi-donkey:before{content:"\F7C1"}.mdi-door:before{content:"\F819"}.mdi-door-closed:before{content:"\F81A"}.mdi-door-open:before{content:"\F81B"}.mdi-doorbell-video:before{content:"\F868"}.mdi-dot-net:before{content:"\FAAD"}.mdi-dots-horizontal:before{content:"\F1D8"}.mdi-dots-horizontal-circle:before{content:"\F7C2"}.mdi-dots-horizontal-circle-outline:before{content:"\FB69"}.mdi-dots-vertical:before{content:"\F1D9"}.mdi-dots-vertical-circle:before{content:"\F7C3"}.mdi-dots-vertical-circle-outline:before{content:"\FB6A"}.mdi-douban:before{content:"\F699"}.mdi-download:before{content:"\F1DA"}.mdi-download-multiple:before{content:"\F9E8"}.mdi-download-network:before{content:"\F6F3"}.mdi-download-network-outline:before{content:"\FC42"}.mdi-download-outline:before{content:"\FB6B"}.mdi-drag:before{content:"\F1DB"}.mdi-drag-horizontal:before{content:"\F1DC"}.mdi-drag-variant:before{content:"\FB6C"}.mdi-drag-vertical:before{content:"\F1DD"}.mdi-drama-masks:before{content:"\FCDE"}.mdi-drawing:before{content:"\F1DE"}.mdi-drawing-box:before{content:"\F1DF"}.mdi-dribbble:before{content:"\F1E0"}.mdi-dribbble-box:before{content:"\F1E1"}.mdi-drone:before{content:"\F1E2"}.mdi-dropbox:before{content:"\F1E3"}.mdi-drupal:before{content:"\F1E4"}.mdi-duck:before{content:"\F1E5"}.mdi-dumbbell:before{content:"\F1E6"}.mdi-dump-truck:before{content:"\FC43"}.mdi-ear-hearing:before{content:"\F7C4"}.mdi-ear-hearing-off:before{content:"\FA44"}.mdi-earth:before{content:"\F1E7"}.mdi-earth-box:before{content:"\F6CC"}.mdi-earth-box-off:before{content:"\F6CD"}.mdi-earth-off:before{content:"\F1E8"}.mdi-edge:before{content:"\F1E9"}.mdi-egg:before{content:"\FAAE"}.mdi-egg-easter:before{content:"\FAAF"}.mdi-eight-track:before{content:"\F9E9"}.mdi-eject:before{content:"\F1EA"}.mdi-eject-outline:before{content:"\FB6D"}.mdi-elephant:before{content:"\F7C5"}.mdi-elevation-decline:before{content:"\F1EB"}.mdi-elevation-rise:before{content:"\F1EC"}.mdi-elevator:before{content:"\F1ED"}.mdi-email:before{content:"\F1EE"}.mdi-email-alert:before{content:"\F6CE"}.mdi-email-box:before{content:"\FCDF"}.mdi-email-check:before{content:"\FAB0"}.mdi-email-check-outline:before{content:"\FAB1"}.mdi-email-lock:before{content:"\F1F1"}.mdi-email-mark-as-unread:before{content:"\FB6E"}.mdi-email-open:before{content:"\F1EF"}.mdi-email-open-outline:before{content:"\F5EF"}.mdi-email-outline:before{content:"\F1F0"}.mdi-email-plus:before{content:"\F9EA"}.mdi-email-plus-outline:before{content:"\F9EB"}.mdi-email-search:before{content:"\F960"}.mdi-email-search-outline:before{content:"\F961"}.mdi-email-variant:before{content:"\F5F0"}.mdi-ember:before{content:"\FB15"}.mdi-emby:before{content:"\F6B3"}.mdi-emoticon:before{content:"\FC44"}.mdi-emoticon-angry:before{content:"\FC45"}.mdi-emoticon-angry-outline:before{content:"\FC46"}.mdi-emoticon-cool:before{content:"\FC47"}.mdi-emoticon-cool-outline:before{content:"\F1F3"}.mdi-emoticon-cry:before{content:"\FC48"}.mdi-emoticon-cry-outline:before{content:"\FC49"}.mdi-emoticon-dead:before{content:"\FC4A"}.mdi-emoticon-dead-outline:before{content:"\F69A"}.mdi-emoticon-devil:before{content:"\FC4B"}.mdi-emoticon-devil-outline:before{content:"\F1F4"}.mdi-emoticon-excited:before{content:"\FC4C"}.mdi-emoticon-excited-outline:before{content:"\F69B"}.mdi-emoticon-happy:before{content:"\FC4D"}.mdi-emoticon-happy-outline:before{content:"\F1F5"}.mdi-emoticon-kiss:before{content:"\FC4E"}.mdi-emoticon-kiss-outline:before{content:"\FC4F"}.mdi-emoticon-neutral:before{content:"\FC50"}.mdi-emoticon-neutral-outline:before{content:"\F1F6"}.mdi-emoticon-outline:before{content:"\F1F2"}.mdi-emoticon-poop:before{content:"\F1F7"}.mdi-emoticon-poop-outline:before{content:"\FC51"}.mdi-emoticon-sad:before{content:"\FC52"}.mdi-emoticon-sad-outline:before{content:"\F1F8"}.mdi-emoticon-tongue:before{content:"\F1F9"}.mdi-emoticon-tongue-outline:before{content:"\FC53"}.mdi-emoticon-wink:before{content:"\FC54"}.mdi-emoticon-wink-outline:before{content:"\FC55"}.mdi-engine:before{content:"\F1FA"}.mdi-engine-off:before{content:"\FA45"}.mdi-engine-off-outline:before{content:"\FA46"}.mdi-engine-outline:before{content:"\F1FB"}.mdi-equal:before{content:"\F1FC"}.mdi-equal-box:before{content:"\F1FD"}.mdi-eraser:before{content:"\F1FE"}.mdi-eraser-variant:before{content:"\F642"}.mdi-escalator:before{content:"\F1FF"}.mdi-eslint:before{content:"\FC56"}.mdi-et:before{content:"\FAB2"}.mdi-ethereum:before{content:"\F869"}.mdi-ethernet:before{content:"\F200"}.mdi-ethernet-cable:before{content:"\F201"}.mdi-ethernet-cable-off:before{content:"\F202"}.mdi-etsy:before{content:"\F203"}.mdi-ev-station:before{content:"\F5F1"}.mdi-eventbrite:before{content:"\F7C6"}.mdi-evernote:before{content:"\F204"}.mdi-exclamation:before{content:"\F205"}.mdi-exit-run:before{content:"\FA47"}.mdi-exit-to-app:before{content:"\F206"}.mdi-expand-all:before{content:"\FAB3"}.mdi-expand-all-outline:before{content:"\FAB4"}.mdi-exponent:before{content:"\F962"}.mdi-exponent-box:before{content:"\F963"}.mdi-export:before{content:"\F207"}.mdi-export-variant:before{content:"\FB6F"}.mdi-eye:before{content:"\F208"}.mdi-eye-check:before{content:"\FCE0"}.mdi-eye-check-outline:before{content:"\FCE1"}.mdi-eye-circle:before{content:"\FB70"}.mdi-eye-circle-outline:before{content:"\FB71"}.mdi-eye-off:before{content:"\F209"}.mdi-eye-off-outline:before{content:"\F6D0"}.mdi-eye-outline:before{content:"\F6CF"}.mdi-eye-plus:before{content:"\F86A"}.mdi-eye-plus-outline:before{content:"\F86B"}.mdi-eye-settings:before{content:"\F86C"}.mdi-eye-settings-outline:before{content:"\F86D"}.mdi-eyedropper:before{content:"\F20A"}.mdi-eyedropper-variant:before{content:"\F20B"}.mdi-face:before{content:"\F643"}.mdi-face-agent:before{content:"\FD4C"}.mdi-face-outline:before{content:"\FB72"}.mdi-face-profile:before{content:"\F644"}.mdi-face-recognition:before{content:"\FC57"}.mdi-facebook:before{content:"\F20C"}.mdi-facebook-box:before{content:"\F20D"}.mdi-facebook-messenger:before{content:"\F20E"}.mdi-facebook-workplace:before{content:"\FB16"}.mdi-factory:before{content:"\F20F"}.mdi-fan:before{content:"\F210"}.mdi-fan-off:before{content:"\F81C"}.mdi-fast-forward:before{content:"\F211"}.mdi-fast-forward-10:before{content:"\FD4D"}.mdi-fast-forward-30:before{content:"\FCE2"}.mdi-fast-forward-outline:before{content:"\F6D1"}.mdi-fax:before{content:"\F212"}.mdi-feather:before{content:"\F6D2"}.mdi-feature-search:before{content:"\FA48"}.mdi-feature-search-outline:before{content:"\FA49"}.mdi-fedora:before{content:"\F8DA"}.mdi-ferry:before{content:"\F213"}.mdi-file:before{content:"\F214"}.mdi-file-account:before{content:"\F73A"}.mdi-file-alert:before{content:"\FA4A"}.mdi-file-alert-outline:before{content:"\FA4B"}.mdi-file-cabinet:before{content:"\FAB5"}.mdi-file-cancel:before{content:"\FDA2"}.mdi-file-cancel-outline:before{content:"\FDA3"}.mdi-file-chart:before{content:"\F215"}.mdi-file-check:before{content:"\F216"}.mdi-file-cloud:before{content:"\F217"}.mdi-file-compare:before{content:"\F8A9"}.mdi-file-delimited:before{content:"\F218"}.mdi-file-document:before{content:"\F219"}.mdi-file-document-box:before{content:"\F21A"}.mdi-file-document-box-multiple:before{content:"\FAB6"}.mdi-file-document-box-multiple-outline:before{content:"\FAB7"}.mdi-file-document-box-outline:before{content:"\F9EC"}.mdi-file-document-edit:before{content:"\FDA4"}.mdi-file-document-edit-outline:before{content:"\FDA5"}.mdi-file-document-outline:before{content:"\F9ED"}.mdi-file-download:before{content:"\F964"}.mdi-file-download-outline:before{content:"\F965"}.mdi-file-excel:before{content:"\F21B"}.mdi-file-excel-box:before{content:"\F21C"}.mdi-file-export:before{content:"\F21D"}.mdi-file-eye:before{content:"\FDA6"}.mdi-file-eye-outline:before{content:"\FDA7"}.mdi-file-find:before{content:"\F21E"}.mdi-file-find-outline:before{content:"\FB73"}.mdi-file-hidden:before{content:"\F613"}.mdi-file-image:before{content:"\F21F"}.mdi-file-import:before{content:"\F220"}.mdi-file-lock:before{content:"\F221"}.mdi-file-move:before{content:"\FAB8"}.mdi-file-multiple:before{content:"\F222"}.mdi-file-music:before{content:"\F223"}.mdi-file-outline:before{content:"\F224"}.mdi-file-pdf:before{content:"\F225"}.mdi-file-pdf-box:before{content:"\F226"}.mdi-file-percent:before{content:"\F81D"}.mdi-file-plus:before{content:"\F751"}.mdi-file-powerpoint:before{content:"\F227"}.mdi-file-powerpoint-box:before{content:"\F228"}.mdi-file-presentation-box:before{content:"\F229"}.mdi-file-question:before{content:"\F86E"}.mdi-file-remove:before{content:"\FB74"}.mdi-file-replace:before{content:"\FB17"}.mdi-file-replace-outline:before{content:"\FB18"}.mdi-file-restore:before{content:"\F670"}.mdi-file-search:before{content:"\FC58"}.mdi-file-search-outline:before{content:"\FC59"}.mdi-file-send:before{content:"\F22A"}.mdi-file-table:before{content:"\FC5A"}.mdi-file-table-outline:before{content:"\FC5B"}.mdi-file-tree:before{content:"\F645"}.mdi-file-undo:before{content:"\F8DB"}.mdi-file-upload:before{content:"\FA4C"}.mdi-file-upload-outline:before{content:"\FA4D"}.mdi-file-video:before{content:"\F22B"}.mdi-file-word:before{content:"\F22C"}.mdi-file-word-box:before{content:"\F22D"}.mdi-file-xml:before{content:"\F22E"}.mdi-film:before{content:"\F22F"}.mdi-filmstrip:before{content:"\F230"}.mdi-filmstrip-off:before{content:"\F231"}.mdi-filter:before{content:"\F232"}.mdi-filter-outline:before{content:"\F233"}.mdi-filter-remove:before{content:"\F234"}.mdi-filter-remove-outline:before{content:"\F235"}.mdi-filter-variant:before{content:"\F236"}.mdi-finance:before{content:"\F81E"}.mdi-find-replace:before{content:"\F6D3"}.mdi-fingerprint:before{content:"\F237"}.mdi-fire:before{content:"\F238"}.mdi-fire-truck:before{content:"\F8AA"}.mdi-firebase:before{content:"\F966"}.mdi-firefox:before{content:"\F239"}.mdi-fish:before{content:"\F23A"}.mdi-flag:before{content:"\F23B"}.mdi-flag-checkered:before{content:"\F23C"}.mdi-flag-minus:before{content:"\FB75"}.mdi-flag-outline:before{content:"\F23D"}.mdi-flag-plus:before{content:"\FB76"}.mdi-flag-remove:before{content:"\FB77"}.mdi-flag-triangle:before{content:"\F23F"}.mdi-flag-variant:before{content:"\F240"}.mdi-flag-variant-outline:before{content:"\F23E"}.mdi-flare:before{content:"\FD4E"}.mdi-flash:before{content:"\F241"}.mdi-flash-auto:before{content:"\F242"}.mdi-flash-circle:before{content:"\F81F"}.mdi-flash-off:before{content:"\F243"}.mdi-flash-outline:before{content:"\F6D4"}.mdi-flash-red-eye:before{content:"\F67A"}.mdi-flashlight:before{content:"\F244"}.mdi-flashlight-off:before{content:"\F245"}.mdi-flask:before{content:"\F093"}.mdi-flask-empty:before{content:"\F094"}.mdi-flask-empty-outline:before{content:"\F095"}.mdi-flask-outline:before{content:"\F096"}.mdi-flattr:before{content:"\F246"}.mdi-flickr:before{content:"\FCE3"}.mdi-flip-to-back:before{content:"\F247"}.mdi-flip-to-front:before{content:"\F248"}.mdi-floor-lamp:before{content:"\F8DC"}.mdi-floor-plan:before{content:"\F820"}.mdi-floppy:before{content:"\F249"}.mdi-floppy-variant:before{content:"\F9EE"}.mdi-flower:before{content:"\F24A"}.mdi-flower-outline:before{content:"\F9EF"}.mdi-flower-poppy:before{content:"\FCE4"}.mdi-flower-tulip:before{content:"\F9F0"}.mdi-flower-tulip-outline:before{content:"\F9F1"}.mdi-folder:before{content:"\F24B"}.mdi-folder-account:before{content:"\F24C"}.mdi-folder-account-outline:before{content:"\FB78"}.mdi-folder-alert:before{content:"\FDA8"}.mdi-folder-alert-outline:before{content:"\FDA9"}.mdi-folder-clock:before{content:"\FAB9"}.mdi-folder-clock-outline:before{content:"\FABA"}.mdi-folder-download:before{content:"\F24D"}.mdi-folder-edit:before{content:"\F8DD"}.mdi-folder-edit-outline:before{content:"\FDAA"}.mdi-folder-google-drive:before{content:"\F24E"}.mdi-folder-image:before{content:"\F24F"}.mdi-folder-key:before{content:"\F8AB"}.mdi-folder-key-network:before{content:"\F8AC"}.mdi-folder-key-network-outline:before{content:"\FC5C"}.mdi-folder-lock:before{content:"\F250"}.mdi-folder-lock-open:before{content:"\F251"}.mdi-folder-move:before{content:"\F252"}.mdi-folder-multiple:before{content:"\F253"}.mdi-folder-multiple-image:before{content:"\F254"}.mdi-folder-multiple-outline:before{content:"\F255"}.mdi-folder-network:before{content:"\F86F"}.mdi-folder-network-outline:before{content:"\FC5D"}.mdi-folder-open:before{content:"\F76F"}.mdi-folder-open-outline:before{content:"\FDAB"}.mdi-folder-outline:before{content:"\F256"}.mdi-folder-plus:before{content:"\F257"}.mdi-folder-plus-outline:before{content:"\FB79"}.mdi-folder-pound:before{content:"\FCE5"}.mdi-folder-pound-outline:before{content:"\FCE6"}.mdi-folder-remove:before{content:"\F258"}.mdi-folder-remove-outline:before{content:"\FB7A"}.mdi-folder-search:before{content:"\F967"}.mdi-folder-search-outline:before{content:"\F968"}.mdi-folder-star:before{content:"\F69C"}.mdi-folder-star-outline:before{content:"\FB7B"}.mdi-folder-sync:before{content:"\FCE7"}.mdi-folder-sync-outline:before{content:"\FCE8"}.mdi-folder-text:before{content:"\FC5E"}.mdi-folder-text-outline:before{content:"\FC5F"}.mdi-folder-upload:before{content:"\F259"}.mdi-font-awesome:before{content:"\F03A"}.mdi-food:before{content:"\F25A"}.mdi-food-apple:before{content:"\F25B"}.mdi-food-apple-outline:before{content:"\FC60"}.mdi-food-croissant:before{content:"\F7C7"}.mdi-food-fork-drink:before{content:"\F5F2"}.mdi-food-off:before{content:"\F5F3"}.mdi-food-variant:before{content:"\F25C"}.mdi-football:before{content:"\F25D"}.mdi-football-australian:before{content:"\F25E"}.mdi-football-helmet:before{content:"\F25F"}.mdi-forklift:before{content:"\F7C8"}.mdi-format-align-bottom:before{content:"\F752"}.mdi-format-align-center:before{content:"\F260"}.mdi-format-align-justify:before{content:"\F261"}.mdi-format-align-left:before{content:"\F262"}.mdi-format-align-middle:before{content:"\F753"}.mdi-format-align-right:before{content:"\F263"}.mdi-format-align-top:before{content:"\F754"}.mdi-format-annotation-minus:before{content:"\FABB"}.mdi-format-annotation-plus:before{content:"\F646"}.mdi-format-bold:before{content:"\F264"}.mdi-format-clear:before{content:"\F265"}.mdi-format-color-fill:before{content:"\F266"}.mdi-format-color-text:before{content:"\F69D"}.mdi-format-columns:before{content:"\F8DE"}.mdi-format-float-center:before{content:"\F267"}.mdi-format-float-left:before{content:"\F268"}.mdi-format-float-none:before{content:"\F269"}.mdi-format-float-right:before{content:"\F26A"}.mdi-format-font:before{content:"\F6D5"}.mdi-format-font-size-decrease:before{content:"\F9F2"}.mdi-format-font-size-increase:before{content:"\F9F3"}.mdi-format-header-1:before{content:"\F26B"}.mdi-format-header-2:before{content:"\F26C"}.mdi-format-header-3:before{content:"\F26D"}.mdi-format-header-4:before{content:"\F26E"}.mdi-format-header-5:before{content:"\F26F"}.mdi-format-header-6:before{content:"\F270"}.mdi-format-header-decrease:before{content:"\F271"}.mdi-format-header-equal:before{content:"\F272"}.mdi-format-header-increase:before{content:"\F273"}.mdi-format-header-pound:before{content:"\F274"}.mdi-format-horizontal-align-center:before{content:"\F61E"}.mdi-format-horizontal-align-left:before{content:"\F61F"}.mdi-format-horizontal-align-right:before{content:"\F620"}.mdi-format-indent-decrease:before{content:"\F275"}.mdi-format-indent-increase:before{content:"\F276"}.mdi-format-italic:before{content:"\F277"}.mdi-format-letter-case:before{content:"\FB19"}.mdi-format-letter-case-lower:before{content:"\FB1A"}.mdi-format-letter-case-upper:before{content:"\FB1B"}.mdi-format-line-spacing:before{content:"\F278"}.mdi-format-line-style:before{content:"\F5C8"}.mdi-format-line-weight:before{content:"\F5C9"}.mdi-format-list-bulleted:before{content:"\F279"}.mdi-format-list-bulleted-square:before{content:"\FDAC"}.mdi-format-list-bulleted-type:before{content:"\F27A"}.mdi-format-list-checkbox:before{content:"\F969"}.mdi-format-list-checks:before{content:"\F755"}.mdi-format-list-numbered:before{content:"\F27B"}.mdi-format-list-numbered-rtl:before{content:"\FCE9"}.mdi-format-page-break:before{content:"\F6D6"}.mdi-format-paint:before{content:"\F27C"}.mdi-format-paragraph:before{content:"\F27D"}.mdi-format-pilcrow:before{content:"\F6D7"}.mdi-format-quote-close:before{content:"\F27E"}.mdi-format-quote-open:before{content:"\F756"}.mdi-format-rotate-90:before{content:"\F6A9"}.mdi-format-section:before{content:"\F69E"}.mdi-format-size:before{content:"\F27F"}.mdi-format-strikethrough:before{content:"\F280"}.mdi-format-strikethrough-variant:before{content:"\F281"}.mdi-format-subscript:before{content:"\F282"}.mdi-format-superscript:before{content:"\F283"}.mdi-format-text:before{content:"\F284"}.mdi-format-text-rotation-down:before{content:"\FD4F"}.mdi-format-text-rotation-none:before{content:"\FD50"}.mdi-format-text-wrapping-clip:before{content:"\FCEA"}.mdi-format-text-wrapping-overflow:before{content:"\FCEB"}.mdi-format-text-wrapping-wrap:before{content:"\FCEC"}.mdi-format-textbox:before{content:"\FCED"}.mdi-format-textdirection-l-to-r:before{content:"\F285"}.mdi-format-textdirection-r-to-l:before{content:"\F286"}.mdi-format-title:before{content:"\F5F4"}.mdi-format-underline:before{content:"\F287"}.mdi-format-vertical-align-bottom:before{content:"\F621"}.mdi-format-vertical-align-center:before{content:"\F622"}.mdi-format-vertical-align-top:before{content:"\F623"}.mdi-format-wrap-inline:before{content:"\F288"}.mdi-format-wrap-square:before{content:"\F289"}.mdi-format-wrap-tight:before{content:"\F28A"}.mdi-format-wrap-top-bottom:before{content:"\F28B"}.mdi-forum:before{content:"\F28C"}.mdi-forum-outline:before{content:"\F821"}.mdi-forward:before{content:"\F28D"}.mdi-forwardburger:before{content:"\FD51"}.mdi-fountain:before{content:"\F96A"}.mdi-fountain-pen:before{content:"\FCEE"}.mdi-fountain-pen-tip:before{content:"\FCEF"}.mdi-foursquare:before{content:"\F28E"}.mdi-freebsd:before{content:"\F8DF"}.mdi-fridge:before{content:"\F290"}.mdi-fridge-bottom:before{content:"\F292"}.mdi-fridge-outline:before{content:"\F28F"}.mdi-fridge-top:before{content:"\F291"}.mdi-fuel:before{content:"\F7C9"}.mdi-fullscreen:before{content:"\F293"}.mdi-fullscreen-exit:before{content:"\F294"}.mdi-function:before{content:"\F295"}.mdi-function-variant:before{content:"\F870"}.mdi-fuse:before{content:"\FC61"}.mdi-fuse-blade:before{content:"\FC62"}.mdi-gamepad:before{content:"\F296"}.mdi-gamepad-variant:before{content:"\F297"}.mdi-gantry-crane:before{content:"\FDAD"}.mdi-garage:before{content:"\F6D8"}.mdi-garage-alert:before{content:"\F871"}.mdi-garage-open:before{content:"\F6D9"}.mdi-gas-cylinder:before{content:"\F647"}.mdi-gas-station:before{content:"\F298"}.mdi-gate:before{content:"\F299"}.mdi-gate-and:before{content:"\F8E0"}.mdi-gate-nand:before{content:"\F8E1"}.mdi-gate-nor:before{content:"\F8E2"}.mdi-gate-not:before{content:"\F8E3"}.mdi-gate-or:before{content:"\F8E4"}.mdi-gate-xnor:before{content:"\F8E5"}.mdi-gate-xor:before{content:"\F8E6"}.mdi-gauge:before{content:"\F29A"}.mdi-gauge-empty:before{content:"\F872"}.mdi-gauge-full:before{content:"\F873"}.mdi-gauge-low:before{content:"\F874"}.mdi-gavel:before{content:"\F29B"}.mdi-gender-female:before{content:"\F29C"}.mdi-gender-male:before{content:"\F29D"}.mdi-gender-male-female:before{content:"\F29E"}.mdi-gender-transgender:before{content:"\F29F"}.mdi-gentoo:before{content:"\F8E7"}.mdi-gesture:before{content:"\F7CA"}.mdi-gesture-double-tap:before{content:"\F73B"}.mdi-gesture-pinch:before{content:"\FABC"}.mdi-gesture-spread:before{content:"\FABD"}.mdi-gesture-swipe:before{content:"\FD52"}.mdi-gesture-swipe-down:before{content:"\F73C"}.mdi-gesture-swipe-horizontal:before{content:"\FABE"}.mdi-gesture-swipe-left:before{content:"\F73D"}.mdi-gesture-swipe-right:before{content:"\F73E"}.mdi-gesture-swipe-up:before{content:"\F73F"}.mdi-gesture-swipe-vertical:before{content:"\FABF"}.mdi-gesture-tap:before{content:"\F740"}.mdi-gesture-tap-hold:before{content:"\FD53"}.mdi-gesture-two-double-tap:before{content:"\F741"}.mdi-gesture-two-tap:before{content:"\F742"}.mdi-ghost:before{content:"\F2A0"}.mdi-ghost-off:before{content:"\F9F4"}.mdi-gif:before{content:"\FD54"}.mdi-gift:before{content:"\F2A1"}.mdi-git:before{content:"\F2A2"}.mdi-github-box:before{content:"\F2A3"}.mdi-github-circle:before{content:"\F2A4"}.mdi-github-face:before{content:"\F6DA"}.mdi-gitlab:before{content:"\FB7C"}.mdi-glass-cocktail:before{content:"\F356"}.mdi-glass-flute:before{content:"\F2A5"}.mdi-glass-mug:before{content:"\F2A6"}.mdi-glass-stange:before{content:"\F2A7"}.mdi-glass-tulip:before{content:"\F2A8"}.mdi-glass-wine:before{content:"\F875"}.mdi-glassdoor:before{content:"\F2A9"}.mdi-glasses:before{content:"\F2AA"}.mdi-globe-model:before{content:"\F8E8"}.mdi-gmail:before{content:"\F2AB"}.mdi-gnome:before{content:"\F2AC"}.mdi-go-kart:before{content:"\FD55"}.mdi-go-kart-track:before{content:"\FD56"}.mdi-gog:before{content:"\FB7D"}.mdi-golf:before{content:"\F822"}.mdi-gondola:before{content:"\F685"}.mdi-goodreads:before{content:"\FD57"}.mdi-google:before{content:"\F2AD"}.mdi-google-adwords:before{content:"\FC63"}.mdi-google-allo:before{content:"\F801"}.mdi-google-analytics:before{content:"\F7CB"}.mdi-google-assistant:before{content:"\F7CC"}.mdi-google-cardboard:before{content:"\F2AE"}.mdi-google-chrome:before{content:"\F2AF"}.mdi-google-circles:before{content:"\F2B0"}.mdi-google-circles-communities:before{content:"\F2B1"}.mdi-google-circles-extended:before{content:"\F2B2"}.mdi-google-circles-group:before{content:"\F2B3"}.mdi-google-classroom:before{content:"\F2C0"}.mdi-google-controller:before{content:"\F2B4"}.mdi-google-controller-off:before{content:"\F2B5"}.mdi-google-drive:before{content:"\F2B6"}.mdi-google-earth:before{content:"\F2B7"}.mdi-google-fit:before{content:"\F96B"}.mdi-google-glass:before{content:"\F2B8"}.mdi-google-hangouts:before{content:"\F2C9"}.mdi-google-home:before{content:"\F823"}.mdi-google-keep:before{content:"\F6DB"}.mdi-google-lens:before{content:"\F9F5"}.mdi-google-maps:before{content:"\F5F5"}.mdi-google-nearby:before{content:"\F2B9"}.mdi-google-pages:before{content:"\F2BA"}.mdi-google-photos:before{content:"\F6DC"}.mdi-google-physical-web:before{content:"\F2BB"}.mdi-google-play:before{content:"\F2BC"}.mdi-google-plus:before{content:"\F2BD"}.mdi-google-plus-box:before{content:"\F2BE"}.mdi-google-spreadsheet:before{content:"\F9F6"}.mdi-google-street-view:before{content:"\FC64"}.mdi-google-translate:before{content:"\F2BF"}.mdi-gpu:before{content:"\F8AD"}.mdi-gradient:before{content:"\F69F"}.mdi-grain:before{content:"\FD58"}.mdi-graphql:before{content:"\F876"}.mdi-grave-stone:before{content:"\FB7E"}.mdi-grease-pencil:before{content:"\F648"}.mdi-greater-than:before{content:"\F96C"}.mdi-greater-than-or-equal:before{content:"\F96D"}.mdi-grid:before{content:"\F2C1"}.mdi-grid-large:before{content:"\F757"}.mdi-grid-off:before{content:"\F2C2"}.mdi-group:before{content:"\F2C3"}.mdi-guitar-acoustic:before{content:"\F770"}.mdi-guitar-electric:before{content:"\F2C4"}.mdi-guitar-pick:before{content:"\F2C5"}.mdi-guitar-pick-outline:before{content:"\F2C6"}.mdi-guy-fawkes-mask:before{content:"\F824"}.mdi-hackernews:before{content:"\F624"}.mdi-hail:before{content:"\FAC0"}.mdi-halloween:before{content:"\FB7F"}.mdi-hamburger:before{content:"\F684"}.mdi-hammer:before{content:"\F8E9"}.mdi-hand:before{content:"\FA4E"}.mdi-hand-okay:before{content:"\FA4F"}.mdi-hand-peace:before{content:"\FA50"}.mdi-hand-peace-variant:before{content:"\FA51"}.mdi-hand-pointing-down:before{content:"\FA52"}.mdi-hand-pointing-left:before{content:"\FA53"}.mdi-hand-pointing-right:before{content:"\F2C7"}.mdi-hand-pointing-up:before{content:"\FA54"}.mdi-hanger:before{content:"\F2C8"}.mdi-hard-hat:before{content:"\F96E"}.mdi-harddisk:before{content:"\F2CA"}.mdi-hat-fedora:before{content:"\FB80"}.mdi-hazard-lights:before{content:"\FC65"}.mdi-hdr:before{content:"\FD59"}.mdi-hdr-off:before{content:"\FD5A"}.mdi-headphones:before{content:"\F2CB"}.mdi-headphones-bluetooth:before{content:"\F96F"}.mdi-headphones-box:before{content:"\F2CC"}.mdi-headphones-off:before{content:"\F7CD"}.mdi-headphones-settings:before{content:"\F2CD"}.mdi-headset:before{content:"\F2CE"}.mdi-headset-dock:before{content:"\F2CF"}.mdi-headset-off:before{content:"\F2D0"}.mdi-heart:before{content:"\F2D1"}.mdi-heart-box:before{content:"\F2D2"}.mdi-heart-box-outline:before{content:"\F2D3"}.mdi-heart-broken:before{content:"\F2D4"}.mdi-heart-broken-outline:before{content:"\FCF0"}.mdi-heart-circle:before{content:"\F970"}.mdi-heart-circle-outline:before{content:"\F971"}.mdi-heart-half:before{content:"\F6DE"}.mdi-heart-half-full:before{content:"\F6DD"}.mdi-heart-half-outline:before{content:"\F6DF"}.mdi-heart-multiple:before{content:"\FA55"}.mdi-heart-multiple-outline:before{content:"\FA56"}.mdi-heart-off:before{content:"\F758"}.mdi-heart-outline:before{content:"\F2D5"}.mdi-heart-pulse:before{content:"\F5F6"}.mdi-helicopter:before{content:"\FAC1"}.mdi-help:before{content:"\F2D6"}.mdi-help-box:before{content:"\F78A"}.mdi-help-circle:before{content:"\F2D7"}.mdi-help-circle-outline:before{content:"\F625"}.mdi-help-network:before{content:"\F6F4"}.mdi-help-network-outline:before{content:"\FC66"}.mdi-help-rhombus:before{content:"\FB81"}.mdi-help-rhombus-outline:before{content:"\FB82"}.mdi-hexagon:before{content:"\F2D8"}.mdi-hexagon-multiple:before{content:"\F6E0"}.mdi-hexagon-outline:before{content:"\F2D9"}.mdi-hexagon-slice-1:before{content:"\FAC2"}.mdi-hexagon-slice-2:before{content:"\FAC3"}.mdi-hexagon-slice-3:before{content:"\FAC4"}.mdi-hexagon-slice-4:before{content:"\FAC5"}.mdi-hexagon-slice-5:before{content:"\FAC6"}.mdi-hexagon-slice-6:before{content:"\FAC7"}.mdi-hexagram:before{content:"\FAC8"}.mdi-hexagram-outline:before{content:"\FAC9"}.mdi-high-definition:before{content:"\F7CE"}.mdi-high-definition-box:before{content:"\F877"}.mdi-highway:before{content:"\F5F7"}.mdi-hiking:before{content:"\FD5B"}.mdi-hinduism:before{content:"\F972"}.mdi-history:before{content:"\F2DA"}.mdi-hockey-puck:before{content:"\F878"}.mdi-hockey-sticks:before{content:"\F879"}.mdi-hololens:before{content:"\F2DB"}.mdi-home:before{content:"\F2DC"}.mdi-home-account:before{content:"\F825"}.mdi-home-alert:before{content:"\F87A"}.mdi-home-assistant:before{content:"\F7CF"}.mdi-home-automation:before{content:"\F7D0"}.mdi-home-circle:before{content:"\F7D1"}.mdi-home-city:before{content:"\FCF1"}.mdi-home-city-outline:before{content:"\FCF2"}.mdi-home-currency-usd:before{content:"\F8AE"}.mdi-home-floor-0:before{content:"\FDAE"}.mdi-home-floor-1:before{content:"\FD5C"}.mdi-home-floor-2:before{content:"\FD5D"}.mdi-home-floor-3:before{content:"\FD5E"}.mdi-home-floor-a:before{content:"\FD5F"}.mdi-home-floor-b:before{content:"\FD60"}.mdi-home-floor-g:before{content:"\FD61"}.mdi-home-floor-l:before{content:"\FD62"}.mdi-home-floor-negative-1:before{content:"\FDAF"}.mdi-home-group:before{content:"\FDB0"}.mdi-home-heart:before{content:"\F826"}.mdi-home-lock:before{content:"\F8EA"}.mdi-home-lock-open:before{content:"\F8EB"}.mdi-home-map-marker:before{content:"\F5F8"}.mdi-home-minus:before{content:"\F973"}.mdi-home-modern:before{content:"\F2DD"}.mdi-home-outline:before{content:"\F6A0"}.mdi-home-plus:before{content:"\F974"}.mdi-home-variant:before{content:"\F2DE"}.mdi-home-variant-outline:before{content:"\FB83"}.mdi-hook:before{content:"\F6E1"}.mdi-hook-off:before{content:"\F6E2"}.mdi-hops:before{content:"\F2DF"}.mdi-horseshoe:before{content:"\FA57"}.mdi-hospital:before{content:"\F2E0"}.mdi-hospital-building:before{content:"\F2E1"}.mdi-hospital-marker:before{content:"\F2E2"}.mdi-hot-tub:before{content:"\F827"}.mdi-hotel:before{content:"\F2E3"}.mdi-houzz:before{content:"\F2E4"}.mdi-houzz-box:before{content:"\F2E5"}.mdi-hubspot:before{content:"\FCF3"}.mdi-hulu:before{content:"\F828"}.mdi-human:before{content:"\F2E6"}.mdi-human-child:before{content:"\F2E7"}.mdi-human-female:before{content:"\F649"}.mdi-human-female-boy:before{content:"\FA58"}.mdi-human-female-female:before{content:"\FA59"}.mdi-human-female-girl:before{content:"\FA5A"}.mdi-human-greeting:before{content:"\F64A"}.mdi-human-handsdown:before{content:"\F64B"}.mdi-human-handsup:before{content:"\F64C"}.mdi-human-male:before{content:"\F64D"}.mdi-human-male-boy:before{content:"\FA5B"}.mdi-human-male-female:before{content:"\F2E8"}.mdi-human-male-girl:before{content:"\FA5C"}.mdi-human-male-male:before{content:"\FA5D"}.mdi-human-pregnant:before{content:"\F5CF"}.mdi-humble-bundle:before{content:"\F743"}.mdi-ice-cream:before{content:"\F829"}.mdi-iframe:before{content:"\FC67"}.mdi-iframe-outline:before{content:"\FC68"}.mdi-image:before{content:"\F2E9"}.mdi-image-album:before{content:"\F2EA"}.mdi-image-area:before{content:"\F2EB"}.mdi-image-area-close:before{content:"\F2EC"}.mdi-image-broken:before{content:"\F2ED"}.mdi-image-broken-variant:before{content:"\F2EE"}.mdi-image-filter:before{content:"\F2EF"}.mdi-image-filter-black-white:before{content:"\F2F0"}.mdi-image-filter-center-focus:before{content:"\F2F1"}.mdi-image-filter-center-focus-weak:before{content:"\F2F2"}.mdi-image-filter-drama:before{content:"\F2F3"}.mdi-image-filter-frames:before{content:"\F2F4"}.mdi-image-filter-hdr:before{content:"\F2F5"}.mdi-image-filter-none:before{content:"\F2F6"}.mdi-image-filter-tilt-shift:before{content:"\F2F7"}.mdi-image-filter-vintage:before{content:"\F2F8"}.mdi-image-move:before{content:"\F9F7"}.mdi-image-multiple:before{content:"\F2F9"}.mdi-image-off:before{content:"\F82A"}.mdi-image-outline:before{content:"\F975"}.mdi-image-plus:before{content:"\F87B"}.mdi-image-search:before{content:"\F976"}.mdi-image-search-outline:before{content:"\F977"}.mdi-image-size-select-actual:before{content:"\FC69"}.mdi-image-size-select-large:before{content:"\FC6A"}.mdi-image-size-select-small:before{content:"\FC6B"}.mdi-import:before{content:"\F2FA"}.mdi-inbox:before{content:"\F686"}.mdi-inbox-arrow-down:before{content:"\F2FB"}.mdi-inbox-arrow-up:before{content:"\F3D1"}.mdi-inbox-multiple:before{content:"\F8AF"}.mdi-inbox-multiple-outline:before{content:"\FB84"}.mdi-incognito:before{content:"\F5F9"}.mdi-infinity:before{content:"\F6E3"}.mdi-information:before{content:"\F2FC"}.mdi-information-outline:before{content:"\F2FD"}.mdi-information-variant:before{content:"\F64E"}.mdi-instagram:before{content:"\F2FE"}.mdi-instapaper:before{content:"\F2FF"}.mdi-internet-explorer:before{content:"\F300"}.mdi-invert-colors:before{content:"\F301"}.mdi-ip:before{content:"\FA5E"}.mdi-ip-network:before{content:"\FA5F"}.mdi-ip-network-outline:before{content:"\FC6C"}.mdi-ipod:before{content:"\FC6D"}.mdi-islam:before{content:"\F978"}.mdi-itunes:before{content:"\F676"}.mdi-jabber:before{content:"\FDB1"}.mdi-jeepney:before{content:"\F302"}.mdi-jira:before{content:"\F303"}.mdi-jquery:before{content:"\F87C"}.mdi-jsfiddle:before{content:"\F304"}.mdi-json:before{content:"\F626"}.mdi-judaism:before{content:"\F979"}.mdi-kabaddi:before{content:"\FD63"}.mdi-karate:before{content:"\F82B"}.mdi-keg:before{content:"\F305"}.mdi-kettle:before{content:"\F5FA"}.mdi-key:before{content:"\F306"}.mdi-key-change:before{content:"\F307"}.mdi-key-minus:before{content:"\F308"}.mdi-key-outline:before{content:"\FDB2"}.mdi-key-plus:before{content:"\F309"}.mdi-key-remove:before{content:"\F30A"}.mdi-key-variant:before{content:"\F30B"}.mdi-keyboard:before{content:"\F30C"}.mdi-keyboard-backspace:before{content:"\F30D"}.mdi-keyboard-caps:before{content:"\F30E"}.mdi-keyboard-close:before{content:"\F30F"}.mdi-keyboard-off:before{content:"\F310"}.mdi-keyboard-outline:before{content:"\F97A"}.mdi-keyboard-return:before{content:"\F311"}.mdi-keyboard-settings:before{content:"\F9F8"}.mdi-keyboard-settings-outline:before{content:"\F9F9"}.mdi-keyboard-tab:before{content:"\F312"}.mdi-keyboard-variant:before{content:"\F313"}.mdi-kickstarter:before{content:"\F744"}.mdi-knife:before{content:"\F9FA"}.mdi-knife-military:before{content:"\F9FB"}.mdi-kodi:before{content:"\F314"}.mdi-label:before{content:"\F315"}.mdi-label-off:before{content:"\FACA"}.mdi-label-off-outline:before{content:"\FACB"}.mdi-label-outline:before{content:"\F316"}.mdi-label-variant:before{content:"\FACC"}.mdi-label-variant-outline:before{content:"\FACD"}.mdi-ladybug:before{content:"\F82C"}.mdi-lambda:before{content:"\F627"}.mdi-lamp:before{content:"\F6B4"}.mdi-lan:before{content:"\F317"}.mdi-lan-connect:before{content:"\F318"}.mdi-lan-disconnect:before{content:"\F319"}.mdi-lan-pending:before{content:"\F31A"}.mdi-language-c:before{content:"\F671"}.mdi-language-cpp:before{content:"\F672"}.mdi-language-csharp:before{content:"\F31B"}.mdi-language-css3:before{content:"\F31C"}.mdi-language-go:before{content:"\F7D2"}.mdi-language-haskell:before{content:"\FC6E"}.mdi-language-html5:before{content:"\F31D"}.mdi-language-java:before{content:"\FB1C"}.mdi-language-javascript:before{content:"\F31E"}.mdi-language-lua:before{content:"\F8B0"}.mdi-language-php:before{content:"\F31F"}.mdi-language-python:before{content:"\F320"}.mdi-language-python-text:before{content:"\F321"}.mdi-language-r:before{content:"\F7D3"}.mdi-language-ruby-on-rails:before{content:"\FACE"}.mdi-language-swift:before{content:"\F6E4"}.mdi-language-typescript:before{content:"\F6E5"}.mdi-laptop:before{content:"\F322"}.mdi-laptop-chromebook:before{content:"\F323"}.mdi-laptop-mac:before{content:"\F324"}.mdi-laptop-off:before{content:"\F6E6"}.mdi-laptop-windows:before{content:"\F325"}.mdi-laravel:before{content:"\FACF"}.mdi-lastfm:before{content:"\F326"}.mdi-lastpass:before{content:"\F446"}.mdi-launch:before{content:"\F327"}.mdi-lava-lamp:before{content:"\F7D4"}.mdi-layers:before{content:"\F328"}.mdi-layers-off:before{content:"\F329"}.mdi-layers-off-outline:before{content:"\F9FC"}.mdi-layers-outline:before{content:"\F9FD"}.mdi-lead-pencil:before{content:"\F64F"}.mdi-leaf:before{content:"\F32A"}.mdi-leaf-maple:before{content:"\FC6F"}.mdi-leak:before{content:"\FDB3"}.mdi-leak-off:before{content:"\FDB4"}.mdi-led-off:before{content:"\F32B"}.mdi-led-on:before{content:"\F32C"}.mdi-led-outline:before{content:"\F32D"}.mdi-led-strip:before{content:"\F7D5"}.mdi-led-variant-off:before{content:"\F32E"}.mdi-led-variant-on:before{content:"\F32F"}.mdi-led-variant-outline:before{content:"\F330"}.mdi-less-than:before{content:"\F97B"}.mdi-less-than-or-equal:before{content:"\F97C"}.mdi-library:before{content:"\F331"}.mdi-library-books:before{content:"\F332"}.mdi-library-movie:before{content:"\FCF4"}.mdi-library-music:before{content:"\F333"}.mdi-library-plus:before{content:"\F334"}.mdi-library-shelves:before{content:"\FB85"}.mdi-library-video:before{content:"\FCF5"}.mdi-lifebuoy:before{content:"\F87D"}.mdi-light-switch:before{content:"\F97D"}.mdi-lightbulb:before{content:"\F335"}.mdi-lightbulb-on:before{content:"\F6E7"}.mdi-lightbulb-on-outline:before{content:"\F6E8"}.mdi-lightbulb-outline:before{content:"\F336"}.mdi-lighthouse:before{content:"\F9FE"}.mdi-lighthouse-on:before{content:"\F9FF"}.mdi-link:before{content:"\F337"}.mdi-link-box:before{content:"\FCF6"}.mdi-link-box-outline:before{content:"\FCF7"}.mdi-link-box-variant:before{content:"\FCF8"}.mdi-link-box-variant-outline:before{content:"\FCF9"}.mdi-link-off:before{content:"\F338"}.mdi-link-plus:before{content:"\FC70"}.mdi-link-variant:before{content:"\F339"}.mdi-link-variant-off:before{content:"\F33A"}.mdi-linkedin:before{content:"\F33B"}.mdi-linkedin-box:before{content:"\F33C"}.mdi-linux:before{content:"\F33D"}.mdi-linux-mint:before{content:"\F8EC"}.mdi-litecoin:before{content:"\FA60"}.mdi-loading:before{content:"\F771"}.mdi-lock:before{content:"\F33E"}.mdi-lock-alert:before{content:"\F8ED"}.mdi-lock-clock:before{content:"\F97E"}.mdi-lock-open:before{content:"\F33F"}.mdi-lock-open-outline:before{content:"\F340"}.mdi-lock-outline:before{content:"\F341"}.mdi-lock-pattern:before{content:"\F6E9"}.mdi-lock-plus:before{content:"\F5FB"}.mdi-lock-question:before{content:"\F8EE"}.mdi-lock-reset:before{content:"\F772"}.mdi-lock-smart:before{content:"\F8B1"}.mdi-locker:before{content:"\F7D6"}.mdi-locker-multiple:before{content:"\F7D7"}.mdi-login:before{content:"\F342"}.mdi-login-variant:before{content:"\F5FC"}.mdi-logout:before{content:"\F343"}.mdi-logout-variant:before{content:"\F5FD"}.mdi-looks:before{content:"\F344"}.mdi-loop:before{content:"\F6EA"}.mdi-loupe:before{content:"\F345"}.mdi-lumx:before{content:"\F346"}.mdi-lyft:before{content:"\FB1D"}.mdi-magnet:before{content:"\F347"}.mdi-magnet-on:before{content:"\F348"}.mdi-magnify:before{content:"\F349"}.mdi-magnify-close:before{content:"\F97F"}.mdi-magnify-minus:before{content:"\F34A"}.mdi-magnify-minus-cursor:before{content:"\FA61"}.mdi-magnify-minus-outline:before{content:"\F6EB"}.mdi-magnify-plus:before{content:"\F34B"}.mdi-magnify-plus-cursor:before{content:"\FA62"}.mdi-magnify-plus-outline:before{content:"\F6EC"}.mdi-mail-ru:before{content:"\F34C"}.mdi-mailbox:before{content:"\F6ED"}.mdi-mailbox-open:before{content:"\FD64"}.mdi-mailbox-open-outline:before{content:"\FD65"}.mdi-mailbox-open-up:before{content:"\FD66"}.mdi-mailbox-open-up-outline:before{content:"\FD67"}.mdi-mailbox-outline:before{content:"\FD68"}.mdi-mailbox-up:before{content:"\FD69"}.mdi-mailbox-up-outline:before{content:"\FD6A"}.mdi-map:before{content:"\F34D"}.mdi-map-clock:before{content:"\FCFA"}.mdi-map-clock-outline:before{content:"\FCFB"}.mdi-map-legend:before{content:"\FA00"}.mdi-map-marker:before{content:"\F34E"}.mdi-map-marker-check:before{content:"\FC71"}.mdi-map-marker-circle:before{content:"\F34F"}.mdi-map-marker-distance:before{content:"\F8EF"}.mdi-map-marker-minus:before{content:"\F650"}.mdi-map-marker-multiple:before{content:"\F350"}.mdi-map-marker-off:before{content:"\F351"}.mdi-map-marker-outline:before{content:"\F7D8"}.mdi-map-marker-path:before{content:"\FCFC"}.mdi-map-marker-plus:before{content:"\F651"}.mdi-map-marker-radius:before{content:"\F352"}.mdi-map-minus:before{content:"\F980"}.mdi-map-outline:before{content:"\F981"}.mdi-map-plus:before{content:"\F982"}.mdi-map-search:before{content:"\F983"}.mdi-map-search-outline:before{content:"\F984"}.mdi-mapbox:before{content:"\FB86"}.mdi-margin:before{content:"\F353"}.mdi-markdown:before{content:"\F354"}.mdi-marker:before{content:"\F652"}.mdi-marker-cancel:before{content:"\FDB5"}.mdi-marker-check:before{content:"\F355"}.mdi-mastodon:before{content:"\FAD0"}.mdi-mastodon-variant:before{content:"\FAD1"}.mdi-material-design:before{content:"\F985"}.mdi-material-ui:before{content:"\F357"}.mdi-math-compass:before{content:"\F358"}.mdi-math-cos:before{content:"\FC72"}.mdi-math-sin:before{content:"\FC73"}.mdi-math-tan:before{content:"\FC74"}.mdi-matrix:before{content:"\F628"}.mdi-maxcdn:before{content:"\F359"}.mdi-medal:before{content:"\F986"}.mdi-medical-bag:before{content:"\F6EE"}.mdi-medium:before{content:"\F35A"}.mdi-meetup:before{content:"\FAD2"}.mdi-memory:before{content:"\F35B"}.mdi-menu:before{content:"\F35C"}.mdi-menu-down:before{content:"\F35D"}.mdi-menu-down-outline:before{content:"\F6B5"}.mdi-menu-left:before{content:"\F35E"}.mdi-menu-left-outline:before{content:"\FA01"}.mdi-menu-open:before{content:"\FB87"}.mdi-menu-right:before{content:"\F35F"}.mdi-menu-right-outline:before{content:"\FA02"}.mdi-menu-swap:before{content:"\FA63"}.mdi-menu-swap-outline:before{content:"\FA64"}.mdi-menu-up:before{content:"\F360"}.mdi-menu-up-outline:before{content:"\F6B6"}.mdi-message:before{content:"\F361"}.mdi-message-alert:before{content:"\F362"}.mdi-message-alert-outline:before{content:"\FA03"}.mdi-message-bulleted:before{content:"\F6A1"}.mdi-message-bulleted-off:before{content:"\F6A2"}.mdi-message-draw:before{content:"\F363"}.mdi-message-image:before{content:"\F364"}.mdi-message-outline:before{content:"\F365"}.mdi-message-plus:before{content:"\F653"}.mdi-message-processing:before{content:"\F366"}.mdi-message-reply:before{content:"\F367"}.mdi-message-reply-text:before{content:"\F368"}.mdi-message-settings:before{content:"\F6EF"}.mdi-message-settings-variant:before{content:"\F6F0"}.mdi-message-text:before{content:"\F369"}.mdi-message-text-outline:before{content:"\F36A"}.mdi-message-video:before{content:"\F36B"}.mdi-meteor:before{content:"\F629"}.mdi-metronome:before{content:"\F7D9"}.mdi-metronome-tick:before{content:"\F7DA"}.mdi-micro-sd:before{content:"\F7DB"}.mdi-microphone:before{content:"\F36C"}.mdi-microphone-minus:before{content:"\F8B2"}.mdi-microphone-off:before{content:"\F36D"}.mdi-microphone-outline:before{content:"\F36E"}.mdi-microphone-plus:before{content:"\F8B3"}.mdi-microphone-settings:before{content:"\F36F"}.mdi-microphone-variant:before{content:"\F370"}.mdi-microphone-variant-off:before{content:"\F371"}.mdi-microscope:before{content:"\F654"}.mdi-microsoft:before{content:"\F372"}.mdi-microsoft-dynamics:before{content:"\F987"}.mdi-microwave:before{content:"\FC75"}.mdi-midi:before{content:"\F8F0"}.mdi-midi-port:before{content:"\F8F1"}.mdi-mine:before{content:"\FDB6"}.mdi-minecraft:before{content:"\F373"}.mdi-mini-sd:before{content:"\FA04"}.mdi-minidisc:before{content:"\FA05"}.mdi-minus:before{content:"\F374"}.mdi-minus-box:before{content:"\F375"}.mdi-minus-box-outline:before{content:"\F6F1"}.mdi-minus-circle:before{content:"\F376"}.mdi-minus-circle-outline:before{content:"\F377"}.mdi-minus-network:before{content:"\F378"}.mdi-minus-network-outline:before{content:"\FC76"}.mdi-mixcloud:before{content:"\F62A"}.mdi-mixed-martial-arts:before{content:"\FD6B"}.mdi-mixed-reality:before{content:"\F87E"}.mdi-mixer:before{content:"\F7DC"}.mdi-molecule:before{content:"\FB88"}.mdi-monitor:before{content:"\F379"}.mdi-monitor-cellphone:before{content:"\F988"}.mdi-monitor-cellphone-star:before{content:"\F989"}.mdi-monitor-dashboard:before{content:"\FA06"}.mdi-monitor-lock:before{content:"\FDB7"}.mdi-monitor-multiple:before{content:"\F37A"}.mdi-monitor-off:before{content:"\FD6C"}.mdi-monitor-star:before{content:"\FDB8"}.mdi-more:before{content:"\F37B"}.mdi-mother-nurse:before{content:"\FCFD"}.mdi-motion-sensor:before{content:"\FD6D"}.mdi-motorbike:before{content:"\F37C"}.mdi-mouse:before{content:"\F37D"}.mdi-mouse-bluetooth:before{content:"\F98A"}.mdi-mouse-off:before{content:"\F37E"}.mdi-mouse-variant:before{content:"\F37F"}.mdi-mouse-variant-off:before{content:"\F380"}.mdi-move-resize:before{content:"\F655"}.mdi-move-resize-variant:before{content:"\F656"}.mdi-movie:before{content:"\F381"}.mdi-movie-outline:before{content:"\FDB9"}.mdi-movie-roll:before{content:"\F7DD"}.mdi-muffin:before{content:"\F98B"}.mdi-multiplication:before{content:"\F382"}.mdi-multiplication-box:before{content:"\F383"}.mdi-mushroom:before{content:"\F7DE"}.mdi-mushroom-outline:before{content:"\F7DF"}.mdi-music:before{content:"\F759"}.mdi-music-box:before{content:"\F384"}.mdi-music-box-outline:before{content:"\F385"}.mdi-music-circle:before{content:"\F386"}.mdi-music-circle-outline:before{content:"\FAD3"}.mdi-music-note:before{content:"\F387"}.mdi-music-note-bluetooth:before{content:"\F5FE"}.mdi-music-note-bluetooth-off:before{content:"\F5FF"}.mdi-music-note-eighth:before{content:"\F388"}.mdi-music-note-half:before{content:"\F389"}.mdi-music-note-off:before{content:"\F38A"}.mdi-music-note-plus:before{content:"\FDBA"}.mdi-music-note-quarter:before{content:"\F38B"}.mdi-music-note-sixteenth:before{content:"\F38C"}.mdi-music-note-whole:before{content:"\F38D"}.mdi-music-off:before{content:"\F75A"}.mdi-nail:before{content:"\FDBB"}.mdi-nas:before{content:"\F8F2"}.mdi-nativescript:before{content:"\F87F"}.mdi-nature:before{content:"\F38E"}.mdi-nature-people:before{content:"\F38F"}.mdi-navigation:before{content:"\F390"}.mdi-near-me:before{content:"\F5CD"}.mdi-needle:before{content:"\F391"}.mdi-netflix:before{content:"\F745"}.mdi-network:before{content:"\F6F2"}.mdi-network-off:before{content:"\FC77"}.mdi-network-off-outline:before{content:"\FC78"}.mdi-network-outline:before{content:"\FC79"}.mdi-network-strength-1:before{content:"\F8F3"}.mdi-network-strength-1-alert:before{content:"\F8F4"}.mdi-network-strength-2:before{content:"\F8F5"}.mdi-network-strength-2-alert:before{content:"\F8F6"}.mdi-network-strength-3:before{content:"\F8F7"}.mdi-network-strength-3-alert:before{content:"\F8F8"}.mdi-network-strength-4:before{content:"\F8F9"}.mdi-network-strength-4-alert:before{content:"\F8FA"}.mdi-network-strength-off:before{content:"\F8FB"}.mdi-network-strength-off-outline:before{content:"\F8FC"}.mdi-network-strength-outline:before{content:"\F8FD"}.mdi-new-box:before{content:"\F394"}.mdi-newspaper:before{content:"\F395"}.mdi-nfc:before{content:"\F396"}.mdi-nfc-tap:before{content:"\F397"}.mdi-nfc-variant:before{content:"\F398"}.mdi-ninja:before{content:"\F773"}.mdi-nintendo-switch:before{content:"\F7E0"}.mdi-nodejs:before{content:"\F399"}.mdi-not-equal:before{content:"\F98C"}.mdi-not-equal-variant:before{content:"\F98D"}.mdi-note:before{content:"\F39A"}.mdi-note-multiple:before{content:"\F6B7"}.mdi-note-multiple-outline:before{content:"\F6B8"}.mdi-note-outline:before{content:"\F39B"}.mdi-note-plus:before{content:"\F39C"}.mdi-note-plus-outline:before{content:"\F39D"}.mdi-note-text:before{content:"\F39E"}.mdi-notebook:before{content:"\F82D"}.mdi-notification-clear-all:before{content:"\F39F"}.mdi-npm:before{content:"\F6F6"}.mdi-npm-variant:before{content:"\F98E"}.mdi-npm-variant-outline:before{content:"\F98F"}.mdi-nuke:before{content:"\F6A3"}.mdi-null:before{content:"\F7E1"}.mdi-numeric:before{content:"\F3A0"}.mdi-numeric-0:before{content:"\30"}.mdi-numeric-0-box:before{content:"\F3A1"}.mdi-numeric-0-box-multiple-outline:before{content:"\F3A2"}.mdi-numeric-0-box-outline:before{content:"\F3A3"}.mdi-numeric-0-circle:before{content:"\FC7A"}.mdi-numeric-0-circle-outline:before{content:"\FC7B"}.mdi-numeric-1:before{content:"\31"}.mdi-numeric-1-box:before{content:"\F3A4"}.mdi-numeric-1-box-multiple-outline:before{content:"\F3A5"}.mdi-numeric-1-box-outline:before{content:"\F3A6"}.mdi-numeric-1-circle:before{content:"\FC7C"}.mdi-numeric-1-circle-outline:before{content:"\FC7D"}.mdi-numeric-2:before{content:"\32"}.mdi-numeric-2-box:before{content:"\F3A7"}.mdi-numeric-2-box-multiple-outline:before{content:"\F3A8"}.mdi-numeric-2-box-outline:before{content:"\F3A9"}.mdi-numeric-2-circle:before{content:"\FC7E"}.mdi-numeric-2-circle-outline:before{content:"\FC7F"}.mdi-numeric-3:before{content:"\33"}.mdi-numeric-3-box:before{content:"\F3AA"}.mdi-numeric-3-box-multiple-outline:before{content:"\F3AB"}.mdi-numeric-3-box-outline:before{content:"\F3AC"}.mdi-numeric-3-circle:before{content:"\FC80"}.mdi-numeric-3-circle-outline:before{content:"\FC81"}.mdi-numeric-4:before{content:"\34"}.mdi-numeric-4-box:before{content:"\F3AD"}.mdi-numeric-4-box-multiple-outline:before{content:"\F3AE"}.mdi-numeric-4-box-outline:before{content:"\F3AF"}.mdi-numeric-4-circle:before{content:"\FC82"}.mdi-numeric-4-circle-outline:before{content:"\FC83"}.mdi-numeric-5:before{content:"\35"}.mdi-numeric-5-box:before{content:"\F3B0"}.mdi-numeric-5-box-multiple-outline:before{content:"\F3B1"}.mdi-numeric-5-box-outline:before{content:"\F3B2"}.mdi-numeric-5-circle:before{content:"\FC84"}.mdi-numeric-5-circle-outline:before{content:"\FC85"}.mdi-numeric-6:before{content:"\36"}.mdi-numeric-6-box:before{content:"\F3B3"}.mdi-numeric-6-box-multiple-outline:before{content:"\F3B4"}.mdi-numeric-6-box-outline:before{content:"\F3B5"}.mdi-numeric-6-circle:before{content:"\FC86"}.mdi-numeric-6-circle-outline:before{content:"\FC87"}.mdi-numeric-7:before{content:"\37"}.mdi-numeric-7-box:before{content:"\F3B6"}.mdi-numeric-7-box-multiple-outline:before{content:"\F3B7"}.mdi-numeric-7-box-outline:before{content:"\F3B8"}.mdi-numeric-7-circle:before{content:"\FC88"}.mdi-numeric-7-circle-outline:before{content:"\FC89"}.mdi-numeric-8:before{content:"\38"}.mdi-numeric-8-box:before{content:"\F3B9"}.mdi-numeric-8-box-multiple-outline:before{content:"\F3BA"}.mdi-numeric-8-box-outline:before{content:"\F3BB"}.mdi-numeric-8-circle:before{content:"\FC8A"}.mdi-numeric-8-circle-outline:before{content:"\FC8B"}.mdi-numeric-9:before{content:"\39"}.mdi-numeric-9-box:before{content:"\F3BC"}.mdi-numeric-9-box-multiple-outline:before{content:"\F3BD"}.mdi-numeric-9-box-outline:before{content:"\F3BE"}.mdi-numeric-9-circle:before{content:"\FC8C"}.mdi-numeric-9-circle-outline:before{content:"\FC8D"}.mdi-numeric-9-plus-box:before{content:"\F3BF"}.mdi-numeric-9-plus-box-multiple-outline:before{content:"\F3C0"}.mdi-numeric-9-plus-box-outline:before{content:"\F3C1"}.mdi-numeric-9-plus-circle:before{content:"\FC8E"}.mdi-numeric-9-plus-circle-outline:before{content:"\FC8F"}.mdi-nut:before{content:"\F6F7"}.mdi-nutrition:before{content:"\F3C2"}.mdi-oar:before{content:"\F67B"}.mdi-ocarina:before{content:"\FDBC"}.mdi-octagon:before{content:"\F3C3"}.mdi-octagon-outline:before{content:"\F3C4"}.mdi-octagram:before{content:"\F6F8"}.mdi-octagram-outline:before{content:"\F774"}.mdi-odnoklassniki:before{content:"\F3C5"}.mdi-office:before{content:"\F3C6"}.mdi-office-building:before{content:"\F990"}.mdi-oil:before{content:"\F3C7"}.mdi-oil-temperature:before{content:"\F3C8"}.mdi-omega:before{content:"\F3C9"}.mdi-one-up:before{content:"\FB89"}.mdi-onedrive:before{content:"\F3CA"}.mdi-onenote:before{content:"\F746"}.mdi-onepassword:before{content:"\F880"}.mdi-opacity:before{content:"\F5CC"}.mdi-open-in-app:before{content:"\F3CB"}.mdi-open-in-new:before{content:"\F3CC"}.mdi-open-source-initiative:before{content:"\FB8A"}.mdi-openid:before{content:"\F3CD"}.mdi-opera:before{content:"\F3CE"}.mdi-orbit:before{content:"\F018"}.mdi-origin:before{content:"\FB2B"}.mdi-ornament:before{content:"\F3CF"}.mdi-ornament-variant:before{content:"\F3D0"}.mdi-outlook:before{content:"\FCFE"}.mdi-owl:before{content:"\F3D2"}.mdi-pac-man:before{content:"\FB8B"}.mdi-package:before{content:"\F3D3"}.mdi-package-down:before{content:"\F3D4"}.mdi-package-up:before{content:"\F3D5"}.mdi-package-variant:before{content:"\F3D6"}.mdi-package-variant-closed:before{content:"\F3D7"}.mdi-page-first:before{content:"\F600"}.mdi-page-last:before{content:"\F601"}.mdi-page-layout-body:before{content:"\F6F9"}.mdi-page-layout-footer:before{content:"\F6FA"}.mdi-page-layout-header:before{content:"\F6FB"}.mdi-page-layout-sidebar-left:before{content:"\F6FC"}.mdi-page-layout-sidebar-right:before{content:"\F6FD"}.mdi-page-next:before{content:"\FB8C"}.mdi-page-next-outline:before{content:"\FB8D"}.mdi-page-previous:before{content:"\FB8E"}.mdi-page-previous-outline:before{content:"\FB8F"}.mdi-palette:before{content:"\F3D8"}.mdi-palette-advanced:before{content:"\F3D9"}.mdi-palette-outline:before{content:"\FDE8"}.mdi-palette-swatch:before{content:"\F8B4"}.mdi-pan:before{content:"\FB90"}.mdi-pan-bottom-left:before{content:"\FB91"}.mdi-pan-bottom-right:before{content:"\FB92"}.mdi-pan-down:before{content:"\FB93"}.mdi-pan-horizontal:before{content:"\FB94"}.mdi-pan-left:before{content:"\FB95"}.mdi-pan-right:before{content:"\FB96"}.mdi-pan-top-left:before{content:"\FB97"}.mdi-pan-top-right:before{content:"\FB98"}.mdi-pan-up:before{content:"\FB99"}.mdi-pan-vertical:before{content:"\FB9A"}.mdi-panda:before{content:"\F3DA"}.mdi-pandora:before{content:"\F3DB"}.mdi-panorama:before{content:"\F3DC"}.mdi-panorama-fisheye:before{content:"\F3DD"}.mdi-panorama-horizontal:before{content:"\F3DE"}.mdi-panorama-vertical:before{content:"\F3DF"}.mdi-panorama-wide-angle:before{content:"\F3E0"}.mdi-paper-cut-vertical:before{content:"\F3E1"}.mdi-paperclip:before{content:"\F3E2"}.mdi-parachute:before{content:"\FC90"}.mdi-parachute-outline:before{content:"\FC91"}.mdi-parking:before{content:"\F3E3"}.mdi-passport:before{content:"\F7E2"}.mdi-passport-biometric:before{content:"\FDBD"}.mdi-patreon:before{content:"\F881"}.mdi-pause:before{content:"\F3E4"}.mdi-pause-circle:before{content:"\F3E5"}.mdi-pause-circle-outline:before{content:"\F3E6"}.mdi-pause-octagon:before{content:"\F3E7"}.mdi-pause-octagon-outline:before{content:"\F3E8"}.mdi-paw:before{content:"\F3E9"}.mdi-paw-off:before{content:"\F657"}.mdi-paypal:before{content:"\F882"}.mdi-peace:before{content:"\F883"}.mdi-pen:before{content:"\F3EA"}.mdi-pen-lock:before{content:"\FDBE"}.mdi-pen-minus:before{content:"\FDBF"}.mdi-pen-off:before{content:"\FDC0"}.mdi-pen-plus:before{content:"\FDC1"}.mdi-pen-remove:before{content:"\FDC2"}.mdi-pencil:before{content:"\F3EB"}.mdi-pencil-box:before{content:"\F3EC"}.mdi-pencil-box-outline:before{content:"\F3ED"}.mdi-pencil-circle:before{content:"\F6FE"}.mdi-pencil-circle-outline:before{content:"\F775"}.mdi-pencil-lock:before{content:"\F3EE"}.mdi-pencil-lock-outline:before{content:"\FDC3"}.mdi-pencil-minus:before{content:"\FDC4"}.mdi-pencil-minus-outline:before{content:"\FDC5"}.mdi-pencil-off:before{content:"\F3EF"}.mdi-pencil-off-outline:before{content:"\FDC6"}.mdi-pencil-outline:before{content:"\FC92"}.mdi-pencil-plus:before{content:"\FDC7"}.mdi-pencil-plus-outline:before{content:"\FDC8"}.mdi-pencil-remove:before{content:"\FDC9"}.mdi-pencil-remove-outline:before{content:"\FDCA"}.mdi-pentagon:before{content:"\F6FF"}.mdi-pentagon-outline:before{content:"\F700"}.mdi-percent:before{content:"\F3F0"}.mdi-periodic-table:before{content:"\F8B5"}.mdi-periodic-table-co2:before{content:"\F7E3"}.mdi-periscope:before{content:"\F747"}.mdi-perspective-less:before{content:"\FCFF"}.mdi-perspective-more:before{content:"\FD00"}.mdi-pharmacy:before{content:"\F3F1"}.mdi-phone:before{content:"\F3F2"}.mdi-phone-bluetooth:before{content:"\F3F3"}.mdi-phone-classic:before{content:"\F602"}.mdi-phone-forward:before{content:"\F3F4"}.mdi-phone-hangup:before{content:"\F3F5"}.mdi-phone-in-talk:before{content:"\F3F6"}.mdi-phone-incoming:before{content:"\F3F7"}.mdi-phone-lock:before{content:"\F3F8"}.mdi-phone-log:before{content:"\F3F9"}.mdi-phone-minus:before{content:"\F658"}.mdi-phone-missed:before{content:"\F3FA"}.mdi-phone-off:before{content:"\FDCB"}.mdi-phone-outgoing:before{content:"\F3FB"}.mdi-phone-outline:before{content:"\FDCC"}.mdi-phone-paused:before{content:"\F3FC"}.mdi-phone-plus:before{content:"\F659"}.mdi-phone-return:before{content:"\F82E"}.mdi-phone-rotate-landscape:before{content:"\F884"}.mdi-phone-rotate-portrait:before{content:"\F885"}.mdi-phone-settings:before{content:"\F3FD"}.mdi-phone-voip:before{content:"\F3FE"}.mdi-pi:before{content:"\F3FF"}.mdi-pi-box:before{content:"\F400"}.mdi-pi-hole:before{content:"\FDCD"}.mdi-piano:before{content:"\F67C"}.mdi-pickaxe:before{content:"\F8B6"}.mdi-pier:before{content:"\F886"}.mdi-pier-crane:before{content:"\F887"}.mdi-pig:before{content:"\F401"}.mdi-pill:before{content:"\F402"}.mdi-pillar:before{content:"\F701"}.mdi-pin:before{content:"\F403"}.mdi-pin-off:before{content:"\F404"}.mdi-pin-off-outline:before{content:"\F92F"}.mdi-pin-outline:before{content:"\F930"}.mdi-pine-tree:before{content:"\F405"}.mdi-pine-tree-box:before{content:"\F406"}.mdi-pinterest:before{content:"\F407"}.mdi-pinterest-box:before{content:"\F408"}.mdi-pinwheel:before{content:"\FAD4"}.mdi-pinwheel-outline:before{content:"\FAD5"}.mdi-pipe:before{content:"\F7E4"}.mdi-pipe-disconnected:before{content:"\F7E5"}.mdi-pipe-leak:before{content:"\F888"}.mdi-pirate:before{content:"\FA07"}.mdi-pistol:before{content:"\F702"}.mdi-piston:before{content:"\F889"}.mdi-pizza:before{content:"\F409"}.mdi-play:before{content:"\F40A"}.mdi-play-box-outline:before{content:"\F40B"}.mdi-play-circle:before{content:"\F40C"}.mdi-play-circle-outline:before{content:"\F40D"}.mdi-play-network:before{content:"\F88A"}.mdi-play-network-outline:before{content:"\FC93"}.mdi-play-pause:before{content:"\F40E"}.mdi-play-protected-content:before{content:"\F40F"}.mdi-play-speed:before{content:"\F8FE"}.mdi-playlist-check:before{content:"\F5C7"}.mdi-playlist-edit:before{content:"\F8FF"}.mdi-playlist-minus:before{content:"\F410"}.mdi-playlist-music:before{content:"\FC94"}.mdi-playlist-music-outline:before{content:"\FC95"}.mdi-playlist-play:before{content:"\F411"}.mdi-playlist-plus:before{content:"\F412"}.mdi-playlist-remove:before{content:"\F413"}.mdi-playlist-star:before{content:"\FDCE"}.mdi-playstation:before{content:"\F414"}.mdi-plex:before{content:"\F6B9"}.mdi-plus:before{content:"\F415"}.mdi-plus-box:before{content:"\F416"}.mdi-plus-box-outline:before{content:"\F703"}.mdi-plus-circle:before{content:"\F417"}.mdi-plus-circle-multiple-outline:before{content:"\F418"}.mdi-plus-circle-outline:before{content:"\F419"}.mdi-plus-minus:before{content:"\F991"}.mdi-plus-minus-box:before{content:"\F992"}.mdi-plus-network:before{content:"\F41A"}.mdi-plus-network-outline:before{content:"\FC96"}.mdi-plus-one:before{content:"\F41B"}.mdi-plus-outline:before{content:"\F704"}.mdi-pocket:before{content:"\F41C"}.mdi-podcast:before{content:"\F993"}.mdi-podium:before{content:"\FD01"}.mdi-podium-bronze:before{content:"\FD02"}.mdi-podium-gold:before{content:"\FD03"}.mdi-podium-silver:before{content:"\FD04"}.mdi-point-of-sale:before{content:"\FD6E"}.mdi-pokeball:before{content:"\F41D"}.mdi-pokemon-go:before{content:"\FA08"}.mdi-poker-chip:before{content:"\F82F"}.mdi-polaroid:before{content:"\F41E"}.mdi-poll:before{content:"\F41F"}.mdi-poll-box:before{content:"\F420"}.mdi-polymer:before{content:"\F421"}.mdi-pool:before{content:"\F606"}.mdi-popcorn:before{content:"\F422"}.mdi-postage-stamp:before{content:"\FC97"}.mdi-pot:before{content:"\F65A"}.mdi-pot-mix:before{content:"\F65B"}.mdi-pound:before{content:"\F423"}.mdi-pound-box:before{content:"\F424"}.mdi-power:before{content:"\F425"}.mdi-power-cycle:before{content:"\F900"}.mdi-power-off:before{content:"\F901"}.mdi-power-on:before{content:"\F902"}.mdi-power-plug:before{content:"\F6A4"}.mdi-power-plug-off:before{content:"\F6A5"}.mdi-power-settings:before{content:"\F426"}.mdi-power-sleep:before{content:"\F903"}.mdi-power-socket:before{content:"\F427"}.mdi-power-socket-au:before{content:"\F904"}.mdi-power-socket-eu:before{content:"\F7E6"}.mdi-power-socket-uk:before{content:"\F7E7"}.mdi-power-socket-us:before{content:"\F7E8"}.mdi-power-standby:before{content:"\F905"}.mdi-powershell:before{content:"\FA09"}.mdi-prescription:before{content:"\F705"}.mdi-presentation:before{content:"\F428"}.mdi-presentation-play:before{content:"\F429"}.mdi-printer:before{content:"\F42A"}.mdi-printer-3d:before{content:"\F42B"}.mdi-printer-alert:before{content:"\F42C"}.mdi-printer-settings:before{content:"\F706"}.mdi-printer-wireless:before{content:"\FA0A"}.mdi-priority-high:before{content:"\F603"}.mdi-priority-low:before{content:"\F604"}.mdi-professional-hexagon:before{content:"\F42D"}.mdi-progress-alert:before{content:"\FC98"}.mdi-progress-check:before{content:"\F994"}.mdi-progress-clock:before{content:"\F995"}.mdi-progress-download:before{content:"\F996"}.mdi-progress-upload:before{content:"\F997"}.mdi-progress-wrench:before{content:"\FC99"}.mdi-projector:before{content:"\F42E"}.mdi-projector-screen:before{content:"\F42F"}.mdi-publish:before{content:"\F6A6"}.mdi-pulse:before{content:"\F430"}.mdi-pumpkin:before{content:"\FB9B"}.mdi-puzzle:before{content:"\F431"}.mdi-puzzle-outline:before{content:"\FA65"}.mdi-qi:before{content:"\F998"}.mdi-qqchat:before{content:"\F605"}.mdi-qrcode:before{content:"\F432"}.mdi-qrcode-edit:before{content:"\F8B7"}.mdi-qrcode-scan:before{content:"\F433"}.mdi-quadcopter:before{content:"\F434"}.mdi-quality-high:before{content:"\F435"}.mdi-quality-low:before{content:"\FA0B"}.mdi-quality-medium:before{content:"\FA0C"}.mdi-quicktime:before{content:"\F436"}.mdi-quora:before{content:"\FD05"}.mdi-rabbit:before{content:"\F906"}.mdi-racing-helmet:before{content:"\FD6F"}.mdi-racquetball:before{content:"\FD70"}.mdi-radar:before{content:"\F437"}.mdi-radiator:before{content:"\F438"}.mdi-radiator-disabled:before{content:"\FAD6"}.mdi-radiator-off:before{content:"\FAD7"}.mdi-radio:before{content:"\F439"}.mdi-radio-am:before{content:"\FC9A"}.mdi-radio-fm:before{content:"\FC9B"}.mdi-radio-handheld:before{content:"\F43A"}.mdi-radio-tower:before{content:"\F43B"}.mdi-radioactive:before{content:"\F43C"}.mdi-radiobox-blank:before{content:"\F43D"}.mdi-radiobox-marked:before{content:"\F43E"}.mdi-radius:before{content:"\FC9C"}.mdi-radius-outline:before{content:"\FC9D"}.mdi-raspberry-pi:before{content:"\F43F"}.mdi-ray-end:before{content:"\F440"}.mdi-ray-end-arrow:before{content:"\F441"}.mdi-ray-start:before{content:"\F442"}.mdi-ray-start-arrow:before{content:"\F443"}.mdi-ray-start-end:before{content:"\F444"}.mdi-ray-vertex:before{content:"\F445"}.mdi-react:before{content:"\F707"}.mdi-read:before{content:"\F447"}.mdi-receipt:before{content:"\F449"}.mdi-record:before{content:"\F44A"}.mdi-record-player:before{content:"\F999"}.mdi-record-rec:before{content:"\F44B"}.mdi-recycle:before{content:"\F44C"}.mdi-reddit:before{content:"\F44D"}.mdi-redo:before{content:"\F44E"}.mdi-redo-variant:before{content:"\F44F"}.mdi-reflect-horizontal:before{content:"\FA0D"}.mdi-reflect-vertical:before{content:"\FA0E"}.mdi-refresh:before{content:"\F450"}.mdi-regex:before{content:"\F451"}.mdi-registered-trademark:before{content:"\FA66"}.mdi-relative-scale:before{content:"\F452"}.mdi-reload:before{content:"\F453"}.mdi-reminder:before{content:"\F88B"}.mdi-remote:before{content:"\F454"}.mdi-remote-desktop:before{content:"\F8B8"}.mdi-rename-box:before{content:"\F455"}.mdi-reorder-horizontal:before{content:"\F687"}.mdi-reorder-vertical:before{content:"\F688"}.mdi-repeat:before{content:"\F456"}.mdi-repeat-off:before{content:"\F457"}.mdi-repeat-once:before{content:"\F458"}.mdi-replay:before{content:"\F459"}.mdi-reply:before{content:"\F45A"}.mdi-reply-all:before{content:"\F45B"}.mdi-reproduction:before{content:"\F45C"}.mdi-resistor:before{content:"\FB1F"}.mdi-resistor-nodes:before{content:"\FB20"}.mdi-resize:before{content:"\FA67"}.mdi-resize-bottom-right:before{content:"\F45D"}.mdi-responsive:before{content:"\F45E"}.mdi-restart:before{content:"\F708"}.mdi-restart-off:before{content:"\FD71"}.mdi-restore:before{content:"\F99A"}.mdi-restore-clock:before{content:"\F6A7"}.mdi-rewind:before{content:"\F45F"}.mdi-rewind-10:before{content:"\FD06"}.mdi-rewind-30:before{content:"\FD72"}.mdi-rewind-outline:before{content:"\F709"}.mdi-rhombus:before{content:"\F70A"}.mdi-rhombus-medium:before{content:"\FA0F"}.mdi-rhombus-outline:before{content:"\F70B"}.mdi-rhombus-split:before{content:"\FA10"}.mdi-ribbon:before{content:"\F460"}.mdi-rice:before{content:"\F7E9"}.mdi-ring:before{content:"\F7EA"}.mdi-road:before{content:"\F461"}.mdi-road-variant:before{content:"\F462"}.mdi-robot:before{content:"\F6A8"}.mdi-robot-industrial:before{content:"\FB21"}.mdi-robot-vacuum:before{content:"\F70C"}.mdi-robot-vacuum-variant:before{content:"\F907"}.mdi-rocket:before{content:"\F463"}.mdi-roller-skate:before{content:"\FD07"}.mdi-rollerblade:before{content:"\FD08"}.mdi-rollupjs:before{content:"\FB9C"}.mdi-room-service:before{content:"\F88C"}.mdi-room-service-outline:before{content:"\FD73"}.mdi-rotate-3d:before{content:"\F464"}.mdi-rotate-left:before{content:"\F465"}.mdi-rotate-left-variant:before{content:"\F466"}.mdi-rotate-orbit:before{content:"\FD74"}.mdi-rotate-right:before{content:"\F467"}.mdi-rotate-right-variant:before{content:"\F468"}.mdi-rounded-corner:before{content:"\F607"}.mdi-router-wireless:before{content:"\F469"}.mdi-router-wireless-settings:before{content:"\FA68"}.mdi-routes:before{content:"\F46A"}.mdi-rowing:before{content:"\F608"}.mdi-rss:before{content:"\F46B"}.mdi-rss-box:before{content:"\F46C"}.mdi-ruby:before{content:"\FD09"}.mdi-rugby:before{content:"\FD75"}.mdi-ruler:before{content:"\F46D"}.mdi-ruler-square:before{content:"\FC9E"}.mdi-run:before{content:"\F70D"}.mdi-run-fast:before{content:"\F46E"}.mdi-sack:before{content:"\FD0A"}.mdi-sack-percent:before{content:"\FD0B"}.mdi-safe:before{content:"\FA69"}.mdi-safety-goggles:before{content:"\FD0C"}.mdi-sale:before{content:"\F46F"}.mdi-salesforce:before{content:"\F88D"}.mdi-sass:before{content:"\F7EB"}.mdi-satellite:before{content:"\F470"}.mdi-satellite-uplink:before{content:"\F908"}.mdi-satellite-variant:before{content:"\F471"}.mdi-sausage:before{content:"\F8B9"}.mdi-saxophone:before{content:"\F609"}.mdi-scale:before{content:"\F472"}.mdi-scale-balance:before{content:"\F5D1"}.mdi-scale-bathroom:before{content:"\F473"}.mdi-scanner:before{content:"\F6AA"}.mdi-scanner-off:before{content:"\F909"}.mdi-school:before{content:"\F474"}.mdi-scissors-cutting:before{content:"\FA6A"}.mdi-screen-rotation:before{content:"\F475"}.mdi-screen-rotation-lock:before{content:"\F476"}.mdi-screw-flat-top:before{content:"\FDCF"}.mdi-screw-lag:before{content:"\FDD0"}.mdi-screw-machine-flat-top:before{content:"\FDD1"}.mdi-screw-machine-round-top:before{content:"\FDD2"}.mdi-screw-round-top:before{content:"\FDD3"}.mdi-screwdriver:before{content:"\F477"}.mdi-script:before{content:"\FB9D"}.mdi-script-outline:before{content:"\F478"}.mdi-script-text:before{content:"\FB9E"}.mdi-script-text-outline:before{content:"\FB9F"}.mdi-sd:before{content:"\F479"}.mdi-seal:before{content:"\F47A"}.mdi-search-web:before{content:"\F70E"}.mdi-seat:before{content:"\FC9F"}.mdi-seat-flat:before{content:"\F47B"}.mdi-seat-flat-angled:before{content:"\F47C"}.mdi-seat-individual-suite:before{content:"\F47D"}.mdi-seat-legroom-extra:before{content:"\F47E"}.mdi-seat-legroom-normal:before{content:"\F47F"}.mdi-seat-legroom-reduced:before{content:"\F480"}.mdi-seat-outline:before{content:"\FCA0"}.mdi-seat-recline-extra:before{content:"\F481"}.mdi-seat-recline-normal:before{content:"\F482"}.mdi-seatbelt:before{content:"\FCA1"}.mdi-security:before{content:"\F483"}.mdi-security-network:before{content:"\F484"}.mdi-select:before{content:"\F485"}.mdi-select-all:before{content:"\F486"}.mdi-select-color:before{content:"\FD0D"}.mdi-select-compare:before{content:"\FAD8"}.mdi-select-drag:before{content:"\FA6B"}.mdi-select-inverse:before{content:"\F487"}.mdi-select-off:before{content:"\F488"}.mdi-selection:before{content:"\F489"}.mdi-selection-drag:before{content:"\FA6C"}.mdi-selection-ellipse:before{content:"\FD0E"}.mdi-selection-off:before{content:"\F776"}.mdi-send:before{content:"\F48A"}.mdi-send-circle:before{content:"\FDD4"}.mdi-send-circle-outline:before{content:"\FDD5"}.mdi-send-lock:before{content:"\F7EC"}.mdi-serial-port:before{content:"\F65C"}.mdi-server:before{content:"\F48B"}.mdi-server-minus:before{content:"\F48C"}.mdi-server-network:before{content:"\F48D"}.mdi-server-network-off:before{content:"\F48E"}.mdi-server-off:before{content:"\F48F"}.mdi-server-plus:before{content:"\F490"}.mdi-server-remove:before{content:"\F491"}.mdi-server-security:before{content:"\F492"}.mdi-set-all:before{content:"\F777"}.mdi-set-center:before{content:"\F778"}.mdi-set-center-right:before{content:"\F779"}.mdi-set-left:before{content:"\F77A"}.mdi-set-left-center:before{content:"\F77B"}.mdi-set-left-right:before{content:"\F77C"}.mdi-set-none:before{content:"\F77D"}.mdi-set-right:before{content:"\F77E"}.mdi-set-top-box:before{content:"\F99E"}.mdi-settings:before{content:"\F493"}.mdi-settings-box:before{content:"\F494"}.mdi-settings-helper:before{content:"\FA6D"}.mdi-settings-outline:before{content:"\F8BA"}.mdi-shape:before{content:"\F830"}.mdi-shape-circle-plus:before{content:"\F65D"}.mdi-shape-outline:before{content:"\F831"}.mdi-shape-plus:before{content:"\F495"}.mdi-shape-polygon-plus:before{content:"\F65E"}.mdi-shape-rectangle-plus:before{content:"\F65F"}.mdi-shape-square-plus:before{content:"\F660"}.mdi-share:before{content:"\F496"}.mdi-share-outline:before{content:"\F931"}.mdi-share-variant:before{content:"\F497"}.mdi-sheep:before{content:"\FCA2"}.mdi-shield:before{content:"\F498"}.mdi-shield-account:before{content:"\F88E"}.mdi-shield-account-outline:before{content:"\FA11"}.mdi-shield-airplane:before{content:"\F6BA"}.mdi-shield-airplane-outline:before{content:"\FCA3"}.mdi-shield-check:before{content:"\F565"}.mdi-shield-check-outline:before{content:"\FCA4"}.mdi-shield-cross:before{content:"\FCA5"}.mdi-shield-cross-outline:before{content:"\FCA6"}.mdi-shield-half-full:before{content:"\F77F"}.mdi-shield-home:before{content:"\F689"}.mdi-shield-home-outline:before{content:"\FCA7"}.mdi-shield-key:before{content:"\FBA0"}.mdi-shield-key-outline:before{content:"\FBA1"}.mdi-shield-link-variant:before{content:"\FD0F"}.mdi-shield-link-variant-outline:before{content:"\FD10"}.mdi-shield-lock:before{content:"\F99C"}.mdi-shield-lock-outline:before{content:"\FCA8"}.mdi-shield-off:before{content:"\F99D"}.mdi-shield-off-outline:before{content:"\F99B"}.mdi-shield-outline:before{content:"\F499"}.mdi-shield-plus:before{content:"\FAD9"}.mdi-shield-plus-outline:before{content:"\FADA"}.mdi-shield-remove:before{content:"\FADB"}.mdi-shield-remove-outline:before{content:"\FADC"}.mdi-shield-search:before{content:"\FD76"}.mdi-ship-wheel:before{content:"\F832"}.mdi-shoe-formal:before{content:"\FB22"}.mdi-shoe-heel:before{content:"\FB23"}.mdi-shoe-print:before{content:"\FDD6"}.mdi-shopify:before{content:"\FADD"}.mdi-shopping:before{content:"\F49A"}.mdi-shopping-music:before{content:"\F49B"}.mdi-shovel:before{content:"\F70F"}.mdi-shovel-off:before{content:"\F710"}.mdi-shower:before{content:"\F99F"}.mdi-shower-head:before{content:"\F9A0"}.mdi-shredder:before{content:"\F49C"}.mdi-shuffle:before{content:"\F49D"}.mdi-shuffle-disabled:before{content:"\F49E"}.mdi-shuffle-variant:before{content:"\F49F"}.mdi-sigma:before{content:"\F4A0"}.mdi-sigma-lower:before{content:"\F62B"}.mdi-sign-caution:before{content:"\F4A1"}.mdi-sign-direction:before{content:"\F780"}.mdi-sign-text:before{content:"\F781"}.mdi-signal:before{content:"\F4A2"}.mdi-signal-2g:before{content:"\F711"}.mdi-signal-3g:before{content:"\F712"}.mdi-signal-4g:before{content:"\F713"}.mdi-signal-5g:before{content:"\FA6E"}.mdi-signal-cellular-1:before{content:"\F8BB"}.mdi-signal-cellular-2:before{content:"\F8BC"}.mdi-signal-cellular-3:before{content:"\F8BD"}.mdi-signal-cellular-outline:before{content:"\F8BE"}.mdi-signal-hspa:before{content:"\F714"}.mdi-signal-hspa-plus:before{content:"\F715"}.mdi-signal-off:before{content:"\F782"}.mdi-signal-variant:before{content:"\F60A"}.mdi-signature:before{content:"\FDD7"}.mdi-signature-freehand:before{content:"\FDD8"}.mdi-signature-image:before{content:"\FDD9"}.mdi-signature-text:before{content:"\FDDA"}.mdi-silo:before{content:"\FB24"}.mdi-silverware:before{content:"\F4A3"}.mdi-silverware-fork:before{content:"\F4A4"}.mdi-silverware-fork-knife:before{content:"\FA6F"}.mdi-silverware-spoon:before{content:"\F4A5"}.mdi-silverware-variant:before{content:"\F4A6"}.mdi-sim:before{content:"\F4A7"}.mdi-sim-alert:before{content:"\F4A8"}.mdi-sim-off:before{content:"\F4A9"}.mdi-sina-weibo:before{content:"\FADE"}.mdi-sitemap:before{content:"\F4AA"}.mdi-skate:before{content:"\FD11"}.mdi-skew-less:before{content:"\FD12"}.mdi-skew-more:before{content:"\FD13"}.mdi-skip-backward:before{content:"\F4AB"}.mdi-skip-forward:before{content:"\F4AC"}.mdi-skip-next:before{content:"\F4AD"}.mdi-skip-next-circle:before{content:"\F661"}.mdi-skip-next-circle-outline:before{content:"\F662"}.mdi-skip-previous:before{content:"\F4AE"}.mdi-skip-previous-circle:before{content:"\F663"}.mdi-skip-previous-circle-outline:before{content:"\F664"}.mdi-skull:before{content:"\F68B"}.mdi-skull-crossbones:before{content:"\FBA2"}.mdi-skull-crossbones-outline:before{content:"\FBA3"}.mdi-skull-outline:before{content:"\FBA4"}.mdi-skype:before{content:"\F4AF"}.mdi-skype-business:before{content:"\F4B0"}.mdi-slack:before{content:"\F4B1"}.mdi-slackware:before{content:"\F90A"}.mdi-sleep:before{content:"\F4B2"}.mdi-sleep-off:before{content:"\F4B3"}.mdi-slope-downhill:before{content:"\FDDB"}.mdi-slope-uphill:before{content:"\FDDC"}.mdi-smog:before{content:"\FA70"}.mdi-smoke-detector:before{content:"\F392"}.mdi-smoking:before{content:"\F4B4"}.mdi-smoking-off:before{content:"\F4B5"}.mdi-snapchat:before{content:"\F4B6"}.mdi-snowflake:before{content:"\F716"}.mdi-snowman:before{content:"\F4B7"}.mdi-soccer:before{content:"\F4B8"}.mdi-soccer-field:before{content:"\F833"}.mdi-sofa:before{content:"\F4B9"}.mdi-solar-panel:before{content:"\FD77"}.mdi-solar-panel-large:before{content:"\FD78"}.mdi-solar-power:before{content:"\FA71"}.mdi-solid:before{content:"\F68C"}.mdi-sort:before{content:"\F4BA"}.mdi-sort-alphabetical:before{content:"\F4BB"}.mdi-sort-ascending:before{content:"\F4BC"}.mdi-sort-descending:before{content:"\F4BD"}.mdi-sort-numeric:before{content:"\F4BE"}.mdi-sort-variant:before{content:"\F4BF"}.mdi-sort-variant-lock:before{content:"\FCA9"}.mdi-sort-variant-lock-open:before{content:"\FCAA"}.mdi-soundcloud:before{content:"\F4C0"}.mdi-source-branch:before{content:"\F62C"}.mdi-source-commit:before{content:"\F717"}.mdi-source-commit-end:before{content:"\F718"}.mdi-source-commit-end-local:before{content:"\F719"}.mdi-source-commit-local:before{content:"\F71A"}.mdi-source-commit-next-local:before{content:"\F71B"}.mdi-source-commit-start:before{content:"\F71C"}.mdi-source-commit-start-next-local:before{content:"\F71D"}.mdi-source-fork:before{content:"\F4C1"}.mdi-source-merge:before{content:"\F62D"}.mdi-source-pull:before{content:"\F4C2"}.mdi-source-repository:before{content:"\FCAB"}.mdi-source-repository-multiple:before{content:"\FCAC"}.mdi-soy-sauce:before{content:"\F7ED"}.mdi-spa:before{content:"\FCAD"}.mdi-spa-outline:before{content:"\FCAE"}.mdi-space-invaders:before{content:"\FBA5"}.mdi-speaker:before{content:"\F4C3"}.mdi-speaker-bluetooth:before{content:"\F9A1"}.mdi-speaker-multiple:before{content:"\FD14"}.mdi-speaker-off:before{content:"\F4C4"}.mdi-speaker-wireless:before{content:"\F71E"}.mdi-speedometer:before{content:"\F4C5"}.mdi-spellcheck:before{content:"\F4C6"}.mdi-spider-web:before{content:"\FBA6"}.mdi-spotify:before{content:"\F4C7"}.mdi-spotlight:before{content:"\F4C8"}.mdi-spotlight-beam:before{content:"\F4C9"}.mdi-spray:before{content:"\F665"}.mdi-spray-bottle:before{content:"\FADF"}.mdi-square:before{content:"\F763"}.mdi-square-edit-outline:before{content:"\F90B"}.mdi-square-inc:before{content:"\F4CA"}.mdi-square-inc-cash:before{content:"\F4CB"}.mdi-square-medium:before{content:"\FA12"}.mdi-square-medium-outline:before{content:"\FA13"}.mdi-square-outline:before{content:"\F762"}.mdi-square-root:before{content:"\F783"}.mdi-square-root-box:before{content:"\F9A2"}.mdi-square-small:before{content:"\FA14"}.mdi-squeegee:before{content:"\FAE0"}.mdi-ssh:before{content:"\F8BF"}.mdi-stack-exchange:before{content:"\F60B"}.mdi-stack-overflow:before{content:"\F4CC"}.mdi-stadium:before{content:"\F71F"}.mdi-stairs:before{content:"\F4CD"}.mdi-stamper:before{content:"\FD15"}.mdi-standard-definition:before{content:"\F7EE"}.mdi-star:before{content:"\F4CE"}.mdi-star-box:before{content:"\FA72"}.mdi-star-box-outline:before{content:"\FA73"}.mdi-star-circle:before{content:"\F4CF"}.mdi-star-circle-outline:before{content:"\F9A3"}.mdi-star-face:before{content:"\F9A4"}.mdi-star-four-points:before{content:"\FAE1"}.mdi-star-four-points-outline:before{content:"\FAE2"}.mdi-star-half:before{content:"\F4D0"}.mdi-star-off:before{content:"\F4D1"}.mdi-star-outline:before{content:"\F4D2"}.mdi-star-three-points:before{content:"\FAE3"}.mdi-star-three-points-outline:before{content:"\FAE4"}.mdi-steam:before{content:"\F4D3"}.mdi-steam-box:before{content:"\F90C"}.mdi-steering:before{content:"\F4D4"}.mdi-steering-off:before{content:"\F90D"}.mdi-step-backward:before{content:"\F4D5"}.mdi-step-backward-2:before{content:"\F4D6"}.mdi-step-forward:before{content:"\F4D7"}.mdi-step-forward-2:before{content:"\F4D8"}.mdi-stethoscope:before{content:"\F4D9"}.mdi-sticker:before{content:"\F5D0"}.mdi-sticker-emoji:before{content:"\F784"}.mdi-stocking:before{content:"\F4DA"}.mdi-stop:before{content:"\F4DB"}.mdi-stop-circle:before{content:"\F666"}.mdi-stop-circle-outline:before{content:"\F667"}.mdi-store:before{content:"\F4DC"}.mdi-store-24-hour:before{content:"\F4DD"}.mdi-stove:before{content:"\F4DE"}.mdi-strava:before{content:"\FB25"}.mdi-subdirectory-arrow-left:before{content:"\F60C"}.mdi-subdirectory-arrow-right:before{content:"\F60D"}.mdi-subtitles:before{content:"\FA15"}.mdi-subtitles-outline:before{content:"\FA16"}.mdi-subway:before{content:"\F6AB"}.mdi-subway-alert-variant:before{content:"\FD79"}.mdi-subway-variant:before{content:"\F4DF"}.mdi-summit:before{content:"\F785"}.mdi-sunglasses:before{content:"\F4E0"}.mdi-surround-sound:before{content:"\F5C5"}.mdi-surround-sound-2-0:before{content:"\F7EF"}.mdi-surround-sound-3-1:before{content:"\F7F0"}.mdi-surround-sound-5-1:before{content:"\F7F1"}.mdi-surround-sound-7-1:before{content:"\F7F2"}.mdi-svg:before{content:"\F720"}.mdi-swap-horizontal:before{content:"\F4E1"}.mdi-swap-horizontal-bold:before{content:"\FBA9"}.mdi-swap-horizontal-variant:before{content:"\F8C0"}.mdi-swap-vertical:before{content:"\F4E2"}.mdi-swap-vertical-bold:before{content:"\FBAA"}.mdi-swap-vertical-variant:before{content:"\F8C1"}.mdi-swim:before{content:"\F4E3"}.mdi-switch:before{content:"\F4E4"}.mdi-sword:before{content:"\F4E5"}.mdi-sword-cross:before{content:"\F786"}.mdi-symfony:before{content:"\FAE5"}.mdi-sync:before{content:"\F4E6"}.mdi-sync-alert:before{content:"\F4E7"}.mdi-sync-off:before{content:"\F4E8"}.mdi-tab:before{content:"\F4E9"}.mdi-tab-minus:before{content:"\FB26"}.mdi-tab-plus:before{content:"\F75B"}.mdi-tab-remove:before{content:"\FB27"}.mdi-tab-unselected:before{content:"\F4EA"}.mdi-table:before{content:"\F4EB"}.mdi-table-border:before{content:"\FA17"}.mdi-table-column:before{content:"\F834"}.mdi-table-column-plus-after:before{content:"\F4EC"}.mdi-table-column-plus-before:before{content:"\F4ED"}.mdi-table-column-remove:before{content:"\F4EE"}.mdi-table-column-width:before{content:"\F4EF"}.mdi-table-edit:before{content:"\F4F0"}.mdi-table-large:before{content:"\F4F1"}.mdi-table-merge-cells:before{content:"\F9A5"}.mdi-table-of-contents:before{content:"\F835"}.mdi-table-plus:before{content:"\FA74"}.mdi-table-remove:before{content:"\FA75"}.mdi-table-row:before{content:"\F836"}.mdi-table-row-height:before{content:"\F4F2"}.mdi-table-row-plus-after:before{content:"\F4F3"}.mdi-table-row-plus-before:before{content:"\F4F4"}.mdi-table-row-remove:before{content:"\F4F5"}.mdi-table-search:before{content:"\F90E"}.mdi-table-settings:before{content:"\F837"}.mdi-tablet:before{content:"\F4F6"}.mdi-tablet-android:before{content:"\F4F7"}.mdi-tablet-cellphone:before{content:"\F9A6"}.mdi-tablet-ipad:before{content:"\F4F8"}.mdi-taco:before{content:"\F761"}.mdi-tag:before{content:"\F4F9"}.mdi-tag-faces:before{content:"\F4FA"}.mdi-tag-heart:before{content:"\F68A"}.mdi-tag-heart-outline:before{content:"\FBAB"}.mdi-tag-minus:before{content:"\F90F"}.mdi-tag-multiple:before{content:"\F4FB"}.mdi-tag-outline:before{content:"\F4FC"}.mdi-tag-plus:before{content:"\F721"}.mdi-tag-remove:before{content:"\F722"}.mdi-tag-text-outline:before{content:"\F4FD"}.mdi-tank:before{content:"\FD16"}.mdi-tape-measure:before{content:"\FB28"}.mdi-target:before{content:"\F4FE"}.mdi-target-account:before{content:"\FBAC"}.mdi-target-variant:before{content:"\FA76"}.mdi-taxi:before{content:"\F4FF"}.mdi-tea:before{content:"\FD7A"}.mdi-tea-outline:before{content:"\FD7B"}.mdi-teach:before{content:"\F88F"}.mdi-teamviewer:before{content:"\F500"}.mdi-telegram:before{content:"\F501"}.mdi-telescope:before{content:"\FB29"}.mdi-television:before{content:"\F502"}.mdi-television-box:before{content:"\F838"}.mdi-television-classic:before{content:"\F7F3"}.mdi-television-classic-off:before{content:"\F839"}.mdi-television-guide:before{content:"\F503"}.mdi-television-off:before{content:"\F83A"}.mdi-temperature-celsius:before{content:"\F504"}.mdi-temperature-fahrenheit:before{content:"\F505"}.mdi-temperature-kelvin:before{content:"\F506"}.mdi-tennis:before{content:"\FD7C"}.mdi-tennis-ball:before{content:"\F507"}.mdi-tent:before{content:"\F508"}.mdi-terrain:before{content:"\F509"}.mdi-test-tube:before{content:"\F668"}.mdi-test-tube-empty:before{content:"\F910"}.mdi-test-tube-off:before{content:"\F911"}.mdi-text:before{content:"\F9A7"}.mdi-text-shadow:before{content:"\F669"}.mdi-text-short:before{content:"\F9A8"}.mdi-text-subject:before{content:"\F9A9"}.mdi-text-to-speech:before{content:"\F50A"}.mdi-text-to-speech-off:before{content:"\F50B"}.mdi-textbox:before{content:"\F60E"}.mdi-textbox-password:before{content:"\F7F4"}.mdi-texture:before{content:"\F50C"}.mdi-theater:before{content:"\F50D"}.mdi-theme-light-dark:before{content:"\F50E"}.mdi-thermometer:before{content:"\F50F"}.mdi-thermometer-alert:before{content:"\FDDD"}.mdi-thermometer-chevron-down:before{content:"\FDDE"}.mdi-thermometer-chevron-up:before{content:"\FDDF"}.mdi-thermometer-lines:before{content:"\F510"}.mdi-thermometer-minus:before{content:"\FDE0"}.mdi-thermometer-plus:before{content:"\FDE1"}.mdi-thermostat:before{content:"\F393"}.mdi-thermostat-box:before{content:"\F890"}.mdi-thought-bubble:before{content:"\F7F5"}.mdi-thought-bubble-outline:before{content:"\F7F6"}.mdi-thumb-down:before{content:"\F511"}.mdi-thumb-down-outline:before{content:"\F512"}.mdi-thumb-up:before{content:"\F513"}.mdi-thumb-up-outline:before{content:"\F514"}.mdi-thumbs-up-down:before{content:"\F515"}.mdi-ticket:before{content:"\F516"}.mdi-ticket-account:before{content:"\F517"}.mdi-ticket-confirmation:before{content:"\F518"}.mdi-ticket-outline:before{content:"\F912"}.mdi-ticket-percent:before{content:"\F723"}.mdi-tie:before{content:"\F519"}.mdi-tilde:before{content:"\F724"}.mdi-timelapse:before{content:"\F51A"}.mdi-timeline:before{content:"\FBAD"}.mdi-timeline-outline:before{content:"\FBAE"}.mdi-timeline-text:before{content:"\FBAF"}.mdi-timeline-text-outline:before{content:"\FBB0"}.mdi-timer:before{content:"\F51B"}.mdi-timer-10:before{content:"\F51C"}.mdi-timer-3:before{content:"\F51D"}.mdi-timer-off:before{content:"\F51E"}.mdi-timer-sand:before{content:"\F51F"}.mdi-timer-sand-empty:before{content:"\F6AC"}.mdi-timer-sand-full:before{content:"\F78B"}.mdi-timetable:before{content:"\F520"}.mdi-toaster-oven:before{content:"\FCAF"}.mdi-toggle-switch:before{content:"\F521"}.mdi-toggle-switch-off:before{content:"\F522"}.mdi-toggle-switch-off-outline:before{content:"\FA18"}.mdi-toggle-switch-outline:before{content:"\FA19"}.mdi-toilet:before{content:"\F9AA"}.mdi-toolbox:before{content:"\F9AB"}.mdi-toolbox-outline:before{content:"\F9AC"}.mdi-tooltip:before{content:"\F523"}.mdi-tooltip-account:before{content:"\F00C"}.mdi-tooltip-edit:before{content:"\F524"}.mdi-tooltip-image:before{content:"\F525"}.mdi-tooltip-image-outline:before{content:"\FBB1"}.mdi-tooltip-outline:before{content:"\F526"}.mdi-tooltip-plus:before{content:"\FBB2"}.mdi-tooltip-plus-outline:before{content:"\F527"}.mdi-tooltip-text:before{content:"\F528"}.mdi-tooltip-text-outline:before{content:"\FBB3"}.mdi-tooth:before{content:"\F8C2"}.mdi-tooth-outline:before{content:"\F529"}.mdi-tor:before{content:"\F52A"}.mdi-tortoise:before{content:"\FD17"}.mdi-tournament:before{content:"\F9AD"}.mdi-tower-beach:before{content:"\F680"}.mdi-tower-fire:before{content:"\F681"}.mdi-towing:before{content:"\F83B"}.mdi-track-light:before{content:"\F913"}.mdi-trackpad:before{content:"\F7F7"}.mdi-trackpad-lock:before{content:"\F932"}.mdi-tractor:before{content:"\F891"}.mdi-trademark:before{content:"\FA77"}.mdi-traffic-light:before{content:"\F52B"}.mdi-train:before{content:"\F52C"}.mdi-train-car:before{content:"\FBB4"}.mdi-train-variant:before{content:"\F8C3"}.mdi-tram:before{content:"\F52D"}.mdi-transcribe:before{content:"\F52E"}.mdi-transcribe-close:before{content:"\F52F"}.mdi-transfer-down:before{content:"\FD7D"}.mdi-transfer-left:before{content:"\FD7E"}.mdi-transfer-right:before{content:"\F530"}.mdi-transfer-up:before{content:"\FD7F"}.mdi-transit-connection:before{content:"\FD18"}.mdi-transit-connection-variant:before{content:"\FD19"}.mdi-transit-transfer:before{content:"\F6AD"}.mdi-transition:before{content:"\F914"}.mdi-transition-masked:before{content:"\F915"}.mdi-translate:before{content:"\F5CA"}.mdi-translate-off:before{content:"\FDE2"}.mdi-transmission-tower:before{content:"\FD1A"}.mdi-trash-can:before{content:"\FA78"}.mdi-trash-can-outline:before{content:"\FA79"}.mdi-treasure-chest:before{content:"\F725"}.mdi-tree:before{content:"\F531"}.mdi-trello:before{content:"\F532"}.mdi-trending-down:before{content:"\F533"}.mdi-trending-neutral:before{content:"\F534"}.mdi-trending-up:before{content:"\F535"}.mdi-triangle:before{content:"\F536"}.mdi-triangle-outline:before{content:"\F537"}.mdi-triforce:before{content:"\FBB5"}.mdi-trophy:before{content:"\F538"}.mdi-trophy-award:before{content:"\F539"}.mdi-trophy-broken:before{content:"\FD80"}.mdi-trophy-outline:before{content:"\F53A"}.mdi-trophy-variant:before{content:"\F53B"}.mdi-trophy-variant-outline:before{content:"\F53C"}.mdi-truck:before{content:"\F53D"}.mdi-truck-check:before{content:"\FCB0"}.mdi-truck-delivery:before{content:"\F53E"}.mdi-truck-fast:before{content:"\F787"}.mdi-truck-trailer:before{content:"\F726"}.mdi-tshirt-crew:before{content:"\FA7A"}.mdi-tshirt-crew-outline:before{content:"\F53F"}.mdi-tshirt-v:before{content:"\FA7B"}.mdi-tshirt-v-outline:before{content:"\F540"}.mdi-tumble-dryer:before{content:"\F916"}.mdi-tumblr:before{content:"\F541"}.mdi-tumblr-box:before{content:"\F917"}.mdi-tumblr-reblog:before{content:"\F542"}.mdi-tune:before{content:"\F62E"}.mdi-tune-vertical:before{content:"\F66A"}.mdi-turnstile:before{content:"\FCB1"}.mdi-turnstile-outline:before{content:"\FCB2"}.mdi-turtle:before{content:"\FCB3"}.mdi-twitch:before{content:"\F543"}.mdi-twitter:before{content:"\F544"}.mdi-twitter-box:before{content:"\F545"}.mdi-twitter-circle:before{content:"\F546"}.mdi-twitter-retweet:before{content:"\F547"}.mdi-two-factor-authentication:before{content:"\F9AE"}.mdi-uber:before{content:"\F748"}.mdi-ubisoft:before{content:"\FBB6"}.mdi-ubuntu:before{content:"\F548"}.mdi-ultra-high-definition:before{content:"\F7F8"}.mdi-umbraco:before{content:"\F549"}.mdi-umbrella:before{content:"\F54A"}.mdi-umbrella-closed:before{content:"\F9AF"}.mdi-umbrella-outline:before{content:"\F54B"}.mdi-undo:before{content:"\F54C"}.mdi-undo-variant:before{content:"\F54D"}.mdi-unfold-less-horizontal:before{content:"\F54E"}.mdi-unfold-less-vertical:before{content:"\F75F"}.mdi-unfold-more-horizontal:before{content:"\F54F"}.mdi-unfold-more-vertical:before{content:"\F760"}.mdi-ungroup:before{content:"\F550"}.mdi-unity:before{content:"\F6AE"}.mdi-unreal:before{content:"\F9B0"}.mdi-untappd:before{content:"\F551"}.mdi-update:before{content:"\F6AF"}.mdi-upload:before{content:"\F552"}.mdi-upload-multiple:before{content:"\F83C"}.mdi-upload-network:before{content:"\F6F5"}.mdi-upload-network-outline:before{content:"\FCB4"}.mdi-upload-outline:before{content:"\FDE3"}.mdi-usb:before{content:"\F553"}.mdi-van-passenger:before{content:"\F7F9"}.mdi-van-utility:before{content:"\F7FA"}.mdi-vanish:before{content:"\F7FB"}.mdi-variable:before{content:"\FAE6"}.mdi-vector-arrange-above:before{content:"\F554"}.mdi-vector-arrange-below:before{content:"\F555"}.mdi-vector-bezier:before{content:"\FAE7"}.mdi-vector-circle:before{content:"\F556"}.mdi-vector-circle-variant:before{content:"\F557"}.mdi-vector-combine:before{content:"\F558"}.mdi-vector-curve:before{content:"\F559"}.mdi-vector-difference:before{content:"\F55A"}.mdi-vector-difference-ab:before{content:"\F55B"}.mdi-vector-difference-ba:before{content:"\F55C"}.mdi-vector-ellipse:before{content:"\F892"}.mdi-vector-intersection:before{content:"\F55D"}.mdi-vector-line:before{content:"\F55E"}.mdi-vector-point:before{content:"\F55F"}.mdi-vector-polygon:before{content:"\F560"}.mdi-vector-polyline:before{content:"\F561"}.mdi-vector-radius:before{content:"\F749"}.mdi-vector-rectangle:before{content:"\F5C6"}.mdi-vector-selection:before{content:"\F562"}.mdi-vector-square:before{content:"\F001"}.mdi-vector-triangle:before{content:"\F563"}.mdi-vector-union:before{content:"\F564"}.mdi-venmo:before{content:"\F578"}.mdi-vhs:before{content:"\FA1A"}.mdi-vibrate:before{content:"\F566"}.mdi-vibrate-off:before{content:"\FCB5"}.mdi-video:before{content:"\F567"}.mdi-video-3d:before{content:"\F7FC"}.mdi-video-4k-box:before{content:"\F83D"}.mdi-video-account:before{content:"\F918"}.mdi-video-image:before{content:"\F919"}.mdi-video-input-antenna:before{content:"\F83E"}.mdi-video-input-component:before{content:"\F83F"}.mdi-video-input-hdmi:before{content:"\F840"}.mdi-video-input-svideo:before{content:"\F841"}.mdi-video-minus:before{content:"\F9B1"}.mdi-video-off:before{content:"\F568"}.mdi-video-off-outline:before{content:"\FBB7"}.mdi-video-outline:before{content:"\FBB8"}.mdi-video-plus:before{content:"\F9B2"}.mdi-video-stabilization:before{content:"\F91A"}.mdi-video-switch:before{content:"\F569"}.mdi-video-vintage:before{content:"\FA1B"}.mdi-view-agenda:before{content:"\F56A"}.mdi-view-array:before{content:"\F56B"}.mdi-view-carousel:before{content:"\F56C"}.mdi-view-column:before{content:"\F56D"}.mdi-view-dashboard:before{content:"\F56E"}.mdi-view-dashboard-outline:before{content:"\FA1C"}.mdi-view-dashboard-variant:before{content:"\F842"}.mdi-view-day:before{content:"\F56F"}.mdi-view-grid:before{content:"\F570"}.mdi-view-headline:before{content:"\F571"}.mdi-view-list:before{content:"\F572"}.mdi-view-module:before{content:"\F573"}.mdi-view-parallel:before{content:"\F727"}.mdi-view-quilt:before{content:"\F574"}.mdi-view-sequential:before{content:"\F728"}.mdi-view-split-horizontal:before{content:"\FBA7"}.mdi-view-split-vertical:before{content:"\FBA8"}.mdi-view-stream:before{content:"\F575"}.mdi-view-week:before{content:"\F576"}.mdi-vimeo:before{content:"\F577"}.mdi-violin:before{content:"\F60F"}.mdi-virtual-reality:before{content:"\F893"}.mdi-visual-studio:before{content:"\F610"}.mdi-visual-studio-code:before{content:"\FA1D"}.mdi-vk:before{content:"\F579"}.mdi-vk-box:before{content:"\F57A"}.mdi-vk-circle:before{content:"\F57B"}.mdi-vlc:before{content:"\F57C"}.mdi-voice:before{content:"\F5CB"}.mdi-voicemail:before{content:"\F57D"}.mdi-volleyball:before{content:"\F9B3"}.mdi-volume-high:before{content:"\F57E"}.mdi-volume-low:before{content:"\F57F"}.mdi-volume-medium:before{content:"\F580"}.mdi-volume-minus:before{content:"\F75D"}.mdi-volume-mute:before{content:"\F75E"}.mdi-volume-off:before{content:"\F581"}.mdi-volume-plus:before{content:"\F75C"}.mdi-volume-variant-off:before{content:"\FDE4"}.mdi-vote:before{content:"\FA1E"}.mdi-vote-outline:before{content:"\FA1F"}.mdi-vpn:before{content:"\F582"}.mdi-vuejs:before{content:"\F843"}.mdi-walk:before{content:"\F583"}.mdi-wall:before{content:"\F7FD"}.mdi-wall-sconce:before{content:"\F91B"}.mdi-wall-sconce-flat:before{content:"\F91C"}.mdi-wall-sconce-variant:before{content:"\F91D"}.mdi-wallet:before{content:"\F584"}.mdi-wallet-giftcard:before{content:"\F585"}.mdi-wallet-membership:before{content:"\F586"}.mdi-wallet-outline:before{content:"\FBB9"}.mdi-wallet-travel:before{content:"\F587"}.mdi-wallpaper:before{content:"\FDE5"}.mdi-wan:before{content:"\F588"}.mdi-washing-machine:before{content:"\F729"}.mdi-watch:before{content:"\F589"}.mdi-watch-export:before{content:"\F58A"}.mdi-watch-export-variant:before{content:"\F894"}.mdi-watch-import:before{content:"\F58B"}.mdi-watch-import-variant:before{content:"\F895"}.mdi-watch-variant:before{content:"\F896"}.mdi-watch-vibrate:before{content:"\F6B0"}.mdi-watch-vibrate-off:before{content:"\FCB6"}.mdi-water:before{content:"\F58C"}.mdi-water-off:before{content:"\F58D"}.mdi-water-outline:before{content:"\FDE6"}.mdi-water-percent:before{content:"\F58E"}.mdi-water-pump:before{content:"\F58F"}.mdi-watermark:before{content:"\F612"}.mdi-waves:before{content:"\F78C"}.mdi-waze:before{content:"\FBBA"}.mdi-weather-cloudy:before{content:"\F590"}.mdi-weather-fog:before{content:"\F591"}.mdi-weather-hail:before{content:"\F592"}.mdi-weather-hurricane:before{content:"\F897"}.mdi-weather-lightning:before{content:"\F593"}.mdi-weather-lightning-rainy:before{content:"\F67D"}.mdi-weather-night:before{content:"\F594"}.mdi-weather-partlycloudy:before{content:"\F595"}.mdi-weather-pouring:before{content:"\F596"}.mdi-weather-rainy:before{content:"\F597"}.mdi-weather-snowy:before{content:"\F598"}.mdi-weather-snowy-rainy:before{content:"\F67E"}.mdi-weather-sunny:before{content:"\F599"}.mdi-weather-sunset:before{content:"\F59A"}.mdi-weather-sunset-down:before{content:"\F59B"}.mdi-weather-sunset-up:before{content:"\F59C"}.mdi-weather-windy:before{content:"\F59D"}.mdi-weather-windy-variant:before{content:"\F59E"}.mdi-web:before{content:"\F59F"}.mdi-webcam:before{content:"\F5A0"}.mdi-webhook:before{content:"\F62F"}.mdi-webpack:before{content:"\F72A"}.mdi-wechat:before{content:"\F611"}.mdi-weight:before{content:"\F5A1"}.mdi-weight-gram:before{content:"\FD1B"}.mdi-weight-kilogram:before{content:"\F5A2"}.mdi-weight-pound:before{content:"\F9B4"}.mdi-whatsapp:before{content:"\F5A3"}.mdi-wheelchair-accessibility:before{content:"\F5A4"}.mdi-whistle:before{content:"\F9B5"}.mdi-white-balance-auto:before{content:"\F5A5"}.mdi-white-balance-incandescent:before{content:"\F5A6"}.mdi-white-balance-iridescent:before{content:"\F5A7"}.mdi-white-balance-sunny:before{content:"\F5A8"}.mdi-widgets:before{content:"\F72B"}.mdi-wifi:before{content:"\F5A9"}.mdi-wifi-off:before{content:"\F5AA"}.mdi-wifi-star:before{content:"\FDE7"}.mdi-wifi-strength-1:before{content:"\F91E"}.mdi-wifi-strength-1-alert:before{content:"\F91F"}.mdi-wifi-strength-1-lock:before{content:"\F920"}.mdi-wifi-strength-2:before{content:"\F921"}.mdi-wifi-strength-2-alert:before{content:"\F922"}.mdi-wifi-strength-2-lock:before{content:"\F923"}.mdi-wifi-strength-3:before{content:"\F924"}.mdi-wifi-strength-3-alert:before{content:"\F925"}.mdi-wifi-strength-3-lock:before{content:"\F926"}.mdi-wifi-strength-4:before{content:"\F927"}.mdi-wifi-strength-4-alert:before{content:"\F928"}.mdi-wifi-strength-4-lock:before{content:"\F929"}.mdi-wifi-strength-alert-outline:before{content:"\F92A"}.mdi-wifi-strength-lock-outline:before{content:"\F92B"}.mdi-wifi-strength-off:before{content:"\F92C"}.mdi-wifi-strength-off-outline:before{content:"\F92D"}.mdi-wifi-strength-outline:before{content:"\F92E"}.mdi-wii:before{content:"\F5AB"}.mdi-wiiu:before{content:"\F72C"}.mdi-wikipedia:before{content:"\F5AC"}.mdi-wind-turbine:before{content:"\FD81"}.mdi-window-close:before{content:"\F5AD"}.mdi-window-closed:before{content:"\F5AE"}.mdi-window-maximize:before{content:"\F5AF"}.mdi-window-minimize:before{content:"\F5B0"}.mdi-window-open:before{content:"\F5B1"}.mdi-window-restore:before{content:"\F5B2"}.mdi-windows:before{content:"\F5B3"}.mdi-windows-classic:before{content:"\FA20"}.mdi-wiper:before{content:"\FAE8"}.mdi-wiper-wash:before{content:"\FD82"}.mdi-wordpress:before{content:"\F5B4"}.mdi-worker:before{content:"\F5B5"}.mdi-wrap:before{content:"\F5B6"}.mdi-wrap-disabled:before{content:"\FBBB"}.mdi-wrench:before{content:"\F5B7"}.mdi-wrench-outline:before{content:"\FBBC"}.mdi-wunderlist:before{content:"\F5B8"}.mdi-xamarin:before{content:"\F844"}.mdi-xamarin-outline:before{content:"\F845"}.mdi-xaml:before{content:"\F673"}.mdi-xbox:before{content:"\F5B9"}.mdi-xbox-controller:before{content:"\F5BA"}.mdi-xbox-controller-battery-alert:before{content:"\F74A"}.mdi-xbox-controller-battery-charging:before{content:"\FA21"}.mdi-xbox-controller-battery-empty:before{content:"\F74B"}.mdi-xbox-controller-battery-full:before{content:"\F74C"}.mdi-xbox-controller-battery-low:before{content:"\F74D"}.mdi-xbox-controller-battery-medium:before{content:"\F74E"}.mdi-xbox-controller-battery-unknown:before{content:"\F74F"}.mdi-xbox-controller-off:before{content:"\F5BB"}.mdi-xda:before{content:"\F5BC"}.mdi-xing:before{content:"\F5BD"}.mdi-xing-box:before{content:"\F5BE"}.mdi-xing-circle:before{content:"\F5BF"}.mdi-xml:before{content:"\F5C0"}.mdi-xmpp:before{content:"\F7FE"}.mdi-yahoo:before{content:"\FB2A"}.mdi-yammer:before{content:"\F788"}.mdi-yeast:before{content:"\F5C1"}.mdi-yelp:before{content:"\F5C2"}.mdi-yin-yang:before{content:"\F67F"}.mdi-youtube:before{content:"\F5C3"}.mdi-youtube-creator-studio:before{content:"\F846"}.mdi-youtube-gaming:before{content:"\F847"}.mdi-youtube-subscription:before{content:"\FD1C"}.mdi-youtube-tv:before{content:"\F448"}.mdi-z-wave:before{content:"\FAE9"}.mdi-zend:before{content:"\FAEA"}.mdi-zigbee:before{content:"\FD1D"}.mdi-zip-box:before{content:"\F5C4"}.mdi-zip-disk:before{content:"\FA22"}.mdi-zodiac-aquarius:before{content:"\FA7C"}.mdi-zodiac-aries:before{content:"\FA7D"}.mdi-zodiac-cancer:before{content:"\FA7E"}.mdi-zodiac-capricorn:before{content:"\FA7F"}.mdi-zodiac-gemini:before{content:"\FA80"}.mdi-zodiac-leo:before{content:"\FA81"}.mdi-zodiac-libra:before{content:"\FA82"}.mdi-zodiac-pisces:before{content:"\FA83"}.mdi-zodiac-sagittarius:before{content:"\FA84"}.mdi-zodiac-scorpio:before{content:"\FA85"}.mdi-zodiac-taurus:before{content:"\FA86"}.mdi-zodiac-virgo:before{content:"\FA87"}.mdi-blank:before{content:"\F68C";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:rgba(0,0,0,0.54)}.mdi-dark.mdi-inactive:before{color:rgba(0,0,0,0.26)}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:rgba(255,255,255,0.3)}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);-ms-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
-/*# sourceMappingURL=materialdesignicons.min.css.map */
diff --git a/community_server/webroot/css/normalize.css b/community_server/webroot/css/normalize.css
deleted file mode 100644
index b0c1902dc..000000000
--- a/community_server/webroot/css/normalize.css
+++ /dev/null
@@ -1,349 +0,0 @@
-/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
-
-/* Document
- ========================================================================== */
-
-/**
- * 1. Correct the line height in all browsers.
- * 2. Prevent adjustments of font size after orientation changes in iOS.
- */
-
-html {
- line-height: 1.15; /* 1 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/* Sections
- ========================================================================== */
-
-/**
- * Remove the margin in all browsers.
- */
-
-body {
- margin: 0;
-}
-
-/**
- * Render the `main` element consistently in IE.
- */
-
-main {
- display: block;
-}
-
-/**
- * Correct the font size and margin on `h1` elements within `section` and
- * `article` contexts in Chrome, Firefox, and Safari.
- */
-
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-/* Grouping content
- ========================================================================== */
-
-/**
- * 1. Add the correct box sizing in Firefox.
- * 2. Show the overflow in Edge and IE.
- */
-
-hr {
- box-sizing: content-box; /* 1 */
- height: 0; /* 1 */
- overflow: visible; /* 2 */
-}
-
-/**
- * 1. Correct the inheritance and scaling of font size in all browsers.
- * 2. Correct the odd `em` font sizing in all browsers.
- */
-
-pre {
- font-family: monospace, monospace; /* 1 */
- font-size: 1em; /* 2 */
-}
-
-/* Text-level semantics
- ========================================================================== */
-
-/**
- * Remove the gray background on active links in IE 10.
- */
-
-a {
- background-color: transparent;
-}
-
-/**
- * 1. Remove the bottom border in Chrome 57-
- * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
- */
-
-abbr[title] {
- border-bottom: none; /* 1 */
- text-decoration: underline; /* 2 */
- text-decoration: underline dotted; /* 2 */
-}
-
-/**
- * Add the correct font weight in Chrome, Edge, and Safari.
- */
-
-b,
-strong {
- font-weight: bolder;
-}
-
-/**
- * 1. Correct the inheritance and scaling of font size in all browsers.
- * 2. Correct the odd `em` font sizing in all browsers.
- */
-
-code,
-kbd,
-samp {
- font-family: monospace, monospace; /* 1 */
- font-size: 1em; /* 2 */
-}
-
-/**
- * Add the correct font size in all browsers.
- */
-
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` elements from affecting the line height in
- * all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-sup {
- top: -0.5em;
-}
-
-/* Embedded content
- ========================================================================== */
-
-/**
- * Remove the border on images inside links in IE 10.
- */
-
-img {
- border-style: none;
-}
-
-/* Forms
- ========================================================================== */
-
-/**
- * 1. Change the font styles in all browsers.
- * 2. Remove the margin in Firefox and Safari.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
- font-family: inherit; /* 1 */
- font-size: 100%; /* 1 */
- line-height: 1.15; /* 1 */
- margin: 0; /* 2 */
-}
-
-/**
- * Show the overflow in IE.
- * 1. Show the overflow in Edge.
- */
-
-button,
-input { /* 1 */
- overflow: visible;
-}
-
-/**
- * Remove the inheritance of text transform in Edge, Firefox, and IE.
- * 1. Remove the inheritance of text transform in Firefox.
- */
-
-button,
-select { /* 1 */
- text-transform: none;
-}
-
-/**
- * Correct the inability to style clickable types in iOS and Safari.
- */
-
-button,
-[type="button"],
-[type="reset"],
-[type="submit"] {
- -webkit-appearance: button;
-}
-
-/**
- * Remove the inner border and padding in Firefox.
- */
-
-button::-moz-focus-inner,
-[type="button"]::-moz-focus-inner,
-[type="reset"]::-moz-focus-inner,
-[type="submit"]::-moz-focus-inner {
- border-style: none;
- padding: 0;
-}
-
-/**
- * Restore the focus styles unset by the previous rule.
- */
-
-button:-moz-focusring,
-[type="button"]:-moz-focusring,
-[type="reset"]:-moz-focusring,
-[type="submit"]:-moz-focusring {
- outline: 1px dotted ButtonText;
-}
-
-/**
- * Correct the padding in Firefox.
- */
-
-fieldset {
- padding: 0.35em 0.75em 0.625em;
-}
-
-/**
- * 1. Correct the text wrapping in Edge and IE.
- * 2. Correct the color inheritance from `fieldset` elements in IE.
- * 3. Remove the padding so developers are not caught out when they zero out
- * `fieldset` elements in all browsers.
- */
-
-legend {
- box-sizing: border-box; /* 1 */
- color: inherit; /* 2 */
- display: table; /* 1 */
- max-width: 100%; /* 1 */
- padding: 0; /* 3 */
- white-space: normal; /* 1 */
-}
-
-/**
- * Add the correct vertical alignment in Chrome, Firefox, and Opera.
- */
-
-progress {
- vertical-align: baseline;
-}
-
-/**
- * Remove the default vertical scrollbar in IE 10+.
- */
-
-textarea {
- overflow: auto;
-}
-
-/**
- * 1. Add the correct box sizing in IE 10.
- * 2. Remove the padding in IE 10.
- */
-
-[type="checkbox"],
-[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Correct the cursor style of increment and decrement buttons in Chrome.
- */
-
-[type="number"]::-webkit-inner-spin-button,
-[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Correct the odd appearance in Chrome and Safari.
- * 2. Correct the outline style in Safari.
- */
-
-[type="search"] {
- -webkit-appearance: textfield; /* 1 */
- outline-offset: -2px; /* 2 */
-}
-
-/**
- * Remove the inner padding in Chrome and Safari on macOS.
- */
-
-[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * 1. Correct the inability to style clickable types in iOS and Safari.
- * 2. Change font properties to `inherit` in Safari.
- */
-
-::-webkit-file-upload-button {
- -webkit-appearance: button; /* 1 */
- font: inherit; /* 2 */
-}
-
-/* Interactive
- ========================================================================== */
-
-/*
- * Add the correct display in Edge, IE 10+, and Firefox.
- */
-
-details {
- display: block;
-}
-
-/*
- * Add the correct display in all browsers.
- */
-
-summary {
- display: list-item;
-}
-
-/* Misc
- ========================================================================== */
-
-/**
- * Add the correct display in IE 10+.
- */
-
-template {
- display: none;
-}
-
-/**
- * Add the correct display in IE 10.
- */
-
-[hidden] {
- display: none;
-}
\ No newline at end of file
diff --git a/community_server/webroot/css/rippleUI/style.css b/community_server/webroot/css/rippleUI/style.css
deleted file mode 100644
index 8ba93da24..000000000
--- a/community_server/webroot/css/rippleUI/style.css
+++ /dev/null
@@ -1,14705 +0,0 @@
-.animated {
- -webkit-animation-duration: 1s;
- animation-duration: 1s;
- -webkit-animation-fill-mode: both;
- animation-fill-mode: both
-}
-
-.animated.infinite {
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite
-}
-
-@-webkit-keyframes fadeIn {
- from {
- opacity: 0
- }
-
- to {
- opacity: 1
- }
-
-}
-
-@keyframes fadeIn {
- from {
- opacity: 0
- }
-
- to {
- opacity: 1
- }
-
-}
-
-.fadeIn {
- -webkit-animation-name: fadeIn;
- animation-name: fadeIn
-}
-
-@-webkit-keyframes fadeInDown {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0)
- }
-
- to {
- opacity: 1;
- -webkit-transform: none;
- transform: none
- }
-
-}
-
-@keyframes fadeInDown {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, -100%, 0);
- transform: translate3d(0, -100%, 0)
- }
-
- to {
- opacity: 1;
- -webkit-transform: none;
- transform: none
- }
-
-}
-
-.fadeInDown {
- -webkit-animation-name: fadeInDown;
- animation-name: fadeInDown
-}
-
-@-webkit-keyframes fadeInUp {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0)
- }
-
- to {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0)
- }
-
-}
-
-@keyframes fadeInUp {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, 100%, 0);
- transform: translate3d(0, 100%, 0)
- }
-
- to {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0)
- }
-
-}
-
-.fadeInUp {
- -webkit-animation-name: fadeInUp;
- animation-name: fadeInUp
-}
-
-@-webkit-keyframes zoomIn {
- from {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3)
- }
-
- 50% {
- opacity: 1
- }
-
-}
-
-@keyframes zoomIn {
- from {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3)
- }
-
- 50% {
- opacity: 1
- }
-
-}
-
-.zoomIn {
- -webkit-animation-name: zoomIn;
- animation-name: zoomIn
-}
-
-@keyframes bounceIn {
- 20%,
- 40%,
- 60%,
- 80%,
- from,
- to {
- -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
- animation-timing-function: cubic-bezier(.215, .61, .355, 1)
- }
-
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3)
- }
-
- 20% {
- -webkit-transform: scale3d(1.4, 1.4, 1.4);
- transform: scale3d(1.4, 1.4, 1.4)
- }
-
- 40% {
- -webkit-transform: scale3d(.9, .9, .9);
- transform: scale3d(.9, .9, .9)
- }
-
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(1.03, 1.03, 1.03);
- transform: scale3d(1.03, 1.03, 1.03)
- }
-
- 80% {
- -webkit-transform: scale3d(.97, .97, .97);
- transform: scale3d(.97, .97, .97)
- }
-
- to {
- opacity: 1;
- -webkit-transform: scale3d(1, 1, 1);
- transform: scale3d(1, 1, 1)
- }
-
-}
-
-@-webkit-keyframes rotate360 {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- -webkit-transform-origin: center;
- transform-origin: center
- }
-
-}
-
-@keyframes rotate360 {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- -webkit-transform-origin: center;
- transform-origin: center
- }
-
-}
-
-@-webkit-keyframes bounceIn {
- 20%,
- 40%,
- 60%,
- 80%,
- from,
- to {
- -webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1);
- animation-timing-function: cubic-bezier(.215, .61, .355, 1)
- }
-
- 0% {
- opacity: 0;
- -webkit-transform: scale3d(.3, .3, .3);
- transform: scale3d(.3, .3, .3)
- }
-
- 20% {
- -webkit-transform: scale3d(1.4, 1.4, 1.4);
- transform: scale3d(1.4, 1.4, 1.4)
- }
-
- 40% {
- -webkit-transform: scale3d(.9, .9, .9);
- transform: scale3d(.9, .9, .9)
- }
-
- 60% {
- opacity: 1;
- -webkit-transform: scale3d(1.03, 1.03, 1.03);
- transform: scale3d(1.03, 1.03, 1.03)
- }
-
- 80% {
- -webkit-transform: scale3d(.97, .97, .97);
- transform: scale3d(.97, .97, .97)
- }
-
- to {
- opacity: 1;
- -webkit-transform: scale3d(1, 1, 1);
- transform: scale3d(1, 1, 1)
- }
-
-}
-
-@-webkit-keyframes ripple {
- 0%,
- 35% {
- -webkit-transform: scale(0);
- transform: scale(0);
- opacity: 1
- }
-
- 50% {
- -webkit-transform: scale(.6);
- transform: scale(.6);
- opacity: .8
- }
-
- 100% {
- opacity: 0;
- -webkit-transform: scale(1.2);
- transform: scale(1.2)
- }
-
-}
-
-@keyframes ripple {
- 0%,
- 35% {
- -webkit-transform: scale(0);
- transform: scale(0);
- opacity: 1
- }
-
- 50% {
- -webkit-transform: scale(.6);
- transform: scale(.6);
- opacity: .8
- }
-
- 100% {
- opacity: 0;
- -webkit-transform: scale(1.2);
- transform: scale(1.2)
- }
-
-}
-
-@font-face {
- font-family: Roboto;
- src: url(../../fonts/Roboto/Roboto-Thin.ttf);
- font-weight: 100
-}
-
-@font-face {
- font-family: Roboto;
- src: url(../../fonts/Roboto/Roboto-Light.ttf);
- font-weight: 300
-}
-
-@font-face {
- font-family: Roboto;
- src: url(../../fonts/Roboto/Roboto-Regular.ttf);
- font-weight: 400
-}
-
-@font-face {
- font-family: Roboto;
- src: url(../../fonts/Roboto/Roboto-Medium.ttf);
- font-weight: 500
-}
-
-@font-face {
- font-family: Roboto;
- src: url(../../fonts/Roboto/Roboto-Bold.ttf);
- font-weight: 700
-}
-
-.bg-inverse-primary {
- background: rgba(4, 112, 6, .2)
-}
-
-.bg-inverse-secondary {
- background: rgba(128, 128, 128, .2)
-}
-
-.bg-inverse-success {
- background: rgba(0, 224, 147, .2)
-}
-
-.bg-inverse-info {
- background: rgba(108, 97, 246, .2)
-}
-
-.bg-inverse-warning {
- background: rgba(240, 130, 95, .2)
-}
-
-.bg-inverse-danger {
- background: rgba(255, 95, 102, .2)
-}
-
-.bg-inverse-light {
- background: rgba(223, 223, 223, .2)
-}
-
-.bg-inverse-dark {
- background: rgba(116, 118, 123, .2)
-}
-
-.bg-inverse-white {
- background: rgba(255, 255, 255, .2)
-}
-
-/*!
- * Bootstrap v4.3.1 (https://getbootstrap.com/)
- * Copyright 2011-2019 The Bootstrap Authors
- * Copyright 2011-2019 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-:root {
- --blue: #007bff;
- --indigo: #6610f2;
- --purple: #6f42c1;
- --pink: #e83e8c;
- --red: #dc3545;
- --orange: #fd7e14;
- --yellow: #ffc107;
- --green: #28a745;
- --teal: #20c997;
- --cyan: #17a2b8;
- --white: #fff;
- --gray: #6c757d;
- --gray-dark: #343a40;
- --primary: #047006;
- --secondary: grey;
- --success: #047006;
- --info: #6c61f6;
- --warning: #f0825f;
- --danger: #ff5f66;
- --light: #dfdfdf;
- --dark: #74767b;
- --white: #fff;
- --breakpoint-xs: 0;
- --breakpoint-sm: 576px;
- --breakpoint-md: 768px;
- --breakpoint-lg: 992px;
- --breakpoint-xl: 1200px;
- --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace
-}
-
-*,
-::after,
-::before {
- box-sizing: border-box
-}
-
-html {
- font-family: sans-serif;
- line-height: 1.15;
- -webkit-text-size-adjust: 100%;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
-}
-
-article,
-aside,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section {
- display: block
-}
-
-body {
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.7;
- color: #212529;
- text-align: left;
- background-color: #fff
-}
-
-[tabindex="-1"]:focus {
- outline: 0 !important
-}
-
-hr {
- box-sizing: content-box;
- height: 0;
- overflow: visible
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin-top: 0;
- margin-bottom: .5rem
-}
-
-p {
- margin-top: 0;
- margin-bottom: 1rem
-}
-
-abbr[data-original-title],
-abbr[title] {
- text-decoration: underline;
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
- cursor: help;
- border-bottom: 0;
- text-decoration-skip-ink: none
-}
-
-address {
- margin-bottom: 1rem;
- font-style: normal;
- line-height: inherit
-}
-
-dl,
-ol,
-ul {
- margin-top: 0;
- margin-bottom: 1rem
-}
-
-ol ol,
-ol ul,
-ul ol,
-ul ul {
- margin-bottom: 0
-}
-
-dt {
- font-weight: 700
-}
-
-dd {
- margin-bottom: .5rem;
- margin-left: 0
-}
-
-blockquote {
- margin: 0 0 1rem
-}
-
-b,
-strong {
- font-weight: bolder
-}
-
-small {
- font-size: 80%
-}
-
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline
-}
-
-sub {
- bottom: -.25em
-}
-
-sup {
- top: -.5em
-}
-
-a {
- color: #047006;
- text-decoration: none;
- background-color: transparent
-}
-
-a:hover {
- color: #012602;
- text-decoration: underline
-}
-
-a:not([href]):not([tabindex]) {
- color: inherit;
- text-decoration: none
-}
-
-a:not([href]):not([tabindex]):focus,
-a:not([href]):not([tabindex]):hover {
- color: inherit;
- text-decoration: none
-}
-
-a:not([href]):not([tabindex]):focus {
- outline: 0
-}
-
-code,
-kbd,
-pre,
-samp {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- font-size: 1em
-}
-
-pre {
- margin-top: 0;
- margin-bottom: 1rem;
- overflow: auto
-}
-
-figure {
- margin: 0 0 1rem
-}
-
-img {
- vertical-align: middle;
- border-style: none
-}
-
-svg {
- overflow: hidden;
- vertical-align: middle
-}
-
-table {
- border-collapse: collapse
-}
-
-caption {
- padding-top: 10px 15px;
- padding-bottom: 10px 15px;
- color: #6c757d;
- text-align: left;
- caption-side: bottom
-}
-
-th {
- text-align: inherit
-}
-
-label {
- display: inline-block;
- margin-bottom: .5rem
-}
-
-button {
- border-radius: 0
-}
-
-button:focus {
- outline: 1px dotted;
- outline: 5px auto -webkit-focus-ring-color
-}
-
-button,
-input,
-optgroup,
-select,
-textarea {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit
-}
-
-button,
-input {
- overflow: visible
-}
-
-button,
-select {
- text-transform: none
-}
-
-select {
- word-wrap: normal
-}
-
-[type=button],
-[type=reset],
-[type=submit],
-button {
- -webkit-appearance: button
-}
-
-[type=button]:not(:disabled),
-[type=reset]:not(:disabled),
-[type=submit]:not(:disabled),
-button:not(:disabled) {
- cursor: pointer
-}
-
-[type=button]::-moz-focus-inner,
-[type=reset]::-moz-focus-inner,
-[type=submit]::-moz-focus-inner,
-button::-moz-focus-inner {
- padding: 0;
- border-style: none
-}
-
-input[type=checkbox],
-input[type=radio] {
- box-sizing: border-box;
- padding: 0
-}
-
-input[type=date],
-input[type=datetime-local],
-input[type=month],
-input[type=time] {
- -webkit-appearance: listbox
-}
-
-textarea {
- overflow: auto;
- resize: vertical
-}
-
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0
-}
-
-legend {
- display: block;
- width: 100%;
- max-width: 100%;
- padding: 0;
- margin-bottom: .5rem;
- font-size: 1.5rem;
- line-height: inherit;
- color: inherit;
- white-space: normal
-}
-
-progress {
- vertical-align: baseline
-}
-
-[type=number]::-webkit-inner-spin-button,
-[type=number]::-webkit-outer-spin-button {
- height: auto
-}
-
-[type=search] {
- outline-offset: -2px;
- -webkit-appearance: none
-}
-
-[type=search]::-webkit-search-decoration {
- -webkit-appearance: none
-}
-
-::-webkit-file-upload-button {
- font: inherit;
- -webkit-appearance: button
-}
-
-output {
- display: inline-block
-}
-
-summary {
- display: list-item;
- cursor: pointer
-}
-
-template {
- display: none
-}
-
-[hidden] {
- display: none !important
-}
-
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin-bottom: .5rem;
- font-weight: 500;
- line-height: 1.2
-}
-
-.h1,
-h1 {
- font-size: 2.5rem
-}
-
-.h2,
-h2 {
- font-size: 2rem
-}
-
-.h3,
-h3 {
- font-size: 1.75rem
-}
-
-.h4,
-h4 {
- font-size: 1.5rem
-}
-
-.h5,
-h5 {
- font-size: 1.25rem
-}
-
-.h6,
-h6 {
- font-size: 1rem
-}
-
-.lead {
- font-size: 1.25rem;
- font-weight: 300
-}
-
-.display-1 {
- font-size: 6rem;
- font-weight: 300;
- line-height: 1.2
-}
-
-.display-2 {
- font-size: 5.5rem;
- font-weight: 300;
- line-height: 1.2
-}
-
-.display-3 {
- font-size: 4.5rem;
- font-weight: 300;
- line-height: 1.2
-}
-
-.display-4 {
- font-size: 3.5rem;
- font-weight: 300;
- line-height: 1.2
-}
-
-hr {
- margin-top: 1rem;
- margin-bottom: 1rem;
- border: 0;
- border-top: 1px solid rgba(0, 0, 0, .1)
-}
-
-.small,
-small {
- font-size: 80%;
- font-weight: 400
-}
-
-.mark,
-mark {
- padding: .2em;
- background-color: #fcf8e3
-}
-
-.list-unstyled {
- padding-left: 0;
- list-style: none
-}
-
-.list-inline {
- padding-left: 0;
- list-style: none
-}
-
-.list-inline-item {
- display: inline-block
-}
-
-.list-inline-item:not(:last-child) {
- margin-right: .5rem
-}
-
-.initialism {
- font-size: 90%;
- text-transform: uppercase
-}
-
-.blockquote {
- margin-bottom: 1rem;
- font-size: 1.25rem
-}
-
-.blockquote-footer {
- display: block;
- font-size: 80%;
- color: #6c757d
-}
-
-.blockquote-footer::before {
- content: "\2014\00A0"
-}
-
-.img-fluid {
- max-width: 100%;
- height: auto
-}
-
-.img-thumbnail {
- padding: .25rem;
- background-color: #fff;
- border: 1px solid #dee2e6;
- border-radius: .25rem;
- max-width: 100%;
- height: auto
-}
-
-.figure {
- display: inline-block
-}
-
-.figure-img {
- margin-bottom: .5rem;
- line-height: 1
-}
-
-.figure-caption {
- font-size: 90%;
- color: #6c757d
-}
-
-code {
- font-size: 90%;
- color: #bd4147;
- word-break: break-word
-}
-
-a>code {
- color: inherit
-}
-
-kbd {
- padding: .2rem .4rem;
- font-size: 87.5%;
- color: #fff;
- background-color: #212529;
- border-radius: .2rem
-}
-
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: 700
-}
-
-pre {
- display: block;
- font-size: 90%;
- color: #212529
-}
-
-pre code {
- font-size: inherit;
- color: inherit;
- word-break: normal
-}
-
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll
-}
-
-.container {
- width: 100%;
- padding-right: 10px;
- padding-left: 10px;
- margin-right: auto;
- margin-left: auto
-}
-
-@media (min-width:576px) {
- .container {
- max-width: 540px
- }
-
-}
-
-@media (min-width:768px) {
- .container {
- max-width: 720px
- }
-
-}
-
-@media (min-width:992px) {
- .container {
- max-width: 960px
- }
-
-}
-
-@media (min-width:1200px) {
- .container {
- max-width: 1140px
- }
-
-}
-
-.container-fluid {
- width: 100%;
- padding-right: 10px;
- padding-left: 10px;
- margin-right: auto;
- margin-left: auto
-}
-
-.row {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- margin-right: -10px;
- margin-left: -10px
-}
-
-.no-gutters {
- margin-right: 0;
- margin-left: 0
-}
-
-.no-gutters>.col,
-.no-gutters>[class*=col-] {
- padding-right: 0;
- padding-left: 0
-}
-
-.col,
-.col-1,
-.col-10,
-.col-11,
-.col-12,
-.col-2,
-.col-3,
-.col-4,
-.col-5,
-.col-6,
-.col-7,
-.col-8,
-.col-9,
-.col-auto,
-.col-lg,
-.col-lg-1,
-.col-lg-10,
-.col-lg-11,
-.col-lg-12,
-.col-lg-2,
-.col-lg-3,
-.col-lg-4,
-.col-lg-5,
-.col-lg-6,
-.col-lg-7,
-.col-lg-8,
-.col-lg-9,
-.col-lg-auto,
-.col-md,
-.col-md-1,
-.col-md-10,
-.col-md-11,
-.col-md-12,
-.col-md-2,
-.col-md-3,
-.col-md-4,
-.col-md-5,
-.col-md-6,
-.col-md-7,
-.col-md-8,
-.col-md-9,
-.col-md-auto,
-.col-sm,
-.col-sm-1,
-.col-sm-10,
-.col-sm-11,
-.col-sm-12,
-.col-sm-2,
-.col-sm-3,
-.col-sm-4,
-.col-sm-5,
-.col-sm-6,
-.col-sm-7,
-.col-sm-8,
-.col-sm-9,
-.col-sm-auto,
-.col-xl,
-.col-xl-1,
-.col-xl-10,
-.col-xl-11,
-.col-xl-12,
-.col-xl-2,
-.col-xl-3,
-.col-xl-4,
-.col-xl-5,
-.col-xl-6,
-.col-xl-7,
-.col-xl-8,
-.col-xl-9,
-.col-xl-auto {
- position: relative;
- width: 100%;
- padding-right: 10px;
- padding-left: 10px
-}
-
-.col {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
-}
-
-.col-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
-}
-
-.col-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
-}
-
-.col-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
-}
-
-.col-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
-}
-
-.col-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
-}
-
-.col-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
-}
-
-.col-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
-}
-
-.col-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
-}
-
-.col-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
-}
-
-.col-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
-}
-
-.col-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
-}
-
-.col-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
-}
-
-.col-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
-}
-
-.order-first {
- -webkit-box-ordinal-group: 0;
- order: -1
-}
-
-.order-last {
- -webkit-box-ordinal-group: 14;
- order: 13
-}
-
-.order-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
-}
-
-.order-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
-}
-
-.order-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
-}
-
-.order-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
-}
-
-.order-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
-}
-
-.order-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
-}
-
-.order-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
-}
-
-.order-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
-}
-
-.order-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
-}
-
-.order-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
-}
-
-.order-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
-}
-
-.order-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
-}
-
-.order-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
-}
-
-.offset-1 {
- margin-left: 8.33333%
-}
-
-.offset-2 {
- margin-left: 16.66667%
-}
-
-.offset-3 {
- margin-left: 25%
-}
-
-.offset-4 {
- margin-left: 33.33333%
-}
-
-.offset-5 {
- margin-left: 41.66667%
-}
-
-.offset-6 {
- margin-left: 50%
-}
-
-.offset-7 {
- margin-left: 58.33333%
-}
-
-.offset-8 {
- margin-left: 66.66667%
-}
-
-.offset-9 {
- margin-left: 75%
-}
-
-.offset-10 {
- margin-left: 83.33333%
-}
-
-.offset-11 {
- margin-left: 91.66667%
-}
-
-@media (min-width:576px) {
- .col-sm {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
- }
-
- .col-sm-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
- }
-
- .col-sm-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
- }
-
- .col-sm-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
- }
-
- .col-sm-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
- }
-
- .col-sm-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
- }
-
- .col-sm-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
- }
-
- .col-sm-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
- }
-
- .col-sm-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
- }
-
- .col-sm-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
- }
-
- .col-sm-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
- }
-
- .col-sm-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
- }
-
- .col-sm-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
- }
-
- .col-sm-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
- }
-
- .order-sm-first {
- -webkit-box-ordinal-group: 0;
- order: -1
- }
-
- .order-sm-last {
- -webkit-box-ordinal-group: 14;
- order: 13
- }
-
- .order-sm-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
- }
-
- .order-sm-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
- }
-
- .order-sm-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
- }
-
- .order-sm-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
- }
-
- .order-sm-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
- }
-
- .order-sm-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
- }
-
- .order-sm-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
- }
-
- .order-sm-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
- }
-
- .order-sm-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
- }
-
- .order-sm-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
- }
-
- .order-sm-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
- }
-
- .order-sm-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
- }
-
- .order-sm-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
- }
-
- .offset-sm-0 {
- margin-left: 0
- }
-
- .offset-sm-1 {
- margin-left: 8.33333%
- }
-
- .offset-sm-2 {
- margin-left: 16.66667%
- }
-
- .offset-sm-3 {
- margin-left: 25%
- }
-
- .offset-sm-4 {
- margin-left: 33.33333%
- }
-
- .offset-sm-5 {
- margin-left: 41.66667%
- }
-
- .offset-sm-6 {
- margin-left: 50%
- }
-
- .offset-sm-7 {
- margin-left: 58.33333%
- }
-
- .offset-sm-8 {
- margin-left: 66.66667%
- }
-
- .offset-sm-9 {
- margin-left: 75%
- }
-
- .offset-sm-10 {
- margin-left: 83.33333%
- }
-
- .offset-sm-11 {
- margin-left: 91.66667%
- }
-
-}
-
-@media (min-width:768px) {
- .col-md {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
- }
-
- .col-md-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
- }
-
- .col-md-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
- }
-
- .col-md-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
- }
-
- .col-md-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
- }
-
- .col-md-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
- }
-
- .col-md-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
- }
-
- .col-md-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
- }
-
- .col-md-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
- }
-
- .col-md-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
- }
-
- .col-md-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
- }
-
- .col-md-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
- }
-
- .col-md-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
- }
-
- .col-md-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
- }
-
- .order-md-first {
- -webkit-box-ordinal-group: 0;
- order: -1
- }
-
- .order-md-last {
- -webkit-box-ordinal-group: 14;
- order: 13
- }
-
- .order-md-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
- }
-
- .order-md-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
- }
-
- .order-md-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
- }
-
- .order-md-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
- }
-
- .order-md-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
- }
-
- .order-md-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
- }
-
- .order-md-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
- }
-
- .order-md-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
- }
-
- .order-md-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
- }
-
- .order-md-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
- }
-
- .order-md-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
- }
-
- .order-md-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
- }
-
- .order-md-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
- }
-
- .offset-md-0 {
- margin-left: 0
- }
-
- .offset-md-1 {
- margin-left: 8.33333%
- }
-
- .offset-md-2 {
- margin-left: 16.66667%
- }
-
- .offset-md-3 {
- margin-left: 25%
- }
-
- .offset-md-4 {
- margin-left: 33.33333%
- }
-
- .offset-md-5 {
- margin-left: 41.66667%
- }
-
- .offset-md-6 {
- margin-left: 50%
- }
-
- .offset-md-7 {
- margin-left: 58.33333%
- }
-
- .offset-md-8 {
- margin-left: 66.66667%
- }
-
- .offset-md-9 {
- margin-left: 75%
- }
-
- .offset-md-10 {
- margin-left: 83.33333%
- }
-
- .offset-md-11 {
- margin-left: 91.66667%
- }
-
-}
-
-@media (min-width:992px) {
- .col-lg {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
- }
-
- .col-lg-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
- }
-
- .col-lg-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
- }
-
- .col-lg-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
- }
-
- .col-lg-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
- }
-
- .col-lg-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
- }
-
- .col-lg-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
- }
-
- .col-lg-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
- }
-
- .col-lg-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
- }
-
- .col-lg-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
- }
-
- .col-lg-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
- }
-
- .col-lg-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
- }
-
- .col-lg-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
- }
-
- .col-lg-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
- }
-
- .order-lg-first {
- -webkit-box-ordinal-group: 0;
- order: -1
- }
-
- .order-lg-last {
- -webkit-box-ordinal-group: 14;
- order: 13
- }
-
- .order-lg-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
- }
-
- .order-lg-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
- }
-
- .order-lg-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
- }
-
- .order-lg-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
- }
-
- .order-lg-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
- }
-
- .order-lg-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
- }
-
- .order-lg-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
- }
-
- .order-lg-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
- }
-
- .order-lg-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
- }
-
- .order-lg-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
- }
-
- .order-lg-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
- }
-
- .order-lg-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
- }
-
- .order-lg-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
- }
-
- .offset-lg-0 {
- margin-left: 0
- }
-
- .offset-lg-1 {
- margin-left: 8.33333%
- }
-
- .offset-lg-2 {
- margin-left: 16.66667%
- }
-
- .offset-lg-3 {
- margin-left: 25%
- }
-
- .offset-lg-4 {
- margin-left: 33.33333%
- }
-
- .offset-lg-5 {
- margin-left: 41.66667%
- }
-
- .offset-lg-6 {
- margin-left: 50%
- }
-
- .offset-lg-7 {
- margin-left: 58.33333%
- }
-
- .offset-lg-8 {
- margin-left: 66.66667%
- }
-
- .offset-lg-9 {
- margin-left: 75%
- }
-
- .offset-lg-10 {
- margin-left: 83.33333%
- }
-
- .offset-lg-11 {
- margin-left: 91.66667%
- }
-
-}
-
-@media (min-width:1200px) {
- .col-xl {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- max-width: 100%
- }
-
- .col-xl-auto {
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- width: auto;
- max-width: 100%
- }
-
- .col-xl-1 {
- -webkit-box-flex: 0;
- flex: 0 0 8.33333%;
- max-width: 8.33333%
- }
-
- .col-xl-2 {
- -webkit-box-flex: 0;
- flex: 0 0 16.66667%;
- max-width: 16.66667%
- }
-
- .col-xl-3 {
- -webkit-box-flex: 0;
- flex: 0 0 25%;
- max-width: 25%
- }
-
- .col-xl-4 {
- -webkit-box-flex: 0;
- flex: 0 0 33.33333%;
- max-width: 33.33333%
- }
-
- .col-xl-5 {
- -webkit-box-flex: 0;
- flex: 0 0 41.66667%;
- max-width: 41.66667%
- }
-
- .col-xl-6 {
- -webkit-box-flex: 0;
- flex: 0 0 50%;
- max-width: 50%
- }
-
- .col-xl-7 {
- -webkit-box-flex: 0;
- flex: 0 0 58.33333%;
- max-width: 58.33333%
- }
-
- .col-xl-8 {
- -webkit-box-flex: 0;
- flex: 0 0 66.66667%;
- max-width: 66.66667%
- }
-
- .col-xl-9 {
- -webkit-box-flex: 0;
- flex: 0 0 75%;
- max-width: 75%
- }
-
- .col-xl-10 {
- -webkit-box-flex: 0;
- flex: 0 0 83.33333%;
- max-width: 83.33333%
- }
-
- .col-xl-11 {
- -webkit-box-flex: 0;
- flex: 0 0 91.66667%;
- max-width: 91.66667%
- }
-
- .col-xl-12 {
- -webkit-box-flex: 0;
- flex: 0 0 100%;
- max-width: 100%
- }
-
- .order-xl-first {
- -webkit-box-ordinal-group: 0;
- order: -1
- }
-
- .order-xl-last {
- -webkit-box-ordinal-group: 14;
- order: 13
- }
-
- .order-xl-0 {
- -webkit-box-ordinal-group: 1;
- order: 0
- }
-
- .order-xl-1 {
- -webkit-box-ordinal-group: 2;
- order: 1
- }
-
- .order-xl-2 {
- -webkit-box-ordinal-group: 3;
- order: 2
- }
-
- .order-xl-3 {
- -webkit-box-ordinal-group: 4;
- order: 3
- }
-
- .order-xl-4 {
- -webkit-box-ordinal-group: 5;
- order: 4
- }
-
- .order-xl-5 {
- -webkit-box-ordinal-group: 6;
- order: 5
- }
-
- .order-xl-6 {
- -webkit-box-ordinal-group: 7;
- order: 6
- }
-
- .order-xl-7 {
- -webkit-box-ordinal-group: 8;
- order: 7
- }
-
- .order-xl-8 {
- -webkit-box-ordinal-group: 9;
- order: 8
- }
-
- .order-xl-9 {
- -webkit-box-ordinal-group: 10;
- order: 9
- }
-
- .order-xl-10 {
- -webkit-box-ordinal-group: 11;
- order: 10
- }
-
- .order-xl-11 {
- -webkit-box-ordinal-group: 12;
- order: 11
- }
-
- .order-xl-12 {
- -webkit-box-ordinal-group: 13;
- order: 12
- }
-
- .offset-xl-0 {
- margin-left: 0
- }
-
- .offset-xl-1 {
- margin-left: 8.33333%
- }
-
- .offset-xl-2 {
- margin-left: 16.66667%
- }
-
- .offset-xl-3 {
- margin-left: 25%
- }
-
- .offset-xl-4 {
- margin-left: 33.33333%
- }
-
- .offset-xl-5 {
- margin-left: 41.66667%
- }
-
- .offset-xl-6 {
- margin-left: 50%
- }
-
- .offset-xl-7 {
- margin-left: 58.33333%
- }
-
- .offset-xl-8 {
- margin-left: 66.66667%
- }
-
- .offset-xl-9 {
- margin-left: 75%
- }
-
- .offset-xl-10 {
- margin-left: 83.33333%
- }
-
- .offset-xl-11 {
- margin-left: 91.66667%
- }
-
-}
-
-.table {
- width: 100%;
- margin-bottom: 1rem;
- color: #212529
-}
-
-.table td,
-.table th {
- padding: 10px 15px;
- vertical-align: top;
- border-top: 1px solid #f2f4f9
-}
-
-.table thead th {
- vertical-align: bottom;
- border-bottom: 2px solid #f2f4f9
-}
-
-.table tbody+tbody {
- border-top: 2px solid #f2f4f9
-}
-
-.table-sm td,
-.table-sm th {
- padding: 10px 15px
-}
-
-.table-bordered {
- border: 1px solid #f2f4f9
-}
-
-.table-bordered td,
-.table-bordered th {
- border: 1px solid #f2f4f9
-}
-
-.table-bordered thead td,
-.table-bordered thead th {
- border-bottom-width: 2px
-}
-
-.table-borderless tbody+tbody,
-.table-borderless td,
-.table-borderless th,
-.table-borderless thead th {
- border: 0
-}
-
-.table-striped tbody tr:nth-of-type(odd) {
- background-color: #f6f7f9
-}
-
-.table-hover tbody tr:hover {
- color: #212529;
- background-color: #f6f7f9
-}
-
-.table-primary,
-.table-primary>td,
-.table-primary>th {
- background-color: #b9d7b9
-}
-
-.table-primary tbody+tbody,
-.table-primary td,
-.table-primary th,
-.table-primary thead th {
- border-color: #7cb57e
-}
-
-.table-hover .table-primary:hover {
- background-color: #a9cea9
-}
-
-.table-hover .table-primary:hover>td,
-.table-hover .table-primary:hover>th {
- background-color: #a9cea9
-}
-
-.table-secondary,
-.table-secondary>td,
-.table-secondary>th {
- background-color: #dbdbdb
-}
-
-.table-secondary tbody+tbody,
-.table-secondary td,
-.table-secondary th,
-.table-secondary thead th {
- border-color: #bdbdbd
-}
-
-.table-hover .table-secondary:hover {
- background-color: #cecece
-}
-
-.table-hover .table-secondary:hover>td,
-.table-hover .table-secondary:hover>th {
- background-color: #cecece
-}
-
-.table-success,
-.table-success>td,
-.table-success>th {
- background-color: #b8f6e1
-}
-
-.table-success tbody+tbody,
-.table-success td,
-.table-success th,
-.table-success thead th {
- border-color: #7aefc7
-}
-
-.table-hover .table-success:hover {
- background-color: #a1f3d7
-}
-
-.table-hover .table-success:hover>td,
-.table-hover .table-success:hover>th {
- background-color: #a1f3d7
-}
-
-.table-info,
-.table-info>td,
-.table-info>th {
- background-color: #d6d3fc
-}
-
-.table-info tbody+tbody,
-.table-info td,
-.table-info th,
-.table-info thead th {
- border-color: #b3adfa
-}
-
-.table-hover .table-info:hover {
- background-color: #c0bbfa
-}
-
-.table-hover .table-info:hover>td,
-.table-hover .table-info:hover>th {
- background-color: #c0bbfa
-}
-
-.table-warning,
-.table-warning>td,
-.table-warning>th {
- background-color: #fbdcd2
-}
-
-.table-warning tbody+tbody,
-.table-warning td,
-.table-warning th,
-.table-warning thead th {
- border-color: #f7beac
-}
-
-.table-hover .table-warning:hover {
- background-color: #f9cabb
-}
-
-.table-hover .table-warning:hover>td,
-.table-hover .table-warning:hover>th {
- background-color: #f9cabb
-}
-
-.table-danger,
-.table-danger>td,
-.table-danger>th {
- background-color: #ffd2d4
-}
-
-.table-danger tbody+tbody,
-.table-danger td,
-.table-danger th,
-.table-danger thead th {
- border-color: #ffacaf
-}
-
-.table-hover .table-danger:hover {
- background-color: #ffb9bc
-}
-
-.table-hover .table-danger:hover>td,
-.table-hover .table-danger:hover>th {
- background-color: #ffb9bc
-}
-
-.table-light,
-.table-light>td,
-.table-light>th {
- background-color: #f6f6f6
-}
-
-.table-light tbody+tbody,
-.table-light td,
-.table-light th,
-.table-light thead th {
- border-color: #eee
-}
-
-.table-hover .table-light:hover {
- background-color: #e9e9e9
-}
-
-.table-hover .table-light:hover>td,
-.table-hover .table-light:hover>th {
- background-color: #e9e9e9
-}
-
-.table-dark,
-.table-dark>td,
-.table-dark>th {
- background-color: #d8d9da
-}
-
-.table-dark tbody+tbody,
-.table-dark td,
-.table-dark th,
-.table-dark thead th {
- border-color: #b7b8ba
-}
-
-.table-hover .table-dark:hover {
- background-color: #cbccce
-}
-
-.table-hover .table-dark:hover>td,
-.table-hover .table-dark:hover>th {
- background-color: #cbccce
-}
-
-.table-white,
-.table-white>td,
-.table-white>th {
- background-color: #fff
-}
-
-.table-white tbody+tbody,
-.table-white td,
-.table-white th,
-.table-white thead th {
- border-color: #fff
-}
-
-.table-hover .table-white:hover {
- background-color: #f2f2f2
-}
-
-.table-hover .table-white:hover>td,
-.table-hover .table-white:hover>th {
- background-color: #f2f2f2
-}
-
-.table-active,
-.table-active>td,
-.table-active>th {
- background-color: rgba(0, 0, 0, .075)
-}
-
-.table-hover .table-active:hover {
- background-color: rgba(0, 0, 0, .075)
-}
-
-.table-hover .table-active:hover>td,
-.table-hover .table-active:hover>th {
- background-color: rgba(0, 0, 0, .075)
-}
-
-.table .thead-dark th {
- color: #fff;
- background-color: #343a40;
- border-color: #454d55
-}
-
-.table .thead-light th {
- color: #495057;
- background-color: #e1e4e6;
- border-color: #f2f4f9
-}
-
-.table-dark {
- color: #fff;
- background-color: #343a40
-}
-
-.table-dark td,
-.table-dark th,
-.table-dark thead th {
- border-color: #454d55
-}
-
-.table-dark.table-bordered {
- border: 0
-}
-
-.table-dark.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(255, 255, 255, .05)
-}
-
-.table-dark.table-hover tbody tr:hover {
- color: #fff;
- background-color: rgba(255, 255, 255, .075)
-}
-
-@media (max-width:575.98px) {
- .table-responsive-sm {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
- }
-
- .table-responsive-sm>.table-bordered {
- border: 0
- }
-
-}
-
-@media (max-width:767.98px) {
- .table-responsive-md {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
- }
-
- .table-responsive-md>.table-bordered {
- border: 0
- }
-
-}
-
-@media (max-width:991.98px) {
- .table-responsive-lg {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
- }
-
- .table-responsive-lg>.table-bordered {
- border: 0
- }
-
-}
-
-@media (max-width:1199.98px) {
- .table-responsive-xl {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
- }
-
- .table-responsive-xl>.table-bordered {
- border: 0
- }
-
-}
-
-.table-responsive {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch
-}
-
-.table-responsive>.table-bordered {
- border: 0
-}
-
-.form-control {
- display: block;
- width: 100%;
- height: calc(1.5em + .75rem + 2px);
- padding: .375rem .75rem;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #6c757d;
- background-color: #f6f7f9;
- background-clip: padding-box;
- border: 1px solid #f0f2f5;
- border-radius: .25rem;
- -webkit-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .form-control {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.form-control::-ms-expand {
- background-color: transparent;
- border: 0
-}
-
-.form-control:focus {
- color: #495057;
- background-color: #f6f7f9;
- border-color: #d7dee5;
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.form-control::-webkit-input-placeholder {
- color: #6c757d;
- opacity: 1
-}
-
-.form-control::-moz-placeholder {
- color: #6c757d;
- opacity: 1
-}
-
-.form-control::-ms-input-placeholder {
- color: #6c757d;
- opacity: 1
-}
-
-.form-control::placeholder {
- color: #6c757d;
- opacity: 1
-}
-
-.form-control:disabled,
-.form-control[readonly] {
- background-color: #f8f9fa;
- opacity: 1
-}
-
-select.form-control:focus::-ms-value {
- color: #6c757d;
- background-color: #f6f7f9
-}
-
-.form-control-file,
-.form-control-range {
- display: block;
- width: 100%
-}
-
-.col-form-label {
- padding-top: calc(.375rem + 1px);
- padding-bottom: calc(.375rem + 1px);
- margin-bottom: 0;
- font-size: inherit;
- line-height: 1.5
-}
-
-.col-form-label-lg {
- padding-top: calc(.5rem + 1px);
- padding-bottom: calc(.5rem + 1px);
- font-size: 1.25rem;
- line-height: 1.5
-}
-
-.col-form-label-sm {
- padding-top: calc(.25rem + 1px);
- padding-bottom: calc(.25rem + 1px);
- font-size: .875rem;
- line-height: 1.5
-}
-
-.form-control-plaintext {
- display: block;
- width: 100%;
- padding-top: .375rem;
- padding-bottom: .375rem;
- margin-bottom: 0;
- line-height: 1.5;
- color: #212529;
- background-color: transparent;
- border: solid transparent;
- border-width: 1px 0
-}
-
-.form-control-plaintext.form-control-lg,
-.form-control-plaintext.form-control-sm {
- padding-right: 0;
- padding-left: 0
-}
-
-.form-control-sm {
- height: calc(1.5em + .5rem + 2px);
- padding: .25rem .5rem;
- font-size: .875rem;
- line-height: 1.5;
- border-radius: .2rem
-}
-
-.form-control-lg {
- height: calc(1.5em + 1rem + 2px);
- padding: .5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: .3rem
-}
-
-select.form-control[multiple],
-select.form-control[size] {
- height: auto
-}
-
-textarea.form-control {
- height: auto
-}
-
-.form-group {
- margin-bottom: 1rem
-}
-
-.form-text {
- display: block;
- margin-top: .25rem
-}
-
-.form-row {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- margin-right: -5px;
- margin-left: -5px
-}
-
-.form-row>.col,
-.form-row>[class*=col-] {
- padding-right: 5px;
- padding-left: 5px
-}
-
-.form-check {
- position: relative;
- display: block;
- padding-left: 1.25rem
-}
-
-.form-check-input {
- position: absolute;
- margin-top: .3rem;
- margin-left: -1.25rem
-}
-
-.form-check-input:disabled~.form-check-label {
- color: #adb5bd
-}
-
-.form-check-label {
- margin-bottom: 0
-}
-
-.form-check-inline {
- display: -webkit-inline-box;
- display: inline-flex;
- -webkit-box-align: center;
- align-items: center;
- padding-left: 0;
- margin-right: .75rem
-}
-
-.form-check-inline .form-check-input {
- position: static;
- margin-top: 0;
- margin-right: .3125rem;
- margin-left: 0
-}
-
-.valid-feedback {
- display: none;
- width: 100%;
- margin-top: .25rem;
- font-size: 80%;
- color: #28a745
-}
-
-.valid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: .25rem .5rem;
- margin-top: .1rem;
- font-size: .875rem;
- line-height: 1.5;
- color: #fff;
- background-color: rgba(40, 167, 69, .9);
- border-radius: .25rem
-}
-
-.form-control.is-valid,
-.was-validated .form-control:valid {
- border-color: #28a745;
- padding-right: calc(1.5em + .75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e");
- background-repeat: no-repeat;
- background-position: center right calc(.375em + .1875rem);
- background-size: calc(.75em + .375rem) calc(.75em + .375rem)
-}
-
-.form-control.is-valid:focus,
-.was-validated .form-control:valid:focus {
- border-color: #28a745;
- box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25)
-}
-
-.form-control.is-valid~.valid-feedback,
-.form-control.is-valid~.valid-tooltip,
-.was-validated .form-control:valid~.valid-feedback,
-.was-validated .form-control:valid~.valid-tooltip {
- display: block
-}
-
-.was-validated textarea.form-control:valid,
-textarea.form-control.is-valid {
- padding-right: calc(1.5em + .75rem);
- background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem)
-}
-
-.custom-select.is-valid,
-.was-validated .custom-select:valid {
- border-color: #28a745;
- padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem);
- background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)
-}
-
-.custom-select.is-valid:focus,
-.was-validated .custom-select:valid:focus {
- border-color: #28a745;
- box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25)
-}
-
-.custom-select.is-valid~.valid-feedback,
-.custom-select.is-valid~.valid-tooltip,
-.was-validated .custom-select:valid~.valid-feedback,
-.was-validated .custom-select:valid~.valid-tooltip {
- display: block
-}
-
-.form-control-file.is-valid~.valid-feedback,
-.form-control-file.is-valid~.valid-tooltip,
-.was-validated .form-control-file:valid~.valid-feedback,
-.was-validated .form-control-file:valid~.valid-tooltip {
- display: block
-}
-
-.form-check-input.is-valid~.form-check-label,
-.was-validated .form-check-input:valid~.form-check-label {
- color: #28a745
-}
-
-.form-check-input.is-valid~.valid-feedback,
-.form-check-input.is-valid~.valid-tooltip,
-.was-validated .form-check-input:valid~.valid-feedback,
-.was-validated .form-check-input:valid~.valid-tooltip {
- display: block
-}
-
-.custom-control-input.is-valid~.custom-control-label,
-.was-validated .custom-control-input:valid~.custom-control-label {
- color: #28a745
-}
-
-.custom-control-input.is-valid~.custom-control-label::before,
-.was-validated .custom-control-input:valid~.custom-control-label::before {
- border-color: #28a745
-}
-
-.custom-control-input.is-valid~.valid-feedback,
-.custom-control-input.is-valid~.valid-tooltip,
-.was-validated .custom-control-input:valid~.valid-feedback,
-.was-validated .custom-control-input:valid~.valid-tooltip {
- display: block
-}
-
-.custom-control-input.is-valid:checked~.custom-control-label::before,
-.was-validated .custom-control-input:valid:checked~.custom-control-label::before {
- border-color: #34ce57;
- background-color: #34ce57
-}
-
-.custom-control-input.is-valid:focus~.custom-control-label::before,
-.was-validated .custom-control-input:valid:focus~.custom-control-label::before {
- box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25)
-}
-
-.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,
-.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before {
- border-color: #28a745
-}
-
-.custom-file-input.is-valid~.custom-file-label,
-.was-validated .custom-file-input:valid~.custom-file-label {
- border-color: #28a745
-}
-
-.custom-file-input.is-valid~.valid-feedback,
-.custom-file-input.is-valid~.valid-tooltip,
-.was-validated .custom-file-input:valid~.valid-feedback,
-.was-validated .custom-file-input:valid~.valid-tooltip {
- display: block
-}
-
-.custom-file-input.is-valid:focus~.custom-file-label,
-.was-validated .custom-file-input:valid:focus~.custom-file-label {
- border-color: #28a745;
- box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25)
-}
-
-.invalid-feedback {
- display: none;
- width: 100%;
- margin-top: .25rem;
- font-size: 80%;
- color: #dc3545
-}
-
-.invalid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: .25rem .5rem;
- margin-top: .1rem;
- font-size: .875rem;
- line-height: 1.5;
- color: #fff;
- background-color: rgba(220, 53, 69, .9);
- border-radius: .25rem
-}
-
-.form-control.is-invalid,
-.was-validated .form-control:invalid {
- border-color: #dc3545;
- padding-right: calc(1.5em + .75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E");
- background-repeat: no-repeat;
- background-position: center right calc(.375em + .1875rem);
- background-size: calc(.75em + .375rem) calc(.75em + .375rem)
-}
-
-.form-control.is-invalid:focus,
-.was-validated .form-control:invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25)
-}
-
-.form-control.is-invalid~.invalid-feedback,
-.form-control.is-invalid~.invalid-tooltip,
-.was-validated .form-control:invalid~.invalid-feedback,
-.was-validated .form-control:invalid~.invalid-tooltip {
- display: block
-}
-
-.was-validated textarea.form-control:invalid,
-textarea.form-control.is-invalid {
- padding-right: calc(1.5em + .75rem);
- background-position: top calc(.375em + .1875rem) right calc(.375em + .1875rem)
-}
-
-.custom-select.is-invalid,
-.was-validated .custom-select:invalid {
- border-color: #dc3545;
- padding-right: calc((1em + .75rem) * 3 / 4 + 1.75rem);
- background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3ccircle r=!string!/%3e%3ccircle cx=!string!r=!string!/%3e%3ccircle cy=!string!r=!string!/%3e%3ccircle cx=!string!cy=!string!r=!string!/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)
-}
-
-.custom-select.is-invalid:focus,
-.was-validated .custom-select:invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25)
-}
-
-.custom-select.is-invalid~.invalid-feedback,
-.custom-select.is-invalid~.invalid-tooltip,
-.was-validated .custom-select:invalid~.invalid-feedback,
-.was-validated .custom-select:invalid~.invalid-tooltip {
- display: block
-}
-
-.form-control-file.is-invalid~.invalid-feedback,
-.form-control-file.is-invalid~.invalid-tooltip,
-.was-validated .form-control-file:invalid~.invalid-feedback,
-.was-validated .form-control-file:invalid~.invalid-tooltip {
- display: block
-}
-
-.form-check-input.is-invalid~.form-check-label,
-.was-validated .form-check-input:invalid~.form-check-label {
- color: #dc3545
-}
-
-.form-check-input.is-invalid~.invalid-feedback,
-.form-check-input.is-invalid~.invalid-tooltip,
-.was-validated .form-check-input:invalid~.invalid-feedback,
-.was-validated .form-check-input:invalid~.invalid-tooltip {
- display: block
-}
-
-.custom-control-input.is-invalid~.custom-control-label,
-.was-validated .custom-control-input:invalid~.custom-control-label {
- color: #dc3545
-}
-
-.custom-control-input.is-invalid~.custom-control-label::before,
-.was-validated .custom-control-input:invalid~.custom-control-label::before {
- border-color: #dc3545
-}
-
-.custom-control-input.is-invalid~.invalid-feedback,
-.custom-control-input.is-invalid~.invalid-tooltip,
-.was-validated .custom-control-input:invalid~.invalid-feedback,
-.was-validated .custom-control-input:invalid~.invalid-tooltip {
- display: block
-}
-
-.custom-control-input.is-invalid:checked~.custom-control-label::before,
-.was-validated .custom-control-input:invalid:checked~.custom-control-label::before {
- border-color: #e4606d;
- background-color: #e4606d
-}
-
-.custom-control-input.is-invalid:focus~.custom-control-label::before,
-.was-validated .custom-control-input:invalid:focus~.custom-control-label::before {
- box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25)
-}
-
-.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,
-.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before {
- border-color: #dc3545
-}
-
-.custom-file-input.is-invalid~.custom-file-label,
-.was-validated .custom-file-input:invalid~.custom-file-label {
- border-color: #dc3545
-}
-
-.custom-file-input.is-invalid~.invalid-feedback,
-.custom-file-input.is-invalid~.invalid-tooltip,
-.was-validated .custom-file-input:invalid~.invalid-feedback,
-.was-validated .custom-file-input:invalid~.invalid-tooltip {
- display: block
-}
-
-.custom-file-input.is-invalid:focus~.custom-file-label,
-.was-validated .custom-file-input:invalid:focus~.custom-file-label {
- border-color: #dc3545;
- box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25)
-}
-
-.form-inline {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row wrap;
- -webkit-box-align: center;
- align-items: center
-}
-
-.form-inline .form-check {
- width: 100%
-}
-
-@media (min-width:576px) {
- .form-inline label {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center;
- margin-bottom: 0
- }
-
- .form-inline .form-group {
- display: -webkit-box;
- display: flex;
- -webkit-box-flex: 0;
- flex: 0 0 auto;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row wrap;
- -webkit-box-align: center;
- align-items: center;
- margin-bottom: 0
- }
-
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle
- }
-
- .form-inline .form-control-plaintext {
- display: inline-block
- }
-
- .form-inline .custom-select,
- .form-inline .input-group {
- width: auto
- }
-
- .form-inline .form-check {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center;
- width: auto;
- padding-left: 0
- }
-
- .form-inline .form-check-input {
- position: relative;
- flex-shrink: 0;
- margin-top: 0;
- margin-right: .25rem;
- margin-left: 0
- }
-
- .form-inline .custom-control {
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center
- }
-
- .form-inline .custom-control-label {
- margin-bottom: 0
- }
-
-}
-
-.btn {
- display: inline-block;
- font-weight: 400;
- color: #212529;
- text-align: center;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: .375rem .75rem;
- font-size: 1rem;
- line-height: 1.5;
- border-radius: .25rem;
- -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .btn {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.btn:hover {
- color: #212529;
- text-decoration: none
-}
-
-.btn.focus,
-.btn:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.btn.disabled,
-.btn:disabled {
- opacity: .65
-}
-
-a.btn.disabled,
-fieldset:disabled a.btn {
- pointer-events: none
-}
-
-.btn-primary {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-primary:hover {
- color: #fff;
- background-color: #034b04;
- border-color: #023f03
-}
-
-.btn-primary.focus,
-.btn-primary:focus {
- box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5)
-}
-
-.btn-primary.disabled,
-.btn-primary:disabled {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-primary:not(:disabled):not(.disabled).active,
-.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle {
- color: #fff;
- background-color: #023f03;
- border-color: #023203
-}
-
-.btn-primary:not(:disabled):not(.disabled).active:focus,
-.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(42, 133, 43, .5)
-}
-
-.btn-secondary {
- color: #fff;
- background-color: grey;
- border-color: grey
-}
-
-.btn-secondary:hover {
- color: #fff;
- background-color: #6d6d6d;
- border-color: #676767
-}
-
-.btn-secondary.focus,
-.btn-secondary:focus {
- box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5)
-}
-
-.btn-secondary.disabled,
-.btn-secondary:disabled {
- color: #fff;
- background-color: grey;
- border-color: grey
-}
-
-.btn-secondary:not(:disabled):not(.disabled).active,
-.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle {
- color: #fff;
- background-color: #676767;
- border-color: #606060
-}
-
-.btn-secondary:not(:disabled):not(.disabled).active:focus,
-.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(147, 147, 147, .5)
-}
-
-.btn-success {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-success:hover {
- color: #fff;
- background-color: #00ba7a;
- border-color: #00ad72
-}
-
-.btn-success.focus,
-.btn-success:focus {
- box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5)
-}
-
-.btn-success.disabled,
-.btn-success:disabled {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-success:not(:disabled):not(.disabled).active,
-.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle {
- color: #fff;
- background-color: #00ad72;
- border-color: #00a069
-}
-
-.btn-success:not(:disabled):not(.disabled).active:focus,
-.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(38, 229, 163, .5)
-}
-
-.btn-info {
- color: #fff;
- background-color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-info:hover {
- color: #fff;
- background-color: #4a3df4;
- border-color: #3f31f3
-}
-
-.btn-info.focus,
-.btn-info:focus {
- box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5)
-}
-
-.btn-info.disabled,
-.btn-info:disabled {
- color: #fff;
- background-color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-info:not(:disabled):not(.disabled).active,
-.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle {
- color: #fff;
- background-color: #3f31f3;
- border-color: #3425f3
-}
-
-.btn-info:not(:disabled):not(.disabled).active:focus,
-.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(130, 121, 247, .5)
-}
-
-.btn-warning {
- color: #212529;
- background-color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-warning:hover {
- color: #fff;
- background-color: #ed673c;
- border-color: #ec5e30
-}
-
-.btn-warning.focus,
-.btn-warning:focus {
- box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5)
-}
-
-.btn-warning.disabled,
-.btn-warning:disabled {
- color: #212529;
- background-color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-warning:not(:disabled):not(.disabled).active,
-.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle {
- color: #fff;
- background-color: #ec5e30;
- border-color: #eb5425
-}
-
-.btn-warning:not(:disabled):not(.disabled).active:focus,
-.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(209, 116, 87, .5)
-}
-
-.btn-danger {
- color: #fff;
- background-color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-danger:hover {
- color: #fff;
- background-color: #ff3941;
- border-color: #ff2c35
-}
-
-.btn-danger.focus,
-.btn-danger:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5)
-}
-
-.btn-danger.disabled,
-.btn-danger:disabled {
- color: #fff;
- background-color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-danger:not(:disabled):not(.disabled).active,
-.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle {
- color: #fff;
- background-color: #ff2c35;
- border-color: #ff1f29
-}
-
-.btn-danger:not(:disabled):not(.disabled).active:focus,
-.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 119, 125, .5)
-}
-
-.btn-light {
- color: #212529;
- background-color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-light:hover {
- color: #212529;
- background-color: #ccc;
- border-color: #c6c6c6
-}
-
-.btn-light.focus,
-.btn-light:focus {
- box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5)
-}
-
-.btn-light.disabled,
-.btn-light:disabled {
- color: #212529;
- background-color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-light:not(:disabled):not(.disabled).active,
-.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle {
- color: #212529;
- background-color: #c6c6c6;
- border-color: #bfbfbf
-}
-
-.btn-light:not(:disabled):not(.disabled).active:focus,
-.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(195, 195, 196, .5)
-}
-
-.btn-dark {
- color: #fff;
- background-color: #74767b;
- border-color: #74767b
-}
-
-.btn-dark:hover {
- color: #fff;
- background-color: #616367;
- border-color: #5b5d61
-}
-
-.btn-dark.focus,
-.btn-dark:focus {
- box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5)
-}
-
-.btn-dark.disabled,
-.btn-dark:disabled {
- color: #fff;
- background-color: #74767b;
- border-color: #74767b
-}
-
-.btn-dark:not(:disabled):not(.disabled).active,
-.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle {
- color: #fff;
- background-color: #5b5d61;
- border-color: #55575a
-}
-
-.btn-dark:not(:disabled):not(.disabled).active:focus,
-.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(137, 139, 143, .5)
-}
-
-.btn-white {
- color: #212529;
- background-color: #fff;
- border-color: #fff
-}
-
-.btn-white:hover {
- color: #212529;
- background-color: #ececec;
- border-color: #e6e6e6
-}
-
-.btn-white.focus,
-.btn-white:focus {
- box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5)
-}
-
-.btn-white.disabled,
-.btn-white:disabled {
- color: #212529;
- background-color: #fff;
- border-color: #fff
-}
-
-.btn-white:not(:disabled):not(.disabled).active,
-.btn-white:not(:disabled):not(.disabled):active,.show>.btn-white.dropdown-toggle {
- color: #212529;
- background-color: #e6e6e6;
- border-color: #dfdfdf
-}
-
-.btn-white:not(:disabled):not(.disabled).active:focus,
-.btn-white:not(:disabled):not(.disabled):active:focus,.show>.btn-white.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(222, 222, 223, .5)
-}
-
-.btn-outline-primary {
- color: #047006;
- border-color: #047006
-}
-
-.btn-outline-primary:hover {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-outline-primary.focus,
-.btn-outline-primary:focus {
- box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5)
-}
-
-.btn-outline-primary.disabled,
-.btn-outline-primary:disabled {
- color: #047006;
- background-color: transparent
-}
-
-.btn-outline-primary:not(:disabled):not(.disabled).active,
-.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
-.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5)
-}
-
-.btn-outline-secondary {
- color: grey;
- border-color: grey
-}
-
-.btn-outline-secondary:hover {
- color: #fff;
- background-color: grey;
- border-color: grey
-}
-
-.btn-outline-secondary.focus,
-.btn-outline-secondary:focus {
- box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5)
-}
-
-.btn-outline-secondary.disabled,
-.btn-outline-secondary:disabled {
- color: grey;
- background-color: transparent
-}
-
-.btn-outline-secondary:not(:disabled):not(.disabled).active,
-.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle {
- color: #fff;
- background-color: grey;
- border-color: grey
-}
-
-.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,
-.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5)
-}
-
-.btn-outline-success {
- color: #047006;
- border-color: #047006
-}
-
-.btn-outline-success:hover {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-outline-success.focus,
-.btn-outline-success:focus {
- box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5)
-}
-
-.btn-outline-success.disabled,
-.btn-outline-success:disabled {
- color: #047006;
- background-color: transparent
-}
-
-.btn-outline-success:not(:disabled):not(.disabled).active,
-.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle {
- color: #fff;
- background-color: #047006;
- border-color: #047006
-}
-
-.btn-outline-success:not(:disabled):not(.disabled).active:focus,
-.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5)
-}
-
-.btn-outline-info {
- color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-outline-info:hover {
- color: #fff;
- background-color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-outline-info.focus,
-.btn-outline-info:focus {
- box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5)
-}
-
-.btn-outline-info.disabled,
-.btn-outline-info:disabled {
- color: #6c61f6;
- background-color: transparent
-}
-
-.btn-outline-info:not(:disabled):not(.disabled).active,
-.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle {
- color: #fff;
- background-color: #6c61f6;
- border-color: #6c61f6
-}
-
-.btn-outline-info:not(:disabled):not(.disabled).active:focus,
-.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5)
-}
-
-.btn-outline-warning {
- color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-outline-warning:hover {
- color: #212529;
- background-color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-outline-warning.focus,
-.btn-outline-warning:focus {
- box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5)
-}
-
-.btn-outline-warning.disabled,
-.btn-outline-warning:disabled {
- color: #f0825f;
- background-color: transparent
-}
-
-.btn-outline-warning:not(:disabled):not(.disabled).active,
-.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle {
- color: #212529;
- background-color: #f0825f;
- border-color: #f0825f
-}
-
-.btn-outline-warning:not(:disabled):not(.disabled).active:focus,
-.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5)
-}
-
-.btn-outline-danger {
- color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-outline-danger:hover {
- color: #fff;
- background-color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-outline-danger.focus,
-.btn-outline-danger:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5)
-}
-
-.btn-outline-danger.disabled,
-.btn-outline-danger:disabled {
- color: #ff5f66;
- background-color: transparent
-}
-
-.btn-outline-danger:not(:disabled):not(.disabled).active,
-.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle {
- color: #fff;
- background-color: #ff5f66;
- border-color: #ff5f66
-}
-
-.btn-outline-danger:not(:disabled):not(.disabled).active:focus,
-.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5)
-}
-
-.btn-outline-light {
- color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-outline-light:hover {
- color: #212529;
- background-color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-outline-light.focus,
-.btn-outline-light:focus {
- box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5)
-}
-
-.btn-outline-light.disabled,
-.btn-outline-light:disabled {
- color: #dfdfdf;
- background-color: transparent
-}
-
-.btn-outline-light:not(:disabled):not(.disabled).active,
-.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle {
- color: #212529;
- background-color: #dfdfdf;
- border-color: #dfdfdf
-}
-
-.btn-outline-light:not(:disabled):not(.disabled).active:focus,
-.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5)
-}
-
-.btn-outline-dark {
- color: #74767b;
- border-color: #74767b
-}
-
-.btn-outline-dark:hover {
- color: #fff;
- background-color: #74767b;
- border-color: #74767b
-}
-
-.btn-outline-dark.focus,
-.btn-outline-dark:focus {
- box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5)
-}
-
-.btn-outline-dark.disabled,
-.btn-outline-dark:disabled {
- color: #74767b;
- background-color: transparent
-}
-
-.btn-outline-dark:not(:disabled):not(.disabled).active,
-.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle {
- color: #fff;
- background-color: #74767b;
- border-color: #74767b
-}
-
-.btn-outline-dark:not(:disabled):not(.disabled).active:focus,
-.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5)
-}
-
-.btn-outline-white {
- color: #fff;
- border-color: #fff
-}
-
-.btn-outline-white:hover {
- color: #212529;
- background-color: #fff;
- border-color: #fff
-}
-
-.btn-outline-white.focus,
-.btn-outline-white:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5)
-}
-
-.btn-outline-white.disabled,
-.btn-outline-white:disabled {
- color: #fff;
- background-color: transparent
-}
-
-.btn-outline-white:not(:disabled):not(.disabled).active,
-.btn-outline-white:not(:disabled):not(.disabled):active,.show>.btn-outline-white.dropdown-toggle {
- color: #212529;
- background-color: #fff;
- border-color: #fff
-}
-
-.btn-outline-white:not(:disabled):not(.disabled).active:focus,
-.btn-outline-white:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-white.dropdown-toggle:focus {
- box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5)
-}
-
-.btn-link {
- font-weight: 400;
- color: #047006;
- text-decoration: none
-}
-
-.btn-link:hover {
- color: #012602;
- text-decoration: underline
-}
-
-.btn-link.focus,
-.btn-link:focus {
- text-decoration: underline;
- box-shadow: none
-}
-
-.btn-link.disabled,
-.btn-link:disabled {
- color: #6c757d;
- pointer-events: none
-}
-
-.btn-group-lg>.btn,
-.btn-lg {
- padding: .5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: .3rem
-}
-
-.btn-group-sm>.btn,
-.btn-sm {
- padding: .25rem .5rem;
- font-size: .875rem;
- line-height: 1.5;
- border-radius: .2rem
-}
-
-.btn-block {
- display: block;
- width: 100%
-}
-
-.btn-block+.btn-block {
- margin-top: .5rem
-}
-
-input[type=button].btn-block,
-input[type=reset].btn-block,
-input[type=submit].btn-block {
- width: 100%
-}
-
-.fade {
- -webkit-transition: opacity .15s linear;
- transition: opacity .15s linear
-}
-
-@media (prefers-reduced-motion:reduce) {
- .fade {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.fade:not(.show) {
- opacity: 0
-}
-
-.collapse:not(.show) {
- display: none
-}
-
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition: height .35s ease;
- transition: height .35s ease
-}
-
-@media (prefers-reduced-motion:reduce) {
- .collapsing {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.dropdown,
-.dropleft,
-.dropright,
-.dropup {
- position: relative
-}
-
-.dropdown-toggle {
- white-space: nowrap
-}
-
-.dropdown-toggle::after {
- display: inline-block;
- margin-left: .255em;
- vertical-align: .255em;
- content: 'http://www.w3.org/2000/svg';
- border-top: .3em solid;
- border-right: .3em solid transparent;
- border-bottom: 0;
- border-left: .3em solid transparent
-}
-
-.dropdown-toggle:empty::after {
- margin-left: 0
-}
-
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 10rem;
- padding: .5rem 0;
- margin: .125rem 0 0;
- font-size: 1rem;
- color: #212529;
- text-align: left;
- list-style: none;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, .15);
- border-radius: .25rem
-}
-
-.dropdown-menu-left {
- right: auto;
- left: 0
-}
-
-.dropdown-menu-right {
- right: 0;
- left: auto
-}
-
-@media (min-width:576px) {
- .dropdown-menu-sm-left {
- right: auto;
- left: 0
- }
-
- .dropdown-menu-sm-right {
- right: 0;
- left: auto
- }
-
-}
-
-@media (min-width:768px) {
- .dropdown-menu-md-left {
- right: auto;
- left: 0
- }
-
- .dropdown-menu-md-right {
- right: 0;
- left: auto
- }
-
-}
-
-@media (min-width:992px) {
- .dropdown-menu-lg-left {
- right: auto;
- left: 0
- }
-
- .dropdown-menu-lg-right {
- right: 0;
- left: auto
- }
-
-}
-
-@media (min-width:1200px) {
- .dropdown-menu-xl-left {
- right: auto;
- left: 0
- }
-
- .dropdown-menu-xl-right {
- right: 0;
- left: auto
- }
-
-}
-
-.dropup .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-top: 0;
- margin-bottom: .125rem
-}
-
-.dropup .dropdown-toggle::after {
- display: inline-block;
- margin-left: .255em;
- vertical-align: .255em;
- content: '0 0 8 8';
- border-top: 0;
- border-right: .3em solid transparent;
- border-bottom: .3em solid;
- border-left: .3em solid transparent
-}
-
-.dropup .dropdown-toggle:empty::after {
- margin-left: 0
-}
-
-.dropright .dropdown-menu {
- top: 0;
- right: auto;
- left: 100%;
- margin-top: 0;
- margin-left: .125rem
-}
-
-.dropright .dropdown-toggle::after {
- display: inline-block;
- margin-left: .255em;
- vertical-align: .255em;
- content: '%2328a745';
- border-top: .3em solid transparent;
- border-right: 0;
- border-bottom: .3em solid transparent;
- border-left: .3em solid
-}
-
-.dropright .dropdown-toggle:empty::after {
- margin-left: 0
-}
-
-.dropright .dropdown-toggle::after {
- vertical-align: 0
-}
-
-.dropleft .dropdown-menu {
- top: 0;
- right: 100%;
- left: auto;
- margin-top: 0;
- margin-right: .125rem
-}
-
-.dropleft .dropdown-toggle::after {
- display: inline-block;
- margin-left: .255em;
- vertical-align: .255em;
- content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'
-}
-
-.dropleft .dropdown-toggle::after {
- display: none
-}
-
-.dropleft .dropdown-toggle::before {
- display: inline-block;
- margin-right: .255em;
- vertical-align: .255em;
- content: 'http://www.w3.org/2000/svg';
- border-top: .3em solid transparent;
- border-right: .3em solid;
- border-bottom: .3em solid transparent
-}
-
-.dropleft .dropdown-toggle:empty::after {
- margin-left: 0
-}
-
-.dropleft .dropdown-toggle::before {
- vertical-align: 0
-}
-
-.dropdown-menu[x-placement^=bottom],
-.dropdown-menu[x-placement^=left],
-.dropdown-menu[x-placement^=right],
-.dropdown-menu[x-placement^=top] {
- right: auto;
- bottom: auto
-}
-
-.dropdown-divider {
- height: 0;
- margin: .5rem 0;
- overflow: hidden;
- border-top: 1px solid #e9ecef
-}
-
-.dropdown-item {
- display: block;
- width: 100%;
- padding: .25rem 1.5rem;
- clear: both;
- font-weight: 400;
- color: #212529;
- text-align: inherit;
- white-space: nowrap;
- background-color: transparent;
- border: 0
-}
-
-.dropdown-item:focus,
-.dropdown-item:hover {
- color: #16181b;
- text-decoration: none;
- background-color: #f8f9fa
-}
-
-.dropdown-item.active,
-.dropdown-item:active {
- color: #fff;
- text-decoration: none;
- background-color: #007bff
-}
-
-.dropdown-item.disabled,
-.dropdown-item:disabled {
- color: #6c757d;
- pointer-events: none;
- background-color: transparent
-}
-
-.dropdown-menu.show {
- display: block
-}
-
-.dropdown-header {
- display: block;
- padding: .5rem 1.5rem;
- margin-bottom: 0;
- font-size: .875rem;
- color: #6c757d;
- white-space: nowrap
-}
-
-.dropdown-item-text {
- display: block;
- padding: .25rem 1.5rem;
- color: #212529
-}
-
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: -webkit-inline-box;
- display: inline-flex;
- vertical-align: middle
-}
-
-.btn-group-vertical>.btn,
-.btn-group>.btn {
- position: relative;
- -webkit-box-flex: 1;
- flex: 1 1 auto
-}
-
-.btn-group-vertical>.btn:hover,
-.btn-group>.btn:hover {
- z-index: 1
-}
-
-.btn-group-vertical>.btn.active,
-.btn-group-vertical>.btn:active,
-.btn-group-vertical>.btn:focus,
-.btn-group>.btn.active,
-.btn-group>.btn:active,
-.btn-group>.btn:focus {
- z-index: 1
-}
-
-.btn-toolbar {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -webkit-box-pack: start;
- justify-content: flex-start
-}
-
-.btn-toolbar .input-group {
- width: auto
-}
-
-.btn-group>.btn-group:not(:first-child),
-.btn-group>.btn:not(:first-child) {
- margin-left: -1px
-}
-
-.btn-group>.btn-group:not(:last-child)>.btn,
-.btn-group>.btn:not(:last-child):not(.dropdown-toggle) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
-}
-
-.btn-group>.btn-group:not(:first-child)>.btn,
-.btn-group>.btn:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.dropdown-toggle-split {
- padding-right: .5625rem;
- padding-left: .5625rem
-}
-
-.dropdown-toggle-split::after,
-.dropright .dropdown-toggle-split::after,
-.dropup .dropdown-toggle-split::after {
- margin-left: 0
-}
-
-.dropleft .dropdown-toggle-split::before {
- margin-right: 0
-}
-
-.btn-group-sm>.btn+.dropdown-toggle-split,
-.btn-sm+.dropdown-toggle-split {
- padding-right: .375rem;
- padding-left: .375rem
-}
-
-.btn-group-lg>.btn+.dropdown-toggle-split,
-.btn-lg+.dropdown-toggle-split {
- padding-right: .75rem;
- padding-left: .75rem
-}
-
-.btn-group-vertical {
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- -webkit-box-align: start;
- align-items: flex-start;
- -webkit-box-pack: center;
- justify-content: center
-}
-
-.btn-group-vertical>.btn,
-.btn-group-vertical>.btn-group {
- width: 100%
-}
-
-.btn-group-vertical>.btn-group:not(:first-child),
-.btn-group-vertical>.btn:not(:first-child) {
- margin-top: -1px
-}
-
-.btn-group-vertical>.btn-group:not(:last-child)>.btn,
-.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.btn-group-vertical>.btn-group:not(:first-child)>.btn,
-.btn-group-vertical>.btn:not(:first-child) {
- border-top-left-radius: 0;
- border-top-right-radius: 0
-}
-
-.btn-group-toggle>.btn,
-.btn-group-toggle>.btn-group>.btn {
- margin-bottom: 0
-}
-
-.btn-group-toggle>.btn input[type=checkbox],
-.btn-group-toggle>.btn input[type=radio],
-.btn-group-toggle>.btn-group>.btn input[type=checkbox],
-.btn-group-toggle>.btn-group>.btn input[type=radio] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none
-}
-
-.input-group {
- position: relative;
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -webkit-box-align: stretch;
- align-items: stretch;
- width: 100%
-}
-
-.input-group>.custom-file,
-.input-group>.custom-select,
-.input-group>.form-control,
-.input-group>.form-control-plaintext {
- position: relative;
- -webkit-box-flex: 1;
- flex: 1 1 auto;
- width: 1%;
- margin-bottom: 0
-}
-
-.input-group>.custom-file+.custom-file,
-.input-group>.custom-file+.custom-select,
-.input-group>.custom-file+.form-control,
-.input-group>.custom-select+.custom-file,
-.input-group>.custom-select+.custom-select,
-.input-group>.custom-select+.form-control,
-.input-group>.form-control+.custom-file,
-.input-group>.form-control+.custom-select,
-.input-group>.form-control+.form-control,
-.input-group>.form-control-plaintext+.custom-file,
-.input-group>.form-control-plaintext+.custom-select,
-.input-group>.form-control-plaintext+.form-control {
- margin-left: -1px
-}
-
-.input-group>.custom-file .custom-file-input:focus~.custom-file-label,
-.input-group>.custom-select:focus,
-.input-group>.form-control:focus {
- z-index: 3
-}
-
-.input-group>.custom-file .custom-file-input:focus {
- z-index: 4
-}
-
-.input-group>.custom-select:not(:last-child),
-.input-group>.form-control:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
-}
-
-.input-group>.custom-select:not(:first-child),
-.input-group>.form-control:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.input-group>.custom-file {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center
-}
-
-.input-group>.custom-file:not(:last-child) .custom-file-label,
-.input-group>.custom-file:not(:last-child) .custom-file-label::after {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
-}
-
-.input-group>.custom-file:not(:first-child) .custom-file-label {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.input-group-append,
-.input-group-prepend {
- display: -webkit-box;
- display: flex
-}
-
-.input-group-append .btn,
-.input-group-prepend .btn {
- position: relative;
- z-index: 2
-}
-
-.input-group-append .btn:focus,
-.input-group-prepend .btn:focus {
- z-index: 3
-}
-
-.input-group-append .btn+.btn,
-.input-group-append .btn+.input-group-text,
-.input-group-append .input-group-text+.btn,
-.input-group-append .input-group-text+.input-group-text,
-.input-group-prepend .btn+.btn,
-.input-group-prepend .btn+.input-group-text,
-.input-group-prepend .input-group-text+.btn,
-.input-group-prepend .input-group-text+.input-group-text {
- margin-left: -1px
-}
-
-.input-group-prepend {
- margin-right: -1px
-}
-
-.input-group-append {
- margin-left: -1px
-}
-
-.input-group-text {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- padding: .375rem .75rem;
- margin-bottom: 0;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #6c757d;
- text-align: center;
- white-space: nowrap;
- background-color: #e9ecef;
- border: 1px solid #f0f2f5;
- border-radius: .25rem
-}
-
-.input-group-text input[type=checkbox],
-.input-group-text input[type=radio] {
- margin-top: 0
-}
-
-.input-group-lg>.custom-select,
-.input-group-lg>.form-control:not(textarea) {
- height: calc(1.5em + 1rem + 2px)
-}
-
-.input-group-lg>.custom-select,
-.input-group-lg>.form-control,
-.input-group-lg>.input-group-append>.btn,
-.input-group-lg>.input-group-append>.input-group-text,
-.input-group-lg>.input-group-prepend>.btn,
-.input-group-lg>.input-group-prepend>.input-group-text {
- padding: .5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: .3rem
-}
-
-.input-group-sm>.custom-select,
-.input-group-sm>.form-control:not(textarea) {
- height: calc(1.5em + .5rem + 2px)
-}
-
-.input-group-sm>.custom-select,
-.input-group-sm>.form-control,
-.input-group-sm>.input-group-append>.btn,
-.input-group-sm>.input-group-append>.input-group-text,
-.input-group-sm>.input-group-prepend>.btn,
-.input-group-sm>.input-group-prepend>.input-group-text {
- padding: .25rem .5rem;
- font-size: .875rem;
- line-height: 1.5;
- border-radius: .2rem
-}
-
-.input-group-lg>.custom-select,
-.input-group-sm>.custom-select {
- padding-right: 1.75rem
-}
-
-.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),
-.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),
-.input-group>.input-group-append:not(:last-child)>.btn,
-.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
-}
-
-.input-group>.input-group-append>.btn,
-.input-group>.input-group-append>.input-group-text,
-.input-group>.input-group-prepend:first-child>.btn:not(:first-child),
-.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),
-.input-group>.input-group-prepend:not(:first-child)>.btn,
-.input-group>.input-group-prepend:not(:first-child)>.input-group-text {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.custom-control {
- position: relative;
- display: block;
- min-height: 1.7rem;
- padding-left: 1.9rem
-}
-
-.custom-control-inline {
- display: -webkit-inline-box;
- display: inline-flex;
- margin-right: 1rem
-}
-
-.custom-control-input {
- position: absolute;
- z-index: -1;
- opacity: 0
-}
-
-.custom-control-input:checked~.custom-control-label::before {
- color: #fff;
- border-color: #047006;
- background-color: #047006
-}
-
-.custom-control-input:focus~.custom-control-label::before {
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-control-input:focus:not(:checked)~.custom-control-label::before {
- border-color: #80bdff
-}
-
-.custom-control-input:not(:disabled):active~.custom-control-label::before {
- color: #fff;
- background-color: #b3d7ff;
- border-color: #b3d7ff
-}
-
-.custom-control-input:disabled~.custom-control-label {
- color: #6c757d
-}
-
-.custom-control-input:disabled~.custom-control-label::before {
- background-color: #e9ecef
-}
-
-.custom-control-label {
- position: relative;
- margin-bottom: 0;
- vertical-align: top
-}
-
-.custom-control-label::before {
- position: absolute;
- top: .15rem;
- left: -1.9rem;
- display: block;
- width: 1.4rem;
- height: 1.4rem;
- pointer-events: none;
- content: '0 0 4 5';
- background-color: #fff;
- border: #e1e5f1 solid 1px
-}
-
-.custom-control-label::after {
- position: absolute;
- top: .15rem;
- left: -1.9rem;
- display: block;
- width: 1.4rem;
- height: 1.4rem;
- content: '%23343a40';
- background: no-repeat 50%/50% 50%
-}
-
-.custom-checkbox .custom-control-label::before {
- border-radius: .25rem
-}
-
-.custom-checkbox .custom-control-input:checked~.custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e")
-}
-
-.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before {
- border-color: #007bff;
- background-color: #007bff
-}
-
-.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath stroke=!string!d=!string!/%3e%3c/svg%3e")
-}
-
-.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before {
- background-color: rgba(0, 123, 255, .5)
-}
-
-.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before {
- background-color: rgba(0, 123, 255, .5)
-}
-
-.custom-radio .custom-control-label::before {
- border-radius: 50%
-}
-
-.custom-radio .custom-control-input:checked~.custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3ccircle r=!string!fill=!string!/%3e%3c/svg%3e")
-}
-
-.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before {
- background-color: rgba(0, 123, 255, .5)
-}
-
-.custom-switch {
- padding-left: 2.8rem
-}
-
-.custom-switch .custom-control-label::before {
- left: -2.8rem;
- width: 2.3rem;
- pointer-events: all;
- border-radius: 25px
-}
-
-.custom-switch .custom-control-label::after {
- top: calc(.15rem + 2px);
- left: calc(-2.8rem + 2px);
- width: 1.1rem;
- height: 1.1rem;
- background-color: #e1e5f1;
- border-radius: 25px;
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out;
- transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: transform .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-switch .custom-control-label::after {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.custom-switch .custom-control-input:checked~.custom-control-label::after {
- background-color: #fff;
- -webkit-transform: translateX(.9rem);
- transform: translateX(.9rem)
-}
-
-.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before {
- background-color: rgba(0, 123, 255, .5)
-}
-
-.custom-select {
- display: inline-block;
- width: 100%;
- height: calc(1.5em + .75rem + 2px);
- padding: .375rem 1.75rem .375rem .75rem;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #495057;
- vertical-align: middle;
- background: url("data:image/svg+xml,%3csvg xmlns=!string!viewBox=!string!%3e%3cpath fill=!string!d=!string!/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;
- background-color: #fff;
- border: 1px solid #ced4da;
- border-radius: .25rem;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none
-}
-
-.custom-select:focus {
- border-color: #80bdff;
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-select:focus::-ms-value {
- color: #6c757d;
- background-color: #f6f7f9
-}
-
-.custom-select[multiple],
-.custom-select[size]:not([size='M2 0L0 2h4zm0 5L0 3h4z']) {
- height: auto;
- padding-right: .75rem;
- background-image: none
-}
-
-.custom-select:disabled {
- color: #6c757d;
- background-color: #e9ecef
-}
-
-.custom-select::-ms-expand {
- display: none
-}
-
-.custom-select-sm {
- height: calc(1.5em + .5rem + 2px);
- padding-top: .25rem;
- padding-bottom: .25rem;
- padding-left: .5rem;
- font-size: .875rem
-}
-
-.custom-select-lg {
- height: calc(1.5em + 1rem + 2px);
- padding-top: .5rem;
- padding-bottom: .5rem;
- padding-left: 1rem;
- font-size: 1.25rem
-}
-
-.custom-file {
- position: relative;
- display: inline-block;
- width: 100%;
- height: calc(1.5em + .75rem + 2px);
- margin-bottom: 0
-}
-
-.custom-file-input {
- position: relative;
- z-index: 2;
- width: 100%;
- height: calc(1.5em + .75rem + 2px);
- margin: 0;
- opacity: 0
-}
-
-.custom-file-input:focus~.custom-file-label {
- border-color: #80bdff;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-file-input:disabled~.custom-file-label {
- background-color: #e9ecef
-}
-
-.custom-file-input:lang(en)~.custom-file-label::after {
- content: 'http://www.w3.org/2000/svg'
-}
-
-.custom-file-input~.custom-file-label[data-browse]::after {
- content: attr(data-browse)
-}
-
-.custom-file-label {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1;
- height: calc(1.5em + .75rem + 2px);
- padding: .375rem .75rem;
- font-weight: 400;
- line-height: 1.5;
- color: #6c757d;
- background-color: #f6f7f9;
- border: 1px solid #f0f2f5;
- border-radius: .25rem
-}
-
-.custom-file-label::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- z-index: 3;
- display: block;
- height: calc(1.5em + .75rem);
- padding: .375rem .75rem;
- line-height: 1.5;
- color: #495057;
- content: '0 0 8 8';
- background-color: #e9ecef;
- border-left: inherit;
- border-radius: 0 .25rem .25rem 0
-}
-
-.custom-range {
- width: 100%;
- height: calc(1rem + .4rem);
- padding: 0;
- background-color: transparent;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none
-}
-
-.custom-range:focus {
- outline: 0
-}
-
-.custom-range:focus::-webkit-slider-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-range:focus::-moz-range-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-range:focus::-ms-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.custom-range::-moz-focus-outer {
- border: 0
-}
-
-.custom-range::-webkit-slider-thumb {
- width: 1rem;
- height: 1rem;
- margin-top: -.25rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- -webkit-appearance: none;
- appearance: none
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-range::-webkit-slider-thumb {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.custom-range::-webkit-slider-thumb:active {
- background-color: #b3d7ff
-}
-
-.custom-range::-webkit-slider-runnable-track {
- width: 100%;
- height: .5rem;
- color: transparent;
- cursor: pointer;
- background-color: #dee2e6;
- border-color: transparent;
- border-radius: 1rem
-}
-
-.custom-range::-moz-range-thumb {
- width: 1rem;
- height: 1rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- -moz-appearance: none;
- appearance: none
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-range::-moz-range-thumb {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.custom-range::-moz-range-thumb:active {
- background-color: #b3d7ff
-}
-
-.custom-range::-moz-range-track {
- width: 100%;
- height: .5rem;
- color: transparent;
- cursor: pointer;
- background-color: #dee2e6;
- border-color: transparent;
- border-radius: 1rem
-}
-
-.custom-range::-ms-thumb {
- width: 1rem;
- height: 1rem;
- margin-top: 0;
- margin-right: .2rem;
- margin-left: .2rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- appearance: none
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-range::-ms-thumb {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.custom-range::-ms-thumb:active {
- background-color: #b3d7ff
-}
-
-.custom-range::-ms-track {
- width: 100%;
- height: .5rem;
- color: transparent;
- cursor: pointer;
- background-color: transparent;
- border-color: transparent;
- border-width: .5rem
-}
-
-.custom-range::-ms-fill-lower {
- background-color: #dee2e6;
- border-radius: 1rem
-}
-
-.custom-range::-ms-fill-upper {
- margin-right: 15px;
- background-color: #dee2e6;
- border-radius: 1rem
-}
-
-.custom-range:disabled::-webkit-slider-thumb {
- background-color: #adb5bd
-}
-
-.custom-range:disabled::-webkit-slider-runnable-track {
- cursor: default
-}
-
-.custom-range:disabled::-moz-range-thumb {
- background-color: #adb5bd
-}
-
-.custom-range:disabled::-moz-range-track {
- cursor: default
-}
-
-.custom-range:disabled::-ms-thumb {
- background-color: #adb5bd
-}
-
-.custom-control-label::before,
-.custom-file-label,
-.custom-select {
- -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .custom-control-label::before,
- .custom-file-label,
- .custom-select {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.nav {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none
-}
-
-.nav-link {
- display: block;
- padding: .5rem 1rem
-}
-
-.nav-link:focus,
-.nav-link:hover {
- text-decoration: none
-}
-
-.nav-link.disabled {
- color: #6c757d;
- pointer-events: none;
- cursor: default
-}
-
-.nav-tabs {
- border-bottom: 1px solid #dee2e6
-}
-
-.nav-tabs .nav-item {
- margin-bottom: -1px
-}
-
-.nav-tabs .nav-link {
- border: 1px solid transparent;
- border-top-left-radius: 2px;
- border-top-right-radius: 2px
-}
-
-.nav-tabs .nav-link:focus,
-.nav-tabs .nav-link:hover {
- border-color: #e9ecef #e9ecef #dee2e6
-}
-
-.nav-tabs .nav-link.disabled {
- color: #6c757d;
- background-color: transparent;
- border-color: transparent
-}
-
-.nav-tabs .nav-item.show .nav-link,
-.nav-tabs .nav-link.active {
- color: #495057;
- background-color: #fff;
- border-color: #dee2e6 #dee2e6 #fff
-}
-
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0
-}
-
-.nav-pills .nav-link {
- border-radius: 2px
-}
-
-.nav-pills .nav-link.active,
-.nav-pills .show>.nav-link {
- color: #fff;
- background-color: #007bff
-}
-
-.nav-fill .nav-item {
- -webkit-box-flex: 1;
- flex: 1 1 auto;
- text-align: center
-}
-
-.nav-justified .nav-item {
- flex-basis: 0;
- -webkit-box-flex: 1;
- flex-grow: 1;
- text-align: center
-}
-
-.tab-content>.tab-pane {
- display: none
-}
-
-.tab-content>.active {
- display: block
-}
-
-.navbar {
- position: relative;
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: justify;
- justify-content: space-between;
- padding: .5rem 1rem
-}
-
-.navbar>.container,
-.navbar>.container-fluid {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: justify;
- justify-content: space-between
-}
-
-.navbar-brand {
- display: inline-block;
- padding-top: .3125rem;
- padding-bottom: .3125rem;
- margin-right: 1rem;
- font-size: 1.25rem;
- line-height: inherit;
- white-space: nowrap
-}
-
-.navbar-brand:focus,
-.navbar-brand:hover {
- text-decoration: none
-}
-
-.navbar-nav {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none
-}
-
-.navbar-nav .nav-link {
- padding-right: 0;
- padding-left: 0
-}
-
-.navbar-nav .dropdown-menu {
- position: static;
- float: none
-}
-
-.navbar-text {
- display: inline-block;
- padding-top: .5rem;
- padding-bottom: .5rem
-}
-
-.navbar-collapse {
- flex-basis: 100%;
- -webkit-box-flex: 1;
- flex-grow: 1;
- -webkit-box-align: center;
- align-items: center
-}
-
-.navbar-toggler {
- padding: .25rem .75rem;
- font-size: 1.25rem;
- line-height: 1;
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: .25rem
-}
-
-.navbar-toggler:focus,
-.navbar-toggler:hover {
- text-decoration: none
-}
-
-.navbar-toggler-icon {
- display: inline-block;
- width: 1.5em;
- height: 1.5em;
- vertical-align: middle;
- content: '%2328a745';
- background: no-repeat center center;
- background-size: 100% 100%
-}
-
-@media (max-width:575.98px) {
- .navbar-expand-sm>.container,
- .navbar-expand-sm>.container-fluid {
- padding-right: 0;
- padding-left: 0
- }
-
-}
-
-@media (min-width:576px) {
- .navbar-expand-sm {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
- }
-
- .navbar-expand-sm .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .navbar-expand-sm .navbar-nav .dropdown-menu {
- position: absolute
- }
-
- .navbar-expand-sm .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
- }
-
- .navbar-expand-sm>.container,
- .navbar-expand-sm>.container-fluid {
- flex-wrap: nowrap
- }
-
- .navbar-expand-sm .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
- }
-
- .navbar-expand-sm .navbar-toggler {
- display: none
- }
-
-}
-
-@media (max-width:767.98px) {
- .navbar-expand-md>.container,
- .navbar-expand-md>.container-fluid {
- padding-right: 0;
- padding-left: 0
- }
-
-}
-
-@media (min-width:768px) {
- .navbar-expand-md {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
- }
-
- .navbar-expand-md .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .navbar-expand-md .navbar-nav .dropdown-menu {
- position: absolute
- }
-
- .navbar-expand-md .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
- }
-
- .navbar-expand-md>.container,
- .navbar-expand-md>.container-fluid {
- flex-wrap: nowrap
- }
-
- .navbar-expand-md .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
- }
-
- .navbar-expand-md .navbar-toggler {
- display: none
- }
-
-}
-
-@media (max-width:991.98px) {
- .navbar-expand-lg>.container,
- .navbar-expand-lg>.container-fluid {
- padding-right: 0;
- padding-left: 0
- }
-
-}
-
-@media (min-width:992px) {
- .navbar-expand-lg {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
- }
-
- .navbar-expand-lg .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .navbar-expand-lg .navbar-nav .dropdown-menu {
- position: absolute
- }
-
- .navbar-expand-lg .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
- }
-
- .navbar-expand-lg>.container,
- .navbar-expand-lg>.container-fluid {
- flex-wrap: nowrap
- }
-
- .navbar-expand-lg .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
- }
-
- .navbar-expand-lg .navbar-toggler {
- display: none
- }
-
-}
-
-@media (max-width:1199.98px) {
- .navbar-expand-xl>.container,
- .navbar-expand-xl>.container-fluid {
- padding-right: 0;
- padding-left: 0
- }
-
-}
-
-@media (min-width:1200px) {
- .navbar-expand-xl {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
- }
-
- .navbar-expand-xl .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .navbar-expand-xl .navbar-nav .dropdown-menu {
- position: absolute
- }
-
- .navbar-expand-xl .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
- }
-
- .navbar-expand-xl>.container,
- .navbar-expand-xl>.container-fluid {
- flex-wrap: nowrap
- }
-
- .navbar-expand-xl .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
- }
-
- .navbar-expand-xl .navbar-toggler {
- display: none
- }
-
-}
-
-.navbar-expand {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- justify-content: flex-start
-}
-
-.navbar-expand>.container,
-.navbar-expand>.container-fluid {
- padding-right: 0;
- padding-left: 0
-}
-
-.navbar-expand .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
-}
-
-.navbar-expand .navbar-nav .dropdown-menu {
- position: absolute
-}
-
-.navbar-expand .navbar-nav .nav-link {
- padding-right: .5rem;
- padding-left: .5rem
-}
-
-.navbar-expand>.container,
-.navbar-expand>.container-fluid {
- flex-wrap: nowrap
-}
-
-.navbar-expand .navbar-collapse {
- display: -webkit-box !important;
- display: flex !important;
- flex-basis: auto
-}
-
-.navbar-expand .navbar-toggler {
- display: none
-}
-
-.navbar-light .navbar-brand {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-light .navbar-brand:focus,
-.navbar-light .navbar-brand:hover {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-light .navbar-nav .nav-link {
- color: rgba(0, 0, 0, .5)
-}
-
-.navbar-light .navbar-nav .nav-link:focus,
-.navbar-light .navbar-nav .nav-link:hover {
- color: rgba(0, 0, 0, .7)
-}
-
-.navbar-light .navbar-nav .nav-link.disabled {
- color: rgba(0, 0, 0, .3)
-}
-
-.navbar-light .navbar-nav .active>.nav-link,
-.navbar-light .navbar-nav .nav-link.active,
-.navbar-light .navbar-nav .nav-link.show,
-.navbar-light .navbar-nav .show>.nav-link {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-light .navbar-toggler {
- color: rgba(0, 0, 0, .5);
- border-color: rgba(0, 0, 0, .1)
-}
-
-.navbar-light .navbar-toggler-icon {
- background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e")
-}
-
-.navbar-light .navbar-text {
- color: rgba(0, 0, 0, .5)
-}
-
-.navbar-light .navbar-text a {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-light .navbar-text a:focus,
-.navbar-light .navbar-text a:hover {
- color: rgba(0, 0, 0, .9)
-}
-
-.navbar-dark .navbar-brand {
- color: #fff
-}
-
-.navbar-dark .navbar-brand:focus,
-.navbar-dark .navbar-brand:hover {
- color: #fff
-}
-
-.navbar-dark .navbar-nav .nav-link {
- color: rgba(255, 255, 255, .5)
-}
-
-.navbar-dark .navbar-nav .nav-link:focus,
-.navbar-dark .navbar-nav .nav-link:hover {
- color: rgba(255, 255, 255, .75)
-}
-
-.navbar-dark .navbar-nav .nav-link.disabled {
- color: rgba(255, 255, 255, .25)
-}
-
-.navbar-dark .navbar-nav .active>.nav-link,
-.navbar-dark .navbar-nav .nav-link.active,
-.navbar-dark .navbar-nav .nav-link.show,
-.navbar-dark .navbar-nav .show>.nav-link {
- color: #fff
-}
-
-.navbar-dark .navbar-toggler {
- color: rgba(255, 255, 255, .5);
- border-color: rgba(255, 255, 255, .1)
-}
-
-.navbar-dark .navbar-toggler-icon {
- background-image: url("data:image/svg+xml,%3csvg viewBox=!string!xmlns=!string!%3e%3cpath stroke=!string!stroke-width=!string!stroke-linecap=!string!stroke-miterlimit=!string!d=!string!/%3e%3c/svg%3e")
-}
-
-.navbar-dark .navbar-text {
- color: rgba(255, 255, 255, .5)
-}
-
-.navbar-dark .navbar-text a {
- color: #fff
-}
-
-.navbar-dark .navbar-text a:focus,
-.navbar-dark .navbar-text a:hover {
- color: #fff
-}
-
-.card {
- position: relative;
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- min-width: 0;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: border-box;
- border: 1px solid rgba(238, 238, 238, .75);
- border-radius: .25rem
-}
-
-.card>hr {
- margin-right: 0;
- margin-left: 0
-}
-
-.card>.list-group:first-child .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-top-right-radius: .25rem
-}
-
-.card>.list-group:last-child .list-group-item:last-child {
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: .25rem
-}
-
-.card-body {
- -webkit-box-flex: 1;
- flex: 1 1 auto;
- padding: 1.25rem
-}
-
-.card-title {
- margin-bottom: .75rem
-}
-
-.card-subtitle {
- margin-top: -.375rem;
- margin-bottom: 0
-}
-
-.card-text:last-child {
- margin-bottom: 0
-}
-
-.card-link:hover {
- text-decoration: none
-}
-
-.card-link+.card-link {
- margin-left: 1.25rem
-}
-
-.card-header {
- padding: .75rem 1.25rem;
- margin-bottom: 0;
- background-color: rgba(0, 0, 0, .03);
- border-bottom: 1px solid rgba(238, 238, 238, .75)
-}
-
-.card-header:first-child {
- border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0
-}
-
-.card-header+.list-group .list-group-item:first-child {
- border-top: 0
-}
-
-.card-footer {
- padding: .75rem 1.25rem;
- background-color: rgba(0, 0, 0, .03);
- border-top: 1px solid rgba(238, 238, 238, .75)
-}
-
-.card-footer:last-child {
- border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px)
-}
-
-.card-header-tabs {
- margin-right: -.625rem;
- margin-bottom: -.75rem;
- margin-left: -.625rem;
- border-bottom: 0
-}
-
-.card-header-pills {
- margin-right: -.625rem;
- margin-left: -.625rem
-}
-
-.card-img-overlay {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1.25rem
-}
-
-.card-img {
- width: 100%;
- border-radius: calc(.25rem - 1px)
-}
-
-.card-img-top {
- width: 100%;
- border-top-left-radius: calc(.25rem - 1px);
- border-top-right-radius: calc(.25rem - 1px)
-}
-
-.card-img-bottom {
- width: 100%;
- border-bottom-right-radius: calc(.25rem - 1px);
- border-bottom-left-radius: calc(.25rem - 1px)
-}
-
-.card-deck {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column
-}
-
-.card-deck .card {
- margin-bottom: 15px
-}
-
-@media (min-width:576px) {
- .card-deck {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row wrap;
- margin-right: -15px;
- margin-left: -15px
- }
-
- .card-deck .card {
- display: -webkit-box;
- display: flex;
- -webkit-box-flex: 1;
- flex: 1 0 0%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- margin-right: 15px;
- margin-bottom: 0;
- margin-left: 15px
- }
-
-}
-
-.card-group {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column
-}
-
-.card-group>.card {
- margin-bottom: 15px
-}
-
-@media (min-width:576px) {
- .card-group {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-flow: row wrap
- }
-
- .card-group>.card {
- -webkit-box-flex: 1;
- flex: 1 0 0%;
- margin-bottom: 0
- }
-
- .card-group>.card+.card {
- margin-left: 0;
- border-left: 0
- }
-
- .card-group>.card:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0
- }
-
- .card-group>.card:not(:last-child) .card-header,
- .card-group>.card:not(:last-child) .card-img-top {
- border-top-right-radius: 0
- }
-
- .card-group>.card:not(:last-child) .card-footer,
- .card-group>.card:not(:last-child) .card-img-bottom {
- border-bottom-right-radius: 0
- }
-
- .card-group>.card:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0
- }
-
- .card-group>.card:not(:first-child) .card-header,
- .card-group>.card:not(:first-child) .card-img-top {
- border-top-left-radius: 0
- }
-
- .card-group>.card:not(:first-child) .card-footer,
- .card-group>.card:not(:first-child) .card-img-bottom {
- border-bottom-left-radius: 0
- }
-
-}
-
-.card-columns .card {
- margin-bottom: .75rem
-}
-
-@media (min-width:576px) {
- .card-columns {
- -webkit-column-count: 3;
- -moz-column-count: 3;
- column-count: 3;
- -webkit-column-gap: 1.25rem;
- -moz-column-gap: 1.25rem;
- column-gap: 1.25rem;
- orphans: 1;
- widows: 1
- }
-
- .card-columns .card {
- display: inline-block;
- width: 100%
- }
-
-}
-
-.accordion>.card {
- overflow: hidden
-}
-
-.accordion>.card:not(:first-of-type) .card-header:first-child {
- border-radius: 0
-}
-
-.accordion>.card:not(:first-of-type):not(:last-of-type) {
- border-bottom: 0;
- border-radius: 0
-}
-
-.accordion>.card:first-of-type {
- border-bottom: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0
-}
-
-.accordion>.card:last-of-type {
- border-top-left-radius: 0;
- border-top-right-radius: 0
-}
-
-.accordion>.card .card-header {
- margin-bottom: -1px
-}
-
-.breadcrumb {
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- padding: .75rem 1rem;
- margin-bottom: 1rem;
- list-style: none;
- background-color: #f7f9fa;
- border-radius: .25rem
-}
-
-.breadcrumb-item+.breadcrumb-item {
- padding-left: .5rem
-}
-
-.breadcrumb-item+.breadcrumb-item::before {
- display: inline-block;
- padding-right: .5rem;
- color: #a8a9ad;
- content: 'M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'
-}
-
-.breadcrumb-item+.breadcrumb-item:hover::before {
- text-decoration: underline
-}
-
-.breadcrumb-item+.breadcrumb-item:hover::before {
- text-decoration: none
-}
-
-.breadcrumb-item.active {
- color: #6c757d
-}
-
-.pagination {
- display: -webkit-box;
- display: flex;
- padding-left: 0;
- list-style: none;
- border-radius: 2px
-}
-
-.page-link {
- position: relative;
- display: block;
- padding: .5rem .75rem;
- margin-left: -1px;
- line-height: 1.25;
- color: #007bff;
- background-color: #fff;
- border: 1px solid #dee2e6
-}
-
-.page-link:hover {
- z-index: 2;
- color: #0056b3;
- text-decoration: none;
- background-color: #e9ecef;
- border-color: #dee2e6
-}
-
-.page-link:focus {
- z-index: 2;
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25)
-}
-
-.page-item:first-child .page-link {
- margin-left: 0;
- border-top-left-radius: 2px;
- border-bottom-left-radius: 2px
-}
-
-.page-item:last-child .page-link {
- border-top-right-radius: 2px;
- border-bottom-right-radius: 2px
-}
-
-.page-item.active .page-link {
- z-index: 1;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff
-}
-
-.page-item.disabled .page-link {
- color: #6c757d;
- pointer-events: none;
- cursor: auto;
- background-color: #fff;
- border-color: #dee2e6
-}
-
-.pagination-lg .page-link {
- padding: .75rem 1.5rem;
- font-size: 1.25rem;
- line-height: 1.5
-}
-
-.pagination-lg .page-item:first-child .page-link {
- border-top-left-radius: 6px;
- border-bottom-left-radius: 6px
-}
-
-.pagination-lg .page-item:last-child .page-link {
- border-top-right-radius: 6px;
- border-bottom-right-radius: 6px
-}
-
-.pagination-sm .page-link {
- padding: .25rem .5rem;
- font-size: .875rem;
- line-height: 1.5
-}
-
-.pagination-sm .page-item:first-child .page-link {
- border-top-left-radius: .2rem;
- border-bottom-left-radius: .2rem
-}
-
-.pagination-sm .page-item:last-child .page-link {
- border-top-right-radius: .2rem;
- border-bottom-right-radius: .2rem
-}
-
-.badge {
- display: inline-block;
- padding: .45rem 1rem;
- font-size: 80%;
- font-weight: 700;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25rem;
- -webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
- transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .badge {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-a.badge:focus,
-a.badge:hover {
- text-decoration: none
-}
-
-.badge:empty {
- display: none
-}
-
-.btn .badge {
- position: relative;
- top: -1px
-}
-
-.badge-pill {
- padding-right: .5rem;
- padding-left: .5rem;
- border-radius: 10rem
-}
-
-.badge-primary {
- color: #fff;
- background-color: #047006
-}
-
-a.badge-primary:focus,
-a.badge-primary:hover {
- color: #fff;
- background-color: #023f03
-}
-
-a.badge-primary.focus,
-a.badge-primary:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(4, 112, 6, .5)
-}
-
-.badge-secondary {
- color: #fff;
- background-color: grey
-}
-
-a.badge-secondary:focus,
-a.badge-secondary:hover {
- color: #fff;
- background-color: #676767
-}
-
-a.badge-secondary.focus,
-a.badge-secondary:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(128, 128, 128, .5)
-}
-
-.badge-success {
- color: #fff;
- background-color: #047006
-}
-
-a.badge-success:focus,
-a.badge-success:hover {
- color: #fff;
- background-color: #00ad72
-}
-
-a.badge-success.focus,
-a.badge-success:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(0, 224, 147, .5)
-}
-
-.badge-info {
- color: #fff;
- background-color: #6c61f6
-}
-
-a.badge-info:focus,
-a.badge-info:hover {
- color: #fff;
- background-color: #3f31f3
-}
-
-a.badge-info.focus,
-a.badge-info:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(108, 97, 246, .5)
-}
-
-.badge-warning {
- color: #212529;
- background-color: #f0825f
-}
-
-a.badge-warning:focus,
-a.badge-warning:hover {
- color: #212529;
- background-color: #ec5e30
-}
-
-a.badge-warning.focus,
-a.badge-warning:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(240, 130, 95, .5)
-}
-
-.badge-danger {
- color: #fff;
- background-color: #ff5f66
-}
-
-a.badge-danger:focus,
-a.badge-danger:hover {
- color: #fff;
- background-color: #ff2c35
-}
-
-a.badge-danger.focus,
-a.badge-danger:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(255, 95, 102, .5)
-}
-
-.badge-light {
- color: #212529;
- background-color: #dfdfdf
-}
-
-a.badge-light:focus,
-a.badge-light:hover {
- color: #212529;
- background-color: #c6c6c6
-}
-
-a.badge-light.focus,
-a.badge-light:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(223, 223, 223, .5)
-}
-
-.badge-dark {
- color: #fff;
- background-color: #74767b
-}
-
-a.badge-dark:focus,
-a.badge-dark:hover {
- color: #fff;
- background-color: #5b5d61
-}
-
-a.badge-dark.focus,
-a.badge-dark:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(116, 118, 123, .5)
-}
-
-.badge-white {
- color: #212529;
- background-color: #fff
-}
-
-a.badge-white:focus,
-a.badge-white:hover {
- color: #212529;
- background-color: #e6e6e6
-}
-
-a.badge-white.focus,
-a.badge-white:focus {
- outline: 0;
- box-shadow: 0 0 0 .2rem rgba(255, 255, 255, .5)
-}
-
-.jumbotron {
- padding: 2rem 1rem;
- margin-bottom: 2rem;
- background-color: #e9ecef;
- border-radius: 6px
-}
-
-@media (min-width:576px) {
- .jumbotron {
- padding: 4rem 2rem
- }
-
-}
-
-.jumbotron-fluid {
- padding-right: 0;
- padding-left: 0;
- border-radius: 0
-}
-
-.alert {
- position: relative;
- padding: 1.15rem 1.15rem;
- margin-bottom: 1rem;
- border: 1px solid transparent;
- border-radius: 2px
-}
-
-.alert-heading {
- color: inherit
-}
-
-.alert-link {
- font-weight: 700
-}
-
-.alert-dismissible {
- padding-right: 3.8rem
-}
-
-.alert-dismissible .close {
- position: absolute;
- top: 0;
- right: 0;
- padding: 1.15rem 1.15rem;
- color: inherit
-}
-
-.alert-primary {
- color: #023a03;
- background-color: #cde2cd;
- border-color: #b9d7b9
-}
-
-.alert-primary hr {
- border-top-color: #a9cea9
-}
-
-.alert-primary .alert-link {
- color: #000900
-}
-
-.alert-secondary {
- color: #434343;
- background-color: #e6e6e6;
- border-color: #dbdbdb
-}
-
-.alert-secondary hr {
- border-top-color: #cecece
-}
-
-.alert-secondary .alert-link {
- color: #2a2a2a
-}
-
-.alert-success {
- color: #00744c;
- background-color: #ccf9e9;
- border-color: #b8f6e1
-}
-
-.alert-success hr {
- border-top-color: #a1f3d7
-}
-
-.alert-success .alert-link {
- color: #00412b
-}
-
-.alert-info {
- color: #383280;
- background-color: #e2dffd;
- border-color: #d6d3fc
-}
-
-.alert-info hr {
- border-top-color: #c0bbfa
-}
-
-.alert-info .alert-link {
- color: #28245b
-}
-
-.alert-warning {
- color: #7d4431;
- background-color: #fce6df;
- border-color: #fbdcd2
-}
-
-.alert-warning hr {
- border-top-color: #f9cabb
-}
-
-.alert-warning .alert-link {
- color: #583023
-}
-
-.alert-danger {
- color: #853135;
- background-color: #ffdfe0;
- border-color: #ffd2d4
-}
-
-.alert-danger hr {
- border-top-color: #ffb9bc
-}
-
-.alert-danger .alert-link {
- color: #602326
-}
-
-.alert-light {
- color: #747474;
- background-color: #f9f9f9;
- border-color: #f6f6f6
-}
-
-.alert-light hr {
- border-top-color: #e9e9e9
-}
-
-.alert-light .alert-link {
- color: #5b5b5b
-}
-
-.alert-dark {
- color: #3c3d40;
- background-color: #e3e4e5;
- border-color: #d8d9da
-}
-
-.alert-dark hr {
- border-top-color: #cbccce
-}
-
-.alert-dark .alert-link {
- color: #232426
-}
-
-.alert-white {
- color: #858585;
- background-color: #fff;
- border-color: #fff
-}
-
-.alert-white hr {
- border-top-color: #f2f2f2
-}
-
-.alert-white .alert-link {
- color: #6c6c6c
-}
-
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0
- }
-
- to {
- background-position: 0 0
- }
-
-}
-
-@keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0
- }
-
- to {
- background-position: 0 0
- }
-
-}
-
-.progress {
- display: -webkit-box;
- display: flex;
- height: 1rem;
- overflow: hidden;
- font-size: .75rem;
- background-color: #f3f5f7;
- border-radius: 2px
-}
-
-.progress-bar {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- -webkit-box-pack: center;
- justify-content: center;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- background-color: #007bff;
- -webkit-transition: width .6s ease;
- transition: width .6s ease
-}
-
-@media (prefers-reduced-motion:reduce) {
- .progress-bar {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.progress-bar-striped {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-size: 1rem 1rem
-}
-
-.progress-bar-animated {
- -webkit-animation: progress-bar-stripes 1s linear infinite;
- animation: progress-bar-stripes 1s linear infinite
-}
-
-@media (prefers-reduced-motion:reduce) {
- .progress-bar-animated {
- -webkit-animation: none;
- animation: none
- }
-
-}
-
-.media {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: start;
- align-items: flex-start
-}
-
-.media-body {
- -webkit-box-flex: 1;
- flex: 1
-}
-
-.list-group {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0
-}
-
-.list-group-item-action {
- width: 100%;
- color: #495057;
- text-align: inherit
-}
-
-.list-group-item-action:focus,
-.list-group-item-action:hover {
- z-index: 1;
- color: #495057;
- text-decoration: none;
- background-color: #f8f9fa
-}
-
-.list-group-item-action:active {
- color: #212529;
- background-color: #e9ecef
-}
-
-.list-group-item {
- position: relative;
- display: block;
- padding: .75rem 1.25rem;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid rgba(0, 0, 0, .125)
-}
-
-.list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-top-right-radius: .25rem
-}
-
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: .25rem
-}
-
-.list-group-item.disabled,
-.list-group-item:disabled {
- color: #6c757d;
- pointer-events: none;
- background-color: #fff
-}
-
-.list-group-item.active {
- z-index: 2;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff
-}
-
-.list-group-horizontal {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
-}
-
-.list-group-horizontal .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
-}
-
-.list-group-horizontal .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
-}
-
-.list-group-horizontal .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
-}
-
-@media (min-width:576px) {
- .list-group-horizontal-sm {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .list-group-horizontal-sm .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
- }
-
- .list-group-horizontal-sm .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
- }
-
- .list-group-horizontal-sm .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
- }
-
-}
-
-@media (min-width:768px) {
- .list-group-horizontal-md {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .list-group-horizontal-md .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
- }
-
- .list-group-horizontal-md .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
- }
-
- .list-group-horizontal-md .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
- }
-
-}
-
-@media (min-width:992px) {
- .list-group-horizontal-lg {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .list-group-horizontal-lg .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
- }
-
- .list-group-horizontal-lg .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
- }
-
- .list-group-horizontal-lg .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
- }
-
-}
-
-@media (min-width:1200px) {
- .list-group-horizontal-xl {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row
- }
-
- .list-group-horizontal-xl .list-group-item {
- margin-right: -1px;
- margin-bottom: 0
- }
-
- .list-group-horizontal-xl .list-group-item:first-child {
- border-top-left-radius: .25rem;
- border-bottom-left-radius: .25rem;
- border-top-right-radius: 0
- }
-
- .list-group-horizontal-xl .list-group-item:last-child {
- margin-right: 0;
- border-top-right-radius: .25rem;
- border-bottom-right-radius: .25rem;
- border-bottom-left-radius: 0
- }
-
-}
-
-.list-group-flush .list-group-item {
- border-right: 0;
- border-left: 0;
- border-radius: 0
-}
-
-.list-group-flush .list-group-item:last-child {
- margin-bottom: -1px
-}
-
-.list-group-flush:first-child .list-group-item:first-child {
- border-top: 0
-}
-
-.list-group-flush:last-child .list-group-item:last-child {
- margin-bottom: 0;
- border-bottom: 0
-}
-
-.list-group-item-primary {
- color: #023a03;
- background-color: #b9d7b9
-}
-
-.list-group-item-primary.list-group-item-action:focus,
-.list-group-item-primary.list-group-item-action:hover {
- color: #023a03;
- background-color: #a9cea9
-}
-
-.list-group-item-primary.list-group-item-action.active {
- color: #fff;
- background-color: #023a03;
- border-color: #023a03
-}
-
-.list-group-item-secondary {
- color: #434343;
- background-color: #dbdbdb
-}
-
-.list-group-item-secondary.list-group-item-action:focus,
-.list-group-item-secondary.list-group-item-action:hover {
- color: #434343;
- background-color: #cecece
-}
-
-.list-group-item-secondary.list-group-item-action.active {
- color: #fff;
- background-color: #434343;
- border-color: #434343
-}
-
-.list-group-item-success {
- color: #00744c;
- background-color: #b8f6e1
-}
-
-.list-group-item-success.list-group-item-action:focus,
-.list-group-item-success.list-group-item-action:hover {
- color: #00744c;
- background-color: #a1f3d7
-}
-
-.list-group-item-success.list-group-item-action.active {
- color: #fff;
- background-color: #00744c;
- border-color: #00744c
-}
-
-.list-group-item-info {
- color: #383280;
- background-color: #d6d3fc
-}
-
-.list-group-item-info.list-group-item-action:focus,
-.list-group-item-info.list-group-item-action:hover {
- color: #383280;
- background-color: #c0bbfa
-}
-
-.list-group-item-info.list-group-item-action.active {
- color: #fff;
- background-color: #383280;
- border-color: #383280
-}
-
-.list-group-item-warning {
- color: #7d4431;
- background-color: #fbdcd2
-}
-
-.list-group-item-warning.list-group-item-action:focus,
-.list-group-item-warning.list-group-item-action:hover {
- color: #7d4431;
- background-color: #f9cabb
-}
-
-.list-group-item-warning.list-group-item-action.active {
- color: #fff;
- background-color: #7d4431;
- border-color: #7d4431
-}
-
-.list-group-item-danger {
- color: #853135;
- background-color: #ffd2d4
-}
-
-.list-group-item-danger.list-group-item-action:focus,
-.list-group-item-danger.list-group-item-action:hover {
- color: #853135;
- background-color: #ffb9bc
-}
-
-.list-group-item-danger.list-group-item-action.active {
- color: #fff;
- background-color: #853135;
- border-color: #853135
-}
-
-.list-group-item-light {
- color: #747474;
- background-color: #f6f6f6
-}
-
-.list-group-item-light.list-group-item-action:focus,
-.list-group-item-light.list-group-item-action:hover {
- color: #747474;
- background-color: #e9e9e9
-}
-
-.list-group-item-light.list-group-item-action.active {
- color: #fff;
- background-color: #747474;
- border-color: #747474
-}
-
-.list-group-item-dark {
- color: #3c3d40;
- background-color: #d8d9da
-}
-
-.list-group-item-dark.list-group-item-action:focus,
-.list-group-item-dark.list-group-item-action:hover {
- color: #3c3d40;
- background-color: #cbccce
-}
-
-.list-group-item-dark.list-group-item-action.active {
- color: #fff;
- background-color: #3c3d40;
- border-color: #3c3d40
-}
-
-.list-group-item-white {
- color: #858585;
- background-color: #fff
-}
-
-.list-group-item-white.list-group-item-action:focus,
-.list-group-item-white.list-group-item-action:hover {
- color: #858585;
- background-color: #f2f2f2
-}
-
-.list-group-item-white.list-group-item-action.active {
- color: #fff;
- background-color: #858585;
- border-color: #858585
-}
-
-.close {
- float: right;
- font-size: 1.5rem;
- font-weight: 700;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- opacity: .5
-}
-
-.close:hover {
- color: #000;
- text-decoration: none
-}
-
-.close:not(:disabled):not(.disabled):focus,
-.close:not(:disabled):not(.disabled):hover {
- opacity: .75
-}
-
-button.close {
- padding: 0;
- background-color: transparent;
- border: 0;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none
-}
-
-a.close.disabled {
- pointer-events: none
-}
-
-.toast {
- max-width: 350px;
- overflow: hidden;
- font-size: .875rem;
- background-color: rgba(255, 255, 255, .85);
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, .1);
- box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .1);
- -webkit-backdrop-filter: blur(10px);
- backdrop-filter: blur(10px);
- opacity: 0;
- border-radius: .25rem
-}
-
-.toast:not(:last-child) {
- margin-bottom: .75rem
-}
-
-.toast.showing {
- opacity: 1
-}
-
-.toast.show {
- display: block;
- opacity: 1
-}
-
-.toast.hide {
- display: none
-}
-
-.toast-header {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- padding: .25rem .75rem;
- color: #6c757d;
- background-color: rgba(255, 255, 255, .85);
- background-clip: padding-box;
- border-bottom: 1px solid rgba(0, 0, 0, .05)
-}
-
-.toast-body {
- padding: .75rem
-}
-
-.modal-open {
- overflow: hidden
-}
-
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto
-}
-
-.modal {
- position: fixed;
- top: 0;
- left: 0;
- z-index: 1050;
- display: none;
- width: 100%;
- height: 100%;
- overflow: hidden;
- outline: 0
-}
-
-.modal-dialog {
- position: relative;
- width: auto;
- margin: .5rem;
- pointer-events: none
-}
-
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform .3s ease-out;
- transition: -webkit-transform .3s ease-out;
- transition: transform .3s ease-out;
- transition: transform .3s ease-out, -webkit-transform .3s ease-out;
- -webkit-transform: translate(0, -50px);
- transform: translate(0, -50px)
-}
-
-@media (prefers-reduced-motion:reduce) {
- .modal.fade .modal-dialog {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.modal.show .modal-dialog {
- -webkit-transform: none;
- transform: none
-}
-
-.modal-dialog-scrollable {
- display: -webkit-box;
- display: flex;
- max-height: calc(100% - 1rem)
-}
-
-.modal-dialog-scrollable .modal-content {
- max-height: calc(100vh - 1rem);
- overflow: hidden
-}
-
-.modal-dialog-scrollable .modal-footer,
-.modal-dialog-scrollable .modal-header {
- flex-shrink: 0
-}
-
-.modal-dialog-scrollable .modal-body {
- overflow-y: auto
-}
-
-.modal-dialog-centered {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- min-height: calc(100% - 1rem)
-}
-
-.modal-dialog-centered::before {
- display: block;
- height: calc(100vh - 1rem);
- content: 'http://www.w3.org/2000/svg'
-}
-
-.modal-dialog-centered.modal-dialog-scrollable {
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- -webkit-box-pack: center;
- justify-content: center;
- height: 100%
-}
-
-.modal-dialog-centered.modal-dialog-scrollable .modal-content {
- max-height: none
-}
-
-.modal-dialog-centered.modal-dialog-scrollable::before {
- content: none
-}
-
-.modal-content {
- position: relative;
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column;
- width: 100%;
- pointer-events: auto;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: .3rem;
- outline: 0
-}
-
-.modal-backdrop {
- position: fixed;
- top: 0;
- left: 0;
- z-index: 1040;
- width: 100vw;
- height: 100vh;
- background-color: #000
-}
-
-.modal-backdrop.fade {
- opacity: 0
-}
-
-.modal-backdrop.show {
- opacity: .8
-}
-
-.modal-header {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: start;
- align-items: flex-start;
- -webkit-box-pack: justify;
- justify-content: space-between;
- padding: 1rem 1rem;
- border-bottom: 1px solid #dee2e6;
- border-top-left-radius: .3rem;
- border-top-right-radius: .3rem
-}
-
-.modal-header .close {
- padding: 1rem 1rem;
- margin: -1rem -1rem -1rem auto
-}
-
-.modal-title {
- margin-bottom: 0;
- line-height: 1.5
-}
-
-.modal-body {
- position: relative;
- -webkit-box-flex: 1;
- flex: 1 1 auto;
- padding: 1rem
-}
-
-.modal-footer {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: end;
- justify-content: flex-end;
- padding: 1rem;
- border-top: 1px solid #dee2e6;
- border-bottom-right-radius: .3rem;
- border-bottom-left-radius: .3rem
-}
-
-.modal-footer>:not(:first-child) {
- margin-left: .25rem
-}
-
-.modal-footer>:not(:last-child) {
- margin-right: .25rem
-}
-
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll
-}
-
-@media (min-width:576px) {
- .modal-dialog {
- max-width: 500px;
- margin: 1.75rem auto
- }
-
- .modal-dialog-scrollable {
- max-height: calc(100% - 3.5rem)
- }
-
- .modal-dialog-scrollable .modal-content {
- max-height: calc(100vh - 3.5rem)
- }
-
- .modal-dialog-centered {
- min-height: calc(100% - 3.5rem)
- }
-
- .modal-dialog-centered::before {
- height: calc(100vh - 3.5rem)
- }
-
- .modal-sm {
- max-width: 300px
- }
-
-}
-
-@media (min-width:992px) {
- .modal-lg,
- .modal-xl {
- max-width: 800px
- }
-
-}
-
-@media (min-width:1200px) {
- .modal-xl {
- max-width: 1140px
- }
-
-}
-
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-style: normal;
- font-weight: 400;
- line-height: 1.7;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: .875rem;
- word-wrap: break-word;
- opacity: 0
-}
-
-.tooltip.show {
- opacity: .9
-}
-
-.tooltip .arrow {
- position: absolute;
- display: block;
- width: .8rem;
- height: .4rem
-}
-
-.tooltip .arrow::before {
- position: absolute;
- content: '%23dc3545';
- border-color: transparent;
- border-style: solid
-}
-
-.bs-tooltip-auto[x-placement^=top],
-.bs-tooltip-top {
- padding: .4rem 0
-}
-
-.bs-tooltip-auto[x-placement^=top] .arrow,
-.bs-tooltip-top .arrow {
- bottom: 0
-}
-
-.bs-tooltip-auto[x-placement^=top] .arrow::before,
-.bs-tooltip-top .arrow::before {
- top: 0;
- border-width: .4rem .4rem 0;
- border-top-color: #000
-}
-
-.bs-tooltip-auto[x-placement^=right],
-.bs-tooltip-right {
- padding: 0 .4rem
-}
-
-.bs-tooltip-auto[x-placement^=right] .arrow,
-.bs-tooltip-right .arrow {
- left: 0;
- width: .4rem;
- height: .8rem
-}
-
-.bs-tooltip-auto[x-placement^=right] .arrow::before,
-.bs-tooltip-right .arrow::before {
- right: 0;
- border-width: .4rem .4rem .4rem 0;
- border-right-color: #000
-}
-
-.bs-tooltip-auto[x-placement^=bottom],
-.bs-tooltip-bottom {
- padding: .4rem 0
-}
-
-.bs-tooltip-auto[x-placement^=bottom] .arrow,
-.bs-tooltip-bottom .arrow {
- top: 0
-}
-
-.bs-tooltip-auto[x-placement^=bottom] .arrow::before,
-.bs-tooltip-bottom .arrow::before {
- bottom: 0;
- border-width: 0 .4rem .4rem;
- border-bottom-color: #000
-}
-
-.bs-tooltip-auto[x-placement^=left],
-.bs-tooltip-left {
- padding: 0 .4rem
-}
-
-.bs-tooltip-auto[x-placement^=left] .arrow,
-.bs-tooltip-left .arrow {
- right: 0;
- width: .4rem;
- height: .8rem
-}
-
-.bs-tooltip-auto[x-placement^=left] .arrow::before,
-.bs-tooltip-left .arrow::before {
- left: 0;
- border-width: .4rem 0 .4rem .4rem;
- border-left-color: #000
-}
-
-.tooltip-inner {
- max-width: 200px;
- padding: .25rem .5rem;
- color: #fff;
- text-align: center;
- background-color: #000;
- border-radius: .25rem
-}
-
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: block;
- max-width: 276px;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-style: normal;
- font-weight: 400;
- line-height: 1.7;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: .875rem;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: .3rem
-}
-
-.popover .arrow {
- position: absolute;
- display: block;
- width: 1rem;
- height: .5rem;
- margin: 0 6px
-}
-
-.popover .arrow::after,
-.popover .arrow::before {
- position: absolute;
- display: block;
- content: '-2 -2 7 7';
- border-color: transparent;
- border-style: solid
-}
-
-.bs-popover-auto[x-placement^=top],
-.bs-popover-top {
- margin-bottom: .5rem
-}
-
-.bs-popover-auto[x-placement^=top]>.arrow,
-.bs-popover-top>.arrow {
- bottom: calc((.5rem + 1px) * -1)
-}
-
-.bs-popover-auto[x-placement^=top]>.arrow::before,
-.bs-popover-top>.arrow::before {
- bottom: 0;
- border-width: .5rem .5rem 0;
- border-top-color: rgba(0, 0, 0, .25)
-}
-
-.bs-popover-auto[x-placement^=top]>.arrow::after,
-.bs-popover-top>.arrow::after {
- bottom: 1px;
- border-width: .5rem .5rem 0;
- border-top-color: #fff
-}
-
-.bs-popover-auto[x-placement^=right],
-.bs-popover-right {
- margin-left: .5rem
-}
-
-.bs-popover-auto[x-placement^=right]>.arrow,
-.bs-popover-right>.arrow {
- left: calc((.5rem + 1px) * -1);
- width: .5rem;
- height: 1rem;
- margin: 6px 0
-}
-
-.bs-popover-auto[x-placement^=right]>.arrow::before,
-.bs-popover-right>.arrow::before {
- left: 0;
- border-width: .5rem .5rem .5rem 0;
- border-right-color: rgba(0, 0, 0, .25)
-}
-
-.bs-popover-auto[x-placement^=right]>.arrow::after,
-.bs-popover-right>.arrow::after {
- left: 1px;
- border-width: .5rem .5rem .5rem 0;
- border-right-color: #fff
-}
-
-.bs-popover-auto[x-placement^=bottom],
-.bs-popover-bottom {
- margin-top: .5rem
-}
-
-.bs-popover-auto[x-placement^=bottom]>.arrow,
-.bs-popover-bottom>.arrow {
- top: calc((.5rem + 1px) * -1)
-}
-
-.bs-popover-auto[x-placement^=bottom]>.arrow::before,
-.bs-popover-bottom>.arrow::before {
- top: 0;
- border-width: 0 .5rem .5rem .5rem;
- border-bottom-color: rgba(0, 0, 0, .25)
-}
-
-.bs-popover-auto[x-placement^=bottom]>.arrow::after,
-.bs-popover-bottom>.arrow::after {
- top: 1px;
- border-width: 0 .5rem .5rem .5rem;
- border-bottom-color: #fff
-}
-
-.bs-popover-auto[x-placement^=bottom] .popover-header::before,
-.bs-popover-bottom .popover-header::before {
- position: absolute;
- top: 0;
- left: 50%;
- display: block;
- width: 1rem;
- margin-left: -.5rem;
- content: '%23dc3545';
- border-bottom: 1px solid #f7f7f7
-}
-
-.bs-popover-auto[x-placement^=left],
-.bs-popover-left {
- margin-right: .5rem
-}
-
-.bs-popover-auto[x-placement^=left]>.arrow,
-.bs-popover-left>.arrow {
- right: calc((.5rem + 1px) * -1);
- width: .5rem;
- height: 1rem;
- margin: 6px 0
-}
-
-.bs-popover-auto[x-placement^=left]>.arrow::before,
-.bs-popover-left>.arrow::before {
- right: 0;
- border-width: .5rem 0 .5rem .5rem;
- border-left-color: rgba(0, 0, 0, .25)
-}
-
-.bs-popover-auto[x-placement^=left]>.arrow::after,
-.bs-popover-left>.arrow::after {
- right: 1px;
- border-width: .5rem 0 .5rem .5rem;
- border-left-color: #fff
-}
-
-.popover-header {
- padding: .5rem .75rem;
- margin-bottom: 0;
- font-size: 1rem;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-top-left-radius: calc(6px - 1px);
- border-top-right-radius: calc(6px - 1px)
-}
-
-.popover-header:empty {
- display: none
-}
-
-.popover-body {
- padding: .5rem .75rem;
- color: #212529
-}
-
-.carousel {
- position: relative
-}
-
-.carousel.pointer-event {
- touch-action: pan-y
-}
-
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden
-}
-
-.carousel-inner::after {
- display: block;
- clear: both;
- content: 'M0 0l3 3m0-3L0 3'
-}
-
-.carousel-item {
- position: relative;
- display: none;
- float: left;
- width: 100%;
- margin-right: -100%;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-transition: -webkit-transform .6s ease-in-out;
- transition: -webkit-transform .6s ease-in-out;
- transition: transform .6s ease-in-out;
- transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out
-}
-
-@media (prefers-reduced-motion:reduce) {
- .carousel-item {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.carousel-item-next,
-.carousel-item-prev,
-.carousel-item.active {
- display: block
-}
-
-.active.carousel-item-right,
-.carousel-item-next:not(.carousel-item-left) {
- -webkit-transform: translateX(100%);
- transform: translateX(100%)
-}
-
-.active.carousel-item-left,
-.carousel-item-prev:not(.carousel-item-right) {
- -webkit-transform: translateX(-100%);
- transform: translateX(-100%)
-}
-
-.carousel-fade .carousel-item {
- opacity: 0;
- -webkit-transition-property: opacity;
- transition-property: opacity;
- -webkit-transform: none;
- transform: none
-}
-
-.carousel-fade .carousel-item-next.carousel-item-left,
-.carousel-fade .carousel-item-prev.carousel-item-right,
-.carousel-fade .carousel-item.active {
- z-index: 1;
- opacity: 1
-}
-
-.carousel-fade .active.carousel-item-left,
-.carousel-fade .active.carousel-item-right {
- z-index: 0;
- opacity: 0;
- -webkit-transition: 0s .6s opacity;
- transition: 0s .6s opacity
-}
-
-@media (prefers-reduced-motion:reduce) {
- .carousel-fade .active.carousel-item-left,
- .carousel-fade .active.carousel-item-right {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.carousel-control-next,
-.carousel-control-prev {
- position: absolute;
- top: 0;
- bottom: 0;
- z-index: 1;
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center;
- width: 15%;
- color: #fff;
- text-align: center;
- opacity: .5;
- -webkit-transition: opacity .15s ease;
- transition: opacity .15s ease
-}
-
-@media (prefers-reduced-motion:reduce) {
- .carousel-control-next,
- .carousel-control-prev {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.carousel-control-next:focus,
-.carousel-control-next:hover,
-.carousel-control-prev:focus,
-.carousel-control-prev:hover {
- color: #fff;
- text-decoration: none;
- outline: 0;
- opacity: .9
-}
-
-.carousel-control-prev {
- left: 0
-}
-
-.carousel-control-next {
- right: 0
-}
-
-.carousel-control-next-icon,
-.carousel-control-prev-icon {
- display: inline-block;
- width: 20px;
- height: 20px;
- background: no-repeat 50%/100% 100%
-}
-
-.carousel-control-prev-icon {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e")
-}
-
-.carousel-control-next-icon {
- background-image: url("data:image/svg+xml,%3csvg xmlns=!string!fill=!string!viewBox=!string!%3e%3cpath d=!string!/%3e%3c/svg%3e")
-}
-
-.carousel-indicators {
- position: absolute;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 15;
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: center;
- justify-content: center;
- padding-left: 0;
- margin-right: 15%;
- margin-left: 15%;
- list-style: none
-}
-
-.carousel-indicators li {
- box-sizing: content-box;
- -webkit-box-flex: 0;
- flex: 0 1 auto;
- width: 30px;
- height: 3px;
- margin-right: 3px;
- margin-left: 3px;
- text-indent: -999px;
- cursor: pointer;
- background-color: #fff;
- background-clip: padding-box;
- border-top: 10px solid transparent;
- border-bottom: 10px solid transparent;
- opacity: .5;
- -webkit-transition: opacity .6s ease;
- transition: opacity .6s ease
-}
-
-@media (prefers-reduced-motion:reduce) {
- .carousel-indicators li {
- -webkit-transition: none;
- transition: none
- }
-
-}
-
-.carousel-indicators .active {
- opacity: 1
-}
-
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center
-}
-
-@-webkit-keyframes spinner-border {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg)
- }
-
-}
-
-@keyframes spinner-border {
- to {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg)
- }
-
-}
-
-.spinner-border {
- display: inline-block;
- width: 2rem;
- height: 2rem;
- vertical-align: text-bottom;
- border: .25em solid currentColor;
- border-right-color: transparent;
- border-radius: 50%;
- -webkit-animation: spinner-border .75s linear infinite;
- animation: spinner-border .75s linear infinite
-}
-
-.spinner-border-sm {
- width: 1rem;
- height: 1rem;
- border-width: .2em
-}
-
-@-webkit-keyframes spinner-grow {
- 0% {
- -webkit-transform: scale(0);
- transform: scale(0)
- }
-
- 50% {
- opacity: 1
- }
-
-}
-
-@keyframes spinner-grow {
- 0% {
- -webkit-transform: scale(0);
- transform: scale(0)
- }
-
- 50% {
- opacity: 1
- }
-
-}
-
-.spinner-grow {
- display: inline-block;
- width: 2rem;
- height: 2rem;
- vertical-align: text-bottom;
- background-color: currentColor;
- border-radius: 50%;
- opacity: 0;
- -webkit-animation: spinner-grow .75s linear infinite;
- animation: spinner-grow .75s linear infinite
-}
-
-.spinner-grow-sm {
- width: 1rem;
- height: 1rem
-}
-
-.align-baseline {
- vertical-align: baseline !important
-}
-
-.align-top {
- vertical-align: top !important
-}
-
-.align-middle {
- vertical-align: middle !important
-}
-
-.align-bottom {
- vertical-align: bottom !important
-}
-
-.align-text-bottom {
- vertical-align: text-bottom !important
-}
-
-.align-text-top {
- vertical-align: text-top !important
-}
-
-.bg-primary {
- background-color: #047006 !important
-}
-
-a.bg-primary:focus,
-a.bg-primary:hover,
-button.bg-primary:focus,
-button.bg-primary:hover {
- background-color: #023f03 !important
-}
-
-.bg-secondary {
- background-color: grey !important
-}
-
-a.bg-secondary:focus,
-a.bg-secondary:hover,
-button.bg-secondary:focus,
-button.bg-secondary:hover {
- background-color: #676767 !important
-}
-
-.bg-success {
- background-color: #047006 !important
-}
-
-a.bg-success:focus,
-a.bg-success:hover,
-button.bg-success:focus,
-button.bg-success:hover {
- background-color: #00ad72 !important
-}
-
-.bg-info {
- background-color: #6c61f6 !important
-}
-
-a.bg-info:focus,
-a.bg-info:hover,
-button.bg-info:focus,
-button.bg-info:hover {
- background-color: #3f31f3 !important
-}
-
-.bg-warning {
- background-color: #f0825f !important
-}
-
-a.bg-warning:focus,
-a.bg-warning:hover,
-button.bg-warning:focus,
-button.bg-warning:hover {
- background-color: #ec5e30 !important
-}
-
-.bg-danger {
- background-color: #ff5f66 !important
-}
-
-a.bg-danger:focus,
-a.bg-danger:hover,
-button.bg-danger:focus,
-button.bg-danger:hover {
- background-color: #ff2c35 !important
-}
-
-.bg-light {
- background-color: #dfdfdf !important
-}
-
-a.bg-light:focus,
-a.bg-light:hover,
-button.bg-light:focus,
-button.bg-light:hover {
- background-color: #c6c6c6 !important
-}
-
-.bg-dark {
- background-color: #74767b !important
-}
-
-a.bg-dark:focus,
-a.bg-dark:hover,
-button.bg-dark:focus,
-button.bg-dark:hover {
- background-color: #5b5d61 !important
-}
-
-.bg-white {
- background-color: #fff !important
-}
-
-a.bg-white:focus,
-a.bg-white:hover,
-button.bg-white:focus,
-button.bg-white:hover {
- background-color: #e6e6e6 !important
-}
-
-.bg-white {
- background-color: #fff !important
-}
-
-.bg-transparent {
- background-color: transparent !important
-}
-
-.border {
- border: 1px solid #f2f4f9 !important
-}
-
-.border-top {
- border-top: 1px solid #f2f4f9 !important
-}
-
-.border-right {
- border-right: 1px solid #f2f4f9 !important
-}
-
-.border-bottom {
- border-bottom: 1px solid #f2f4f9 !important
-}
-
-.border-left {
- border-left: 1px solid #f2f4f9 !important
-}
-
-.border-0 {
- border: 0 !important
-}
-
-.border-top-0 {
- border-top: 0 !important
-}
-
-.border-right-0 {
- border-right: 0 !important
-}
-
-.border-bottom-0 {
- border-bottom: 0 !important
-}
-
-.border-left-0 {
- border-left: 0 !important
-}
-
-.border-primary {
- border-color: #047006 !important
-}
-
-.border-secondary {
- border-color: grey !important
-}
-
-.border-success {
- border-color: #047006 !important
-}
-
-.border-info {
- border-color: #6c61f6 !important
-}
-
-.border-warning {
- border-color: #f0825f !important
-}
-
-.border-danger {
- border-color: #ff5f66 !important
-}
-
-.border-light {
- border-color: #dfdfdf !important
-}
-
-.border-dark {
- border-color: #74767b !important
-}
-
-.border-white {
- border-color: #fff !important
-}
-
-.border-white {
- border-color: #fff !important
-}
-
-.rounded-sm {
- border-radius: .2rem !important
-}
-
-.rounded {
- border-radius: 2px !important
-}
-
-.rounded-top {
- border-top-left-radius: 2px !important;
- border-top-right-radius: 2px !important
-}
-
-.rounded-right {
- border-top-right-radius: 2px !important;
- border-bottom-right-radius: 2px !important
-}
-
-.rounded-bottom {
- border-bottom-right-radius: 2px !important;
- border-bottom-left-radius: 2px !important
-}
-
-.rounded-left {
- border-top-left-radius: 2px !important;
- border-bottom-left-radius: 2px !important
-}
-
-.rounded-lg {
- border-radius: 6px !important
-}
-
-.rounded-circle {
- border-radius: 50% !important
-}
-
-.rounded-pill {
- border-radius: 50rem !important
-}
-
-.rounded-0 {
- border-radius: 0 !important
-}
-
-.clearfix::after {
- display: block;
- clear: both;
- content: '.5'
-}
-
-.d-none {
- display: none !important
-}
-
-.d-inline {
- display: inline !important
-}
-
-.d-inline-block {
- display: inline-block !important
-}
-
-.d-block {
- display: block !important
-}
-
-.d-table {
- display: table !important
-}
-
-.d-table-row {
- display: table-row !important
-}
-
-.d-table-cell {
- display: table-cell !important
-}
-
-.d-flex {
- display: -webkit-box !important;
- display: flex !important
-}
-
-.d-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
-}
-
-@media (min-width:576px) {
- .d-sm-none {
- display: none !important
- }
-
- .d-sm-inline {
- display: inline !important
- }
-
- .d-sm-inline-block {
- display: inline-block !important
- }
-
- .d-sm-block {
- display: block !important
- }
-
- .d-sm-table {
- display: table !important
- }
-
- .d-sm-table-row {
- display: table-row !important
- }
-
- .d-sm-table-cell {
- display: table-cell !important
- }
-
- .d-sm-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-sm-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-@media (min-width:768px) {
- .d-md-none {
- display: none !important
- }
-
- .d-md-inline {
- display: inline !important
- }
-
- .d-md-inline-block {
- display: inline-block !important
- }
-
- .d-md-block {
- display: block !important
- }
-
- .d-md-table {
- display: table !important
- }
-
- .d-md-table-row {
- display: table-row !important
- }
-
- .d-md-table-cell {
- display: table-cell !important
- }
-
- .d-md-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-md-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-@media (min-width:992px) {
- .d-lg-none {
- display: none !important
- }
-
- .d-lg-inline {
- display: inline !important
- }
-
- .d-lg-inline-block {
- display: inline-block !important
- }
-
- .d-lg-block {
- display: block !important
- }
-
- .d-lg-table {
- display: table !important
- }
-
- .d-lg-table-row {
- display: table-row !important
- }
-
- .d-lg-table-cell {
- display: table-cell !important
- }
-
- .d-lg-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-lg-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-@media (min-width:1200px) {
- .d-xl-none {
- display: none !important
- }
-
- .d-xl-inline {
- display: inline !important
- }
-
- .d-xl-inline-block {
- display: inline-block !important
- }
-
- .d-xl-block {
- display: block !important
- }
-
- .d-xl-table {
- display: table !important
- }
-
- .d-xl-table-row {
- display: table-row !important
- }
-
- .d-xl-table-cell {
- display: table-cell !important
- }
-
- .d-xl-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-xl-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-@media print {
- .d-print-none {
- display: none !important
- }
-
- .d-print-inline {
- display: inline !important
- }
-
- .d-print-inline-block {
- display: inline-block !important
- }
-
- .d-print-block {
- display: block !important
- }
-
- .d-print-table {
- display: table !important
- }
-
- .d-print-table-row {
- display: table-row !important
- }
-
- .d-print-table-cell {
- display: table-cell !important
- }
-
- .d-print-flex {
- display: -webkit-box !important;
- display: flex !important
- }
-
- .d-print-inline-flex {
- display: -webkit-inline-box !important;
- display: inline-flex !important
- }
-
-}
-
-.embed-responsive {
- position: relative;
- display: block;
- width: 100%;
- padding: 0;
- overflow: hidden
-}
-
-.embed-responsive::before {
- display: block;
- content: '3'
-}
-
-.embed-responsive .embed-responsive-item,
-.embed-responsive embed,
-.embed-responsive iframe,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0
-}
-
-.embed-responsive-21by9::before {
- padding-top: 42.85714%
-}
-
-.embed-responsive-16by9::before {
- padding-top: 56.25%
-}
-
-.embed-responsive-4by3::before {
- padding-top: 75%
-}
-
-.embed-responsive-1by1::before {
- padding-top: 100%
-}
-
-.embed-responsive-21by9::before {
- padding-top: 42.85714%
-}
-
-.embed-responsive-16by9::before {
- padding-top: 56.25%
-}
-
-.embed-responsive-4by3::before {
- padding-top: 75%
-}
-
-.embed-responsive-1by1::before {
- padding-top: 100%
-}
-
-.flex-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
-}
-
-.flex-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
-}
-
-.flex-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
-}
-
-.flex-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
-}
-
-.flex-wrap {
- flex-wrap: wrap !important
-}
-
-.flex-nowrap {
- flex-wrap: nowrap !important
-}
-
-.flex-wrap-reverse {
- flex-wrap: wrap-reverse !important
-}
-
-.flex-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
-}
-
-.flex-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
-}
-
-.flex-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
-}
-
-.flex-shrink-0 {
- flex-shrink: 0 !important
-}
-
-.flex-shrink-1 {
- flex-shrink: 1 !important
-}
-
-.justify-content-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
-}
-
-.justify-content-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
-}
-
-.justify-content-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
-}
-
-.justify-content-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
-}
-
-.justify-content-around {
- justify-content: space-around !important
-}
-
-.align-items-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
-}
-
-.align-items-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
-}
-
-.align-items-center {
- -webkit-box-align: center !important;
- align-items: center !important
-}
-
-.align-items-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
-}
-
-.align-items-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
-}
-
-.align-content-start {
- align-content: flex-start !important
-}
-
-.align-content-end {
- align-content: flex-end !important
-}
-
-.align-content-center {
- align-content: center !important
-}
-
-.align-content-between {
- align-content: space-between !important
-}
-
-.align-content-around {
- align-content: space-around !important
-}
-
-.align-content-stretch {
- align-content: stretch !important
-}
-
-.align-self-auto {
- align-self: auto !important
-}
-
-.align-self-start {
- align-self: flex-start !important
-}
-
-.align-self-end {
- align-self: flex-end !important
-}
-
-.align-self-center {
- align-self: center !important
-}
-
-.align-self-baseline {
- align-self: baseline !important
-}
-
-.align-self-stretch {
- align-self: stretch !important
-}
-
-@media (min-width:576px) {
- .flex-sm-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
- }
-
- .flex-sm-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
- }
-
- .flex-sm-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
- }
-
- .flex-sm-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
- }
-
- .flex-sm-wrap {
- flex-wrap: wrap !important
- }
-
- .flex-sm-nowrap {
- flex-wrap: nowrap !important
- }
-
- .flex-sm-wrap-reverse {
- flex-wrap: wrap-reverse !important
- }
-
- .flex-sm-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
- }
-
- .flex-sm-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
- }
-
- .flex-sm-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
- }
-
- .flex-sm-shrink-0 {
- flex-shrink: 0 !important
- }
-
- .flex-sm-shrink-1 {
- flex-shrink: 1 !important
- }
-
- .justify-content-sm-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
- }
-
- .justify-content-sm-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
- }
-
- .justify-content-sm-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
- }
-
- .justify-content-sm-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
- }
-
- .justify-content-sm-around {
- justify-content: space-around !important
- }
-
- .align-items-sm-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
- }
-
- .align-items-sm-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
- }
-
- .align-items-sm-center {
- -webkit-box-align: center !important;
- align-items: center !important
- }
-
- .align-items-sm-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
- }
-
- .align-items-sm-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
- }
-
- .align-content-sm-start {
- align-content: flex-start !important
- }
-
- .align-content-sm-end {
- align-content: flex-end !important
- }
-
- .align-content-sm-center {
- align-content: center !important
- }
-
- .align-content-sm-between {
- align-content: space-between !important
- }
-
- .align-content-sm-around {
- align-content: space-around !important
- }
-
- .align-content-sm-stretch {
- align-content: stretch !important
- }
-
- .align-self-sm-auto {
- align-self: auto !important
- }
-
- .align-self-sm-start {
- align-self: flex-start !important
- }
-
- .align-self-sm-end {
- align-self: flex-end !important
- }
-
- .align-self-sm-center {
- align-self: center !important
- }
-
- .align-self-sm-baseline {
- align-self: baseline !important
- }
-
- .align-self-sm-stretch {
- align-self: stretch !important
- }
-
-}
-
-@media (min-width:768px) {
- .flex-md-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
- }
-
- .flex-md-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
- }
-
- .flex-md-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
- }
-
- .flex-md-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
- }
-
- .flex-md-wrap {
- flex-wrap: wrap !important
- }
-
- .flex-md-nowrap {
- flex-wrap: nowrap !important
- }
-
- .flex-md-wrap-reverse {
- flex-wrap: wrap-reverse !important
- }
-
- .flex-md-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
- }
-
- .flex-md-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
- }
-
- .flex-md-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
- }
-
- .flex-md-shrink-0 {
- flex-shrink: 0 !important
- }
-
- .flex-md-shrink-1 {
- flex-shrink: 1 !important
- }
-
- .justify-content-md-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
- }
-
- .justify-content-md-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
- }
-
- .justify-content-md-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
- }
-
- .justify-content-md-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
- }
-
- .justify-content-md-around {
- justify-content: space-around !important
- }
-
- .align-items-md-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
- }
-
- .align-items-md-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
- }
-
- .align-items-md-center {
- -webkit-box-align: center !important;
- align-items: center !important
- }
-
- .align-items-md-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
- }
-
- .align-items-md-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
- }
-
- .align-content-md-start {
- align-content: flex-start !important
- }
-
- .align-content-md-end {
- align-content: flex-end !important
- }
-
- .align-content-md-center {
- align-content: center !important
- }
-
- .align-content-md-between {
- align-content: space-between !important
- }
-
- .align-content-md-around {
- align-content: space-around !important
- }
-
- .align-content-md-stretch {
- align-content: stretch !important
- }
-
- .align-self-md-auto {
- align-self: auto !important
- }
-
- .align-self-md-start {
- align-self: flex-start !important
- }
-
- .align-self-md-end {
- align-self: flex-end !important
- }
-
- .align-self-md-center {
- align-self: center !important
- }
-
- .align-self-md-baseline {
- align-self: baseline !important
- }
-
- .align-self-md-stretch {
- align-self: stretch !important
- }
-
-}
-
-@media (min-width:992px) {
- .flex-lg-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
- }
-
- .flex-lg-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
- }
-
- .flex-lg-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
- }
-
- .flex-lg-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
- }
-
- .flex-lg-wrap {
- flex-wrap: wrap !important
- }
-
- .flex-lg-nowrap {
- flex-wrap: nowrap !important
- }
-
- .flex-lg-wrap-reverse {
- flex-wrap: wrap-reverse !important
- }
-
- .flex-lg-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
- }
-
- .flex-lg-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
- }
-
- .flex-lg-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
- }
-
- .flex-lg-shrink-0 {
- flex-shrink: 0 !important
- }
-
- .flex-lg-shrink-1 {
- flex-shrink: 1 !important
- }
-
- .justify-content-lg-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
- }
-
- .justify-content-lg-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
- }
-
- .justify-content-lg-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
- }
-
- .justify-content-lg-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
- }
-
- .justify-content-lg-around {
- justify-content: space-around !important
- }
-
- .align-items-lg-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
- }
-
- .align-items-lg-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
- }
-
- .align-items-lg-center {
- -webkit-box-align: center !important;
- align-items: center !important
- }
-
- .align-items-lg-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
- }
-
- .align-items-lg-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
- }
-
- .align-content-lg-start {
- align-content: flex-start !important
- }
-
- .align-content-lg-end {
- align-content: flex-end !important
- }
-
- .align-content-lg-center {
- align-content: center !important
- }
-
- .align-content-lg-between {
- align-content: space-between !important
- }
-
- .align-content-lg-around {
- align-content: space-around !important
- }
-
- .align-content-lg-stretch {
- align-content: stretch !important
- }
-
- .align-self-lg-auto {
- align-self: auto !important
- }
-
- .align-self-lg-start {
- align-self: flex-start !important
- }
-
- .align-self-lg-end {
- align-self: flex-end !important
- }
-
- .align-self-lg-center {
- align-self: center !important
- }
-
- .align-self-lg-baseline {
- align-self: baseline !important
- }
-
- .align-self-lg-stretch {
- align-self: stretch !important
- }
-
-}
-
-@media (min-width:1200px) {
- .flex-xl-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- flex-direction: row !important
- }
-
- .flex-xl-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- flex-direction: column !important
- }
-
- .flex-xl-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- flex-direction: row-reverse !important
- }
-
- .flex-xl-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- flex-direction: column-reverse !important
- }
-
- .flex-xl-wrap {
- flex-wrap: wrap !important
- }
-
- .flex-xl-nowrap {
- flex-wrap: nowrap !important
- }
-
- .flex-xl-wrap-reverse {
- flex-wrap: wrap-reverse !important
- }
-
- .flex-xl-fill {
- -webkit-box-flex: 1 !important;
- flex: 1 1 auto !important
- }
-
- .flex-xl-grow-0 {
- -webkit-box-flex: 0 !important;
- flex-grow: 0 !important
- }
-
- .flex-xl-grow-1 {
- -webkit-box-flex: 1 !important;
- flex-grow: 1 !important
- }
-
- .flex-xl-shrink-0 {
- flex-shrink: 0 !important
- }
-
- .flex-xl-shrink-1 {
- flex-shrink: 1 !important
- }
-
- .justify-content-xl-start {
- -webkit-box-pack: start !important;
- justify-content: flex-start !important
- }
-
- .justify-content-xl-end {
- -webkit-box-pack: end !important;
- justify-content: flex-end !important
- }
-
- .justify-content-xl-center {
- -webkit-box-pack: center !important;
- justify-content: center !important
- }
-
- .justify-content-xl-between {
- -webkit-box-pack: justify !important;
- justify-content: space-between !important
- }
-
- .justify-content-xl-around {
- justify-content: space-around !important
- }
-
- .align-items-xl-start {
- -webkit-box-align: start !important;
- align-items: flex-start !important
- }
-
- .align-items-xl-end {
- -webkit-box-align: end !important;
- align-items: flex-end !important
- }
-
- .align-items-xl-center {
- -webkit-box-align: center !important;
- align-items: center !important
- }
-
- .align-items-xl-baseline {
- -webkit-box-align: baseline !important;
- align-items: baseline !important
- }
-
- .align-items-xl-stretch {
- -webkit-box-align: stretch !important;
- align-items: stretch !important
- }
-
- .align-content-xl-start {
- align-content: flex-start !important
- }
-
- .align-content-xl-end {
- align-content: flex-end !important
- }
-
- .align-content-xl-center {
- align-content: center !important
- }
-
- .align-content-xl-between {
- align-content: space-between !important
- }
-
- .align-content-xl-around {
- align-content: space-around !important
- }
-
- .align-content-xl-stretch {
- align-content: stretch !important
- }
-
- .align-self-xl-auto {
- align-self: auto !important
- }
-
- .align-self-xl-start {
- align-self: flex-start !important
- }
-
- .align-self-xl-end {
- align-self: flex-end !important
- }
-
- .align-self-xl-center {
- align-self: center !important
- }
-
- .align-self-xl-baseline {
- align-self: baseline !important
- }
-
- .align-self-xl-stretch {
- align-self: stretch !important
- }
-
-}
-
-.float-left {
- float: left !important
-}
-
-.float-right {
- float: right !important
-}
-
-.float-none {
- float: none !important
-}
-
-@media (min-width:576px) {
- .float-sm-left {
- float: left !important
- }
-
- .float-sm-right {
- float: right !important
- }
-
- .float-sm-none {
- float: none !important
- }
-
-}
-
-@media (min-width:768px) {
- .float-md-left {
- float: left !important
- }
-
- .float-md-right {
- float: right !important
- }
-
- .float-md-none {
- float: none !important
- }
-
-}
-
-@media (min-width:992px) {
- .float-lg-left {
- float: left !important
- }
-
- .float-lg-right {
- float: right !important
- }
-
- .float-lg-none {
- float: none !important
- }
-
-}
-
-@media (min-width:1200px) {
- .float-xl-left {
- float: left !important
- }
-
- .float-xl-right {
- float: right !important
- }
-
- .float-xl-none {
- float: none !important
- }
-
-}
-
-.overflow-auto {
- overflow: auto !important
-}
-
-.overflow-hidden {
- overflow: hidden !important
-}
-
-.position-static {
- position: static !important
-}
-
-.position-relative {
- position: relative !important
-}
-
-.position-absolute {
- position: absolute !important
-}
-
-.position-fixed {
- position: fixed !important
-}
-
-.position-sticky {
- position: -webkit-sticky !important;
- position: sticky !important
-}
-
-.fixed-top {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1030
-}
-
-.fixed-bottom {
- position: fixed;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1030
-}
-
-@supports ((position:-webkit-sticky) or (position:sticky)) {
- .sticky-top {
- position: -webkit-sticky;
- position: sticky;
- top: 0;
- z-index: 1020
- }
-
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0
-}
-
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- overflow: visible;
- clip: auto;
- white-space: normal
-}
-
-.shadow-sm {
- box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important
-}
-
-.shadow {
- box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important
-}
-
-.shadow-lg {
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175) !important
-}
-
-.shadow-none {
- box-shadow: none !important
-}
-
-.w-25 {
- width: 25% !important
-}
-
-.w-50 {
- width: 50% !important
-}
-
-.w-75 {
- width: 75% !important
-}
-
-.w-100 {
- width: 100% !important
-}
-
-.w-auto {
- width: auto !important
-}
-
-.h-25 {
- height: 25% !important
-}
-
-.h-50 {
- height: 50% !important
-}
-
-.h-75 {
- height: 75% !important
-}
-
-.h-100 {
- height: 100% !important
-}
-
-.h-auto {
- height: auto !important
-}
-
-.mw-100 {
- max-width: 100% !important
-}
-
-.mh-100 {
- max-height: 100% !important
-}
-
-.min-vw-100 {
- min-width: 100vw !important
-}
-
-.min-vh-100 {
- min-height: 100vh !important
-}
-
-.vw-100 {
- width: 100vw !important
-}
-
-.vh-100 {
- height: 100vh !important
-}
-
-.stretched-link::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1;
- pointer-events: auto;
- content: '.5';
- background-color: rgba(0, 0, 0, 0)
-}
-
-.m-0 {
- margin: 0 !important
-}
-
-.mt-0,
-.my-0 {
- margin-top: 0 !important
-}
-
-.mr-0,
-.mx-0 {
- margin-right: 0 !important
-}
-
-.mb-0,
-.my-0 {
- margin-bottom: 0 !important
-}
-
-.ml-0,
-.mx-0 {
- margin-left: 0 !important
-}
-
-.m-1 {
- margin: .25rem !important
-}
-
-.mt-1,
-.my-1 {
- margin-top: .25rem !important
-}
-
-.mr-1,
-.mx-1 {
- margin-right: .25rem !important
-}
-
-.mb-1,
-.my-1 {
- margin-bottom: .25rem !important
-}
-
-.ml-1,
-.mx-1 {
- margin-left: .25rem !important
-}
-
-.m-2 {
- margin: .5rem !important
-}
-
-.mt-2,
-.my-2 {
- margin-top: .5rem !important
-}
-
-.mr-2,
-.mx-2 {
- margin-right: .5rem !important
-}
-
-.mb-2,
-.my-2 {
- margin-bottom: .5rem !important
-}
-
-.ml-2,
-.mx-2 {
- margin-left: .5rem !important
-}
-
-.m-3 {
- margin: 1rem !important
-}
-
-.mt-3,
-.my-3 {
- margin-top: 1rem !important
-}
-
-.mr-3,
-.mx-3 {
- margin-right: 1rem !important
-}
-
-.mb-3,
-.my-3 {
- margin-bottom: 1rem !important
-}
-
-.ml-3,
-.mx-3 {
- margin-left: 1rem !important
-}
-
-.m-4 {
- margin: 1.5rem !important
-}
-
-.mt-4,
-.my-4 {
- margin-top: 1.5rem !important
-}
-
-.mr-4,
-.mx-4 {
- margin-right: 1.5rem !important
-}
-
-.mb-4,
-.my-4 {
- margin-bottom: 1.5rem !important
-}
-
-.ml-4,
-.mx-4 {
- margin-left: 1.5rem !important
-}
-
-.m-5 {
- margin: 3rem !important
-}
-
-.mt-5,
-.my-5 {
- margin-top: 3rem !important
-}
-
-.mr-5,
-.mx-5 {
- margin-right: 3rem !important
-}
-
-.mb-5,
-.my-5 {
- margin-bottom: 3rem !important
-}
-
-.ml-5,
-.mx-5 {
- margin-left: 3rem !important
-}
-
-.p-0 {
- padding: 0 !important
-}
-
-.pt-0,
-.py-0 {
- padding-top: 0 !important
-}
-
-.pr-0,
-.px-0 {
- padding-right: 0 !important
-}
-
-.pb-0,
-.py-0 {
- padding-bottom: 0 !important
-}
-
-.pl-0,
-.px-0 {
- padding-left: 0 !important
-}
-
-.p-1 {
- padding: .25rem !important
-}
-
-.pt-1,
-.py-1 {
- padding-top: .25rem !important
-}
-
-.pr-1,
-.px-1 {
- padding-right: .25rem !important
-}
-
-.pb-1,
-.py-1 {
- padding-bottom: .25rem !important
-}
-
-.pl-1,
-.px-1 {
- padding-left: .25rem !important
-}
-
-.p-2 {
- padding: .5rem !important
-}
-
-.pt-2,
-.py-2 {
- padding-top: .5rem !important
-}
-
-.pr-2,
-.px-2 {
- padding-right: .5rem !important
-}
-
-.pb-2,
-.py-2 {
- padding-bottom: .5rem !important
-}
-
-.pl-2,
-.px-2 {
- padding-left: .5rem !important
-}
-
-.p-3 {
- padding: 1rem !important
-}
-
-.pt-3,
-.py-3 {
- padding-top: 1rem !important
-}
-
-.pr-3,
-.px-3 {
- padding-right: 1rem !important
-}
-
-.pb-3,
-.py-3 {
- padding-bottom: 1rem !important
-}
-
-.pl-3,
-.px-3 {
- padding-left: 1rem !important
-}
-
-.p-4 {
- padding: 1.5rem !important
-}
-
-.pt-4,
-.py-4 {
- padding-top: 1.5rem !important
-}
-
-.pr-4,
-.px-4 {
- padding-right: 1.5rem !important
-}
-
-.pb-4,
-.py-4 {
- padding-bottom: 1.5rem !important
-}
-
-.pl-4,
-.px-4 {
- padding-left: 1.5rem !important
-}
-
-.p-5 {
- padding: 3rem !important
-}
-
-.pt-5,
-.py-5 {
- padding-top: 3rem !important
-}
-
-.pr-5,
-.px-5 {
- padding-right: 3rem !important
-}
-
-.pb-5,
-.py-5 {
- padding-bottom: 3rem !important
-}
-
-.pl-5,
-.px-5 {
- padding-left: 3rem !important
-}
-
-.m-n1 {
- margin: -.25rem !important
-}
-
-.mt-n1,
-.my-n1 {
- margin-top: -.25rem !important
-}
-
-.mr-n1,
-.mx-n1 {
- margin-right: -.25rem !important
-}
-
-.mb-n1,
-.my-n1 {
- margin-bottom: -.25rem !important
-}
-
-.ml-n1,
-.mx-n1 {
- margin-left: -.25rem !important
-}
-
-.m-n2 {
- margin: -.5rem !important
-}
-
-.mt-n2,
-.my-n2 {
- margin-top: -.5rem !important
-}
-
-.mr-n2,
-.mx-n2 {
- margin-right: -.5rem !important
-}
-
-.mb-n2,
-.my-n2 {
- margin-bottom: -.5rem !important
-}
-
-.ml-n2,
-.mx-n2 {
- margin-left: -.5rem !important
-}
-
-.m-n3 {
- margin: -1rem !important
-}
-
-.mt-n3,
-.my-n3 {
- margin-top: -1rem !important
-}
-
-.mr-n3,
-.mx-n3 {
- margin-right: -1rem !important
-}
-
-.mb-n3,
-.my-n3 {
- margin-bottom: -1rem !important
-}
-
-.ml-n3,
-.mx-n3 {
- margin-left: -1rem !important
-}
-
-.m-n4 {
- margin: -1.5rem !important
-}
-
-.mt-n4,
-.my-n4 {
- margin-top: -1.5rem !important
-}
-
-.mr-n4,
-.mx-n4 {
- margin-right: -1.5rem !important
-}
-
-.mb-n4,
-.my-n4 {
- margin-bottom: -1.5rem !important
-}
-
-.ml-n4,
-.mx-n4 {
- margin-left: -1.5rem !important
-}
-
-.m-n5 {
- margin: -3rem !important
-}
-
-.mt-n5,
-.my-n5 {
- margin-top: -3rem !important
-}
-
-.mr-n5,
-.mx-n5 {
- margin-right: -3rem !important
-}
-
-.mb-n5,
-.my-n5 {
- margin-bottom: -3rem !important
-}
-
-.ml-n5,
-.mx-n5 {
- margin-left: -3rem !important
-}
-
-.m-auto {
- margin: auto !important
-}
-
-.mt-auto,
-.my-auto {
- margin-top: auto !important
-}
-
-.mr-auto,
-.mx-auto {
- margin-right: auto !important
-}
-
-.mb-auto,
-.my-auto {
- margin-bottom: auto !important
-}
-
-.ml-auto,
-.mx-auto {
- margin-left: auto !important
-}
-
-@media (min-width:576px) {
- .m-sm-0 {
- margin: 0 !important
- }
-
- .mt-sm-0,
- .my-sm-0 {
- margin-top: 0 !important
- }
-
- .mr-sm-0,
- .mx-sm-0 {
- margin-right: 0 !important
- }
-
- .mb-sm-0,
- .my-sm-0 {
- margin-bottom: 0 !important
- }
-
- .ml-sm-0,
- .mx-sm-0 {
- margin-left: 0 !important
- }
-
- .m-sm-1 {
- margin: .25rem !important
- }
-
- .mt-sm-1,
- .my-sm-1 {
- margin-top: .25rem !important
- }
-
- .mr-sm-1,
- .mx-sm-1 {
- margin-right: .25rem !important
- }
-
- .mb-sm-1,
- .my-sm-1 {
- margin-bottom: .25rem !important
- }
-
- .ml-sm-1,
- .mx-sm-1 {
- margin-left: .25rem !important
- }
-
- .m-sm-2 {
- margin: .5rem !important
- }
-
- .mt-sm-2,
- .my-sm-2 {
- margin-top: .5rem !important
- }
-
- .mr-sm-2,
- .mx-sm-2 {
- margin-right: .5rem !important
- }
-
- .mb-sm-2,
- .my-sm-2 {
- margin-bottom: .5rem !important
- }
-
- .ml-sm-2,
- .mx-sm-2 {
- margin-left: .5rem !important
- }
-
- .m-sm-3 {
- margin: 1rem !important
- }
-
- .mt-sm-3,
- .my-sm-3 {
- margin-top: 1rem !important
- }
-
- .mr-sm-3,
- .mx-sm-3 {
- margin-right: 1rem !important
- }
-
- .mb-sm-3,
- .my-sm-3 {
- margin-bottom: 1rem !important
- }
-
- .ml-sm-3,
- .mx-sm-3 {
- margin-left: 1rem !important
- }
-
- .m-sm-4 {
- margin: 1.5rem !important
- }
-
- .mt-sm-4,
- .my-sm-4 {
- margin-top: 1.5rem !important
- }
-
- .mr-sm-4,
- .mx-sm-4 {
- margin-right: 1.5rem !important
- }
-
- .mb-sm-4,
- .my-sm-4 {
- margin-bottom: 1.5rem !important
- }
-
- .ml-sm-4,
- .mx-sm-4 {
- margin-left: 1.5rem !important
- }
-
- .m-sm-5 {
- margin: 3rem !important
- }
-
- .mt-sm-5,
- .my-sm-5 {
- margin-top: 3rem !important
- }
-
- .mr-sm-5,
- .mx-sm-5 {
- margin-right: 3rem !important
- }
-
- .mb-sm-5,
- .my-sm-5 {
- margin-bottom: 3rem !important
- }
-
- .ml-sm-5,
- .mx-sm-5 {
- margin-left: 3rem !important
- }
-
- .p-sm-0 {
- padding: 0 !important
- }
-
- .pt-sm-0,
- .py-sm-0 {
- padding-top: 0 !important
- }
-
- .pr-sm-0,
- .px-sm-0 {
- padding-right: 0 !important
- }
-
- .pb-sm-0,
- .py-sm-0 {
- padding-bottom: 0 !important
- }
-
- .pl-sm-0,
- .px-sm-0 {
- padding-left: 0 !important
- }
-
- .p-sm-1 {
- padding: .25rem !important
- }
-
- .pt-sm-1,
- .py-sm-1 {
- padding-top: .25rem !important
- }
-
- .pr-sm-1,
- .px-sm-1 {
- padding-right: .25rem !important
- }
-
- .pb-sm-1,
- .py-sm-1 {
- padding-bottom: .25rem !important
- }
-
- .pl-sm-1,
- .px-sm-1 {
- padding-left: .25rem !important
- }
-
- .p-sm-2 {
- padding: .5rem !important
- }
-
- .pt-sm-2,
- .py-sm-2 {
- padding-top: .5rem !important
- }
-
- .pr-sm-2,
- .px-sm-2 {
- padding-right: .5rem !important
- }
-
- .pb-sm-2,
- .py-sm-2 {
- padding-bottom: .5rem !important
- }
-
- .pl-sm-2,
- .px-sm-2 {
- padding-left: .5rem !important
- }
-
- .p-sm-3 {
- padding: 1rem !important
- }
-
- .pt-sm-3,
- .py-sm-3 {
- padding-top: 1rem !important
- }
-
- .pr-sm-3,
- .px-sm-3 {
- padding-right: 1rem !important
- }
-
- .pb-sm-3,
- .py-sm-3 {
- padding-bottom: 1rem !important
- }
-
- .pl-sm-3,
- .px-sm-3 {
- padding-left: 1rem !important
- }
-
- .p-sm-4 {
- padding: 1.5rem !important
- }
-
- .pt-sm-4,
- .py-sm-4 {
- padding-top: 1.5rem !important
- }
-
- .pr-sm-4,
- .px-sm-4 {
- padding-right: 1.5rem !important
- }
-
- .pb-sm-4,
- .py-sm-4 {
- padding-bottom: 1.5rem !important
- }
-
- .pl-sm-4,
- .px-sm-4 {
- padding-left: 1.5rem !important
- }
-
- .p-sm-5 {
- padding: 3rem !important
- }
-
- .pt-sm-5,
- .py-sm-5 {
- padding-top: 3rem !important
- }
-
- .pr-sm-5,
- .px-sm-5 {
- padding-right: 3rem !important
- }
-
- .pb-sm-5,
- .py-sm-5 {
- padding-bottom: 3rem !important
- }
-
- .pl-sm-5,
- .px-sm-5 {
- padding-left: 3rem !important
- }
-
- .m-sm-n1 {
- margin: -.25rem !important
- }
-
- .mt-sm-n1,
- .my-sm-n1 {
- margin-top: -.25rem !important
- }
-
- .mr-sm-n1,
- .mx-sm-n1 {
- margin-right: -.25rem !important
- }
-
- .mb-sm-n1,
- .my-sm-n1 {
- margin-bottom: -.25rem !important
- }
-
- .ml-sm-n1,
- .mx-sm-n1 {
- margin-left: -.25rem !important
- }
-
- .m-sm-n2 {
- margin: -.5rem !important
- }
-
- .mt-sm-n2,
- .my-sm-n2 {
- margin-top: -.5rem !important
- }
-
- .mr-sm-n2,
- .mx-sm-n2 {
- margin-right: -.5rem !important
- }
-
- .mb-sm-n2,
- .my-sm-n2 {
- margin-bottom: -.5rem !important
- }
-
- .ml-sm-n2,
- .mx-sm-n2 {
- margin-left: -.5rem !important
- }
-
- .m-sm-n3 {
- margin: -1rem !important
- }
-
- .mt-sm-n3,
- .my-sm-n3 {
- margin-top: -1rem !important
- }
-
- .mr-sm-n3,
- .mx-sm-n3 {
- margin-right: -1rem !important
- }
-
- .mb-sm-n3,
- .my-sm-n3 {
- margin-bottom: -1rem !important
- }
-
- .ml-sm-n3,
- .mx-sm-n3 {
- margin-left: -1rem !important
- }
-
- .m-sm-n4 {
- margin: -1.5rem !important
- }
-
- .mt-sm-n4,
- .my-sm-n4 {
- margin-top: -1.5rem !important
- }
-
- .mr-sm-n4,
- .mx-sm-n4 {
- margin-right: -1.5rem !important
- }
-
- .mb-sm-n4,
- .my-sm-n4 {
- margin-bottom: -1.5rem !important
- }
-
- .ml-sm-n4,
- .mx-sm-n4 {
- margin-left: -1.5rem !important
- }
-
- .m-sm-n5 {
- margin: -3rem !important
- }
-
- .mt-sm-n5,
- .my-sm-n5 {
- margin-top: -3rem !important
- }
-
- .mr-sm-n5,
- .mx-sm-n5 {
- margin-right: -3rem !important
- }
-
- .mb-sm-n5,
- .my-sm-n5 {
- margin-bottom: -3rem !important
- }
-
- .ml-sm-n5,
- .mx-sm-n5 {
- margin-left: -3rem !important
- }
-
- .m-sm-auto {
- margin: auto !important
- }
-
- .mt-sm-auto,
- .my-sm-auto {
- margin-top: auto !important
- }
-
- .mr-sm-auto,
- .mx-sm-auto {
- margin-right: auto !important
- }
-
- .mb-sm-auto,
- .my-sm-auto {
- margin-bottom: auto !important
- }
-
- .ml-sm-auto,
- .mx-sm-auto {
- margin-left: auto !important
- }
-
-}
-
-@media (min-width:768px) {
- .m-md-0 {
- margin: 0 !important
- }
-
- .mt-md-0,
- .my-md-0 {
- margin-top: 0 !important
- }
-
- .mr-md-0,
- .mx-md-0 {
- margin-right: 0 !important
- }
-
- .mb-md-0,
- .my-md-0 {
- margin-bottom: 0 !important
- }
-
- .ml-md-0,
- .mx-md-0 {
- margin-left: 0 !important
- }
-
- .m-md-1 {
- margin: .25rem !important
- }
-
- .mt-md-1,
- .my-md-1 {
- margin-top: .25rem !important
- }
-
- .mr-md-1,
- .mx-md-1 {
- margin-right: .25rem !important
- }
-
- .mb-md-1,
- .my-md-1 {
- margin-bottom: .25rem !important
- }
-
- .ml-md-1,
- .mx-md-1 {
- margin-left: .25rem !important
- }
-
- .m-md-2 {
- margin: .5rem !important
- }
-
- .mt-md-2,
- .my-md-2 {
- margin-top: .5rem !important
- }
-
- .mr-md-2,
- .mx-md-2 {
- margin-right: .5rem !important
- }
-
- .mb-md-2,
- .my-md-2 {
- margin-bottom: .5rem !important
- }
-
- .ml-md-2,
- .mx-md-2 {
- margin-left: .5rem !important
- }
-
- .m-md-3 {
- margin: 1rem !important
- }
-
- .mt-md-3,
- .my-md-3 {
- margin-top: 1rem !important
- }
-
- .mr-md-3,
- .mx-md-3 {
- margin-right: 1rem !important
- }
-
- .mb-md-3,
- .my-md-3 {
- margin-bottom: 1rem !important
- }
-
- .ml-md-3,
- .mx-md-3 {
- margin-left: 1rem !important
- }
-
- .m-md-4 {
- margin: 1.5rem !important
- }
-
- .mt-md-4,
- .my-md-4 {
- margin-top: 1.5rem !important
- }
-
- .mr-md-4,
- .mx-md-4 {
- margin-right: 1.5rem !important
- }
-
- .mb-md-4,
- .my-md-4 {
- margin-bottom: 1.5rem !important
- }
-
- .ml-md-4,
- .mx-md-4 {
- margin-left: 1.5rem !important
- }
-
- .m-md-5 {
- margin: 3rem !important
- }
-
- .mt-md-5,
- .my-md-5 {
- margin-top: 3rem !important
- }
-
- .mr-md-5,
- .mx-md-5 {
- margin-right: 3rem !important
- }
-
- .mb-md-5,
- .my-md-5 {
- margin-bottom: 3rem !important
- }
-
- .ml-md-5,
- .mx-md-5 {
- margin-left: 3rem !important
- }
-
- .p-md-0 {
- padding: 0 !important
- }
-
- .pt-md-0,
- .py-md-0 {
- padding-top: 0 !important
- }
-
- .pr-md-0,
- .px-md-0 {
- padding-right: 0 !important
- }
-
- .pb-md-0,
- .py-md-0 {
- padding-bottom: 0 !important
- }
-
- .pl-md-0,
- .px-md-0 {
- padding-left: 0 !important
- }
-
- .p-md-1 {
- padding: .25rem !important
- }
-
- .pt-md-1,
- .py-md-1 {
- padding-top: .25rem !important
- }
-
- .pr-md-1,
- .px-md-1 {
- padding-right: .25rem !important
- }
-
- .pb-md-1,
- .py-md-1 {
- padding-bottom: .25rem !important
- }
-
- .pl-md-1,
- .px-md-1 {
- padding-left: .25rem !important
- }
-
- .p-md-2 {
- padding: .5rem !important
- }
-
- .pt-md-2,
- .py-md-2 {
- padding-top: .5rem !important
- }
-
- .pr-md-2,
- .px-md-2 {
- padding-right: .5rem !important
- }
-
- .pb-md-2,
- .py-md-2 {
- padding-bottom: .5rem !important
- }
-
- .pl-md-2,
- .px-md-2 {
- padding-left: .5rem !important
- }
-
- .p-md-3 {
- padding: 1rem !important
- }
-
- .pt-md-3,
- .py-md-3 {
- padding-top: 1rem !important
- }
-
- .pr-md-3,
- .px-md-3 {
- padding-right: 1rem !important
- }
-
- .pb-md-3,
- .py-md-3 {
- padding-bottom: 1rem !important
- }
-
- .pl-md-3,
- .px-md-3 {
- padding-left: 1rem !important
- }
-
- .p-md-4 {
- padding: 1.5rem !important
- }
-
- .pt-md-4,
- .py-md-4 {
- padding-top: 1.5rem !important
- }
-
- .pr-md-4,
- .px-md-4 {
- padding-right: 1.5rem !important
- }
-
- .pb-md-4,
- .py-md-4 {
- padding-bottom: 1.5rem !important
- }
-
- .pl-md-4,
- .px-md-4 {
- padding-left: 1.5rem !important
- }
-
- .p-md-5 {
- padding: 3rem !important
- }
-
- .pt-md-5,
- .py-md-5 {
- padding-top: 3rem !important
- }
-
- .pr-md-5,
- .px-md-5 {
- padding-right: 3rem !important
- }
-
- .pb-md-5,
- .py-md-5 {
- padding-bottom: 3rem !important
- }
-
- .pl-md-5,
- .px-md-5 {
- padding-left: 3rem !important
- }
-
- .m-md-n1 {
- margin: -.25rem !important
- }
-
- .mt-md-n1,
- .my-md-n1 {
- margin-top: -.25rem !important
- }
-
- .mr-md-n1,
- .mx-md-n1 {
- margin-right: -.25rem !important
- }
-
- .mb-md-n1,
- .my-md-n1 {
- margin-bottom: -.25rem !important
- }
-
- .ml-md-n1,
- .mx-md-n1 {
- margin-left: -.25rem !important
- }
-
- .m-md-n2 {
- margin: -.5rem !important
- }
-
- .mt-md-n2,
- .my-md-n2 {
- margin-top: -.5rem !important
- }
-
- .mr-md-n2,
- .mx-md-n2 {
- margin-right: -.5rem !important
- }
-
- .mb-md-n2,
- .my-md-n2 {
- margin-bottom: -.5rem !important
- }
-
- .ml-md-n2,
- .mx-md-n2 {
- margin-left: -.5rem !important
- }
-
- .m-md-n3 {
- margin: -1rem !important
- }
-
- .mt-md-n3,
- .my-md-n3 {
- margin-top: -1rem !important
- }
-
- .mr-md-n3,
- .mx-md-n3 {
- margin-right: -1rem !important
- }
-
- .mb-md-n3,
- .my-md-n3 {
- margin-bottom: -1rem !important
- }
-
- .ml-md-n3,
- .mx-md-n3 {
- margin-left: -1rem !important
- }
-
- .m-md-n4 {
- margin: -1.5rem !important
- }
-
- .mt-md-n4,
- .my-md-n4 {
- margin-top: -1.5rem !important
- }
-
- .mr-md-n4,
- .mx-md-n4 {
- margin-right: -1.5rem !important
- }
-
- .mb-md-n4,
- .my-md-n4 {
- margin-bottom: -1.5rem !important
- }
-
- .ml-md-n4,
- .mx-md-n4 {
- margin-left: -1.5rem !important
- }
-
- .m-md-n5 {
- margin: -3rem !important
- }
-
- .mt-md-n5,
- .my-md-n5 {
- margin-top: -3rem !important
- }
-
- .mr-md-n5,
- .mx-md-n5 {
- margin-right: -3rem !important
- }
-
- .mb-md-n5,
- .my-md-n5 {
- margin-bottom: -3rem !important
- }
-
- .ml-md-n5,
- .mx-md-n5 {
- margin-left: -3rem !important
- }
-
- .m-md-auto {
- margin: auto !important
- }
-
- .mt-md-auto,
- .my-md-auto {
- margin-top: auto !important
- }
-
- .mr-md-auto,
- .mx-md-auto {
- margin-right: auto !important
- }
-
- .mb-md-auto,
- .my-md-auto {
- margin-bottom: auto !important
- }
-
- .ml-md-auto,
- .mx-md-auto {
- margin-left: auto !important
- }
-
-}
-
-@media (min-width:992px) {
- .m-lg-0 {
- margin: 0 !important
- }
-
- .mt-lg-0,
- .my-lg-0 {
- margin-top: 0 !important
- }
-
- .mr-lg-0,
- .mx-lg-0 {
- margin-right: 0 !important
- }
-
- .mb-lg-0,
- .my-lg-0 {
- margin-bottom: 0 !important
- }
-
- .ml-lg-0,
- .mx-lg-0 {
- margin-left: 0 !important
- }
-
- .m-lg-1 {
- margin: .25rem !important
- }
-
- .mt-lg-1,
- .my-lg-1 {
- margin-top: .25rem !important
- }
-
- .mr-lg-1,
- .mx-lg-1 {
- margin-right: .25rem !important
- }
-
- .mb-lg-1,
- .my-lg-1 {
- margin-bottom: .25rem !important
- }
-
- .ml-lg-1,
- .mx-lg-1 {
- margin-left: .25rem !important
- }
-
- .m-lg-2 {
- margin: .5rem !important
- }
-
- .mt-lg-2,
- .my-lg-2 {
- margin-top: .5rem !important
- }
-
- .mr-lg-2,
- .mx-lg-2 {
- margin-right: .5rem !important
- }
-
- .mb-lg-2,
- .my-lg-2 {
- margin-bottom: .5rem !important
- }
-
- .ml-lg-2,
- .mx-lg-2 {
- margin-left: .5rem !important
- }
-
- .m-lg-3 {
- margin: 1rem !important
- }
-
- .mt-lg-3,
- .my-lg-3 {
- margin-top: 1rem !important
- }
-
- .mr-lg-3,
- .mx-lg-3 {
- margin-right: 1rem !important
- }
-
- .mb-lg-3,
- .my-lg-3 {
- margin-bottom: 1rem !important
- }
-
- .ml-lg-3,
- .mx-lg-3 {
- margin-left: 1rem !important
- }
-
- .m-lg-4 {
- margin: 1.5rem !important
- }
-
- .mt-lg-4,
- .my-lg-4 {
- margin-top: 1.5rem !important
- }
-
- .mr-lg-4,
- .mx-lg-4 {
- margin-right: 1.5rem !important
- }
-
- .mb-lg-4,
- .my-lg-4 {
- margin-bottom: 1.5rem !important
- }
-
- .ml-lg-4,
- .mx-lg-4 {
- margin-left: 1.5rem !important
- }
-
- .m-lg-5 {
- margin: 3rem !important
- }
-
- .mt-lg-5,
- .my-lg-5 {
- margin-top: 3rem !important
- }
-
- .mr-lg-5,
- .mx-lg-5 {
- margin-right: 3rem !important
- }
-
- .mb-lg-5,
- .my-lg-5 {
- margin-bottom: 3rem !important
- }
-
- .ml-lg-5,
- .mx-lg-5 {
- margin-left: 3rem !important
- }
-
- .p-lg-0 {
- padding: 0 !important
- }
-
- .pt-lg-0,
- .py-lg-0 {
- padding-top: 0 !important
- }
-
- .pr-lg-0,
- .px-lg-0 {
- padding-right: 0 !important
- }
-
- .pb-lg-0,
- .py-lg-0 {
- padding-bottom: 0 !important
- }
-
- .pl-lg-0,
- .px-lg-0 {
- padding-left: 0 !important
- }
-
- .p-lg-1 {
- padding: .25rem !important
- }
-
- .pt-lg-1,
- .py-lg-1 {
- padding-top: .25rem !important
- }
-
- .pr-lg-1,
- .px-lg-1 {
- padding-right: .25rem !important
- }
-
- .pb-lg-1,
- .py-lg-1 {
- padding-bottom: .25rem !important
- }
-
- .pl-lg-1,
- .px-lg-1 {
- padding-left: .25rem !important
- }
-
- .p-lg-2 {
- padding: .5rem !important
- }
-
- .pt-lg-2,
- .py-lg-2 {
- padding-top: .5rem !important
- }
-
- .pr-lg-2,
- .px-lg-2 {
- padding-right: .5rem !important
- }
-
- .pb-lg-2,
- .py-lg-2 {
- padding-bottom: .5rem !important
- }
-
- .pl-lg-2,
- .px-lg-2 {
- padding-left: .5rem !important
- }
-
- .p-lg-3 {
- padding: 1rem !important
- }
-
- .pt-lg-3,
- .py-lg-3 {
- padding-top: 1rem !important
- }
-
- .pr-lg-3,
- .px-lg-3 {
- padding-right: 1rem !important
- }
-
- .pb-lg-3,
- .py-lg-3 {
- padding-bottom: 1rem !important
- }
-
- .pl-lg-3,
- .px-lg-3 {
- padding-left: 1rem !important
- }
-
- .p-lg-4 {
- padding: 1.5rem !important
- }
-
- .pt-lg-4,
- .py-lg-4 {
- padding-top: 1.5rem !important
- }
-
- .pr-lg-4,
- .px-lg-4 {
- padding-right: 1.5rem !important
- }
-
- .pb-lg-4,
- .py-lg-4 {
- padding-bottom: 1.5rem !important
- }
-
- .pl-lg-4,
- .px-lg-4 {
- padding-left: 1.5rem !important
- }
-
- .p-lg-5 {
- padding: 3rem !important
- }
-
- .pt-lg-5,
- .py-lg-5 {
- padding-top: 3rem !important
- }
-
- .pr-lg-5,
- .px-lg-5 {
- padding-right: 3rem !important
- }
-
- .pb-lg-5,
- .py-lg-5 {
- padding-bottom: 3rem !important
- }
-
- .pl-lg-5,
- .px-lg-5 {
- padding-left: 3rem !important
- }
-
- .m-lg-n1 {
- margin: -.25rem !important
- }
-
- .mt-lg-n1,
- .my-lg-n1 {
- margin-top: -.25rem !important
- }
-
- .mr-lg-n1,
- .mx-lg-n1 {
- margin-right: -.25rem !important
- }
-
- .mb-lg-n1,
- .my-lg-n1 {
- margin-bottom: -.25rem !important
- }
-
- .ml-lg-n1,
- .mx-lg-n1 {
- margin-left: -.25rem !important
- }
-
- .m-lg-n2 {
- margin: -.5rem !important
- }
-
- .mt-lg-n2,
- .my-lg-n2 {
- margin-top: -.5rem !important
- }
-
- .mr-lg-n2,
- .mx-lg-n2 {
- margin-right: -.5rem !important
- }
-
- .mb-lg-n2,
- .my-lg-n2 {
- margin-bottom: -.5rem !important
- }
-
- .ml-lg-n2,
- .mx-lg-n2 {
- margin-left: -.5rem !important
- }
-
- .m-lg-n3 {
- margin: -1rem !important
- }
-
- .mt-lg-n3,
- .my-lg-n3 {
- margin-top: -1rem !important
- }
-
- .mr-lg-n3,
- .mx-lg-n3 {
- margin-right: -1rem !important
- }
-
- .mb-lg-n3,
- .my-lg-n3 {
- margin-bottom: -1rem !important
- }
-
- .ml-lg-n3,
- .mx-lg-n3 {
- margin-left: -1rem !important
- }
-
- .m-lg-n4 {
- margin: -1.5rem !important
- }
-
- .mt-lg-n4,
- .my-lg-n4 {
- margin-top: -1.5rem !important
- }
-
- .mr-lg-n4,
- .mx-lg-n4 {
- margin-right: -1.5rem !important
- }
-
- .mb-lg-n4,
- .my-lg-n4 {
- margin-bottom: -1.5rem !important
- }
-
- .ml-lg-n4,
- .mx-lg-n4 {
- margin-left: -1.5rem !important
- }
-
- .m-lg-n5 {
- margin: -3rem !important
- }
-
- .mt-lg-n5,
- .my-lg-n5 {
- margin-top: -3rem !important
- }
-
- .mr-lg-n5,
- .mx-lg-n5 {
- margin-right: -3rem !important
- }
-
- .mb-lg-n5,
- .my-lg-n5 {
- margin-bottom: -3rem !important
- }
-
- .ml-lg-n5,
- .mx-lg-n5 {
- margin-left: -3rem !important
- }
-
- .m-lg-auto {
- margin: auto !important
- }
-
- .mt-lg-auto,
- .my-lg-auto {
- margin-top: auto !important
- }
-
- .mr-lg-auto,
- .mx-lg-auto {
- margin-right: auto !important
- }
-
- .mb-lg-auto,
- .my-lg-auto {
- margin-bottom: auto !important
- }
-
- .ml-lg-auto,
- .mx-lg-auto {
- margin-left: auto !important
- }
-
-}
-
-@media (min-width:1200px) {
- .m-xl-0 {
- margin: 0 !important
- }
-
- .mt-xl-0,
- .my-xl-0 {
- margin-top: 0 !important
- }
-
- .mr-xl-0,
- .mx-xl-0 {
- margin-right: 0 !important
- }
-
- .mb-xl-0,
- .my-xl-0 {
- margin-bottom: 0 !important
- }
-
- .ml-xl-0,
- .mx-xl-0 {
- margin-left: 0 !important
- }
-
- .m-xl-1 {
- margin: .25rem !important
- }
-
- .mt-xl-1,
- .my-xl-1 {
- margin-top: .25rem !important
- }
-
- .mr-xl-1,
- .mx-xl-1 {
- margin-right: .25rem !important
- }
-
- .mb-xl-1,
- .my-xl-1 {
- margin-bottom: .25rem !important
- }
-
- .ml-xl-1,
- .mx-xl-1 {
- margin-left: .25rem !important
- }
-
- .m-xl-2 {
- margin: .5rem !important
- }
-
- .mt-xl-2,
- .my-xl-2 {
- margin-top: .5rem !important
- }
-
- .mr-xl-2,
- .mx-xl-2 {
- margin-right: .5rem !important
- }
-
- .mb-xl-2,
- .my-xl-2 {
- margin-bottom: .5rem !important
- }
-
- .ml-xl-2,
- .mx-xl-2 {
- margin-left: .5rem !important
- }
-
- .m-xl-3 {
- margin: 1rem !important
- }
-
- .mt-xl-3,
- .my-xl-3 {
- margin-top: 1rem !important
- }
-
- .mr-xl-3,
- .mx-xl-3 {
- margin-right: 1rem !important
- }
-
- .mb-xl-3,
- .my-xl-3 {
- margin-bottom: 1rem !important
- }
-
- .ml-xl-3,
- .mx-xl-3 {
- margin-left: 1rem !important
- }
-
- .m-xl-4 {
- margin: 1.5rem !important
- }
-
- .mt-xl-4,
- .my-xl-4 {
- margin-top: 1.5rem !important
- }
-
- .mr-xl-4,
- .mx-xl-4 {
- margin-right: 1.5rem !important
- }
-
- .mb-xl-4,
- .my-xl-4 {
- margin-bottom: 1.5rem !important
- }
-
- .ml-xl-4,
- .mx-xl-4 {
- margin-left: 1.5rem !important
- }
-
- .m-xl-5 {
- margin: 3rem !important
- }
-
- .mt-xl-5,
- .my-xl-5 {
- margin-top: 3rem !important
- }
-
- .mr-xl-5,
- .mx-xl-5 {
- margin-right: 3rem !important
- }
-
- .mb-xl-5,
- .my-xl-5 {
- margin-bottom: 3rem !important
- }
-
- .ml-xl-5,
- .mx-xl-5 {
- margin-left: 3rem !important
- }
-
- .p-xl-0 {
- padding: 0 !important
- }
-
- .pt-xl-0,
- .py-xl-0 {
- padding-top: 0 !important
- }
-
- .pr-xl-0,
- .px-xl-0 {
- padding-right: 0 !important
- }
-
- .pb-xl-0,
- .py-xl-0 {
- padding-bottom: 0 !important
- }
-
- .pl-xl-0,
- .px-xl-0 {
- padding-left: 0 !important
- }
-
- .p-xl-1 {
- padding: .25rem !important
- }
-
- .pt-xl-1,
- .py-xl-1 {
- padding-top: .25rem !important
- }
-
- .pr-xl-1,
- .px-xl-1 {
- padding-right: .25rem !important
- }
-
- .pb-xl-1,
- .py-xl-1 {
- padding-bottom: .25rem !important
- }
-
- .pl-xl-1,
- .px-xl-1 {
- padding-left: .25rem !important
- }
-
- .p-xl-2 {
- padding: .5rem !important
- }
-
- .pt-xl-2,
- .py-xl-2 {
- padding-top: .5rem !important
- }
-
- .pr-xl-2,
- .px-xl-2 {
- padding-right: .5rem !important
- }
-
- .pb-xl-2,
- .py-xl-2 {
- padding-bottom: .5rem !important
- }
-
- .pl-xl-2,
- .px-xl-2 {
- padding-left: .5rem !important
- }
-
- .p-xl-3 {
- padding: 1rem !important
- }
-
- .pt-xl-3,
- .py-xl-3 {
- padding-top: 1rem !important
- }
-
- .pr-xl-3,
- .px-xl-3 {
- padding-right: 1rem !important
- }
-
- .pb-xl-3,
- .py-xl-3 {
- padding-bottom: 1rem !important
- }
-
- .pl-xl-3,
- .px-xl-3 {
- padding-left: 1rem !important
- }
-
- .p-xl-4 {
- padding: 1.5rem !important
- }
-
- .pt-xl-4,
- .py-xl-4 {
- padding-top: 1.5rem !important
- }
-
- .pr-xl-4,
- .px-xl-4 {
- padding-right: 1.5rem !important
- }
-
- .pb-xl-4,
- .py-xl-4 {
- padding-bottom: 1.5rem !important
- }
-
- .pl-xl-4,
- .px-xl-4 {
- padding-left: 1.5rem !important
- }
-
- .p-xl-5 {
- padding: 3rem !important
- }
-
- .pt-xl-5,
- .py-xl-5 {
- padding-top: 3rem !important
- }
-
- .pr-xl-5,
- .px-xl-5 {
- padding-right: 3rem !important
- }
-
- .pb-xl-5,
- .py-xl-5 {
- padding-bottom: 3rem !important
- }
-
- .pl-xl-5,
- .px-xl-5 {
- padding-left: 3rem !important
- }
-
- .m-xl-n1 {
- margin: -.25rem !important
- }
-
- .mt-xl-n1,
- .my-xl-n1 {
- margin-top: -.25rem !important
- }
-
- .mr-xl-n1,
- .mx-xl-n1 {
- margin-right: -.25rem !important
- }
-
- .mb-xl-n1,
- .my-xl-n1 {
- margin-bottom: -.25rem !important
- }
-
- .ml-xl-n1,
- .mx-xl-n1 {
- margin-left: -.25rem !important
- }
-
- .m-xl-n2 {
- margin: -.5rem !important
- }
-
- .mt-xl-n2,
- .my-xl-n2 {
- margin-top: -.5rem !important
- }
-
- .mr-xl-n2,
- .mx-xl-n2 {
- margin-right: -.5rem !important
- }
-
- .mb-xl-n2,
- .my-xl-n2 {
- margin-bottom: -.5rem !important
- }
-
- .ml-xl-n2,
- .mx-xl-n2 {
- margin-left: -.5rem !important
- }
-
- .m-xl-n3 {
- margin: -1rem !important
- }
-
- .mt-xl-n3,
- .my-xl-n3 {
- margin-top: -1rem !important
- }
-
- .mr-xl-n3,
- .mx-xl-n3 {
- margin-right: -1rem !important
- }
-
- .mb-xl-n3,
- .my-xl-n3 {
- margin-bottom: -1rem !important
- }
-
- .ml-xl-n3,
- .mx-xl-n3 {
- margin-left: -1rem !important
- }
-
- .m-xl-n4 {
- margin: -1.5rem !important
- }
-
- .mt-xl-n4,
- .my-xl-n4 {
- margin-top: -1.5rem !important
- }
-
- .mr-xl-n4,
- .mx-xl-n4 {
- margin-right: -1.5rem !important
- }
-
- .mb-xl-n4,
- .my-xl-n4 {
- margin-bottom: -1.5rem !important
- }
-
- .ml-xl-n4,
- .mx-xl-n4 {
- margin-left: -1.5rem !important
- }
-
- .m-xl-n5 {
- margin: -3rem !important
- }
-
- .mt-xl-n5,
- .my-xl-n5 {
- margin-top: -3rem !important
- }
-
- .mr-xl-n5,
- .mx-xl-n5 {
- margin-right: -3rem !important
- }
-
- .mb-xl-n5,
- .my-xl-n5 {
- margin-bottom: -3rem !important
- }
-
- .ml-xl-n5,
- .mx-xl-n5 {
- margin-left: -3rem !important
- }
-
- .m-xl-auto {
- margin: auto !important
- }
-
- .mt-xl-auto,
- .my-xl-auto {
- margin-top: auto !important
- }
-
- .mr-xl-auto,
- .mx-xl-auto {
- margin-right: auto !important
- }
-
- .mb-xl-auto,
- .my-xl-auto {
- margin-bottom: auto !important
- }
-
- .ml-xl-auto,
- .mx-xl-auto {
- margin-left: auto !important
- }
-
-}
-
-.text-monospace {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important
-}
-
-.text-justify {
- text-align: justify !important
-}
-
-.text-wrap {
- white-space: normal !important
-}
-
-.text-nowrap {
- white-space: nowrap !important
-}
-
-.text-truncate {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap
-}
-
-.text-left {
- text-align: left !important
-}
-
-.text-right {
- text-align: right !important
-}
-
-.text-center {
- text-align: center !important
-}
-
-@media (min-width:576px) {
- .text-sm-left {
- text-align: left !important
- }
-
- .text-sm-right {
- text-align: right !important
- }
-
- .text-sm-center {
- text-align: center !important
- }
-
-}
-
-@media (min-width:768px) {
- .text-md-left {
- text-align: left !important
- }
-
- .text-md-right {
- text-align: right !important
- }
-
- .text-md-center {
- text-align: center !important
- }
-
-}
-
-@media (min-width:992px) {
- .text-lg-left {
- text-align: left !important
- }
-
- .text-lg-right {
- text-align: right !important
- }
-
- .text-lg-center {
- text-align: center !important
- }
-
-}
-
-@media (min-width:1200px) {
- .text-xl-left {
- text-align: left !important
- }
-
- .text-xl-right {
- text-align: right !important
- }
-
- .text-xl-center {
- text-align: center !important
- }
-
-}
-
-.text-lowercase {
- text-transform: lowercase !important
-}
-
-.text-uppercase {
- text-transform: uppercase !important
-}
-
-.text-capitalize {
- text-transform: capitalize !important
-}
-
-.font-weight-light {
- font-weight: 300 !important
-}
-
-.font-weight-lighter {
- font-weight: lighter !important
-}
-
-.font-weight-normal {
- font-weight: 400 !important
-}
-
-.font-weight-bold {
- font-weight: 700 !important
-}
-
-.font-weight-bolder {
- font-weight: bolder !important
-}
-
-.font-italic {
- font-style: italic !important
-}
-
-.text-white {
- color: #fff !important
-}
-
-.text-primary {
- color: #047006 !important
-}
-
-a.text-primary:focus,
-a.text-primary:hover {
- color: #012602 !important
-}
-
-.text-secondary {
- color: grey !important
-}
-
-a.text-secondary:focus,
-a.text-secondary:hover {
- color: #5a5a5a !important
-}
-
-.text-success {
- color: #047006 !important
-}
-
-a.text-success:focus,
-a.text-success:hover {
- color: #009461 !important
-}
-
-.text-info {
- color: #6c61f6 !important
-}
-
-a.text-info:focus,
-a.text-info:hover {
- color: #2919f2 !important
-}
-
-.text-warning {
- color: #f0825f !important
-}
-
-a.text-warning:focus,
-a.text-warning:hover {
- color: #e94b19 !important
-}
-
-.text-danger {
- color: #ff5f66 !important
-}
-
-a.text-danger:focus,
-a.text-danger:hover {
- color: #ff131d !important
-}
-
-.text-light {
- color: #dfdfdf !important
-}
-
-a.text-light:focus,
-a.text-light:hover {
- color: #b9b9b9 !important
-}
-
-.text-dark {
- color: #74767b !important
-}
-
-a.text-dark:focus,
-a.text-dark:hover {
- color: #4f5054 !important
-}
-
-.text-white {
- color: #fff !important
-}
-
-a.text-white:focus,
-a.text-white:hover {
- color: #d9d9d9 !important
-}
-
-.text-body {
- color: #212529 !important
-}
-
-.text-muted {
- color: #adb5bd !important
-}
-
-.text-black-50 {
- color: rgba(0, 0, 0, .5) !important
-}
-
-.text-white-50 {
- color: rgba(255, 255, 255, .5) !important
-}
-
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0
-}
-
-.text-decoration-none {
- text-decoration: none !important
-}
-
-.text-break {
- word-break: break-word !important;
- overflow-wrap: break-word !important
-}
-
-.text-reset {
- color: inherit !important
-}
-
-.visible {
- visibility: visible !important
-}
-
-.invisible {
- visibility: hidden !important
-}
-
-@media print {
- *,
- ::after,
- ::before {
- text-shadow: none !important;
- box-shadow: none !important
- }
-
- a:not(.btn) {
- text-decoration: underline
- }
-
- abbr[title]::after {
- content: '3'attr(title) ")"
- }
-
- pre {
- white-space: pre-wrap !important
- }
-
- blockquote,
- pre {
- border: 1px solid #adb5bd;
- page-break-inside: avoid
- }
-
- thead {
- display: table-header-group
- }
-
- img,
- tr {
- page-break-inside: avoid
- }
-
- h2,
- h3,
- p {
- orphans: 3;
- widows: 3
- }
-
- h2,
- h3 {
- page-break-after: avoid
- }
-
- @page {
- size: a3
- }
-
- body {
- min-width: 992px !important
- }
-
- .container {
- min-width: 992px !important
- }
-
- .navbar {
- display: none
- }
-
- .badge {
- border: 1px solid #000
- }
-
- .table {
- border-collapse: collapse !important
- }
-
- .table td,
- .table th {
- background-color: #fff !important
- }
-
- .table-bordered td,
- .table-bordered th {
- border: 1px solid #dee2e6 !important
- }
-
- .table-dark {
- color: inherit
- }
-
- .table-dark tbody+tbody,
- .table-dark td,
- .table-dark th,
- .table-dark thead th {
- border-color: #f2f4f9
- }
-
- .table .thead-dark th {
- color: inherit;
- border-color: #f2f4f9
- }
-
-}
-
-.dev-info {
- position: fixed;
- color: grey;
- font-size: smaller;
- left: 8px;
- z-index: 120
-}
-
-.versionstring {
- top: 70px;
- right: 8px;
- left: auto
-}
-
-.grd-time-used {
- bottom: 0
-}
-
-.t-header {
- display: -webkit-box;
- display: flex;
- height: 70px;
- background: #f9fafb;
- z-index: 100
-}
-
-@media (max-width:991.98px) {
- .t-header {
- padding-left: 5px;
- padding-right: 5px
- }
-
-}
-
-.t-header .t-header-brand-wrapper {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- height: 70px;
- width: 17rem;
- min-width: 17rem;
- max-width: 17rem;
- background: #fff;
- z-index: 100;
- padding-left: 18px
-}
-
-.t-header .t-header-brand-wrapper a {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- color: #dfdfdf;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- font-size: 1.25rem
-}
-
-.t-header .t-header-brand-wrapper a .logo {
- max-width: 100%;
- width: 110px
-}
-
-.t-header .t-header-brand-wrapper a .logo-mini {
- display: none;
- max-width: 100%;
- width: 35px
-}
-
-.t-header .t-header-brand-wrapper a p {
- color: inherit;
- font-size: inherit;
- font-weight: inherit;
- margin-bottom: 0
-}
-
-@media (max-width:991.98px) {
- .t-header .t-header-brand-wrapper {
- padding-left: 0;
- -webkit-box-pack: center;
- justify-content: center
- }
-
- .t-header .t-header-brand-wrapper a .logo-mini {
- width: 25px
- }
-
-}
-
-.t-header .t-header-content-wrapper {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row;
- width: 100%;
- max-width: 100%;
- padding: 0 2.5rem
-}
-
-@media (max-width:991.98px) {
- .t-header .t-header-content-wrapper {
- padding: 0 1rem
- }
-
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box {
- display: -webkit-box;
- display: flex;
- width: 40%;
- height: 45px;
- border: none;
- background: #edf0f3;
- border-radius: 4px;
- -webkit-transition: .3s ease-in-out;
- transition: .3s ease-in-out;
- -webkit-transition-property: background;
- transition-property: background
-}
-
-@media (max-width:580px) {
- .t-header .t-header-content-wrapper .t-header-search-box {
- display: none
- }
-
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box .input-group-prepend .input-group-text {
- border: none;
- background: 0 0;
- font-size: 1.5rem;
- padding-left: 15px;
- line-height: 23px
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box .form-control {
- height: inherit;
- border: none;
- background: 0 0;
- font-size: .875rem;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- padding-left: 0
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box .form-control.placeholder {
- font-size: inherit;
- font-family: inherit;
- font-weight: inherit
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box .form-control:-moz-placeholder {
- font-size: inherit;
- font-family: inherit;
- font-weight: inherit
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box .form-control::-moz-placeholder {
- font-size: inherit;
- font-family: inherit;
- font-weight: inherit
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box .form-control:-ms-input-placeholder {
- font-size: inherit;
- font-family: inherit;
- font-weight: inherit
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box .form-control::-webkit-input-placeholder {
- font-size: inherit;
- font-family: inherit;
- font-weight: inherit
-}
-
-.t-header .t-header-content-wrapper .t-header-search-box:hover {
- background: #e4e8ed
-}
-
-.t-header .t-header-content-wrapper .t-header-content {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- width: 100%;
- max-width: 100%
-}
-
-.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link {
- position: relative;
- font-family: Roboto, sans-serif
-}
-
-.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link i {
- color: #525c5d
-}
-
-.t-header .t-header-content-wrapper .t-header-content .nav .nav-item .nav-link .notification-indicator {
- position: absolute;
- top: 12px;
- right: 12px
-}
-
-.t-header .t-header-content-wrapper .t-header-content .nav .nav-item:last-child .nav-link {
- padding-right: 0
-}
-
-.t-header .t-header-toggler {
- background: 0 0;
- border: none;
- margin-left: auto
-}
-
-.t-header .t-header-toggler svg.logo {
- width: 50px;
- height: 50px;
- cursor: pointer;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0)
-}
-
-.t-header .t-header-toggler svg.logo path {
- fill: none;
- -webkit-transition: stroke-dashoffset .35s cubic-bezier(.25, -.25, .75, 1.25), stroke-dasharray .35s cubic-bezier(.25, -.25, .75, 1.25);
- transition: stroke-dashoffset .35s cubic-bezier(.25, -.25, .75, 1.25), stroke-dasharray .35s cubic-bezier(.25, -.25, .75, 1.25);
- stroke-width: 8px;
- stroke-linecap: round;
- stroke: #adb5bd;
- stroke-dashoffset: -20px
-}
-
-.t-header .t-header-toggler svg.logo .bottom,
-.t-header .t-header-toggler svg.logo .middle,
-.t-header .t-header-toggler svg.logo .top {
- stroke-dasharray: 60px 300px
-}
-
-.t-header .t-header-toggler.arrow path.bottom,
-.t-header .t-header-toggler.arrow path.top {
- stroke-dasharray: 25px 300px;
- stroke-dashoffset: -230px
-}
-
-.t-header .t-header-toggler i {
- font-size: 1.375rem
-}
-
-.t-header .t-header-toggler.t-header-mobile-toggler {
- margin-left: 0;
- margin-right: 15px
-}
-
-.t-header.fixed-top {
- position: fixed
-}
-
-.header-fixed .t-header {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- width: 100%;
- z-index: 100
-}
-
-.header-fixed .sidebar {
- padding-top: 70px
-}
-
-.header-fixed .sidebar .t-header-brand-wrapper {
- position: fixed;
- left: 0;
- top: 0;
- z-index: 100;
- width: 17rem;
- box-shadow: 0 2px 8px 0 rgba(0, 0, 0, .05)
-}
-
-.header-fixed .sidebar .navigation-menu {
- z-index: 1
-}
-
-.sidebar {
- position: relative;
- display: block;
- height: 100%;
- min-height: 100vh;
- width: 17rem;
- min-width: 17rem;
- max-width: 17rem;
- background: #fff
-}
-
-.sidebar .sidebar-header {
- border-bottom: 1px solid #2c3744
-}
-
-.sidebar .navigation-menu {
- padding-left: 0;
- padding-bottom: 80px;
- margin-bottom: 0;
- margin-top: 18px
-}
-
-.sidebar .navigation-menu li {
- display: block;
- margin: 0;
- -webkit-transition-duration: .25s;
- transition-duration: .25s;
- -webkit-transition-timing-function: cubic-bezier(.26, .66, .45, .78);
- transition-timing-function: cubic-bezier(.26, .66, .45, .78);
- -webkit-transition-property: background;
- transition-property: background
-}
-
-.sidebar .navigation-menu li.nav-category-divider {
- position: -webkit-sticky;
- position: sticky;
- top: 64px;
- display: block;
- background: #fff;
- margin: 15px 0 0 0;
- padding: 20px 30px 10px 30px;
- font-size: 10px;
- color: #047006;
- z-index: 1;
- font-family: Roboto, sans-serif;
- font-weight: 500
-}
-
-.sidebar .navigation-menu li.nav-category-divider:first-child {
- margin-top: 0
-}
-
-.sidebar .navigation-menu li a {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: reverse;
- flex-direction: row-reverse;
- -webkit-box-pack: end;
- justify-content: flex-end;
- padding: 12px 30px 12px 30px;
- font-size: 13px;
- line-height: 1;
- color: #525c5d;
- letter-spacing: .03rem;
- font-weight: 500;
- max-width: 100%;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden
-}
-
-.sidebar .navigation-menu li a .link-icon {
- margin-right: 15px;
- line-height: 1;
- color: #525c5d;
- font-size: 1.1875rem
-}
-
-.sidebar .navigation-menu li:last-child a {
- border-bottom: none
-}
-
-.sidebar .navigation-menu li .navigation-submenu {
- background: #fafafa;
- padding: 0 0 10px 30px
-}
-
-.sidebar .navigation-menu li .navigation-submenu.collapsing {
- -webkit-transition: .2s ease-in;
- transition: .2s ease-in
-}
-
-.sidebar .navigation-menu li .navigation-submenu li {
- display: inherit
-}
-
-.sidebar .navigation-menu li .navigation-submenu li a {
- display: block;
- padding: calc(9px) 30px calc(9px) calc(30px + 2px);
- opacity: .8;
- letter-spacing: .03rem;
- font-weight: 400;
- font-size: calc(13px - 1px);
- -webkit-transition: .3s ease-in-out;
- transition: .3s ease-in-out;
- -webkit-transition-property: color;
- transition-property: color
-}
-
-.sidebar .navigation-menu li .navigation-submenu li a[data-toggle=collapse] {
- position: relative
-}
-
-.sidebar .navigation-menu li .navigation-submenu li a[data-toggle=collapse]:after {
- content: '.5';
- height: 7px;
- width: 7px;
- border-radius: 25px;
- position: absolute;
- right: calc(30px + 4px);
- top: 14px
-}
-
-.sidebar .navigation-menu li .navigation-submenu li a.active {
- color: #047006
-}
-
-.sidebar .navigation-menu li .navigation-submenu li a:hover {
- color: #047006
-}
-
-.sidebar .navigation-menu li .navigation-submenu li:first-child a {
- padding-top: 10px
-}
-
-.sidebar .navigation-menu li .navigation-submenu li:first-child a:after {
- top: 15px
-}
-
-.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+1) a:after {
- background: #047006
-}
-
-.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+2) a:after {
- background: #047006
-}
-
-.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+3) a:after {
- background: #ff5f66
-}
-
-.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+4) a:after {
- background: #f0825f
-}
-
-.sidebar .navigation-menu li .navigation-submenu li:nth-child(5n+5) a:after {
- background: #6c61f6
-}
-
-.sidebar .navigation-menu li .navigation-submenu li .navigation-submenu {
- padding-left: 0
-}
-
-.sidebar .navigation-menu li .navigation-submenu li .navigation-submenu li a {
- opacity: .5
-}
-
-.sidebar .navigation-menu li.active a .link-title {
- color: #047006
-}
-
-.sidebar .navigation-menu li.active a .link-icon {
- color: #047006
-}
-
-.sidebar .navigation-menu>li:not(.nav-category-divider):hover {
- background: #fafafa
-}
-
-.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse] {
- position: relative
-}
-
-.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse]:after {
- content: '3';
- font-family: "Material Design Icons";
- font-size: 15px;
- text-rendering: auto;
- line-height: inherit;
- font-weight: bolder;
- position: absolute;
- top: 13px;
- right: 30px;
- display: block;
- -webkit-transition: .3s;
- transition: .3s;
- -webkit-transition-property: -webkit-transform;
- transition-property: -webkit-transform;
- transition-property: transform;
- transition-property: transform, -webkit-transform;
- color: #839092
-}
-
-.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse][aria-expanded=true] {
- background: #fafafa
-}
-
-.sidebar .navigation-menu>li:not(.nav-category-divider)>a[data-toggle=collapse][aria-expanded=true]:after {
- -webkit-transform: rotate(90deg);
- transform: rotate(90deg)
-}
-
-.sidebar .sidebar_footer {
- display: block;
- position: fixed;
- bottom: 0;
- left: 0;
- margin-top: auto;
- width: inherit;
- z-index: 2;
- background: #fff
-}
-
-.sidebar .sidebar_footer .admin-access-level {
- position: absolute;
- bottom: 0;
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: start;
- justify-content: flex-start;
- -webkit-box-align: center;
- align-items: center;
- z-index: 9999;
- height: auto;
- width: 100%;
- background: #fff;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- padding: 10px 20px;
- box-shadow: -7px -2px 25px -5px rgba(0, 0, 0, .12)
-}
-
-.sidebar .sidebar_footer .admin-access-level .user-type-wrapper {
- padding: 0 0 0 10px
-}
-
-.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .user_name {
- color: #525c5d;
- margin-bottom: 8px;
- line-height: 1;
- max-width: 100%;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- max-width: 95px;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- letter-spacing: .03rem
-}
-
-.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .user_access_level {
- color: #74767b;
- line-height: 1
-}
-
-.sidebar .sidebar_footer .admin-access-level .user-type-wrapper .status-indicator {
- margin-right: 5px
-}
-
-.sidebar .sidebar_footer .admin-access-level .arrow {
- color: #525c5d;
- margin-left: auto;
- font-size: 20px;
- line-height: 1;
- -webkit-transition: .3s;
- transition: .3s
-}
-
-.sidebar .sidebar_footer .user-account {
- display: block;
- width: 100%;
- border-radius: 0;
- border: none;
- margin-bottom: -100vh;
- opacity: 0;
- -webkit-transition: .3s;
- transition: .3s;
- border-right: 1px solid #f2f4f9;
- box-shadow: -7px -2px 25px -5px rgba(0, 0, 0, .12)
-}
-
-.sidebar .sidebar_footer .user-account:before {
- display: none
-}
-
-.sidebar .sidebar_footer .user-account .user-profile-item-tittle {
- background: 0 0;
- padding: 20px 18px 10px 18px;
- z-index: 1;
- color: #adb5bd;
- font-family: Roboto, sans-serif;
- font-weight: 500
-}
-
-.sidebar .sidebar_footer .user-account .user-profile-itemcategory {
- background: 0 0;
- margin-bottom: 10px;
- border-bottom: 1px solid #f2f4f9;
- padding-bottom: 10px;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- letter-spacing: .03rem
-}
-
-.sidebar .sidebar_footer .user-account .user-profile-item {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- background: inherit;
- padding: 10px 18px;
- -webkit-transition: .3s;
- transition: .3s;
- z-index: 1;
- background: 0 0;
- color: #525c5d;
- font-size: 13px;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- letter-spacing: .03rem
-}
-
-.sidebar .sidebar_footer .user-account .user-profile-item:hover {
- background: #f5f5f5
-}
-
-.sidebar .sidebar_footer .user-account .user-profile-item i {
- margin-right: 10px;
- font-size: 18px;
- line-height: 1;
- color: inherit
-}
-
-.sidebar .sidebar_footer .user-account .user-profile-item img {
- margin-right: 10px
-}
-
-.sidebar .sidebar_footer .user-account .btn-logout {
- width: 91%;
- max-width: 91%;
- margin: 15px 10px 30px 10px;
- border-radius: 4px
-}
-
-.sidebar .sidebar_footer.opened {
- background: #fff
-}
-
-.sidebar .sidebar_footer.opened .admin-access-level {
- background: #fff
-}
-
-.sidebar .sidebar_footer.opened .admin-access-level .arrow {
- -webkit-transform: rotate(-90deg);
- transform: rotate(-90deg)
-}
-
-.sidebar .sidebar_footer.opened .user-account {
- margin-bottom: 60px;
- opacity: 1;
- background: #fff
-}
-
-footer {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
- padding: 2rem 2.5rem;
- max-width: 1140px;
- margin-left: auto;
- margin-right: auto
-}
-
-@media (max-width:991.98px) {
- footer {
- padding: 20px 0 30px 0
- }
-
-}
-
-footer ul {
- margin-left: 0;
- padding-left: 0
-}
-
-footer ul li {
- display: inline-block;
- padding: 0 10px 0 0;
- line-height: 1
-}
-
-footer ul li:not(:last-child) {
- margin-right: 10px;
- border-right: 1px solid #f2f4f9
-}
-
-footer ul li a {
- font-family: Roboto, sans-serif;
- font-weight: 400;
- letter-spacing: .03rem;
- color: #565656
-}
-
-pre.cake-error {
- z-index: 220;
- position: absolute;
- background-color: #fff
-}
-
-.alert-notification-wrapper {
- position: fixed;
- left: 17rem;
- right: 0;
- z-index: 999
-}
-
-@media (max-width:991.98px) {
- .alert-notification-wrapper {
- left: 0
- }
-
-}
-
-.alert-notification-wrapper.top {
- top: 70px
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter {
- border: 2px solid #55acee;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter i {
- color: #55acee
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link {
- background: 0 0;
- color: #55acee
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-twitter.btn-link:hover {
- color: #2795e9
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook {
- border: 2px solid #0084ff;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook i {
- color: #0084ff
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link {
- background: 0 0;
- color: #0084ff
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-facebook.btn-link:hover {
- color: #006acc
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-google {
- border: 2px solid #dd4b39;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-google i {
- color: #dd4b39
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link {
- background: 0 0;
- color: #dd4b39
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-google.btn-link:hover {
- color: #c23321
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin {
- border: 2px solid #0077b5;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin i {
- color: #0077b5
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link {
- background: 0 0;
- color: #0077b5
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-linkedin.btn-link:hover {
- color: #005582
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest {
- border: 2px solid #bd081c;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest i {
- color: #bd081c
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link {
- background: 0 0;
- color: #bd081c
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-pinterest.btn-link:hover {
- color: #8c0615
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube {
- border: 2px solid #cd201f;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube i {
- color: #cd201f
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link {
- background: 0 0;
- color: #cd201f
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-youtube.btn-link:hover {
- color: #a11918
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-github {
- border: 2px solid #333;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-github i {
- color: #333
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link {
- background: 0 0;
- color: #333
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-github.btn-link:hover {
- color: #1a1a1a
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-behance {
- border: 2px solid #0454f6;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-behance i {
- color: #0454f6
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link {
- background: 0 0;
- color: #0454f6
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-behance.btn-link:hover {
- color: #0343c4
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble {
- border: 2px solid #ea4c89;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble i {
- color: #ea4c89
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link {
- background: 0 0;
- color: #ea4c89
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-dribbble.btn-link:hover {
- color: #e51e6b
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit {
- border: 2px solid #ed4333;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit i {
- color: #ed4333
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link {
- background: 0 0;
- color: #ed4333
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-reddit.btn-link:hover {
- color: #da2413
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram {
- border: 2px solid #ff759b;
- color: #101010
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram i {
- color: #ff759b
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link {
- background: 0 0;
- color: #ff759b
-}
-
-.btn:not(.social-icon-btn).social-btn-outlined.btn-instagram.btn-link:hover {
- color: #ff4276
-}
-
-.btn-inverse-primary {
- background: rgba(4, 112, 6, .15);
- color: #047006
-}
-
-.btn-inverse-primary i {
- color: inherit
-}
-
-.btn-inverse-primary:hover {
- background: rgba(4, 112, 6, .8);
- color: #fff
-}
-
-.btn-inverse-secondary {
- background: rgba(128, 128, 128, .15);
- color: grey
-}
-
-.btn-inverse-secondary i {
- color: inherit
-}
-
-.btn-inverse-secondary:hover {
- background: rgba(128, 128, 128, .8);
- color: #fff
-}
-
-.btn-inverse-success {
- background: rgba(0, 224, 147, .15);
- color: #047006
-}
-
-.btn-inverse-success i {
- color: inherit
-}
-
-.btn-inverse-success:hover {
- background: rgba(0, 224, 147, .8);
- color: #fff
-}
-
-.btn-inverse-info {
- background: rgba(108, 97, 246, .15);
- color: #6c61f6
-}
-
-.btn-inverse-info i {
- color: inherit
-}
-
-.btn-inverse-info:hover {
- background: rgba(108, 97, 246, .8);
- color: #fff
-}
-
-.btn-inverse-warning {
- background: rgba(240, 130, 95, .15);
- color: #f0825f
-}
-
-.btn-inverse-warning i {
- color: inherit
-}
-
-.btn-inverse-warning:hover {
- background: rgba(240, 130, 95, .8);
- color: #fff
-}
-
-.btn-inverse-danger {
- background: rgba(255, 95, 102, .15);
- color: #ff5f66
-}
-
-.btn-inverse-danger i {
- color: inherit
-}
-
-.btn-inverse-danger:hover {
- background: rgba(255, 95, 102, .8);
- color: #fff
-}
-
-.btn-inverse-light {
- background: rgba(223, 223, 223, .15);
- color: #dfdfdf
-}
-
-.btn-inverse-light i {
- color: inherit
-}
-
-.btn-inverse-light:hover {
- background: rgba(223, 223, 223, .8);
- color: #fff
-}
-
-.btn-inverse-dark {
- background: rgba(116, 118, 123, .15);
- color: #74767b
-}
-
-.btn-inverse-dark i {
- color: inherit
-}
-
-.btn-inverse-dark:hover {
- background: rgba(116, 118, 123, .8);
- color: #fff
-}
-
-.btn-inverse-white {
- background: rgba(255, 255, 255, .15);
- color: #fff
-}
-
-.btn-inverse-white i {
- color: inherit
-}
-
-.btn-inverse-white:hover {
- background: rgba(255, 255, 255, .8);
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-twitter {
- background: #55acee;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-twitter:hover {
- background: #2795e9
-}
-
-.btn:not(.social-btn-outlined).btn-twitter.btn-link {
- background: 0 0;
- color: #55acee
-}
-
-.btn:not(.social-btn-outlined).btn-twitter.btn-link:hover {
- color: #2795e9
-}
-
-.btn:not(.social-btn-outlined).btn-facebook {
- background: #0084ff;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-facebook:hover {
- background: #006acc
-}
-
-.btn:not(.social-btn-outlined).btn-facebook.btn-link {
- background: 0 0;
- color: #0084ff
-}
-
-.btn:not(.social-btn-outlined).btn-facebook.btn-link:hover {
- color: #006acc
-}
-
-.btn:not(.social-btn-outlined).btn-google {
- background: #dd4b39;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-google:hover {
- background: #c23321
-}
-
-.btn:not(.social-btn-outlined).btn-google.btn-link {
- background: 0 0;
- color: #dd4b39
-}
-
-.btn:not(.social-btn-outlined).btn-google.btn-link:hover {
- color: #c23321
-}
-
-.btn:not(.social-btn-outlined).btn-linkedin {
- background: #0077b5;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-linkedin:hover {
- background: #005582
-}
-
-.btn:not(.social-btn-outlined).btn-linkedin.btn-link {
- background: 0 0;
- color: #0077b5
-}
-
-.btn:not(.social-btn-outlined).btn-linkedin.btn-link:hover {
- color: #005582
-}
-
-.btn:not(.social-btn-outlined).btn-pinterest {
- background: #bd081c;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-pinterest:hover {
- background: #8c0615
-}
-
-.btn:not(.social-btn-outlined).btn-pinterest.btn-link {
- background: 0 0;
- color: #bd081c
-}
-
-.btn:not(.social-btn-outlined).btn-pinterest.btn-link:hover {
- color: #8c0615
-}
-
-.btn:not(.social-btn-outlined).btn-youtube {
- background: #cd201f;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-youtube:hover {
- background: #a11918
-}
-
-.btn:not(.social-btn-outlined).btn-youtube.btn-link {
- background: 0 0;
- color: #cd201f
-}
-
-.btn:not(.social-btn-outlined).btn-youtube.btn-link:hover {
- color: #a11918
-}
-
-.btn:not(.social-btn-outlined).btn-github {
- background: #333;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-github:hover {
- background: #1a1a1a
-}
-
-.btn:not(.social-btn-outlined).btn-github.btn-link {
- background: 0 0;
- color: #333
-}
-
-.btn:not(.social-btn-outlined).btn-github.btn-link:hover {
- color: #1a1a1a
-}
-
-.btn:not(.social-btn-outlined).btn-behance {
- background: #0454f6;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-behance:hover {
- background: #0343c4
-}
-
-.btn:not(.social-btn-outlined).btn-behance.btn-link {
- background: 0 0;
- color: #0454f6
-}
-
-.btn:not(.social-btn-outlined).btn-behance.btn-link:hover {
- color: #0343c4
-}
-
-.btn:not(.social-btn-outlined).btn-dribbble {
- background: #ea4c89;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-dribbble:hover {
- background: #e51e6b
-}
-
-.btn:not(.social-btn-outlined).btn-dribbble.btn-link {
- background: 0 0;
- color: #ea4c89
-}
-
-.btn:not(.social-btn-outlined).btn-dribbble.btn-link:hover {
- color: #e51e6b
-}
-
-.btn:not(.social-btn-outlined).btn-reddit {
- background: #ed4333;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-reddit:hover {
- background: #da2413
-}
-
-.btn:not(.social-btn-outlined).btn-reddit.btn-link {
- background: 0 0;
- color: #ed4333
-}
-
-.btn:not(.social-btn-outlined).btn-reddit.btn-link:hover {
- color: #da2413
-}
-
-.btn:not(.social-btn-outlined).btn-instagram {
- background: #ff759b;
- border: none;
- color: #fff
-}
-
-.btn:not(.social-btn-outlined).btn-instagram:hover {
- background: #ff4276
-}
-
-.btn:not(.social-btn-outlined).btn-instagram.btn-link {
- background: 0 0;
- color: #ff759b
-}
-
-.btn:not(.social-btn-outlined).btn-instagram.btn-link:hover {
- color: #ff4276
-}
-
-.btn-group label.btn.btn-primary:not(:disabled):not(.disabled).active {
- background: #000e01
-}
-
-.btn-group label.btn.btn-secondary:not(:disabled):not(.disabled).active {
- background: #4d4d4d
-}
-
-.btn-group label.btn.btn-success:not(:disabled):not(.disabled).active {
- background: #007a50
-}
-
-.btn-group label.btn.btn-info:not(:disabled):not(.disabled).active {
- background: #1d0de4
-}
-
-.btn-group label.btn.btn-warning:not(:disabled):not(.disabled).active {
- background: #d54314
-}
-
-.btn-group label.btn.btn-danger:not(:disabled):not(.disabled).active {
- background: #f8000b
-}
-
-.btn-group label.btn.btn-light:not(:disabled):not(.disabled).active {
- background: #acacac
-}
-
-.btn-group label.btn.btn-dark:not(:disabled):not(.disabled).active {
- background: #424447
-}
-
-.btn-group label.btn.btn-white:not(:disabled):not(.disabled).active {
- background: #ccc
-}
-
-.btn-outline-primary {
- border: 2px solid #047006
-}
-
-.btn-outline-secondary {
- border: 2px solid grey
-}
-
-.btn-outline-success {
- border: 2px solid #047006
-}
-
-.btn-outline-info {
- border: 2px solid #6c61f6
-}
-
-.btn-outline-warning {
- border: 2px solid #f0825f
-}
-
-.btn-outline-danger {
- border: 2px solid #ff5f66
-}
-
-.btn-outline-light {
- border: 2px solid #dfdfdf
-}
-
-.btn-outline-dark {
- border: 2px solid #74767b
-}
-
-.btn-outline-white {
- border: 2px solid #fff
-}
-
-.btn-group label.btn input {
- display: none
-}
-
-.btn {
- display: -webkit-inline-box;
- display: inline-flex;
- -webkit-box-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- align-items: center;
- -webkit-transition: .3s ease;
- transition: .3s ease;
- -webkit-transition-property: background, color;
- transition-property: background, color;
- font-size: .875rem;
- font-family: Roboto, sans-serif;
- font-weight: 600;
- letter-spacing: .03rem
-}
-
-.btn:not([class*=btn-inverse]):not(.component-flat) {
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2)
-}
-
-.btn i {
- font-size: 1.25rem
-}
-
-.btn-group-lg>.btn,
-.btn.btn-lg {
- height: 55px;
- max-height: 55px;
- padding: 15px 30px;
- font-size: 1.125rem
-}
-
-.btn-group-sm>.btn,
-.btn.btn-sm {
- height: 35px;
- max-height: 35px;
- padding: 4px 15px;
- font-size: .875rem
-}
-
-.btn.btn-xs {
- height: 25px;
- max-height: 25px;
- padding: 0 10px;
- line-height: 1;
- font-size: .75rem
-}
-
-.btn.btn-xs.has-icon i,
-.btn.btn-xs.has-icon span {
- font-size: .8125rem;
- margin-right: 5px
-}
-
-.btn {
- height: 40px;
- max-height: 40px;
- padding: 5px 20px
-}
-
-.btn.active {
- box-shadow: none
-}
-
-.btn.social-icon-btn {
- height: 40px;
- width: 40px
-}
-
-.btn.social-btn i {
- margin-right: 10px
-}
-
-.btn.social-btn-outlined i {
- margin-right: 10px
-}
-
-.btn.has-icon i,
-.btn.has-icon span {
- font-size: 1.25rem;
- margin-right: 10px;
- line-height: 1
-}
-
-.btn.btn-outline-secondary {
- color: #1a1a1a;
- border-color: #676767
-}
-
-.btn.btn-info,
-.btn.btn-warning {
- color: #fff
-}
-
-.btn.btn-light {
- background: #fff;
- color: #000
-}
-
-.btn.dropdown-dotted-list {
- background: #fff
-}
-
-.btn.dropdown-toggle-split {
- padding: 0 8px
-}
-
-.btn.action-btn {
- display: -webkit-inline-box;
- display: inline-flex;
- -webkit-box-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- align-items: center;
- padding: 0;
- height: 40px;
- width: 40px
-}
-
-.btn.action-btn i {
- font-size: 1.25rem;
- width: 26px;
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: center;
- justify-content: center;
- -webkit-box-align: center;
- align-items: center;
- line-height: 23px;
- vertical-align: middle;
- font-size: 1.25rem
-}
-
-.btn.action-btn i:before {
- width: inherit;
- height: inherit;
- line-height: inherit;
- font-size: inherit
-}
-
-.btn.action-btn.btn-xs {
- height: 30px;
- width: 30px
-}
-
-.btn-group-sm>.btn.action-btn,
-.btn.action-btn.btn-sm {
- height: 35px;
- width: 35px
-}
-
-.btn-group-lg>.btn.action-btn,
-.btn.action-btn.btn-lg {
- height: 50px;
- width: 50px
-}
-
-.btn-group-lg>.btn.action-btn i,
-.btn.action-btn.btn-lg i {
- font-size: 1.875rem;
- line-height: 24px
-}
-
-.btn.action-btn.btn-refresh.clicked i {
- color: #047006;
- -webkit-animation: rotate360 .8s linear infinite;
- animation: rotate360 .8s linear infinite
-}
-
-.btn.action-btn.btn-like.clicked i {
- color: #ff5f66;
- -webkit-animation: bounceIn .8s linear 1;
- animation: bounceIn .8s linear 1
-}
-
-.btn.action-btn.btn-like.clicked:hover i {
- color: #fff
-}
-
-.btn.btn-rounded {
- border-radius: 50px
-}
-
-.flag-germany {
- width: 40px;
- height: 28px;
- background: red;
- border-top: 9px solid #000;
- border-bottom: 9px solid #fc0;
- display: block
-}
-
-.flag-england {
- background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJmbGFnLWljb24tY3NzLWdiIiB2aWV3Qm94PSIwIDAgNjQwIDQ4MCI+CiAgPHBhdGggZmlsbD0iIzAxMjE2OSIgZD0iTTAgMGg2NDB2NDgwSDB6Ii8+CiAgPHBhdGggZmlsbD0iI0ZGRiIgZD0iTTc1IDBsMjQ0IDE4MUw1NjIgMGg3OHY2Mkw0MDAgMjQxbDI0MCAxNzh2NjFoLTgwTDMyMCAzMDEgODEgNDgwSDB2LTYwbDIzOS0xNzhMMCA2NFYwaDc1eiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik00MjQgMjgxbDIxNiAxNTl2NDBMMzY5IDI4MWg1NXptLTE4NCAyMGw2IDM1TDU0IDQ4MEgwbDI0MC0xNzl6TTY0MCAwdjNMMzkxIDE5MWwyLTQ0TDU5MCAwaDUwek0wIDBsMjM5IDE3NmgtNjBMMCA0MlYweiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yNDEgMHY0ODBoMTYwVjBIMjQxek0wIDE2MHYxNjBoNjQwVjE2MEgweiIvPgogIDxwYXRoIGZpbGw9IiNDODEwMkUiIGQ9Ik0wIDE5M3Y5Nmg2NDB2LTk2SDB6TTI3MyAwdjQ4MGg5NlYwaC05NnoiLz4KPC9zdmc+Cg==);
- background-size: cover;
- width: 40px;
- height: 28px;
- display: block
-}
-
-.language-active {
- background-color: #f9fafb;
- padding: 2px
-}
-
-.language-inactive {
- padding: 2px;
- background-color: transparent
-}
-
-.is-invalid .form-control {
- background-color: rgba(240, 130, 95, .2);
- border: none
-}
-
-.is-invalid .invalid-feedback {
- display: block
-}
-
-.is-valid .form-control {
- background-color: rgba(4, 112, 6, .2);
- border: none
-}
-
-.form-control {
- padding-left: 20px;
- padding-right: 20px;
- color: rgba(16, 16, 16, .8)
-}
-
-.form-control.placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control:-moz-placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control::-moz-placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control:-ms-input-placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control::-webkit-input-placeholder {
- font-weight: inherit;
- color: inherit;
- font-size: inherit
-}
-
-.form-control.is-invalid {
- background-color: rgba(240, 130, 95, .2);
- border: none
-}
-
-.form-control.is-valid {
- background-color: rgba(4, 112, 6, .2);
- border: none
-}
-
-.input-group-text {
- background-color: #f6f7f9;
- color: #101010;
- border-color: #f2f4f9;
- padding: 0 10px;
- font-size: 17px
-}
-
-.is-valid .input-group-text {
- background-color: rgba(4, 112, 6, .2);
- color: #047006
-}
-
-.is-invalid .input-group-text {
- background-color: rgba(240, 130, 95, .2);
- color: #f0825f
-}
-
-.form-group {
- margin-bottom: 20px
-}
-
-.form-group.input-rounded .form-control {
- border-radius: 25px
-}
-
-.custom-file .custom-file-label {
- padding: 8px .75rem;
- height: 41px
-}
-
-.custom-file .custom-file-label:after {
- padding: 1.45rem .8rem;
- line-height: 0
-}
-
-.custom-select,
-.custom-select[multiple] {
- background: #f6f7f9;
- border-color: #f0f2f5;
- color: rgba(16, 16, 16, .8)
-}
-
-.custom-select option,
-.custom-select[multiple] option {
- background: #f6f7f9;
- color: rgba(16, 16, 16, .8);
- display: block;
- border-bottom: 1px solid #f2f4f9;
- padding: 5px 10px
-}
-
-.custom-select option:checked,
-.custom-select[multiple] option:checked {
- background: #f6f7f9
-}
-
-.custom-select option[selected],
-.custom-select[multiple] option[selected] {
- background: #f6f7f9;
- display: block
-}
-
-.custom-select[multiple] {
- padding: 0;
- border-radius: 2px
-}
-
-.custom-control-input:focus~.custom-control-label::before {
- box-shadow: none
-}
-
-.custom-switch .custom-control-label::after {
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2);
- background: #047006
-}
-
-.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link {
- color: #047006
-}
-
-.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-primary .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-primary .nav-tabs .nav-item .nav-link.active {
- background: #047006;
- color: #fff
-}
-
-.tab-container.tab-bg-primary .tab-content {
- background: #047006;
- color: #fff
-}
-
-.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link {
- color: grey
-}
-
-.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-secondary .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-secondary .nav-tabs .nav-item .nav-link.active {
- background: grey;
- color: #fff
-}
-
-.tab-container.tab-bg-secondary .tab-content {
- background: grey;
- color: #fff
-}
-
-.tab-container.tab-bg-success .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link {
- color: #047006
-}
-
-.tab-container.tab-bg-success .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-success .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-success .nav-tabs .nav-item .nav-link.active {
- background: #047006;
- color: #fff
-}
-
-.tab-container.tab-bg-success .tab-content {
- background: #047006;
- color: #fff
-}
-
-.tab-container.tab-bg-info .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link {
- color: #6c61f6
-}
-
-.tab-container.tab-bg-info .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-info .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-info .nav-tabs .nav-item .nav-link.active {
- background: #6c61f6;
- color: #fff
-}
-
-.tab-container.tab-bg-info .tab-content {
- background: #6c61f6;
- color: #fff
-}
-
-.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link {
- color: #f0825f
-}
-
-.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-warning .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-warning .nav-tabs .nav-item .nav-link.active {
- background: #f0825f;
- color: #fff
-}
-
-.tab-container.tab-bg-warning .tab-content {
- background: #f0825f;
- color: #fff
-}
-
-.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link {
- color: #ff5f66
-}
-
-.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-danger .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-danger .nav-tabs .nav-item .nav-link.active {
- background: #ff5f66;
- color: #fff
-}
-
-.tab-container.tab-bg-danger .tab-content {
- background: #ff5f66;
- color: #fff
-}
-
-.tab-container.tab-bg-light .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link {
- color: #dfdfdf
-}
-
-.tab-container.tab-bg-light .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-light .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-light .nav-tabs .nav-item .nav-link.active {
- background: #dfdfdf;
- color: #fff
-}
-
-.tab-container.tab-bg-light .tab-content {
- background: #dfdfdf;
- color: #fff
-}
-
-.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link {
- color: #74767b
-}
-
-.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-dark .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-dark .nav-tabs .nav-item .nav-link.active {
- background: #74767b;
- color: #fff
-}
-
-.tab-container.tab-bg-dark .tab-content {
- background: #74767b;
- color: #fff
-}
-
-.tab-container.tab-bg-white .nav-pills .nav-item .nav-link,
-.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link {
- color: #fff
-}
-
-.tab-container.tab-bg-white .nav-pills .nav-item .nav-link i,
-.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link i {
- color: inherit
-}
-
-.tab-container.tab-bg-white .nav-pills .nav-item .nav-link.active,
-.tab-container.tab-bg-white .nav-tabs .nav-item .nav-link.active {
- background: #fff;
- color: #fff
-}
-
-.tab-container.tab-bg-white .tab-content {
- background: #fff;
- color: #fff
-}
-
-.nav-tabs {
- border-bottom: 1px solid #f2f4f9
-}
-
-.tab-container .nav-pills,
-.tab-container .nav-tabs {
- border-bottom: none
-}
-
-.tab-container .nav-pills .nav-item .nav-link,
-.tab-container .nav-tabs .nav-item .nav-link {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: start;
- justify-content: start;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- letter-spacing: 1;
- padding: 7px 13px;
- border: none;
- -webkit-transition-duration: .3s;
- transition-duration: .3s;
- -webkit-transition-property: background, color;
- transition-property: background, color
-}
-
-.tab-container .nav-pills .nav-item .nav-link i,
-.tab-container .nav-tabs .nav-item .nav-link i {
- font-size: 20px;
- line-height: 1
-}
-
-.tab-container .nav-pills .nav-item .nav-link .tab-tittle,
-.tab-container .nav-tabs .nav-item .nav-link .tab-tittle {
- display: inline-block
-}
-
-.tab-container .nav-pills .nav-item .nav-link .tab-tittle.prepend,
-.tab-container .nav-tabs .nav-item .nav-link .tab-tittle.prepend {
- margin-left: 10px
-}
-
-.tab-container .nav-pills .nav-item .nav-link .tab-tittle.append,
-.tab-container .nav-tabs .nav-item .nav-link .tab-tittle.append {
- margin-right: 10px
-}
-
-.tab-container .tab-content {
- padding: 30px 20px 20px 20px;
- width: 100%;
- background: #f0f2f5
-}
-
-.tab-container .nav-tabs .nav-link {
- color: #101010
-}
-
-.tab-container .nav-tabs .nav-link i {
- color: #101010
-}
-
-.tab-container .nav-tabs .nav-link.active {
- background: #f7f7f7;
- color: #047006
-}
-
-.tab-container .nav-tabs .nav-link.active i {
- color: inherit
-}
-
-.tab-container .nav-pills {
- margin: 10px
-}
-
-.tab-container .nav-pills .nav-link.active {
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2);
- color: #fff
-}
-
-.tab-container.vertical-tabs {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row;
- -webkit-box-flex: 1;
- flex-grow: 1
-}
-
-.tab-container.vertical-tabs .nav-pills,
-.tab-container.vertical-tabs .nav-tabs {
- float: left;
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- flex-direction: column
-}
-
-.table,
-table {
- margin-bottom: 0
-}
-
-.table tfoot tr th,
-.table thead tr th,
-table tfoot tr th,
-table thead tr th {
- border-bottom-width: 1px;
- font-family: Roboto, sans-serif;
- font-weight: 500
-}
-
-.table tbody tr,
-table tbody tr {
- -webkit-transition-duration: .5s;
- transition-duration: .5s
-}
-
-.table tbody tr td,
-table tbody tr td {
- font-family: Roboto, sans-serif;
- font-weight: 400;
- vertical-align: middle
-}
-
-.table tbody tr td .input-frame:after,
-table tbody tr td .input-frame:after {
- top: 5px
-}
-
-.table tbody tr td span,
-table tbody tr td span {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center
-}
-
-.table tbody tr td span .status-indicator,
-table tbody tr td span .status-indicator {
- margin-right: 5px
-}
-
-.table tbody tr td .image,
-table tbody tr td .image {
- max-width: 75px;
- width: 100%
-}
-
-.table tbody tr.text-align-edge td:first-child,
-table tbody tr.text-align-edge td:first-child {
- padding-left: 0;
- text-align: left
-}
-
-.table tbody tr.text-align-edge td:last-child,
-table tbody tr.text-align-edge td:last-child {
- padding-right: 0;
- text-align: right
-}
-
-.table td,
-.table th,
-table td,
-table th {
- white-space: nowrap
-}
-
-.table:not(.table-dark) thead tr.solid-header th,
-table:not(.table-dark) thead tr.solid-header th {
- background: #fafafa;
- border-top: 1px solid #f2f4f9
-}
-
-.table:not(.table-dark) tfoot,
-.table:not(.table-dark) thead,
-table:not(.table-dark) tfoot,
-table:not(.table-dark) thead {
- background: #e1e4e6
-}
-
-.table:not(.table-dark) tfoot tr th,
-.table:not(.table-dark) thead tr th,
-table:not(.table-dark) tfoot tr th,
-table:not(.table-dark) thead tr th {
- background: #fff;
- color: #101010
-}
-
-.table:not(.table-dark) tbody tr[class*=bg],
-table:not(.table-dark) tbody tr[class*=bg] {
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2)
-}
-
-.table:not(.table-dark) tbody tr[class*=bg] td,
-table:not(.table-dark) tbody tr[class*=bg] td {
- color: #fff;
- border: none
-}
-
-.table:not(.table-dark) tbody tr td,
-table:not(.table-dark) tbody tr td {
- color: #101010
-}
-
-.table:not(.table-bordered) tfoot tr th,
-.table:not(.table-bordered) thead tr th,
-table:not(.table-bordered) tfoot tr th,
-table:not(.table-bordered) thead tr th {
- border-top: none
-}
-
-.table.info-table tr td,
-.table.info-table tr th,
-table.info-table tr td,
-table.info-table tr th {
- text-align: right
-}
-
-.table.info-table tr td:first-child,
-.table.info-table tr th:first-child,
-table.info-table tr td:first-child,
-table.info-table tr th:first-child {
- text-align: left
-}
-
-.table.info-table tr td.actions,
-.table.info-table tr th.actions,
-table.info-table tr td.actions,
-table.info-table tr th.actions {
- padding-left: 0
-}
-
-.tippy-tooltip[data-animation=fade][data-state=hidden] {
- opacity: 0
-}
-
-.tippy-iOS {
- cursor: pointer !important;
- -webkit-tap-highlight-color: transparent
-}
-
-.tippy-popper {
- pointer-events: none;
- max-width: calc(100vw - 10px);
- -webkit-transition-timing-function: cubic-bezier(.165, .84, .44, 1);
- transition-timing-function: cubic-bezier(.165, .84, .44, 1);
- -webkit-transition-property: -webkit-transform;
- transition-property: -webkit-transform;
- transition-property: transform;
- transition-property: transform, -webkit-transform
-}
-
-.tippy-tooltip {
- position: relative;
- color: #fff;
- border-radius: 4px;
- font-size: 14px;
- line-height: 1.4;
- background-color: #333;
- -webkit-transition-property: visibility, opacity, -webkit-transform;
- transition-property: visibility, opacity, -webkit-transform;
- transition-property: visibility, opacity, transform;
- transition-property: visibility, opacity, transform, -webkit-transform;
- outline: 0
-}
-
-.tippy-tooltip[data-placement^=top]>.tippy-arrow {
- border-width: 8px 8px 0;
- border-top-color: #333;
- margin: 0 3px;
- -webkit-transform-origin: 50% 0;
- transform-origin: 50% 0;
- bottom: -7px
-}
-
-.tippy-tooltip[data-placement^=bottom]>.tippy-arrow {
- border-width: 0 8px 8px;
- border-bottom-color: #333;
- margin: 0 3px;
- -webkit-transform-origin: 50% 7px;
- transform-origin: 50% 7px;
- top: -7px
-}
-
-.tippy-tooltip[data-placement^=left]>.tippy-arrow {
- border-width: 8px 0 8px 8px;
- border-left-color: #333;
- margin: 3px 0;
- -webkit-transform-origin: 0 50%;
- transform-origin: 0 50%;
- right: -7px
-}
-
-.tippy-tooltip[data-placement^=right]>.tippy-arrow {
- border-width: 8px 8px 8px 0;
- border-right-color: #333;
- margin: 3px 0;
- -webkit-transform-origin: 7px 50%;
- transform-origin: 7px 50%;
- left: -7px
-}
-
-.tippy-tooltip[data-interactive][data-state=visible] {
- pointer-events: auto
-}
-
-.tippy-tooltip[data-inertia][data-state=visible] {
- -webkit-transition-timing-function: cubic-bezier(.54, 1.5, .38, 1.11);
- transition-timing-function: cubic-bezier(.54, 1.5, .38, 1.11)
-}
-
-.tippy-arrow {
- position: absolute;
- border-color: transparent;
- border-style: solid
-}
-
-.tippy-content {
- padding: 5px 9px
-}
-
-.tippy-tooltip {
- color: #101010;
- background-color: #f9fafb;
- border-radius: 0;
- font-size: 12px
-}
-
-.tippy-tooltip .tippy-content b {
- color: #047006
-}
-
-.tippy-tooltip .tippy-content ul {
- list-style-type: none;
- padding-left: 4px
-}
-
-.tippy-tooltip .tippy-content .mdi {
- font-size: 16px
-}
-
-.tippy-tooltip .tippy-content .grid-header {
- padding: 5px 10px;
- margin-bottom: 5px
-}
-
-.page-body {
- background: #fff
-}
-
-.page-content-wrapper {
- background: #f9fafb;
- border-left: 1px solid #f2f4f9
-}
-
-@media (min-width:992px) {
- .t-header .t-header-content-wrapper {
- border-left: 1px solid #f2f4f9
- }
-
-}
-
-@media (min-width:768px) {
- .page-body {
- position: relative;
- display: grid;
- max-width: 100%;
- grid-template-columns: 17rem calc(100vw - 17rem);
- -webkit-transition: .3s;
- transition: .3s
- }
-
- .page-body .page-content-wrapper {
- position: relative;
- width: 100%;
- min-height: 100vh;
- padding: 1.5rem 2.5rem calc(90px + 1.5rem);
- margin-top: 70px
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner {
- max-width: 1140px;
- margin-left: auto;
- margin-right: auto
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header {
- position: -webkit-sticky;
- position: sticky;
- top: 70px;
- background: #f9fafb;
- z-index: 99
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb {
- padding: 1rem 1rem 1rem 21px;
- margin-left: -20px;
- margin-right: -20px;
- background: #f9fafb
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item {
- color: #565656;
- letter-spacing: .03rem;
- font-family: Roboto, sans-serif;
- font-weight: 500
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item a {
- color: inherit
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .breadcrumb .breadcrumb-item.active {
- color: #047006
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-title-heading {
- color: #565656;
- font-size: 1.5rem;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- margin-bottom: 0
- }
-
- .page-body .page-content-wrapper .page-content-wrapper-inner .viewport-header .page-description {
- opacity: .7;
- margin-top: 15px
- }
-
- body.sidebar-minimized .t-header .t-header-brand-wrapper {
- background: #f9fafb
- }
-
- body.sidebar-minimized .t-header .t-header-content-wrapper {
- border-left: #f9fafb
- }
-
- body.sidebar-minimized .page-body {
- grid-template-columns: 0 100%
- }
-
- body.sidebar-minimized .page-body .sidebar .sidebar_footer {
- left: -17rem
- }
-
- body.sidebar-minimized .page-body .sidebar .nav-category-divider {
- position: initial
- }
-
-}
-
-@media (max-width:991.98px) {
- .t-header {
- width: 100vw
- }
-
- .t-header .t-header-brand-wrapper {
- background: #f9fafb;
- width: 4rem;
- min-width: 4rem;
- max-width: 4rem
- }
-
- .t-header .t-header-brand-wrapper a .logo {
- -webkit-animation-name: menuItemFadeIn;
- animation-name: menuItemFadeIn;
- -webkit-animation-duration: .25s;
- animation-duration: .25s;
- -webkit-animation-fill-mode: both;
- animation-fill-mode: both;
- display: none
- }
-
- @-webkit-keyframes menuItemFadeIn {
- from {
- -webkit-transform: translate3d(-20px, 0, 0);
- transform: translate3d(-20px, 0, 0);
- display: none;
- opacity: 0
- }
-
- to {
- display: block;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- opacity: 1
- }
-
- }
-
- @keyframes menuItemFadeIn {
- from {
- -webkit-transform: translate3d(-20px, 0, 0);
- transform: translate3d(-20px, 0, 0);
- display: none;
- opacity: 0
- }
-
- to {
- display: block;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- opacity: 1
- }
-
- }
-
- .t-header .t-header-brand-wrapper a .logo-mini {
- display: block
- }
-
- .page-body {
- display: -webkit-box;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- flex-direction: row;
- overflow: hidden;
- max-width: 100%
- }
-
- .page-body .sidebar {
- position: relative;
- left: 0;
- z-index: 99;
- width: 15rem;
- min-width: 15rem;
- max-width: 15rem;
- margin-left: -15rem;
- -webkit-transition-duration: .2s;
- transition-duration: .2s;
- -webkit-transition-timing-function: ease-in-out;
- transition-timing-function: ease-in-out;
- -webkit-transition-property: margin-left, width;
- transition-property: margin-left, width
- }
-
- .page-body .sidebar .sidebar_footer {
- -webkit-transition-duration: .2s;
- transition-duration: .2s;
- -webkit-transition-timing-function: ease-in-out;
- transition-timing-function: ease-in-out;
- -webkit-transition-property: left;
- transition-property: left;
- left: -15rem
- }
-
- .page-body .page-content-wrapper {
- padding: 20px 20px;
- min-width: 100vw;
- margin-left: 0;
- -webkit-transition-duration: .2s;
- transition-duration: .2s;
- -webkit-transition-timing-function: ease-in-out;
- transition-timing-function: ease-in-out;
- -webkit-transition-property: margin-left;
- transition-property: margin-left
- }
-
- .page-body .page-content-wrapper .viewport-header .breadcrumb {
- background: 0 0;
- padding-left: 0
- }
-
- .page-body .page-content-wrapper footer {
- position: relative
- }
-
- .page-body.sidebar-collpased .sidebar {
- margin-left: 0;
- min-width: 15rem
- }
-
- .page-body.sidebar-collpased .sidebar .sidebar_footer {
- left: 0
- }
-
-}
-
-@media (max-width:767.98px) {
- .page-body .page-content-wrapper {
- padding: 80px 20px 0 20px
- }
-
-}
-
-.profile-img.bg-inverse-primary {
- color: #047006
-}
-
-.profile-img.bg-inverse-secondary {
- color: grey
-}
-
-.profile-img.bg-inverse-success {
- color: #047006
-}
-
-.profile-img.bg-inverse-info {
- color: #6c61f6
-}
-
-.profile-img.bg-inverse-warning {
- color: #f0825f
-}
-
-.profile-img.bg-inverse-danger {
- color: #ff5f66
-}
-
-.profile-img.bg-inverse-light {
- color: #dfdfdf
-}
-
-.profile-img.bg-inverse-dark {
- color: #74767b
-}
-
-.profile-img.bg-inverse-white {
- color: #fff
-}
-
-.notification-indicator-primary {
- background: #047006
-}
-
-.notification-indicator-primary:before {
- content: '3';
- background: rgba(4, 112, 6, .5)
-}
-
-.notification-indicator-secondary {
- background: grey
-}
-
-.notification-indicator-secondary:before {
- content: '.5';
- background: rgba(128, 128, 128, .5)
-}
-
-.notification-indicator-success {
- background: #047006
-}
-
-.notification-indicator-success:before {
- content: 'http://www.w3.org/2000/svg';
- background: rgba(0, 224, 147, .5)
-}
-
-.notification-indicator-info {
- background: #6c61f6
-}
-
-.notification-indicator-info:before {
- content: '0 0 4 5';
- background: rgba(108, 97, 246, .5)
-}
-
-.notification-indicator-warning {
- background: #f0825f
-}
-
-.notification-indicator-warning:before {
- content: '%23343a40';
- background: rgba(240, 130, 95, .5)
-}
-
-.notification-indicator-danger {
- background: #ff5f66
-}
-
-.notification-indicator-danger:before {
- content: 'M2 0L0 2h4zm0 5L0 3h4z';
- background: rgba(255, 95, 102, .5)
-}
-
-.notification-indicator-light {
- background: #dfdfdf
-}
-
-.notification-indicator-light:before {
- content: 'http://www.w3.org/2000/svg';
- background: rgba(223, 223, 223, .5)
-}
-
-.notification-indicator-dark {
- background: #74767b
-}
-
-.notification-indicator-dark:before {
- content: '%23dc3545';
- background: rgba(116, 118, 123, .5)
-}
-
-.notification-indicator-white {
- background: #fff
-}
-
-.notification-indicator-white:before {
- content: '-2 -2 7 7';
- background: rgba(255, 255, 255, .5)
-}
-
-.border-top {
- border-top-style: solid;
- border-top-color: #f2f4f9;
- border-top-width: 1px
-}
-
-.border-right {
- border-right-style: solid;
- border-right-color: #f2f4f9;
- border-right-width: 1px
-}
-
-.border-bottom {
- border-bottom-style: solid;
- border-bottom-color: #f2f4f9;
- border-bottom-width: 1px
-}
-
-.border-left {
- border-left-style: solid;
- border-left-color: #f2f4f9;
- border-left-width: 1px
-}
-
-.ellipsor {
- max-width: 100%;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden
-}
-
-.text-gray {
- color: #565656
-}
-
-.overflow-hidden {
- overflow: hidden
-}
-
-.pos-relative {
- position: relative
-}
-
-.profile-img {
- width: 40px;
- height: 40px;
- overflow: hidden
-}
-
-.profile-img:not(.component-flat) {
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, .2)
-}
-
-.profile-img:not(.img-sm):not(.img-lg):not(.img-xl) img {
- width: 40px;
- height: 40px
-}
-
-.profile-img:not(.img-rounded) {
- border-radius: 6px
-}
-
-.profile-img.no-avatar {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center;
- text-align: center;
- text-transform: uppercase;
- font-family: Roboto, sans-serif;
- font-weight: 600
-}
-
-.profile-img.img-rounded {
- border-radius: 100%
-}
-
-.grouped-images {
- display: -webkit-box;
- display: flex
-}
-
-.grouped-images .plus-text,
-.grouped-images img {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- -webkit-box-pack: center;
- justify-content: center;
- text-align: center;
- border-radius: 100%;
- overflow: hidden;
- margin-right: -10px;
- margin-right: -10px;
- border: 3px solid #fff;
- background: #f0f2f5;
- color: #565656;
- font-family: Roboto, sans-serif;
- font-weight: 700;
- letter-spacing: .03rem
-}
-
-.grouped-images .plus-text:not(.img-sm):not(.img-lg):not(.img-xl),
-.grouped-images img:not(.img-sm):not(.img-lg):not(.img-xl) {
- width: 40px;
- height: 40px
-}
-
-.img-sm {
- width: 30px;
- height: 30px
-}
-
-.img-lg {
- width: 80px;
- height: 80px
-}
-
-.img-xl {
- width: 100px;
- height: 100px
-}
-
-.mdi.mdi-1x:before {
- font-size: 1.25rem
-}
-
-.mdi.mdi-2x:before {
- font-size: 1.5625rem
-}
-
-.mdi.mdi-3x:before {
- font-size: 1.875rem
-}
-
-.mdi.mdi-4x:before {
- font-size: 2.1875rem
-}
-
-.mdi.mdi-5x:before {
- font-size: 2.5rem
-}
-
-.mdi.mdi-6x:before {
- font-size: 3.125rem
-}
-
-.mdi.mdi-7x:before {
- font-size: 3.75rem
-}
-
-.status-indicator {
- display: inline-block;
- width: 12px;
- min-width: 12px;
- height: 12px;
- border-radius: 4px
-}
-
-.status-indicator.rounded-indicator {
- border-radius: 50px
-}
-
-.status-indicator.small {
- width: 7px;
- min-width: 7px;
- height: 7px
-}
-
-.text-black {
- color: #101010
-}
-
-.notification-indicator {
- display: block;
- width: 7px;
- height: 7px;
- border-radius: 100%;
- z-index: 0
-}
-
-.notification-indicator.notification-indicator-ripple:before {
- content: '%23dc3545';
- display: block;
- width: 26px;
- height: 26px;
- z-index: -1;
- position: absolute;
- top: -9px;
- left: -9px;
- border-radius: 100%;
- opacity: 0;
- -webkit-transform-origin: 50% 50%;
- transform-origin: 50% 50%;
- mix-blend-mode: screen;
- -webkit-animation: ripple 1.2s ease-out;
- animation: ripple 1.2s ease-out;
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite
-}
-
-.logo {
- display: block;
- margin: 0 auto;
- width: 280px
-}
-
-.logo img {
- width: 100%
-}
-
-.grid {
- background: #fff;
- border-radius: 6px;
- box-shadow: 0 0 10px 0 rgba(183, 192, 206, .2);
- margin-bottom: 1.5rem;
- border: 1px solid rgba(238, 238, 238, .75)
-}
-
-.grid-header {
- padding: 15px 20px;
- margin-bottom: 15px;
- font-family: Roboto, sans-serif;
- font-weight: 500;
- letter-spacing: .03rem;
- background: #f9fafb;
- border-left: 3px solid #047006;
- border-radius: 0 6px 0 0
-}
-
-.grid-title {
- opacity: .9;
- margin-bottom: 25px
-}
-
-.close {
- color: #101010
-}
-
-.split-header {
- display: -webkit-box;
- display: flex;
- -webkit-box-pack: justify;
- justify-content: space-between;
- -webkit-box-align: center;
- align-items: center
-}
-
-.split-header .content-wrapper {
- display: -webkit-box;
- display: flex
-}
-
-.split-header .content-wrapper a i,
-.split-header .content-wrapper span i {
- font-size: 20px;
- color: #adb5bd;
- -webkit-transition: .3s ease color;
- transition: .3s ease color
-}
-
-.split-header .content-wrapper a i:hover,
-.split-header .content-wrapper span i:hover {
- color: #047006
-}
-
-.split-header .content-wrapper.v-centered {
- -webkit-box-align: center;
- align-items: center
-}
-
-.split-header .content-wrapper.h-centered {
- -webkit-box-pack: center;
- justify-content: center
-}
-
-.grid-body {
- padding: 20px 25px 20px
-}
-
-.card-title {
- font-family: Roboto, sans-serif;
- font-weight: 500;
- color: #313131;
- margin-bottom: 0
-}
-
-.equel-grid {
- display: -webkit-box;
- display: flex;
- -webkit-box-align: stretch;
- align-items: stretch
-}
-
-.equel-grid .grid {
- width: 100%;
- min-width: 100%
-}
-
-.showcase_row_area {
- margin-bottom: 20px
-}
-
-.showcase_row_area .showcase_text_area {
- text-align: right
-}
-
-@media (max-width:767.98px) {
- .showcase_row_area .showcase_text_area {
- text-align: left
- }
-
-}
-
-.showcase_row_area .showcase_content_area {
- margin-bottom: -10px
-}
-
-.showcase_row_area .showcase_content_area .btn {
- margin-right: 5px;
- margin-bottom: 10px
-}
-
-.showcase_row_area:last-child {
- margin-bottom: 0
-}
-
-.content-preview {
- width: 45px;
- height: 45px
-}
-
-.content-preview.rounded {
- border-radius: 100%
-}
-
-.btn:not(.disabled),.cursor_pointer,a {
- cursor: pointer
-}
-
-.grd-positive-currency {
- color: #047006
-}
-
-.grd-negative-currency {
- color: red
-}
-
-.color-success {
- color: var(--success)
-}
-
-.color-danger {
- color: var(--danger)
-}
-
-.color-warning {
- color: var(--warning)
-}
-
-.color-primary {
- color: var(--primary)
-}
-
-.btn-gradido-orange {
- color: #fff;
- background-color: #ffa600;
- border-color: #ffa600
-}
-
-.visible-modal {
- display: block
-}
-
-.margin-top-10 {
- margin-top: 10px
-}
-
-.pull-right {
- float: right
-}
-
-.pull-right-row {
- display: block;
- margin-right: 10px
-}
-
-.display-block {
- display: block
-}
-
-p.grd_small {
- margin-top: 2px;
- margin-bottom: 2px
-}
-
-ul.grd-no-style {
- list-style-type: none
-}
-
-.center-ul-container ul {
- padding-left: 0;
- margin-bottom: 0;
- text-align: center
-}
-
-.center-ul-container ul .grd-error {
- margin-top: 5px;
- color: #8b0000
-}
-
-.grd-alert-color {
- color: #ff5f66 !important
-}
-
-.grd-success-color {
- color: #047006 !important
-}
-
-.grd-orange-color {
- color: #ffa600
-}
-
-.hidden {
- display: none
-}
-
-.alert {
- cursor: pointer
-}
-
-.table.table-auto-break td,
-.table.table-auto-break th {
- white-space: pre-line
-}
diff --git a/community_server/webroot/css/styles.css b/community_server/webroot/css/styles.css
deleted file mode 100644
index 143cbdc08..000000000
--- a/community_server/webroot/css/styles.css
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 30.10.2019, 09:26:42
- Author : einhornimmond
-*/
-.dev-info {
- position: fixed;
- color: grey;
- font-size: smaller;
- left: 8px;
-}
-.grd-time-used {
- bottom: 0;
-}
-.versionstring {
- top: 0;
-}
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 12.07.2019, 07:59:32
- Author : einhornimmond
-*/
-div[role='grd_dialog'] {
- position: fixed;
- width: 100%;
- height: 100%;
- background-color: rgba(0, 0, 0, 0.5);
- top: 0;
- left: 0;
-}
-div.grd_modal-dialog {
- margin-top: 100px;
- min-height: 200px;
- max-width: 1000px;
- margin-left: auto;
- margin-right: auto;
- background-color: white;
- color: black;
- border: 1px solid grey;
-}
-div.grd_modal-dialog.grd_dialog-large {
- margin-top: 5px;
- width: 90%;
-}
-div.grd_modal-body {
- padding: 25px;
-}
-div.grd_modal-header {
- background-color: rgba(0, 0, 0, 0.1);
- padding: 5px;
- padding-left: 15px;
- border: 1px solid grey;
- color: black;
-}
-div.grd_modal-footer {
- background-color: rgba(0, 0, 0, 0.1);
- height: 40px;
-}
-.grd_modal-footer a,
-.grd_modal-footer button {
- float: right;
- padding: 9px;
- margin-right: 10px;
- border: 1px solid grey;
-}
-.grd_modal-footer a:hover,
-.grd_modal-footer button:hover {
- background-color: rgba(255, 255, 255, 0.5);
-}
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 30.10.2019, 14:41:57
- Author : einhornimmond
-*/
-/* Button */
-/*a.grd_bn,a.grd_bn:visited {
- color:black;
- text-decoration: none;
-}
-*/
-.grd-form-bn:hover,
-.grd-active {
- background-color: lightgray;
- border-color: black;
-}
-.grd-form-bn {
- padding: 5px;
- border: 1px solid grey;
- display: table-cell;
- text-align: center;
- vertical-align: middle;
- color: #444;
-}
-a.grd-form-bn,
-a.grd-form-bn:visited {
- color: black;
- text-decoration: none;
-}
-.grd-form-bn-succeed {
- background-color: lightcyan;
- color: green;
- margin-top: 3px;
- margin-bottom: 3px;
-}
-.grd-form-bn-succeed:not([disabled]):hover {
- background-color: lightgreen;
-}
-.grd-form-bn-discard {
- margin-left: 5px;
- border: 1px solid red;
- color: red;
- cursor: pointer;
-}
-/*
-.grd_large-bn {
- width:100vw;
- height:25vh;
- font-size: 8vh;
-}
-
-.grd_bg-bn {
- width:50vw;
- height:25vh;
- font-size: 7vh;
-}
-
-.gr_md-bn {
- width:50vw;
- height:25vh;
- font-size: 6vh;
-}
-*/
-/* form elements */
-.grd_textarea {
- border: 1px solid grey;
- background-color: rgba(0, 0, 0, 0.05);
- padding: 5px;
- font-style: italic;
-}
-.grd-input label {
- display: block;
-}
-input.grd-privkey {
- width: 465px;
-}
-input.grd-pubkey {
- width: 465px;
-}
-input.grd-non-der-keys {
- width: 900px;
-}
-input:not([type='radio']) {
- width: 200px;
-}
-label:not(.grd_radio_label) {
- width: 80px;
- display: inline-block;
-}
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 13.10.2019, 15:43:58
- Author : einhornimmond
-*/
-.grd-time-used {
- position: fixed;
- bottom: 0;
- left: 0;
- color: grey;
- font-size: smaller;
-}
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 30.10.2019, 16:04:16
- Author : einhornimmond
-*/
-/* messages, update flash */
-.grd-error {
- color: red;
- border: 1px solid rgba(255, 0, 0, 0.5);
- padding: 5px;
-}
-.grd-info {
- border: 1px dotted gray;
- padding: 5px;
-}
-.grd-success {
- padding: 5px;
- color: green;
-}
-.flash-messages .message {
- padding: 5px;
-}
-.flash-messages .success {
- color: green;
-}
-.flash-messages .error {
- color: red;
-}
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 30.10.2019, 14:16:16
- Author : einhornimmond
-*/
-/* navbar */
-nav.grd-left-bar {
- position: fixed;
- top: 80.5px;
-}
-nav .grd-nav-bn {
- width: 120px;
-}
-nav ul {
- margin-top: 0;
- padding-left: 0;
-}
-/* buttons */
-.grd-nav-bn:hover,
-.grd-active {
- background-color: lightgray;
- border-color: black;
-}
-.grd-nav-bn {
- padding: 10px;
- border: 1px solid grey;
- display: table-cell;
- text-align: center;
- vertical-align: middle;
- color: grey;
-}
-.grd-nav-without-border {
- border: none;
-}
-.grd-nav-bn-large {
- width: 40vw;
- height: 18vh;
- font-size: 35px;
-}
-a.grd-nav-bn,
-a.grd-nav-bn:visited {
- color: black;
- text-decoration: none;
-}
-.grd-nav-bn-discard {
- color: darkred !important;
-}
-/*
-To change this license header, choose License Headers in Project Properties.
-To change this template file, choose Tools | Templates
-and open the template in the editor.
-*/
-/*
- Created on : 07.07.2019, 16:20:15
- Author : einhornimmond
-*/
-/* content container */
-.grd_container {
- max-width: 820px;
- margin-left: auto;
- margin-right: auto;
-}
-.grd_container_small {
- max-width: 500px;
-}
-.grd_text {
- max-width: 550px;
- margin-bottom: 5px;
-}
-.grd_text-max-width {
- max-width: 550px;
-}
-/* layout helper */
-.grd_margin_5 {
- margin: 5px;
-}
-.grd-margin-top-10 {
- margin-top: 10px;
-}
-.grd-width-200 {
- width: 200px;
-}
-.grd-padding-top-bottom-5 {
- padding-top: 5px;
- padding-bottom: 5px;
-}
-.grd-padding-top-bottom-10 {
- padding-top: 10px;
- padding-bottom: 10px;
-}
-.grd_margin-bottom {
- margin-bottom: 5px;
-}
-.grd_right {
- float: right;
-}
-a.grd_invisible_link {
- color: black;
- text-decoration: none;
-}
-a.grd_invisible_link:hover {
- color: grey;
-}
-.grd_clickable {
- cursor: pointer;
-}
-ul.grd-no-style {
- list-style: none;
-}
-p.grd_small {
- margin-top: 2px;
- margin-bottom: 2px;
-}
-.grd-default-currency {
- color: grey;
-}
-.grd-positive-currency {
- color: green;
-}
-.grd-negative-currency {
- color: red;
-}
-.admin-border {
- border-color: #ffa600;
-}
diff --git a/community_server/webroot/favicon.ico b/community_server/webroot/favicon.ico
deleted file mode 100644
index 5b44f2027..000000000
Binary files a/community_server/webroot/favicon.ico and /dev/null differ
diff --git a/community_server/webroot/favicon.png b/community_server/webroot/favicon.png
deleted file mode 100644
index 5c437973e..000000000
Binary files a/community_server/webroot/favicon.png and /dev/null differ
diff --git a/community_server/webroot/font/cakedingbats-webfont.eot b/community_server/webroot/font/cakedingbats-webfont.eot
deleted file mode 100644
index e8605d926..000000000
Binary files a/community_server/webroot/font/cakedingbats-webfont.eot and /dev/null differ
diff --git a/community_server/webroot/font/cakedingbats-webfont.svg b/community_server/webroot/font/cakedingbats-webfont.svg
deleted file mode 100644
index d1e0c98f7..000000000
--- a/community_server/webroot/font/cakedingbats-webfont.svg
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/community_server/webroot/font/cakedingbats-webfont.ttf b/community_server/webroot/font/cakedingbats-webfont.ttf
deleted file mode 100644
index 13d54454e..000000000
Binary files a/community_server/webroot/font/cakedingbats-webfont.ttf and /dev/null differ
diff --git a/community_server/webroot/font/cakedingbats-webfont.woff b/community_server/webroot/font/cakedingbats-webfont.woff
deleted file mode 100644
index 073baab11..000000000
Binary files a/community_server/webroot/font/cakedingbats-webfont.woff and /dev/null differ
diff --git a/community_server/webroot/font/cakedingbats-webfont.woff2 b/community_server/webroot/font/cakedingbats-webfont.woff2
deleted file mode 100644
index 6e71eaf53..000000000
Binary files a/community_server/webroot/font/cakedingbats-webfont.woff2 and /dev/null differ
diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot
deleted file mode 100644
index 3e035411c..000000000
Binary files a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.eot and /dev/null differ
diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf
deleted file mode 100644
index db76e5796..000000000
Binary files a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff
deleted file mode 100644
index 5f10918f0..000000000
Binary files a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff and /dev/null differ
diff --git a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 b/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2
deleted file mode 100644
index 34df5fe02..000000000
Binary files a/community_server/webroot/fonts/MaterialIconsOutlined/Material-Icons-Outline.woff2 and /dev/null differ
diff --git a/community_server/webroot/fonts/Roboto/Roboto-Black.ttf b/community_server/webroot/fonts/Roboto/Roboto-Black.ttf
deleted file mode 100644
index 689fe5cb3..000000000
Binary files a/community_server/webroot/fonts/Roboto/Roboto-Black.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/Roboto/Roboto-Bold.ttf b/community_server/webroot/fonts/Roboto/Roboto-Bold.ttf
deleted file mode 100644
index d3f01ad24..000000000
Binary files a/community_server/webroot/fonts/Roboto/Roboto-Bold.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/Roboto/Roboto-Light.ttf b/community_server/webroot/fonts/Roboto/Roboto-Light.ttf
deleted file mode 100644
index 219063a57..000000000
Binary files a/community_server/webroot/fonts/Roboto/Roboto-Light.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/Roboto/Roboto-Medium.ttf b/community_server/webroot/fonts/Roboto/Roboto-Medium.ttf
deleted file mode 100644
index 1a7f3b0bb..000000000
Binary files a/community_server/webroot/fonts/Roboto/Roboto-Medium.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/Roboto/Roboto-Regular.ttf b/community_server/webroot/fonts/Roboto/Roboto-Regular.ttf
deleted file mode 100644
index 2c97eeadf..000000000
Binary files a/community_server/webroot/fonts/Roboto/Roboto-Regular.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/Roboto/Roboto-Thin.ttf b/community_server/webroot/fonts/Roboto/Roboto-Thin.ttf
deleted file mode 100644
index b74a4fd1a..000000000
Binary files a/community_server/webroot/fonts/Roboto/Roboto-Thin.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.eot b/community_server/webroot/fonts/materialdesignicons-webfont.eot
deleted file mode 100644
index fe283ac48..000000000
Binary files a/community_server/webroot/fonts/materialdesignicons-webfont.eot and /dev/null differ
diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.svg b/community_server/webroot/fonts/materialdesignicons-webfont.svg
deleted file mode 100644
index b356c2977..000000000
--- a/community_server/webroot/fonts/materialdesignicons-webfont.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.ttf b/community_server/webroot/fonts/materialdesignicons-webfont.ttf
deleted file mode 100644
index 3219fca04..000000000
Binary files a/community_server/webroot/fonts/materialdesignicons-webfont.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.woff b/community_server/webroot/fonts/materialdesignicons-webfont.woff
deleted file mode 100644
index abe1e47ef..000000000
Binary files a/community_server/webroot/fonts/materialdesignicons-webfont.woff and /dev/null differ
diff --git a/community_server/webroot/fonts/materialdesignicons-webfont.woff2 b/community_server/webroot/fonts/materialdesignicons-webfont.woff2
deleted file mode 100644
index 47e8a2c3e..000000000
Binary files a/community_server/webroot/fonts/materialdesignicons-webfont.woff2 and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.eot b/community_server/webroot/fonts/open-sans-v18-latin-300.eot
deleted file mode 100644
index 1c0f100ba..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-300.eot and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.svg b/community_server/webroot/fonts/open-sans-v18-latin-300.svg
deleted file mode 100644
index c0a1c8cd7..000000000
--- a/community_server/webroot/fonts/open-sans-v18-latin-300.svg
+++ /dev/null
@@ -1,332 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.ttf b/community_server/webroot/fonts/open-sans-v18-latin-300.ttf
deleted file mode 100644
index dcce1bb7d..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-300.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.woff b/community_server/webroot/fonts/open-sans-v18-latin-300.woff
deleted file mode 100644
index 26567ff25..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-300.woff and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-300.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-300.woff2
deleted file mode 100644
index 7bf901c28..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-300.woff2 and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.eot b/community_server/webroot/fonts/open-sans-v18-latin-600.eot
deleted file mode 100644
index b0d46a4ce..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-600.eot and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.svg b/community_server/webroot/fonts/open-sans-v18-latin-600.svg
deleted file mode 100644
index 410561e78..000000000
--- a/community_server/webroot/fonts/open-sans-v18-latin-600.svg
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.ttf b/community_server/webroot/fonts/open-sans-v18-latin-600.ttf
deleted file mode 100644
index 25fdf1eb3..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-600.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.woff b/community_server/webroot/fonts/open-sans-v18-latin-600.woff
deleted file mode 100644
index 9d0eb42db..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-600.woff and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-600.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-600.woff2
deleted file mode 100644
index 5c5d54e2f..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-600.woff2 and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.eot b/community_server/webroot/fonts/open-sans-v18-latin-700.eot
deleted file mode 100644
index 5b9ddb4eb..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-700.eot and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.svg b/community_server/webroot/fonts/open-sans-v18-latin-700.svg
deleted file mode 100644
index 8e6b61ade..000000000
--- a/community_server/webroot/fonts/open-sans-v18-latin-700.svg
+++ /dev/null
@@ -1,334 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.ttf b/community_server/webroot/fonts/open-sans-v18-latin-700.ttf
deleted file mode 100644
index c9a3c7a48..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-700.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.woff b/community_server/webroot/fonts/open-sans-v18-latin-700.woff
deleted file mode 100644
index b8b46d0b4..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-700.woff and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-700.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-700.woff2
deleted file mode 100644
index 3a38286c6..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-700.woff2 and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.eot b/community_server/webroot/fonts/open-sans-v18-latin-800.eot
deleted file mode 100644
index b9d7b260c..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-800.eot and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.svg b/community_server/webroot/fonts/open-sans-v18-latin-800.svg
deleted file mode 100644
index f2a2d9f6e..000000000
--- a/community_server/webroot/fonts/open-sans-v18-latin-800.svg
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.ttf b/community_server/webroot/fonts/open-sans-v18-latin-800.ttf
deleted file mode 100644
index a62af861f..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-800.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.woff b/community_server/webroot/fonts/open-sans-v18-latin-800.woff
deleted file mode 100644
index bdac80d5c..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-800.woff and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-800.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-800.woff2
deleted file mode 100644
index 86a8a8757..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-800.woff2 and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.eot b/community_server/webroot/fonts/open-sans-v18-latin-regular.eot
deleted file mode 100644
index 8f3becf66..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-regular.eot and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.svg b/community_server/webroot/fonts/open-sans-v18-latin-regular.svg
deleted file mode 100644
index 78eb653a7..000000000
--- a/community_server/webroot/fonts/open-sans-v18-latin-regular.svg
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.ttf b/community_server/webroot/fonts/open-sans-v18-latin-regular.ttf
deleted file mode 100644
index fb23764c1..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-regular.ttf and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.woff b/community_server/webroot/fonts/open-sans-v18-latin-regular.woff
deleted file mode 100644
index 39e88ed92..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-regular.woff and /dev/null differ
diff --git a/community_server/webroot/fonts/open-sans-v18-latin-regular.woff2 b/community_server/webroot/fonts/open-sans-v18-latin-regular.woff2
deleted file mode 100644
index e9f58b775..000000000
Binary files a/community_server/webroot/fonts/open-sans-v18-latin-regular.woff2 and /dev/null differ
diff --git a/community_server/webroot/img/50x50.png b/community_server/webroot/img/50x50.png
deleted file mode 100644
index 7eb2b9ad8..000000000
Binary files a/community_server/webroot/img/50x50.png and /dev/null differ
diff --git a/community_server/webroot/img/cake-logo.png b/community_server/webroot/img/cake-logo.png
deleted file mode 100644
index 41939ef5a..000000000
Binary files a/community_server/webroot/img/cake-logo.png and /dev/null differ
diff --git a/community_server/webroot/img/cake.icon.png b/community_server/webroot/img/cake.icon.png
deleted file mode 100644
index 394fa42d5..000000000
Binary files a/community_server/webroot/img/cake.icon.png and /dev/null differ
diff --git a/community_server/webroot/img/cake.logo.svg b/community_server/webroot/img/cake.logo.svg
deleted file mode 100644
index e73abb54b..000000000
--- a/community_server/webroot/img/cake.logo.svg
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/community_server/webroot/img/cake.power.gif b/community_server/webroot/img/cake.power.gif
deleted file mode 100644
index 8f8d570a2..000000000
Binary files a/community_server/webroot/img/cake.power.gif and /dev/null differ
diff --git a/community_server/webroot/img/gradido_logo_web.png b/community_server/webroot/img/gradido_logo_web.png
deleted file mode 100644
index 062997764..000000000
Binary files a/community_server/webroot/img/gradido_logo_web.png and /dev/null differ
diff --git a/community_server/webroot/img/gradido_logo_web.webp b/community_server/webroot/img/gradido_logo_web.webp
deleted file mode 100644
index bff8a245d..000000000
Binary files a/community_server/webroot/img/gradido_logo_web.webp and /dev/null differ
diff --git a/community_server/webroot/img/logo_half.png b/community_server/webroot/img/logo_half.png
deleted file mode 100644
index d6852eab8..000000000
Binary files a/community_server/webroot/img/logo_half.png and /dev/null differ
diff --git a/community_server/webroot/img/logo_half.webp b/community_server/webroot/img/logo_half.webp
deleted file mode 100644
index d0e6c245b..000000000
Binary files a/community_server/webroot/img/logo_half.webp and /dev/null differ
diff --git a/community_server/webroot/img/logo_schrift.png b/community_server/webroot/img/logo_schrift.png
deleted file mode 100644
index 062997764..000000000
Binary files a/community_server/webroot/img/logo_schrift.png and /dev/null differ
diff --git a/community_server/webroot/img/logo_schrift.webp b/community_server/webroot/img/logo_schrift.webp
deleted file mode 100644
index bff8a245d..000000000
Binary files a/community_server/webroot/img/logo_schrift.webp and /dev/null differ
diff --git a/community_server/webroot/index.php b/community_server/webroot/index.php
deleted file mode 100644
index 2e697aedc..000000000
--- a/community_server/webroot/index.php
+++ /dev/null
@@ -1,41 +0,0 @@
-emit($server->run());
-
diff --git a/community_server/webroot/js/basic.js b/community_server/webroot/js/basic.js
deleted file mode 100644
index df53065fe..000000000
--- a/community_server/webroot/js/basic.js
+++ /dev/null
@@ -1,116 +0,0 @@
-// cross browser dom is ready module from:
-// https://www.competa.com/blog/cross-browser-document-ready-with-vanilla-javascript/
-var domIsReady = (function(domIsReady) {
- var isBrowserIeOrNot = function() {
- return (!document.attachEvent || typeof document.attachEvent === "undefined" ? 'not-ie' : 'ie');
- }
-
- domIsReady = function(callback) {
- if (callback && typeof callback === 'function') {
- if (isBrowserIeOrNot() !== 'ie') {
- document.addEventListener("DOMContentLoaded", function() {
- return callback();
- });
- } else {
- document.attachEvent("onreadystatechange", function() {
- if (document.readyState === "complete") {
- return callback();
- }
- });
- }
- } else {
- console.error('The callback is not a function!');
- }
- }
-
- return domIsReady;
-})(domIsReady || {});
-
-
-// vanilla ajax request, json get
-function getJson(basisUrl, method, successFunction, errorFunction, timeoutFunction) {
- var xhr = new XMLHttpRequest();
-
- xhr.onload = function(e) {
- var xhr = e.target;
- //console.log(xhr);
- var jsonReturn = [];
- if (xhr.responseType === 'json') {
- jsonReturn = xhr.response;
- } else {
- jsonReturn = JSON.parse(xhr.responseText);
- }
- successFunction(jsonReturn);
- }
- xhr.onerror = function(e) {
- errorFunction(e);
- }
- xhr.ontimeout = function(e) {
- timeoutFunction(e);
- }
-
- var bustCache = '&' + new Date().getTime();
- //oReq.open('GET', e.target.dataset.url + bustCache, true);
- xhr.open('GET', basisUrl + '?method=' + method + bustCache, true);
- xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
- xhr.responseType = 'json';
- xhr.send();
-}
-
-// cross browser dom is ready
-(function(document, window, domIsReady, undefined) {
- domIsReady(function() {
- var DesktopToggler = document.querySelector('#nav-action');
- var MobileToggler = document.querySelector('#nav-action-mobile');
- var HeaderToggle = document.querySelector('.t-header-toggler');
-
- // SIDEBAR TOGGLE FUNCTION FOR LARGE SCREENS (SCREEN "LG" AND UP)
- if (DesktopToggler) {
- DesktopToggler.addEventListener('click', function() {
- console.log('toggler clicked / Desktop');
- if (document.querySelector('.nav-menu').classList.contains('initial')) {
- document.querySelector('.nav-menu').classList.remove('initial');
- document.querySelector('.nav-menu').classList.add('nav-menu-minimized');
- } else {
- document.querySelector('.nav-menu').classList.toggle('nav-menu-minimized');
- document.querySelector('.nav-menu').classList.toggle('nav-menu-maximized');
- }
- let big = document.querySelectorAll('.logo.big');
- big.forEach(function(el) {
- el.classList.toggle('visible');
- });
- let small = document.querySelectorAll('.logo.small');
- small.forEach(function(el) {
- el.classList.toggle('visible');
- });
- });
- }
-
- // SIDEBAR TOGGLE FUNCTION FOR MOBILE (SCREEN "MD" AND DOWN)
- if (MobileToggler) {
- MobileToggler.addEventListener('click', function() {
- console.log('toggler clicked / Desktop');
- if (document.querySelector('.nav-menu').classList.contains('initial')) {
- document.querySelector('.nav-menu').classList.remove('initial');
- document.querySelector('.nav-menu').classList.toggle('nav-menu-maximized');
- } else {
- document.querySelector('.nav-menu').classList.toggle('nav-menu-minimized');
- document.querySelector('.nav-menu').classList.toggle('nav-menu-maximized');
- }
- let big = document.querySelectorAll('.logo.big');
- big.forEach(function(el) {
- el.classList.toggle('visible');
- });
- let small = document.querySelectorAll('.logo.small');
- small.forEach(function(el) {
- el.classList.toggle('visible');
- });
- });
- }
- if (HeaderToggle) {
- HeaderToggle.addEventListener('click', function() {
- HeaderToggle.classList.toggle('arrow');
- });
- }
- });
-})(document, window, domIsReady);
\ No newline at end of file
diff --git a/community_server/webroot/js/core.js b/community_server/webroot/js/core.js
deleted file mode 100644
index 9678001c2..000000000
--- a/community_server/webroot/js/core.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(T,e){"use strict";var t=[],x=T.document,i=Object.getPrototypeOf,a=t.slice,g=t.concat,l=t.push,r=t.indexOf,n={},o=n.toString,m=n.hasOwnProperty,s=m.toString,u=s.call(Object),v={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},_=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,noModule:!0};function b(e,t,n){var i,r=(t=t||x).createElement("script");if(r.text=e,n)for(i in c)n[i]&&(r[i]=n[i]);t.head.appendChild(r).parentNode.removeChild(r)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var C=function(e,t){return new C.fn.init(e,t)},f=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function h(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!y(e)&&!_(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+P+")"+P+"*"),K=new RegExp("="+P+"*([^\\]'\"]*?)"+P+"*\\]","g"),$=new RegExp(F),Q=new RegExp("^"+q+"$"),V={ID:new RegExp("^#("+q+")"),CLASS:new RegExp("^\\.("+q+")"),TAG:new RegExp("^("+q+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:new RegExp("^(?:"+H+")$","i"),needsContext:new RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},z=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,X=/^[^{]+\{\s*\[native \w/,G=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,J=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),ee=function(e,t,n){var i="0x"+t-65536;return i!=i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){E()},re=ye(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{O.apply(t=j.call(y.childNodes),y.childNodes),t[y.childNodes.length].nodeType}catch(n){O={apply:t.length?function(e,t){k.apply(e,j.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function oe(e,t,n,i){var r,o,s,a,l,u,c,f=t&&t.ownerDocument,h=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==h&&9!==h&&11!==h)return n;if(!i&&((t?t.ownerDocument||t:y)!==T&&E(t),t=t||T,x)){if(11!==h&&(l=G.exec(e)))if(r=l[1]){if(9===h){if(!(s=t.getElementById(r)))return n;if(s.id===r)return n.push(s),n}else if(f&&(s=f.getElementById(r))&&v(t,s)&&s.id===r)return n.push(s),n}else{if(l[2])return O.apply(n,t.getElementsByTagName(e)),n;if((r=l[3])&&d.getElementsByClassName&&t.getElementsByClassName)return O.apply(n,t.getElementsByClassName(r)),n}if(d.qsa&&!D[e+" "]&&(!m||!m.test(e))){if(1!==h)f=t,c=e;else if("object"!==t.nodeName.toLowerCase()){for((a=t.getAttribute("id"))?a=a.replace(te,ne):t.setAttribute("id",a=C),o=(u=p(e)).length;o--;)u[o]="#"+a+" "+ve(u[o]);c=u.join(","),f=J.test(e)&&ge(t.parentNode)||t}if(c)try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){}finally{a===C&&t.removeAttribute("id")}}}return g(e.replace(W,"$1"),t,n,i)}function se(){var i=[];return function e(t,n){return i.push(t+" ")>b.cacheLength&&delete e[i.shift()],e[t+" "]=n}}function ae(e){return e[C]=!0,e}function le(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ue(e,t){for(var n=e.split("|"),i=n.length;i--;)b.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function fe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function de(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&re(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function pe(s){return ae(function(o){return o=+o,ae(function(e,t){for(var n,i=s([],e.length,o),r=i.length;r--;)e[n=i[r]]&&(e[n]=!(t[n]=e[n]))})})}function ge(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in d=oe.support={},r=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},E=oe.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:y;return i!==T&&9===i.nodeType&&i.documentElement&&(s=(T=i).documentElement,x=!r(T),y!==T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",ie,!1):n.attachEvent&&n.attachEvent("onunload",ie)),d.attributes=le(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=le(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=X.test(T.getElementsByClassName),d.getById=le(function(e){return s.appendChild(e).id=C,!T.getElementsByName||!T.getElementsByName(C).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&x){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(Z,ee);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&x){var n,i,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),i=0;o=r[i++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[r++];)1===n.nodeType&&i.push(n);return i},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&x)return t.getElementsByClassName(e)},a=[],m=[],(d.qsa=X.test(T.querySelectorAll))&&(le(function(e){s.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\["+P+"*(?:value|"+H+")"),e.querySelectorAll("[id~="+C+"-]").length||m.push("~="),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+C+"+*").length||m.push(".#.+[+~]")}),le(function(e){e.innerHTML=" ";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name"+P+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&m.push(":enabled",":disabled"),s.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")})),(d.matchesSelector=X.test(c=s.matches||s.webkitMatchesSelector||s.mozMatchesSelector||s.oMatchesSelector||s.msMatchesSelector))&&le(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),a.push("!=",F)}),m=m.length&&new RegExp(m.join("|")),a=a.length&&new RegExp(a.join("|")),t=X.test(s.compareDocumentPosition),v=t||X.test(s.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},A=t?function(e,t){if(e===t)return u=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument===y&&v(y,e)?-1:t===T||t.ownerDocument===y&&v(y,t)?1:l?L(l,e)-L(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return u=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e===T?-1:t===T?1:r?-1:o?1:l?L(l,e)-L(l,t):0;if(r===o)return ce(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?ce(s[i],a[i]):s[i]===y?-1:a[i]===y?1:0}),T},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==T&&E(e),t=t.replace(K,"='$1']"),d.matchesSelector&&x&&!D[t+" "]&&(!a||!a.test(t))&&(!m||!m.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&$.test(n)&&(t=p(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=h[e+" "];return t||(t=new RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&h(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,i,r){return function(e){var t=oe.attr(e,n);return null==t?"!="===i:!i||(t+="","="===i?t===r:"!="===i?t!==r:"^="===i?r&&0===t.indexOf(r):"*="===i?r&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function N(e,n,i){return y(n)?C.grep(e,function(e,t){return!!n.call(e,t,e)!==i}):n.nodeType?C.grep(e,function(e){return e===n!==i}):"string"!=typeof n?C.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(C.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||I,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(C):C.makeArray(e,this);if(!(i="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:k.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:x,!0)),A.test(i[1])&&C.isPlainObject(t))for(i in t)y(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(r=x.getElementById(i[2]))&&(this[0]=r,this.length=1),this}).prototype=C.fn,I=C(x);var O=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function L(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]+)/i,ce=/^$|^module$|\/(?:java|ecma)script/i,fe={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function he(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&D(e,t)?C.merge([e],n):n}function de(e,t){for(var n=0,i=e.length;nx",v.noCloneChecked=!!pe.cloneNode(!0).lastChild.defaultValue;var ye=x.documentElement,_e=/^key/,be=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,we=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function Te(){return!1}function xe(){try{return x.activeElement}catch(e){}}function Ce(e,t,n,i,r,o){var s,a;if("object"==typeof t){for(a in"string"!=typeof n&&(i=i||n,n=void 0),t)Ce(e,a,n,i,t[a],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=Te;else if(!r)return e;return 1===o&&(s=r,(r=function(e){return C().off(e),s.apply(this,arguments)}).guid=s.guid||(s.guid=C.guid++)),e.each(function(){C.event.add(this,t,r,i,n)})}C.event={global:{},add:function(t,e,n,i,r){var o,s,a,l,u,c,f,h,d,p,g,m=Y.get(t);if(m)for(n.handler&&(n=(o=n).handler,r=o.selector),r&&C.find.matchesSelector(ye,r),n.guid||(n.guid=C.guid++),(l=m.events)||(l=m.events={}),(s=m.handle)||(s=m.handle=function(e){return void 0!==C&&C.event.triggered!==e.type?C.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(H)||[""]).length;u--;)d=g=(a=we.exec(e[u])||[])[1],p=(a[2]||"").split(".").sort(),d&&(f=C.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,f=C.event.special[d]||{},c=C.extend({type:d,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&C.expr.match.needsContext.test(r),namespace:p.join(".")},o),(h=l[d])||((h=l[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,i,p,s)||t.addEventListener&&t.addEventListener(d,s)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),r?h.splice(h.delegateCount++,0,c):h.push(c),C.event.global[d]=!0)},remove:function(e,t,n,i,r){var o,s,a,l,u,c,f,h,d,p,g,m=Y.hasData(e)&&Y.get(e);if(m&&(l=m.events)){for(u=(t=(t||"").match(H)||[""]).length;u--;)if(d=g=(a=we.exec(t[u])||[])[1],p=(a[2]||"").split(".").sort(),d){for(f=C.event.special[d]||{},h=l[d=(i?f.delegateType:f.bindType)||d]||[],a=a[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=h.length;o--;)c=h[o],!r&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||i&&i!==c.selector&&("**"!==i||!c.selector)||(h.splice(o,1),c.selector&&h.delegateCount--,f.remove&&f.remove.call(e,c));s&&!h.length&&(f.teardown&&!1!==f.teardown.call(e,p,m.handle)||C.removeEvent(e,d,m.handle),delete l[d])}else for(d in l)C.event.remove(e,d+t[u],n,i,!0);C.isEmptyObject(l)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,o,s,a=C.event.fix(e),l=new Array(arguments.length),u=(Y.get(this,"events")||{})[a.type]||[],c=C.event.special[a.type]||{};for(l[0]=a,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,De=/
-
-
-
-
-
-
-
-
-
- Startseite
- -
- Überprüfe Transaktion
-
-
-
-
-
-
-
- Copyright © 2020 Gradido
-
-
- 98.597 ms
-
-
-
Community Server in Entwicklung
-
Alpha 0.21.KW21.05
-
-
-
-
-